diff --git a/error-boundary/README.md b/error-boundary/README.md new file mode 100644 index 00000000000..794c7bed52a --- /dev/null +++ b/error-boundary/README.md @@ -0,0 +1,4 @@ +# Error Boundary + +This demo boots only app1, app2 remains offline. +Loading localhost:3001 will render a error message from the runtime plugin as a react module when the container if offline. diff --git a/error-boundary/app1/package.json b/error-boundary/app1/package.json new file mode 100644 index 00000000000..392d12c0714 --- /dev/null +++ b/error-boundary/app1/package.json @@ -0,0 +1,32 @@ +{ + "name": "error-boundary_app1", + "version": "0.0.0", + "devDependencies": { + "@babel/core": "7.24.7", + "@babel/preset-react": "7.24.7", + "babel-loader": "9.1.3", + "html-webpack-plugin": "5.6.0", + "serve": "14.2.3", + "@rspack/core": "1.4.11", + "@rspack/cli": "1.4.11", + "@rspack/dev-server": "1.1.3", + "webpack": "5.101.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.1.0", + "@module-federation/runtime": "0.17.1", + "@module-federation/enhanced": "0.17.1" + }, + "scripts": { + "start": "rspack serve -c rspack.config.js", + "build": "rspack build --mode production -c rspack.config.js", + "legacy:start": "webpack serve --config webpack.config.js", + "legacy:build": "webpack --config webpack.config.js --mode production", + "serve": "serve dist -p 3001", + "clean": "rm -rf dist" + }, + "dependencies": { + "react": "^17.0.2", + "react-dom": "^17.0.2", + "lodash": "^4.17.21" + } +} \ No newline at end of file diff --git a/error-boundary/app1/public/index.html b/error-boundary/app1/public/index.html new file mode 100644 index 00000000000..e7a195eac0d --- /dev/null +++ b/error-boundary/app1/public/index.html @@ -0,0 +1,7 @@ + + + + +
+ + diff --git a/error-boundary/app1/rspack.config.js b/error-boundary/app1/rspack.config.js new file mode 100644 index 00000000000..e8ebdafe1fe --- /dev/null +++ b/error-boundary/app1/rspack.config.js @@ -0,0 +1,101 @@ +const { + HtmlRspackPlugin, + container: { ModuleFederationPlugin }, +} = require('@rspack/core'); +const path = require('path'); + +// adds all your dependencies as shared modules +// version is inferred from package.json in the dependencies +// requiredVersion is used from your package.json +// dependencies will automatically use the highest available package +// in the federated app, based on version requirement in package.json +// multiple different versions might coexist in the federated app +// Note that this will not affect nested paths like "lodash/pluck" +// Note that this will disable some optimization on these packages +// with might lead the bundle size problems +const deps = require('./package.json').dependencies; + +module.exports = { + entry: './src/index', + mode: 'development', + devServer: { + static: { + directory: path.join(__dirname, 'dist'), + }, + hot: true, + port: 3001, + liveReload: true, + }, + target: 'web', + output: { + publicPath: 'auto', + }, + module: { + rules: [ + { + test: /\.js$/, + include: path.resolve(__dirname, 'src'), + use: { + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'ecmascript', + jsx: true, + }, + transform: { + react: { + runtime: 'automatic', + }, + }, + }, + }, + }, + }, + { + test: /\.ts$/, + use: { + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'typescript', + jsx: true, + }, + transform: { + react: { + runtime: 'automatic', + }, + }, + }, + }, + }, + }, + ], + }, + plugins: [ + new ModuleFederationPlugin({ + name: 'app1', + filename: 'remoteEntry.js', + remotes: { + app2: 'app2@http://localhost:3002/remoteEntry.js', + }, + exposes: { + './Button': './src/Button', + }, + shared: { + ...deps, + react: { + singleton: true, + }, + 'react-dom': { + singleton: true, + }, + lodash: {}, + }, + }), + new HtmlRspackPlugin({ + template: './public/index.html', + }), + ], +}; diff --git a/error-boundary/app1/src/App.js b/error-boundary/app1/src/App.js new file mode 100644 index 00000000000..2cfb8e09752 --- /dev/null +++ b/error-boundary/app1/src/App.js @@ -0,0 +1,95 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import lodash from 'lodash'; + +import LocalButton from './Button'; +const RemoteButtonLazy = React.lazy(() => import('app2/Button')); + +// A function to generate a color from a string +const getColorFromString = str => { + // Prime numbers used for generating a hash + let primes = [1, 2, 3, 5, 7, 11, 13, 17, 19, 23]; + let hash = 0; + + // Generate a hash from the string + for (let i = 0; i < str.length; i++) { + hash += str.charCodeAt(i) * primes[i % primes.length]; + } + + // Convert the hash to a color + let color = '#'; + for (let i = 0; i < 3; i++) { + const value = (hash >> (i * 8)) & 0xff; + color += ('00' + value.toString(16)).substr(-2); + } + + return color; +}; + +// The main App component +const App = () => ( +
+

