From c1f67b2d6840936801ac26d8797230a4cd99e69a Mon Sep 17 00:00:00 2001 From: Shigma Date: Sun, 28 Jan 2024 02:20:20 +0800 Subject: [PATCH] feat(esbuild): handle `.cjs` and `.mjs` extensions --- packages/esbuild/package.json | 4 ++-- packages/esbuild/src/index.ts | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/esbuild/package.json b/packages/esbuild/package.json index ecaa3e3..e329457 100644 --- a/packages/esbuild/package.json +++ b/packages/esbuild/package.json @@ -1,7 +1,7 @@ { "name": "yakumo-esbuild", "description": "Esbuild support for Yakumo", - "version": "1.0.0-beta.1", + "version": "1.0.0-beta.2", "type": "module", "main": "lib/index.js", "typings": "lib/index.d.ts", @@ -32,7 +32,7 @@ "yakumo": "^1.0.0-beta.2" }, "dependencies": { - "tsconfig-utils": "^4.0.3", + "tsconfig-utils": "^4.0.4", "yaml": "^2.3.4" } } diff --git a/packages/esbuild/src/index.ts b/packages/esbuild/src/index.ts index acd2f7b..700ee10 100644 --- a/packages/esbuild/src/index.ts +++ b/packages/esbuild/src/index.ts @@ -126,6 +126,13 @@ async function compile(relpath: string, meta: PackageJson, yakumo: Yakumo) { return } + // transform options by extension + if (pattern.endsWith('.cjs')) { + options = nodeOptions + } else if (pattern.endsWith('.mjs')) { + options = browserOptions + } + // https://nodejs.org/api/packages.html#subpath-patterns // `*` maps expose nested subpaths as it is a string replacement syntax only const outExt = extname(pattern) @@ -167,26 +174,27 @@ async function compile(relpath: string, meta: PackageJson, yakumo: Yakumo) { for (const key in pattern) { if (key === 'node' || key === 'require' || key.startsWith('.')) { - addConditionalExport(pattern[key], nodeOptions) + addConditionalExport(pattern[key], options) } else { addConditionalExport(pattern[key], browserOptions) } } } - addExport(meta.main, meta.type === 'module' ? browserOptions : nodeOptions) + const defaultOptions = meta.type === 'module' ? browserOptions : nodeOptions + addExport(meta.main, defaultOptions) addExport(meta.module, browserOptions) - addConditionalExport(meta.exports, nodeOptions) + addConditionalExport(meta.exports, defaultOptions) if (!meta.exports) { addExport('package.json', nodeOptions) } if (typeof meta.bin === 'string') { - addExport(meta.bin, nodeOptions) + addExport(meta.bin, defaultOptions) } else if (meta.bin) { for (const key in meta.bin) { - addExport(meta.bin[key], nodeOptions) + addExport(meta.bin[key], defaultOptions) } }