From aac0307d5b8e4ea106cbe969cafabcb6a5d71b2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Thu, 4 Sep 2025 14:05:53 +0200 Subject: [PATCH] support resolve.extensions to get first the customized values --- npm-packages/meteor-rspack/lib/mergeRulesSplitOverlap.js | 8 ++++++++ npm-packages/meteor-rspack/package-lock.json | 4 ++-- npm-packages/meteor-rspack/package.json | 2 +- packages/rspack/lib/constants.js | 2 +- tools/modern-tests/apps/react-router/rspack.config.js | 1 + tools/modern-tests/apps/react-router/server/main.js | 1 + .../apps/react-router/server/resolve-extensions/first.jsx | 1 + .../apps/react-router/server/resolve-extensions/first.tsx | 1 + tools/modern-tests/apps/vue/package.json | 2 +- tools/modern-tests/react-router.test.js | 2 ++ tools/static-assets/skel-apollo/package.json | 2 +- tools/static-assets/skel-blaze/package.json | 2 +- tools/static-assets/skel-chakra-ui/package.json | 2 +- tools/static-assets/skel-full/package.json | 2 +- tools/static-assets/skel-react/package.json | 2 +- tools/static-assets/skel-solid/package.json | 2 +- tools/static-assets/skel-svelte/package.json | 2 +- tools/static-assets/skel-tailwind/package.json | 2 +- tools/static-assets/skel-typescript/package.json | 2 +- tools/static-assets/skel-vue/package.json | 2 +- 20 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 tools/modern-tests/apps/react-router/server/resolve-extensions/first.jsx create mode 100644 tools/modern-tests/apps/react-router/server/resolve-extensions/first.tsx diff --git a/npm-packages/meteor-rspack/lib/mergeRulesSplitOverlap.js b/npm-packages/meteor-rspack/lib/mergeRulesSplitOverlap.js index 2b8e946939..5fd2e03dfb 100644 --- a/npm-packages/meteor-rspack/lib/mergeRulesSplitOverlap.js +++ b/npm-packages/meteor-rspack/lib/mergeRulesSplitOverlap.js @@ -267,6 +267,14 @@ export function mergeSplitOverlap(...configs) { return splitOverlapRulesMerge(aRules, bRules); } + // Ensure custom extensions first + if (key === 'resolve.extensions') { + const aRules = Array.isArray(a) ? a : []; + const bRules = Array.isArray(b) ? b : []; + const merged = [...bRules, ...aRules]; + return [...new Set(merged)]; + } + // Handle plugins uniqueness if (key === 'plugins') { return unique( diff --git a/npm-packages/meteor-rspack/package-lock.json b/npm-packages/meteor-rspack/package-lock.json index 9f2d8d1853..fdfd91b2bd 100644 --- a/npm-packages/meteor-rspack/package-lock.json +++ b/npm-packages/meteor-rspack/package-lock.json @@ -1,12 +1,12 @@ { "name": "@meteorjs/rspack", - "version": "0.0.38", + "version": "0.0.39", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@meteorjs/rspack", - "version": "0.0.38", + "version": "0.0.39", "license": "ISC", "dependencies": { "ignore-loader": "^0.1.2", diff --git a/npm-packages/meteor-rspack/package.json b/npm-packages/meteor-rspack/package.json index 72b10be36a..7c180deb22 100644 --- a/npm-packages/meteor-rspack/package.json +++ b/npm-packages/meteor-rspack/package.json @@ -1,6 +1,6 @@ { "name": "@meteorjs/rspack", - "version": "0.0.38", + "version": "0.0.39", "description": "Configuration logic for using Rspack in Meteor projects", "main": "index.js", "type": "module", diff --git a/packages/rspack/lib/constants.js b/packages/rspack/lib/constants.js index a98ad7f845..dc031f6113 100644 --- a/packages/rspack/lib/constants.js +++ b/packages/rspack/lib/constants.js @@ -5,7 +5,7 @@ export const DEFAULT_RSPACK_VERSION = '1.5.0'; -export const DEFAULT_METEOR_RSPACK_VERSION = '0.0.38'; +export const DEFAULT_METEOR_RSPACK_VERSION = '0.0.39'; export const DEFAULT_METEOR_RSPACK_REACT_HMR_VERSION = '1.4.3'; diff --git a/tools/modern-tests/apps/react-router/rspack.config.js b/tools/modern-tests/apps/react-router/rspack.config.js index 330dc69908..cd2548629d 100644 --- a/tools/modern-tests/apps/react-router/rspack.config.js +++ b/tools/modern-tests/apps/react-router/rspack.config.js @@ -17,6 +17,7 @@ export default defineConfig(Meteor => { '@helper/alias': '/imports/helpers/alias.js', '@react/alias': '/node_modules/react', }, + extensions: ['.jsx'], }, module: { rules: [ diff --git a/tools/modern-tests/apps/react-router/server/main.js b/tools/modern-tests/apps/react-router/server/main.js index 6beb7c30b7..cdb3e6ccfd 100644 --- a/tools/modern-tests/apps/react-router/server/main.js +++ b/tools/modern-tests/apps/react-router/server/main.js @@ -4,6 +4,7 @@ import { LinksCollection } from '/imports/api/links'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; import '@helper/alias'; import ReactAlias from '@react/alias'; +import './resolve-extensions/first'; console.log('@react/alias loaded', ReactAlias.version); diff --git a/tools/modern-tests/apps/react-router/server/resolve-extensions/first.jsx b/tools/modern-tests/apps/react-router/server/resolve-extensions/first.jsx new file mode 100644 index 0000000000..f4a34cd479 --- /dev/null +++ b/tools/modern-tests/apps/react-router/server/resolve-extensions/first.jsx @@ -0,0 +1 @@ +console.log('first.jsx loaded'); diff --git a/tools/modern-tests/apps/react-router/server/resolve-extensions/first.tsx b/tools/modern-tests/apps/react-router/server/resolve-extensions/first.tsx new file mode 100644 index 0000000000..fafcfe4cf4 --- /dev/null +++ b/tools/modern-tests/apps/react-router/server/resolve-extensions/first.tsx @@ -0,0 +1 @@ +console.log('first.tsx loaded'); diff --git a/tools/modern-tests/apps/vue/package.json b/tools/modern-tests/apps/vue/package.json index 22ab54e0e9..3c0005cfac 100644 --- a/tools/modern-tests/apps/vue/package.json +++ b/tools/modern-tests/apps/vue/package.json @@ -17,7 +17,7 @@ "vue-router": "^4.2.5" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rspack/cli": "^1.4.8", "@rspack/core": "^1.4.8", "@tailwindcss/postcss": "^4.1.12", diff --git a/tools/modern-tests/react-router.test.js b/tools/modern-tests/react-router.test.js index 47c42fcf08..0c811ae9a0 100644 --- a/tools/modern-tests/react-router.test.js +++ b/tools/modern-tests/react-router.test.js @@ -35,6 +35,8 @@ describe('ReactRouter App Bundling /', () => { await waitForMeteorOutput(result.outputLines, /.*default-package loaded.*/); // custom-package loading await waitForMeteorOutput(result.outputLines, /.*custom-package loaded.*/); + // resolve.extensions loading + await waitForMeteorOutput(result.outputLines, /.*first\.jsx loaded.*/); }, afterRunRebuildClient: async ({ allConsoleLogs }) => { // Check for HMR output as enabled by default diff --git a/tools/static-assets/skel-apollo/package.json b/tools/static-assets/skel-apollo/package.json index a264c46be1..a8de3e24ed 100644 --- a/tools/static-assets/skel-apollo/package.json +++ b/tools/static-assets/skel-apollo/package.json @@ -20,7 +20,7 @@ "devDependencies": { "@graphql-tools/webpack-loader": "^7.0.0", "@rsdoctor/rspack-plugin": "^1.2.3", - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0", "@rspack/plugin-react-refresh": "^1.4.3", diff --git a/tools/static-assets/skel-blaze/package.json b/tools/static-assets/skel-blaze/package.json index 12f44bedab..66c3df2b4e 100644 --- a/tools/static-assets/skel-blaze/package.json +++ b/tools/static-assets/skel-blaze/package.json @@ -14,7 +14,7 @@ "meteor-node-stubs": "^1.2.12" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0", diff --git a/tools/static-assets/skel-chakra-ui/package.json b/tools/static-assets/skel-chakra-ui/package.json index 0d345e9740..78e265cca8 100644 --- a/tools/static-assets/skel-chakra-ui/package.json +++ b/tools/static-assets/skel-chakra-ui/package.json @@ -21,7 +21,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0", diff --git a/tools/static-assets/skel-full/package.json b/tools/static-assets/skel-full/package.json index db8bd19db8..18430645b1 100644 --- a/tools/static-assets/skel-full/package.json +++ b/tools/static-assets/skel-full/package.json @@ -12,7 +12,7 @@ "meteor-node-stubs": "^1.2.12" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0", diff --git a/tools/static-assets/skel-react/package.json b/tools/static-assets/skel-react/package.json index 08fa6c4961..6a9ef2e03b 100644 --- a/tools/static-assets/skel-react/package.json +++ b/tools/static-assets/skel-react/package.json @@ -15,7 +15,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0", diff --git a/tools/static-assets/skel-solid/package.json b/tools/static-assets/skel-solid/package.json index 1881464082..4541d9e598 100644 --- a/tools/static-assets/skel-solid/package.json +++ b/tools/static-assets/skel-solid/package.json @@ -14,7 +14,7 @@ "picocolors": "^1.1.1" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0", diff --git a/tools/static-assets/skel-svelte/package.json b/tools/static-assets/skel-svelte/package.json index 245502a7d5..bea3aa7ac4 100644 --- a/tools/static-assets/skel-svelte/package.json +++ b/tools/static-assets/skel-svelte/package.json @@ -13,7 +13,7 @@ "meteor-node-stubs": "^1.2.12" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0", diff --git a/tools/static-assets/skel-tailwind/package.json b/tools/static-assets/skel-tailwind/package.json index ad5faad51e..83074c7738 100644 --- a/tools/static-assets/skel-tailwind/package.json +++ b/tools/static-assets/skel-tailwind/package.json @@ -16,7 +16,7 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0", diff --git a/tools/static-assets/skel-typescript/package.json b/tools/static-assets/skel-typescript/package.json index fae28d890b..7d55e4e5bf 100644 --- a/tools/static-assets/skel-typescript/package.json +++ b/tools/static-assets/skel-typescript/package.json @@ -15,7 +15,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0", diff --git a/tools/static-assets/skel-vue/package.json b/tools/static-assets/skel-vue/package.json index 5947ac91db..c8517749e3 100644 --- a/tools/static-assets/skel-vue/package.json +++ b/tools/static-assets/skel-vue/package.json @@ -17,7 +17,7 @@ "vue-router": "^4.2.5" }, "devDependencies": { - "@meteorjs/rspack": "^0.0.38", + "@meteorjs/rspack": "^0.0.39", "@rsdoctor/rspack-plugin": "^1.2.3", "@rspack/cli": "^1.5.0", "@rspack/core": "^1.5.0",