Offline Remote

+

Remotes currently in use

+ {/* Display the names of the remotes loaded by the CustomPlugin */} + {__FEDERATION__.__INSTANCES__.map(inst => ( + + {inst.name} + + ))} +

+ Click The second button. This will cause the pick-remote.ts to load remoteEntry urls + from a mock api call. +

+ {/* LocalButton is a button component from the local app */} + + {/* RemoteButton is a button component loaded from a remote app */} + + + + + + {/* The Reset button clears the 'button' item from localStorage */} + +
+); + +export default App; + +class ErrorBoundary extends React.Component { + state = { + hasError: false, + }; + + componentDidCatch(error, errorInfo) { + console.error(error, errorInfo); + this.setState({ hasError: true }); + } + + render() { + const { children } = this.props; + if (this.state.hasError) { + return ( +
+

Something went wrong

+

Try refreshing the page.

+
+ ); + } + return children; + } +} diff --git a/error-boundary/app1/src/Button.js b/error-boundary/app1/src/Button.js new file mode 100644 index 00000000000..6abbdf0b186 --- /dev/null +++ b/error-boundary/app1/src/Button.js @@ -0,0 +1,11 @@ +import React from 'react'; + +const style = { + background: '#800', + color: '#fff', + padding: 12, +}; + +const Button = () => ; + +export default Button; diff --git a/error-boundary/app1/src/bootstrap.js b/error-boundary/app1/src/bootstrap.js new file mode 100644 index 00000000000..a8680f71cdf --- /dev/null +++ b/error-boundary/app1/src/bootstrap.js @@ -0,0 +1,5 @@ +import App from './App'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +ReactDOM.render(, document.getElementById('root')); diff --git a/error-boundary/app1/src/index.js b/error-boundary/app1/src/index.js new file mode 100644 index 00000000000..b93c7a0268a --- /dev/null +++ b/error-boundary/app1/src/index.js @@ -0,0 +1 @@ +import('./bootstrap'); diff --git a/error-boundary/app1/webpack.config.js b/error-boundary/app1/webpack.config.js new file mode 100644 index 00000000000..4c407805cb0 --- /dev/null +++ b/error-boundary/app1/webpack.config.js @@ -0,0 +1,66 @@ +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const { ModuleFederationPlugin } = require('@module-federation/enhanced'); +const path = require('path'); + +// adds all your dependencies as shared modules +// version is inferred from package.json in the dependencies +// requiredVersion is used from your package.json +// dependencies will automatically use the highest available package +// in the federated app, based on version requirement in package.json +// multiple different versions might coexist in the federated app +// Note that this will not affect nested paths like "lodash/pluck" +// Note that this will disable some optimization on these packages +// with might lead the bundle size problems +const deps = require('./package.json').dependencies; + +module.exports = { + entry: './src/index', + cache: false, + mode: 'development', + devServer: { + static: { + directory: path.join(__dirname, 'dist'), + }, + port: 3001, + }, + target: 'web', + output: { + publicPath: 'auto', + }, + module: { + rules: [ + { + test: /\.jsx?$/, + loader: 'babel-loader', + exclude: /node_modules/, + options: { + presets: ['@babel/preset-react'], + }, + }, + ], + }, + plugins: [ + new ModuleFederationPlugin({ + name: 'app1', + filename: 'remoteEntry.js', + remotes: { + app2: 'app2@http://localhost:3002/remoteEntry.js', + }, + exposes: { + './Button': './src/Button', + }, + shared: { + ...deps, + react: { + singleton: true, + }, + 'react-dom': { + singleton: true, + }, + }, + }), + new HtmlWebpackPlugin({ + template: './public/index.html', + }), + ], +}; diff --git a/error-boundary/app2/package.json b/error-boundary/app2/package.json new file mode 100644 index 00000000000..113ff84a11a --- /dev/null +++ b/error-boundary/app2/package.json @@ -0,0 +1,32 @@ +{ + "name": "error-boundary_app2", + "version": "0.0.0", + "devDependencies": { + "@babel/core": "7.24.7", + "@babel/preset-react": "7.24.7", + "babel-loader": "9.1.3", + "html-webpack-plugin": "5.6.0", + "serve": "14.2.3", + "@rspack/core": "1.4.11", + "@rspack/cli": "1.4.11", + "@rspack/dev-server": "1.1.3", + "webpack": "5.101.0", + "webpack-cli": "5.1.4", + "webpack-dev-server": "5.0.4", + "@module-federation/runtime": "0.17.1", + "@module-federation/enhanced": "0.17.1" + }, + "scripts": { + "start": "rspack serve -c rspack.config.js", + "build": "rspack build --mode production -c rspack.config.js", + "legacy:start": "webpack serve --config webpack.config.js", + "legacy:build": "webpack --config webpack.config.js --mode production", + "serve": "serve dist -p 3002", + "clean": "rm -rf dist" + }, + "dependencies": { + "react": "^16.13.0", + "react-dom": "^16.13.0", + "lodash": "^3.10.1" + } +} \ No newline at end of file diff --git a/error-boundary/app2/public/index.html b/error-boundary/app2/public/index.html new file mode 100644 index 00000000000..e7a195eac0d --- /dev/null +++ b/error-boundary/app2/public/index.html @@ -0,0 +1,7 @@ + + + + +
+ + diff --git a/error-boundary/app2/rspack.config.js b/error-boundary/app2/rspack.config.js new file mode 100644 index 00000000000..62a6b45524d --- /dev/null +++ b/error-boundary/app2/rspack.config.js @@ -0,0 +1,99 @@ +const { + HtmlRspackPlugin, + container: { ModuleFederationPlugin }, +} = require('@rspack/core'); +const path = require('path'); + +// adds all your dependencies as shared modules +// version is inferred from package.json in the dependencies +// requiredVersion is used from your package.json +// dependencies will automatically use the highest available package +// in the federated app, based on version requirement in package.json +// multiple different versions might coexist in the federated app +// Note that this will not affect nested paths like "lodash/pluck" +// Note that this will disable some optimization on these packages +// with might lead the bundle size problems +const deps = require('./package.json').dependencies; + +module.exports = { + entry: './src/index', + mode: 'development', + devServer: { + static: { + directory: path.join(__dirname, 'dist'), + }, + port: 3002, + }, + target: 'web', + output: { + publicPath: 'auto', + }, + module: { + rules: [ + { + test: /\.js$/, + include: path.resolve(__dirname, 'src'), + use: { + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'ecmascript', + jsx: true, + }, + transform: { + react: { + runtime: 'automatic', + }, + }, + }, + }, + }, + }, + { + test: /\.ts$/, + use: { + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'typescript', + jsx: true, + }, + transform: { + react: { + runtime: 'automatic', + }, + }, + }, + }, + }, + }, + ], + }, + plugins: [ + new ModuleFederationPlugin({ + name: 'app2', + filename: 'remoteEntry.js', + remotes: { + app1: 'app1@http://localhost:3001/remoteEntry.js', + }, + exposes: { + './Button': './src/Button', + }, + shared: { + ...deps, + react: { + singleton: true, + }, + 'react-dom': { + singleton: true, + }, + lodash: {}, + }, + }), + new HtmlRspackPlugin({ + template: './public/index.html', + }), + ], +}; diff --git a/error-boundary/app2/src/App.js b/error-boundary/app2/src/App.js new file mode 100644 index 00000000000..ab8952b7d35 --- /dev/null +++ b/error-boundary/app2/src/App.js @@ -0,0 +1,17 @@ +import LocalButton from './Button'; +import React from 'react'; + +const RemoteButton = React.lazy(() => import('app1/Button')); + +const App = () => ( +
+

