@backstage/cli-module-build 0.1.5-next.0 → 0.1.5-next.1

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @backstage/cli-module-build
2
2
 
3
+ ## 0.1.5-next.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 3cce70f: Increase generated frontend static asset filename hashes to 12 characters to reduce the chance of collisions across long-lived cached builds.
8
+ - Updated dependencies
9
+ - @backstage/config-loader@1.11.0-next.1
10
+
3
11
  ## 0.1.5-next.0
4
12
 
5
13
  ### Patch Changes
@@ -17,6 +17,7 @@ var yn = require('yn');
17
17
  var hasReactDomClient = require('./hasReactDomClient.cjs.js');
18
18
  var linkWorkspaces = require('./linkWorkspaces.cjs.js');
19
19
  var ConfigInjectingHtmlWebpackPlugin = require('./ConfigInjectingHtmlWebpackPlugin.cjs.js');
20
+ var staticAssetHash = require('./staticAssetHash.cjs.js');
20
21
 
21
22
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
22
23
 
@@ -283,8 +284,8 @@ async function createConfig(paths, options) {
283
284
  uniqueName: options.moduleFederationRemote?.name,
284
285
  path: paths.targetDist,
285
286
  publicPath: options.moduleFederationRemote ? "auto" : `${publicPath}/`,
286
- filename: isDev ? "[name].js" : "static/[name].[contenthash:8].js",
287
- chunkFilename: isDev ? "[name].chunk.js" : "static/[name].[contenthash:8].chunk.js",
287
+ filename: isDev ? "[name].js" : `static/[name].[contenthash:${staticAssetHash.STATIC_ASSET_HASH_LENGTH}].js`,
288
+ chunkFilename: isDev ? "[name].chunk.js" : `static/[name].[contenthash:${staticAssetHash.STATIC_ASSET_HASH_LENGTH}].chunk.js`,
288
289
  ...isDev ? {
289
290
  devtoolModuleFilenameTemplate: (info) => `file:///${node_path.resolve(info.absoluteResourcePath).replace(
290
291
  /\\/g,
@@ -1 +1 @@
1
- {"version":3,"file":"config.cjs.js","sources":["../../../src/lib/bundler/config.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolve as resolvePath } from 'node:path';\nimport { BundlingOptions, ModuleFederationRemoteOptions } from './types';\nimport { rspack, Configuration } from '@rspack/core';\n\nimport { BundlingPaths } from './paths';\nimport { Config } from '@backstage/config';\nimport ESLintRspackPlugin from 'eslint-rspack-plugin';\nimport { TsCheckerRspackPlugin } from 'ts-checker-rspack-plugin';\nimport HtmlWebpackPlugin from 'html-webpack-plugin';\nimport ModuleScopePlugin from 'react-dev-utils/ModuleScopePlugin';\nimport { ModuleFederationPlugin } from '@module-federation/enhanced/rspack';\n\nimport fs from 'fs-extra';\nimport { optimization as optimizationConfig } from './optimization';\nimport pickBy from 'lodash/pickBy';\nimport { findOwnPaths, runOutput, targetPaths } from '@backstage/cli-common';\n\nimport { transforms } from './transforms';\nimport { version } from '../../../package.json';\nimport yn from 'yn';\nimport { hasReactDomClient } from './hasReactDomClient';\nimport { createWorkspaceLinkingPlugins } from './linkWorkspaces';\nimport { ConfigInjectingHtmlWebpackPlugin } from './ConfigInjectingHtmlWebpackPlugin';\n\nexport function resolveBaseUrl(\n config: Config,\n moduleFederationRemote?: ModuleFederationRemoteOptions,\n): URL {\n const baseUrl = config.getOptionalString('app.baseUrl');\n\n const defaultBaseUrl = moduleFederationRemote\n ? `http://localhost:${process.env.PORT ?? '3000'}`\n : 'http://localhost:3000';\n\n try {\n return new URL(baseUrl ?? '/', defaultBaseUrl);\n } catch (error) {\n throw new Error(`Invalid app.baseUrl, ${error}`);\n }\n}\n\nexport function resolveEndpoint(\n config: Config,\n moduleFederationRemote?: ModuleFederationRemoteOptions,\n): {\n host: string;\n port: number;\n} {\n const url = resolveBaseUrl(config, moduleFederationRemote);\n\n return {\n host: config.getOptionalString('app.listen.host') ?? url.hostname,\n port:\n config.getOptionalNumber('app.listen.port') ??\n Number(url.port) ??\n (url.protocol === 'https:' ? 443 : 80),\n };\n}\n\nasync function readBuildInfo() {\n const timestamp = Date.now();\n\n let commit: string | undefined;\n try {\n commit = await runOutput(['git', 'rev-parse', 'HEAD']);\n } catch (error) {\n // ignore, see below\n }\n\n let gitVersion: string | undefined;\n try {\n gitVersion = await runOutput(['git', 'describe', '--always']);\n } catch (error) {\n // ignore, see below\n }\n\n if (commit === undefined || gitVersion === undefined) {\n console.info(\n 'NOTE: Did not compute git version or commit hash, could not execute the git command line utility',\n );\n }\n\n const { version: packageVersion } = await fs.readJson(\n targetPaths.resolve('package.json'),\n );\n\n return {\n cliVersion: version,\n gitVersion: gitVersion ?? 'unknown',\n packageVersion,\n timestamp,\n commit: commit ?? 'unknown',\n };\n}\n\nexport async function createConfig(\n paths: BundlingPaths,\n options: BundlingOptions,\n): Promise<Configuration> {\n const {\n checksEnabled,\n isDev,\n frontendConfig,\n moduleFederationRemote,\n publicSubPath = '',\n webpack,\n } = options;\n\n const { plugins, loaders } = transforms(options);\n // Any package that is part of the monorepo but outside the monorepo root dir need\n // separate resolution logic.\n\n const validBaseUrl = resolveBaseUrl(frontendConfig, moduleFederationRemote);\n let publicPath = validBaseUrl.pathname.replace(/\\/$/, '');\n if (publicSubPath) {\n publicPath = `${publicPath}${publicSubPath}`.replace('//', '/');\n }\n\n if (isDev) {\n const { host, port } = resolveEndpoint(\n options.frontendConfig,\n options.moduleFederationRemote,\n );\n\n const refreshOptions = {\n overlay: {\n sockProtocol: 'ws',\n sockHost: host,\n sockPort: port,\n },\n } as const;\n\n if (webpack) {\n const ReactRefreshPlugin = require('@pmmmwh/react-refresh-webpack-plugin');\n plugins.push(new ReactRefreshPlugin(refreshOptions));\n } else {\n const RspackReactRefreshPlugin = require('@rspack/plugin-react-refresh');\n plugins.push(new RspackReactRefreshPlugin(refreshOptions));\n }\n }\n\n if (checksEnabled) {\n const TsCheckerPlugin = webpack\n ? (require('fork-ts-checker-webpack-plugin') as typeof import('fork-ts-checker-webpack-plugin'))\n : TsCheckerRspackPlugin;\n const ESLintPlugin = webpack\n ? (require('eslint-webpack-plugin') as typeof import('eslint-webpack-plugin'))\n : ESLintRspackPlugin;\n plugins.push(\n new TsCheckerPlugin({\n typescript: { configFile: paths.targetTsConfig, memoryLimit: 8192 },\n }),\n new ESLintPlugin({\n cache: false, // Cache seems broken\n context: paths.targetPath,\n files: ['**/*.(ts|tsx|mts|cts|js|jsx|mjs|cjs)'],\n }),\n );\n }\n\n const bundler = webpack ? (webpack as unknown as typeof rspack) : rspack;\n\n // TODO(blam): process is no longer auto polyfilled by webpack in v5.\n // we use the provide plugin to provide this polyfill, but lets look\n // to remove this eventually!\n plugins.push(\n new bundler.ProvidePlugin({\n process: require.resolve('process/browser'),\n Buffer: ['buffer', 'Buffer'],\n }),\n );\n\n if (!options.moduleFederationRemote) {\n const templateOptions = {\n meta: {\n 'backstage-app-mode': options?.appMode ?? 'public',\n },\n template: paths.targetHtml,\n templateParameters: {\n publicPath,\n config: frontendConfig,\n },\n };\n if (webpack) {\n // Config injection via index.html doesn't work across reloads with\n // WebPack, so we rely on the APP_CONFIG injection instead\n plugins.push(new HtmlWebpackPlugin(templateOptions));\n } else {\n // With Rspack we inject config via index.html, this is both because we\n // can't use APP_CONFIG due to the lack of support for runtime values, but\n // also because we are able to do it and it lines up better with what the\n // app-backend is doing.\n //\n // We still use the html plugin from WebPack, since the Rspack one won't\n // let us inject complex objects like the config.\n plugins.push(\n new ConfigInjectingHtmlWebpackPlugin(\n templateOptions,\n options.getFrontendAppConfigs,\n ),\n );\n }\n plugins.push(\n new HtmlWebpackPlugin({\n meta: {\n 'backstage-app-mode': options?.appMode ?? 'public',\n // This is added to be written in the later step, and finally read by the extra entry point\n 'backstage-public-path': '<%= publicPath %>/',\n },\n minify: false,\n publicPath: '<%= publicPath %>',\n filename: 'index.html.tmpl',\n template: `${require.resolve('raw-loader')}!${paths.targetHtml}`,\n }),\n );\n }\n\n if (options.moduleFederationRemote) {\n const AdaptedModuleFederationPlugin = webpack\n ? (require('@module-federation/enhanced/webpack')\n .ModuleFederationPlugin as unknown as typeof ModuleFederationPlugin)\n : ModuleFederationPlugin;\n\n const exposes = options.moduleFederationRemote.exposes\n ? Object.fromEntries(\n Object.entries(options.moduleFederationRemote?.exposes).map(\n ([k, v]) => [k, resolvePath(paths.targetPath, v)],\n ),\n )\n : {\n '.': paths.targetEntry,\n };\n\n plugins.push(\n new AdaptedModuleFederationPlugin({\n filename: 'remoteEntry.js',\n exposes,\n name: options.moduleFederationRemote.name,\n runtime: false,\n shared: options.moduleFederationRemote.sharedDependencies,\n }),\n );\n }\n\n const buildInfo = await readBuildInfo();\n\n plugins.push(\n webpack\n ? new webpack.DefinePlugin({\n 'process.env.BUILD_INFO': JSON.stringify(buildInfo),\n 'process.env.APP_CONFIG': webpack.DefinePlugin.runtimeValue(\n () => JSON.stringify(options.getFrontendAppConfigs()),\n true,\n ),\n // This allows for conditional imports of react-dom/client, since there's no way\n // to check for presence of it in source code without module resolution errors.\n 'process.env.HAS_REACT_DOM_CLIENT': JSON.stringify(\n hasReactDomClient(),\n ),\n })\n : new bundler.DefinePlugin({\n 'process.env.BUILD_INFO': JSON.stringify(buildInfo),\n 'process.env.APP_CONFIG': JSON.stringify([]), // Inject via index.html instead\n // This allows for conditional imports of react-dom/client, since there's no way\n // to check for presence of it in source code without module resolution errors.\n 'process.env.HAS_REACT_DOM_CLIENT': JSON.stringify(\n hasReactDomClient(),\n ),\n }),\n );\n\n if (options.linkedWorkspace) {\n plugins.push(\n ...(await createWorkspaceLinkingPlugins(\n bundler,\n options.linkedWorkspace,\n )),\n );\n }\n\n // These files are required by the transpiled code when using React Refresh.\n // They need to be excluded to the module scope plugin which ensures that files\n // that exist in the package are required.\n const reactRefreshFiles = webpack\n ? [\n require.resolve(\n '@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js',\n ),\n require.resolve(\n '@pmmmwh/react-refresh-webpack-plugin/overlay/index.js',\n ),\n require.resolve('react-refresh'),\n ]\n : [];\n\n const mode = isDev ? 'development' : 'production';\n const optimization = optimizationConfig(options);\n\n return {\n mode,\n profile: false,\n ...(isDev\n ? {\n watchOptions: {\n ignored: /node_modules\\/(?!__backstage-autodetected-plugins__)/,\n },\n }\n : {}),\n optimization,\n bail: false,\n performance: {\n hints: false, // we check the gzip size instead\n },\n devtool: isDev ? 'eval-cheap-module-source-map' : 'source-map',\n context: paths.targetPath,\n entry: [\n /* eslint-disable-next-line no-restricted-syntax */\n findOwnPaths(__dirname).resolve('config/webpack-public-path'),\n ...(options.additionalEntryPoints ?? []),\n paths.targetEntry,\n ],\n resolve: {\n extensions: ['.ts', '.tsx', '.mjs', '.js', '.jsx', '.json', '.wasm'],\n mainFields: ['browser', 'module', 'main'],\n fallback: {\n ...pickBy(require('node-stdlib-browser')),\n module: false,\n dgram: false,\n dns: false,\n fs: false,\n http2: false,\n net: false,\n tls: false,\n child_process: false,\n\n /* new ignores */\n path: false,\n https: false,\n http: false,\n util: require.resolve('util/'),\n },\n // FIXME: see also https://github.com/web-infra-dev/rspack/issues/3408\n ...(webpack && {\n plugins: [\n new ModuleScopePlugin(\n [paths.targetSrc, paths.targetDev],\n [paths.targetPackageJson, ...reactRefreshFiles],\n ),\n ],\n }),\n },\n module: {\n rules: loaders,\n },\n output: {\n uniqueName: options.moduleFederationRemote?.name,\n path: paths.targetDist,\n publicPath: options.moduleFederationRemote ? 'auto' : `${publicPath}/`,\n filename: isDev ? '[name].js' : 'static/[name].[contenthash:8].js',\n chunkFilename: isDev\n ? '[name].chunk.js'\n : 'static/[name].[contenthash:8].chunk.js',\n ...(isDev\n ? {\n devtoolModuleFilenameTemplate: (info: any) =>\n `file:///${resolvePath(info.absoluteResourcePath).replace(\n /\\\\/g,\n '/',\n )}`,\n }\n : {}),\n },\n experiments: {\n lazyCompilation: yn(process.env.EXPERIMENTAL_LAZY_COMPILATION),\n ...(!webpack && {\n // We're still using `style-loader` for custom `insert` option\n css: false,\n }),\n },\n plugins,\n ignoreWarnings: [\n // @protobufjs/inquire uses require(moduleName) with a dynamic argument.\n // Since protobufjs >=7.5.9 this code path is never exercised (the\n // bundler-safe optional module lookups backport replaced all call sites),\n // but webpack/rspack still statically analyzes the source and emits a\n // \"Critical dependency\" warning. Safe to suppress.\n // See https://github.com/protobufjs/protobuf.js/issues/2057\n {\n module: /@protobufjs[\\\\/]inquire/,\n message:\n /Critical dependency: the request of a dependency is an expression/,\n },\n // TODO: remove this warning skipping as soon as the corresponding bundler limitation\n // described in issue https://github.com/web-infra-dev/rspack/issues/13635 is fixed\n // when PR: https://github.com/web-infra-dev/rspack/pull/13636 is merged.\n ...(options.moduleFederationRemote\n ? [\n {\n message:\n /No version specified and unable to automatically determine one\\. No version in description file/,\n },\n ]\n : []),\n ],\n };\n}\n"],"names":["runOutput","fs","targetPaths","version","transforms","TsCheckerRspackPlugin","ESLintRspackPlugin","rspack","HtmlWebpackPlugin","ConfigInjectingHtmlWebpackPlugin","ModuleFederationPlugin","resolvePath","hasReactDomClient","createWorkspaceLinkingPlugins","optimization","optimizationConfig","findOwnPaths","pickBy","ModuleScopePlugin","yn"],"mappings":"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"}
1
+ {"version":3,"file":"config.cjs.js","sources":["../../../src/lib/bundler/config.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { resolve as resolvePath } from 'node:path';\nimport { BundlingOptions, ModuleFederationRemoteOptions } from './types';\nimport { rspack, Configuration } from '@rspack/core';\n\nimport { BundlingPaths } from './paths';\nimport { Config } from '@backstage/config';\nimport ESLintRspackPlugin from 'eslint-rspack-plugin';\nimport { TsCheckerRspackPlugin } from 'ts-checker-rspack-plugin';\nimport HtmlWebpackPlugin from 'html-webpack-plugin';\nimport ModuleScopePlugin from 'react-dev-utils/ModuleScopePlugin';\nimport { ModuleFederationPlugin } from '@module-federation/enhanced/rspack';\n\nimport fs from 'fs-extra';\nimport { optimization as optimizationConfig } from './optimization';\nimport pickBy from 'lodash/pickBy';\nimport { findOwnPaths, runOutput, targetPaths } from '@backstage/cli-common';\n\nimport { transforms } from './transforms';\nimport { version } from '../../../package.json';\nimport yn from 'yn';\nimport { hasReactDomClient } from './hasReactDomClient';\nimport { createWorkspaceLinkingPlugins } from './linkWorkspaces';\nimport { ConfigInjectingHtmlWebpackPlugin } from './ConfigInjectingHtmlWebpackPlugin';\nimport { STATIC_ASSET_HASH_LENGTH } from './staticAssetHash';\n\nexport function resolveBaseUrl(\n config: Config,\n moduleFederationRemote?: ModuleFederationRemoteOptions,\n): URL {\n const baseUrl = config.getOptionalString('app.baseUrl');\n\n const defaultBaseUrl = moduleFederationRemote\n ? `http://localhost:${process.env.PORT ?? '3000'}`\n : 'http://localhost:3000';\n\n try {\n return new URL(baseUrl ?? '/', defaultBaseUrl);\n } catch (error) {\n throw new Error(`Invalid app.baseUrl, ${error}`);\n }\n}\n\nexport function resolveEndpoint(\n config: Config,\n moduleFederationRemote?: ModuleFederationRemoteOptions,\n): {\n host: string;\n port: number;\n} {\n const url = resolveBaseUrl(config, moduleFederationRemote);\n\n return {\n host: config.getOptionalString('app.listen.host') ?? url.hostname,\n port:\n config.getOptionalNumber('app.listen.port') ??\n Number(url.port) ??\n (url.protocol === 'https:' ? 443 : 80),\n };\n}\n\nasync function readBuildInfo() {\n const timestamp = Date.now();\n\n let commit: string | undefined;\n try {\n commit = await runOutput(['git', 'rev-parse', 'HEAD']);\n } catch (error) {\n // ignore, see below\n }\n\n let gitVersion: string | undefined;\n try {\n gitVersion = await runOutput(['git', 'describe', '--always']);\n } catch (error) {\n // ignore, see below\n }\n\n if (commit === undefined || gitVersion === undefined) {\n console.info(\n 'NOTE: Did not compute git version or commit hash, could not execute the git command line utility',\n );\n }\n\n const { version: packageVersion } = await fs.readJson(\n targetPaths.resolve('package.json'),\n );\n\n return {\n cliVersion: version,\n gitVersion: gitVersion ?? 'unknown',\n packageVersion,\n timestamp,\n commit: commit ?? 'unknown',\n };\n}\n\nexport async function createConfig(\n paths: BundlingPaths,\n options: BundlingOptions,\n): Promise<Configuration> {\n const {\n checksEnabled,\n isDev,\n frontendConfig,\n moduleFederationRemote,\n publicSubPath = '',\n webpack,\n } = options;\n\n const { plugins, loaders } = transforms(options);\n // Any package that is part of the monorepo but outside the monorepo root dir need\n // separate resolution logic.\n\n const validBaseUrl = resolveBaseUrl(frontendConfig, moduleFederationRemote);\n let publicPath = validBaseUrl.pathname.replace(/\\/$/, '');\n if (publicSubPath) {\n publicPath = `${publicPath}${publicSubPath}`.replace('//', '/');\n }\n\n if (isDev) {\n const { host, port } = resolveEndpoint(\n options.frontendConfig,\n options.moduleFederationRemote,\n );\n\n const refreshOptions = {\n overlay: {\n sockProtocol: 'ws',\n sockHost: host,\n sockPort: port,\n },\n } as const;\n\n if (webpack) {\n const ReactRefreshPlugin = require('@pmmmwh/react-refresh-webpack-plugin');\n plugins.push(new ReactRefreshPlugin(refreshOptions));\n } else {\n const RspackReactRefreshPlugin = require('@rspack/plugin-react-refresh');\n plugins.push(new RspackReactRefreshPlugin(refreshOptions));\n }\n }\n\n if (checksEnabled) {\n const TsCheckerPlugin = webpack\n ? (require('fork-ts-checker-webpack-plugin') as typeof import('fork-ts-checker-webpack-plugin'))\n : TsCheckerRspackPlugin;\n const ESLintPlugin = webpack\n ? (require('eslint-webpack-plugin') as typeof import('eslint-webpack-plugin'))\n : ESLintRspackPlugin;\n plugins.push(\n new TsCheckerPlugin({\n typescript: { configFile: paths.targetTsConfig, memoryLimit: 8192 },\n }),\n new ESLintPlugin({\n cache: false, // Cache seems broken\n context: paths.targetPath,\n files: ['**/*.(ts|tsx|mts|cts|js|jsx|mjs|cjs)'],\n }),\n );\n }\n\n const bundler = webpack ? (webpack as unknown as typeof rspack) : rspack;\n\n // TODO(blam): process is no longer auto polyfilled by webpack in v5.\n // we use the provide plugin to provide this polyfill, but lets look\n // to remove this eventually!\n plugins.push(\n new bundler.ProvidePlugin({\n process: require.resolve('process/browser'),\n Buffer: ['buffer', 'Buffer'],\n }),\n );\n\n if (!options.moduleFederationRemote) {\n const templateOptions = {\n meta: {\n 'backstage-app-mode': options?.appMode ?? 'public',\n },\n template: paths.targetHtml,\n templateParameters: {\n publicPath,\n config: frontendConfig,\n },\n };\n if (webpack) {\n // Config injection via index.html doesn't work across reloads with\n // WebPack, so we rely on the APP_CONFIG injection instead\n plugins.push(new HtmlWebpackPlugin(templateOptions));\n } else {\n // With Rspack we inject config via index.html, this is both because we\n // can't use APP_CONFIG due to the lack of support for runtime values, but\n // also because we are able to do it and it lines up better with what the\n // app-backend is doing.\n //\n // We still use the html plugin from WebPack, since the Rspack one won't\n // let us inject complex objects like the config.\n plugins.push(\n new ConfigInjectingHtmlWebpackPlugin(\n templateOptions,\n options.getFrontendAppConfigs,\n ),\n );\n }\n plugins.push(\n new HtmlWebpackPlugin({\n meta: {\n 'backstage-app-mode': options?.appMode ?? 'public',\n // This is added to be written in the later step, and finally read by the extra entry point\n 'backstage-public-path': '<%= publicPath %>/',\n },\n minify: false,\n publicPath: '<%= publicPath %>',\n filename: 'index.html.tmpl',\n template: `${require.resolve('raw-loader')}!${paths.targetHtml}`,\n }),\n );\n }\n\n if (options.moduleFederationRemote) {\n const AdaptedModuleFederationPlugin = webpack\n ? (require('@module-federation/enhanced/webpack')\n .ModuleFederationPlugin as unknown as typeof ModuleFederationPlugin)\n : ModuleFederationPlugin;\n\n const exposes = options.moduleFederationRemote.exposes\n ? Object.fromEntries(\n Object.entries(options.moduleFederationRemote?.exposes).map(\n ([k, v]) => [k, resolvePath(paths.targetPath, v)],\n ),\n )\n : {\n '.': paths.targetEntry,\n };\n\n plugins.push(\n new AdaptedModuleFederationPlugin({\n filename: 'remoteEntry.js',\n exposes,\n name: options.moduleFederationRemote.name,\n runtime: false,\n shared: options.moduleFederationRemote.sharedDependencies,\n }),\n );\n }\n\n const buildInfo = await readBuildInfo();\n\n plugins.push(\n webpack\n ? new webpack.DefinePlugin({\n 'process.env.BUILD_INFO': JSON.stringify(buildInfo),\n 'process.env.APP_CONFIG': webpack.DefinePlugin.runtimeValue(\n () => JSON.stringify(options.getFrontendAppConfigs()),\n true,\n ),\n // This allows for conditional imports of react-dom/client, since there's no way\n // to check for presence of it in source code without module resolution errors.\n 'process.env.HAS_REACT_DOM_CLIENT': JSON.stringify(\n hasReactDomClient(),\n ),\n })\n : new bundler.DefinePlugin({\n 'process.env.BUILD_INFO': JSON.stringify(buildInfo),\n 'process.env.APP_CONFIG': JSON.stringify([]), // Inject via index.html instead\n // This allows for conditional imports of react-dom/client, since there's no way\n // to check for presence of it in source code without module resolution errors.\n 'process.env.HAS_REACT_DOM_CLIENT': JSON.stringify(\n hasReactDomClient(),\n ),\n }),\n );\n\n if (options.linkedWorkspace) {\n plugins.push(\n ...(await createWorkspaceLinkingPlugins(\n bundler,\n options.linkedWorkspace,\n )),\n );\n }\n\n // These files are required by the transpiled code when using React Refresh.\n // They need to be excluded to the module scope plugin which ensures that files\n // that exist in the package are required.\n const reactRefreshFiles = webpack\n ? [\n require.resolve(\n '@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js',\n ),\n require.resolve(\n '@pmmmwh/react-refresh-webpack-plugin/overlay/index.js',\n ),\n require.resolve('react-refresh'),\n ]\n : [];\n\n const mode = isDev ? 'development' : 'production';\n const optimization = optimizationConfig(options);\n\n return {\n mode,\n profile: false,\n ...(isDev\n ? {\n watchOptions: {\n ignored: /node_modules\\/(?!__backstage-autodetected-plugins__)/,\n },\n }\n : {}),\n optimization,\n bail: false,\n performance: {\n hints: false, // we check the gzip size instead\n },\n devtool: isDev ? 'eval-cheap-module-source-map' : 'source-map',\n context: paths.targetPath,\n entry: [\n /* eslint-disable-next-line no-restricted-syntax */\n findOwnPaths(__dirname).resolve('config/webpack-public-path'),\n ...(options.additionalEntryPoints ?? []),\n paths.targetEntry,\n ],\n resolve: {\n extensions: ['.ts', '.tsx', '.mjs', '.js', '.jsx', '.json', '.wasm'],\n mainFields: ['browser', 'module', 'main'],\n fallback: {\n ...pickBy(require('node-stdlib-browser')),\n module: false,\n dgram: false,\n dns: false,\n fs: false,\n http2: false,\n net: false,\n tls: false,\n child_process: false,\n\n /* new ignores */\n path: false,\n https: false,\n http: false,\n util: require.resolve('util/'),\n },\n // FIXME: see also https://github.com/web-infra-dev/rspack/issues/3408\n ...(webpack && {\n plugins: [\n new ModuleScopePlugin(\n [paths.targetSrc, paths.targetDev],\n [paths.targetPackageJson, ...reactRefreshFiles],\n ),\n ],\n }),\n },\n module: {\n rules: loaders,\n },\n output: {\n uniqueName: options.moduleFederationRemote?.name,\n path: paths.targetDist,\n publicPath: options.moduleFederationRemote ? 'auto' : `${publicPath}/`,\n filename: isDev\n ? '[name].js'\n : `static/[name].[contenthash:${STATIC_ASSET_HASH_LENGTH}].js`,\n chunkFilename: isDev\n ? '[name].chunk.js'\n : `static/[name].[contenthash:${STATIC_ASSET_HASH_LENGTH}].chunk.js`,\n ...(isDev\n ? {\n devtoolModuleFilenameTemplate: (info: any) =>\n `file:///${resolvePath(info.absoluteResourcePath).replace(\n /\\\\/g,\n '/',\n )}`,\n }\n : {}),\n },\n experiments: {\n lazyCompilation: yn(process.env.EXPERIMENTAL_LAZY_COMPILATION),\n ...(!webpack && {\n // We're still using `style-loader` for custom `insert` option\n css: false,\n }),\n },\n plugins,\n ignoreWarnings: [\n // @protobufjs/inquire uses require(moduleName) with a dynamic argument.\n // Since protobufjs >=7.5.9 this code path is never exercised (the\n // bundler-safe optional module lookups backport replaced all call sites),\n // but webpack/rspack still statically analyzes the source and emits a\n // \"Critical dependency\" warning. Safe to suppress.\n // See https://github.com/protobufjs/protobuf.js/issues/2057\n {\n module: /@protobufjs[\\\\/]inquire/,\n message:\n /Critical dependency: the request of a dependency is an expression/,\n },\n // TODO: remove this warning skipping as soon as the corresponding bundler limitation\n // described in issue https://github.com/web-infra-dev/rspack/issues/13635 is fixed\n // when PR: https://github.com/web-infra-dev/rspack/pull/13636 is merged.\n ...(options.moduleFederationRemote\n ? [\n {\n message:\n /No version specified and unable to automatically determine one\\. No version in description file/,\n },\n ]\n : []),\n ],\n };\n}\n"],"names":["runOutput","fs","targetPaths","version","transforms","TsCheckerRspackPlugin","ESLintRspackPlugin","rspack","HtmlWebpackPlugin","ConfigInjectingHtmlWebpackPlugin","ModuleFederationPlugin","resolvePath","hasReactDomClient","createWorkspaceLinkingPlugins","optimization","optimizationConfig","findOwnPaths","pickBy","ModuleScopePlugin","STATIC_ASSET_HASH_LENGTH","yn"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var core = require('@rspack/core');
4
+ var staticAssetHash = require('./staticAssetHash.cjs.js');
4
5
 
5
6
  const optimization = (options) => {
6
7
  const { isDev, webpack } = options;
@@ -41,7 +42,7 @@ const optimization = (options) => {
41
42
  )[1];
42
43
  return packageName.replace("@", "");
43
44
  },
44
- filename: isDev ? "module-[name].js" : "static/module-[name].[contenthash:8].js",
45
+ filename: isDev ? "module-[name].js" : `static/module-[name].[contenthash:${staticAssetHash.STATIC_ASSET_HASH_LENGTH}].js`,
45
46
  priority: 10,
46
47
  minSize: 1e5,
47
48
  minChunks: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"optimization.cjs.js","sources":["../../../src/lib/bundler/optimization.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BundlingOptions } from './types';\nimport {\n SwcJsMinimizerRspackPlugin,\n LightningCssMinimizerRspackPlugin,\n RspackOptionsNormalized,\n} from '@rspack/core';\n\nexport const optimization = (\n options: BundlingOptions,\n): RspackOptionsNormalized['optimization'] => {\n const { isDev, webpack } = options;\n\n const MinifyPlugin = webpack\n ? require('esbuild-loader').EsbuildPlugin\n : SwcJsMinimizerRspackPlugin;\n\n return {\n minimize: !isDev,\n minimizer: [\n new MinifyPlugin({\n target: 'ES2023',\n format: 'iife',\n exclude: 'remoteEntry.js',\n }),\n // Avoid iife wrapping of module federation remote entry as it breaks the variable assignment\n new MinifyPlugin({\n target: 'ES2023',\n format: undefined,\n include: 'remoteEntry.js',\n }),\n webpack ? undefined : new LightningCssMinimizerRspackPlugin(),\n ],\n runtimeChunk: 'single',\n splitChunks: {\n automaticNameDelimiter: '-',\n cacheGroups: {\n default: false,\n // Put all vendor code needed for initial page load in individual files if they're big\n // enough, if they're smaller they end up in the main\n packages: {\n chunks: 'initial',\n test(module: any) {\n return Boolean(\n module?.resource?.match(/[\\\\/]node_modules[\\\\/](.*?)([\\\\/]|$)/),\n );\n },\n name(module: any) {\n // get the name. E.g. node_modules/packageName/not/this/part.js\n // or node_modules/packageName\n const packageName = module.resource.match(\n /[\\\\/]node_modules[\\\\/](.*?)([\\\\/]|$)/,\n )[1];\n\n // npm package names are URL-safe, but some servers don't like @ symbols\n return packageName.replace('@', '');\n },\n filename: isDev\n ? 'module-[name].js'\n : 'static/module-[name].[contenthash:8].js',\n priority: 10,\n minSize: 100000,\n minChunks: 1,\n ...(webpack && {\n maxAsyncRequests: Infinity,\n maxInitialRequests: Infinity,\n }),\n }, // filename is not included in type, but we need it\n // Group together the smallest modules\n vendor: {\n chunks: 'initial',\n test: /[\\\\/]node_modules[\\\\/]/,\n name: 'vendor',\n priority: 5,\n enforce: true,\n },\n },\n },\n };\n};\n"],"names":["SwcJsMinimizerRspackPlugin","LightningCssMinimizerRspackPlugin"],"mappings":";;;;AAuBO,MAAM,YAAA,GAAe,CAC1B,OAAA,KAC4C;AAC5C,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,OAAA;AAE3B,EAAA,MAAM,YAAA,GAAe,OAAA,GACjB,OAAA,CAAQ,gBAAgB,EAAE,aAAA,GAC1BA,+BAAA;AAEJ,EAAA,OAAO;AAAA,IACL,UAAU,CAAC,KAAA;AAAA,IACX,SAAA,EAAW;AAAA,MACT,IAAI,YAAA,CAAa;AAAA,QACf,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACV,CAAA;AAAA;AAAA,MAED,IAAI,YAAA,CAAa;AAAA,QACf,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,MACD,OAAA,GAAU,MAAA,GAAY,IAAIC,sCAAA;AAAkC,KAC9D;AAAA,IACA,YAAA,EAAc,QAAA;AAAA,IACd,WAAA,EAAa;AAAA,MACX,sBAAA,EAAwB,GAAA;AAAA,MACxB,WAAA,EAAa;AAAA,QACX,OAAA,EAAS,KAAA;AAAA;AAAA;AAAA,QAGT,QAAA,EAAU;AAAA,UACR,MAAA,EAAQ,SAAA;AAAA,UACR,KAAK,MAAA,EAAa;AAChB,YAAA,OAAO,OAAA;AAAA,cACL,MAAA,EAAQ,QAAA,EAAU,KAAA,CAAM,sCAAsC;AAAA,aAChE;AAAA,UACF,CAAA;AAAA,UACA,KAAK,MAAA,EAAa;AAGhB,YAAA,MAAM,WAAA,GAAc,OAAO,QAAA,CAAS,KAAA;AAAA,cAClC;AAAA,cACA,CAAC,CAAA;AAGH,YAAA,OAAO,WAAA,CAAY,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAAA,UACpC,CAAA;AAAA,UACA,QAAA,EAAU,QACN,kBAAA,GACA,yCAAA;AAAA,UACJ,QAAA,EAAU,EAAA;AAAA,UACV,OAAA,EAAS,GAAA;AAAA,UACT,SAAA,EAAW,CAAA;AAAA,UACX,GAAI,OAAA,IAAW;AAAA,YACb,gBAAA,EAAkB,QAAA;AAAA,YAClB,kBAAA,EAAoB;AAAA;AACtB,SACF;AAAA;AAAA;AAAA,QAEA,MAAA,EAAQ;AAAA,UACN,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,wBAAA;AAAA,UACN,IAAA,EAAM,QAAA;AAAA,UACN,QAAA,EAAU,CAAA;AAAA,UACV,OAAA,EAAS;AAAA;AACX;AACF;AACF,GACF;AACF;;;;"}
1
+ {"version":3,"file":"optimization.cjs.js","sources":["../../../src/lib/bundler/optimization.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BundlingOptions } from './types';\nimport {\n SwcJsMinimizerRspackPlugin,\n LightningCssMinimizerRspackPlugin,\n RspackOptionsNormalized,\n} from '@rspack/core';\nimport { STATIC_ASSET_HASH_LENGTH } from './staticAssetHash';\n\nexport const optimization = (\n options: BundlingOptions,\n): RspackOptionsNormalized['optimization'] => {\n const { isDev, webpack } = options;\n\n const MinifyPlugin = webpack\n ? require('esbuild-loader').EsbuildPlugin\n : SwcJsMinimizerRspackPlugin;\n\n return {\n minimize: !isDev,\n minimizer: [\n new MinifyPlugin({\n target: 'ES2023',\n format: 'iife',\n exclude: 'remoteEntry.js',\n }),\n // Avoid iife wrapping of module federation remote entry as it breaks the variable assignment\n new MinifyPlugin({\n target: 'ES2023',\n format: undefined,\n include: 'remoteEntry.js',\n }),\n webpack ? undefined : new LightningCssMinimizerRspackPlugin(),\n ],\n runtimeChunk: 'single',\n splitChunks: {\n automaticNameDelimiter: '-',\n cacheGroups: {\n default: false,\n // Put all vendor code needed for initial page load in individual files if they're big\n // enough, if they're smaller they end up in the main\n packages: {\n chunks: 'initial',\n test(module: any) {\n return Boolean(\n module?.resource?.match(/[\\\\/]node_modules[\\\\/](.*?)([\\\\/]|$)/),\n );\n },\n name(module: any) {\n // get the name. E.g. node_modules/packageName/not/this/part.js\n // or node_modules/packageName\n const packageName = module.resource.match(\n /[\\\\/]node_modules[\\\\/](.*?)([\\\\/]|$)/,\n )[1];\n\n // npm package names are URL-safe, but some servers don't like @ symbols\n return packageName.replace('@', '');\n },\n filename: isDev\n ? 'module-[name].js'\n : `static/module-[name].[contenthash:${STATIC_ASSET_HASH_LENGTH}].js`,\n priority: 10,\n minSize: 100000,\n minChunks: 1,\n ...(webpack && {\n maxAsyncRequests: Infinity,\n maxInitialRequests: Infinity,\n }),\n }, // filename is not included in type, but we need it\n // Group together the smallest modules\n vendor: {\n chunks: 'initial',\n test: /[\\\\/]node_modules[\\\\/]/,\n name: 'vendor',\n priority: 5,\n enforce: true,\n },\n },\n },\n };\n};\n"],"names":["SwcJsMinimizerRspackPlugin","LightningCssMinimizerRspackPlugin","STATIC_ASSET_HASH_LENGTH"],"mappings":";;;;;AAwBO,MAAM,YAAA,GAAe,CAC1B,OAAA,KAC4C;AAC5C,EAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,OAAA;AAE3B,EAAA,MAAM,YAAA,GAAe,OAAA,GACjB,OAAA,CAAQ,gBAAgB,EAAE,aAAA,GAC1BA,+BAAA;AAEJ,EAAA,OAAO;AAAA,IACL,UAAU,CAAC,KAAA;AAAA,IACX,SAAA,EAAW;AAAA,MACT,IAAI,YAAA,CAAa;AAAA,QACf,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACV,CAAA;AAAA;AAAA,MAED,IAAI,YAAA,CAAa;AAAA,QACf,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,MACD,OAAA,GAAU,MAAA,GAAY,IAAIC,sCAAA;AAAkC,KAC9D;AAAA,IACA,YAAA,EAAc,QAAA;AAAA,IACd,WAAA,EAAa;AAAA,MACX,sBAAA,EAAwB,GAAA;AAAA,MACxB,WAAA,EAAa;AAAA,QACX,OAAA,EAAS,KAAA;AAAA;AAAA;AAAA,QAGT,QAAA,EAAU;AAAA,UACR,MAAA,EAAQ,SAAA;AAAA,UACR,KAAK,MAAA,EAAa;AAChB,YAAA,OAAO,OAAA;AAAA,cACL,MAAA,EAAQ,QAAA,EAAU,KAAA,CAAM,sCAAsC;AAAA,aAChE;AAAA,UACF,CAAA;AAAA,UACA,KAAK,MAAA,EAAa;AAGhB,YAAA,MAAM,WAAA,GAAc,OAAO,QAAA,CAAS,KAAA;AAAA,cAClC;AAAA,cACA,CAAC,CAAA;AAGH,YAAA,OAAO,WAAA,CAAY,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAAA,UACpC,CAAA;AAAA,UACA,QAAA,EAAU,KAAA,GACN,kBAAA,GACA,CAAA,kCAAA,EAAqCC,wCAAwB,CAAA,IAAA,CAAA;AAAA,UACjE,QAAA,EAAU,EAAA;AAAA,UACV,OAAA,EAAS,GAAA;AAAA,UACT,SAAA,EAAW,CAAA;AAAA,UACX,GAAI,OAAA,IAAW;AAAA,YACb,gBAAA,EAAkB,QAAA;AAAA,YAClB,kBAAA,EAAoB;AAAA;AACtB,SACF;AAAA;AAAA;AAAA,QAEA,MAAA,EAAQ;AAAA,UACN,MAAA,EAAQ,SAAA;AAAA,UACR,IAAA,EAAM,wBAAA;AAAA,UACN,IAAA,EAAM,QAAA;AAAA,UACN,QAAA,EAAU,CAAA;AAAA,UACV,OAAA,EAAS;AAAA;AACX;AACF;AACF,GACF;AACF;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const STATIC_ASSET_HASH_LENGTH = 12;
4
+
5
+ exports.STATIC_ASSET_HASH_LENGTH = STATIC_ASSET_HASH_LENGTH;
6
+ //# sourceMappingURL=staticAssetHash.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staticAssetHash.cjs.js","sources":["../../../src/lib/bundler/staticAssetHash.ts"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Static assets may remain cached across many builds, so use enough hash\n// characters to keep filename collisions unlikely across deployments.\nexport const STATIC_ASSET_HASH_LENGTH = 12;\n"],"names":[],"mappings":";;AAkBO,MAAM,wBAAA,GAA2B;;;;"}
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var core = require('@rspack/core');
4
+ var staticAssetHash = require('./staticAssetHash.cjs.js');
4
5
 
5
6
  const transforms = (options) => {
6
7
  const { isDev, isBackend, webpack } = options;
@@ -88,14 +89,14 @@ const transforms = (options) => {
88
89
  ],
89
90
  type: "asset/resource",
90
91
  generator: {
91
- filename: "static/[name].[hash:8][ext]"
92
+ filename: `static/[name].[hash:${staticAssetHash.STATIC_ASSET_HASH_LENGTH}][ext]`
92
93
  }
93
94
  },
94
95
  {
95
96
  test: /\.(eot|woff|woff2|ttf)$/i,
96
97
  type: "asset/resource",
97
98
  generator: {
98
- filename: "static/[name].[hash][ext][query]"
99
+ filename: `static/[name].[hash:${staticAssetHash.STATIC_ASSET_HASH_LENGTH}][ext][query]`
99
100
  }
100
101
  },
101
102
  {
@@ -106,7 +107,7 @@ const transforms = (options) => {
106
107
  include: /\.(md)$/,
107
108
  type: "asset/resource",
108
109
  generator: {
109
- filename: "static/[name].[hash][ext][query]"
110
+ filename: `static/[name].[hash:${staticAssetHash.STATIC_ASSET_HASH_LENGTH}][ext][query]`
110
111
  }
111
112
  },
112
113
  {
@@ -131,8 +132,8 @@ const transforms = (options) => {
131
132
  if (!isDev) {
132
133
  plugins.push(
133
134
  new CssExtractPlugin({
134
- filename: "static/[name].[contenthash:8].css",
135
- chunkFilename: "static/[name].[id].[contenthash:8].css",
135
+ filename: `static/[name].[contenthash:${staticAssetHash.STATIC_ASSET_HASH_LENGTH}].css`,
136
+ chunkFilename: `static/[name].[id].[contenthash:${staticAssetHash.STATIC_ASSET_HASH_LENGTH}].css`,
136
137
  insert: insertBeforeJssStyles
137
138
  // Only applies to async chunks
138
139
  })
@@ -1 +1 @@
1
- {"version":3,"file":"transforms.cjs.js","sources":["../../../src/lib/bundler/transforms.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n RuleSetRule,\n RspackPluginInstance,\n CssExtractRspackPlugin,\n WebpackPluginInstance,\n} from '@rspack/core';\n\ntype Transforms = {\n loaders: RuleSetRule[];\n plugins: Array<RspackPluginInstance | WebpackPluginInstance>;\n};\n\ntype TransformOptions = {\n isDev: boolean;\n isBackend?: boolean;\n webpack?: typeof import('webpack').webpack;\n};\n\nexport const transforms = (options: TransformOptions): Transforms => {\n const { isDev, isBackend, webpack } = options;\n\n const CssExtractPlugin: typeof CssExtractRspackPlugin = webpack\n ? (require('mini-css-extract-plugin') as unknown as typeof CssExtractRspackPlugin)\n : CssExtractRspackPlugin;\n\n // This ensures that styles inserted from the style-loader and any\n // async style chunks are always given lower priority than JSS styles.\n // Note that this function is stringified and executed in the browser\n // after transpilation, so stick to simple syntax\n function insertBeforeJssStyles(element: any) {\n const head = document.head;\n // This makes sure that any style elements we insert get put before the\n // dynamic styles from JSS, such as the ones from `makeStyles()`.\n // TODO(Rugvip): This will likely break in material-ui v5, keep an eye on it.\n const firstJssNode = head.querySelector('style[data-jss]');\n if (!firstJssNode) {\n head.appendChild(element);\n } else {\n head.insertBefore(element, firstJssNode);\n }\n }\n\n const loaders = [\n {\n test: /\\.(tsx?)$/,\n exclude: /node_modules/,\n use: [\n {\n loader: webpack\n ? require.resolve('swc-loader')\n : 'builtin:swc-loader',\n options: {\n jsc: {\n target: 'es2023',\n externalHelpers: !isBackend,\n parser: {\n syntax: 'typescript',\n tsx: !isBackend,\n dynamicImport: true,\n },\n transform: {\n react: isBackend\n ? undefined\n : {\n runtime: 'automatic',\n refresh: isDev,\n },\n },\n },\n },\n },\n ],\n },\n {\n test: /\\.(jsx?|mjs|cjs)$/,\n exclude: /node_modules/,\n use: [\n {\n loader: webpack\n ? require.resolve('swc-loader')\n : 'builtin:swc-loader',\n options: {\n jsc: {\n target: 'es2023',\n externalHelpers: !isBackend,\n parser: {\n syntax: 'ecmascript',\n jsx: !isBackend,\n dynamicImport: true,\n },\n transform: {\n react: isBackend\n ? undefined\n : {\n runtime: 'automatic',\n refresh: isDev,\n },\n },\n },\n },\n },\n ],\n },\n {\n test: /\\.(js|mjs|cjs)$/,\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: [\n /\\.bmp$/,\n /\\.gif$/,\n /\\.jpe?g$/,\n /\\.png$/,\n /\\.frag$/,\n /\\.vert$/,\n { and: [/\\.svg$/, { not: [/\\.icon\\.svg$/] }] },\n /\\.xml$/,\n /\\.ico$/,\n /\\.webp$/,\n ],\n type: 'asset/resource',\n generator: {\n filename: 'static/[name].[hash:8][ext]',\n },\n },\n {\n test: /\\.(eot|woff|woff2|ttf)$/i,\n type: 'asset/resource',\n generator: {\n filename: 'static/[name].[hash][ext][query]',\n },\n },\n {\n test: /\\.ya?ml$/,\n use: require.resolve('yml-loader'),\n },\n {\n include: /\\.(md)$/,\n type: 'asset/resource',\n generator: {\n filename: 'static/[name].[hash][ext][query]',\n },\n },\n {\n test: /\\.css$/i,\n use: [\n isDev\n ? {\n loader: require.resolve('style-loader'),\n options: {\n insert: insertBeforeJssStyles,\n },\n }\n : CssExtractPlugin.loader,\n {\n loader: require.resolve('css-loader'),\n options: {\n sourceMap: true,\n },\n },\n ],\n },\n ];\n\n const plugins = new Array<RspackPluginInstance | WebpackPluginInstance>();\n\n if (!isDev) {\n plugins.push(\n new CssExtractPlugin({\n filename: 'static/[name].[contenthash:8].css',\n chunkFilename: 'static/[name].[id].[contenthash:8].css',\n insert: insertBeforeJssStyles, // Only applies to async chunks\n }),\n );\n }\n\n return { loaders, plugins };\n};\n"],"names":["CssExtractRspackPlugin"],"mappings":"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"}
1
+ {"version":3,"file":"transforms.cjs.js","sources":["../../../src/lib/bundler/transforms.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n RuleSetRule,\n RspackPluginInstance,\n CssExtractRspackPlugin,\n WebpackPluginInstance,\n} from '@rspack/core';\nimport { STATIC_ASSET_HASH_LENGTH } from './staticAssetHash';\n\ntype Transforms = {\n loaders: RuleSetRule[];\n plugins: Array<RspackPluginInstance | WebpackPluginInstance>;\n};\n\ntype TransformOptions = {\n isDev: boolean;\n isBackend?: boolean;\n webpack?: typeof import('webpack').webpack;\n};\n\nexport const transforms = (options: TransformOptions): Transforms => {\n const { isDev, isBackend, webpack } = options;\n\n const CssExtractPlugin: typeof CssExtractRspackPlugin = webpack\n ? (require('mini-css-extract-plugin') as unknown as typeof CssExtractRspackPlugin)\n : CssExtractRspackPlugin;\n\n // This ensures that styles inserted from the style-loader and any\n // async style chunks are always given lower priority than JSS styles.\n // Note that this function is stringified and executed in the browser\n // after transpilation, so stick to simple syntax\n function insertBeforeJssStyles(element: any) {\n const head = document.head;\n // This makes sure that any style elements we insert get put before the\n // dynamic styles from JSS, such as the ones from `makeStyles()`.\n // TODO(Rugvip): This will likely break in material-ui v5, keep an eye on it.\n const firstJssNode = head.querySelector('style[data-jss]');\n if (!firstJssNode) {\n head.appendChild(element);\n } else {\n head.insertBefore(element, firstJssNode);\n }\n }\n\n const loaders = [\n {\n test: /\\.(tsx?)$/,\n exclude: /node_modules/,\n use: [\n {\n loader: webpack\n ? require.resolve('swc-loader')\n : 'builtin:swc-loader',\n options: {\n jsc: {\n target: 'es2023',\n externalHelpers: !isBackend,\n parser: {\n syntax: 'typescript',\n tsx: !isBackend,\n dynamicImport: true,\n },\n transform: {\n react: isBackend\n ? undefined\n : {\n runtime: 'automatic',\n refresh: isDev,\n },\n },\n },\n },\n },\n ],\n },\n {\n test: /\\.(jsx?|mjs|cjs)$/,\n exclude: /node_modules/,\n use: [\n {\n loader: webpack\n ? require.resolve('swc-loader')\n : 'builtin:swc-loader',\n options: {\n jsc: {\n target: 'es2023',\n externalHelpers: !isBackend,\n parser: {\n syntax: 'ecmascript',\n jsx: !isBackend,\n dynamicImport: true,\n },\n transform: {\n react: isBackend\n ? undefined\n : {\n runtime: 'automatic',\n refresh: isDev,\n },\n },\n },\n },\n },\n ],\n },\n {\n test: /\\.(js|mjs|cjs)$/,\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: [\n /\\.bmp$/,\n /\\.gif$/,\n /\\.jpe?g$/,\n /\\.png$/,\n /\\.frag$/,\n /\\.vert$/,\n { and: [/\\.svg$/, { not: [/\\.icon\\.svg$/] }] },\n /\\.xml$/,\n /\\.ico$/,\n /\\.webp$/,\n ],\n type: 'asset/resource',\n generator: {\n filename: `static/[name].[hash:${STATIC_ASSET_HASH_LENGTH}][ext]`,\n },\n },\n {\n test: /\\.(eot|woff|woff2|ttf)$/i,\n type: 'asset/resource',\n generator: {\n filename: `static/[name].[hash:${STATIC_ASSET_HASH_LENGTH}][ext][query]`,\n },\n },\n {\n test: /\\.ya?ml$/,\n use: require.resolve('yml-loader'),\n },\n {\n include: /\\.(md)$/,\n type: 'asset/resource',\n generator: {\n filename: `static/[name].[hash:${STATIC_ASSET_HASH_LENGTH}][ext][query]`,\n },\n },\n {\n test: /\\.css$/i,\n use: [\n isDev\n ? {\n loader: require.resolve('style-loader'),\n options: {\n insert: insertBeforeJssStyles,\n },\n }\n : CssExtractPlugin.loader,\n {\n loader: require.resolve('css-loader'),\n options: {\n sourceMap: true,\n },\n },\n ],\n },\n ];\n\n const plugins = new Array<RspackPluginInstance | WebpackPluginInstance>();\n\n if (!isDev) {\n plugins.push(\n new CssExtractPlugin({\n filename: `static/[name].[contenthash:${STATIC_ASSET_HASH_LENGTH}].css`,\n chunkFilename: `static/[name].[id].[contenthash:${STATIC_ASSET_HASH_LENGTH}].css`,\n insert: insertBeforeJssStyles, // Only applies to async chunks\n }),\n );\n }\n\n return { loaders, plugins };\n};\n"],"names":["CssExtractRspackPlugin","STATIC_ASSET_HASH_LENGTH"],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@backstage/cli-module-build";
6
- var version = "0.1.5-next.0";
6
+ var version = "0.1.5-next.1";
7
7
  var description = "CLI module for Backstage CLI";
8
8
  var backstage = {
9
9
  role: "cli-module"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/cli-module-build",
3
- "version": "0.1.5-next.0",
3
+ "version": "0.1.5-next.1",
4
4
  "description": "CLI module for Backstage CLI",
5
5
  "backstage": {
6
6
  "role": "cli-module"
@@ -43,7 +43,7 @@
43
43
  "@backstage/cli-common": "0.2.2",
44
44
  "@backstage/cli-node": "0.3.3",
45
45
  "@backstage/config": "1.3.8",
46
- "@backstage/config-loader": "1.11.0-next.0",
46
+ "@backstage/config-loader": "1.11.0-next.1",
47
47
  "@backstage/errors": "1.3.1",
48
48
  "@backstage/module-federation-common": "0.1.4",
49
49
  "@manypkg/get-packages": "^1.1.3",
@@ -104,7 +104,7 @@
104
104
  },
105
105
  "devDependencies": {
106
106
  "@backstage/backend-test-utils": "1.11.5-next.0",
107
- "@backstage/cli": "0.36.4-next.0",
107
+ "@backstage/cli": "0.36.4-next.1",
108
108
  "@types/fs-extra": "^11.0.0",
109
109
  "@types/lodash": "^4.14.151",
110
110
  "@types/npm-packlist": "^3.0.0",