@ms-cloudpack/bundler-rspack 0.5.33 → 0.5.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"getRspackCapabilities.d.ts","sourceRoot":"","sources":["../src/getRspackCapabilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,wCAAwC,EAAE,MAAM,4BAA4B,CAAC;AAEtH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,eAAO,MAAM,qBAAqB,WACxB;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,WAC5B,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,KACrC,wCAAwC,CAAC,aAAa,CAwEvD,CAAC"}
1
+ {"version":3,"file":"getRspackCapabilities.d.ts","sourceRoot":"","sources":["../src/getRspackCapabilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,wCAAwC,EAAE,MAAM,4BAA4B,CAAC;AAEtH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,eAAO,MAAM,qBAAqB,WACxB;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,WAC5B,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,KACrC,wCAAwC,CAAC,aAAa,CAyEvD,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { getSwcRelayPluginConfig, processAssetInlineExtensions } from '@ms-cloudpack/bundler-utilities';
2
2
  import { webExtensions } from '@ms-cloudpack/path-utilities';
3
3
  import { DefinePlugin } from '@rspack/core';
4
+ import { getRspackSwcLoader } from './getRspackSwcLoader.js';
4
5
  export const getRspackCapabilities = (params, context) => ({
5
6
  'asset-inline': (config, options) => {
6
7
  // Process extensions based on format (array or object)
@@ -46,11 +47,12 @@ export const getRspackCapabilities = (params, context) => ({
46
47
  config.module ??= {};
47
48
  config.module.rules ??= [];
48
49
  const addRelayConfig = getSwcRelayPluginConfig({ options, parentUrl: import.meta.url });
50
+ const swcLoaderName = getRspackSwcLoader({ requiresPluginSupport: true });
49
51
  // Apply relay plugin to existing SWC loaders
50
52
  for (const syntax of ['typescript', 'ecmascript']) {
51
53
  // Find the existing SWC loader for the current syntax
52
54
  const swcLoader = config.module.rules.find((rule) => typeof rule === 'object' &&
53
- rule?.loader === 'builtin:swc-loader' &&
55
+ rule?.loader === swcLoaderName &&
54
56
  rule.options?.jsc?.parser?.syntax === syntax);
55
57
  // Type guard, we shouldn't be hitting this case
56
58
  if (!swcLoader || typeof swcLoader !== 'object') {
@@ -1 +1 @@
1
- {"version":3,"file":"getRspackCapabilities.js","sourceRoot":"","sources":["../src/getRspackCapabilities.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSwcRelayPluginConfig, processAssetInlineExtensions } from '@ms-cloudpack/bundler-utilities';\nimport type { BundleContext, BundleMode, InternalBundlerCapabilityImplementations } from '@ms-cloudpack/common-types';\nimport { webExtensions } from '@ms-cloudpack/path-utilities';\nimport type { Configuration } from '@rspack/core';\nimport { DefinePlugin } from '@rspack/core';\nimport type { Config as SwcConfig } from '@swc/core';\n\nexport const getRspackCapabilities = (\n params: { effectiveMode: BundleMode },\n context: Pick<BundleContext, 'config'>,\n): InternalBundlerCapabilityImplementations<Configuration> => ({\n 'asset-inline': (config, options) => {\n // Process extensions based on format (array or object)\n const processedExtensions = processAssetInlineExtensions(options.extensions);\n\n // Remove the leading dot from the extensions\n const extensions = processedExtensions.map((ext) => (ext.startsWith('.') ? ext.slice(1) : ext));\n config.module ??= {};\n config.module.rules ??= [];\n config.module.rules.push({\n test: new RegExp(`\\\\.(${extensions.join('|')})$`, 'i'),\n type: 'asset/inline',\n });\n return config;\n },\n alias: (config, options) => {\n // Add aliases for externalized packages to the webpack configuration\n if (!config.externals) {\n config.externals = [];\n } else if (!Array.isArray(config.externals)) {\n config.externals = [config.externals];\n }\n // The aliased packaged must be the first element in the array,\n // so that it is resolved before all other packages are externalized.\n config.externals.unshift(options);\n return config;\n },\n 'resolve-web-extensions': (config) => {\n config.resolve ??= {};\n config.resolve.extensions ??= [];\n config.resolve.extensions.unshift(...webExtensions);\n return config;\n },\n define: (config, options) => {\n config.plugins ??= [];\n config.plugins.push(\n new DefinePlugin({\n ...(params.effectiveMode === 'production' ? context.config.define : {}),\n ...options,\n }),\n );\n return config;\n },\n relay: (config, options) => {\n config.module ??= {};\n config.module.rules ??= [];\n\n const addRelayConfig = getSwcRelayPluginConfig({ options, parentUrl: import.meta.url });\n\n // Apply relay plugin to existing SWC loaders\n for (const syntax of ['typescript', 'ecmascript'] as const) {\n // Find the existing SWC loader for the current syntax\n const swcLoader = config.module.rules.find(\n (rule) =>\n typeof rule === 'object' &&\n rule?.loader === 'builtin:swc-loader' &&\n (rule.options as SwcConfig)?.jsc?.parser?.syntax === syntax,\n );\n\n // Type guard, we shouldn't be hitting this case\n if (!swcLoader || typeof swcLoader !== 'object') {\n throw new Error(`Could not find existing SWC loader for syntax ${syntax}`);\n }\n\n addRelayConfig(swcLoader.options as SwcConfig, syntax);\n }\n\n return config;\n },\n // This is a placeholder for the density capability. It doesn't do anything in the bundler.\n // It's just a workaround for a post-bundle task. This will be replaced with 'plugins' in the future.\n density: (config) => config,\n});\n"]}
1
+ {"version":3,"file":"getRspackCapabilities.js","sourceRoot":"","sources":["../src/getRspackCapabilities.ts"],"names":[],"mappings":"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","sourcesContent":["import { getSwcRelayPluginConfig, processAssetInlineExtensions } from '@ms-cloudpack/bundler-utilities';\nimport type { BundleContext, BundleMode, InternalBundlerCapabilityImplementations } from '@ms-cloudpack/common-types';\nimport { webExtensions } from '@ms-cloudpack/path-utilities';\nimport type { Configuration } from '@rspack/core';\nimport { DefinePlugin } from '@rspack/core';\nimport type { Config as SwcConfig } from '@swc/core';\nimport { getRspackSwcLoader } from './getRspackSwcLoader.js';\n\nexport const getRspackCapabilities = (\n params: { effectiveMode: BundleMode },\n context: Pick<BundleContext, 'config'>,\n): InternalBundlerCapabilityImplementations<Configuration> => ({\n 'asset-inline': (config, options) => {\n // Process extensions based on format (array or object)\n const processedExtensions = processAssetInlineExtensions(options.extensions);\n\n // Remove the leading dot from the extensions\n const extensions = processedExtensions.map((ext) => (ext.startsWith('.') ? ext.slice(1) : ext));\n config.module ??= {};\n config.module.rules ??= [];\n config.module.rules.push({\n test: new RegExp(`\\\\.(${extensions.join('|')})$`, 'i'),\n type: 'asset/inline',\n });\n return config;\n },\n alias: (config, options) => {\n // Add aliases for externalized packages to the webpack configuration\n if (!config.externals) {\n config.externals = [];\n } else if (!Array.isArray(config.externals)) {\n config.externals = [config.externals];\n }\n // The aliased packaged must be the first element in the array,\n // so that it is resolved before all other packages are externalized.\n config.externals.unshift(options);\n return config;\n },\n 'resolve-web-extensions': (config) => {\n config.resolve ??= {};\n config.resolve.extensions ??= [];\n config.resolve.extensions.unshift(...webExtensions);\n return config;\n },\n define: (config, options) => {\n config.plugins ??= [];\n config.plugins.push(\n new DefinePlugin({\n ...(params.effectiveMode === 'production' ? context.config.define : {}),\n ...options,\n }),\n );\n return config;\n },\n relay: (config, options) => {\n config.module ??= {};\n config.module.rules ??= [];\n\n const addRelayConfig = getSwcRelayPluginConfig({ options, parentUrl: import.meta.url });\n const swcLoaderName = getRspackSwcLoader({ requiresPluginSupport: true });\n\n // Apply relay plugin to existing SWC loaders\n for (const syntax of ['typescript', 'ecmascript'] as const) {\n // Find the existing SWC loader for the current syntax\n const swcLoader = config.module.rules.find(\n (rule) =>\n typeof rule === 'object' &&\n rule?.loader === swcLoaderName &&\n (rule.options as SwcConfig)?.jsc?.parser?.syntax === syntax,\n );\n\n // Type guard, we shouldn't be hitting this case\n if (!swcLoader || typeof swcLoader !== 'object') {\n throw new Error(`Could not find existing SWC loader for syntax ${syntax}`);\n }\n\n addRelayConfig(swcLoader.options as SwcConfig, syntax);\n }\n\n return config;\n },\n // This is a placeholder for the density capability. It doesn't do anything in the bundler.\n // It's just a workaround for a post-bundle task. This will be replaced with 'plugins' in the future.\n density: (config) => config,\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"getRspackConfiguration.d.ts","sourceRoot":"","sources":["../src/getRspackConfiguration.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,KAAK,EAAE,aAAa,EAA+C,MAAM,cAAc,CAAC;AAM/F,wBAAgB,sBAAsB,CACpC,MAAM,EAAE;IACN,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,UAAU,CAAC;CAC3B,GAAG,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,EAC3C,OAAO,EAAE,aAAa,GACrB,aAAa,CAyLf"}
1
+ {"version":3,"file":"getRspackConfiguration.d.ts","sourceRoot":"","sources":["../src/getRspackConfiguration.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,KAAK,EAAE,aAAa,EAA+C,MAAM,cAAc,CAAC;AAO/F,wBAAgB,sBAAsB,CACpC,MAAM,EAAE;IACN,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,UAAU,CAAC;CAC3B,GAAG,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,EAC3C,OAAO,EAAE,aAAa,GACrB,aAAa,CA6Lf"}
@@ -4,11 +4,13 @@ import rspack from '@rspack/core';
4
4
  import semver from 'semver';
5
5
  import { fileURLToPath } from 'url';
6
6
  import { merge } from 'webpack-merge';
7
+ import { getRspackSwcLoader } from './getRspackSwcLoader.js';
7
8
  export function getRspackConfiguration(params, context) {
8
9
  const { options, outputPath, newEntries, effectiveMode } = params;
9
10
  const { targetEnvironment, dedupeAliases } = options;
10
11
  const { unsafeDisableInlineSvg: _, ...bundlerOptions } = options.bundlerOptions || {};
11
12
  const outputScriptExtension = targetEnvironment === 'node' ? 'mjs' : 'js';
13
+ const swcLoader = getRspackSwcLoader({ requiresPluginSupport: !!options.bundlerCapabilities?.relay });
12
14
  const isLibraryMode = effectiveMode === 'library';
13
15
  // Only get the SWC config and transform code if needed
14
16
  const swcConfig = context.requiresTranspile
@@ -37,7 +39,7 @@ export function getRspackConfiguration(params, context) {
37
39
  // Resolve loaders from the package's node_modules
38
40
  'node_modules',
39
41
  // Cloudpack provided loaders
40
- ...getModuleSearchPaths(['css-loader', 'style-loader', 'sass-loader'], import.meta.url),
42
+ ...getModuleSearchPaths(['css-loader', 'style-loader', 'sass-loader', ...(swcLoader === 'swc-loader' ? [swcLoader] : [])], import.meta.url),
41
43
  ],
42
44
  alias: {
43
45
  // https://rspack.rs/guide/features/web-workers#worker-loader
@@ -101,14 +103,14 @@ export function getRspackConfiguration(params, context) {
101
103
  {
102
104
  // transform jsx files
103
105
  test: jsxRegex,
104
- loader: 'builtin:swc-loader',
106
+ loader: swcLoader,
105
107
  options: swcConfig.jsx,
106
108
  type: 'javascript/auto',
107
109
  },
108
110
  {
109
111
  // transform ts files
110
112
  test: typescriptRegex,
111
- loader: 'builtin:swc-loader',
113
+ loader: swcLoader,
112
114
  options: swcConfig.tsx,
113
115
  type: 'javascript/auto',
114
116
  },
@@ -1 +1 @@
1
- {"version":3,"file":"getRspackConfiguration.js","sourceRoot":"","sources":["../src/getRspackConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defaultTargetSyntax,\n getCssRule,\n getModuleSearchPaths,\n getSwcConfig,\n shouldExternalizePackage,\n} from '@ms-cloudpack/bundler-utilities';\nimport type { BundleContext, BundleMode, BundleOptions } from '@ms-cloudpack/common-types';\nimport type { WriteESMStubsResult } from '@ms-cloudpack/esm-stub-utilities';\nimport { jsxRegex, resolveModule, typescriptRegex } from '@ms-cloudpack/path-utilities';\nimport type { Configuration, ExternalItemFunctionData, ExternalItemValue } from '@rspack/core';\nimport rspack from '@rspack/core';\nimport semver from 'semver';\nimport { fileURLToPath } from 'url';\nimport { merge } from 'webpack-merge';\n\nexport function getRspackConfiguration(\n params: {\n options: Omit<BundleOptions, 'entries' | 'outputPath'>;\n outputPath: string;\n effectiveMode: BundleMode;\n } & Pick<WriteESMStubsResult, 'newEntries'>,\n context: BundleContext,\n): Configuration {\n const { options, outputPath, newEntries, effectiveMode } = params;\n const { targetEnvironment, dedupeAliases } = options;\n const { unsafeDisableInlineSvg: _, ...bundlerOptions } = options.bundlerOptions || {};\n const outputScriptExtension = targetEnvironment === 'node' ? 'mjs' : 'js';\n\n const isLibraryMode = effectiveMode === 'library';\n\n // Only get the SWC config and transform code if needed\n const swcConfig = context.requiresTranspile\n ? getSwcConfig({ packagePath: options.inputPath, sourcemap: options.sourcemap, reactRefresh: options.hmr })\n : undefined;\n\n const config: Configuration = {\n mode: options.minify ? 'production' : 'development',\n // For Rspack, it looks like this following is still needed as unit tests fail without removing the './'.\n // Webpack (at least older versions) expects entry keys without a leading `./`.\n // (The leading `./` seems to be okay with the latest version, but in older versions, it appears\n // to cause the runtime chunk runtime.js to be generated with an incorrect relative path?)\n entry: Object.fromEntries(Object.entries(newEntries).map(([key, value]) => [key.replace(/^\\.\\//, ''), value])),\n context: options.inputPath,\n resolve: {\n modules: context.config.resolve?.modules ?? ['node_modules'],\n // TODO: Align with other bundlers https://github.com/microsoft/cloudpack/issues/2687\n extensions: ['.ts', '.tsx', '.mjs', '.js', '.jsx', '.json'],\n extensionAlias: {\n '.js': ['.ts', '.js', '.tsx', '.jsx'],\n '.mjs': ['.mts', '.mjs'],\n },\n alias: dedupeAliases,\n },\n resolveLoader: {\n modules: [\n // Resolve loaders from the package's node_modules\n 'node_modules',\n\n // Cloudpack provided loaders\n ...getModuleSearchPaths(['css-loader', 'style-loader', 'sass-loader'], import.meta.url),\n ],\n alias: {\n // https://rspack.rs/guide/features/web-workers#worker-loader\n 'worker-loader': fileURLToPath(\n resolveModule({ importSpecifier: 'worker-rspack-loader', parentUrl: import.meta.url }),\n ),\n },\n },\n externals:\n // In production mode for browser bundles, we don't externalize anything.\n // (For Node bundles, built-ins are always externalized with enableSSR feature.)\n !isLibraryMode && targetEnvironment === 'browser'\n ? [] // These types can't be inferred due to use of zod types (which may be slightly incorrect too,\n : // since they don't allow returning undefined from the async version).\n // Issue: https://github.com/web-infra-dev/rspack/issues/7979\n // There's discussion here of moving away from zod types: https://github.com/web-infra-dev/rspack/issues/4241\n // eslint-disable-next-line @typescript-eslint/require-await -- API signature uses a promise\n async (data: ExternalItemFunctionData): Promise<ExternalItemValue | undefined> => {\n const { request } = data;\n // ! is a webpack loader prefix.\n if (!request || request.includes('!')) {\n return;\n }\n\n if (\n shouldExternalizePackage({\n packageName: options.packageName,\n inputPath: options.inputPath,\n id: request,\n parent: data.context,\n inlined: options.inlined,\n external: options.external,\n shouldInlineNodeBuiltins: false,\n targetEnvironment,\n mode: effectiveMode,\n })\n ) {\n // Manually force externals to use `externalsType: 'module-import'` to ensure that\n // async import() statements are preserved (otherwise they'll be hoisted).\n return `module-import ${request}`;\n }\n },\n target: [targetEnvironment === 'node' ? 'node18' : 'web', defaultTargetSyntax],\n //plugins: [new rspack.CssExtractRspackPlugin({})],\n module: {\n rules: [\n getCssRule('css'),\n {\n test: /\\.(json|resjson)$/,\n type: 'json',\n sideEffects: false,\n },\n {\n test: /\\.ejs$/,\n loader: 'ejs-loader',\n options: {\n variable: 'data',\n esModule: true,\n },\n resolve: {\n fullySpecified: false,\n },\n },\n ...(swcConfig\n ? [\n {\n // transform jsx files\n test: jsxRegex,\n loader: 'builtin:swc-loader',\n options: swcConfig.jsx,\n type: 'javascript/auto',\n },\n {\n // transform ts files\n test: typescriptRegex,\n loader: 'builtin:swc-loader',\n options: swcConfig.tsx,\n type: 'javascript/auto',\n },\n ]\n : []),\n getCssRule('sass'),\n {\n test: /\\.worker\\.js$/,\n use: { loader: 'worker-rspack-loader' },\n },\n {\n test: /\\.wasm$/i,\n type: 'asset/resource',\n },\n {\n test: /\\.glsl$/,\n type: 'asset/source',\n },\n ],\n },\n output: {\n library: {\n type: 'module',\n },\n chunkFormat: 'module',\n chunkLoading: 'import',\n path: outputPath,\n module: true,\n filename: `[name].${outputScriptExtension}`,\n chunkFilename: `[id].chunk.${outputScriptExtension}`,\n },\n experiments: {\n outputModule: true,\n css: false,\n },\n devtool: options.sourcemap ? (isLibraryMode ? 'cheap-module-source-map' : 'source-map') : false,\n optimization: {\n // In production, always inline runtime. In development, create a separate runtime chunk only for multiple entries.\n runtimeChunk: !options.minify && Object.keys(newEntries).length > 1 ? 'single' : false,\n minimize: options.minify,\n mangleExports: false,\n splitChunks: {\n // Prevents exposing path info when creating names for parts splitted by maxSize.\n hidePathInfo: true,\n\n // Figure out which exports are used by modules to mangle export names, omit unused\n // exports and generate more efficient code.\n // This option was added in 1.0.0-beta.4\n ...(semver.gte(rspack.rspackVersion, '1.0.0-beta.4') && { usedExports: !isLibraryMode }),\n\n chunks: 'all',\n\n //name: '[id].chunk', //TODO: is this needed?\n // webpack version:\n // filename: `[id].chunk.${outputScriptExtension}`,\n\n // Production chunks should be at least 1000 bytes to prevent large numbers of file requests\n minSize: isLibraryMode ? 0 : 1000,\n\n cacheGroups: {\n defaultVendors: false,\n },\n },\n },\n };\n\n if (Object.keys(bundlerOptions).length) {\n return merge(config, bundlerOptions);\n }\n\n return config;\n}\n"]}
1
+ {"version":3,"file":"getRspackConfiguration.js","sourceRoot":"","sources":["../src/getRspackConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n defaultTargetSyntax,\n getCssRule,\n getModuleSearchPaths,\n getSwcConfig,\n shouldExternalizePackage,\n} from '@ms-cloudpack/bundler-utilities';\nimport type { BundleContext, BundleMode, BundleOptions } from '@ms-cloudpack/common-types';\nimport type { WriteESMStubsResult } from '@ms-cloudpack/esm-stub-utilities';\nimport { jsxRegex, resolveModule, typescriptRegex } from '@ms-cloudpack/path-utilities';\nimport type { Configuration, ExternalItemFunctionData, ExternalItemValue } from '@rspack/core';\nimport rspack from '@rspack/core';\nimport semver from 'semver';\nimport { fileURLToPath } from 'url';\nimport { merge } from 'webpack-merge';\nimport { getRspackSwcLoader } from './getRspackSwcLoader.js';\n\nexport function getRspackConfiguration(\n params: {\n options: Omit<BundleOptions, 'entries' | 'outputPath'>;\n outputPath: string;\n effectiveMode: BundleMode;\n } & Pick<WriteESMStubsResult, 'newEntries'>,\n context: BundleContext,\n): Configuration {\n const { options, outputPath, newEntries, effectiveMode } = params;\n const { targetEnvironment, dedupeAliases } = options;\n const { unsafeDisableInlineSvg: _, ...bundlerOptions } = options.bundlerOptions || {};\n const outputScriptExtension = targetEnvironment === 'node' ? 'mjs' : 'js';\n const swcLoader = getRspackSwcLoader({ requiresPluginSupport: !!options.bundlerCapabilities?.relay });\n\n const isLibraryMode = effectiveMode === 'library';\n\n // Only get the SWC config and transform code if needed\n const swcConfig = context.requiresTranspile\n ? getSwcConfig({ packagePath: options.inputPath, sourcemap: options.sourcemap, reactRefresh: options.hmr })\n : undefined;\n\n const config: Configuration = {\n mode: options.minify ? 'production' : 'development',\n // For Rspack, it looks like this following is still needed as unit tests fail without removing the './'.\n // Webpack (at least older versions) expects entry keys without a leading `./`.\n // (The leading `./` seems to be okay with the latest version, but in older versions, it appears\n // to cause the runtime chunk runtime.js to be generated with an incorrect relative path?)\n entry: Object.fromEntries(Object.entries(newEntries).map(([key, value]) => [key.replace(/^\\.\\//, ''), value])),\n context: options.inputPath,\n resolve: {\n modules: context.config.resolve?.modules ?? ['node_modules'],\n // TODO: Align with other bundlers https://github.com/microsoft/cloudpack/issues/2687\n extensions: ['.ts', '.tsx', '.mjs', '.js', '.jsx', '.json'],\n extensionAlias: {\n '.js': ['.ts', '.js', '.tsx', '.jsx'],\n '.mjs': ['.mts', '.mjs'],\n },\n alias: dedupeAliases,\n },\n resolveLoader: {\n modules: [\n // Resolve loaders from the package's node_modules\n 'node_modules',\n\n // Cloudpack provided loaders\n ...getModuleSearchPaths(\n ['css-loader', 'style-loader', 'sass-loader', ...(swcLoader === 'swc-loader' ? [swcLoader] : [])],\n import.meta.url,\n ),\n ],\n alias: {\n // https://rspack.rs/guide/features/web-workers#worker-loader\n 'worker-loader': fileURLToPath(\n resolveModule({ importSpecifier: 'worker-rspack-loader', parentUrl: import.meta.url }),\n ),\n },\n },\n externals:\n // In production mode for browser bundles, we don't externalize anything.\n // (For Node bundles, built-ins are always externalized with enableSSR feature.)\n !isLibraryMode && targetEnvironment === 'browser'\n ? [] // These types can't be inferred due to use of zod types (which may be slightly incorrect too,\n : // since they don't allow returning undefined from the async version).\n // Issue: https://github.com/web-infra-dev/rspack/issues/7979\n // There's discussion here of moving away from zod types: https://github.com/web-infra-dev/rspack/issues/4241\n // eslint-disable-next-line @typescript-eslint/require-await -- API signature uses a promise\n async (data: ExternalItemFunctionData): Promise<ExternalItemValue | undefined> => {\n const { request } = data;\n // ! is a webpack loader prefix.\n if (!request || request.includes('!')) {\n return;\n }\n\n if (\n shouldExternalizePackage({\n packageName: options.packageName,\n inputPath: options.inputPath,\n id: request,\n parent: data.context,\n inlined: options.inlined,\n external: options.external,\n shouldInlineNodeBuiltins: false,\n targetEnvironment,\n mode: effectiveMode,\n })\n ) {\n // Manually force externals to use `externalsType: 'module-import'` to ensure that\n // async import() statements are preserved (otherwise they'll be hoisted).\n return `module-import ${request}`;\n }\n },\n target: [targetEnvironment === 'node' ? 'node18' : 'web', defaultTargetSyntax],\n //plugins: [new rspack.CssExtractRspackPlugin({})],\n module: {\n rules: [\n getCssRule('css'),\n {\n test: /\\.(json|resjson)$/,\n type: 'json',\n sideEffects: false,\n },\n {\n test: /\\.ejs$/,\n loader: 'ejs-loader',\n options: {\n variable: 'data',\n esModule: true,\n },\n resolve: {\n fullySpecified: false,\n },\n },\n ...(swcConfig\n ? [\n {\n // transform jsx files\n test: jsxRegex,\n loader: swcLoader,\n options: swcConfig.jsx,\n type: 'javascript/auto',\n },\n {\n // transform ts files\n test: typescriptRegex,\n loader: swcLoader,\n options: swcConfig.tsx,\n type: 'javascript/auto',\n },\n ]\n : []),\n getCssRule('sass'),\n {\n test: /\\.worker\\.js$/,\n use: { loader: 'worker-rspack-loader' },\n },\n {\n test: /\\.wasm$/i,\n type: 'asset/resource',\n },\n {\n test: /\\.glsl$/,\n type: 'asset/source',\n },\n ],\n },\n output: {\n library: {\n type: 'module',\n },\n chunkFormat: 'module',\n chunkLoading: 'import',\n path: outputPath,\n module: true,\n filename: `[name].${outputScriptExtension}`,\n chunkFilename: `[id].chunk.${outputScriptExtension}`,\n },\n experiments: {\n outputModule: true,\n css: false,\n },\n devtool: options.sourcemap ? (isLibraryMode ? 'cheap-module-source-map' : 'source-map') : false,\n optimization: {\n // In production, always inline runtime. In development, create a separate runtime chunk only for multiple entries.\n runtimeChunk: !options.minify && Object.keys(newEntries).length > 1 ? 'single' : false,\n minimize: options.minify,\n mangleExports: false,\n splitChunks: {\n // Prevents exposing path info when creating names for parts splitted by maxSize.\n hidePathInfo: true,\n\n // Figure out which exports are used by modules to mangle export names, omit unused\n // exports and generate more efficient code.\n // This option was added in 1.0.0-beta.4\n ...(semver.gte(rspack.rspackVersion, '1.0.0-beta.4') && { usedExports: !isLibraryMode }),\n\n chunks: 'all',\n\n //name: '[id].chunk', //TODO: is this needed?\n // webpack version:\n // filename: `[id].chunk.${outputScriptExtension}`,\n\n // Production chunks should be at least 1000 bytes to prevent large numbers of file requests\n minSize: isLibraryMode ? 0 : 1000,\n\n cacheGroups: {\n defaultVendors: false,\n },\n },\n },\n };\n\n if (Object.keys(bundlerOptions).length) {\n return merge(config, bundlerOptions);\n }\n\n return config;\n}\n"]}
@@ -0,0 +1,17 @@
1
+ export type RspackSwcLoader = 'builtin:swc-loader' | 'swc-loader';
2
+ /**
3
+ * Rspack builds its Windows ARM64 binding without SWC WASM plugin support, so use the external
4
+ * SWC loader there when a bundle requires plugins such as Relay.
5
+ *
6
+ * - [Windows ARM64 build sets `DISABLE_PLUGIN=1`](https://github.com/web-infra-dev/rspack/blob/v1.4.11/.github/workflows/reusable-build-build.yml#L153-L155)
7
+ * - [`DISABLE_PLUGIN` prevents enabling the Cargo `plugin` feature](https://github.com/web-infra-dev/rspack/blob/v1.4.11/crates/node_binding/scripts/build.js#L59-L62)
8
+ * - [That feature provides SWC’s native plugin-transform host](https://github.com/web-infra-dev/rspack/blob/v1.4.11/crates/rspack_loader_swc/Cargo.toml#L11-L17)
9
+ * - [`@swc/plugin-relay` declares a `.wasm` file as its entry point](https://unpkg.com/@swc/plugin-relay@9.5.0/package.json)
10
+ * - [Unmerged follow-up PR lists Windows ARM64 as excluded due to limited plugin runtime support](https://github.com/web-infra-dev/rspack/pull/11309)
11
+ */
12
+ export declare function getRspackSwcLoader(params: {
13
+ requiresPluginSupport: boolean;
14
+ platform?: NodeJS.Platform;
15
+ architecture?: string;
16
+ }): RspackSwcLoader;
17
+ //# sourceMappingURL=getRspackSwcLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRspackSwcLoader.d.ts","sourceRoot":"","sources":["../src/getRspackSwcLoader.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,YAAY,CAAC;AAElE;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,eAAe,CAKlB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Rspack builds its Windows ARM64 binding without SWC WASM plugin support, so use the external
3
+ * SWC loader there when a bundle requires plugins such as Relay.
4
+ *
5
+ * - [Windows ARM64 build sets `DISABLE_PLUGIN=1`](https://github.com/web-infra-dev/rspack/blob/v1.4.11/.github/workflows/reusable-build-build.yml#L153-L155)
6
+ * - [`DISABLE_PLUGIN` prevents enabling the Cargo `plugin` feature](https://github.com/web-infra-dev/rspack/blob/v1.4.11/crates/node_binding/scripts/build.js#L59-L62)
7
+ * - [That feature provides SWC’s native plugin-transform host](https://github.com/web-infra-dev/rspack/blob/v1.4.11/crates/rspack_loader_swc/Cargo.toml#L11-L17)
8
+ * - [`@swc/plugin-relay` declares a `.wasm` file as its entry point](https://unpkg.com/@swc/plugin-relay@9.5.0/package.json)
9
+ * - [Unmerged follow-up PR lists Windows ARM64 as excluded due to limited plugin runtime support](https://github.com/web-infra-dev/rspack/pull/11309)
10
+ */
11
+ export function getRspackSwcLoader(params) {
12
+ const { requiresPluginSupport, platform = process.platform, architecture = process.arch } = params;
13
+ return requiresPluginSupport && platform === 'win32' && architecture === 'arm64'
14
+ ? 'swc-loader'
15
+ : 'builtin:swc-loader';
16
+ }
17
+ //# sourceMappingURL=getRspackSwcLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRspackSwcLoader.js","sourceRoot":"","sources":["../src/getRspackSwcLoader.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAIlC;IACC,MAAM,EAAE,qBAAqB,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC;IACnG,OAAO,qBAAqB,IAAI,QAAQ,KAAK,OAAO,IAAI,YAAY,KAAK,OAAO;QAC9E,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,oBAAoB,CAAC;AAC3B,CAAC","sourcesContent":["export type RspackSwcLoader = 'builtin:swc-loader' | 'swc-loader';\n\n/**\n * Rspack builds its Windows ARM64 binding without SWC WASM plugin support, so use the external\n * SWC loader there when a bundle requires plugins such as Relay.\n *\n * - [Windows ARM64 build sets `DISABLE_PLUGIN=1`](https://github.com/web-infra-dev/rspack/blob/v1.4.11/.github/workflows/reusable-build-build.yml#L153-L155)\n * - [`DISABLE_PLUGIN` prevents enabling the Cargo `plugin` feature](https://github.com/web-infra-dev/rspack/blob/v1.4.11/crates/node_binding/scripts/build.js#L59-L62)\n * - [That feature provides SWC’s native plugin-transform host](https://github.com/web-infra-dev/rspack/blob/v1.4.11/crates/rspack_loader_swc/Cargo.toml#L11-L17)\n * - [`@swc/plugin-relay` declares a `.wasm` file as its entry point](https://unpkg.com/@swc/plugin-relay@9.5.0/package.json)\n * - [Unmerged follow-up PR lists Windows ARM64 as excluded due to limited plugin runtime support](https://github.com/web-infra-dev/rspack/pull/11309)\n */\nexport function getRspackSwcLoader(params: {\n requiresPluginSupport: boolean;\n platform?: NodeJS.Platform;\n architecture?: string;\n}): RspackSwcLoader {\n const { requiresPluginSupport, platform = process.platform, architecture = process.arch } = params;\n return requiresPluginSupport && platform === 'win32' && architecture === 'arm64'\n ? 'swc-loader'\n : 'builtin:swc-loader';\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/bundler-rspack",
3
- "version": "0.5.33",
3
+ "version": "0.5.34",
4
4
  "description": "Cloudpack's wrapper for the Rspack bundler",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -27,7 +27,7 @@
27
27
  "@ms-cloudpack/bundler-capabilities": "^0.5.10",
28
28
  "@ms-cloudpack/bundler-utilities": "^0.9.25",
29
29
  "@ms-cloudpack/common-types": "^0.34.6",
30
- "@ms-cloudpack/esm-stub-utilities": "^0.16.11",
30
+ "@ms-cloudpack/esm-stub-utilities": "^0.16.12",
31
31
  "@ms-cloudpack/path-string-parsing": "^1.3.6",
32
32
  "@ms-cloudpack/path-utilities": "^3.2.17",
33
33
  "@rspack/core": "^1.1.8 || ^1.1.8-beta.0",
@@ -39,6 +39,7 @@
39
39
  "sass-loader": "^16.0.0",
40
40
  "semver": "^7.6.0",
41
41
  "style-loader": "^4.0.0",
42
+ "swc-loader": "^0.2.0",
42
43
  "webpack": "^5.27.0",
43
44
  "webpack-merge": "^6.0.0",
44
45
  "worker-rspack-loader": "^3.1.0"