From 1b88c2b4085adce649a4c3bafcd402ab402cf324 Mon Sep 17 00:00:00 2001 From: Kunal Kumar Date: Thu, 3 Sep 2026 00:19:52 +0530 Subject: [PATCH] Allow .cjs and .mjs files to be shadowed The customizations glob omitted cjs and mjs, so a shadow of a core module such as constants/Languages.cjs was never collected and never became a webpack alias. Nothing warned; the shadow was silently ignored. The alias-key extension strip is left alone on purpose: cjs and mjs modules are imported with their extension, so the key must retain it. Closes #8366 --- packages/registry/__tests__/addon-registry.test.js | 3 +++ .../node_modules/@plone/volto/src/constants/Languages.cjs | 1 + .../src/customizations/constants/Languages.cjs | 1 + packages/registry/news/8366.bugfix | 1 + packages/registry/src/addon-registry/addon-registry.ts | 2 +- 5 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/constants/Languages.cjs create mode 100644 packages/registry/__tests__/fixtures/test-volto-project/src/customizations/constants/Languages.cjs create mode 100644 packages/registry/news/8366.bugfix diff --git a/packages/registry/__tests__/addon-registry.test.js b/packages/registry/__tests__/addon-registry.test.js index ca959d7c4e3..1f58d251e8a 100644 --- a/packages/registry/__tests__/addon-registry.test.js +++ b/packages/registry/__tests__/addon-registry.test.js @@ -230,6 +230,9 @@ describe('AddonRegistry - Project', () => { '@plone/volto/LanguageSwitcher': `${base}/src/customizations/LanguageSwitcher.js`, '@plone/volto/TSComponent': `${base}/src/customizations/TSComponent.jsx`, '@plone/volto/client': `${base}/src/customizations/client.js`, + // .cjs is shadowable, and the alias key keeps its extension because + // such modules are imported with it. See #8366. + '@plone/volto/constants/Languages.cjs': `${base}/src/customizations/constants/Languages.cjs`, '@plone/volto/routes': `${base}/src/customizations/routes.tsx`, 'test-addon/testaddon': `${base}/src/custom-addons/test-addon/testaddon.js`, '@plone/volto/server': `${base}/src/customizations/server.jsx`, diff --git a/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/constants/Languages.cjs b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/constants/Languages.cjs new file mode 100644 index 00000000000..b4234b4bfdc --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/node_modules/@plone/volto/src/constants/Languages.cjs @@ -0,0 +1 @@ +module.exports = { en: 'English' }; diff --git a/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/constants/Languages.cjs b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/constants/Languages.cjs new file mode 100644 index 00000000000..fa2ddf64805 --- /dev/null +++ b/packages/registry/__tests__/fixtures/test-volto-project/src/customizations/constants/Languages.cjs @@ -0,0 +1 @@ +module.exports = { en: 'English', sv: 'Svenska' }; diff --git a/packages/registry/news/8366.bugfix b/packages/registry/news/8366.bugfix new file mode 100644 index 00000000000..b8031d07265 --- /dev/null +++ b/packages/registry/news/8366.bugfix @@ -0,0 +1 @@ +Include `.cjs` and `.mjs` in the customizations glob so core modules with those extensions can be shadowed. @kunalKumar-13 diff --git a/packages/registry/src/addon-registry/addon-registry.ts b/packages/registry/src/addon-registry/addon-registry.ts index c5cd1a241ad..29db2ea4244 100644 --- a/packages/registry/src/addon-registry/addon-registry.ts +++ b/packages/registry/src/addon-registry/addon-registry.ts @@ -743,7 +743,7 @@ class AddonRegistry { reg.forEach(({ customPath, name, sourcePath }) => { glob( - `${customPath}/**/*.*(svg|png|jpg|jpeg|gif|ico|less|js|jsx|ts|tsx)`, + `${customPath}/**/*.*(svg|png|jpg|jpeg|gif|ico|less|js|jsx|ts|tsx|cjs|mjs)`, ).map((filename) => { function changeFileExtension(filePath: string) { // Extract the current file extension