From f260a6f4aa3c4733ebac3fd62957801e21f86405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Zaera=20Avell=C3=B3n?= Date: Mon, 4 Mar 2024 09:24:28 +0100 Subject: [PATCH 1/3] fix: make local aliases work See https://liferay.atlassian.net/browse/LPD-19292 and https://github.com/defunctzombie/package-browser-field-spec?tab=readme-ov-file#alternate-main---basic for more info. --- .../src/alias.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/alias.ts b/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/alias.ts index 22f9f70f2e..b7f43a8608 100644 --- a/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/alias.ts +++ b/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/alias.ts @@ -117,7 +117,11 @@ export function loadAliases( } if (aliasConfig === false || typeof aliasConfig === 'string') { - const main = pkgJson['main'] || './index.js'; + let main = pkgJson['main'] || './index.js'; + + if (!main.startsWith('.')) { + main = `./${main}`; + } aliases[main] = aliasConfig; } @@ -140,6 +144,18 @@ export function loadAliases( delete aliases[key]; } }); + + // Normalize local aliases to make them start with `./` + + Object.keys(aliases).forEach((key) => { + if (key.startsWith('.')) { + const value = aliases[key]; + + if (typeof value === 'string' && !value.startsWith('.')) { + aliases[key] = `./${value}`; + } + } + }); } // Store in cache From 3ccbf52bba1b794cf8bdf68ea8c3e4132af23ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Zaera=20Avell=C3=B3n?= Date: Mon, 4 Mar 2024 14:13:35 +0100 Subject: [PATCH 2/3] fix: don't replace files when they are aliased to themselves --- .../src/index.ts | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/maintenance/projects/js-toolkit/packages/liferay-npm-bundler-plugin-replace-browser-modules/src/index.ts b/maintenance/projects/js-toolkit/packages/liferay-npm-bundler-plugin-replace-browser-modules/src/index.ts index 34811d94c9..918e367a74 100644 --- a/maintenance/projects/js-toolkit/packages/liferay-npm-bundler-plugin-replace-browser-modules/src/index.ts +++ b/maintenance/projects/js-toolkit/packages/liferay-npm-bundler-plugin-replace-browser-modules/src/index.ts @@ -107,22 +107,26 @@ function processAliases( const absToFile = alias.absDir.join( new FilePath(alias.to as string, {posix: true}) ); - const fromRelToFile = absFromFile - .dirname() - .relative(absToFile); - rewriteFile( - absFromFile, - `/* redirected by alias field(s) in ${rootRelAbsDirPosixPath} */`, - `module.exports = require('./${fromRelToFile.asPosix}');` - ); + if (!absToFile.is(absFromFile)) { + const fromRelToFile = absFromFile + .dirname() + .relative(absToFile); + + rewriteFile( + absFromFile, + `/* redirected by alias field(s) in ${rootRelAbsDirPosixPath} */`, + `module.exports = require('./${fromRelToFile.asPosix}');` + ); + + log.info( + 'replace-browser-modules', + `Redirected file '${rootRelFilePosixPath}' to ` + + `'./${fromRelToFile.asPosix}' as configured in ` + + `'${rootRelAbsDirPosixPath}'` + ).linkToCode(2); + } - log.info( - 'replace-browser-modules', - `Redirected file '${rootRelFilePosixPath}' to ` + - `'./${fromRelToFile.asPosix}' as configured in ` + - `'${rootRelAbsDirPosixPath}'` - ).linkToCode(2); break; } From cd7def2c7ee075ccb6102fa368ad633cacc23cd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Zaera=20Avell=C3=B3n?= Date: Mon, 4 Mar 2024 14:26:34 +0100 Subject: [PATCH 3/3] test: add tests for aliases parsing --- .../__fixtures__/alias/alias-without-dot.json | 5 +++++ .../__fixtures__/alias/main-without-dot.json | 4 ++++ .../src/__tests__/alias.test.ts | 17 +++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/__fixtures__/alias/alias-without-dot.json create mode 100644 maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/__fixtures__/alias/main-without-dot.json diff --git a/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/__fixtures__/alias/alias-without-dot.json b/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/__fixtures__/alias/alias-without-dot.json new file mode 100644 index 0000000000..46c2a7669c --- /dev/null +++ b/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/__fixtures__/alias/alias-without-dot.json @@ -0,0 +1,5 @@ +{ + "browser": { + "./index": "index-shim.js" + } +} diff --git a/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/__fixtures__/alias/main-without-dot.json b/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/__fixtures__/alias/main-without-dot.json new file mode 100644 index 0000000000..4105a487f4 --- /dev/null +++ b/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/__fixtures__/alias/main-without-dot.json @@ -0,0 +1,4 @@ +{ + "main": "index", + "browser": "index-shim.js" +} diff --git a/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/alias.test.ts b/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/alias.test.ts index 50032a8b80..d678532a46 100644 --- a/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/alias.test.ts +++ b/maintenance/projects/js-toolkit/packages/liferay-npm-build-tools-common/src/__tests__/alias.test.ts @@ -107,4 +107,21 @@ describe('loadAliases', () => { expect(aliases['toString']).toBeUndefined(); }); + + it('works when the main field does not start with .', () => { + const aliases = loadAliases(fixturesDir.join('main-without-dot.json'), [ + 'browser', + ]); + + expect(aliases['./index']).toEqual('./index-shim.js'); + }); + + it('works when value does not start with .', () => { + const aliases = loadAliases( + fixturesDir.join('alias-without-dot.json'), + ['browser'] + ); + + expect(aliases['./index']).toEqual('./index-shim.js'); + }); });