From a582fb664c47375b94827c97786cbe3ad92937b5 Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Tue, 28 Mar 2023 08:37:42 +0200 Subject: [PATCH 1/9] fix entry names config --- .changeset/tough-parrots-travel.md | 6 +++ .../esbuild-plugin-meta-url/test/test.spec.js | 40 +++++++++++++++++-- packages/esbuild-plugin-worker/lib/index.js | 2 +- packages/esbuild-rna/lib/Build.js | 6 ++- packages/rna-config-loader/lib/index.js | 4 +- 5 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 .changeset/tough-parrots-travel.md diff --git a/.changeset/tough-parrots-travel.md b/.changeset/tough-parrots-travel.md new file mode 100644 index 00000000..aeb0f16a --- /dev/null +++ b/.changeset/tough-parrots-travel.md @@ -0,0 +1,6 @@ +--- +"@chialab/esbuild-rna": patch +"@chialab/rna-config-loader": patch +--- + +Fix entry names config. diff --git a/packages/esbuild-plugin-meta-url/test/test.spec.js b/packages/esbuild-plugin-meta-url/test/test.spec.js index 5fb946e9..4b42f064 100644 --- a/packages/esbuild-plugin-meta-url/test/test.spec.js +++ b/packages/esbuild-plugin-meta-url/test/test.spec.js @@ -16,6 +16,7 @@ describe('esbuild-plugin-meta-url', () => { }, format: 'esm', outdir: 'out', + assetNames: '[name]', loader: { '.txt': 'file', }, @@ -102,7 +103,7 @@ export const file = new URL(fileName, import.meta.url);`, }); expect(result.text).to.be.equal(`// test.spec.js -var file = new URL("./file.txt?hash=4e1243bd", import.meta.url); +var file = new URL("./file-4e1243bd.txt?hash=4e1243bd", import.meta.url); export { file }; @@ -159,7 +160,7 @@ export { expect(result.text).to.be.equal(`(() => { var __currentScriptUrl__ = document.currentScript && document.currentScript.src || document.baseURI; - var file = new URL("./file.txt?hash=4e1243bd", __currentScriptUrl__); + var file = new URL("./file-4e1243bd.txt?hash=4e1243bd", __currentScriptUrl__); })(); `); expect(file.text).to.be.equal('test\n'); @@ -211,7 +212,7 @@ __export(test_spec_exports, { file: () => file }); module.exports = __toCommonJS(test_spec_exports); -var file = new URL("./file.txt?hash=4e1243bd", "file://" + __filename); +var file = new URL("./file-4e1243bd.txt?hash=4e1243bd", "file://" + __filename); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { file @@ -234,6 +235,7 @@ var file = new URL("./file.txt?hash=4e1243bd", "file://" + __filename); loader: { '.txt': 'file', }, + assetNames: '[name]', bundle: true, write: false, plugins: [ @@ -352,4 +354,36 @@ export { })(); `); }); + + it('should load a file outside and src into the dist folder', async () => { + const { outputFiles: [result, file] } = await esbuild.build({ + absWorkingDir: fileURLToPath(new URL('.', import.meta.url)), + stdin: { + resolveDir: fileURLToPath(new URL('src/', import.meta.url)), + sourcefile: fileURLToPath(new URL('src/index.js', import.meta.url)), + contents: 'export const file = new URL(\'../file.txt\', import.meta.url);', + }, + format: 'esm', + outdir: 'out', + outbase: fileURLToPath(new URL('src/', import.meta.url)), + assetNames: '[dir]/[name]-[hash]', + loader: { + '.txt': 'file', + }, + bundle: true, + write: false, + plugins: [ + metaUrl(), + ], + }); + + expect(result.text).to.be.equal(`// src/index.js +var file = new URL("./_.._/file-4e1243bd.txt?hash=4e1243bd", import.meta.url); +export { + file +}; +`); + expect(file.text).to.be.equal('test\n'); + expect(path.join(path.dirname(result.path), '_.._')).to.be.equal(path.dirname(file.path)); + }); }); diff --git a/packages/esbuild-plugin-worker/lib/index.js b/packages/esbuild-plugin-worker/lib/index.js index 746be034..1b0e5342 100644 --- a/packages/esbuild-plugin-worker/lib/index.js +++ b/packages/esbuild-plugin-worker/lib/index.js @@ -202,7 +202,7 @@ export default function({ constructors = ['Worker', 'SharedWorker'], proxy = fal importer: args.path, namespace: 'file', resolveDir: path.dirname(args.path), - pluginData: undefined, + pluginData: null, }); if (external) { diff --git a/packages/esbuild-rna/lib/Build.js b/packages/esbuild-rna/lib/Build.js index 88a04c29..faed008f 100644 --- a/packages/esbuild-rna/lib/Build.js +++ b/packages/esbuild-rna/lib/Build.js @@ -839,6 +839,10 @@ export class Build { }) .replace('[dir]', () => path.relative(outBase, path.dirname(filePath))) .replace('[hash]', () => this.hash(buffer)) + .split(path.sep) + .map((part) => (part === '..' ? '_.._' : part)) + .filter((part) => part !== '.') + .join(path.sep) }${path.extname(inputFile)}`; } @@ -917,7 +921,7 @@ export class Build { return path.resolve( this.getWorkingDir(), this.getOutDir() || this.getSourceRoot(), - this.computeName(this.getOption(key) || '[dir]/[name]', filePath, buffer) + this.computeName(this.getOption(key) || (type === Build.ASSET ? '[name]-[hash]' : '[name]'), filePath, buffer) ); } diff --git a/packages/rna-config-loader/lib/index.js b/packages/rna-config-loader/lib/index.js index 1d128433..57b5b797 100644 --- a/packages/rna-config-loader/lib/index.js +++ b/packages/rna-config-loader/lib/index.js @@ -119,8 +119,8 @@ export function getEntryConfig(entrypoint, config) { splitting: entrypoint.splitting ?? config.splitting, globalName: entrypoint.globalName || entrypoint.name || (format === 'iife' ? camelize(Array.isArray(entrypoint.input) ? entrypoint.input[0] : entrypoint.input) : undefined), entryNames: entrypoint.entryNames || config.entryNames || '[dir]/[name]', - chunkNames: entrypoint.chunkNames || config.chunkNames || '[dir]/[name]', - assetNames: entrypoint.assetNames || config.assetNames || '[dir]/[name]', + chunkNames: entrypoint.chunkNames || config.chunkNames || '[name]-[hash]', + assetNames: entrypoint.assetNames || config.assetNames || '[name]-[hash]', define: { ...(entrypoint.define || {}), ...(config.define || {}), From e1ee6704f8928e91023947f5d89d3478bab5c195 Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Tue, 28 Mar 2023 08:48:48 +0200 Subject: [PATCH 2/9] fix computeName method in windows --- packages/esbuild-rna/lib/Build.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/esbuild-rna/lib/Build.js b/packages/esbuild-rna/lib/Build.js index faed008f..58924cc2 100644 --- a/packages/esbuild-rna/lib/Build.js +++ b/packages/esbuild-rna/lib/Build.js @@ -839,10 +839,10 @@ export class Build { }) .replace('[dir]', () => path.relative(outBase, path.dirname(filePath))) .replace('[hash]', () => this.hash(buffer)) - .split(path.sep) + .split('/') .map((part) => (part === '..' ? '_.._' : part)) - .filter((part) => part !== '.') - .join(path.sep) + .filter((part) => part && part !== '.') + .join('/') }${path.extname(inputFile)}`; } From 94ea824921a31bcfcbe9b75d0f77c227a1278004 Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Tue, 28 Mar 2023 09:03:00 +0200 Subject: [PATCH 3/9] fix computeName method in windows (again) --- packages/esbuild-rna/lib/Build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/esbuild-rna/lib/Build.js b/packages/esbuild-rna/lib/Build.js index 58924cc2..8f5dba22 100644 --- a/packages/esbuild-rna/lib/Build.js +++ b/packages/esbuild-rna/lib/Build.js @@ -839,7 +839,7 @@ export class Build { }) .replace('[dir]', () => path.relative(outBase, path.dirname(filePath))) .replace('[hash]', () => this.hash(buffer)) - .split('/') + .split(path.sep) .map((part) => (part === '..' ? '_.._' : part)) .filter((part) => part && part !== '.') .join('/') From 39dce766fff759050e1b77b3ad5ec7a18b3e208e Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Tue, 28 Mar 2023 10:11:24 +0200 Subject: [PATCH 4/9] fix computeName in windows (again again) --- packages/esbuild-rna/lib/Build.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/esbuild-rna/lib/Build.js b/packages/esbuild-rna/lib/Build.js index 8f5dba22..7841589c 100644 --- a/packages/esbuild-rna/lib/Build.js +++ b/packages/esbuild-rna/lib/Build.js @@ -827,20 +827,20 @@ export class Build { return `${pattern .replace('[name]', () => path.basename(inputFile, path.extname(inputFile))) .replace('[ext]', () => path.extname(inputFile)) - .replace(/(\/)?\[dir\](\/)?/, (fullMatch, match1, match2) => { - const dir = path.relative(outBase, path.dirname(filePath)); - if (dir) { - return `${match1 || ''}${dir}${match2 || ''}`; + .replace('[hash]', () => this.hash(buffer)) + .split(path.sep) + .map((part) => { + if (part === '[dir]') { + return path.relative(outBase, path.dirname(filePath)) || ''; } - if (!match1 && match2) { - return ''; + return part; + }) + .map((part) => { + if (part === '..') { + return '_.._'; } - return match1 || ''; + return part; }) - .replace('[dir]', () => path.relative(outBase, path.dirname(filePath))) - .replace('[hash]', () => this.hash(buffer)) - .split(path.sep) - .map((part) => (part === '..' ? '_.._' : part)) .filter((part) => part && part !== '.') .join('/') }${path.extname(inputFile)}`; From 69de17fb01fc70de7cc71fee502efacd788f3e11 Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Tue, 28 Mar 2023 10:37:52 +0200 Subject: [PATCH 5/9] attempt to fix computeName in windows --- packages/esbuild-rna/lib/Build.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/esbuild-rna/lib/Build.js b/packages/esbuild-rna/lib/Build.js index 7841589c..395a18ba 100644 --- a/packages/esbuild-rna/lib/Build.js +++ b/packages/esbuild-rna/lib/Build.js @@ -828,13 +828,13 @@ export class Build { .replace('[name]', () => path.basename(inputFile, path.extname(inputFile))) .replace('[ext]', () => path.extname(inputFile)) .replace('[hash]', () => this.hash(buffer)) - .split(path.sep) - .map((part) => { + .split('/') + .reduce((parts, part) => { if (part === '[dir]') { - return path.relative(outBase, path.dirname(filePath)) || ''; + return [...parts, ...(path.relative(outBase, path.dirname(filePath)) || '').split(path.sep)]; } - return part; - }) + return [...parts, part]; + }, /** @type {string[]} */ ([])) .map((part) => { if (part === '..') { return '_.._'; From e56ca5a16fb671514e98719d8b18e530578d244b Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Tue, 28 Mar 2023 11:02:30 +0200 Subject: [PATCH 6/9] attempt to fix computeName in windows --- packages/esbuild-plugin-meta-url/lib/index.js | 2 +- packages/esbuild-rna/lib/Build.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/esbuild-plugin-meta-url/lib/index.js b/packages/esbuild-plugin-meta-url/lib/index.js index 181b6533..d4d8cd13 100644 --- a/packages/esbuild-plugin-meta-url/lib/index.js +++ b/packages/esbuild-plugin-meta-url/lib/index.js @@ -241,7 +241,7 @@ export default function({ emit = true } = {}) { } } - helpers.overwrite(startToken.start, endToken.end, `new URL('./${entryPoint}', ${baseUrl})`); + helpers.overwrite(startToken.start, endToken.end, `new URL('./${entryPoint.split(path.sep).join('/')}', ${baseUrl})`); return; } diff --git a/packages/esbuild-rna/lib/Build.js b/packages/esbuild-rna/lib/Build.js index 395a18ba..590fe313 100644 --- a/packages/esbuild-rna/lib/Build.js +++ b/packages/esbuild-rna/lib/Build.js @@ -828,7 +828,7 @@ export class Build { .replace('[name]', () => path.basename(inputFile, path.extname(inputFile))) .replace('[ext]', () => path.extname(inputFile)) .replace('[hash]', () => this.hash(buffer)) - .split('/') + .split(path.sep) .reduce((parts, part) => { if (part === '[dir]') { return [...parts, ...(path.relative(outBase, path.dirname(filePath)) || '').split(path.sep)]; @@ -842,7 +842,7 @@ export class Build { return part; }) .filter((part) => part && part !== '.') - .join('/') + .join(path.sep) }${path.extname(inputFile)}`; } From 3344dac204c775f6d621de2a87589484d9cbcd4a Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Wed, 29 Mar 2023 10:22:01 +0200 Subject: [PATCH 7/9] try to fix computeName in windows --- packages/esbuild-plugin-meta-url/lib/index.js | 2 +- packages/esbuild-rna/lib/Build.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/esbuild-plugin-meta-url/lib/index.js b/packages/esbuild-plugin-meta-url/lib/index.js index d4d8cd13..181b6533 100644 --- a/packages/esbuild-plugin-meta-url/lib/index.js +++ b/packages/esbuild-plugin-meta-url/lib/index.js @@ -241,7 +241,7 @@ export default function({ emit = true } = {}) { } } - helpers.overwrite(startToken.start, endToken.end, `new URL('./${entryPoint.split(path.sep).join('/')}', ${baseUrl})`); + helpers.overwrite(startToken.start, endToken.end, `new URL('./${entryPoint}', ${baseUrl})`); return; } diff --git a/packages/esbuild-rna/lib/Build.js b/packages/esbuild-rna/lib/Build.js index 590fe313..395a18ba 100644 --- a/packages/esbuild-rna/lib/Build.js +++ b/packages/esbuild-rna/lib/Build.js @@ -828,7 +828,7 @@ export class Build { .replace('[name]', () => path.basename(inputFile, path.extname(inputFile))) .replace('[ext]', () => path.extname(inputFile)) .replace('[hash]', () => this.hash(buffer)) - .split(path.sep) + .split('/') .reduce((parts, part) => { if (part === '[dir]') { return [...parts, ...(path.relative(outBase, path.dirname(filePath)) || '').split(path.sep)]; @@ -842,7 +842,7 @@ export class Build { return part; }) .filter((part) => part && part !== '.') - .join(path.sep) + .join('/') }${path.extname(inputFile)}`; } From ebbcfeebbf90fb74a55d7014c0934ea636ee2e34 Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Wed, 29 Mar 2023 10:41:09 +0200 Subject: [PATCH 8/9] try to fix computeName in windows --- packages/esbuild-plugin-meta-url/lib/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/esbuild-plugin-meta-url/lib/index.js b/packages/esbuild-plugin-meta-url/lib/index.js index 181b6533..cddba37a 100644 --- a/packages/esbuild-plugin-meta-url/lib/index.js +++ b/packages/esbuild-plugin-meta-url/lib/index.js @@ -241,7 +241,8 @@ export default function({ emit = true } = {}) { } } - helpers.overwrite(startToken.start, endToken.end, `new URL('./${entryPoint}', ${baseUrl})`); + console.log('>', entryPoint, path.sep, entryPoint.split(path.sep).join('/')); + helpers.overwrite(startToken.start, endToken.end, `new URL('./${entryPoint.split(path.sep).join('/')}', ${baseUrl})`); return; } From 70742353368a7d87bba3655585aaaae5943f4348 Mon Sep 17 00:00:00 2001 From: Edoardo Cavazza Date: Wed, 29 Mar 2023 11:15:33 +0200 Subject: [PATCH 9/9] remove console log --- packages/esbuild-plugin-meta-url/lib/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/esbuild-plugin-meta-url/lib/index.js b/packages/esbuild-plugin-meta-url/lib/index.js index cddba37a..d4d8cd13 100644 --- a/packages/esbuild-plugin-meta-url/lib/index.js +++ b/packages/esbuild-plugin-meta-url/lib/index.js @@ -241,7 +241,6 @@ export default function({ emit = true } = {}) { } } - console.log('>', entryPoint, path.sep, entryPoint.split(path.sep).join('/')); helpers.overwrite(startToken.start, endToken.end, `new URL('./${entryPoint.split(path.sep).join('/')}', ${baseUrl})`); return; }