diff --git a/.changeset/brown-badgers-fetch.md b/.changeset/brown-badgers-fetch.md new file mode 100644 index 0000000000..00d28f1f09 --- /dev/null +++ b/.changeset/brown-badgers-fetch.md @@ -0,0 +1,5 @@ +--- +'@module-federation/enhanced': minor +--- + +support request option on ConsumeSharePlugin. Allows matching requests like the object key of shared does diff --git a/.changeset/shy-snails-battle.md b/.changeset/shy-snails-battle.md new file mode 100644 index 0000000000..8d4fb5ec2f --- /dev/null +++ b/.changeset/shy-snails-battle.md @@ -0,0 +1,5 @@ +--- +'@module-federation/enhanced': minor +--- + +Layer support for Provide Share Plugin diff --git a/.gitignore b/.gitignore index fffaf8e2ec..b93b31dd70 100644 --- a/.gitignore +++ b/.gitignore @@ -70,4 +70,7 @@ packages/enhanced/test/js # storybook cases !apps/rslib-module/@mf-types/** -**/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp* \ No newline at end of file +**/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp* + +# Federation +**/.federation diff --git a/package.json b/package.json index d3d66e1c2e..a10717fd65 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "commit": "cz", "docs": "typedoc", "f": "nx format:write", + "enhanced:jest": "pnpm build && cd packages/enhanced && NODE_OPTIONS=--experimental-vm-modules npx jest test/ConfigTestCases.basictest.js", "lint": "nx run-many --target=lint", "test": "nx run-many --target=test", "build": "nx run-many --target=build --parallel=5 --projects=tag:type:pkg", @@ -228,6 +229,7 @@ "vue-tsc": "^2.0.26", "wait-on": "^7.2.0", "webpack": "5.93.0", + "webpack-cli": "^5.1.4", "webpack-virtual-modules": "0.6.2", "whatwg-fetch": "^3.6.20", "yargs": "^17.7.2" diff --git a/packages/enhanced/src/declarations/plugins/sharing/ConsumeSharedModule.d.ts b/packages/enhanced/src/declarations/plugins/sharing/ConsumeSharedModule.d.ts new file mode 100644 index 0000000000..096f0df9f1 --- /dev/null +++ b/packages/enhanced/src/declarations/plugins/sharing/ConsumeSharedModule.d.ts @@ -0,0 +1,53 @@ +export type ConsumeOptions = { + /** + * fallback request + */ + import?: string | undefined; + /** + * resolved fallback request + */ + importResolved?: string | undefined; + /** + * The actual request to use for importing the module. If not specified, the property name/key will be used. + */ + request?: string; + /** + * global share key + */ + shareKey: string; + /** + * share scope + */ + shareScope: string; + /** + * version requirement + */ + requiredVersion: + | import('webpack/lib/util/semver').SemVerRange + | false + | undefined; + /** + * package name to determine required version automatically + */ + packageName: string; + /** + * don't use shared version even if version isn't valid + */ + strictVersion: boolean; + /** + * use single global version + */ + singleton: boolean; + /** + * include the fallback module in a sync way + */ + eager: boolean; + /** + * Share a specific layer of the module, if the module supports layers + */ + layer?: string | null; + /** + * Issuer layer in which the module should be resolved + */ + issuerLayer?: string | null; +}; diff --git a/packages/enhanced/src/declarations/plugins/sharing/ConsumeSharedPlugin.d.ts b/packages/enhanced/src/declarations/plugins/sharing/ConsumeSharedPlugin.d.ts index 96e816c31c..f56a1d94e0 100644 --- a/packages/enhanced/src/declarations/plugins/sharing/ConsumeSharedPlugin.d.ts +++ b/packages/enhanced/src/declarations/plugins/sharing/ConsumeSharedPlugin.d.ts @@ -71,4 +71,16 @@ export interface ConsumesConfig { * Do not accept shared module if version is not valid (defaults to yes, if local fallback module is available and shared module is not a singleton, otherwise no, has no effect if there is no required version specified). */ strictVersion?: boolean; + /** + * Issuer layer in which the module should be resolved. + */ + issuerLayer?: string; + /** + * Layer for the shared module. + */ + layer?: string; + /** + * The actual request to use for importing the module. If not specified, the property name/key will be used. + */ + request?: string; } diff --git a/packages/enhanced/src/declarations/plugins/sharing/ProvideSharedPlugin.d.ts b/packages/enhanced/src/declarations/plugins/sharing/ProvideSharedPlugin.d.ts index 02d53ee088..e907f23454 100644 --- a/packages/enhanced/src/declarations/plugins/sharing/ProvideSharedPlugin.d.ts +++ b/packages/enhanced/src/declarations/plugins/sharing/ProvideSharedPlugin.d.ts @@ -64,4 +64,12 @@ export interface ProvidesConfig { * Do not accept shared module if version is not valid (defaults to yes, if local fallback module is available and shared module is not a singleton, otherwise no, has no effect if there is no required version specified). */ strictVersion?: boolean; + /** + * Layer for the shared module. + */ + layer?: string; + /** + * The actual request to use for importing the module. If not specified, the property name/key will be used. + */ + request?: string; } diff --git a/packages/enhanced/src/declarations/plugins/sharing/SharePlugin.d.ts b/packages/enhanced/src/declarations/plugins/sharing/SharePlugin.d.ts index 9bd1c03528..8d1e197af1 100644 --- a/packages/enhanced/src/declarations/plugins/sharing/SharePlugin.d.ts +++ b/packages/enhanced/src/declarations/plugins/sharing/SharePlugin.d.ts @@ -75,4 +75,16 @@ export interface SharedConfig { * Version of the provided module. Will replace lower matching versions, but not higher. */ version?: false | string; + /** + * Issuer layer in which the module should be resolved. + */ + issuerLayer?: string; + /** + * Layer for the shared module. + */ + layer?: string; + /** + * The actual request to use for importing the module. Defaults to the property name. + */ + request?: string; } diff --git a/packages/enhanced/src/lib/sharing/ConsumeSharedModule.ts b/packages/enhanced/src/lib/sharing/ConsumeSharedModule.ts index 9d0484eb85..b9bb7437c9 100644 --- a/packages/enhanced/src/lib/sharing/ConsumeSharedModule.ts +++ b/packages/enhanced/src/lib/sharing/ConsumeSharedModule.ts @@ -24,6 +24,7 @@ import type { import ConsumeSharedFallbackDependency from './ConsumeSharedFallbackDependency'; import { normalizeConsumeShareOptions } from './utils'; import { WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE } from '../Constants'; +import type { ConsumeOptions } from '../../declarations/plugins/sharing/ConsumeSharedModule'; const { rangeToString, stringifyHoley } = require( normalizeWebpackPath('webpack/lib/util/semver'), @@ -38,48 +39,6 @@ const makeSerializable = require( normalizeWebpackPath('webpack/lib/util/makeSerializable'), ) as typeof import('webpack/lib/util/makeSerializable'); -export type ConsumeOptions = { - /** - * fallback request - */ - import?: string | undefined; - /** - * resolved fallback request - */ - importResolved?: string | undefined; - /** - * global share key - */ - shareKey: string; - /** - * share scope - */ - shareScope: string; - /** - * version requirement - */ - requiredVersion: - | import('webpack/lib/util/semver').SemVerRange - | false - | undefined; - /** - * package name to determine required version automatically - */ - packageName: string; - /** - * don't use shared version even if version isn't valid - */ - strictVersion: boolean; - /** - * use single global version - */ - singleton: boolean; - /** - * include the fallback module in a sync way - */ - eager: boolean; -}; - /** * @typedef {Object} ConsumeOptions * @property {string=} import fallback request @@ -91,6 +50,8 @@ export type ConsumeOptions = { * @property {boolean} strictVersion don't use shared version even if version isn't valid * @property {boolean} singleton use single global version * @property {boolean} eager include the fallback module in a sync way + * @property {string | null=} layer Share a specific layer of the module, if the module supports layers + * @property {string | null=} issuerLayer Issuer layer in which the module should be resolved */ const TYPES = new Set(['consume-shared']); @@ -103,7 +64,11 @@ class ConsumeSharedModule extends Module { * @param {ConsumeOptions} options consume options */ constructor(context: string, options: ConsumeOptions) { - super(WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE, context); + super( + WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE, + context, + options.layer ?? undefined, + ); this.options = options; } @@ -119,10 +84,11 @@ class ConsumeSharedModule extends Module { strictVersion, singleton, eager, + layer, } = this.options; return `${WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE}|${shareScope}|${shareKey}|${ requiredVersion && rangeToString(requiredVersion) - }|${strictVersion}|${importResolved}|${singleton}|${eager}`; + }|${strictVersion}|${importResolved}|${singleton}|${eager}|${layer}`; } /** @@ -138,6 +104,7 @@ class ConsumeSharedModule extends Module { strictVersion, singleton, eager, + layer, } = this.options; return `consume shared module (${shareScope}) ${shareKey}@${ requiredVersion ? rangeToString(requiredVersion) : '*' @@ -145,7 +112,7 @@ class ConsumeSharedModule extends Module { importResolved ? ` (fallback: ${requestShortener.shorten(importResolved)})` : '' - }${eager ? ' (eager)' : ''}`; + }${eager ? ' (eager)' : ''}${layer ? ` (${layer})` : ''}`; } /** @@ -166,7 +133,6 @@ class ConsumeSharedModule extends Module { * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild * @returns {void} */ - // @ts-ignore override needBuild( context: NeedBuildContext, callback: (error?: WebpackError | null, needsRebuild?: boolean) => void, @@ -182,7 +148,6 @@ class ConsumeSharedModule extends Module { * @param {function(WebpackError=): void} callback callback function * @returns {void} */ - // @ts-ignore override build( options: WebpackOptions, compilation: Compilation, @@ -225,10 +190,8 @@ class ConsumeSharedModule extends Module { * @param {UpdateHashContext} context context * @returns {void} */ - // @ts-ignore override updateHash(hash: Hash, context: UpdateHashContext): void { hash.update(JSON.stringify(this.options)); - // @ts-ignore super.updateHash(hash, context); } @@ -236,7 +199,6 @@ class ConsumeSharedModule extends Module { * @param {CodeGenerationContext} context context for code generation * @returns {CodeGenerationResult} result */ - // @ts-ignore override codeGeneration({ chunkGraph, moduleGraph, @@ -257,7 +219,6 @@ class ConsumeSharedModule extends Module { if (eager) { const dep = this.dependencies[0]; fallbackCode = runtimeTemplate.syncModuleFactory({ - // @ts-ignore dependency: dep, chunkGraph, runtimeRequirements, @@ -266,7 +227,6 @@ class ConsumeSharedModule extends Module { } else { const block = this.blocks[0]; fallbackCode = runtimeTemplate.asyncModuleFactory({ - // @ts-ignore block, chunkGraph, runtimeRequirements, diff --git a/packages/enhanced/src/lib/sharing/ConsumeSharedPlugin.ts b/packages/enhanced/src/lib/sharing/ConsumeSharedPlugin.ts index 01648deee0..f4e9d5588e 100644 --- a/packages/enhanced/src/lib/sharing/ConsumeSharedPlugin.ts +++ b/packages/enhanced/src/lib/sharing/ConsumeSharedPlugin.ts @@ -9,9 +9,8 @@ import { normalizeWebpackPath, } from '@module-federation/sdk/normalize-webpack-path'; import { isRequiredVersion } from '@module-federation/sdk'; -import type { Compiler, Compilation } from 'webpack'; +import type { Compiler, Compilation, Module } from 'webpack'; import { parseOptions } from '../container/options'; -import { ConsumeOptions } from './ConsumeSharedModule'; import { ConsumeSharedPluginOptions } from '../../declarations/plugins/sharing/ConsumeSharedPlugin'; import { resolveMatchedConfigs } from './resolveMatchedConfigs'; import { @@ -29,6 +28,9 @@ import ProvideForSharedDependency from './ProvideForSharedDependency'; import FederationRuntimePlugin from '../container/runtime/FederationRuntimePlugin'; import ShareRuntimeModule from './ShareRuntimeModule'; import type { SemVerRange } from 'webpack/lib/util/semver'; +import type { ResolveData } from 'webpack/lib/NormalModuleFactory'; +import type { ModuleFactoryCreateDataContextInfo } from 'webpack/lib/ModuleFactory'; +import type { ConsumeOptions } from '../../declarations/plugins/sharing/ConsumeSharedModule'; const ModuleNotFoundError = require( normalizeWebpackPath('webpack/lib/ModuleNotFoundError'), @@ -48,17 +50,8 @@ const createSchemaValidation = require( const validate = createSchemaValidation( //eslint-disable-next-line - require( - normalizeWebpackPath( - 'webpack/schemas/plugins/sharing/ConsumeSharedPlugin.check.js', - ), - ), - () => - require( - normalizeWebpackPath( - 'webpack/schemas/plugins/sharing/ConsumeSharedPlugin.json', - ), - ), + require('../../schemas/sharing/ConsumeSharedPlugin.check.js'), + () => require('../../schemas/sharing/ConsumeSharedPlugin'), { name: 'Consume Shared Plugin', baseDataPath: 'options', @@ -69,6 +62,17 @@ const RESOLVE_OPTIONS: ResolveOptionsWithDependencyType = { dependencyType: 'esm', }; const PLUGIN_NAME = 'ConsumeSharedPlugin'; + +// Helper function to create composite key +function createLookupKey( + request: string, + contextInfo: ModuleFactoryCreateDataContextInfo, +): string { + return contextInfo.issuerLayer + ? `(${contextInfo.issuerLayer})${request}` + : request; +} + class ConsumeSharedPlugin { private _consumes: [string, ConsumeOptions][]; @@ -94,6 +98,9 @@ class ConsumeSharedPlugin { strictVersion: false, singleton: false, eager: false, + issuerLayer: undefined, + layer: undefined, + request: key, } : // key is a request/key // item is a version @@ -107,24 +114,35 @@ class ConsumeSharedPlugin { packageName: undefined, singleton: false, eager: false, + issuerLayer: undefined, + layer: undefined, + request: key, }; return result; }, - (item, key) => ({ - import: item.import === false ? undefined : item.import || key, - shareScope: item.shareScope || options.shareScope || 'default', - shareKey: item.shareKey || key, - // @ts-ignore webpack internal semver has some issue, use runtime semver , related issue: https://github.com/webpack/webpack/issues/17756 - requiredVersion: item.requiredVersion, - strictVersion: - typeof item.strictVersion === 'boolean' - ? item.strictVersion - : item.import !== false && !item.singleton, - //@ts-ignore - packageName: item.packageName, - singleton: !!item.singleton, - eager: !!item.eager, - }), + (item, key) => { + const request = item.request || key; + return { + import: item.import === false ? undefined : item.import || request, + shareScope: item.shareScope || options.shareScope || 'default', + shareKey: item.shareKey || request, + requiredVersion: + item.requiredVersion === false + ? false + : // @ts-ignore webpack internal semver has some issue, use runtime semver , related issue: https://github.com/webpack/webpack/issues/17756 + (item.requiredVersion as SemVerRange), + strictVersion: + typeof item.strictVersion === 'boolean' + ? item.strictVersion + : item.import !== false && !item.singleton, + packageName: item.packageName, + singleton: !!item.singleton, + eager: !!item.eager, + issuerLayer: item.issuerLayer ? item.issuerLayer : undefined, + layer: item.layer ? item.layer : undefined, + request, + } as ConsumeOptions; + }, ); } @@ -296,17 +314,20 @@ class ConsumeSharedPlugin { normalModuleFactory.hooks.factorize.tapPromise( PLUGIN_NAME, - ({ context, request, dependencies }) => + async (resolveData: ResolveData): Promise => { + const { context, request, dependencies, contextInfo } = resolveData; // wait for resolving to be complete - //@ts-ignore - promise.then(() => { + return promise.then(() => { if ( dependencies[0] instanceof ConsumeSharedFallbackDependency || dependencies[0] instanceof ProvideForSharedDependency ) { return; } - const match = unresolvedConsumes.get(request); + const match = unresolvedConsumes.get( + createLookupKey(request, contextInfo), + ); + if (match !== undefined) { return createConsumeSharedModule(context, request, match); } @@ -319,10 +340,13 @@ class ConsumeSharedPlugin { ? options.import + remainder : undefined, shareKey: options.shareKey + remainder, + layer: options.layer || contextInfo.issuerLayer, }); } } - }), + return; + }); + }, ); normalModuleFactory.hooks.createModule.tapPromise( PLUGIN_NAME, diff --git a/packages/enhanced/src/lib/sharing/ProvideSharedDependency.ts b/packages/enhanced/src/lib/sharing/ProvideSharedDependency.ts index 91202c010d..eb61bae23b 100644 --- a/packages/enhanced/src/lib/sharing/ProvideSharedDependency.ts +++ b/packages/enhanced/src/lib/sharing/ProvideSharedDependency.ts @@ -26,6 +26,7 @@ class ProvideSharedDependency extends Dependency { requiredVersion: string | false; strictVersion: boolean; singleton: boolean; + layer?: string; /** * @param {string} shareScope share scope @@ -36,6 +37,7 @@ class ProvideSharedDependency extends Dependency { * @param {boolean} requiredVersion version requirement * @param {boolean} strictVersion don't use shared version even if version isn't valid * @param {boolean} singleton use single global version + * @param {string} [layer] layer information */ constructor( shareScope: string, @@ -46,6 +48,7 @@ class ProvideSharedDependency extends Dependency { requiredVersion: string | false, strictVersion: boolean, singleton: boolean, + layer?: string, ) { super(); this.shareScope = shareScope; @@ -56,6 +59,7 @@ class ProvideSharedDependency extends Dependency { this.requiredVersion = requiredVersion; this.strictVersion = strictVersion; this.singleton = singleton; + this.layer = layer; } override get type(): string { @@ -66,7 +70,7 @@ class ProvideSharedDependency extends Dependency { * @returns {string | null} an identifier to merge equal requests */ override getResourceIdentifier(): string | null { - return `provide module (${this.shareScope}) ${this.request} as ${ + return `provide module (${this.shareScope})${this.layer ? ` (${this.layer})` : ''} ${this.request} as ${ this.name } @ ${this.version}${this.eager ? ' (eager)' : ''}`; } @@ -77,12 +81,13 @@ class ProvideSharedDependency extends Dependency { override serialize(context: ObjectSerializerContext): void { context.write(this.shareScope); context.write(this.name); - context.write(this.request); context.write(this.version); + context.write(this.request); context.write(this.eager); context.write(this.requiredVersion); context.write(this.strictVersion); context.write(this.singleton); + context.write(this.layer); super.serialize(context); } @@ -103,8 +108,9 @@ class ProvideSharedDependency extends Dependency { read(), read(), read(), + read(), ); - //@ts-ignore + // @ts-expect-error - webpack serializer pattern requires static property this.shareScope = context.read(); obj.deserialize(context); return obj; diff --git a/packages/enhanced/src/lib/sharing/ProvideSharedModule.ts b/packages/enhanced/src/lib/sharing/ProvideSharedModule.ts index fae5e3fc71..64130b181b 100644 --- a/packages/enhanced/src/lib/sharing/ProvideSharedModule.ts +++ b/packages/enhanced/src/lib/sharing/ProvideSharedModule.ts @@ -53,6 +53,7 @@ class ProvideSharedModule extends Module { * @param {boolean} requiredVersion version requirement * @param {boolean} strictVersion don't use shared version even if version isn't valid * @param {boolean} singleton use single global version + * @param {string} [layer] layer information */ constructor( shareScope: string, @@ -63,8 +64,9 @@ class ProvideSharedModule extends Module { requiredVersion: string | false, strictVersion: boolean, singleton: boolean, + layer?: string, ) { - super(WEBPACK_MODULE_TYPE_PROVIDE); + super(WEBPACK_MODULE_TYPE_PROVIDE, undefined, layer); this._shareScope = shareScope; this._name = name; this._version = version; @@ -79,7 +81,9 @@ class ProvideSharedModule extends Module { * @returns {string} a unique identifier of the module */ override identifier(): string { - return `provide module (${this._shareScope}) ${this._name}@${this._version} = ${this._request}`; + return `provide module (${this._shareScope})${ + this.layer ? ` (${this.layer})` : '' + } ${this._name}@${this._version} = ${this._request}`; } /** @@ -87,9 +91,9 @@ class ProvideSharedModule extends Module { * @returns {string} a user readable identifier of the module */ override readableIdentifier(requestShortener: RequestShortener): string { - return `provide shared module (${this._shareScope}) ${this._name}@${ - this._version - } = ${requestShortener.shorten(this._request)}`; + return `provide shared module (${this._shareScope})${ + this.layer ? ` (${this.layer})` : '' + } ${this._name}@${this._version} = ${requestShortener.shorten(this._request)}`; } /** @@ -107,7 +111,6 @@ class ProvideSharedModule extends Module { * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild * @returns {void} */ - // @ts-ignore override needBuild( context: NeedBuildContext, callback: (error?: WebpackError | null, needsRebuild?: boolean) => void, @@ -123,7 +126,6 @@ class ProvideSharedModule extends Module { * @param {function(WebpackError=): void} callback callback function * @returns {void} */ - // @ts-ignore override build( options: WebpackOptions, compilation: Compilation, @@ -168,7 +170,6 @@ class ProvideSharedModule extends Module { * @param {CodeGenerationContext} context context for code generation * @returns {CodeGenerationResult} result */ - // @ts-ignore override codeGeneration({ runtimeTemplate, moduleGraph, @@ -177,14 +178,12 @@ class ProvideSharedModule extends Module { const runtimeRequirements = new Set([RuntimeGlobals.initializeSharing]); const moduleGetter = this._eager ? runtimeTemplate.syncModuleFactory({ - //@ts-ignore dependency: this.dependencies[0], chunkGraph, request: this._request, runtimeRequirements, }) : runtimeTemplate.asyncModuleFactory({ - //@ts-ignore block: this.blocks[0], chunkGraph, request: this._request, @@ -231,6 +230,7 @@ class ProvideSharedModule extends Module { write(this._requiredVersion); write(this._strictVersion); write(this._singleton); + write(this.layer); super.serialize(context); } @@ -249,6 +249,7 @@ class ProvideSharedModule extends Module { read(), read(), read(), + read(), ); obj.deserialize(context); return obj; diff --git a/packages/enhanced/src/lib/sharing/ProvideSharedPlugin.ts b/packages/enhanced/src/lib/sharing/ProvideSharedPlugin.ts index e66ebae2fe..ee7270df89 100644 --- a/packages/enhanced/src/lib/sharing/ProvideSharedPlugin.ts +++ b/packages/enhanced/src/lib/sharing/ProvideSharedPlugin.ts @@ -32,24 +32,19 @@ const WebpackError = require( normalizeWebpackPath('webpack/lib/WebpackError'), ) as typeof import('webpack/lib/WebpackError'); -export type ProvideOptions = ProvidesConfig; export type ResolvedProvideMap = Map< string, { - config: ProvideOptions; + config: ProvidesConfig; version: string | undefined | false; + resource?: string; } >; -const validate = createSchemaValidation( - //eslint-disable-next-line - checkOptions, - () => schema, - { - name: 'Provide Shared Plugin', - baseDataPath: 'options', - }, -); +const validate = createSchemaValidation(checkOptions, () => schema, { + name: 'Provide Shared Plugin', + baseDataPath: 'options', +}); /** * @typedef {Object} ProvideOptions @@ -57,26 +52,37 @@ const validate = createSchemaValidation( * @property {string} shareScope * @property {string | undefined | false} version * @property {boolean} eager + * @property {string} [request] The actual request to use for importing the module */ /** @typedef {Map} ResolvedProvideMap */ +// Helper function to create composite key +function createLookupKey( + request: string, + config: { layer?: string | null }, +): string { + if (config.layer) { + return `(${config.layer})${request}`; + } + return request; +} + class ProvideSharedPlugin { - private _provides: [string, ProvideOptions][]; + private _provides: [string, ProvidesConfig][]; /** * @param {ProvideSharedPluginOptions} options options */ constructor(options: ProvideSharedPluginOptions) { validate(options); - //@ts-ignore this._provides = parseOptions( options.provides, (item) => { if (Array.isArray(item)) throw new Error('Unexpected array of provides'); - /** @type {ProvideOptions} */ - const result: ProvideOptions = { + /** @type {ProvidesConfig} */ + const result: ProvidesConfig = { shareKey: item, version: undefined, shareScope: options.shareScope || 'default', @@ -84,17 +90,21 @@ class ProvideSharedPlugin { requiredVersion: false, strictVersion: false, singleton: false, + layer: undefined, + request: item, }; return result; }, - (item) => ({ - shareKey: item.shareKey, + (item, key) => ({ + shareKey: item.shareKey || key, version: item.version, shareScope: item.shareScope || options.shareScope || 'default', eager: !!item.eager, requiredVersion: item.requiredVersion || false, strictVersion: item.strictVersion || false, singleton: item.singleton || false, + layer: item.layer, + request: item.request || key, }), ); this._provides.sort(([a], [b]) => { @@ -121,33 +131,36 @@ class ProvideSharedPlugin { 'ProvideSharedPlugin', (compilation: Compilation, { normalModuleFactory }) => { const resolvedProvideMap: ResolvedProvideMap = new Map(); - const matchProvides: Map = new Map(); - const prefixMatchProvides: Map = new Map(); + const matchProvides: Map = new Map(); + const prefixMatchProvides: Map = new Map(); for (const [request, config] of this._provides) { - if (/^(\/|[A-Za-z]:\\|\\\\|\.\.?(\/|$))/.test(request)) { + const actualRequest = config.request || request; + const lookupKey = createLookupKey(actualRequest, config); + if (/^(\/|[A-Za-z]:\\|\\\\|\.\.?(\/|$))/.test(actualRequest)) { // relative request - resolvedProvideMap.set(request, { + resolvedProvideMap.set(lookupKey, { config, version: config.version, }); - } else if (/^(\/|[A-Za-z]:\\|\\\\)/.test(request)) { + } else if (/^(\/|[A-Za-z]:\\|\\\\)/.test(actualRequest)) { // absolute path - resolvedProvideMap.set(request, { + resolvedProvideMap.set(lookupKey, { config, version: config.version, }); - } else if (request.endsWith('/')) { + } else if (actualRequest.endsWith('/')) { // module request prefix - prefixMatchProvides.set(request, config); + prefixMatchProvides.set(lookupKey, config); } else { // module request - matchProvides.set(request, config); + matchProvides.set(lookupKey, config); } } + compilationData.set(compilation, resolvedProvideMap); const provideSharedModule = ( key: string, - config: ProvideOptions, + config: ProvidesConfig, resource: string, resourceResolveData: any, ) => { @@ -173,24 +186,33 @@ class ProvideSharedPlugin { `No version specified and unable to automatically determine one. ${details}`, ); error.file = `shared module ${key} -> ${resource}`; - // @ts-ignore compilation.warnings.push(error); } } - resolvedProvideMap.set(resource, { + const lookupKey = createLookupKey(resource, config); + resolvedProvideMap.set(lookupKey, { config, version, + resource, }); }; normalModuleFactory.hooks.module.tap( 'ProvideSharedPlugin', (module, { resource, resourceResolveData }, resolveData) => { - if (resource && resolvedProvideMap.has(resource)) { + const moduleLayer = module.layer; + const lookupKey = createLookupKey(resource || '', { + layer: moduleLayer || undefined, + }); + + if (resource && resolvedProvideMap.has(lookupKey)) { return module; } const { request } = resolveData; { - const config = matchProvides.get(request); + const requestKey = createLookupKey(request, { + layer: moduleLayer || undefined, + }); + const config = matchProvides.get(requestKey); if (config !== undefined && resource) { provideSharedModule( request, @@ -226,19 +248,19 @@ class ProvideSharedPlugin { async (compilation: Compilation) => { const resolvedProvideMap = compilationData.get(compilation); if (!resolvedProvideMap) return; + await Promise.all( Array.from( resolvedProvideMap, - ([resource, { config, version }]) => - new Promise((resolve, reject) => { + ([resourceKey, { config, version, resource }]) => { + return new Promise((resolve, reject) => { compilation.addInclude( compiler.context, - //@ts-ignore new ProvideSharedDependency( config.shareScope!, config.shareKey!, version || false, - resource, + resource || resourceKey, config.eager!, config.requiredVersion!, config.strictVersion!, @@ -248,11 +270,14 @@ class ProvideSharedPlugin { name: undefined, }, (err?: WebpackErrorType | null | undefined) => { - if (err) return reject(err); + if (err) { + return reject(err); + } resolve(); }, ); - }), + }); + }, ), ); }, @@ -268,7 +293,6 @@ class ProvideSharedPlugin { compilation.dependencyFactories.set( ProvideSharedDependency, - //@ts-ignore new ProvideSharedModuleFactory(), ); }, diff --git a/packages/enhanced/src/lib/sharing/SharePlugin.ts b/packages/enhanced/src/lib/sharing/SharePlugin.ts index 1eb4860165..9b5e436d69 100644 --- a/packages/enhanced/src/lib/sharing/SharePlugin.ts +++ b/packages/enhanced/src/lib/sharing/SharePlugin.ts @@ -52,6 +52,9 @@ class SharePlugin { singleton: options.singleton, packageName: options.packageName, eager: options.eager, + issuerLayer: options.issuerLayer, + layer: options.layer, + request: options.request || key, }, }), ); @@ -66,6 +69,8 @@ class SharePlugin { requiredVersion: options.requiredVersion, strictVersion: options.strictVersion, singleton: options.singleton, + layer: options.layer, + request: options.request || options.import || key, }, })); //@ts-ignore @@ -75,11 +80,10 @@ class SharePlugin { } /** - * Apply the plugin - * @param {Compiler} compiler the compiler instance - * @returns {void} + * Applies the plugin to the webpack compiler instance + * @param compiler - The webpack compiler instance */ - apply(compiler: Compiler) { + apply(compiler: Compiler): void { process.env['FEDERATION_WEBPACK_PATH'] = process.env['FEDERATION_WEBPACK_PATH'] || getWebpackPath(compiler); diff --git a/packages/enhanced/src/lib/sharing/resolveMatchedConfigs.ts b/packages/enhanced/src/lib/sharing/resolveMatchedConfigs.ts index 228bb95b67..7779277bf6 100644 --- a/packages/enhanced/src/lib/sharing/resolveMatchedConfigs.ts +++ b/packages/enhanced/src/lib/sharing/resolveMatchedConfigs.ts @@ -5,6 +5,7 @@ import { normalizeWebpackPath } from '@module-federation/sdk/normalize-webpack-path'; import type { Compilation } from 'webpack'; import type { ResolveOptionsWithDependencyType } from 'webpack/lib/ResolverFactory'; +import type { ConsumeOptions } from '../../declarations/plugins/sharing/ConsumeSharedModule'; const ModuleNotFoundError = require( normalizeWebpackPath('webpack/lib/ModuleNotFoundError'), @@ -13,6 +14,9 @@ const LazySet = require( normalizeWebpackPath('webpack/lib/util/LazySet'), ) as typeof import('webpack/lib/util/LazySet'); +const RELATIVE_REQUEST_REGEX = /^\.\.?(\/|$)/; +const ABSOLUTE_PATH_REGEX = /^(\/|[A-Za-z]:\\|\\\\)/; + interface MatchedConfigs { resolved: Map; unresolved: Map; @@ -23,7 +27,19 @@ const RESOLVE_OPTIONS: ResolveOptionsWithDependencyType = { dependencyType: 'esm', }; -export async function resolveMatchedConfigs( +function createCompositeKey(request: string, config: ConsumeOptions): string { + if (config.issuerLayer) { + return `(${config.issuerLayer})${request}`; + // layer unlikely to be used, issuerLayer is what factorize provides + // which is what we need to create a matching key for + } else if (config.layer) { + return `(${config.layer})${request}`; + } else { + return request; + } +} +// TODO: look at passing dedicated request key instead of infer from object key +export async function resolveMatchedConfigs( compilation: Compilation, configs: [string, T][], ): Promise> { @@ -35,28 +51,26 @@ export async function resolveMatchedConfigs( contextDependencies: new LazySet(), missingDependencies: new LazySet(), }; - // @ts-ignore const resolver = compilation.resolverFactory.get('normal', RESOLVE_OPTIONS); const context = compilation.compiler.context; await Promise.all( - //@ts-ignore configs.map(([request, config]) => { - if (/^\.\.?(\/|$)/.test(request)) { + const resolveRequest = config.request || request; + if (RELATIVE_REQUEST_REGEX.test(resolveRequest)) { // relative request return new Promise((resolve) => { resolver.resolve( {}, context, - request, + resolveRequest, resolveContext, (err, result) => { if (err || result === false) { - err = err || new Error(`Can't resolve ${request}`); + err = err || new Error(`Can't resolve ${resolveRequest}`); compilation.errors.push( - // @ts-ignore new ModuleNotFoundError(null, err, { - name: `shared module ${request}`, + name: `shared module ${resolveRequest}`, }), ); return resolve(); @@ -66,15 +80,20 @@ export async function resolveMatchedConfigs( }, ); }); - } else if (/^(\/|[A-Za-z]:\\|\\\\)/.test(request)) { + } else if (ABSOLUTE_PATH_REGEX.test(resolveRequest)) { // absolute path - resolved.set(request, config); - } else if (request.endsWith('/')) { + resolved.set(resolveRequest, config); + return undefined; + } else if (resolveRequest.endsWith('/')) { // module request prefix - prefixed.set(request, config); + const key = createCompositeKey(resolveRequest, config); + prefixed.set(key, config); + return undefined; } else { // module request - unresolved.set(request, config); + const key = createCompositeKey(resolveRequest, config); + unresolved.set(key, config); + return undefined; } }), ); diff --git a/packages/enhanced/src/schemas/sharing/ConsumeSharedPlugin.check.ts b/packages/enhanced/src/schemas/sharing/ConsumeSharedPlugin.check.ts new file mode 100644 index 0000000000..a117cfb4c7 --- /dev/null +++ b/packages/enhanced/src/schemas/sharing/ConsumeSharedPlugin.check.ts @@ -0,0 +1,398 @@ +/* eslint-disable */ +//@ts-nocheck +/* + * This file was automatically generated. + * DO NOT MODIFY BY HAND. + * Run `yarn special-lint-fix` to update + */ +'use strict'; + +function r( + e, + { + instancePath: t = '', + parentData: n, + parentDataProperty: s, + rootData: a = e, + } = {}, +) { + let o = null, + i = 0; + if (0 === i) { + if (!e || 'object' != typeof e || Array.isArray(e)) + return (r.errors = [{ params: { type: 'object' } }]), !1; + { + const t = i; + for (const t in e) + if ( + 'eager' !== t && + 'import' !== t && + 'packageName' !== t && + 'requiredVersion' !== t && + 'shareKey' !== t && + 'shareScope' !== t && + 'singleton' !== t && + 'strictVersion' !== t && + 'issuerLayer' !== t && + 'request' !== t && + 'layer' !== t + ) + return (r.errors = [{ params: { additionalProperty: t } }]), !1; + if (t === i) { + if (void 0 !== e.eager) { + const t = i; + if ('boolean' != typeof e.eager) + return (r.errors = [{ params: { type: 'boolean' } }]), !1; + var l = t === i; + } else l = !0; + if (l) { + if (void 0 !== e.import) { + let t = e.import; + const n = i, + s = i; + let a = !1; + const f = i; + if (!1 !== t) { + const r = { params: {} }; + null === o ? (o = [r]) : o.push(r), i++; + } + var p = f === i; + if (((a = a || p), !a)) { + const r = i; + if (i == i) + if ('string' == typeof t) { + if (t.length < 1) { + const r = { params: {} }; + null === o ? (o = [r]) : o.push(r), i++; + } + } else { + const r = { params: { type: 'string' } }; + null === o ? (o = [r]) : o.push(r), i++; + } + (p = r === i), (a = a || p); + } + if (!a) { + const e = { params: {} }; + return ( + null === o ? (o = [e]) : o.push(e), i++, (r.errors = o), !1 + ); + } + (i = s), + null !== o && (s ? (o.length = s) : (o = null)), + (l = n === i); + } else l = !0; + if (l) { + if (void 0 !== e.packageName) { + let t = e.packageName; + const n = i; + if (i === n) { + if ('string' != typeof t) + return (r.errors = [{ params: { type: 'string' } }]), !1; + if (t.length < 1) return (r.errors = [{ params: {} }]), !1; + } + l = n === i; + } else l = !0; + if (l) { + if (void 0 !== e.requiredVersion) { + let t = e.requiredVersion; + const n = i, + s = i; + let a = !1; + const p = i; + if (!1 !== t) { + const r = { params: {} }; + null === o ? (o = [r]) : o.push(r), i++; + } + var f = p === i; + if (((a = a || f), !a)) { + const r = i; + if ('string' != typeof t) { + const r = { params: { type: 'string' } }; + null === o ? (o = [r]) : o.push(r), i++; + } + (f = r === i), (a = a || f); + } + if (!a) { + const e = { params: {} }; + return ( + null === o ? (o = [e]) : o.push(e), i++, (r.errors = o), !1 + ); + } + (i = s), + null !== o && (s ? (o.length = s) : (o = null)), + (l = n === i); + } else l = !0; + if (l) { + if (void 0 !== e.shareKey) { + let t = e.shareKey; + const n = i; + if (i === n) { + if ('string' != typeof t) + return (r.errors = [{ params: { type: 'string' } }]), !1; + if (t.length < 1) return (r.errors = [{ params: {} }]), !1; + } + l = n === i; + } else l = !0; + if (l) { + if (void 0 !== e.shareScope) { + let t = e.shareScope; + const n = i; + if (i === n) { + if ('string' != typeof t) + return ( + (r.errors = [{ params: { type: 'string' } }]), !1 + ); + if (t.length < 1) + return (r.errors = [{ params: {} }]), !1; + } + l = n === i; + } else l = !0; + if (l) { + if (void 0 !== e.singleton) { + const t = i; + if ('boolean' != typeof e.singleton) + return ( + (r.errors = [{ params: { type: 'boolean' } }]), !1 + ); + l = t === i; + } else l = !0; + if (l) + if (void 0 !== e.strictVersion) { + const t = i; + if ('boolean' != typeof e.strictVersion) + return ( + (r.errors = [{ params: { type: 'boolean' } }]), !1 + ); + l = t === i; + } else l = !0; + if (l) { + if (void 0 !== e.issuerLayer) { + let t = e.issuerLayer; + const n = i; + if (i === n) { + if ('string' != typeof t) + return ( + (r.errors = [{ params: { type: 'string' } }]), !1 + ); + if (t.length < 1) + return (r.errors = [{ params: {} }]), !1; + } + l = n === i; + } else l = !0; + if (l) { + if (void 0 !== e.layer) { + let t = e.layer; + const n = i; + if (i === n) { + if ('string' != typeof t) + return ( + (r.errors = [{ params: { type: 'string' } }]), + !1 + ); + if (t.length < 1) + return (r.errors = [{ params: {} }]), !1; + } + l = n === i; + } else l = !0; + } + } + } + } + } + } + } + } + } + } + } + return (r.errors = o), 0 === i; +} + +function e( + t, + { + instancePath: n = '', + parentData: s, + parentDataProperty: a, + rootData: o = t, + } = {}, +) { + let i = null, + l = 0; + if (0 === l) { + if (!t || 'object' != typeof t || Array.isArray(t)) + return (e.errors = [{ params: { type: 'object' } }]), !1; + for (const s in t) { + let a = t[s]; + const f = l, + c = l; + let u = !1; + const y = l; + r(a, { + instancePath: n + '/' + s.replace(/~/g, '~0').replace(/\//g, '~1'), + parentData: t, + parentDataProperty: s, + rootData: o, + }) || ((i = null === i ? r.errors : i.concat(r.errors)), (l = i.length)); + var p = y === l; + if (((u = u || p), !u)) { + const r = l; + if (l == l) + if ('string' == typeof a) { + if (a.length < 1) { + const r = { params: {} }; + null === i ? (i = [r]) : i.push(r), l++; + } + } else { + const r = { params: { type: 'string' } }; + null === i ? (i = [r]) : i.push(r), l++; + } + (p = r === l), (u = u || p); + } + if (!u) { + const r = { params: {} }; + return null === i ? (i = [r]) : i.push(r), l++, (e.errors = i), !1; + } + if (((l = c), null !== i && (c ? (i.length = c) : (i = null)), f !== l)) + break; + } + } + return (e.errors = i), 0 === l; +} + +function t( + r, + { + instancePath: n = '', + parentData: s, + parentDataProperty: a, + rootData: o = r, + } = {}, +) { + let i = null, + l = 0; + const p = l; + let f = !1; + const c = l; + if (l === c) + if (Array.isArray(r)) { + const t = r.length; + for (let s = 0; s < t; s++) { + let t = r[s]; + const a = l, + p = l; + let f = !1; + const c = l; + if (l == l) + if ('string' == typeof t) { + if (t.length < 1) { + const r = { params: {} }; + null === i ? (i = [r]) : i.push(r), l++; + } + } else { + const r = { params: { type: 'string' } }; + null === i ? (i = [r]) : i.push(r), l++; + } + var u = c === l; + if (((f = f || u), !f)) { + const a = l; + e(t, { + instancePath: n + '/' + s, + parentData: r, + parentDataProperty: s, + rootData: o, + }) || + ((i = null === i ? e.errors : i.concat(e.errors)), (l = i.length)), + (u = a === l), + (f = f || u); + } + if (f) (l = p), null !== i && (p ? (i.length = p) : (i = null)); + else { + const r = { params: {} }; + null === i ? (i = [r]) : i.push(r), l++; + } + if (a !== l) break; + } + } else { + const r = { params: { type: 'array' } }; + null === i ? (i = [r]) : i.push(r), l++; + } + var y = c === l; + if (((f = f || y), !f)) { + const t = l; + e(r, { + instancePath: n, + parentData: s, + parentDataProperty: a, + rootData: o, + }) || ((i = null === i ? e.errors : i.concat(e.errors)), (l = i.length)), + (y = t === l), + (f = f || y); + } + if (!f) { + const r = { params: {} }; + return null === i ? (i = [r]) : i.push(r), l++, (t.errors = i), !1; + } + return ( + (l = p), + null !== i && (p ? (i.length = p) : (i = null)), + (t.errors = i), + 0 === l + ); +} + +function n( + r, + { + instancePath: e = '', + parentData: s, + parentDataProperty: a, + rootData: o = r, + } = {}, +) { + let i = null, + l = 0; + if (0 === l) { + if (!r || 'object' != typeof r || Array.isArray(r)) + return (n.errors = [{ params: { type: 'object' } }]), !1; + { + let s; + if (void 0 === r.consumes && (s = 'consumes')) + return (n.errors = [{ params: { missingProperty: s } }]), !1; + { + const s = l; + for (const e in r) + if ('consumes' !== e && 'shareScope' !== e) + return (n.errors = [{ params: { additionalProperty: e } }]), !1; + if (s === l) { + if (void 0 !== r.consumes) { + const n = l; + t(r.consumes, { + instancePath: e + '/consumes', + parentData: r, + parentDataProperty: 'consumes', + rootData: o, + }) || + ((i = null === i ? t.errors : i.concat(t.errors)), + (l = i.length)); + var p = n === l; + } else p = !0; + if (p) + if (void 0 !== r.shareScope) { + let e = r.shareScope; + const t = l; + if (l === t) { + if ('string' != typeof e) + return (n.errors = [{ params: { type: 'string' } }]), !1; + if (e.length < 1) return (n.errors = [{ params: {} }]), !1; + } + p = t === l; + } else p = !0; + } + } + } + } + return (n.errors = i), 0 === l; +} + +(module.exports = n), (module.exports.default = n); diff --git a/packages/enhanced/src/schemas/sharing/ConsumeSharedPlugin.ts b/packages/enhanced/src/schemas/sharing/ConsumeSharedPlugin.ts new file mode 100644 index 0000000000..1761bdaf35 --- /dev/null +++ b/packages/enhanced/src/schemas/sharing/ConsumeSharedPlugin.ts @@ -0,0 +1,147 @@ +export default { + definitions: { + Consumes: { + description: + 'Modules that should be consumed from share scope. When provided, property names are used to match requested modules in this compilation.', + anyOf: [ + { + type: 'array', + items: { + description: 'Modules that should be consumed from share scope.', + anyOf: [ + { + $ref: '#/definitions/ConsumesItem', + }, + { + $ref: '#/definitions/ConsumesObject', + }, + ], + }, + }, + { + $ref: '#/definitions/ConsumesObject', + }, + ], + }, + ConsumesConfig: { + description: + 'Advanced configuration for modules that should be consumed from share scope.', + type: 'object', + additionalProperties: false, + properties: { + eager: { + description: + 'Include the fallback module directly instead behind an async request. This allows to use fallback module in initial load too. All possible shared modules need to be eager too.', + type: 'boolean', + }, + import: { + description: + 'Fallback module if no shared module is found in share scope. Defaults to the property name.', + anyOf: [ + { + description: 'No fallback module.', + enum: [false], + }, + { + $ref: '#/definitions/ConsumesItem', + }, + ], + }, + packageName: { + description: + "Package name to determine required version from description file. This is only needed when package name can't be automatically determined from request.", + type: 'string', + minLength: 1, + }, + requiredVersion: { + description: 'Version requirement from module in share scope.', + anyOf: [ + { + description: 'No version requirement check.', + enum: [false], + }, + { + description: + "Version as string. Can be prefixed with '^' or '~' for minimum matches. Each part of the version should be separated by a dot '.'.", + type: 'string', + }, + ], + }, + shareKey: { + description: + 'Module is looked up under this key from the share scope.', + type: 'string', + minLength: 1, + }, + shareScope: { + description: 'Share scope name.', + type: 'string', + minLength: 1, + }, + singleton: { + description: + 'Allow only a single version of the shared module in share scope (disabled by default).', + type: 'boolean', + }, + strictVersion: { + description: + 'Do not accept shared module if version is not valid (defaults to yes, if local fallback module is available and shared module is not a singleton, otherwise no, has no effect if there is no required version specified).', + type: 'boolean', + }, + issuerLayer: { + description: 'Layer in which the issuer should be.', + type: 'string', + minLength: 1, + }, + layer: { + description: 'Layer for the shared module.', + type: 'string', + minLength: 1, + }, + request: { + description: + 'The actual request to use for importing the module. If not specified, the property name/key will be used.', + type: 'string', + minLength: 1, + }, + }, + }, + ConsumesItem: { + description: 'A module that should be consumed from share scope.', + type: 'string', + minLength: 1, + }, + ConsumesObject: { + description: + 'Modules that should be consumed from share scope. Property names are used to match requested modules in this compilation. Relative requests are resolved, module requests are matched unresolved, absolute paths will match resolved requests. A trailing slash will match all requests with this prefix. In this case shareKey must also have a trailing slash.', + type: 'object', + additionalProperties: { + description: 'Modules that should be consumed from share scope.', + anyOf: [ + { + $ref: '#/definitions/ConsumesConfig', + }, + { + $ref: '#/definitions/ConsumesItem', + }, + ], + }, + }, + }, + title: 'ConsumeSharedPluginOptions', + description: 'Options for consuming shared modules.', + type: 'object', + additionalProperties: false, + properties: { + consumes: { + $ref: '#/definitions/Consumes', + }, + shareScope: { + description: + "Share scope name used for all consumed modules (defaults to 'default').", + type: 'string', + minLength: 1, + }, + }, + required: ['consumes'], +}; diff --git a/packages/enhanced/src/schemas/sharing/ProviderSharedPlugin.check.ts b/packages/enhanced/src/schemas/sharing/ProviderSharedPlugin.check.ts index a0f7152e35..52b5c238c0 100644 --- a/packages/enhanced/src/schemas/sharing/ProviderSharedPlugin.check.ts +++ b/packages/enhanced/src/schemas/sharing/ProviderSharedPlugin.check.ts @@ -48,7 +48,9 @@ function r( 'shareScope' !== r && 'singleton' !== r && 'strictVersion' !== r && - 'version' !== r + 'version' !== r && + 'layer' !== r && + 'request' !== r ) { const e = { params: { @@ -59,66 +61,57 @@ function r( break; } if (r === l) { - if (void 0 !== s.eager) { - const r = l; - if ('boolean' != typeof s.eager) { - const r = { - params: { - type: 'boolean', - }, - }; - null === a ? (a = [r]) : a.push(r), l++; - } - var i = r === l; - } else i = !0; - if (i) { - if (void 0 !== s.requiredVersion) { - let r = s.requiredVersion; - const e = l, - t = l; - let n = !1; - const o = l; - if (!1 !== r) { - const r = { - params: {}, - }; - null === a ? (a = [r]) : a.push(r), l++; - } - var p = o === l; - if (((n = n || p), !n)) { - const e = l; - if ('string' != typeof r) { + if (void 0 !== s.request) { + let r = s.request; + const e = l; + if (l === e) + if ('string' == typeof r) { + if (r.length < 1) { const r = { - params: { - type: 'string', - }, + params: {}, }; null === a ? (a = [r]) : a.push(r), l++; } - (p = e === l), (n = n || p); + } else { + const r = { + params: { + type: 'string', + }, + }; + null === a ? (a = [r]) : a.push(r), l++; } - if (n) (l = t), null !== a && (t ? (a.length = t) : (a = null)); - else { + i = e === l; + } else i = !0; + if (i) { + if (void 0 !== s.eager) { + const r = l; + if ('boolean' != typeof s.eager) { const r = { - params: {}, + params: { + type: 'boolean', + }, }; null === a ? (a = [r]) : a.push(r), l++; } - i = e === l; + var i = r === l; } else i = !0; if (i) { - if (void 0 !== s.shareKey) { - let r = s.shareKey; - const e = l; - if (l === e) - if ('string' == typeof r) { - if (r.length < 1) { - const r = { - params: {}, - }; - null === a ? (a = [r]) : a.push(r), l++; - } - } else { + if (void 0 !== s.requiredVersion) { + let r = s.requiredVersion; + const e = l, + t = l; + let n = !1; + const o = l; + if (!1 !== r) { + const r = { + params: {}, + }; + null === a ? (a = [r]) : a.push(r), l++; + } + var p = o === l; + if (((n = n || p), !n)) { + const e = l; + if ('string' != typeof r) { const r = { params: { type: 'string', @@ -126,11 +119,21 @@ function r( }; null === a ? (a = [r]) : a.push(r), l++; } + (p = e === l), (n = n || p); + } + if (n) + (l = t), null !== a && (t ? (a.length = t) : (a = null)); + else { + const r = { + params: {}, + }; + null === a ? (a = [r]) : a.push(r), l++; + } i = e === l; } else i = !0; if (i) { - if (void 0 !== s.shareScope) { - let r = s.shareScope; + if (void 0 !== s.shareKey) { + let r = s.shareKey; const e = l; if (l === e) if ('string' == typeof r) { @@ -151,22 +154,31 @@ function r( i = e === l; } else i = !0; if (i) { - if (void 0 !== s.singleton) { - const r = l; - if ('boolean' != typeof s.singleton) { - const r = { - params: { - type: 'boolean', - }, - }; - null === a ? (a = [r]) : a.push(r), l++; - } - i = r === l; + if (void 0 !== s.shareScope) { + let r = s.shareScope; + const e = l; + if (l === e) + if ('string' == typeof r) { + if (r.length < 1) { + const r = { + params: {}, + }; + null === a ? (a = [r]) : a.push(r), l++; + } + } else { + const r = { + params: { + type: 'string', + }, + }; + null === a ? (a = [r]) : a.push(r), l++; + } + i = e === l; } else i = !0; if (i) { - if (void 0 !== s.strictVersion) { + if (void 0 !== s.singleton) { const r = l; - if ('boolean' != typeof s.strictVersion) { + if ('boolean' != typeof s.singleton) { const r = { params: { type: 'boolean', @@ -176,43 +188,80 @@ function r( } i = r === l; } else i = !0; - if (i) - if (void 0 !== s.version) { - let r = s.version; - const e = l, - t = l; - let n = !1; - const o = l; - if (!1 !== r) { + if (i) { + if (void 0 !== s.strictVersion) { + const r = l; + if ('boolean' != typeof s.strictVersion) { const r = { - params: {}, + params: { + type: 'boolean', + }, }; null === a ? (a = [r]) : a.push(r), l++; } - var f = o === l; - if (((n = n || f), !n)) { - const e = l; - if ('string' != typeof r) { + i = r === l; + } else i = !0; + if (i) + if (void 0 !== s.version) { + let r = s.version; + const e = l, + t = l; + let n = !1; + const o = l; + if (!1 !== r) { const r = { - params: { - type: 'string', - }, + params: {}, }; null === a ? (a = [r]) : a.push(r), l++; } - (f = e === l), (n = n || f); - } - if (n) - (l = t), - null !== a && (t ? (a.length = t) : (a = null)); - else { - const r = { - params: {}, - }; - null === a ? (a = [r]) : a.push(r), l++; - } - i = e === l; - } else i = !0; + var f = o === l; + if (((n = n || f), !n)) { + const e = l; + if ('string' != typeof r) { + const r = { + params: { + type: 'string', + }, + }; + null === a ? (a = [r]) : a.push(r), l++; + } + (f = e === l), (n = n || f); + } + if (n) + (l = t), + null !== a && (t ? (a.length = t) : (a = null)); + else { + const r = { + params: {}, + }; + null === a ? (a = [r]) : a.push(r), l++; + } + i = e === l; + } else i = !0; + if (i) { + if (void 0 !== s.layer) { + let r = s.layer; + const e = l; + if (l === e) + if ('string' == typeof r) { + if (r.length < 1) { + const r = { + params: {}, + }; + null === a ? (a = [r]) : a.push(r), l++; + } + } else { + const r = { + params: { + type: 'string', + }, + }; + null === a ? (a = [r]) : a.push(r), l++; + } + i = e === l; + } else i = !0; + } + } } } } diff --git a/packages/enhanced/src/schemas/sharing/ProviderSharedPlugin.ts b/packages/enhanced/src/schemas/sharing/ProviderSharedPlugin.ts index b2edd1b267..6d4c687f9e 100644 --- a/packages/enhanced/src/schemas/sharing/ProviderSharedPlugin.ts +++ b/packages/enhanced/src/schemas/sharing/ProviderSharedPlugin.ts @@ -1,4 +1,3 @@ -//@ts-nocheck export default { definitions: { Provides: { @@ -86,6 +85,17 @@ export default { }, ], }, + layer: { + description: 'Layer for the shared module.', + type: 'string', + minLength: 1, + }, + request: { + description: + 'The actual request to use for importing the module. If not specified, the property name/key will be used.', + type: 'string', + minLength: 1, + }, }, }, ProvidesItem: { diff --git a/packages/enhanced/test/ConfigTestCases.template.js b/packages/enhanced/test/ConfigTestCases.template.js index 0e70c96831..f404a233d0 100644 --- a/packages/enhanced/test/ConfigTestCases.template.js +++ b/packages/enhanced/test/ConfigTestCases.template.js @@ -62,7 +62,6 @@ const describeCases = (config) => { for (const category of categories) { // eslint-disable-next-line no-loop-func describe(category.name, () => { - // category.tests = [category.tests[1]]; for (const testName of category.tests) { // eslint-disable-next-line no-loop-func describe(testName, function () { diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/.gitignore b/packages/enhanced/test/configCases/sharing/layers-consume-entry/.gitignore new file mode 100644 index 0000000000..724b33e3e6 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/.gitignore @@ -0,0 +1,2 @@ +node_modules/.federation +dist diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/async-boundary.js b/packages/enhanced/test/configCases/sharing/layers-consume-entry/async-boundary.js new file mode 100644 index 0000000000..33145c331a --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/async-boundary.js @@ -0,0 +1 @@ +export * from 'react'; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/index-test.js b/packages/enhanced/test/configCases/sharing/layers-consume-entry/index-test.js new file mode 100644 index 0000000000..9a2597f644 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/index-test.js @@ -0,0 +1,5 @@ +it('should load module with correct layer from entry layer', async () => { + const { version, layer } = await import('./async-boundary'); + expect(version).toBe('1.0.0'); + expect(layer).toBe('module-layer'); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/index.js b/packages/enhanced/test/configCases/sharing/layers-consume-entry/index.js new file mode 100644 index 0000000000..18f91c06af --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/index.js @@ -0,0 +1 @@ +import './index-test'; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/layer-exporter.js b/packages/enhanced/test/configCases/sharing/layers-consume-entry/layer-exporter.js new file mode 100644 index 0000000000..3fcd00e9f4 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/layer-exporter.js @@ -0,0 +1,4 @@ +module.exports = function layerLoader(source) { + // Inject the layer name as an export + return [source, 'export const layer = "module-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/node_modules/react/index.js b/packages/enhanced/test/configCases/sharing/layers-consume-entry/node_modules/react/index.js new file mode 100644 index 0000000000..17f0c46768 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/node_modules/react/index.js @@ -0,0 +1,2 @@ +import { dix } from './index2'; +export const version = "1.0.0"; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/node_modules/react/index2.js b/packages/enhanced/test/configCases/sharing/layers-consume-entry/node_modules/react/index2.js new file mode 100644 index 0000000000..6aa19f3b6b --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/node_modules/react/index2.js @@ -0,0 +1 @@ +export const dix = "1.0.0"; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/package.json b/packages/enhanced/test/configCases/sharing/layers-consume-entry/package.json new file mode 100644 index 0000000000..630a229094 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/package.json @@ -0,0 +1,11 @@ +{ + "name": "layered-react-test", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "webpack --config=webpack.config.js" + }, + "dependencies": { + "react": "1.0.0" + } +} diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/test.config.js b/packages/enhanced/test/configCases/sharing/layers-consume-entry/test.config.js new file mode 100644 index 0000000000..e2c700f280 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/test.config.js @@ -0,0 +1,6 @@ +module.exports = { + layers: true, + findBundle: function () { + return ['bundle0.js']; + }, +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-entry/webpack.config.js b/packages/enhanced/test/configCases/sharing/layers-consume-entry/webpack.config.js new file mode 100644 index 0000000000..30e05dbfbe --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-entry/webpack.config.js @@ -0,0 +1,39 @@ +const { ConsumeSharedPlugin } = require('../../../../dist/src'); +const path = require('path'); + +module.exports = { + mode: 'development', + devtool: false, + entry: { + main: { + import: './index.js', + layer: 'entry-layer', + }, + }, + experiments: { + layers: true, + }, + module: { + rules: [ + { + test: /async-boundary\.js$/, + issuerLayer: 'entry-layer', + use: [ + { + loader: path.resolve(__dirname, './layer-exporter.js'), + }, + ], + }, + ], + }, + plugins: [ + new ConsumeSharedPlugin({ + consumes: { + react: { + singleton: true, + shareKey: 'react', + }, + }, + }), + ], +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/.gitignore b/packages/enhanced/test/configCases/sharing/layers-consume-loader/.gitignore new file mode 100644 index 0000000000..724b33e3e6 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/.gitignore @@ -0,0 +1,2 @@ +node_modules/.federation +dist diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/different-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/different-layer-loader.js new file mode 100644 index 0000000000..d86f06af1f --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/different-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects a different layer name as an export + */ +module.exports = function differentLayerLoader(source) { + return [source, 'export const layer = "differing-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/explicit-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/explicit-layer-loader.js new file mode 100644 index 0000000000..a61ba257f0 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/explicit-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects an explicit layer name as an export + */ +module.exports = function explicitLayerLoader(source) { + return [source, 'export const layer = "explicit-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/multi-pkg-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/multi-pkg-layer-loader.js new file mode 100644 index 0000000000..ad5672f9cd --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/multi-pkg-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects the multi-pkg layer name as an export + */ +module.exports = function multiPkgLayerLoader(source) { + return [source, 'export const layer = "multi-pkg-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/react-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/react-layer-loader.js new file mode 100644 index 0000000000..d4b57f171f --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/loaders/react-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects the React layer name as an export + */ +module.exports = function reactLayerLoader(source) { + return [source, 'export const layer = "react-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/lib2/index.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/lib2/index.js new file mode 100644 index 0000000000..ec16f09935 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/lib2/index.js @@ -0,0 +1,2 @@ +export default "lib2"; +export const version = '1.3.4'; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/multi-pkg/thing1.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/multi-pkg/thing1.js new file mode 100644 index 0000000000..b016221455 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/multi-pkg/thing1.js @@ -0,0 +1 @@ +export const version = '2.0.0' diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/multi-pkg/thing2.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/multi-pkg/thing2.js new file mode 100644 index 0000000000..b016221455 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/multi-pkg/thing2.js @@ -0,0 +1 @@ +export const version = '2.0.0' diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/react/index.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/react/index.js new file mode 100644 index 0000000000..17f0c46768 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/react/index.js @@ -0,0 +1,2 @@ +import { dix } from './index2'; +export const version = "1.0.0"; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/react/index2.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/react/index2.js new file mode 100644 index 0000000000..6aa19f3b6b --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/node_modules/react/index2.js @@ -0,0 +1 @@ +export const dix = "1.0.0"; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/package.json b/packages/enhanced/test/configCases/sharing/layers-consume-loader/package.json new file mode 100644 index 0000000000..630a229094 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/package.json @@ -0,0 +1,11 @@ +{ + "name": "layered-react-test", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "webpack --config=webpack.config.js" + }, + "dependencies": { + "react": "1.0.0" + } +} diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/shared/react-boundary.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/shared/react-boundary.js new file mode 100644 index 0000000000..84ef823acb --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/shared/react-boundary.js @@ -0,0 +1,4 @@ +/** + * Boundary file for React exports + */ +export * from 'react'; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/src/index.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/src/index.js new file mode 100644 index 0000000000..1137086d60 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/src/index.js @@ -0,0 +1,7 @@ +/** + * Main test entry point + */ +import '../tests/unlayered-share.test'; +import '../tests/different-layers.test'; +import '../tests/lib-two.test'; +import '../tests/prefixed-share.test'; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/test.config.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/test.config.js new file mode 100644 index 0000000000..e2c700f280 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/test.config.js @@ -0,0 +1,6 @@ +module.exports = { + layers: true, + findBundle: function () { + return ['bundle0.js']; + }, +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/different-layers.test.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/different-layers.test.js new file mode 100644 index 0000000000..3aa10ede79 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/different-layers.test.js @@ -0,0 +1,14 @@ +/** + * Tests for different layer configurations in shared module consumption + */ +it('should consume shared React module from differing-layer when test is in differing-layer', async () => { + const { version, layer } = await import('react'); + expect(version).toBe('1.0.0'); + expect(layer).toBe('differing-layer'); +}); + +it('should consume React with explicit-layer override when importing index2 from differing-layer', async () => { + const { dix, layer } = await import('react/index2'); + expect(dix).toBe('1.0.0'); + expect(layer).toBe('explicit-layer'); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/lib-two.test.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/lib-two.test.js new file mode 100644 index 0000000000..baec031780 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/lib-two.test.js @@ -0,0 +1,15 @@ +/** + * Tests for lib-two module sharing with lib-two-required-layer configurations + */ + +it('should consume lib-two v1.3.4 from lib-two-required-layer with eager loading', async () => { + const { version, layer } = await import('lib-two'); + expect(version).toBe('1.3.4'); + expect(layer).toBe('differing-layer'); // Using the layer from different-layer-loader +}); + +it('should consume lib-two-layered v1.3.4 from lib-two-required-layer with eager loading', async () => { + const { version, layer } = await import('lib-two-layered'); + expect(version).toBe('1.3.4'); + expect(layer).toBe('differing-layer'); // Using the layer from different-layer-loader +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/prefixed-share.test.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/prefixed-share.test.js new file mode 100644 index 0000000000..813d9e909c --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/prefixed-share.test.js @@ -0,0 +1,14 @@ +/** + * Tests for prefixed module sharing with different layers + */ +it('should consume thing1 from multi-pkg with multi-pkg-layer', async () => { + const { version, layer } = await import('multi-pkg/thing1'); + expect(version).toBe('2.0.0'); + expect(layer).toBe('multi-pkg-layer'); +}); + +it('should consume thing2 from multi-pkg with multi-pkg-layer', async () => { + const { version, layer } = await import('multi-pkg/thing2'); + expect(version).toBe('2.0.0'); + expect(layer).toBe('multi-pkg-layer'); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/unlayered-share.test.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/unlayered-share.test.js new file mode 100644 index 0000000000..7aa4013c75 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/tests/unlayered-share.test.js @@ -0,0 +1,26 @@ +/** + * Tests for unlayered module consumption using default share configurations + */ +it('should consume React boundary module using default share configuration without layers', async () => { + const { version, layer } = await import('../shared/react-boundary'); + expect(version).toBe('1.0.0'); + expect(layer).toBeUndefined(); +}); + +it('should consume lib-two v1.3.4 using default non-eager share configuration', async () => { + const { version, layer } = await import('lib-two'); + expect(version).toBe('1.3.4'); + expect(layer).toBe(undefined); +}); + +it('should consume thing1 from multi-pkg', async () => { + const { version, layer } = await import('multi-pkg/thing1'); + expect(version).toBe('2.0.0'); + expect(layer).toBeUndefined(); +}); + +it('should consume thing2 from multi-pkg', async () => { + const { version, layer } = await import('multi-pkg/thing2'); + expect(version).toBe('2.0.0'); + expect(layer).toBeUndefined(); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-consume-loader/webpack.config.js b/packages/enhanced/test/configCases/sharing/layers-consume-loader/webpack.config.js new file mode 100644 index 0000000000..865256305d --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-consume-loader/webpack.config.js @@ -0,0 +1,143 @@ +const { ConsumeSharedPlugin } = require('../../../../dist/src'); +const WConsumeSharedPlugin = require('webpack/lib/sharing/ConsumeSharedPlugin'); +const path = require('path'); + +module.exports = { + mode: 'development', + devtool: false, + entry: { + main: { + import: './src/index.js', + }, + }, + experiments: { + layers: true, + }, + module: { + rules: [ + { + test: /tests\/different-layers\.test\.js$/, + layer: 'differing-layer', + }, + { + test: /tests\/prefixed-share\.test\.js$/, + layer: 'prefixed-layer', + }, + { + layer: 'multi-pkg-layer', + issuerLayer: 'prefixed-layer', + use: [ + { + loader: path.resolve( + __dirname, + './loaders/multi-pkg-layer-loader.js', + ), + }, + ], + }, + { + layer: 'required-layer', + issuerLayer: 'differing-layer', + exclude: /react\/index2\.js$/, + use: [ + { + loader: path.resolve( + __dirname, + './loaders/different-layer-loader.js', + ), + }, + ], + }, + { + test: /react\/index2\.js$/, + layer: 'explicit-layer', + use: [ + { + loader: path.resolve( + __dirname, + './loaders/explicit-layer-loader.js', + ), + }, + ], + }, + { + test: /tests\/lib-two\.test\.js$/, + layer: 'lib-two-layer', + }, + { + test: /lib2\/index\.js$/, + layer: 'lib-two-required-layer', + issuerLayer: 'lib-two-layer', + use: [ + { + loader: path.resolve( + __dirname, + './loaders/different-layer-loader.js', + ), + }, + ], + }, + ], + }, + plugins: [ + new ConsumeSharedPlugin({ + consumes: { + react: { + singleton: true, + }, + 'explicit-layer-react': { + request: 'react/index2', + import: 'react/index2', + shareKey: 'react', + singleton: true, + issuerLayer: 'differing-layer', + layer: 'explicit-layer', + }, + 'differing-layer-react': { + request: 'react', + import: 'react', + shareKey: 'react', + singleton: true, + issuerLayer: 'differing-layer', + layer: 'differing-layer', + }, + 'lib-two': { + request: 'lib-two', + import: 'lib2', + requiredVersion: '^1.0.0', + version: '1.3.4', + strictVersion: true, + eager: false, + }, + nonsense: { + request: 'lib-two', + import: 'lib2', + shareKey: 'lib-two', + requiredVersion: '^1.0.0', + version: '1.3.4', + strictVersion: true, + eager: true, + issuerLayer: 'lib-two-layer', + layer: 'differing-layer', + }, + 'lib-two-layered': { + import: 'lib2', + shareKey: 'lib-two', + requiredVersion: '^1.0.0', + version: '1.3.4', + strictVersion: true, + eager: true, + issuerLayer: 'lib-two-layer', + layer: 'differing-layer', + }, + multi: { + request: 'multi-pkg/', + requiredVersion: '^2.0.0', + version: '2.0.0', + strictVersion: true, + eager: true, + }, + }, + }), + ], +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/.gitignore b/packages/enhanced/test/configCases/sharing/layers-provides-loader/.gitignore new file mode 100644 index 0000000000..724b33e3e6 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/.gitignore @@ -0,0 +1,2 @@ +node_modules/.federation +dist diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/different-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/different-layer-loader.js new file mode 100644 index 0000000000..d86f06af1f --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/different-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects a different layer name as an export + */ +module.exports = function differentLayerLoader(source) { + return [source, 'export const layer = "differing-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/explicit-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/explicit-layer-loader.js new file mode 100644 index 0000000000..a61ba257f0 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/explicit-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects an explicit layer name as an export + */ +module.exports = function explicitLayerLoader(source) { + return [source, 'export const layer = "explicit-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/multi-pkg-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/multi-pkg-layer-loader.js new file mode 100644 index 0000000000..ad5672f9cd --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/multi-pkg-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects the multi-pkg layer name as an export + */ +module.exports = function multiPkgLayerLoader(source) { + return [source, 'export const layer = "multi-pkg-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/react-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/react-layer-loader.js new file mode 100644 index 0000000000..d4b57f171f --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/loaders/react-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects the React layer name as an export + */ +module.exports = function reactLayerLoader(source) { + return [source, 'export const layer = "react-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/lib2/index.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/lib2/index.js new file mode 100644 index 0000000000..ec16f09935 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/lib2/index.js @@ -0,0 +1,2 @@ +export default "lib2"; +export const version = '1.3.4'; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/multi-pkg/thing1.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/multi-pkg/thing1.js new file mode 100644 index 0000000000..b016221455 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/multi-pkg/thing1.js @@ -0,0 +1 @@ +export const version = '2.0.0' diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/multi-pkg/thing2.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/multi-pkg/thing2.js new file mode 100644 index 0000000000..b016221455 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/multi-pkg/thing2.js @@ -0,0 +1 @@ +export const version = '2.0.0' diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/react/index.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/react/index.js new file mode 100644 index 0000000000..5957b07261 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/react/index.js @@ -0,0 +1 @@ +export const version = "1.0.0"; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/react/index2.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/react/index2.js new file mode 100644 index 0000000000..6aa19f3b6b --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/node_modules/react/index2.js @@ -0,0 +1 @@ +export const dix = "1.0.0"; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/package.json b/packages/enhanced/test/configCases/sharing/layers-provides-loader/package.json new file mode 100644 index 0000000000..630a229094 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/package.json @@ -0,0 +1,11 @@ +{ + "name": "layered-react-test", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "webpack --config=webpack.config.js" + }, + "dependencies": { + "react": "1.0.0" + } +} diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/shared/react-boundary.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/shared/react-boundary.js new file mode 100644 index 0000000000..84ef823acb --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/shared/react-boundary.js @@ -0,0 +1,4 @@ +/** + * Boundary file for React exports + */ +export * from 'react'; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/src/index.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/src/index.js new file mode 100644 index 0000000000..1137086d60 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/src/index.js @@ -0,0 +1,7 @@ +/** + * Main test entry point + */ +import '../tests/unlayered-share.test'; +import '../tests/different-layers.test'; +import '../tests/lib-two.test'; +import '../tests/prefixed-share.test'; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/test.config.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/test.config.js new file mode 100644 index 0000000000..e2c700f280 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/test.config.js @@ -0,0 +1,6 @@ +module.exports = { + layers: true, + findBundle: function () { + return ['bundle0.js']; + }, +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/different-layers.test.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/different-layers.test.js new file mode 100644 index 0000000000..3aa10ede79 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/different-layers.test.js @@ -0,0 +1,14 @@ +/** + * Tests for different layer configurations in shared module consumption + */ +it('should consume shared React module from differing-layer when test is in differing-layer', async () => { + const { version, layer } = await import('react'); + expect(version).toBe('1.0.0'); + expect(layer).toBe('differing-layer'); +}); + +it('should consume React with explicit-layer override when importing index2 from differing-layer', async () => { + const { dix, layer } = await import('react/index2'); + expect(dix).toBe('1.0.0'); + expect(layer).toBe('explicit-layer'); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/lib-two.test.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/lib-two.test.js new file mode 100644 index 0000000000..30296c1579 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/lib-two.test.js @@ -0,0 +1,9 @@ +/** + * Tests for lib-two module sharing with lib-two-required-layer configurations + */ + +it('should consume lib-two v1.3.4 from lib-two-required-layer with eager loading', async () => { + const { version, layer } = await import('lib2'); + expect(version).toBe('1.3.4'); + expect(layer).toBe('differing-layer'); // Using the layer from different-layer-loader +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/prefixed-share.test.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/prefixed-share.test.js new file mode 100644 index 0000000000..813d9e909c --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/prefixed-share.test.js @@ -0,0 +1,14 @@ +/** + * Tests for prefixed module sharing with different layers + */ +it('should consume thing1 from multi-pkg with multi-pkg-layer', async () => { + const { version, layer } = await import('multi-pkg/thing1'); + expect(version).toBe('2.0.0'); + expect(layer).toBe('multi-pkg-layer'); +}); + +it('should consume thing2 from multi-pkg with multi-pkg-layer', async () => { + const { version, layer } = await import('multi-pkg/thing2'); + expect(version).toBe('2.0.0'); + expect(layer).toBe('multi-pkg-layer'); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/unlayered-share.test.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/unlayered-share.test.js new file mode 100644 index 0000000000..f160357501 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/tests/unlayered-share.test.js @@ -0,0 +1,26 @@ +/** + * Tests for unlayered module consumption using default share configurations + */ +it('should consume React boundary module using default share configuration without layers', async () => { + const { version, layer } = await import('../shared/react-boundary'); + expect(version).toBe('1.0.0'); + expect(layer).toBeUndefined(); +}); + +it('should consume lib-two v1.3.4 using default non-eager share configuration', async () => { + const { version, layer } = await import('lib2'); + expect(version).toBe('1.3.4'); + expect(layer).toBe(undefined); +}); + +it('should consume thing1 from multi-pkg', async () => { + const { version, layer } = await import('multi-pkg/thing1'); + expect(version).toBe('2.0.0'); + expect(layer).toBeUndefined(); +}); + +it('should consume thing2 from multi-pkg', async () => { + const { version, layer } = await import('multi-pkg/thing2'); + expect(version).toBe('2.0.0'); + expect(layer).toBeUndefined(); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-provides-loader/webpack.config.js b/packages/enhanced/test/configCases/sharing/layers-provides-loader/webpack.config.js new file mode 100644 index 0000000000..bd6b2ca520 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-provides-loader/webpack.config.js @@ -0,0 +1,154 @@ +const { ProvideSharedPlugin } = require('../../../../dist/src'); +const path = require('path'); + +module.exports = { + mode: 'development', + devtool: false, + entry: { + main: { + import: './src/index.js', + }, + }, + experiments: { + layers: true, + }, + module: { + rules: [ + { + test: /tests\/different-layers\.test\.js$/, + layer: 'differing-layer', + }, + { + test: /tests\/prefixed-share\.test\.js$/, + layer: 'prefixed-layer', + }, + { + layer: 'multi-pkg-layer', + issuerLayer: 'prefixed-layer', + use: [ + { + loader: path.resolve( + __dirname, + './loaders/multi-pkg-layer-loader.js', + ), + }, + ], + }, + { + layer: 'required-layer', + issuerLayer: 'differing-layer', + exclude: /react\/index2\.js$/, + use: [ + { + loader: path.resolve( + __dirname, + './loaders/different-layer-loader.js', + ), + }, + ], + }, + { + test: /react\/index2\.js$/, + layer: 'explicit-layer', + use: [ + { + loader: path.resolve( + __dirname, + './loaders/explicit-layer-loader.js', + ), + }, + ], + }, + { + test: /tests\/lib-two\.test\.js$/, + layer: 'lib-two-layer', + }, + { + test: /lib2\/index\.js$/, + layer: 'lib-two-required-layer', + issuerLayer: 'lib-two-layer', + use: [ + { + loader: path.resolve( + __dirname, + './loaders/different-layer-loader.js', + ), + }, + ], + }, + ], + }, + plugins: [ + new ProvideSharedPlugin({ + shareScope: 'default', + provides: { + react: { + shareKey: 'react', + version: '17.0.2', + singleton: true, + }, + 'explicit-layer-react': { + request: 'react/index2', + shareKey: 'react', + version: '17.0.2', + singleton: true, + layer: 'explicit-layer', + }, + 'differing-layer-react': { + request: 'react', + shareKey: 'react', + version: '17.0.2', + singleton: true, + layer: 'differing-layer', + }, + 'required-layer-react': { + request: 'react', + shareKey: 'react', + version: '17.0.2', + singleton: true, + layer: 'required-layer', + }, + 'lib-two': { + shareKey: 'lib-two', + request: 'lib2', + version: '1.3.4', + requiredVersion: '^1.0.0', + strictVersion: true, + eager: false, + }, + 'lib-two-layered': { + request: 'lib2', + shareKey: 'lib-two', + version: '1.3.4', + requiredVersion: '^1.0.0', + strictVersion: true, + eager: true, + layer: 'lib-two-layer', + }, + 'lib-two-required': { + request: 'lib2', + shareKey: 'lib-two', + version: '1.3.4', + requiredVersion: '^1.0.0', + strictVersion: true, + eager: true, + layer: 'lib-two-required-layer', + }, + 'multi-pkg/': { + version: '2.0.0', + requiredVersion: '^2.0.0', + strictVersion: true, + eager: true, + }, + 'multi-layered': { + request: 'multi-pkg/', + version: '2.0.0', + requiredVersion: '^2.0.0', + strictVersion: true, + eager: true, + layer: 'multi-pkg-layer', + }, + }, + }), + ], +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/.gitignore b/packages/enhanced/test/configCases/sharing/layers-share-plugin/.gitignore new file mode 100644 index 0000000000..724b33e3e6 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/.gitignore @@ -0,0 +1,2 @@ +node_modules/.federation +dist diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/different-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/different-layer-loader.js new file mode 100644 index 0000000000..d86f06af1f --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/different-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects a different layer name as an export + */ +module.exports = function differentLayerLoader(source) { + return [source, 'export const layer = "differing-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/explicit-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/explicit-layer-loader.js new file mode 100644 index 0000000000..a61ba257f0 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/explicit-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects an explicit layer name as an export + */ +module.exports = function explicitLayerLoader(source) { + return [source, 'export const layer = "explicit-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/multi-pkg-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/multi-pkg-layer-loader.js new file mode 100644 index 0000000000..ad5672f9cd --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/multi-pkg-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects the multi-pkg layer name as an export + */ +module.exports = function multiPkgLayerLoader(source) { + return [source, 'export const layer = "multi-pkg-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/react-layer-loader.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/react-layer-loader.js new file mode 100644 index 0000000000..d4b57f171f --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/loaders/react-layer-loader.js @@ -0,0 +1,6 @@ +/** + * Loader that injects the React layer name as an export + */ +module.exports = function reactLayerLoader(source) { + return [source, 'export const layer = "react-layer";'].join('\n'); +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/lib2/index.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/lib2/index.js new file mode 100644 index 0000000000..ec16f09935 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/lib2/index.js @@ -0,0 +1,2 @@ +export default "lib2"; +export const version = '1.3.4'; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/multi-pkg/thing1.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/multi-pkg/thing1.js new file mode 100644 index 0000000000..b016221455 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/multi-pkg/thing1.js @@ -0,0 +1 @@ +export const version = '2.0.0' diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/multi-pkg/thing2.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/multi-pkg/thing2.js new file mode 100644 index 0000000000..b016221455 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/multi-pkg/thing2.js @@ -0,0 +1 @@ +export const version = '2.0.0' diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/react/index.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/react/index.js new file mode 100644 index 0000000000..17f0c46768 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/react/index.js @@ -0,0 +1,2 @@ +import { dix } from './index2'; +export const version = "1.0.0"; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/react/index2.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/react/index2.js new file mode 100644 index 0000000000..6aa19f3b6b --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/node_modules/react/index2.js @@ -0,0 +1 @@ +export const dix = "1.0.0"; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/package.json b/packages/enhanced/test/configCases/sharing/layers-share-plugin/package.json new file mode 100644 index 0000000000..630a229094 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/package.json @@ -0,0 +1,11 @@ +{ + "name": "layered-react-test", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "webpack --config=webpack.config.js" + }, + "dependencies": { + "react": "1.0.0" + } +} diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/shared/react-boundary.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/shared/react-boundary.js new file mode 100644 index 0000000000..84ef823acb --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/shared/react-boundary.js @@ -0,0 +1,4 @@ +/** + * Boundary file for React exports + */ +export * from 'react'; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/src/index.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/src/index.js new file mode 100644 index 0000000000..c2ff0f9769 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/src/index.js @@ -0,0 +1,7 @@ +/** + * Main test entry point + */ +import '../tests/unlayered-share.test'; +// import '../tests/different-layers.test'; +// import '../tests/lib-two.test'; +// import '../tests/prefixed-share.test'; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/test.config.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/test.config.js new file mode 100644 index 0000000000..e2c700f280 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/test.config.js @@ -0,0 +1,6 @@ +module.exports = { + layers: true, + findBundle: function () { + return ['bundle0.js']; + }, +}; diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/different-layers.test.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/different-layers.test.js new file mode 100644 index 0000000000..3aa10ede79 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/different-layers.test.js @@ -0,0 +1,14 @@ +/** + * Tests for different layer configurations in shared module consumption + */ +it('should consume shared React module from differing-layer when test is in differing-layer', async () => { + const { version, layer } = await import('react'); + expect(version).toBe('1.0.0'); + expect(layer).toBe('differing-layer'); +}); + +it('should consume React with explicit-layer override when importing index2 from differing-layer', async () => { + const { dix, layer } = await import('react/index2'); + expect(dix).toBe('1.0.0'); + expect(layer).toBe('explicit-layer'); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/lib-two.test.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/lib-two.test.js new file mode 100644 index 0000000000..baec031780 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/lib-two.test.js @@ -0,0 +1,15 @@ +/** + * Tests for lib-two module sharing with lib-two-required-layer configurations + */ + +it('should consume lib-two v1.3.4 from lib-two-required-layer with eager loading', async () => { + const { version, layer } = await import('lib-two'); + expect(version).toBe('1.3.4'); + expect(layer).toBe('differing-layer'); // Using the layer from different-layer-loader +}); + +it('should consume lib-two-layered v1.3.4 from lib-two-required-layer with eager loading', async () => { + const { version, layer } = await import('lib-two-layered'); + expect(version).toBe('1.3.4'); + expect(layer).toBe('differing-layer'); // Using the layer from different-layer-loader +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/prefixed-share.test.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/prefixed-share.test.js new file mode 100644 index 0000000000..813d9e909c --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/prefixed-share.test.js @@ -0,0 +1,14 @@ +/** + * Tests for prefixed module sharing with different layers + */ +it('should consume thing1 from multi-pkg with multi-pkg-layer', async () => { + const { version, layer } = await import('multi-pkg/thing1'); + expect(version).toBe('2.0.0'); + expect(layer).toBe('multi-pkg-layer'); +}); + +it('should consume thing2 from multi-pkg with multi-pkg-layer', async () => { + const { version, layer } = await import('multi-pkg/thing2'); + expect(version).toBe('2.0.0'); + expect(layer).toBe('multi-pkg-layer'); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/unlayered-share.test.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/unlayered-share.test.js new file mode 100644 index 0000000000..7aa4013c75 --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/tests/unlayered-share.test.js @@ -0,0 +1,26 @@ +/** + * Tests for unlayered module consumption using default share configurations + */ +it('should consume React boundary module using default share configuration without layers', async () => { + const { version, layer } = await import('../shared/react-boundary'); + expect(version).toBe('1.0.0'); + expect(layer).toBeUndefined(); +}); + +it('should consume lib-two v1.3.4 using default non-eager share configuration', async () => { + const { version, layer } = await import('lib-two'); + expect(version).toBe('1.3.4'); + expect(layer).toBe(undefined); +}); + +it('should consume thing1 from multi-pkg', async () => { + const { version, layer } = await import('multi-pkg/thing1'); + expect(version).toBe('2.0.0'); + expect(layer).toBeUndefined(); +}); + +it('should consume thing2 from multi-pkg', async () => { + const { version, layer } = await import('multi-pkg/thing2'); + expect(version).toBe('2.0.0'); + expect(layer).toBeUndefined(); +}); diff --git a/packages/enhanced/test/configCases/sharing/layers-share-plugin/webpack.config.js b/packages/enhanced/test/configCases/sharing/layers-share-plugin/webpack.config.js new file mode 100644 index 0000000000..cd69301d7a --- /dev/null +++ b/packages/enhanced/test/configCases/sharing/layers-share-plugin/webpack.config.js @@ -0,0 +1,143 @@ +const { SharePlugin } = require('../../../../dist/src'); +const path = require('path'); + +module.exports = { + mode: 'development', + devtool: false, + entry: { + main: { + import: './src/index.js', + }, + }, + experiments: { + layers: true, + }, + module: { + rules: [ + { + test: /tests\/different-layers\.test\.js$/, + layer: 'differing-layer', + }, + { + test: /tests\/prefixed-share\.test\.js$/, + layer: 'prefixed-layer', + }, + { + layer: 'multi-pkg-layer', + issuerLayer: 'prefixed-layer', + use: [ + { + loader: path.resolve( + __dirname, + './loaders/multi-pkg-layer-loader.js', + ), + }, + ], + }, + { + layer: 'required-layer', + issuerLayer: 'differing-layer', + exclude: /react\/index2\.js$/, + use: [ + { + loader: path.resolve( + __dirname, + './loaders/different-layer-loader.js', + ), + }, + ], + }, + { + test: /react\/index2\.js$/, + layer: 'explicit-layer', + use: [ + { + loader: path.resolve( + __dirname, + './loaders/explicit-layer-loader.js', + ), + }, + ], + }, + { + test: /tests\/lib-two\.test\.js$/, + layer: 'lib-two-layer', + }, + { + test: /lib2\/index\.js$/, + layer: 'lib-two-required-layer', + issuerLayer: 'lib-two-layer', + use: [ + { + loader: path.resolve( + __dirname, + './loaders/different-layer-loader.js', + ), + }, + ], + }, + ], + }, + plugins: [ + new SharePlugin({ + shareScope: 'default', + shared: { + react: { + singleton: true, + }, + 'explicit-layer-react': { + request: 'react/index2', + import: 'react/index2', + shareKey: 'react', + singleton: true, + issuerLayer: 'differing-layer', + layer: 'explicit-layer', + }, + 'differing-layer-react': { + request: 'react', + import: 'react', + shareKey: 'react', + singleton: true, + issuerLayer: 'differing-layer', + layer: 'differing-layer', + }, + 'lib-two': { + request: 'lib-two', + import: 'lib2', + requiredVersion: '^1.0.0', + version: '1.3.4', + strictVersion: true, + eager: false, + }, + nonsense: { + request: 'lib-two', + import: 'lib2', + shareKey: 'lib-two', + requiredVersion: '^1.0.0', + version: '1.3.4', + strictVersion: true, + eager: true, + issuerLayer: 'lib-two-layer', + layer: 'differing-layer', + }, + 'lib-two-layered': { + import: 'lib2', + shareKey: 'lib-two', + requiredVersion: '^1.0.0', + version: '1.3.4', + strictVersion: true, + eager: true, + issuerLayer: 'lib-two-layer', + layer: 'differing-layer', + }, + multi: { + request: 'multi-pkg/', + requiredVersion: '^2.0.0', + version: '2.0.0', + strictVersion: true, + eager: true, + }, + }, + }), + ], +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 767cc83ff3..0549713081 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -151,7 +151,7 @@ importers: version: 20.1.4(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(nx@20.1.4)(typescript@5.5.2)(verdaccio@5.29.2) '@nx/next': specifier: 20.1.4 - version: 20.1.4(@babel/core@7.25.2)(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(eslint@8.57.1)(html-webpack-plugin@5.6.2)(next@14.2.10)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack@5.93.0) + version: 20.1.4(@babel/core@7.25.2)(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(eslint@8.57.1)(html-webpack-plugin@5.6.2)(next@14.2.10)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack-cli@5.1.4)(webpack@5.93.0) '@nx/node': specifier: 20.1.4 version: 20.1.4(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(eslint@8.57.1)(nx@20.1.4)(typescript@5.5.2)(verdaccio@5.29.2) @@ -163,7 +163,7 @@ importers: version: 20.1.4(@babel/core@7.25.2)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(nx@20.1.4)(typescript@5.5.2)(verdaccio@5.29.2) '@nx/rspack': specifier: 20.1.4 - version: 20.1.4(@module-federation/enhanced@0.6.11)(@module-federation/node@2.5.21)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@swc/helpers@0.5.13)(@types/express@4.17.21)(@types/node@18.16.9)(html-webpack-plugin@5.6.2)(less@4.2.0)(nx@20.1.4)(react-refresh@0.14.2)(typescript@5.5.2)(verdaccio@5.29.2)(webpack@5.93.0) + version: 20.1.4(@module-federation/enhanced@0.6.11)(@module-federation/node@2.5.21)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@swc/helpers@0.5.13)(@types/express@4.17.21)(@types/node@18.16.9)(html-webpack-plugin@5.6.2)(less@4.2.0)(nx@20.1.4)(react-refresh@0.14.2)(typescript@5.5.2)(verdaccio@5.29.2)(webpack-cli@5.1.4)(webpack@5.93.0) '@nx/storybook': specifier: 20.1.4 version: 20.1.4(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(cypress@13.15.0)(eslint@8.57.1)(nx@20.1.4)(typescript@5.5.2)(verdaccio@5.29.2) @@ -175,7 +175,7 @@ importers: version: 20.1.4(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(nx@20.1.4)(typescript@5.5.2)(verdaccio@5.29.2) '@nx/webpack': specifier: 20.1.4 - version: 20.1.4(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6) + version: 20.1.4(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack-cli@5.1.4) '@pmmmwh/react-refresh-webpack-plugin': specifier: 0.5.15 version: 0.5.15(react-refresh@0.14.2)(webpack@5.93.0) @@ -190,7 +190,7 @@ importers: version: 1.0.8(@swc/helpers@0.5.13) '@rspack/dev-server': specifier: ^1.0.9 - version: 1.0.9(@rspack/core@1.0.8)(@types/express@4.17.21)(webpack@5.93.0) + version: 1.0.9(@rspack/core@1.0.8)(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.93.0) '@semantic-release/changelog': specifier: ^6.0.3 version: 6.0.3(semantic-release@24.1.2) @@ -217,7 +217,7 @@ importers: version: 8.3.5(storybook@8.3.5) '@storybook/nextjs': specifier: ^8.3.5 - version: 8.3.5(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.24.0)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(storybook@8.3.5)(typescript@5.5.2)(webpack@5.93.0) + version: 8.3.5(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.24.0)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(storybook@8.3.5)(typescript@5.5.2)(webpack-cli@5.1.4)(webpack@5.93.0) '@storybook/node-logger': specifier: 8.1.11 version: 8.1.11 @@ -487,7 +487,10 @@ importers: version: 7.2.0 webpack: specifier: 5.93.0 - version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.1.4 + version: 5.1.4(webpack@5.93.0) webpack-virtual-modules: specifier: 0.6.2 version: 0.6.2 @@ -767,7 +770,7 @@ importers: version: 2.59.0(typescript@5.0.4) '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/eslint-config': specifier: 2.59.0 version: 2.59.0(typescript@5.0.4) @@ -825,7 +828,7 @@ importers: version: 2.59.0(typescript@5.0.4) '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/eslint-config': specifier: 2.59.0 version: 2.59.0(typescript@5.0.4) @@ -883,7 +886,7 @@ importers: version: 2.59.0(typescript@5.0.4) '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/eslint-config': specifier: 2.59.0 version: 2.59.0(typescript@5.0.4) @@ -941,7 +944,7 @@ importers: version: 2.59.0(typescript@5.0.4) '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/eslint-config': specifier: 2.59.0 version: 2.59.0(typescript@5.0.4) @@ -999,7 +1002,7 @@ importers: version: 2.59.0(typescript@5.0.4) '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/eslint-config': specifier: 2.59.0 version: 2.59.0(typescript@5.0.4) @@ -1057,7 +1060,7 @@ importers: version: 2.59.0(typescript@5.0.4) '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/eslint-config': specifier: 2.59.0 version: 2.59.0(typescript@5.0.4) @@ -1115,7 +1118,7 @@ importers: version: 2.59.0(typescript@5.0.4) '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/eslint-config': specifier: 2.59.0 version: 2.59.0(typescript@5.0.4) @@ -1173,7 +1176,7 @@ importers: version: 2.59.0(typescript@5.0.4) '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/eslint-config': specifier: 2.59.0 version: 2.59.0(typescript@5.0.4) @@ -1437,7 +1440,7 @@ importers: version: 1.0.19 '@rsbuild/plugin-vue': specifier: ^1.0.3 - version: 1.0.3(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.24.0)(vue@3.5.10) + version: 1.0.3(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.24.0)(vue@3.5.10)(webpack-cli@5.1.4) tailwindcss: specifier: ^3.4.3 version: 3.4.3 @@ -1551,7 +1554,7 @@ importers: version: 1.0.19 '@rsbuild/plugin-vue': specifier: ^1.0.3 - version: 1.0.3(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.24.0)(vue@3.5.10) + version: 1.0.3(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.24.0)(vue@3.5.10)(webpack-cli@5.1.4) '@vue/tsconfig': specifier: ^0.5.1 version: 0.5.1 @@ -1642,7 +1645,7 @@ importers: version: 0.1.4(@rsbuild/core@1.1.1)(@rslib/core@0.0.18)(storybook-builder-rsbuild@0.1.5)(typescript@5.5.2) storybook-react-rsbuild: specifier: ^0.1.5 - version: 0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2)(typescript@5.5.2)(webpack@5.93.0) + version: 0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2)(typescript@5.5.2)(webpack-cli@5.1.4)(webpack@5.93.0) apps/runtime-demo/3005-runtime-host: dependencies: @@ -1972,10 +1975,10 @@ importers: version: 2.54.6(@swc/helpers@0.5.13)(typescript@5.0.4) '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/builder-webpack-provider': specifier: 2.46.1 - version: 2.46.1(@rsbuild/core@0.3.11)(@swc/core@1.7.26)(@types/express@4.17.21)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4) + version: 2.46.1(@rsbuild/core@0.3.11)(@swc/core@1.7.26)(@types/express@4.17.21)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/eslint-config': specifier: 2.59.0 version: 2.59.0(typescript@5.0.4) @@ -1984,7 +1987,7 @@ importers: version: 2.60.6(typescript@5.0.4) '@modern-js/storybook': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(@types/react-dom@18.3.0)(@types/react@18.2.79)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack@5.93.0) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(@types/react-dom@18.3.0)(@types/react@18.2.79)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4)(webpack@5.93.0) '@modern-js/tsconfig': specifier: 2.60.6 version: 2.60.6 @@ -2035,7 +2038,7 @@ importers: dependencies: webpack: specifier: ^5.40.0 - version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) packages/data-prefetch: dependencies: @@ -2090,7 +2093,7 @@ importers: version: 29.0.1(@babel/core@7.26.0)(babel-jest@29.7.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.5.2) webpack: specifier: 5.75.0 - version: 5.75.0(@swc/core@1.7.26)(esbuild@0.24.0) + version: 5.75.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) packages/dts-plugin: dependencies: @@ -2208,7 +2211,7 @@ importers: version: 2.1.6(typescript@5.5.2) webpack: specifier: ^5.0.0 - version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) devDependencies: '@module-federation/webpack-bundler-runtime': specifier: workspace:* @@ -2281,7 +2284,7 @@ importers: devDependencies: webpack: specifier: 5.93.0 - version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) packages/manifest: dependencies: @@ -2345,7 +2348,7 @@ importers: devDependencies: '@modern-js/app-tools': specifier: 2.60.6 - version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.5.2) + version: 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.5.2)(webpack-cli@5.1.4) '@modern-js/core': specifier: 2.60.6 version: 2.60.6 @@ -2448,7 +2451,7 @@ importers: version: 5.1.6(@babel/core@7.25.2)(react@18.3.1) webpack: specifier: ^5.40.0 - version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) packages/node: dependencies: @@ -2481,7 +2484,7 @@ importers: version: 18.3.1(react@18.3.1) webpack: specifier: ^5.40.0 - version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) packages/retry-plugin: dependencies: @@ -2574,7 +2577,7 @@ importers: version: 20.1.1(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@20.12.14)(eslint@8.57.1)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack@5.93.0) '@nx/webpack': specifier: '>= 16.0.0' - version: 20.1.1(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.18.20)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6) + version: 20.1.1(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.18.20)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack-cli@5.1.4) devDependencies: '@module-federation/utilities': specifier: workspace:* @@ -2590,7 +2593,7 @@ importers: version: 7.6.20 webpack: specifier: 5.93.0 - version: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + version: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) webpack-virtual-modules: specifier: 0.6.2 version: 0.6.2 @@ -2632,7 +2635,7 @@ importers: version: 1.8.27(typescript@5.5.2) webpack: specifier: ^5.75.0 - version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) packages/utilities: dependencies: @@ -2644,7 +2647,7 @@ importers: version: 18.3.1(react@18.3.1) webpack: specifier: ^5.40.0 - version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + version: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) devDependencies: react: specifier: 18.3.1 @@ -7006,7 +7009,6 @@ packages: /@discoveryjs/json-ext@0.5.7: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - dev: true /@emnapi/core@1.3.0: resolution: {integrity: sha512-9hRqVlhwqBqCoToZ3hFcNVqL+uyHV06Y47ax4UB8L6XgVRqYz7MFnfessojo6+5TK89pKwJnpophwjTMOeKI9Q==} @@ -9249,7 +9251,7 @@ packages: dependencies: '@mdx-js/mdx': 2.3.0 source-map: 0.7.4 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color dev: false @@ -9569,7 +9571,7 @@ packages: '@swc/helpers': 0.5.1 redux: 4.2.1 - /@modern-js/app-tools@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4): + /@modern-js/app-tools@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4): resolution: {integrity: sha512-vbU4XmjlT7rSiotI1zF+esT8NrGt7DSTL4jDRMZeBS7mDOfWNL/DTQMVlgzUw6qZujxCJbtlkPAxLCrnM0jimg==} engines: {node: '>=14.17.6'} hasBin: true @@ -9591,12 +9593,12 @@ packages: '@modern-js/plugin-data-loader': 2.60.6(react-dom@18.3.1)(react@18.3.1) '@modern-js/plugin-i18n': 2.60.6 '@modern-js/prod-server': 2.60.6(react-dom@18.3.1)(react@18.3.1) - '@modern-js/rsbuild-plugin-esbuild': 2.60.6(@swc/core@1.7.26) + '@modern-js/rsbuild-plugin-esbuild': 2.60.6(@swc/core@1.7.26)(webpack-cli@5.1.4) '@modern-js/server': 2.60.6(@babel/traverse@7.25.7)(@rsbuild/core@1.0.19)(react-dom@18.3.1)(react@18.3.1) '@modern-js/server-core': 2.60.6(react-dom@18.3.1)(react@18.3.1) '@modern-js/server-utils': 2.60.6(@babel/traverse@7.25.7)(@rsbuild/core@1.0.19) '@modern-js/types': 2.60.6 - '@modern-js/uni-builder': 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.17.19)(styled-components@6.1.13)(typescript@5.0.4) + '@modern-js/uni-builder': 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.17.19)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/utils': 2.60.6 '@rsbuild/core': 1.0.19 '@rsbuild/plugin-node-polyfill': 1.2.0(@rsbuild/core@1.0.19) @@ -9637,7 +9639,7 @@ packages: - webpack-plugin-serve dev: true - /@modern-js/app-tools@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.5.2): + /@modern-js/app-tools@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.5.2)(webpack-cli@5.1.4): resolution: {integrity: sha512-vbU4XmjlT7rSiotI1zF+esT8NrGt7DSTL4jDRMZeBS7mDOfWNL/DTQMVlgzUw6qZujxCJbtlkPAxLCrnM0jimg==} engines: {node: '>=14.17.6'} hasBin: true @@ -9659,12 +9661,12 @@ packages: '@modern-js/plugin-data-loader': 2.60.6(react-dom@18.3.1)(react@18.3.1) '@modern-js/plugin-i18n': 2.60.6 '@modern-js/prod-server': 2.60.6(react-dom@18.3.1)(react@18.3.1) - '@modern-js/rsbuild-plugin-esbuild': 2.60.6(@swc/core@1.7.26) + '@modern-js/rsbuild-plugin-esbuild': 2.60.6(@swc/core@1.7.26)(webpack-cli@5.1.4) '@modern-js/server': 2.60.6(@babel/traverse@7.25.7)(@rsbuild/core@1.0.19)(react-dom@18.3.1)(react@18.3.1) '@modern-js/server-core': 2.60.6(react-dom@18.3.1)(react@18.3.1) '@modern-js/server-utils': 2.60.6(@babel/traverse@7.25.7)(@rsbuild/core@1.0.19) '@modern-js/types': 2.60.6 - '@modern-js/uni-builder': 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.17.19)(styled-components@6.1.13)(typescript@5.5.2) + '@modern-js/uni-builder': 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.17.19)(styled-components@6.1.13)(typescript@5.5.2)(webpack-cli@5.1.4) '@modern-js/utils': 2.60.6 '@rsbuild/core': 1.0.19 '@rsbuild/plugin-node-polyfill': 1.2.0(@rsbuild/core@1.0.19) @@ -9791,7 +9793,7 @@ packages: - supports-color dev: true - /@modern-js/builder-shared@2.46.1(@rsbuild/core@0.3.11)(@swc/core@1.7.26)(@types/express@4.17.21)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4): + /@modern-js/builder-shared@2.46.1(@rsbuild/core@0.3.11)(@swc/core@1.7.26)(@types/express@4.17.21)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4)(webpack-cli@5.1.4): resolution: {integrity: sha512-nlniPnfeP+rofd1LX2BBX7Vy2pZkxnBnxK7u8rfT/9XUJzHAbjvPxVPyB8IbBIoL9RnLWWQtvTDpAAbz/jRo+Q==} engines: {node: '>=14.0.0'} dependencies: @@ -9812,7 +9814,7 @@ packages: line-diff: 2.1.1 postcss: 8.4.31 source-map: 0.7.4 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) webpack-sources: 3.2.3 zod: 3.23.8 zod-validation-error: 1.2.0(zod@3.23.8) @@ -9841,13 +9843,13 @@ packages: - webpack-cli dev: true - /@modern-js/builder-webpack-provider@2.46.1(@rsbuild/core@0.3.11)(@swc/core@1.7.26)(@types/express@4.17.21)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4): + /@modern-js/builder-webpack-provider@2.46.1(@rsbuild/core@0.3.11)(@swc/core@1.7.26)(@types/express@4.17.21)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4): resolution: {integrity: sha512-a891A2kBN/m7YBrddqanjhD2Im9y/58QrGg9zxDzoAZ8DnKf6AM716FR9K8ZS5kWMndiY7247AG2X1sTQtzQ3w==} engines: {node: '>=14.0.0'} dependencies: '@babel/core': 7.25.8 '@babel/preset-react': 7.25.7(@babel/core@7.25.8) - '@modern-js/builder-shared': 2.46.1(@rsbuild/core@0.3.11)(@swc/core@1.7.26)(@types/express@4.17.21)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) + '@modern-js/builder-shared': 2.46.1(@rsbuild/core@0.3.11)(@swc/core@1.7.26)(@types/express@4.17.21)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/inspector-webpack-plugin': 1.0.6 '@modern-js/server': 2.46.1(@rsbuild/core@0.3.11)(@types/express@4.17.21)(react-dom@18.3.1)(react@18.3.1) '@modern-js/types': 2.46.1 @@ -9867,7 +9869,7 @@ packages: terser-webpack-plugin: 5.3.9(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.95.0) ts-loader: 9.4.4(typescript@5.0.4)(webpack@5.95.0) tsconfig-paths-webpack-plugin: 4.1.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.5.3)(webpack@5.95.0) transitivePeerDependencies: - '@babel/traverse' @@ -10107,12 +10109,12 @@ packages: - react-dom dev: true - /@modern-js/rsbuild-plugin-esbuild@2.60.6(@swc/core@1.7.26): + /@modern-js/rsbuild-plugin-esbuild@2.60.6(@swc/core@1.7.26)(webpack-cli@5.1.4): resolution: {integrity: sha512-o65skhuvIfg5Pbis4PJSdYJ+mQyXs6MRLxDS0V5/6rWlQ7esRz8wna9iJvBkAwEMeXEHgiuv/qtyxRHmH8nO5g==} dependencies: '@swc/helpers': 0.5.13 esbuild: 0.17.19 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - uglify-js @@ -10393,13 +10395,13 @@ packages: - utf-8-validate dev: true - /@modern-js/storybook-builder@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(@types/react-dom@18.3.0)(@types/react@18.2.79)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack@5.93.0): + /@modern-js/storybook-builder@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(@types/react-dom@18.3.0)(@types/react@18.2.79)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-aptCg9RbeEvazw4K7m3+nNsrlxHjwHUONgNRdDe97W6mbrlMu/ADdlfegHWh1qya8ktIvg43uylViP9YXx3YNw==} engines: {node: '>=16.0.0'} dependencies: '@modern-js/core': 2.60.6 '@modern-js/runtime': 2.60.6(@types/react-dom@18.3.0)(@types/react@18.2.79)(react-dom@18.3.1)(react@18.3.1) - '@modern-js/uni-builder': 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.18.20)(styled-components@6.1.13)(typescript@5.0.4) + '@modern-js/uni-builder': 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.18.20)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4) '@modern-js/utils': 2.60.6 '@rsbuild/core': 1.0.19 '@storybook/components': 7.6.20(@types/react-dom@18.3.0)(@types/react@18.2.79)(react-dom@18.3.1)(react@18.3.1) @@ -10449,12 +10451,12 @@ packages: - webpack-sources dev: true - /@modern-js/storybook@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(@types/react-dom@18.3.0)(@types/react@18.2.79)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack@5.93.0): + /@modern-js/storybook@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(@types/react-dom@18.3.0)(@types/react@18.2.79)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-GeRaKxXyuAArnIe2YY5B6VG/WISPxrVY+Rlq+D1GZR868EcBKQ/FNpA0wJDRZRsvRxLWmOyBFHnU13WOegdEpg==} engines: {node: '>=16.0.0'} hasBin: true dependencies: - '@modern-js/storybook-builder': 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(@types/react-dom@18.3.0)(@types/react@18.2.79)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack@5.93.0) + '@modern-js/storybook-builder': 2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(@types/react-dom@18.3.0)(@types/react@18.2.79)(encoding@0.1.13)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4)(webpack@5.93.0) '@modern-js/utils': 2.60.6 '@storybook/react': 7.6.20(encoding@0.1.13)(react-dom@18.3.1)(react@18.3.1)(typescript@5.0.4) storybook: 7.6.20(encoding@0.1.13) @@ -10593,7 +10595,7 @@ packages: /@modern-js/types@2.60.6: resolution: {integrity: sha512-Tjh03D6lW34BmbKm5CV7SgtjSnOIjFQhRh+pExCMpSQUgJOWSooboEVsZQ2f8zdyxijI1MSSGEIt4ak30Vsvng==} - /@modern-js/uni-builder@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.17.19)(styled-components@6.1.13)(typescript@5.0.4): + /@modern-js/uni-builder@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.17.19)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4): resolution: {integrity: sha512-ObkfQcMkAdbohurL+UILJd23Z5B9v9as935tNa2lScx8aOj6EmViOcbLb5kZXnH0EQMrX9FcEOxAy6gp7jS/3g==} dependencies: '@babel/core': 7.26.0 @@ -10616,10 +10618,10 @@ packages: '@rsbuild/plugin-styled-components': 1.0.1(@rsbuild/core@1.0.19) '@rsbuild/plugin-svgr': 1.0.4(@rsbuild/core@1.0.19)(typescript@5.0.4) '@rsbuild/plugin-toml': 1.0.1(@rsbuild/core@1.0.19) - '@rsbuild/plugin-type-check': 1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(typescript@5.0.4) + '@rsbuild/plugin-type-check': 1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(typescript@5.0.4)(webpack-cli@5.1.4) '@rsbuild/plugin-typed-css-modules': 1.0.2(@rsbuild/core@1.0.19) '@rsbuild/plugin-yaml': 1.0.2(@rsbuild/core@1.0.19) - '@rsbuild/webpack': 1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19) + '@rsbuild/webpack': 1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) '@swc/helpers': 0.5.13 autoprefixer: 10.4.20(postcss@8.4.47) babel-loader: 9.1.3(@babel/core@7.26.0)(webpack@5.95.0) @@ -10646,7 +10648,7 @@ packages: terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.17.19)(webpack@5.95.0) ts-deepmerge: 7.0.1 ts-loader: 9.4.4(typescript@5.0.4)(webpack@5.95.0) - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3)(webpack@5.95.0) transitivePeerDependencies: - '@parcel/css' @@ -10670,7 +10672,7 @@ packages: - webpack-plugin-serve dev: true - /@modern-js/uni-builder@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.17.19)(styled-components@6.1.13)(typescript@5.5.2): + /@modern-js/uni-builder@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.17.19)(styled-components@6.1.13)(typescript@5.5.2)(webpack-cli@5.1.4): resolution: {integrity: sha512-ObkfQcMkAdbohurL+UILJd23Z5B9v9as935tNa2lScx8aOj6EmViOcbLb5kZXnH0EQMrX9FcEOxAy6gp7jS/3g==} dependencies: '@babel/core': 7.26.0 @@ -10693,10 +10695,10 @@ packages: '@rsbuild/plugin-styled-components': 1.0.1(@rsbuild/core@1.0.19) '@rsbuild/plugin-svgr': 1.0.4(@rsbuild/core@1.0.19)(typescript@5.5.2) '@rsbuild/plugin-toml': 1.0.1(@rsbuild/core@1.0.19) - '@rsbuild/plugin-type-check': 1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(typescript@5.5.2) + '@rsbuild/plugin-type-check': 1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(typescript@5.5.2)(webpack-cli@5.1.4) '@rsbuild/plugin-typed-css-modules': 1.0.2(@rsbuild/core@1.0.19) '@rsbuild/plugin-yaml': 1.0.2(@rsbuild/core@1.0.19) - '@rsbuild/webpack': 1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19) + '@rsbuild/webpack': 1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) '@swc/helpers': 0.5.13 autoprefixer: 10.4.20(postcss@8.4.47) babel-loader: 9.1.3(@babel/core@7.26.0)(webpack@5.95.0) @@ -10723,7 +10725,7 @@ packages: terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.17.19)(webpack@5.95.0) ts-deepmerge: 7.0.1 ts-loader: 9.4.4(typescript@5.5.2)(webpack@5.95.0) - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3)(webpack@5.95.0) transitivePeerDependencies: - '@parcel/css' @@ -10747,7 +10749,7 @@ packages: - webpack-plugin-serve dev: true - /@modern-js/uni-builder@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.18.20)(styled-components@6.1.13)(typescript@5.0.4): + /@modern-js/uni-builder@2.60.6(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.18.20)(styled-components@6.1.13)(typescript@5.0.4)(webpack-cli@5.1.4): resolution: {integrity: sha512-ObkfQcMkAdbohurL+UILJd23Z5B9v9as935tNa2lScx8aOj6EmViOcbLb5kZXnH0EQMrX9FcEOxAy6gp7jS/3g==} dependencies: '@babel/core': 7.26.0 @@ -10770,10 +10772,10 @@ packages: '@rsbuild/plugin-styled-components': 1.0.1(@rsbuild/core@1.0.19) '@rsbuild/plugin-svgr': 1.0.4(@rsbuild/core@1.0.19)(typescript@5.0.4) '@rsbuild/plugin-toml': 1.0.1(@rsbuild/core@1.0.19) - '@rsbuild/plugin-type-check': 1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.18.20)(typescript@5.0.4) + '@rsbuild/plugin-type-check': 1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.18.20)(typescript@5.0.4)(webpack-cli@5.1.4) '@rsbuild/plugin-typed-css-modules': 1.0.2(@rsbuild/core@1.0.19) '@rsbuild/plugin-yaml': 1.0.2(@rsbuild/core@1.0.19) - '@rsbuild/webpack': 1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.18.20) + '@rsbuild/webpack': 1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) '@swc/helpers': 0.5.13 autoprefixer: 10.4.20(postcss@8.4.47) babel-loader: 9.1.3(@babel/core@7.26.0)(webpack@5.95.0) @@ -10800,7 +10802,7 @@ packages: terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.95.0) ts-deepmerge: 7.0.1 ts-loader: 9.4.4(typescript@5.0.4)(webpack@5.95.0) - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3)(webpack@5.95.0) transitivePeerDependencies: - '@parcel/css' @@ -11091,7 +11093,7 @@ packages: typescript: 5.5.2 upath: 2.0.1 vue-tsc: 2.1.6(typescript@5.5.2) - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - bufferutil - debug @@ -11126,7 +11128,7 @@ packages: typescript: 5.5.2 upath: 2.0.1 vue-tsc: 2.1.6(typescript@5.5.2) - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: - bufferutil - debug @@ -11162,7 +11164,7 @@ packages: typescript: 5.5.2 upath: 2.0.1 vue-tsc: 2.1.6(typescript@5.5.2) - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - bufferutil - debug @@ -11198,7 +11200,7 @@ packages: typescript: 5.5.2 upath: 2.0.1 vue-tsc: 2.1.6(typescript@5.5.2) - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - bufferutil - debug @@ -11339,7 +11341,7 @@ packages: node-fetch: 2.7.0(encoding@0.1.13) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - bufferutil - debug @@ -11621,7 +11623,7 @@ packages: next: 14.2.10(@babel/core@7.25.2)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /@module-federation/webpack-bundler-runtime@0.0.8: @@ -12560,7 +12562,7 @@ packages: - typescript dev: true - /@nx/next@20.1.4(@babel/core@7.25.2)(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(eslint@8.57.1)(html-webpack-plugin@5.6.2)(next@14.2.10)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack@5.93.0): + /@nx/next@20.1.4(@babel/core@7.25.2)(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(eslint@8.57.1)(html-webpack-plugin@5.6.2)(next@14.2.10)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-wayIUtGgMNIt3zZZ6rCitLOpMB1f1IOr9eW9hIwJwf/AquOgcELM30beE6K5kHqtGHYwPNo+HRMVhxR5RrylSA==} peerDependencies: next: '>=14.0.0' @@ -12571,7 +12573,7 @@ packages: '@nx/js': 20.1.4(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(nx@20.1.4)(typescript@5.5.2)(verdaccio@5.29.2) '@nx/react': 20.1.4(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(eslint@8.57.1)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack@5.93.0) '@nx/web': 20.1.4(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(nx@20.1.4)(typescript@5.5.2)(verdaccio@5.29.2) - '@nx/webpack': 20.1.4(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6) + '@nx/webpack': 20.1.4(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack-cli@5.1.4) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.5.2) '@svgr/webpack': 8.1.0(typescript@5.5.2) copy-webpack-plugin: 10.2.4(webpack@5.93.0) @@ -12922,7 +12924,7 @@ packages: - verdaccio dev: true - /@nx/rspack@20.1.4(@module-federation/enhanced@0.6.11)(@module-federation/node@2.5.21)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@swc/helpers@0.5.13)(@types/express@4.17.21)(@types/node@18.16.9)(html-webpack-plugin@5.6.2)(less@4.2.0)(nx@20.1.4)(react-refresh@0.14.2)(typescript@5.5.2)(verdaccio@5.29.2)(webpack@5.93.0): + /@nx/rspack@20.1.4(@module-federation/enhanced@0.6.11)(@module-federation/node@2.5.21)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@swc/helpers@0.5.13)(@types/express@4.17.21)(@types/node@18.16.9)(html-webpack-plugin@5.6.2)(less@4.2.0)(nx@20.1.4)(react-refresh@0.14.2)(typescript@5.5.2)(verdaccio@5.29.2)(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-s1CJLfAsR6Z47LIqBNkL8/SL8VaDBqdUZF0u6WGJkS2IacpSh2IXadEXxh5wGVA+19sukwWw/IROkVXwLCf1yw==} peerDependencies: '@module-federation/enhanced': ~0.6.0 @@ -12935,7 +12937,7 @@ packages: '@nx/web': 20.1.4(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(nx@20.1.4)(typescript@5.5.2)(verdaccio@5.29.2) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.5.2) '@rspack/core': 1.1.1(@swc/helpers@0.5.13) - '@rspack/dev-server': 1.0.9(@rspack/core@1.1.1)(@types/express@4.17.21)(webpack@5.93.0) + '@rspack/dev-server': 1.0.9(@rspack/core@1.1.1)(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.93.0) '@rspack/plugin-react-refresh': 1.0.0(react-refresh@0.14.2) autoprefixer: 10.4.20(postcss@8.4.47) chalk: 4.1.2 @@ -13078,7 +13080,7 @@ packages: - verdaccio dev: true - /@nx/webpack@20.1.1(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.18.20)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6): + /@nx/webpack@20.1.1(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.18.20)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack-cli@5.1.4): resolution: {integrity: sha512-ucxJn9q/KboQ4ywtODmOYD9ac9FczdLd/1WDAPctxERuq71bfkwGmZGUzH3fDqolinek0kAIhn6ci3ww2/Qs1A==} dependencies: '@babel/core': 7.26.0 @@ -13118,8 +13120,8 @@ packages: ts-loader: 9.5.1(typescript@5.5.2)(webpack@5.93.0) tsconfig-paths-webpack-plugin: 4.0.0 tslib: 2.6.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) - webpack-dev-server: 5.1.0(webpack@5.93.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.93.0) webpack-node-externals: 3.0.0 webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.2)(webpack@5.93.0) transitivePeerDependencies: @@ -13154,7 +13156,7 @@ packages: - webpack-cli dev: false - /@nx/webpack@20.1.4(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6): + /@nx/webpack@20.1.4(@rspack/core@1.0.8)(@swc-node/register@1.10.9)(@swc/core@1.7.26)(@types/node@18.16.9)(esbuild@0.24.0)(html-webpack-plugin@5.6.2)(nx@20.1.4)(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.2)(verdaccio@5.29.2)(vue-tsc@2.1.6)(webpack-cli@5.1.4): resolution: {integrity: sha512-Gl3bQlyCKU/T8pPSrdGzi7jNVC9pasPLVhEDfdOWMbAWBg0pTM20uDyVBPqfCZMZLHQBV1y5eHJx4CGMStX7hw==} dependencies: '@babel/core': 7.26.0 @@ -13194,8 +13196,8 @@ packages: ts-loader: 9.5.1(typescript@5.5.2)(webpack@5.93.0) tsconfig-paths-webpack-plugin: 4.0.0 tslib: 2.6.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) - webpack-dev-server: 5.1.0(webpack@5.93.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.93.0) webpack-node-externals: 3.0.0 webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.2)(webpack@5.93.0) transitivePeerDependencies: @@ -13507,7 +13509,7 @@ packages: react-refresh: 0.14.2 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(webpack@5.93.0): @@ -13544,7 +13546,7 @@ packages: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(webpack@5.95.0): @@ -13581,7 +13583,7 @@ packages: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /@pnpm/config.env-replace@1.1.0: @@ -15571,7 +15573,7 @@ packages: toml: 3.0.0 dev: true - /@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(typescript@5.0.4): + /@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(typescript@5.0.4)(webpack-cli@5.1.4): resolution: {integrity: sha512-BahXAJNq4kWtL2dINUlrOL9UCN1t8c/qf5RW8JXx2HSSasfKPJGJ1BVfieMcIaFa/t8/QdafcwoxY1WKPTlSMg==} peerDependencies: '@rsbuild/core': 1.x || ^1.0.1-beta.0 @@ -15584,7 +15586,7 @@ packages: fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.0.4)(webpack@5.95.0) json5: 2.2.3 reduce-configs: 1.0.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -15593,7 +15595,7 @@ packages: - webpack-cli dev: true - /@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(typescript@5.5.2): + /@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(typescript@5.5.2)(webpack-cli@5.1.4): resolution: {integrity: sha512-BahXAJNq4kWtL2dINUlrOL9UCN1t8c/qf5RW8JXx2HSSasfKPJGJ1BVfieMcIaFa/t8/QdafcwoxY1WKPTlSMg==} peerDependencies: '@rsbuild/core': 1.x || ^1.0.1-beta.0 @@ -15606,7 +15608,7 @@ packages: fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.5.2)(webpack@5.95.0) json5: 2.2.3 reduce-configs: 1.0.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -15615,7 +15617,7 @@ packages: - webpack-cli dev: true - /@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.18.20)(typescript@5.0.4): + /@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.18.20)(typescript@5.0.4)(webpack-cli@5.1.4): resolution: {integrity: sha512-BahXAJNq4kWtL2dINUlrOL9UCN1t8c/qf5RW8JXx2HSSasfKPJGJ1BVfieMcIaFa/t8/QdafcwoxY1WKPTlSMg==} peerDependencies: '@rsbuild/core': 1.x || ^1.0.1-beta.0 @@ -15628,7 +15630,7 @@ packages: fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.0.4)(webpack@5.95.0) json5: 2.2.3 reduce-configs: 1.0.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -15637,7 +15639,7 @@ packages: - webpack-cli dev: true - /@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(typescript@5.5.2): + /@rsbuild/plugin-type-check@1.0.1(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(typescript@5.5.2)(webpack-cli@5.1.4): resolution: {integrity: sha512-BahXAJNq4kWtL2dINUlrOL9UCN1t8c/qf5RW8JXx2HSSasfKPJGJ1BVfieMcIaFa/t8/QdafcwoxY1WKPTlSMg==} peerDependencies: '@rsbuild/core': 1.x || ^1.0.1-beta.0 @@ -15650,7 +15652,7 @@ packages: fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.5.2)(webpack@5.95.0) json5: 2.2.3 reduce-configs: 1.0.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -15670,14 +15672,14 @@ packages: '@rsbuild/core': 1.0.19 dev: true - /@rsbuild/plugin-vue@1.0.3(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.24.0)(vue@3.5.10): + /@rsbuild/plugin-vue@1.0.3(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.24.0)(vue@3.5.10)(webpack-cli@5.1.4): resolution: {integrity: sha512-+g6PaZUQDNBDhM5lx1YuXqNHDdZGBnPwIi1DLMqNLwqKeG4wdAggT4oOj2LjXXyMIvlMrWz0No5J8QroZ3WkEA==} peerDependencies: '@rsbuild/core': 1.x dependencies: '@rsbuild/core': 1.0.19 vue-loader: 17.4.2(vue@3.5.10)(webpack@5.95.0) - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - '@vue/compiler-sfc' @@ -15746,7 +15748,7 @@ packages: - '@swc/helpers' dev: true - /@rsbuild/webpack@1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19): + /@rsbuild/webpack@1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4): resolution: {integrity: sha512-2x/QqNUEKEt7eao8FnYwlrwQUYSbuM9ihiI1RpSuKbi/ZZuHxrFA3fwnO7k1v/Xbs5mCQR+ni+da5dakypFktg==} peerDependencies: '@rsbuild/core': 1.x @@ -15757,7 +15759,7 @@ packages: picocolors: 1.1.1 reduce-configs: 1.0.0 tsconfig-paths-webpack-plugin: 4.1.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -15765,7 +15767,7 @@ packages: - webpack-cli dev: true - /@rsbuild/webpack@1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.18.20): + /@rsbuild/webpack@1.0.11(@rsbuild/core@1.0.19)(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4): resolution: {integrity: sha512-2x/QqNUEKEt7eao8FnYwlrwQUYSbuM9ihiI1RpSuKbi/ZZuHxrFA3fwnO7k1v/Xbs5mCQR+ni+da5dakypFktg==} peerDependencies: '@rsbuild/core': 1.x @@ -15776,7 +15778,7 @@ packages: picocolors: 1.1.1 reduce-configs: 1.0.0 tsconfig-paths-webpack-plugin: 4.1.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -16548,7 +16550,7 @@ packages: caniuse-lite: 1.0.30001668 dev: true - /@rspack/dev-server@1.0.9(@rspack/core@1.0.8)(@types/express@4.17.21)(webpack@5.93.0): + /@rspack/dev-server@1.0.9(@rspack/core@1.0.8)(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-VF+apLFfl5LWIhVbfkJ5ccU0Atl5mi+sGTkx+XtE1tbUmMJkde0nm/4+eaQCud7oGl+ZCzt4kW14uuzLSiEGDw==} peerDependencies: '@rspack/core': '*' @@ -16561,7 +16563,7 @@ packages: mime-types: 2.1.35 p-retry: 4.6.2 webpack-dev-middleware: 7.4.2(webpack@5.93.0) - webpack-dev-server: 5.0.4(webpack@5.93.0) + webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.93.0) ws: 8.18.0 transitivePeerDependencies: - '@types/express' @@ -16573,7 +16575,7 @@ packages: - webpack-cli dev: true - /@rspack/dev-server@1.0.9(@rspack/core@1.1.1)(@types/express@4.17.21)(webpack@5.93.0): + /@rspack/dev-server@1.0.9(@rspack/core@1.1.1)(@types/express@4.17.21)(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-VF+apLFfl5LWIhVbfkJ5ccU0Atl5mi+sGTkx+XtE1tbUmMJkde0nm/4+eaQCud7oGl+ZCzt4kW14uuzLSiEGDw==} peerDependencies: '@rspack/core': '*' @@ -16586,7 +16588,7 @@ packages: mime-types: 2.1.35 p-retry: 4.6.2 webpack-dev-middleware: 7.4.2(webpack@5.93.0) - webpack-dev-server: 5.0.4(webpack@5.93.0) + webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.93.0) ws: 8.18.0 transitivePeerDependencies: - '@types/express' @@ -17573,7 +17575,7 @@ packages: - supports-color dev: true - /@storybook/builder-webpack5@8.3.5(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.24.0)(storybook@8.3.5)(typescript@5.5.2): + /@storybook/builder-webpack5@8.3.5(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.24.0)(storybook@8.3.5)(typescript@5.5.2)(webpack-cli@5.1.4): resolution: {integrity: sha512-rhmfdiSlDn3Arki7IMYk11PO29rYuYM4LZ8GlNqREU7VUl/8Vngo/jFIa4pKaIns3ql1RrwzO1wm9JvuL/4ydA==} peerDependencies: storybook: ^8.3.5 @@ -17607,7 +17609,7 @@ packages: url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) webpack-dev-middleware: 6.1.3(webpack@5.93.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 @@ -18152,7 +18154,7 @@ packages: resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==} dev: true - /@storybook/nextjs@8.3.5(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.24.0)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(storybook@8.3.5)(typescript@5.5.2)(webpack@5.93.0): + /@storybook/nextjs@8.3.5(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.24.0)(next@14.2.10)(react-dom@18.3.1)(react@18.3.1)(storybook@8.3.5)(typescript@5.5.2)(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-YMjDSVd7BHIvj6oLMEFMKRvfZ83INxZinxtrx4ZZXGe+5iP8j7rcV7D67lxKQKWNy36d9Foj4pjT85yYj5s+ZQ==} engines: {node: '>=18.0.0'} peerDependencies: @@ -18182,8 +18184,8 @@ packages: '@babel/preset-typescript': 7.26.0(@babel/core@7.25.7) '@babel/runtime': 7.25.7 '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(webpack@5.93.0) - '@storybook/builder-webpack5': 8.3.5(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.24.0)(storybook@8.3.5)(typescript@5.5.2) - '@storybook/preset-react-webpack': 8.3.5(@storybook/test@8.3.5)(@swc/core@1.7.26)(esbuild@0.24.0)(react-dom@18.3.1)(react@18.3.1)(storybook@8.3.5)(typescript@5.5.2) + '@storybook/builder-webpack5': 8.3.5(@rspack/core@1.0.8)(@swc/core@1.7.26)(esbuild@0.24.0)(storybook@8.3.5)(typescript@5.5.2)(webpack-cli@5.1.4) + '@storybook/preset-react-webpack': 8.3.5(@storybook/test@8.3.5)(@swc/core@1.7.26)(esbuild@0.24.0)(react-dom@18.3.1)(react@18.3.1)(storybook@8.3.5)(typescript@5.5.2)(webpack-cli@5.1.4) '@storybook/react': 8.3.5(@storybook/test@8.3.5)(react-dom@18.3.1)(react@18.3.1)(storybook@8.3.5)(typescript@5.5.2) '@storybook/test': 8.3.5(storybook@8.3.5) '@types/node': 22.7.4 @@ -18212,7 +18214,7 @@ packages: tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.1.0 typescript: 5.5.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) optionalDependencies: sharp: 0.33.5 transitivePeerDependencies: @@ -18243,7 +18245,7 @@ packages: resolution: {integrity: sha512-wdzFo7B2naGhS52L3n1qBkt5BfvQjs8uax6B741yKRpiGgeAN8nz8+qelkD25MbSukxvbPgDot7WJvsMU/iCzg==} dev: true - /@storybook/preset-react-webpack@8.3.5(@storybook/test@8.3.5)(@swc/core@1.7.26)(esbuild@0.24.0)(react-dom@18.3.1)(react@18.3.1)(storybook@8.3.5)(typescript@5.5.2): + /@storybook/preset-react-webpack@8.3.5(@storybook/test@8.3.5)(@swc/core@1.7.26)(esbuild@0.24.0)(react-dom@18.3.1)(react@18.3.1)(storybook@8.3.5)(typescript@5.5.2)(webpack-cli@5.1.4): resolution: {integrity: sha512-laS9CiZrZ4CSnBTBfkBba3hmlDhzcjIfCvx8/rk3SZ+zh93NpqXixzRt6m0UH2po63dpdu21nXrsW5Cfs88Ypw==} engines: {node: '>=18.0.0'} peerDependencies: @@ -18271,7 +18273,7 @@ packages: storybook: 8.3.5 tsconfig-paths: 4.2.0 typescript: 5.5.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - '@storybook/test' - '@swc/core' @@ -18334,7 +18336,7 @@ packages: react-docgen-typescript: 2.2.2(typescript@5.5.2) tslib: 2.6.3 typescript: 5.5.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color dev: true @@ -18353,7 +18355,7 @@ packages: react-docgen-typescript: 2.2.2(typescript@5.0.4) tslib: 2.6.3 typescript: 5.0.4 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color dev: true @@ -18372,7 +18374,7 @@ packages: react-docgen-typescript: 2.2.2(typescript@5.5.2) tslib: 2.6.3 typescript: 5.5.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - supports-color dev: true @@ -20736,7 +20738,7 @@ packages: '@babel/core': 7.25.2 '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.2) - vite: 5.2.14(@types/node@18.16.9)(less@4.2.0)(stylus@0.64.0) + vite: 5.2.14(@types/node@16.11.68)(less@4.2.0)(stylus@0.64.0) vue: 3.5.10(typescript@5.5.2) transitivePeerDependencies: - supports-color @@ -20749,7 +20751,7 @@ packages: vite: ^5.0.0 vue: ^3.2.25 dependencies: - vite: 5.2.14(@types/node@18.16.9)(less@4.2.0)(stylus@0.64.0) + vite: 5.2.14(@types/node@16.11.68)(less@4.2.0)(stylus@0.64.0) vue: 3.5.10(typescript@5.5.2) dev: true @@ -21364,6 +21366,40 @@ packages: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 + /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.93.0): + resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + dependencies: + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.93.0) + + /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.93.0): + resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + dependencies: + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.93.0) + + /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.93.0): + resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.93.0) + /@xmldom/xmldom@0.8.10: resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} @@ -22372,7 +22408,7 @@ packages: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.93.0): @@ -22385,7 +22421,7 @@ packages: '@babel/core': 7.25.2 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.93.0): @@ -22398,7 +22434,7 @@ packages: '@babel/core': 7.25.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.93.0): @@ -22411,7 +22447,7 @@ packages: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /babel-plugin-apply-mdx-type-prop@1.6.22(@babel/core@7.12.9): resolution: {integrity: sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==} @@ -23609,7 +23645,6 @@ packages: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - dev: true /clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} @@ -23743,7 +23778,6 @@ packages: /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} - dev: true /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -24076,7 +24110,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /copy-webpack-plugin@11.0.0(webpack@5.93.0): resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} @@ -24090,7 +24124,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /copy-webpack-plugin@11.0.0(webpack@5.95.0): @@ -24105,7 +24139,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /core-js-compat@3.38.1: @@ -24421,7 +24455,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 semver: 7.6.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /css-loader@6.11.0(@rspack/core@1.1.1)(webpack@5.93.0): resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} @@ -24444,7 +24478,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 semver: 7.6.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /css-minimizer-webpack-plugin@5.0.1(esbuild@0.17.19)(webpack@5.95.0): @@ -24479,7 +24513,7 @@ packages: postcss: 8.4.47 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /css-minimizer-webpack-plugin@5.0.1(esbuild@0.18.20)(webpack@5.93.0): @@ -24514,7 +24548,7 @@ packages: postcss: 8.4.47 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /css-minimizer-webpack-plugin@5.0.1(esbuild@0.18.20)(webpack@5.95.0): resolution: {integrity: sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==} @@ -24548,7 +24582,7 @@ packages: postcss: 8.4.47 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /css-minimizer-webpack-plugin@5.0.1(esbuild@0.24.0)(webpack@5.93.0): @@ -24583,7 +24617,7 @@ packages: postcss: 8.4.47 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /css-select@4.3.0: @@ -25789,7 +25823,6 @@ packages: resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} engines: {node: '>=4'} hasBin: true - dev: true /environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} @@ -27498,6 +27531,10 @@ packages: /fast-uri@3.0.2: resolution: {integrity: sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==} + /fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + /fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: @@ -27609,7 +27646,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) /file-system-cache@2.3.0: resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} @@ -27954,7 +27991,7 @@ packages: semver: 7.6.3 tapable: 2.2.1 typescript: 5.5.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.0.4)(webpack@5.93.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} @@ -27976,7 +28013,7 @@ packages: semver: 7.6.3 tapable: 2.2.1 typescript: 5.0.4 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.5.2)(webpack@5.93.0): @@ -27999,7 +28036,7 @@ packages: semver: 7.6.3 tapable: 2.2.1 typescript: 5.5.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /fork-ts-checker-webpack-plugin@9.0.2(typescript@5.0.4)(webpack@5.95.0): @@ -28022,7 +28059,7 @@ packages: semver: 7.6.3 tapable: 2.2.1 typescript: 5.0.4 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /fork-ts-checker-webpack-plugin@9.0.2(typescript@5.5.2)(webpack@5.95.0): @@ -28045,7 +28082,7 @@ packages: semver: 7.6.3 tapable: 2.2.1 typescript: 5.5.2 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /form-data-encoder@1.7.2: @@ -29306,7 +29343,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /html-webpack-plugin@5.6.2(@rspack/core@1.0.8)(webpack@5.93.0): @@ -29327,7 +29364,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) /html-webpack-plugin@5.6.3(@rspack/core@1.0.8)(webpack@5.95.0): resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==} @@ -29347,7 +29384,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /htmlparser2@6.1.0: @@ -29764,7 +29801,6 @@ packages: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true /import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} @@ -29886,6 +29922,10 @@ packages: side-channel: 1.0.6 dev: true + /interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + /intersection-observer@0.12.2: resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} dev: false @@ -30286,7 +30326,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 - dev: true /is-plain-object@3.0.1: resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==} @@ -30488,7 +30527,6 @@ packages: /isobject@3.0.1: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - dev: true /isomorphic-rslog@0.0.6: resolution: {integrity: sha512-HM0q6XqQ93psDlqvuViNs/Ea3hAyGDkIdVAHlrEocjjAwGrs1fZ+EdQjS9eUPacnYB7Y8SoDdSY3H8p3ce205A==} @@ -31691,7 +31729,7 @@ packages: dependencies: klona: 2.0.6 less: 4.1.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /less-loader@11.1.0(less@4.2.0)(webpack@5.93.0): resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} @@ -31702,7 +31740,7 @@ packages: dependencies: klona: 2.0.6 less: 4.2.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /less@4.1.3: @@ -31766,7 +31804,7 @@ packages: webpack-sources: optional: true dependencies: - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) webpack-sources: 3.2.3 /lilconfig@2.1.0: @@ -33051,7 +33089,7 @@ packages: webpack: ^5.0.0 dependencies: schema-utils: 4.2.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /mini-css-extract-plugin@2.7.6(webpack@5.95.0): resolution: {integrity: sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==} @@ -33060,7 +33098,7 @@ packages: webpack: ^5.0.0 dependencies: schema-utils: 4.2.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /mini-css-extract-plugin@2.9.1(webpack@5.95.0): @@ -33071,7 +33109,7 @@ packages: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /mini-svg-data-uri@1.4.4: @@ -33597,7 +33635,7 @@ packages: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /node-releases@2.0.18: @@ -34880,7 +34918,6 @@ packages: engines: {node: '>=8'} dependencies: find-up: 4.1.0 - dev: true /pkg-dir@5.0.0: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} @@ -35317,7 +35354,7 @@ packages: klona: 2.0.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /postcss-loader@8.1.1(@rspack/core@1.0.8)(postcss@8.4.47)(typescript@5.5.2)(webpack@5.93.0): resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} @@ -35337,7 +35374,7 @@ packages: jiti: 1.21.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - typescript dev: true @@ -35360,7 +35397,7 @@ packages: jiti: 1.21.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) transitivePeerDependencies: - typescript dev: true @@ -38153,6 +38190,12 @@ packages: tiny-invariant: 1.3.3 tslib: 2.6.3 + /rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + dependencies: + resolve: 1.22.8 + /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -38518,7 +38561,6 @@ packages: engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 - dev: true /resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} @@ -39400,7 +39442,7 @@ packages: klona: 2.0.6 neo-async: 2.6.2 sass: 1.79.4 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /sass-loader@13.3.3(webpack@5.93.0): resolution: {integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==} @@ -39422,7 +39464,7 @@ packages: optional: true dependencies: neo-async: 2.6.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /sass@1.79.4: @@ -39762,7 +39804,6 @@ packages: engines: {node: '>=8'} dependencies: kind-of: 6.0.3 - dev: true /shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} @@ -40011,7 +40052,7 @@ packages: dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} @@ -40242,11 +40283,11 @@ packages: dependencies: '@rsbuild/core': 1.1.1 '@rslib/core': 0.0.18(typescript@5.5.2) - storybook-builder-rsbuild: 0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(storybook@8.4.2)(typescript@5.5.2) + storybook-builder-rsbuild: 0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(storybook@8.4.2)(typescript@5.5.2)(webpack-cli@5.1.4) typescript: 5.5.2 dev: true - /storybook-builder-rsbuild@0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(storybook@8.4.2)(typescript@5.5.2): + /storybook-builder-rsbuild@0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(storybook@8.4.2)(typescript@5.5.2)(webpack-cli@5.1.4): resolution: {integrity: sha512-g8/pVX+2YixHpWt/Q8dQWtkuKpWKxm1i9h+ihTFPO5LQWc3HvlF6PAXccPvedicLizGR2xTaI/RcJkE+2bYXqA==} peerDependencies: '@rsbuild/core': ^1.0.1 @@ -40257,7 +40298,7 @@ packages: optional: true dependencies: '@rsbuild/core': 1.1.1 - '@rsbuild/plugin-type-check': 1.0.1(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(typescript@5.5.2) + '@rsbuild/plugin-type-check': 1.0.1(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(typescript@5.5.2)(webpack-cli@5.1.4) '@storybook/addon-docs': 8.3.5(storybook@8.4.2) '@storybook/core-webpack': 8.3.5(storybook@8.4.2) browser-assert: 1.2.1 @@ -40285,7 +40326,7 @@ packages: - webpack-sources dev: true - /storybook-react-rsbuild@0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2)(typescript@5.5.2)(webpack@5.93.0): + /storybook-react-rsbuild@0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(react-dom@18.3.1)(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2)(typescript@5.5.2)(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-Cy7Ms5COLR1FTelGRxS5pE9LVlDSvaJeBsTH2MVi/29ZK8UEE0VH+Mnve2MboB93GbC3fhZFtIcNSF2dy9pjTw==} engines: {node: '>=18.0.0'} peerDependencies: @@ -40310,7 +40351,7 @@ packages: react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 storybook: 8.4.2(prettier@3.3.3) - storybook-builder-rsbuild: 0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(storybook@8.4.2)(typescript@5.5.2) + storybook-builder-rsbuild: 0.1.5(@rsbuild/core@1.1.1)(@swc/core@1.7.26)(esbuild@0.18.20)(storybook@8.4.2)(typescript@5.5.2)(webpack-cli@5.1.4) tsconfig-paths: 4.2.0 typescript: 5.5.2 transitivePeerDependencies: @@ -40644,7 +40685,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /style-loader@3.3.4(webpack@5.93.0): @@ -40653,7 +40694,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /style-to-object@0.3.0: resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} @@ -40817,7 +40858,7 @@ packages: fast-glob: 3.3.2 normalize-path: 3.0.0 stylus: 0.64.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /stylus@0.64.0: resolution: {integrity: sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==} @@ -40955,7 +40996,7 @@ packages: dependencies: '@swc/core': 1.7.26(@swc/helpers@0.5.13) '@swc/counter': 0.1.3 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /symbol-tree@3.2.4: @@ -41160,7 +41201,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.93.0): @@ -41186,7 +41227,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.95.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} @@ -41211,7 +41252,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.75.0): @@ -41237,7 +41278,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.75.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.75.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.93.0): @@ -41263,7 +41304,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.95.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} @@ -41288,7 +41329,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /terser-webpack-plugin@5.3.9(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.95.0): @@ -41314,7 +41355,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.1 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /terser@5.34.1: @@ -41719,7 +41760,7 @@ packages: micromatch: 4.0.8 semver: 7.6.3 typescript: 5.0.4 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /ts-loader@9.4.4(typescript@5.5.2)(webpack@5.95.0): @@ -41734,7 +41775,7 @@ packages: micromatch: 4.0.8 semver: 7.6.3 typescript: 5.5.2 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /ts-loader@9.5.1(typescript@5.5.2)(webpack@5.93.0): @@ -41750,7 +41791,7 @@ packages: semver: 7.6.3 source-map: 0.7.4 typescript: 5.5.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /ts-node@10.9.1(@swc/core@1.7.26)(@types/node@18.16.9)(typescript@5.4.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} @@ -42613,7 +42654,7 @@ packages: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /url-parse@1.5.10: @@ -43339,7 +43380,7 @@ packages: hash-sum: 2.0.0 vue: 3.5.10(typescript@5.5.2) watchpack: 2.4.2 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /vue-router@4.4.5(vue@3.5.10): @@ -43483,6 +43524,38 @@ packages: engines: {node: '>=12'} dev: true + /webpack-cli@5.1.4(webpack@5.93.0): + resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} + engines: {node: '>=14.15.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + webpack: 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.93.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.93.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.93.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.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack-merge: 5.10.0 + /webpack-dev-middleware@6.1.3(webpack@5.93.0): resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} engines: {node: '>= 14.15.0'} @@ -43497,7 +43570,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: true /webpack-dev-middleware@7.4.2(webpack@5.93.0): @@ -43515,9 +43588,9 @@ packages: on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) - /webpack-dev-server@5.0.4(webpack@5.93.0): + /webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==} engines: {node: '>= 18.12.0'} hasBin: true @@ -43558,7 +43631,8 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.93.0) webpack-dev-middleware: 7.4.2(webpack@5.93.0) ws: 8.18.0 transitivePeerDependencies: @@ -43568,7 +43642,7 @@ packages: - utf-8-validate dev: true - /webpack-dev-server@5.1.0(webpack@5.93.0): + /webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.93.0): resolution: {integrity: sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==} engines: {node: '>= 18.12.0'} hasBin: true @@ -43607,7 +43681,8 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack@5.93.0) webpack-dev-middleware: 7.4.2(webpack@5.93.0) ws: 8.18.0 transitivePeerDependencies: @@ -43631,7 +43706,6 @@ packages: clone-deep: 4.0.1 flat: 5.0.2 wildcard: 2.0.1 - dev: true /webpack-node-externals@3.0.0: resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} @@ -43653,7 +43727,7 @@ packages: dependencies: html-webpack-plugin: 5.5.3(webpack@5.95.0) typed-assert: 1.0.9 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true /webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.2)(webpack@5.93.0): @@ -43668,7 +43742,7 @@ packages: dependencies: html-webpack-plugin: 5.6.2(@rspack/core@1.0.8)(webpack@5.93.0) typed-assert: 1.0.9 - webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20) + webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) /webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3)(webpack@5.95.0): resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} @@ -43682,13 +43756,13 @@ packages: dependencies: html-webpack-plugin: 5.6.3(@rspack/core@1.0.8)(webpack@5.95.0) typed-assert: 1.0.9 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19) + webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true /webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} - /webpack@5.75.0(@swc/core@1.7.26)(esbuild@0.24.0): + /webpack@5.75.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4): resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -43721,6 +43795,7 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.75.0) watchpack: 2.4.2 + webpack-cli: 5.1.4(webpack@5.93.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -43728,7 +43803,7 @@ packages: - uglify-js dev: true - /webpack@5.93.0(@swc/core@1.7.26)(esbuild@0.18.20): + /webpack@5.93.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4): resolution: {integrity: sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==} engines: {node: '>=10.13.0'} hasBin: true @@ -43761,13 +43836,14 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.93.0) watchpack: 2.4.2 + webpack-cli: 5.1.4(webpack@5.93.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - /webpack@5.93.0(@swc/core@1.7.26)(esbuild@0.24.0): + /webpack@5.93.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4): resolution: {integrity: sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==} engines: {node: '>=10.13.0'} hasBin: true @@ -43800,13 +43876,14 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.93.0) watchpack: 2.4.2 + webpack-cli: 5.1.4(webpack@5.93.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - /webpack@5.95.0(@swc/core@1.7.26)(esbuild@0.17.19): + /webpack@5.95.0(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4): resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} engines: {node: '>=10.13.0'} hasBin: true @@ -43838,6 +43915,7 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.17.19)(webpack@5.95.0) watchpack: 2.4.2 + webpack-cli: 5.1.4(webpack@5.93.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -43845,7 +43923,7 @@ packages: - uglify-js dev: true - /webpack@5.95.0(@swc/core@1.7.26)(esbuild@0.18.20): + /webpack@5.95.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4): resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} engines: {node: '>=10.13.0'} hasBin: true @@ -43877,6 +43955,7 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.95.0) watchpack: 2.4.2 + webpack-cli: 5.1.4(webpack@5.93.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -43884,7 +43963,7 @@ packages: - uglify-js dev: true - /webpack@5.95.0(@swc/core@1.7.26)(esbuild@0.24.0): + /webpack@5.95.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4): resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} engines: {node: '>=10.13.0'} hasBin: true @@ -43916,6 +43995,7 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.95.0) watchpack: 2.4.2 + webpack-cli: 5.1.4(webpack@5.93.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -44069,7 +44149,6 @@ packages: /wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - dev: true /with@7.0.2: resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==}