API controlled remote configs

+

App 2

+ + + + +
+); + +export default App; diff --git a/error-boundary/app2/src/Button.js b/error-boundary/app2/src/Button.js new file mode 100644 index 00000000000..89440346cb8 --- /dev/null +++ b/error-boundary/app2/src/Button.js @@ -0,0 +1,22 @@ +import React from 'react'; +import * as lodash from 'lodash'; + +const style = { + background: '#00c', + color: '#fff', + padding: 12, +}; + +const Button = () => ( + +); + +export default Button; diff --git a/error-boundary/app2/src/bootstrap.js b/error-boundary/app2/src/bootstrap.js new file mode 100644 index 00000000000..a8680f71cdf --- /dev/null +++ b/error-boundary/app2/src/bootstrap.js @@ -0,0 +1,5 @@ +import App from './App'; +import React from 'react'; +import ReactDOM from 'react-dom'; + +ReactDOM.render(, document.getElementById('root')); diff --git a/error-boundary/app2/src/index.js b/error-boundary/app2/src/index.js new file mode 100644 index 00000000000..b93c7a0268a --- /dev/null +++ b/error-boundary/app2/src/index.js @@ -0,0 +1 @@ +import('./bootstrap'); diff --git a/error-boundary/app2/webpack.config.js b/error-boundary/app2/webpack.config.js new file mode 100644 index 00000000000..674630c59b1 --- /dev/null +++ b/error-boundary/app2/webpack.config.js @@ -0,0 +1,67 @@ +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const { ModuleFederationPlugin } = require('@module-federation/enhanced'); +const path = require('path'); + +// adds all your dependencies as shared modules +// version is inferred from package.json in the dependencies +// requiredVersion is used from your package.json +// dependencies will automatically use the highest available package +// in the federated app, based on version requirement in package.json +// multiple different versions might coexist in the federated app +// Note that this will not affect nested paths like "lodash/pluck" +// Note that this will disable some optimization on these packages +// with might lead the bundle size problems +const deps = require('./package.json').dependencies; + +module.exports = { + entry: './src/index', + mode: 'development', + cache: false, + devServer: { + static: { + directory: path.join(__dirname, 'dist'), + }, + port: 3002, + }, + target: 'web', + output: { + publicPath: 'auto', + }, + module: { + rules: [ + { + test: /\.jsx?$/, + loader: 'babel-loader', + exclude: /node_modules/, + options: { + presets: ['@babel/preset-react'], + }, + }, + ], + }, + plugins: [ + new ModuleFederationPlugin({ + name: 'app2', + filename: 'remoteEntry.js', + remotes: { + app1: 'app1@http://localhost:3001/remoteEntry.js', + }, + exposes: { + './Button': './src/Button', + }, + shared: { + ...deps, + react: { + singleton: true, + }, + 'react-dom': { + singleton: true, + }, + lodash: {}, + }, + }), + new HtmlWebpackPlugin({ + template: './public/index.html', + }), + ], +}; diff --git a/error-boundary/cypress.env.json b/error-boundary/cypress.env.json new file mode 100644 index 00000000000..c65e6cd032e --- /dev/null +++ b/error-boundary/cypress.env.json @@ -0,0 +1,4 @@ +{ + "allure": true, + "allureResultsPath": "../cypress-e2e/results/allure-results" +} diff --git a/error-boundary/e2e/checkAutomaticVendorApps.cy.ts b/error-boundary/e2e/checkAutomaticVendorApps.cy.ts new file mode 100644 index 00000000000..cd891caa8af --- /dev/null +++ b/error-boundary/e2e/checkAutomaticVendorApps.cy.ts @@ -0,0 +1,78 @@ +import { BaseMethods } from '../../../cypress-e2e/common/base'; +import { baseSelectors } from '../../../cypress-e2e/common/selectors'; +import { Constants } from '../../../cypress-e2e/fixtures/constants'; +import { CssAttr } from '../../../cypress-e2e/types/cssAttr'; + +const basePage: BaseMethods = new BaseMethods(); + +const appButtonPosition: number = 0; + +const appsData = [ + { + headerSelector: baseSelectors.tags.headers.h1, + subHeaderSelector: baseSelectors.tags.headers.h2, + buttonSelector: baseSelectors.tags.coreElements.button, + headerText: 'Offline Remote', + appNameText: Constants.commonConstantsData.commonCountAppNames.app1, + buttonColor: Constants.color.red, + host: 3001, + }, +]; + +appsData.forEach( + (property: { + headerSelector: string; + subHeaderSelector: string; + buttonSelector: string; + headerText: string; + appNameText: string; + buttonColor: string; + host: number; + }) => { + const host = property.host === 3002 ? appsData[1].host : appsData[0].host; + const appName = property.host === 3002 ? appsData[1].appNameText : appsData[0].appNameText; + const color = property.host === 3002 ? appsData[1].buttonColor : appsData[0].buttonColor; + + describe(`Endpoint Based Remotes`, () => { + context(`Check ${appName}:${host}`, () => { + beforeEach(() => { + basePage.openLocalhost({ + number: host, + }); + }); + + it(`Check ${appName} header and subheader exist on the page`, () => { + basePage.checkElementWithTextPresence({ + selector: property.headerSelector, + text: property.headerText, + }); + // basePage.checkElementWithTextPresence({ + // selector: property.subHeaderSelector, + // text: `${appName}`, + // }); + }); + + it(`Check buttons in ${appName} exist`, () => { + basePage.checkElementWithTextPresence({ + selector: property.buttonSelector, + text: `${appName} ${Constants.commonConstantsData.button}`, + }); + }); + + it(`Check button property in ${appName}`, () => { + basePage.checkElementContainText({ + selector: property.buttonSelector, + text: `${appName} ${Constants.commonConstantsData.button}`, + index: appButtonPosition, + }); + basePage.checkElementHaveProperty({ + selector: property.buttonSelector, + text: `${appName} ${Constants.commonConstantsData.button}`, + prop: CssAttr.background, + value: color, + }); + }); + }); + }); + }, +); diff --git a/error-boundary/package.json b/error-boundary/package.json new file mode 100644 index 00000000000..1e496061c1b --- /dev/null +++ b/error-boundary/package.json @@ -0,0 +1,24 @@ +{ + "name": "error-boundary", + "workspaces": [ + "./app1", + "./app2" + ], + "description": "Control Sharing Panel. Lets you change share resolver in the app via GUI", + "private": true, + "version": "0.0.0", + "scripts": { + "start": "pnpm --filter error-boundary_app1 --parallel start", + "start:both": "pnpm --filter error-boundary_app* --parallel start", + "build": "pnpm --filter error-boundary_app* --parallel build", + "serve": "pnpm --filter error-boundary_app* --parallel serve", + "clean": "pnpm --filter error-boundary_app* --parallel clean", + "legacy:start": "pnpm --filter error-boundary_app* --parallel legacy:start", + "legacy:build": "pnpm --filter error-boundary_app* --parallel legacy:build", + "e2e:ci": "pnpm start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome", + "legacy:e2e:ci": "pnpm legacy:start & wait-on http-get://localhost:3001/ && npx cypress run --config-file ../../cypress-e2e/config/cypress.config.ts --config '{\"supportFile\": \"../../cypress-e2e/support/e2e.ts\"}' --spec \"./e2e/*.cy.ts\" --browser=chrome" + }, + "devDependencies": { + "wait-on": "7.2.0" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c82a009d4c8..3ebd22cc80f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -600,7 +600,7 @@ importers: version: 15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.13.3(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.89.2)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@18.19.39)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4) '@angular/cli': specifier: 15.2.10 - version: 15.2.10(chokidar@3.5.3) + version: 15.2.10(chokidar@3.6.0) '@angular/compiler-cli': specifier: 15.2.10 version: 15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3) @@ -621,7 +621,7 @@ importers: version: 4.0.2(webpack@5.101.0) sass-loader: specifier: 14.2.1 - version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.89.2)(sass@1.58.1)(webpack@5.101.0) + version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.89.2)(sass@1.77.6)(webpack@5.101.0) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@18.19.39)(typescript@5.5.3) @@ -636,7 +636,7 @@ importers: version: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 - version: 5.1.4(webpack-dev-server@4.11.1)(webpack@5.101.0) + version: 5.1.4(webpack@5.101.0) angular-universal-ssr/host-app: dependencies: @@ -688,7 +688,7 @@ importers: version: 15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.13.3(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.89.2)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@22.17.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4) '@angular/cli': specifier: 15.2.10 - version: 15.2.10(chokidar@3.6.0) + version: 15.2.10(chokidar@3.5.3) '@angular/compiler-cli': specifier: 15.2.10 version: 15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3) @@ -697,7 +697,7 @@ importers: version: 15.2.11(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(typescript@5.5.3)(webpack@5.101.0) '@nguniversal/builders': specifier: 16.2.0 - version: 16.2.0(@angular-devkit/build-angular@15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.13.3(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.89.2)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@22.17.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@types/express@4.17.21)(chokidar@3.6.0)(typescript@5.5.3) + version: 16.2.0(@angular-devkit/build-angular@15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.13.3(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.89.2)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@22.17.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@types/express@4.17.21)(chokidar@3.5.3)(typescript@5.5.3) clean-webpack-plugin: specifier: 4.0.0 version: 4.0.0(webpack@5.101.0) @@ -709,7 +709,7 @@ importers: version: 4.0.2(webpack@5.101.0) sass-loader: specifier: 14.2.1 - version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.89.2)(sass@1.77.6)(webpack@5.101.0) + version: 14.2.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(sass-embedded@1.89.2)(sass@1.58.1)(webpack@5.101.0) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@22.17.0)(typescript@5.5.3) @@ -724,7 +724,7 @@ importers: version: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 - version: 5.1.4(webpack@5.101.0) + version: 5.1.4(webpack-dev-server@4.11.1)(webpack@5.101.0) apollo-client: devDependencies: @@ -3400,6 +3400,116 @@ importers: specifier: 5.0.4 version: 5.0.4(webpack-cli@5.1.4)(webpack@5.101.0) + error-boundary: + devDependencies: + wait-on: + specifier: 7.2.0 + version: 7.2.0 + + error-boundary/app1: + dependencies: + lodash: + specifier: ^4.17.21 + version: 4.17.21 + react: + specifier: ^17.0.2 + version: 17.0.2 + react-dom: + specifier: ^17.0.2 + version: 17.0.2(react@17.0.2) + devDependencies: + '@babel/core': + specifier: 7.24.7 + version: 7.24.7 + '@babel/preset-react': + specifier: 7.24.7 + version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.9.2)(vue-tsc@1.8.27(typescript@5.9.2))(webpack@5.101.0) + '@module-federation/runtime': + specifier: 0.17.1 + version: 0.17.1 + '@rspack/cli': + specifier: 1.4.11 + version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) + '@rspack/core': + specifier: 1.4.11 + version: 1.4.11(@swc/helpers@0.5.17) + '@rspack/dev-server': + specifier: 1.1.3 + version: 1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) + babel-loader: + specifier: 9.1.3 + version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) + html-webpack-plugin: + specifier: 5.6.0 + version: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0) + serve: + specifier: 14.2.3 + version: 14.2.3 + webpack: + specifier: 5.101.0 + version: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-cli: + specifier: 5.1.4 + version: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.101.0) + webpack-dev-server: + specifier: 5.1.0 + version: 5.1.0(webpack-cli@5.1.4)(webpack@5.101.0) + + error-boundary/app2: + dependencies: + lodash: + specifier: ^3.10.1 + version: 3.10.1 + react: + specifier: ^16.13.0 + version: 16.14.0 + react-dom: + specifier: ^16.13.0 + version: 16.14.0(react@16.14.0) + devDependencies: + '@babel/core': + specifier: 7.24.7 + version: 7.24.7 + '@babel/preset-react': + specifier: 7.24.7 + version: 7.24.7(@babel/core@7.24.7) + '@module-federation/enhanced': + specifier: 0.17.1 + version: 0.17.1(@rspack/core@1.4.11(@swc/helpers@0.5.17))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.9.2)(vue-tsc@1.8.27(typescript@5.9.2))(webpack@5.101.0) + '@module-federation/runtime': + specifier: 0.17.1 + version: 0.17.1 + '@rspack/cli': + specifier: 1.4.11 + version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) + '@rspack/core': + specifier: 1.4.11 + version: 1.4.11(@swc/helpers@0.5.17) + '@rspack/dev-server': + specifier: 1.1.3 + version: 1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.101.0) + babel-loader: + specifier: 9.1.3 + version: 9.1.3(@babel/core@7.24.7)(webpack@5.101.0) + html-webpack-plugin: + specifier: 5.6.0 + version: 5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0) + serve: + specifier: 14.2.3 + version: 14.2.3 + webpack: + specifier: 5.101.0 + version: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-cli: + specifier: 5.1.4 + version: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.101.0) + webpack-dev-server: + specifier: 5.0.4 + version: 5.0.4(webpack-cli@5.1.4)(webpack@5.101.0) + federated-css: {} federated-css-react-ssr: {} @@ -36747,6 +36857,19 @@ packages: webpack-cli: optional: true + webpack-dev-server@5.1.0: + resolution: {integrity: sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==} + engines: {node: '>= 18.12.0'} + hasBin: true + peerDependencies: + webpack: ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + webpack-dev-server@5.2.2: resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==} engines: {node: '>= 18.12.0'} @@ -37399,9 +37522,9 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/architect@0.1602.16(chokidar@3.6.0)': + '@angular-devkit/architect@0.1602.16(chokidar@3.5.3)': dependencies: - '@angular-devkit/core': 16.2.16(chokidar@3.6.0) + '@angular-devkit/core': 16.2.16(chokidar@3.5.3) rxjs: 7.8.1 transitivePeerDependencies: - chokidar @@ -37699,7 +37822,7 @@ snapshots: optionalDependencies: chokidar: 3.6.0 - '@angular-devkit/core@16.2.16(chokidar@3.6.0)': + '@angular-devkit/core@16.2.16(chokidar@3.5.3)': dependencies: ajv: 8.12.0 ajv-formats: 2.1.1(ajv@8.12.0) @@ -37708,7 +37831,7 @@ snapshots: rxjs: 7.8.1 source-map: 0.7.4 optionalDependencies: - chokidar: 3.6.0 + chokidar: 3.5.3 '@angular-devkit/core@18.2.20(chokidar@3.6.0)': dependencies: @@ -38248,7 +38371,7 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/eslint-plugin@7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1)': + '@babel/eslint-plugin@7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.28.0)(eslint@8.57.1))(eslint@8.57.1)': dependencies: '@babel/eslint-parser': 7.24.7(@babel/core@7.24.7)(eslint@8.57.1) eslint: 8.57.1 @@ -43389,7 +43512,7 @@ snapshots: dependencies: '@jest/types': 28.1.3 '@types/node': 18.19.39 - chalk: 4.1.0 + chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 slash: 3.0.0 @@ -43745,7 +43868,7 @@ snapshots: '@types/istanbul-reports': 3.0.4 '@types/node': 18.19.39 '@types/yargs': 17.0.33 - chalk: 4.1.0 + chalk: 4.1.2 '@jest/types@29.6.3': dependencies: @@ -44501,7 +44624,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/eslint-parser': 7.24.7(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) + '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.28.0)(eslint@8.57.1))(eslint@8.57.1) '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.17) '@rsbuild/core': 0.7.10 '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.5.3))(eslint@8.57.1)(typescript@5.5.3) @@ -44528,7 +44651,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/eslint-parser': 7.24.7(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) + '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.28.0)(eslint@8.57.1))(eslint@8.57.1) '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.17) '@rsbuild/core': 0.7.10 '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) @@ -44555,7 +44678,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/eslint-parser': 7.24.7(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) + '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.28.0)(eslint@8.57.1))(eslint@8.57.1) '@rsbuild/babel-preset': 0.7.10(@rsbuild/core@0.7.10)(@swc/helpers@0.5.3) '@rsbuild/core': 0.7.10 '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) @@ -44582,7 +44705,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/eslint-parser': 7.24.7(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) + '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.28.0)(eslint@8.57.1))(eslint@8.57.1) '@modern-js/babel-preset': 2.57.0(@rsbuild/core@1.0.1-beta.3) '@rsbuild/core': 1.0.1-beta.3 '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5) @@ -44608,7 +44731,7 @@ snapshots: dependencies: '@babel/core': 7.24.7 '@babel/eslint-parser': 7.24.7(@babel/core@7.24.7)(eslint@8.57.1) - '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.24.7)(eslint@8.57.1))(eslint@8.57.1) + '@babel/eslint-plugin': 7.27.1(@babel/eslint-parser@7.24.7(@babel/core@7.28.0)(eslint@8.57.1))(eslint@8.57.1) '@modern-js/babel-preset': 2.59.0(@rsbuild/core@1.0.1-rc.4) '@rsbuild/core': 1.0.1-rc.4 '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) @@ -49902,11 +50025,11 @@ snapshots: typescript: 5.5.3 webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) - '@nguniversal/builders@16.2.0(@angular-devkit/build-angular@15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.13.3(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.89.2)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@22.17.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@types/express@4.17.21)(chokidar@3.6.0)(typescript@5.5.3)': + '@nguniversal/builders@16.2.0(@angular-devkit/build-angular@15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.13.3(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.89.2)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@22.17.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4))(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(@types/express@4.17.21)(chokidar@3.5.3)(typescript@5.5.3)': dependencies: - '@angular-devkit/architect': 0.1602.16(chokidar@3.6.0) + '@angular-devkit/architect': 0.1602.16(chokidar@3.5.3) '@angular-devkit/build-angular': 15.2.10(@angular/compiler-cli@15.2.10(@angular/compiler@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)))(typescript@5.5.3))(@angular/platform-server@15.2.10(6676711f88f9c40c18b0e2629d70e5ad))(@swc/core@1.13.3(@swc/helpers@0.5.17))(html-webpack-plugin@5.6.0(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.101.0))(sass-embedded@1.89.2)(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.13.3(@swc/helpers@0.5.17))(@swc/wasm@1.13.3)(@types/node@22.17.0)(typescript@5.5.3)))(typescript@5.5.3)(webpack-cli@5.1.4) - '@angular-devkit/core': 16.2.16(chokidar@3.6.0) + '@angular-devkit/core': 16.2.16(chokidar@3.5.3) '@nguniversal/common': 16.2.0(@angular/common@15.2.10(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10))(rxjs@7.8.2))(@angular/core@15.2.10(rxjs@7.8.2)(zone.js@0.14.10)) browser-sync: 2.29.3 express: 4.19.2 @@ -58427,6 +58550,13 @@ snapshots: optionalDependencies: webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.101.0) + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.1.0)(webpack@5.101.0)': + dependencies: + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.101.0) + optionalDependencies: + webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.101.0) + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.2.2)(webpack@5.101.0)': dependencies: webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) @@ -59060,7 +59190,7 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.24.4 + browserslist: 4.25.1 caniuse-lite: 1.0.30001731 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -59844,7 +59974,7 @@ snapshots: dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 - chalk: 5.0.1 + chalk: 5.3.0 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 @@ -61559,7 +61689,7 @@ snapshots: semver: 7.6.3 optionalDependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - webpack: 5.101.0(@swc/core@1.6.13(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) css-minimizer-webpack-plugin@3.4.1(esbuild@0.23.0)(webpack@5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(esbuild@0.23.0)): dependencies: @@ -62828,8 +62958,8 @@ snapshots: enhanced-resolve@5.12.0: dependencies: - graceful-fs: 4.2.10 - tapable: 2.2.1 + graceful-fs: 4.2.11 + tapable: 2.2.2 enhanced-resolve@5.18.2: dependencies: @@ -67132,7 +67262,7 @@ snapshots: jest-diff@29.7.0: dependencies: - chalk: 4.1.0 + chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 @@ -67309,7 +67439,7 @@ snapshots: '@babel/code-frame': 7.27.1 '@jest/types': 28.1.3 '@types/stack-utils': 2.0.3 - chalk: 4.1.0 + chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.8 pretty-format: 28.1.3 @@ -69584,7 +69714,7 @@ snapshots: dependencies: schema-utils: 4.3.2 tapable: 2.2.2 - webpack: 5.101.0(@swc/core@1.6.13(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) minimalistic-assert@1.0.1: {} @@ -76370,7 +76500,7 @@ snapshots: style-loader@4.0.0(webpack@5.101.0): dependencies: - webpack: 5.101.0(@swc/core@1.6.13(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) style-resources-loader@1.5.0(webpack@5.88.2(@swc/core@1.13.3(@swc/helpers@0.5.17))): dependencies: @@ -79616,6 +79746,25 @@ snapshots: optionalDependencies: webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.101.0) + webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.101.0): + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.101.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.101.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.1.0)(webpack@5.101.0) + colorette: 2.0.20 + commander: 10.0.1 + cross-spawn: 7.0.3 + envinfo: 7.14.0 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-merge: 5.10.0 + optionalDependencies: + webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.101.0) + webpack-cli@5.1.4(webpack-dev-server@5.2.2)(webpack@5.101.0): dependencies: '@discoveryjs/json-ext': 0.5.7 @@ -80264,6 +80413,45 @@ snapshots: - supports-color - utf-8-validate + webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.101.0): + 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.8 + '@types/sockjs': 0.3.36 + '@types/ws': 8.18.1 + ansi-html-community: 0.0.8 + bonjour-service: 1.3.0 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.8.1 + connect-history-api-fallback: 2.0.0 + express: 4.19.2 + graceful-fs: 4.2.11 + html-entities: 2.6.0 + http-proxy-middleware: 2.0.9(@types/express@4.17.21) + ipaddr.js: 2.2.0 + launch-editor: 2.11.0 + open: 10.2.0 + p-retry: 6.2.1 + schema-utils: 4.3.2 + selfsigned: 2.4.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack-dev-middleware: 7.4.2(webpack@5.101.0) + ws: 8.18.3 + optionalDependencies: + webpack: 5.101.0(@swc/core@1.13.3(@swc/helpers@0.5.17))(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.101.0) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + webpack-dev-server@5.2.2(webpack-cli@5.1.4)(webpack@5.101.0): dependencies: '@types/bonjour': 3.5.13 @@ -80890,7 +81078,7 @@ snapshots: watchpack: 2.4.4 webpack-sources: 3.3.3 optionalDependencies: - webpack-cli: 5.1.4(webpack@5.101.0) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.0.4)(webpack@5.101.0) transitivePeerDependencies: - '@swc/core' - esbuild