Merge pull request #25953 from JounQin/feat/rspack

feat: experimentally support using rspack instead
This commit is contained in:
Patrik Oldsberg
2024-10-12 13:47:10 +02:00
committed by GitHub
11 changed files with 498 additions and 107 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
feat: experimentally support using rspack instead under `EXPERIMENTAL_RSPACK` env flag
+19 -3
View File
@@ -170,6 +170,9 @@
"@backstage/dev-utils": "workspace:^",
"@backstage/test-utils": "workspace:^",
"@backstage/theme": "workspace:^",
"@rspack/core": "^1.0.10",
"@rspack/dev-server": "^1.0.9",
"@rspack/plugin-react-refresh": "^1.0.0",
"@types/cross-spawn": "^6.0.2",
"@types/ejs": "^3.1.3",
"@types/express": "^4.17.6",
@@ -184,6 +187,7 @@
"@types/svgo": "^2.6.2",
"@types/tar": "^6.1.1",
"@types/terser-webpack-plugin": "^5.0.4",
"@types/webpack-sources": "^3.2.3",
"@types/yarnpkg__lockfile": "^1.1.4",
"@vitejs/plugin-react": "^4.3.1",
"del": "^7.0.0",
@@ -195,15 +199,27 @@
},
"peerDependencies": {
"@modyfi/vite-plugin-yaml": "^1.1.0",
"@vitejs/plugin-react": "^4.3.1",
"vite": "^5.0.0",
"vite-plugin-html": "^3.2.2",
"@rspack/core": "^1.0.10",
"@rspack/dev-server": "^1.0.9",
"@rspack/plugin-react-refresh": "^1.0.0",
"@vitejs/plugin-react": "^4.0.4",
"vite": "^4.4.9",
"vite-plugin-html": "^3.2.0",
"vite-plugin-node-polyfills": "^0.22.0"
},
"peerDependenciesMeta": {
"@modyfi/vite-plugin-yaml": {
"optional": true
},
"@rspack/core": {
"optional": true
},
"@rspack/dev-server": {
"optional": true
},
"@rspack/plugin-react-refresh": {
"optional": true
},
"@vitejs/plugin-react": {
"optional": true
},
@@ -25,10 +25,11 @@ interface BuildAppOptions {
writeStats: boolean;
configPaths: string[];
isModuleFederationRemote?: true;
rspack?: typeof import('@rspack/core').rspack;
}
export async function buildFrontend(options: BuildAppOptions) {
const { targetDir, writeStats, configPaths } = options;
const { targetDir, writeStats, configPaths, rspack } = options;
const { name } = await fs.readJson(resolvePath(targetDir, 'package.json'));
await buildBundle({
@@ -44,5 +45,6 @@ export async function buildFrontend(options: BuildAppOptions) {
args: configPaths,
fromPackage: name,
})),
rspack,
});
}
@@ -25,6 +25,10 @@ import { isValidUrl } from '../../lib/urls';
import chalk from 'chalk';
export async function command(opts: OptionValues): Promise<void> {
const rspack = process.env.EXPERIMENTAL_RSPACK
? (require('@rspack/core') as typeof import('@rspack/core').rspack)
: undefined;
const role = await findRoleFromCommand(opts);
if (role === 'frontend' || role === 'backend') {
@@ -40,6 +44,7 @@ export async function command(opts: OptionValues): Promise<void> {
targetDir: paths.targetDir,
configPaths,
writeStats: Boolean(opts.stats),
rspack,
});
}
return buildBackend({
@@ -62,6 +67,7 @@ export async function command(opts: OptionValues): Promise<void> {
configPaths: [],
writeStats: Boolean(opts.stats),
isModuleFederationRemote: true,
rspack,
});
}
+11 -5
View File
@@ -38,7 +38,7 @@ function applyContextToError(error: string, moduleName: string): string {
}
export async function buildBundle(options: BuildOptions) {
const { statsJsonEnabled, schema: configSchema } = options;
const { statsJsonEnabled, schema: configSchema, rspack } = options;
const paths = resolveBundlingPaths(options);
const publicPaths = await resolveOptionalBundlingPaths({
@@ -54,7 +54,7 @@ export async function buildBundle(options: BuildOptions) {
getFrontendAppConfigs: () => options.frontendAppConfigs,
};
const configs = [];
const configs: webpack.Configuration[] = [];
if (options.moduleFederation?.mode === 'remote') {
// Package detection is disabled for remote bundles
@@ -119,7 +119,7 @@ export async function buildBundle(options: BuildOptions) {
);
}
const { stats } = await build(configs, isCi);
const { stats } = await build(configs, isCi, rspack);
if (!stats) {
throw new Error('No stats returned');
@@ -152,10 +152,16 @@ export async function buildBundle(options: BuildOptions) {
}
}
async function build(configs: webpack.Configuration[], isCi: boolean) {
async function build(
configs: webpack.Configuration[],
isCi: boolean,
rspack?: typeof import('@rspack/core').rspack,
) {
const bundler = (rspack ?? webpack) as typeof webpack;
const stats = await new Promise<webpack.MultiStats | undefined>(
(resolve, reject) => {
webpack(configs, (err, buildStats) => {
bundler(configs, (err, buildStats) => {
if (err) {
if (err.message) {
const { errors } = formatWebpackMessages({
+81 -51
View File
@@ -21,7 +21,7 @@ import {
} from './types';
import { posix as posixPath, resolve as resolvePath, dirname } from 'path';
import chalk from 'chalk';
import webpack, { ProvidePlugin } from 'webpack';
import webpack from 'webpack';
import { BackstagePackage } from '@backstage/cli-node';
import { BundlingPaths } from './paths';
@@ -132,6 +132,7 @@ export async function createConfig(
frontendConfig,
moduleFederation,
publicSubPath = '',
rspack,
} = options;
const { plugins, loaders } = transforms(options);
@@ -152,15 +153,20 @@ export async function createConfig(
options.moduleFederation,
);
plugins.push(
new ReactRefreshPlugin({
overlay: {
sockProtocol: 'ws',
sockHost: host,
sockPort: port,
},
}),
);
if (rspack) {
const RspackReactRefreshPlugin = require('@rspack/plugin-react-refresh');
plugins.push(new RspackReactRefreshPlugin());
} else {
plugins.push(
new ReactRefreshPlugin({
overlay: {
sockProtocol: 'ws',
sockHost: host,
sockPort: port,
},
}),
);
}
}
if (checksEnabled) {
@@ -175,11 +181,13 @@ export async function createConfig(
);
}
const bundler = rspack ? (rspack as unknown as typeof webpack) : webpack;
// TODO(blam): process is no longer auto polyfilled by webpack in v5.
// we use the provide plugin to provide this polyfill, but lets look
// to remove this eventually!
plugins.push(
new ProvidePlugin({
new bundler.ProvidePlugin({
process: require.resolve('process/browser'),
Buffer: ['buffer', 'Buffer'],
}),
@@ -187,6 +195,7 @@ export async function createConfig(
if (options.moduleFederation?.mode !== 'remote') {
plugins.push(
// `rspack.HtmlRspackPlugin` does not support object type `templateParameters` value, `frontendConfig` in this case
new HtmlWebpackPlugin({
meta: {
'backstage-app-mode': options?.appMode ?? 'public',
@@ -216,8 +225,13 @@ export async function createConfig(
if (options.moduleFederation) {
const isRemote = options.moduleFederation?.mode === 'remote';
const AdaptedModuleFederationPlugin = rspack
? (rspack.container
.ModuleFederationPlugin as unknown as typeof ModuleFederationPlugin)
: ModuleFederationPlugin;
plugins.push(
new ModuleFederationPlugin({
new AdaptedModuleFederationPlugin({
...(isRemote && {
filename: 'remoteEntry.js',
exposes: {
@@ -277,13 +291,17 @@ export async function createConfig(
}
const buildInfo = await readBuildInfo();
plugins.push(
new webpack.DefinePlugin({
new bundler.DefinePlugin({
'process.env.BUILD_INFO': JSON.stringify(buildInfo),
'process.env.APP_CONFIG': webpack.DefinePlugin.runtimeValue(
() => JSON.stringify(options.getFrontendAppConfigs()),
true,
),
'process.env.APP_CONFIG': rspack
? // FIXME: see also https://github.com/web-infra-dev/rspack/issues/5606
JSON.stringify(options.getFrontendAppConfigs())
: bundler.DefinePlugin.runtimeValue(
() => JSON.stringify(options.getFrontendAppConfigs()),
true,
),
// This allows for conditional imports of react-dom/client, since there's no way
// to check for presence of it in source code without module resolution errors.
'process.env.HAS_REACT_DOM_CLIENT': JSON.stringify(hasReactDomClient()),
@@ -293,13 +311,17 @@ export async function createConfig(
// These files are required by the transpiled code when using React Refresh.
// They need to be excluded to the module scope plugin which ensures that files
// that exist in the package are required.
const reactRefreshFiles = [
require.resolve(
'@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js',
),
require.resolve('@pmmmwh/react-refresh-webpack-plugin/overlay/index.js'),
require.resolve('react-refresh'),
];
const reactRefreshFiles = rspack
? []
: [
require.resolve(
'@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js',
),
require.resolve(
'@pmmmwh/react-refresh-webpack-plugin/overlay/index.js',
),
require.resolve('react-refresh'),
];
const mode = isDev ? 'development' : 'production';
const optimization = optimizationConfig(options);
@@ -328,16 +350,19 @@ export async function createConfig(
// Instead, provide a custom definition which always uses "development" if
// the module is part of `react` or `react-dom`, and `config.mode` otherwise.
plugins.push(
new webpack.DefinePlugin({
'process.env.NODE_ENV': webpack.DefinePlugin.runtimeValue(
({ module }) => {
if (reactPackageDirs.some(val => module.resource.startsWith(val))) {
return '"development"';
}
new bundler.DefinePlugin({
'process.env.NODE_ENV': rspack
? // FIXME: see also https://github.com/web-infra-dev/rspack/issues/5606
JSON.stringify(mode)
: webpack.DefinePlugin.runtimeValue(({ module }) => {
if (
reactPackageDirs.some(val => module.resource.startsWith(val))
) {
return '"development"';
}
return `"${mode}"`;
},
),
return `"${mode}"`;
}),
}),
);
}
@@ -386,13 +411,16 @@ export async function createConfig(
http: false,
util: require.resolve('util/'),
},
plugins: [
new LinkedPackageResolvePlugin(paths.rootNodeModules, externalPkgs),
new ModuleScopePlugin(
[paths.targetSrc, paths.targetDev],
[paths.targetPackageJson, ...reactRefreshFiles],
),
],
// FIXME: see also https://github.com/web-infra-dev/rspack/issues/3408
...(!rspack && {
plugins: [
new LinkedPackageResolvePlugin(paths.rootNodeModules, externalPkgs),
new ModuleScopePlugin(
[paths.targetSrc, paths.targetDev],
[paths.targetPackageJson, ...reactRefreshFiles],
),
],
}),
},
module: {
rules: loaders,
@@ -417,19 +445,21 @@ export async function createConfig(
: {}),
},
experiments: {
lazyCompilation: yn(process.env.EXPERIMENTAL_LAZY_COMPILATION),
lazyCompilation: !rspack && yn(process.env.EXPERIMENTAL_LAZY_COMPILATION),
...(rspack && {
// We're still using `style-loader` for custom `insert` option
css: false,
}),
},
plugins,
...(withCache
? {
cache: {
type: 'filesystem',
buildDependencies: {
config: [__filename],
},
},
}
: {}),
...(withCache && {
cache: {
type: 'filesystem',
buildDependencies: {
config: [__filename],
},
},
}),
};
}
+13 -6
View File
@@ -22,22 +22,27 @@ const { EsbuildPlugin } = require('esbuild-loader');
export const optimization = (
options: BundlingOptions,
): WebpackOptionsNormalized['optimization'] => {
const { isDev } = options;
const { isDev, rspack } = options;
const MinifyPlugin = rspack
? rspack.SwcJsMinimizerRspackPlugin
: EsbuildPlugin;
return {
minimize: !isDev,
minimizer: [
new EsbuildPlugin({
new MinifyPlugin({
target: 'ES2022',
format: 'iife',
exclude: 'remoteEntry.js',
}),
// Avoid iife wrapping of module federation remote entry as it breaks the variable assignment
new EsbuildPlugin({
new MinifyPlugin({
target: 'ES2022',
format: undefined,
include: 'remoteEntry.js',
}),
rspack && new rspack.LightningCssMinimizerRspackPlugin(),
],
runtimeChunk: 'single',
splitChunks: {
@@ -69,9 +74,11 @@ export const optimization = (
priority: 10,
minSize: 100000,
minChunks: 1,
maxAsyncRequests: Infinity,
maxInitialRequests: Infinity,
} as any, // filename is not included in type, but we need it
...(!rspack && {
maxAsyncRequests: Infinity,
maxInitialRequests: Infinity,
}),
}, // filename is not included in type, but we need it
// Group together the smallest modules
vendor: {
chunks: 'initial',
+13 -3
View File
@@ -107,12 +107,17 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
},
});
const rspack = process.env.EXPERIMENTAL_RSPACK
? (require('@rspack/core') as typeof import('@rspack/core').rspack)
: undefined;
const commonConfigOptions = {
...options,
checksEnabled: options.checksEnabled,
isDev: true,
baseUrl: url,
frontendConfig,
rspack,
getFrontendAppConfigs: () => {
return latestFrontendAppConfigs;
},
@@ -205,6 +210,11 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
root: paths.targetPath,
});
} else {
const bundler = (rspack ?? webpack) as typeof webpack;
const DevServer: typeof WebpackDevServer = rspack
? require('@rspack/dev-server').RspackDevServer
: WebpackDevServer;
const publicPaths = await resolveOptionalBundlingPaths({
entry: 'src/index-public-experimental',
dist: 'dist/public',
@@ -217,10 +227,10 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
);
}
const compiler = publicPaths
? webpack([config, await createConfig(publicPaths, commonConfigOptions)])
: webpack(config);
? bundler([config, await createConfig(publicPaths, commonConfigOptions)])
: bundler(config);
webpackServer = new WebpackDevServer(
webpackServer = new DevServer(
{
hot: !process.env.CI,
devMiddleware: {
+11 -6
View File
@@ -26,10 +26,15 @@ type Transforms = {
type TransformOptions = {
isDev: boolean;
isBackend?: boolean;
rspack?: typeof import('@rspack/core').rspack;
};
export const transforms = (options: TransformOptions): Transforms => {
const { isDev, isBackend } = options;
const { isDev, isBackend, rspack } = options;
const CssExtractRspackPlugin: typeof MiniCssExtractPlugin = rspack
? (rspack.CssExtractRspackPlugin as unknown as typeof MiniCssExtractPlugin)
: MiniCssExtractPlugin;
// This ensures that styles inserted from the style-loader and any
// async style chunks are always given lower priority than JSS styles.
@@ -54,7 +59,7 @@ export const transforms = (options: TransformOptions): Transforms => {
exclude: /node_modules/,
use: [
{
loader: require.resolve('swc-loader'),
loader: rspack ? 'builtin:swc-loader' : require.resolve('swc-loader'),
options: {
jsc: {
target: 'es2022',
@@ -82,7 +87,7 @@ export const transforms = (options: TransformOptions): Transforms => {
exclude: /node_modules/,
use: [
{
loader: require.resolve('swc-loader'),
loader: rspack ? 'builtin:swc-loader' : require.resolve('swc-loader'),
options: {
jsc: {
target: 'es2022',
@@ -115,7 +120,7 @@ export const transforms = (options: TransformOptions): Transforms => {
test: [/\.icon\.svg$/],
use: [
{
loader: require.resolve('swc-loader'),
loader: rspack ? 'builtin:swc-loader' : require.resolve('swc-loader'),
options: {
jsc: {
target: 'es2022',
@@ -179,7 +184,7 @@ export const transforms = (options: TransformOptions): Transforms => {
insert: insertBeforeJssStyles,
},
}
: MiniCssExtractPlugin.loader,
: CssExtractRspackPlugin.loader,
{
loader: require.resolve('css-loader'),
options: {
@@ -194,7 +199,7 @@ export const transforms = (options: TransformOptions): Transforms => {
if (!isDev) {
plugins.push(
new MiniCssExtractPlugin({
new CssExtractRspackPlugin({
filename: 'static/[name].[contenthash:8].css',
chunkFilename: 'static/[name].[id].[contenthash:8].css',
insert: insertBeforeJssStyles, // Only applies to async chunks
+3
View File
@@ -37,6 +37,7 @@ export type BundlingOptions = {
// Mode that the app is running in, 'protected' or 'public', default is 'public'
appMode?: string;
moduleFederation?: ModuleFederationOptions;
rspack?: typeof import('@rspack/core').rspack;
};
export type ServeOptions = BundlingPathsOptions & {
@@ -57,6 +58,7 @@ export type BuildOptions = BundlingPathsOptions & {
frontendAppConfigs: AppConfig[];
fullConfig: Config;
moduleFederation?: ModuleFederationOptions;
rspack?: typeof import('@rspack/core').rspack;
};
export type BackendBundlingOptions = {
@@ -66,6 +68,7 @@ export type BackendBundlingOptions = {
inspectEnabled: boolean;
inspectBrkEnabled: boolean;
require?: string;
rspack?: typeof import('@rspack/core').rspack;
};
export type BackendServeOptions = BundlingPathsOptions & {
+333 -32
View File
@@ -3940,6 +3940,9 @@ __metadata:
"@rollup/plugin-json": ^6.0.0
"@rollup/plugin-node-resolve": ^15.0.0
"@rollup/plugin-yaml": ^4.0.0
"@rspack/core": ^1.0.10
"@rspack/dev-server": ^1.0.9
"@rspack/plugin-react-refresh": ^1.0.0
"@spotify/eslint-config-base": ^15.0.0
"@spotify/eslint-config-react": ^15.0.0
"@spotify/eslint-config-typescript": ^15.0.0
@@ -3968,6 +3971,7 @@ __metadata:
"@types/tar": ^6.1.1
"@types/terser-webpack-plugin": ^5.0.4
"@types/webpack-env": ^1.15.2
"@types/webpack-sources": ^3.2.3
"@types/yarnpkg__lockfile": ^1.1.4
"@typescript-eslint/eslint-plugin": ^6.12.0
"@typescript-eslint/parser": ^6.7.2
@@ -4059,13 +4063,22 @@ __metadata:
zod: ^3.22.4
peerDependencies:
"@modyfi/vite-plugin-yaml": ^1.1.0
"@vitejs/plugin-react": ^4.3.1
vite: ^5.0.0
vite-plugin-html: ^3.2.2
"@rspack/core": ^1.0.10
"@rspack/dev-server": ^1.0.9
"@rspack/plugin-react-refresh": ^1.0.0
"@vitejs/plugin-react": ^4.0.4
vite: ^4.4.9
vite-plugin-html: ^3.2.0
vite-plugin-node-polyfills: ^0.22.0
peerDependenciesMeta:
"@modyfi/vite-plugin-yaml":
optional: true
"@rspack/core":
optional: true
"@rspack/dev-server":
optional: true
"@rspack/plugin-react-refresh":
optional: true
"@vitejs/plugin-react":
optional: true
vite:
@@ -11547,6 +11560,16 @@ __metadata:
languageName: node
linkType: hard
"@module-federation/runtime-tools@npm:0.5.1":
version: 0.5.1
resolution: "@module-federation/runtime-tools@npm:0.5.1"
dependencies:
"@module-federation/runtime": 0.5.1
"@module-federation/webpack-bundler-runtime": 0.5.1
checksum: 651051fb6e2e63915b408547b7d6bdea06338857e293e293b088e330dbb78e147df1b74c5e1f9d1e93ea6e61706f2d4511b8a0dc487703b5615db9695ee9e8ad
languageName: node
linkType: hard
"@module-federation/runtime-tools@npm:0.6.4":
version: 0.6.4
resolution: "@module-federation/runtime-tools@npm:0.6.4"
@@ -11557,6 +11580,15 @@ __metadata:
languageName: node
linkType: hard
"@module-federation/runtime@npm:0.5.1":
version: 0.5.1
resolution: "@module-federation/runtime@npm:0.5.1"
dependencies:
"@module-federation/sdk": 0.5.1
checksum: 810e350dbd12a7f4bffb860375fd28a26a560669128f5339d729bc40810ae9b503b4034cbbb90e7105fd1df5544c3bc9cf11dfd2a47e2eaa2c50d00ad759b1e2
languageName: node
linkType: hard
"@module-federation/runtime@npm:0.6.4":
version: 0.6.4
resolution: "@module-federation/runtime@npm:0.6.4"
@@ -11566,6 +11598,13 @@ __metadata:
languageName: node
linkType: hard
"@module-federation/sdk@npm:0.5.1":
version: 0.5.1
resolution: "@module-federation/sdk@npm:0.5.1"
checksum: 75f225926564779db3113aae9cd1b89d303b753026c84945a5225b496554db9e3a2fe2e1d594af4357708853337f161235f46ed5e6320592ac1e8b07756bf918
languageName: node
linkType: hard
"@module-federation/sdk@npm:0.6.4":
version: 0.6.4
resolution: "@module-federation/sdk@npm:0.6.4"
@@ -11584,6 +11623,16 @@ __metadata:
languageName: node
linkType: hard
"@module-federation/webpack-bundler-runtime@npm:0.5.1":
version: 0.5.1
resolution: "@module-federation/webpack-bundler-runtime@npm:0.5.1"
dependencies:
"@module-federation/runtime": 0.5.1
"@module-federation/sdk": 0.5.1
checksum: a84a7b9482f133eba0fb8fd77ea87310a1028b7d5fc3da4a17b2bb5fc3fc9fc440cb32ed927f74e1bfe61925eec361512884d84b236b3cdab74276c0dcfff840
languageName: node
linkType: hard
"@module-federation/webpack-bundler-runtime@npm:0.6.4":
version: 0.6.4
resolution: "@module-federation/webpack-bundler-runtime@npm:0.6.4"
@@ -15078,6 +15127,163 @@ __metadata:
languageName: node
linkType: hard
"@rspack/binding-darwin-arm64@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding-darwin-arm64@npm:1.0.10"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@rspack/binding-darwin-x64@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding-darwin-x64@npm:1.0.10"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@rspack/binding-linux-arm64-gnu@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding-linux-arm64-gnu@npm:1.0.10"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@rspack/binding-linux-arm64-musl@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding-linux-arm64-musl@npm:1.0.10"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@rspack/binding-linux-x64-gnu@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding-linux-x64-gnu@npm:1.0.10"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@rspack/binding-linux-x64-musl@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding-linux-x64-musl@npm:1.0.10"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@rspack/binding-win32-arm64-msvc@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding-win32-arm64-msvc@npm:1.0.10"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@rspack/binding-win32-ia32-msvc@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding-win32-ia32-msvc@npm:1.0.10"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@rspack/binding-win32-x64-msvc@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding-win32-x64-msvc@npm:1.0.10"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@rspack/binding@npm:1.0.10":
version: 1.0.10
resolution: "@rspack/binding@npm:1.0.10"
dependencies:
"@rspack/binding-darwin-arm64": 1.0.10
"@rspack/binding-darwin-x64": 1.0.10
"@rspack/binding-linux-arm64-gnu": 1.0.10
"@rspack/binding-linux-arm64-musl": 1.0.10
"@rspack/binding-linux-x64-gnu": 1.0.10
"@rspack/binding-linux-x64-musl": 1.0.10
"@rspack/binding-win32-arm64-msvc": 1.0.10
"@rspack/binding-win32-ia32-msvc": 1.0.10
"@rspack/binding-win32-x64-msvc": 1.0.10
dependenciesMeta:
"@rspack/binding-darwin-arm64":
optional: true
"@rspack/binding-darwin-x64":
optional: true
"@rspack/binding-linux-arm64-gnu":
optional: true
"@rspack/binding-linux-arm64-musl":
optional: true
"@rspack/binding-linux-x64-gnu":
optional: true
"@rspack/binding-linux-x64-musl":
optional: true
"@rspack/binding-win32-arm64-msvc":
optional: true
"@rspack/binding-win32-ia32-msvc":
optional: true
"@rspack/binding-win32-x64-msvc":
optional: true
checksum: a7add6fe37706dfc7dd937da36590b0d6b6b1c5d2acd97b8c2e773769ef128012e6d797b1b30a2ea0f12a284ef3cd131e4b0158eb33ce50717c04ac2cd220e70
languageName: node
linkType: hard
"@rspack/core@npm:^1.0.10":
version: 1.0.10
resolution: "@rspack/core@npm:1.0.10"
dependencies:
"@module-federation/runtime-tools": 0.5.1
"@rspack/binding": 1.0.10
"@rspack/lite-tapable": 1.0.1
caniuse-lite: ^1.0.30001616
peerDependencies:
"@swc/helpers": ">=0.5.1"
peerDependenciesMeta:
"@swc/helpers":
optional: true
checksum: 7e65516c613a1694e3a4585ddaaae4c3e4ac48eb104598fb41c56a22d198152b1384c87f56b36e2589d90353b1e5fd8575a28352ff235bbaa6746972d37f04b8
languageName: node
linkType: hard
"@rspack/dev-server@npm:^1.0.9":
version: 1.0.9
resolution: "@rspack/dev-server@npm:1.0.9"
dependencies:
chokidar: ^3.6.0
connect-history-api-fallback: ^2.0.0
express: ^4.19.2
http-proxy-middleware: ^2.0.6
mime-types: ^2.1.35
p-retry: 4.6.2
webpack-dev-middleware: ^7.4.2
webpack-dev-server: 5.0.4
ws: ^8.16.0
peerDependencies:
"@rspack/core": "*"
checksum: 46b6ad1e8f52a44c178042b6b9306fe54ad28ab24b86015f118d03a69628b04bf9563201686e0738b8c06ee8c5dedbc0bb4d6705c7f2d7d3959f2a449ff95cd6
languageName: node
linkType: hard
"@rspack/lite-tapable@npm:1.0.1":
version: 1.0.1
resolution: "@rspack/lite-tapable@npm:1.0.1"
checksum: a490aa7868178e7277573293a2b81191513d451c72f4118173f080b5c65a19618e1d37083cffa049b563433a3f772ab2f4424c0a920b04b1347ddb12fe3bcbf8
languageName: node
linkType: hard
"@rspack/plugin-react-refresh@npm:^1.0.0":
version: 1.0.0
resolution: "@rspack/plugin-react-refresh@npm:1.0.0"
dependencies:
error-stack-parser: ^2.0.6
html-entities: ^2.1.0
peerDependencies:
react-refresh: ">=0.10.0 <1.0.0"
peerDependenciesMeta:
react-refresh:
optional: true
checksum: 88212e66da7e51d99228c7d77b683ef020ba2f70ea7ed546158167eaa4d6e3fa228da2f7d660c3f7a74ad69a47bc98c67a2d11e4a403f3e1ff8523cded67c6c0
languageName: node
linkType: hard
"@rtsao/scc@npm:^1.1.0":
version: 1.1.0
resolution: "@rtsao/scc@npm:1.1.0"
@@ -18202,13 +18408,6 @@ __metadata:
languageName: node
linkType: hard
"@types/mime@npm:*":
version: 3.0.4
resolution: "@types/mime@npm:3.0.4"
checksum: a6139c8e1f705ef2b064d072f6edc01f3c099023ad7c4fce2afc6c2bf0231888202adadbdb48643e8e20da0ce409481a49922e737eca52871b3dc08017455843
languageName: node
linkType: hard
"@types/mime@npm:^1":
version: 1.3.2
resolution: "@types/mime@npm:1.3.2"
@@ -18740,6 +18939,13 @@ __metadata:
languageName: node
linkType: hard
"@types/retry@npm:0.12.0":
version: 0.12.0
resolution: "@types/retry@npm:0.12.0"
checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603
languageName: node
linkType: hard
"@types/retry@npm:0.12.2":
version: 0.12.2
resolution: "@types/retry@npm:0.12.2"
@@ -18808,13 +19014,13 @@ __metadata:
linkType: hard
"@types/serve-static@npm:*, @types/serve-static@npm:^1.15.5":
version: 1.15.5
resolution: "@types/serve-static@npm:1.15.5"
version: 1.15.7
resolution: "@types/serve-static@npm:1.15.7"
dependencies:
"@types/http-errors": "*"
"@types/mime": "*"
"@types/node": "*"
checksum: 0ff4b3703cf20ba89c9f9e345bc38417860a88e85863c8d6fe274a543220ab7f5f647d307c60a71bb57dc9559f0890a661e8dc771a6ec5ef195d91c8afc4a893
"@types/send": "*"
checksum: bbbf00dbd84719da2250a462270dc68964006e8d62f41fe3741abd94504ba3688f420a49afb2b7478921a1544d3793183ffa097c5724167da777f4e0c7f1a7d6
languageName: node
linkType: hard
@@ -18866,6 +19072,13 @@ __metadata:
languageName: node
linkType: hard
"@types/source-list-map@npm:*":
version: 0.1.6
resolution: "@types/source-list-map@npm:0.1.6"
checksum: 9cd294c121f1562062de5d241fe4d10780b1131b01c57434845fe50968e9dcf67ede444591c2b1ad6d3f9b6bc646ac02cc8f51a3577c795f9c64cf4573dcc6b1
languageName: node
linkType: hard
"@types/ssh2-streams@npm:*":
version: 0.1.8
resolution: "@types/ssh2-streams@npm:0.1.8"
@@ -19073,6 +19286,17 @@ __metadata:
languageName: node
linkType: hard
"@types/webpack-sources@npm:^3.2.3":
version: 3.2.3
resolution: "@types/webpack-sources@npm:3.2.3"
dependencies:
"@types/node": "*"
"@types/source-list-map": "*"
source-map: ^0.7.3
checksum: 7b557f242efaa10e4e3e18cc4171a0c98e22898570caefdd4f7b076fe8534b5abfac92c953c6604658dcb7218507f970230352511840fe9fdea31a9af3b9a906
languageName: node
linkType: hard
"@types/webpack@npm:^5.28.0":
version: 5.28.5
resolution: "@types/webpack@npm:5.28.5"
@@ -22645,10 +22869,10 @@ __metadata:
languageName: node
linkType: hard
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001646":
version: 1.0.30001653
resolution: "caniuse-lite@npm:1.0.30001653"
checksum: 289cf06c26a46f3e6460ccd5feffa788ab0ab35d306898c48120c65cfb11959bfa560e9f739393769b4fd01150c69b0747ad3ad5ec3abf3dfafd66df3c59254e
"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001616, caniuse-lite@npm:^1.0.30001646":
version: 1.0.30001668
resolution: "caniuse-lite@npm:1.0.30001668"
checksum: ce6996901b5883454a8ddb3040f82342277b6a6275876dfefcdecb11f7e472e29877f34cae47c2b674f08f2e71971dd4a2acb9bc01adfe8421b7148a7e9e8297
languageName: node
linkType: hard
@@ -24842,6 +25066,15 @@ __metadata:
languageName: node
linkType: hard
"default-gateway@npm:^6.0.3":
version: 6.0.3
resolution: "default-gateway@npm:6.0.3"
dependencies:
execa: ^5.0.0
checksum: 126f8273ecac8ee9ff91ea778e8784f6cd732d77c3157e8c5bdd6ed03651b5291f71446d05bc02d04073b1e67583604db5394ea3cf992ede0088c70ea15b7378
languageName: node
linkType: hard
"defaults@npm:^1.0.3":
version: 1.0.3
resolution: "defaults@npm:1.0.3"
@@ -27193,7 +27426,7 @@ __metadata:
languageName: node
linkType: hard
"express@npm:^4.14.0, express@npm:^4.17.1, express@npm:^4.18.1, express@npm:^4.18.2, express@npm:^4.19.2":
"express@npm:^4.14.0, express@npm:^4.17.1, express@npm:^4.17.3, express@npm:^4.18.1, express@npm:^4.18.2, express@npm:^4.19.2":
version: 4.21.1
resolution: "express@npm:4.21.1"
dependencies:
@@ -28479,7 +28712,7 @@ __metadata:
languageName: node
linkType: hard
"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.4.1":
"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7, glob@npm:^10.4.1":
version: 10.4.5
resolution: "glob@npm:10.4.5"
dependencies:
@@ -30048,9 +30281,9 @@ __metadata:
linkType: hard
"ipaddr.js@npm:^2.1.0":
version: 2.1.0
resolution: "ipaddr.js@npm:2.1.0"
checksum: 807a054f2bd720c4d97ee479d6c9e865c233bea21f139fb8dabd5a35c4226d2621c42e07b4ad94ff3f82add926a607d8d9d37c625ad0319f0e08f9f2bd1968e2
version: 2.2.0
resolution: "ipaddr.js@npm:2.2.0"
checksum: 770ba8451fd9bf78015e8edac0d5abd7a708cbf75f9429ca9147a9d2f3a2d60767cd5de2aab2b1e13ca6e4445bdeff42bf12ef6f151c07a5c6cf8a44328e2859
languageName: node
linkType: hard
@@ -32528,12 +32761,12 @@ __metadata:
linkType: hard
"launch-editor@npm:^2.6.1":
version: 2.6.1
resolution: "launch-editor@npm:2.6.1"
version: 2.9.1
resolution: "launch-editor@npm:2.9.1"
dependencies:
picocolors: ^1.0.0
shell-quote: ^1.8.1
checksum: e06d193075ac09f7f8109f10cabe464a211bf7ed4cbe75f83348d6f67bf4d9f162f06e7a1ab3e1cd7fc250b5342c3b57080618aff2e646dc34248fe499227601
checksum: bed887085a9729cc2ad050329d92a99f4c69bacccf96d1ed8c84670608a3a128a828ba8e9a8a41101c5aea5aea6f79984658e2fd11f6ba85e32e6e1ed16dbb1c
languageName: node
linkType: hard
@@ -34214,7 +34447,7 @@ __metadata:
languageName: node
linkType: hard
"mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
"mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:^2.1.35, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
version: 2.1.35
resolution: "mime-types@npm:2.1.35"
dependencies:
@@ -35952,13 +36185,13 @@ __metadata:
linkType: hard
"open@npm:^8.0.0, open@npm:^8.4.0":
version: 8.4.0
resolution: "open@npm:8.4.0"
version: 8.4.2
resolution: "open@npm:8.4.2"
dependencies:
define-lazy-prop: ^2.0.0
is-docker: ^2.1.1
is-wsl: ^2.2.0
checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c
checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26
languageName: node
linkType: hard
@@ -36257,6 +36490,16 @@ __metadata:
languageName: node
linkType: hard
"p-retry@npm:4.6.2":
version: 4.6.2
resolution: "p-retry@npm:4.6.2"
dependencies:
"@types/retry": 0.12.0
retry: ^0.13.1
checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e
languageName: node
linkType: hard
"p-retry@npm:^6.2.0":
version: 6.2.0
resolution: "p-retry@npm:6.2.0"
@@ -39933,6 +40176,17 @@ __metadata:
languageName: node
linkType: hard
"rimraf@npm:^5.0.5":
version: 5.0.10
resolution: "rimraf@npm:5.0.10"
dependencies:
glob: ^10.3.7
bin:
rimraf: dist/esm/bin.mjs
checksum: 50e27388dd2b3fa6677385fc1e2966e9157c89c86853b96d02e6915663a96b7ff4d590e14f6f70e90f9b554093aa5dbc05ac3012876be558c06a65437337bc05
languageName: node
linkType: hard
"rimraf@npm:~2.6.2":
version: 2.6.3
resolution: "rimraf@npm:2.6.3"
@@ -44463,7 +44717,7 @@ __metadata:
languageName: node
linkType: hard
"webpack-dev-middleware@npm:^7.4.2":
"webpack-dev-middleware@npm:^7.1.0, webpack-dev-middleware@npm:^7.4.2":
version: 7.4.2
resolution: "webpack-dev-middleware@npm:7.4.2"
dependencies:
@@ -44482,6 +44736,53 @@ __metadata:
languageName: node
linkType: hard
"webpack-dev-server@npm:5.0.4":
version: 5.0.4
resolution: "webpack-dev-server@npm:5.0.4"
dependencies:
"@types/bonjour": ^3.5.13
"@types/connect-history-api-fallback": ^1.5.4
"@types/express": ^4.17.21
"@types/serve-index": ^1.9.4
"@types/serve-static": ^1.15.5
"@types/sockjs": ^0.3.36
"@types/ws": ^8.5.10
ansi-html-community: ^0.0.8
bonjour-service: ^1.2.1
chokidar: ^3.6.0
colorette: ^2.0.10
compression: ^1.7.4
connect-history-api-fallback: ^2.0.0
default-gateway: ^6.0.3
express: ^4.17.3
graceful-fs: ^4.2.6
html-entities: ^2.4.0
http-proxy-middleware: ^2.0.3
ipaddr.js: ^2.1.0
launch-editor: ^2.6.1
open: ^10.0.3
p-retry: ^6.2.0
rimraf: ^5.0.5
schema-utils: ^4.2.0
selfsigned: ^2.4.1
serve-index: ^1.9.1
sockjs: ^0.3.24
spdy: ^4.0.2
webpack-dev-middleware: ^7.1.0
ws: ^8.16.0
peerDependencies:
webpack: ^5.0.0
peerDependenciesMeta:
webpack:
optional: true
webpack-cli:
optional: true
bin:
webpack-dev-server: bin/webpack-dev-server.js
checksum: b3535d01e8d895f4ce6d74b5f76e29398b712476216cd6d459365e5cc2f2fb1e49240aef6c23b2b943b04dbf768d7d18301af3eb064038bde4e11d03c241202d
languageName: node
linkType: hard
"webpack-dev-server@npm:^5.0.0":
version: 5.1.0
resolution: "webpack-dev-server@npm:5.1.0"
@@ -44914,7 +45215,7 @@ __metadata:
languageName: node
linkType: hard
"ws@npm:*, ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.13.0, ws@npm:^8.17.1, ws@npm:^8.18.0, ws@npm:^8.8.0":
"ws@npm:*, ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.13.0, ws@npm:^8.16.0, ws@npm:^8.17.1, ws@npm:^8.18.0, ws@npm:^8.8.0":
version: 8.18.0
resolution: "ws@npm:8.18.0"
peerDependencies: