diff --git a/examples/with-rsc/src/components/Counter.client.tsx b/examples/with-rsc/src/components/Counter.client.tsx index c61fbaa994..a9ed6568d3 100644 --- a/examples/with-rsc/src/components/Counter.client.tsx +++ b/examples/with-rsc/src/components/Counter.client.tsx @@ -1,7 +1,7 @@ 'use client'; import { useState } from 'react'; import { useAppContext } from 'ice'; -import styles from './index.module.css'; +import styles from './counter.module.css'; export default function Counter() { const [count, setCount] = useState(0); diff --git a/examples/with-rsc/src/components/counter.module.css b/examples/with-rsc/src/components/counter.module.css new file mode 100644 index 0000000000..75eea836a4 --- /dev/null +++ b/examples/with-rsc/src/components/counter.module.css @@ -0,0 +1,14 @@ +.link { + font-size: 1.2rem; + color: var(--primary); +} + +.button { + outline: none; + border: none; + border-radius: 8px; + padding: 10px 35px; + background: var(--primary); + box-shadow: 0 5px 10px 0 #ddd; + font-size: calc(10px + 2vmin); +} diff --git a/examples/with-rsc/src/components/index.module.css b/examples/with-rsc/src/pages/about.module.css similarity index 52% rename from examples/with-rsc/src/components/index.module.css rename to examples/with-rsc/src/pages/about.module.css index d11aa6a0b6..18968098e0 100644 --- a/examples/with-rsc/src/components/index.module.css +++ b/examples/with-rsc/src/pages/about.module.css @@ -1,4 +1,4 @@ -.app { +.about { display: flex; flex-direction: column; align-items: center; @@ -6,40 +6,25 @@ height: 100vh; } -.app > header { +.about > header { display: flex; flex-direction: column; align-items: center; } -.app > header > img { +.about > header > img { width: 120px; } -.app > header > p { +.about > header > p { margin: 20px 0; text-align: center; font-size: 2.6rem; } -.app > main { +.about > main { display: flex; flex-direction: column; margin: 20px 0 10px; font-size: 0.9rem; -} - -.link { - font-size: 1.2rem; - color: var(--primary); -} - -.button { - outline: none; - border: none; - border-radius: 8px; - padding: 10px 35px; - background: var(--primary); - box-shadow: 0 5px 10px 0 #ddd; - font-size: calc(10px + 2vmin); -} +} \ No newline at end of file diff --git a/examples/with-rsc/src/pages/about.tsx b/examples/with-rsc/src/pages/about.tsx index b9a1859c37..916a34a9ed 100644 --- a/examples/with-rsc/src/pages/about.tsx +++ b/examples/with-rsc/src/pages/about.tsx @@ -1,5 +1,5 @@ import { useAppContext } from 'ice'; -import styles from './index.module.css'; +import styles from './about.module.css'; import RefreshButton from '@/components/RefreshButton.client'; import Counter from '@/components/Counter.client'; @@ -14,7 +14,7 @@ export default function Home() { console.log(appContext); return ( -
+

About Page

server request count: { global.requestCount++ }
diff --git a/examples/with-rsc/src/pages/index.module.css b/examples/with-rsc/src/pages/index.module.css index d11aa6a0b6..67e8c355ea 100644 --- a/examples/with-rsc/src/pages/index.module.css +++ b/examples/with-rsc/src/pages/index.module.css @@ -27,19 +27,4 @@ flex-direction: column; margin: 20px 0 10px; font-size: 0.9rem; -} - -.link { - font-size: 1.2rem; - color: var(--primary); -} - -.button { - outline: none; - border: none; - border-radius: 8px; - padding: 10px 35px; - background: var(--primary); - box-shadow: 0 5px 10px 0 #ddd; - font-size: calc(10px + 2vmin); -} +} \ No newline at end of file diff --git a/packages/ice/src/bundler/webpack/getWebpackConfig.ts b/packages/ice/src/bundler/webpack/getWebpackConfig.ts index c0e7843198..b256536fe4 100644 --- a/packages/ice/src/bundler/webpack/getWebpackConfig.ts +++ b/packages/ice/src/bundler/webpack/getWebpackConfig.ts @@ -1,8 +1,11 @@ +import * as path from 'path'; +import { fileURLToPath } from 'url'; import webpack from '@ice/bundles/compiled/webpack/index.js'; import lodash from '@ice/bundles/compiled/lodash/index.js'; import { getWebpackConfig as getDefaultWebpackConfig } from '@ice/webpack-config'; import type { Configuration } from 'webpack'; import { FlightManifestPlugin } from '../../webpack/FlightManifestPlugin.js'; +import { FlightClientEntryPlugin } from '../../webpack/FlightClientEntryPlugin.js'; import { getExpandedEnvs } from '../../utils/runtimeEnv.js'; import { getRouteExportConfig } from '../../service/config.js'; import { getFileHash } from '../../utils/hash.js'; @@ -14,6 +17,8 @@ import type ServerRunnerPlugin from '../../webpack/ServerRunnerPlugin.js'; import type ServerCompilerPlugin from '../../webpack/ServerCompilerPlugin.js'; import type { BundlerOptions, Context } from '../types.js'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + const { debounce } = lodash; type GetWebpackConfig = ( @@ -118,6 +123,16 @@ const getWebpackConfig: GetWebpackConfig = async (context, options) => { // Add spinner for webpack task. webpackConfig.plugins.push(getSpinnerPlugin(spinner)); if (userConfig.rsc) { + webpackConfig.resolveLoader = { + alias: { + 'flight-client-entry-loader': path.join(__dirname, '../../webpack/FlightClientEntryLoader.js'), + }, + }; + + webpackConfig.plugins.push(new FlightClientEntryPlugin({ + rootDir, + getRoutesFile, + })); webpackConfig.plugins.push(new FlightManifestPlugin()); } diff --git a/packages/ice/src/plugins/web/index.ts b/packages/ice/src/plugins/web/index.ts index e8256fdf8d..7cd7eff5ec 100644 --- a/packages/ice/src/plugins/web/index.ts +++ b/packages/ice/src/plugins/web/index.ts @@ -49,8 +49,10 @@ const plugin: Plugin = () => ({ ...(userConfig.rsc ? { alias: createRSCAliases(), // TODO: temporary solution for rsc. - entry: { main: [path.join(rootDir, RUNTIME_TMP_DIR, 'rsc.client.tsx')] }, - } : {}), + entry: { + main: [path.join(rootDir, RUNTIME_TMP_DIR, 'rsc.client.tsx')], + route: [path.join(rootDir, RUNTIME_TMP_DIR, 'routes.tsx')], + } } : {}), }); onHook('after.start.compile', async ({ isSuccessful, isFirstCompile, urls, devUrlInfo }) => { diff --git a/packages/ice/src/webpack/FlightClientEntryLoader.ts b/packages/ice/src/webpack/FlightClientEntryLoader.ts new file mode 100644 index 0000000000..748c947526 --- /dev/null +++ b/packages/ice/src/webpack/FlightClientEntryLoader.ts @@ -0,0 +1,24 @@ +export type ClientComponentImports = string[]; +export type CssImports = Record; + +export type FlightClientEntryLoaderOptions = { + modules: ClientComponentImports; +}; + +export default function transformSource() { + let { modules }: FlightClientEntryLoaderOptions = this.getOptions(); + + if (!Array.isArray(modules)) { + modules = modules ? [modules] : []; + } + + const requests = modules as string[]; + const code = requests + .map( + (request) => + `import(/* webpackMode: "eager" */ ${JSON.stringify(request)})`, + ) + .join(';\n'); + + return code; +} diff --git a/packages/ice/src/webpack/FlightClientEntryPlugin.ts b/packages/ice/src/webpack/FlightClientEntryPlugin.ts new file mode 100644 index 0000000000..32900200e3 --- /dev/null +++ b/packages/ice/src/webpack/FlightClientEntryPlugin.ts @@ -0,0 +1,343 @@ +import { join, relative } from 'path'; +import { stringify } from 'querystring'; +import { asyncLib, acorn } from '@ice/bundles'; +import webpack from '@ice/bundles/compiled/webpack/index.js'; +import NullDependency from '@ice/bundles/compiled/webpack/NullDependency.js'; +import ModuleDependency from '@ice/bundles/compiled/webpack/ModuleDependency.js'; +import type { Compiler, Compilation } from 'webpack'; +import { createComponentName } from '@ice/route-manifest'; +import formatPath from '../utils/formatPath.js'; + +const PLUGIN_NAME = 'FlightClientEntryPlugin'; + +interface ClientReferenceSearchPath { + directory: string; + recursive?: boolean; + include: RegExp; + exclude?: RegExp; +} + +interface Options { + rootDir: string; + clientReferences?: ClientReferenceSearchPath[]; + getRoutesFile: () => string[]; +} + +class ClientReferenceDependency extends ModuleDependency { + userRequest: string; + request: string; + + constructor(request: string) { + super(request); + this.request = request; + } + get type(): string { + return 'client-reference'; + } +} + +export class FlightClientEntryPlugin { + clientReferences: ClientReferenceSearchPath[]; + clientFiles = new Set(); + pageDir: string; + rootDir: string; + getRoutesFile: () => string[]; + + constructor(options: Options) { + this.rootDir = options.rootDir; + this.pageDir = join(options.rootDir, 'src', 'pages'); + + this.getRoutesFile = options.getRoutesFile; + + if (options.clientReferences) { + this.clientReferences = options.clientReferences; + } else { + this.clientReferences = [ + { + directory: '.', + recursive: true, + include: /\.(js|ts|jsx|tsx)$/, + exclude: /types.ts|.d.ts|node_modules/, + }, + ]; + } + } + + apply(compiler: Compiler) { + const _this = this; + + compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation, { normalModuleFactory }) => { + // @ts-expect-error TODO: add types for ModuleDependency. + compilation.dependencyFactories.set(ClientReferenceDependency, normalModuleFactory); + // @ts-expect-error TODO: add types for ModuleDependency. + compilation.dependencyTemplates.set(ClientReferenceDependency, new NullDependency.Template()); + }); + + compiler.hooks.beforeCompile.tapAsync(PLUGIN_NAME, ({ contextModuleFactory }, callback) => { + const contextResolver = compiler.resolverFactory.get('context', {}); + const normalResolver = compiler.resolverFactory.get('normal'); + + _this.resolveClientFiles( + compiler.context, + contextResolver, + normalResolver, + compiler.inputFileSystem, + contextModuleFactory, + (err, resolvedClientRefs) => { + if (err) { + callback(err); + return; + } + resolvedClientRefs.forEach(dep => { + _this.clientFiles.add(dep.request); + }); + + callback(); + }, + ); + }); + + compiler.hooks.finishMake.tapPromise(PLUGIN_NAME, (compilation) => + _this.createClientEntries(compiler, compilation), + ); + + compiler.hooks.make.tap(PLUGIN_NAME, (compilation) => { + compilation.hooks.processAssets.tap({ + name: PLUGIN_NAME, + stage: webpack.Compilation.PROCESS_ASSETS_STAGE_PRE_PROCESS, + }, () => { + compilation.chunks.forEach((chunk) => { + if (chunk.name === 'route' || chunk.runtime === 'route') { + chunk.files.forEach((file) => { + delete compilation.assets[file]; + }); + } + }); + }); + }); + } + + async createClientEntries(compiler: Compiler, compilation: Compilation) { + const routes = this.getRoutesFile().map(file => join(this.rootDir, file)); + const addClientEntryList = []; + + for (const [name, entry] of compilation.entries.entries()) { + if (name === 'main') { + continue; + } + + const entryDependency = entry.dependencies?.[0]; + if (!entryDependency) { + continue; + } + + const entryModule = compilation.moduleGraph.getResolvedModule(entryDependency); + for (const connection of compilation.moduleGraph.getOutgoingConnections(entryModule)) { + // @ts-ignore + const entryRequest = connection.resolvedModule?.resource; + + if (routes.indexOf(entryRequest) === -1) continue; + + const { clientComponentImports, CSSImports } = this.collectComponentInfoFromDependency({ + compilation, + resolvedModule: connection.resolvedModule, + }); + + if (clientComponentImports.length || CSSImports.length) { + const injected = this.injectClientEntry({ + compiler, + compilation, + bundlePath: entryRequest, + clientImports: [ + ...clientComponentImports, + ...CSSImports, + ], + }); + + addClientEntryList.push(injected); + } + } + } + + await Promise.all(addClientEntryList); + } + + injectClientEntry({ compiler, compilation, bundlePath, clientImports }) { + const clientLoader = `flight-client-entry-loader?${stringify({ + modules: clientImports, + })}!`; + + const componentName = createComponentName(formatPath(relative(this.pageDir, bundlePath))); + const name = `rsc_${componentName}`; + const clientComponentEntryDep = webpack.EntryPlugin.createDependency(clientLoader, { + name, + }); + + return new Promise((resolve, reject) => { + compilation.addEntry(compiler.context, clientComponentEntryDep, { name, dependOn: ['main'] }, (err) => { + if (err) { + reject(err); + } + + resolve(); + }); + }); + } + + collectComponentInfoFromDependency({ compilation, resolvedModule }) { + // Keep track of checked modules to avoid infinite loops with recursive imports. + const visited = new Set(); + // Info to collect. + const clientComponentImports = []; + const CSSImports = []; + + const filterClientComponents = (mod) => { + if (!mod) return; + + const modRequest: string | undefined = mod.resourceResolveData?.path + mod.resourceResolveData?.query; + + if (!modRequest || visited.has(modRequest)) return; + visited.add(modRequest); + + const isCSS = isCSSMod(mod); + + if (isCSS) { + CSSImports.push(modRequest); + } + + if (this.isClientComponentEntryModule(mod)) { + clientComponentImports.push(modRequest); + return; + } + + compilation.moduleGraph.getOutgoingConnections(mod).forEach((connection) => { + filterClientComponents(connection.resolvedModule); + }); + }; + + // Traverse the module graph to find all client components. + filterClientComponents(resolvedModule); + + return { + clientComponentImports, + CSSImports, + }; + } + + isClientComponentEntryModule(mod) { + if (this.clientFiles.has(mod.resource)) { + return true; + } + + return false; + } + + resolveClientFiles( + context: string, + contenxtResolver: ReturnType, + normalResolver: ReturnType, + fs: Compilation['inputFileSystem'], + contextModuleFactory: Compilation['params']['contextModuleFactory'], + callback: (err: Error | null, files?: ClientReferenceDependency[]) => void, + ) { + function hasUseClientDirective(source: string): boolean { + if (source.indexOf('use client') === -1) { + return false; + } + let body; + try { + // TODO: check client directive by comment injected by swc plugin. + body = acorn.parse(source, { + ecmaVersion: '2024', + sourceType: 'module', + }).body; + } catch (x) { + return false; + } + for (let i = 0; i < body.length; i++) { + const node = body[i]; + if (node.type !== 'ExpressionStatement' || !node.directive) { + break; + } + if (node.directive === 'use client') { + return true; + } + } + return false; + } + asyncLib.map(this.clientReferences, ( + clientReference: ClientReferenceSearchPath, + cb: (err: null | Error, result?: ClientReferenceDependency[]) => void, + ) => { + contenxtResolver.resolve({}, context, clientReference.directory, {}, (err, resolvedDirectory) => { + if (err) return cb(err); + const options = { + resource: resolvedDirectory, + resourceQuery: '', + recursive: + clientReference.recursive === undefined + ? true + : clientReference.recursive, + regExp: clientReference.include, + include: undefined, + exclude: clientReference.exclude, + }; + // @ts-expect-error TODO: add types for resolveDependencies options. + contextModuleFactory.resolveDependencies(fs, options, (err, dependencies) => { + if (err) return cb(err); + const clientRefDeps = dependencies.map(dep => { + // Use userRequest instead of request. request always end with undefined which is wrong. + const request = join(resolvedDirectory as string, dep.userRequest); + const clientRefDep = new ClientReferenceDependency(request); + clientRefDep.userRequest = dep.userRequest; + return clientRefDep; + }); + asyncLib.filter( + clientRefDeps, + (dep: ClientReferenceDependency, filterCb: (err: null | Error, truthValue: boolean) => void, + ) => { + normalResolver.resolve( + {}, + context, + dep.request, + {}, + (err: null | Error, resolvedPath: any) => { + if (err || typeof resolvedPath !== 'string') { + return filterCb(null, false); + } + + fs.readFile( + resolvedPath, + 'utf-8', + // @ts-expect-error + (err: null | Error, content: string) => { + if (err || typeof content !== 'string') { + return filterCb(null, false); + } + const useClient = hasUseClientDirective(content); + filterCb(null, useClient); + }, + ); + }, + ); + }, cb); + }); + }); + }, ( + err: null | Error, + result: ClientReferenceDependency[], + ) => { + if (err) return callback(err); + const flat: ClientReferenceDependency[] = []; + for (let i = 0; i < result.length; i++) { + flat.push.apply(flat, result[i]); + } + callback(null, flat); + }); + } +} + +const regexCSS = /\.(css|scss|sass)(\?.*)?$/; +function isCSSMod(mod) { + return mod.resource && regexCSS.test(mod.resource); +} \ No newline at end of file diff --git a/packages/ice/src/webpack/FlightManifestPlugin.ts b/packages/ice/src/webpack/FlightManifestPlugin.ts index 49cab9afea..f8bda22836 100644 --- a/packages/ice/src/webpack/FlightManifestPlugin.ts +++ b/packages/ice/src/webpack/FlightManifestPlugin.ts @@ -1,24 +1,11 @@ // Fork form https://github.com/facebook/react/blob/main/packages/react-server-dom-webpack/src/ReactFlightWebpackPlugin.js // Add special handling for ice.js when enable RSC. -import * as path from 'path'; -import { asyncLib, acorn } from '@ice/bundles'; -import ModuleDependency from '@ice/bundles/compiled/webpack/ModuleDependency.js'; -import NullDependency from '@ice/bundles/compiled/webpack/NullDependency.js'; import webpack from '@ice/bundles/compiled/webpack/index.js'; -import type { Compiler, Compilation } from 'webpack'; +import type { Compiler } from 'webpack'; const PLUGIN_NAME = 'FlightManifestPlugin'; -interface ClientReferenceSearchPath { - directory: string; - recursive?: boolean; - include: RegExp; - exclude?: RegExp; -} - interface Options { - clientReferences?: ClientReferenceSearchPath[]; - chunkName?: string; clientManifestFilename?: string; ssrManifestFilename?: string; } @@ -27,55 +14,23 @@ interface SSRExports { [chunkName: string]: { specifier: string; name: string }; } -class ClientReferenceDependency extends ModuleDependency { - userRequest: string; - request: string; +interface ClientManifest { + [key: string]: { + chunks: (string | number)[]; + id: string | number; + name: string; +}; +} - constructor(request: string) { - super(request); - this.request = request; - } - get type(): string { - return 'client-reference'; - } +interface SsrManifest { + [key: string]: SSRExports; } -// Webpack template utils of toPath. -const PATH_NAME_NORMALIZE_REPLACE_REGEX = /[^a-zA-Z0-9_!§$()=\-^°]+/g; -const MATCH_PADDED_HYPHENS_REPLACE_REGEX = /^-|-$/g; -const toPath = (str: any) => { - if (typeof str !== 'string') return ''; - return str - .replace(PATH_NAME_NORMALIZE_REPLACE_REGEX, '-') - .replace(MATCH_PADDED_HYPHENS_REPLACE_REGEX, ''); -}; export class FlightManifestPlugin { - clientReferences: ClientReferenceSearchPath[]; - chunkName?: string; clientManifestFilename?: string; ssrManifestFilename?: string; constructor(options: Options = {}) { - if (options.clientReferences) { - this.clientReferences = options.clientReferences; - } else { - this.clientReferences = [ - { - directory: '.', - recursive: true, - include: /\.(js|ts|jsx|tsx)$/, - exclude: /types.ts|.d.ts|node_modules/, - }, - ]; - } - if (typeof options.chunkName === 'string') { - this.chunkName = options.chunkName; - if (!/\[(index|request)\]/.test(this.chunkName)) { - this.chunkName += '[index]'; - } - } else { - this.chunkName = 'client[index]'; - } this.clientManifestFilename = options.clientManifestFilename || 'react-client-manifest.json'; this.ssrManifestFilename = @@ -84,107 +39,34 @@ export class FlightManifestPlugin { apply(compiler: Compiler) { const _this = this; - let resolvedClientReferences: ClientReferenceDependency[]; - let clientFileNameFound = false; - - compiler.hooks.beforeCompile.tapAsync(PLUGIN_NAME, ({ contextModuleFactory }, callback) => { - const contextResolver = compiler.resolverFactory.get('context', {}); - const normalResolver = compiler.resolverFactory.get('normal'); - - _this.resolveClientFiles( - compiler.context, - contextResolver, - normalResolver, - compiler.inputFileSystem, - contextModuleFactory, - (err, resolvedClientRefs) => { - if (err) { - callback(err); - return; - } - resolvedClientReferences = resolvedClientRefs; - callback(); - }, - ); - }); - - compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation, { normalModuleFactory }) => { - // @ts-expect-error TODO: add types for ModuleDependency. - compilation.dependencyFactories.set(ClientReferenceDependency, normalModuleFactory); - // @ts-expect-error TODO: add types for ModuleDependency. - compilation.dependencyTemplates.set(ClientReferenceDependency, new NullDependency.Template()); - - const handler = (parser) => { - parser.hooks.program.tap(PLUGIN_NAME, () => { - const { module } = parser.state; - if (!module.resource.includes('react-server-dom-webpack/client.browser')) { - return; - } - clientFileNameFound = true; - if (resolvedClientReferences) { - if (resolvedClientReferences) { - for (let i = 0; i < resolvedClientReferences.length; i++) { - const dep = resolvedClientReferences[i]; - - const chunkName = _this.chunkName - .replace(/\[index\]/g, `${i}`) - .replace(/\[request\]/g, toPath(dep.userRequest)); - - const block = new webpack.AsyncDependenciesBlock( - { - name: chunkName, - }, - null, - dep.request, - ); - // @ts-expect-error TODO: add types for ModuleDependency. - block.addDependency(dep); - module.addBlock(block); - } - } - } - }); - }; - - normalModuleFactory.hooks.parser.for('javascript/auto').tap('HarmonyModulesPlugin', handler); - normalModuleFactory.hooks.parser.for('javascript/esm').tap('HarmonyModulesPlugin', handler); - normalModuleFactory.hooks.parser.for('javascript/dynamic').tap('HarmonyModulesPlugin', handler); - }); compiler.hooks.make.tap(PLUGIN_NAME, (compilation) => { compilation.hooks.processAssets.tap({ name: PLUGIN_NAME, stage: webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT, }, () => { - if (clientFileNameFound === false) { - compilation.warnings.push( - // @ts-expect-error mismatch import path of webpack. - new webpack.WebpackError( - `Client runtime at 'react-server-dom-webpack/client' was not found. React Server Components module map file ${_this.clientManifestFilename} was not created.`, - ), - ); - return; - } - - const resolveClientFiles = new Set((resolvedClientReferences || []).map((dep) => dep.request)); - const clientManifest: { [key: string]: { - chunks: (string | number)[]; - id: string | number; - name: string; - };} = {}; - const ssrManifest: { - [key: string]: SSRExports; + const clientManifestMapping: { + [key: string]: ClientManifest; + } = {}; + const ssrManifestSetMapping: { + [key: string]: SsrManifest; } = {}; compilation.chunkGroups.forEach((chunkGroup) => { - const chunkIds = chunkGroup.chunks.map((chunk) => chunk.id); + const chunkGroupName = chunkGroup.name; + + const clientManifest: ClientManifest = {}; + + const ssrManifest: SsrManifest = {}; + + let hasRecord = false; + const recordModule = (id: string | number, module: any) => { - if (!resolveClientFiles.has(module.resource)) { - return; - } // const modId = path.relative(compiler.context, module.resource); const modId = module.resource; if (modId !== undefined) { + hasRecord = true; + clientManifest[modId] = { id, chunks: chunkIds, @@ -204,28 +86,62 @@ export class FlightManifestPlugin { } }; + const chunkIds = chunkGroup.chunks.map((chunk) => chunk.id); chunkGroup.chunks.forEach((chunk) => { const chunkModules = compilation.chunkGraph.getChunkModulesIterable(chunk); [...chunkModules].forEach((module) => { - const moduleId = compilation.chunkGraph.getModuleId(module); - recordModule(moduleId, module); - // If this is a concatenation, register each child to the parent ID. - // @ts-expect-error - if (module.modules) { - // @ts-expect-error - module.modules.forEach(concatenatedMod => { - recordModule(moduleId, concatenatedMod); - }); + const { request } = module as any; + + if ( + !request || + !request.includes('FlightClientEntryLoader.js') + ) { + return; + } + + const connections = compilation.moduleGraph.getOutgoingConnections(module); + + for (const connection of connections) { + const { dependency } = connection; + if (!dependency) continue; + + const clientEntryMod = compilation.moduleGraph.getResolvedModule( + dependency, + ) as any; + const modId = compilation.chunkGraph.getModuleId(clientEntryMod) as + | string + | number + | null; + + if (modId) { + recordModule(modId, clientEntryMod); + } else { + // If this is a concatenation, register each child to the parent ID. + if (connection.module?.constructor.name === 'ConcatenatedModule') { + const concatenatedMod = connection.module; + const concatenatedModId = + compilation.chunkGraph.getModuleId(concatenatedMod); + recordModule(concatenatedModId, clientEntryMod); + } + } } }); + + // One client component may bundle into serveral chunks, so we need to create manifest for each page. + if (hasRecord) { + clientManifestMapping[chunkGroupName] = clientManifest; + ssrManifestSetMapping[chunkGroupName] = ssrManifest; + } }); }); - const clientOutput = JSON.stringify(clientManifest, null, 2); + + const clientOutput = JSON.stringify(clientManifestMapping, null, 2); compilation.emitAsset( _this.clientManifestFilename, new webpack.sources.RawSource(clientOutput, false), ); - const ssrOutput = JSON.stringify(ssrManifest, null, 2); + + const ssrOutput = JSON.stringify(ssrManifestSetMapping, null, 2); compilation.emitAsset( _this.ssrManifestFilename, new webpack.sources.RawSource(ssrOutput, false), @@ -233,108 +149,4 @@ export class FlightManifestPlugin { }); }); } - - resolveClientFiles( - context: string, - contenxtResolver: ReturnType, - normalResolver: ReturnType, - fs: Compilation['inputFileSystem'], - contextModuleFactory: Compilation['params']['contextModuleFactory'], - callback: (err: Error | null, files?: ClientReferenceDependency[]) => void, - ) { - function hasUseClientDirective(source: string): boolean { - if (source.indexOf('use client') === -1) { - return false; - } - let body; - try { - // TODO: check client directive by comment injected by swc plugin. - body = acorn.parse(source, { - ecmaVersion: '2024', - sourceType: 'module', - }).body; - } catch (x) { - return false; - } - for (let i = 0; i < body.length; i++) { - const node = body[i]; - if (node.type !== 'ExpressionStatement' || !node.directive) { - break; - } - if (node.directive === 'use client') { - return true; - } - } - return false; - } - asyncLib.map(this.clientReferences, ( - clientReference: ClientReferenceSearchPath, - cb: (err: null | Error, result?: ClientReferenceDependency[]) => void, - ) => { - contenxtResolver.resolve({}, context, clientReference.directory, {}, (err, resolvedDirectory) => { - if (err) return cb(err); - const options = { - resource: resolvedDirectory, - resourceQuery: '', - recursive: - clientReference.recursive === undefined - ? true - : clientReference.recursive, - regExp: clientReference.include, - include: undefined, - exclude: clientReference.exclude, - }; - // @ts-expect-error TODO: add types for resolveDependencies options. - contextModuleFactory.resolveDependencies(fs, options, (err, dependencies) => { - if (err) return cb(err); - const clientRefDeps = dependencies.map(dep => { - // Use userRequest instead of request. request always end with undefined which is wrong. - const request = path.join(resolvedDirectory as string, dep.userRequest); - const clientRefDep = new ClientReferenceDependency(request); - clientRefDep.userRequest = dep.userRequest; - return clientRefDep; - }); - asyncLib.filter( - clientRefDeps, - (dep: ClientReferenceDependency, filterCb: (err: null | Error, truthValue: boolean) => void, - ) => { - normalResolver.resolve( - {}, - context, - dep.request, - {}, - (err: null | Error, resolvedPath: any) => { - if (err || typeof resolvedPath !== 'string') { - return filterCb(null, false); - } - - fs.readFile( - resolvedPath, - 'utf-8', - // @ts-expect-error - (err: null | Error, content: string) => { - if (err || typeof content !== 'string') { - return filterCb(null, false); - } - const useClient = hasUseClientDirective(content); - filterCb(null, useClient); - }, - ); - }, - ); - }, cb); - }); - }); - }, ( - err: null | Error, - result: ClientReferenceDependency[], - ) => { - if (err) return callback(err); - const flat: ClientReferenceDependency[] = []; - for (let i = 0; i < result.length; i++) { - flat.push.apply(flat, result[i]); - } - callback(null, flat); - }); - } } diff --git a/packages/route-manifest/src/index.ts b/packages/route-manifest/src/index.ts index af00031e2c..8175fbe6a1 100644 --- a/packages/route-manifest/src/index.ts +++ b/packages/route-manifest/src/index.ts @@ -46,11 +46,14 @@ const routeModuleExts = [ // '.mdx', ]; +export { + createComponentName, +}; + export function isRouteModuleFile(filename: string): boolean { return routeModuleExts.includes(path.extname(filename)); } - export function generateRouteManifest( rootDir: string, ignoreFiles: string[] = [], diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 3083c73f21..2e38daec2e 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -44,7 +44,7 @@ "@types/react-dom": "^18.0.3", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-server-dom-webpack": "canary", + "react-server-dom-webpack": "18.3.0-canary-dd480ef92-20230822", "regenerator-runtime": "^0.13.9", "@remix-run/web-fetch": "^4.3.3" }, diff --git a/packages/runtime/src/routesConfig.ts b/packages/runtime/src/routesConfig.ts index e377ec2cee..4b2a435ccf 100644 --- a/packages/runtime/src/routesConfig.ts +++ b/packages/runtime/src/routesConfig.ts @@ -32,7 +32,7 @@ function getMergedValue(key: string, matches: RouteMatch[], loadersData: Loaders let result; for (let match of matches) { const routeId = match.route.id; - const data = loadersData[routeId]?.pageConfig; + const data = loadersData?.[routeId]?.pageConfig; const value = data?.[key]; if (Array.isArray(value)) { diff --git a/packages/runtime/src/runRSCClientApp.tsx b/packages/runtime/src/runRSCClientApp.tsx index c07392a5cb..213b32eaee 100644 --- a/packages/runtime/src/runRSCClientApp.tsx +++ b/packages/runtime/src/runRSCClientApp.tsx @@ -61,5 +61,5 @@ export function useRefresh() { } function getReactTree(location) { - return fetch(location + location.indexOf('?') ? '?rsc' : '&rsc'); + return fetch(location + (location.indexOf('?') > -1 ? '&rsc' : '?rsc')); } \ No newline at end of file diff --git a/packages/runtime/src/runRSCServerApp.tsx b/packages/runtime/src/runRSCServerApp.tsx index 87e3263881..f39c8ae2ef 100644 --- a/packages/runtime/src/runRSCServerApp.tsx +++ b/packages/runtime/src/runRSCServerApp.tsx @@ -26,7 +26,7 @@ export async function runRSCServerApp(serverContext: ServerContext, renderOption renderMode, basename, serverOnlyBasename, - clientManifest, + clientManifest: clientManifestMapping, assetsManifest, } = renderOptions; @@ -50,7 +50,7 @@ export async function runRSCServerApp(serverContext: ServerContext, renderOption }; if (req.url?.indexOf('rsc') === -1) { - return renderDocument(serverContext, renderOptions, appContext); + return renderDocument(serverContext, renderOptions, appContext, matches); } const routeModules = await loadRouteModules(matches.map(({ route: { id, lazy } }) => ({ id, lazy }))); @@ -61,6 +61,16 @@ export async function runRSCServerApp(serverContext: ServerContext, renderOption ); + // Merge client manifest for match route. + const clientManifest = {}; + matches.forEach(match => { + const { componentName } = match.route; + const manifest = clientManifestMapping[`rsc_${componentName}`]; + if (manifest) { + Object.assign(clientManifest, manifest); + } + }); + const { pipe } = renderToPipeableStream( element, clientManifest, @@ -83,11 +93,12 @@ function renderMatches(matches: RouteMatch[], routeModules: RouteModules) { }, React.createElement(null)); } -function renderDocument(requestContext, renderOptions, appContext) { +function renderDocument(requestContext, renderOptions, appContext, matches) { const { res } = requestContext; const { Document, + routePath, } = renderOptions; const documentContext = { @@ -95,9 +106,9 @@ function renderDocument(requestContext, renderOptions, appContext) { }; const htmlStr = ReactDOMServer.renderToString( - + - + , ); diff --git a/packages/webpack-config/src/webpackPlugins/AssetsManifestPlugin.ts b/packages/webpack-config/src/webpackPlugins/AssetsManifestPlugin.ts index fe494cd1a9..e3e8ad98d2 100644 --- a/packages/webpack-config/src/webpackPlugins/AssetsManifestPlugin.ts +++ b/packages/webpack-config/src/webpackPlugins/AssetsManifestPlugin.ts @@ -9,13 +9,15 @@ interface Assets { getFiles: () => string[]; } -function filterAssets(assets: Assets): string[] { +function filterAssets(compilation: Compilation, assets: Assets): string[] { return ( assets ?.getFiles() .filter((file: string) => { + const exists = compilation.assets[file]; // We don't want to include `.hot-update.js` files into the initial page - return /(? file.replace(/\\/g, '/')) ?? [] ); @@ -43,19 +45,38 @@ export default class AssetsManifestPlugin { assets[asset.sourceFilename] = asset.contenthash; } } + const entryFiles = []; for (const entrypoint of entrypoints) { const entryName = entrypoint.name; - const mainFiles = filterAssets(entrypoint); + + const entryChunk = entrypoint.getEntrypointChunk(); + + // Keep only main chunk as entry files. + if (entryChunk.runtime !== entryChunk.name) { + continue; + } + + const entryFile = [...entryChunk.files].filter((file) => file.endsWith('.js'))?.[0]; + // Temp files may have been deleted. + if (!compilation.assets[entryFile]) { + continue; + } + + const mainFiles = filterAssets(compilation, entrypoint); + if (!mainFiles.length) { + continue; + } + + entryFiles.push(entryFile); entries[entryName] = mainFiles; - const jsMainFiles = mainFiles.filter((file) => file.endsWith('.js')); - entryFiles.push(jsMainFiles[0]); - const chunks = entrypoint?.getChildren(); - chunks.forEach((chunk) => { + + const childChunks = entrypoint?.getChildren(); + childChunks.forEach((chunk) => { // Dynamic import missing chunk name, but not output solid assets. const chunkName = chunk.name; if (chunkName) { - pages[chunkName.replace(/^p_/, '')] = filterAssets(chunk); + pages[chunkName.replace(/^p_/, '').replace(/^rsc_/, '')] = filterAssets(compilation, chunk); } }); } @@ -76,6 +97,7 @@ export default class AssetsManifestPlugin { const output = JSON.stringify(manifest, null, 2); // Emit asset manifest for server compile. compilation.emitAsset(this.fileName, new webpack.sources.RawSource(output)); + // Inject assets manifest to entry file. entryFiles.forEach((entryFile) => { compilation.assets[entryFile] = new webpack.sources.ConcatSource( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 485b2b59b3..0eaf9f536e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1181,7 +1181,7 @@ importers: '@ice/bundles': link:../bundles '@ice/route-manifest': link:../route-manifest '@ice/rspack-config': link:../rspack-config - '@ice/runtime': link:../runtime + '@ice/runtime': 1.3.1_react@18.2.0 '@ice/shared-config': link:../shared-config '@ice/webpack-config': link:../webpack-config '@swc/helpers': 0.5.1 @@ -1287,7 +1287,7 @@ importers: react: ^18.1.0 react-dom: ^18.1.0 dependencies: - '@ice/runtime': link:../runtime + '@ice/runtime': 1.3.1_biqbaboplfbrettd7655fr4n2y '@ice/shared': link:../shared miniapp-history: 0.1.7 devDependencies: @@ -1303,7 +1303,7 @@ importers: dependencies: '@ice/style-import': link:../style-import devDependencies: - '@ice/app': link:../ice + '@ice/app': 3.3.5 packages/plugin-auth: specifiers: @@ -1313,8 +1313,8 @@ importers: '@types/react-dom': ^18.0.0 regenerator-runtime: ^0.13.9 devDependencies: - '@ice/app': link:../ice - '@ice/runtime': link:../runtime + '@ice/app': 3.3.5 + '@ice/runtime': 1.3.1 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 regenerator-runtime: 0.13.11 @@ -1328,8 +1328,8 @@ importers: dependencies: '@ice/cache-canvas': link:../cache-canvas devDependencies: - '@ice/app': link:../ice - '@ice/runtime': link:../runtime + '@ice/app': 3.3.5_webpack@5.88.2 + '@ice/runtime': 1.3.1 webpack: 5.88.2 packages/plugin-css-assets-local: @@ -1341,7 +1341,7 @@ importers: consola: 2.15.3 extract-css-assets-webpack-plugin: 0.2.10 devDependencies: - '@ice/app': link:../ice + '@ice/app': 3.3.5 packages/plugin-fusion: specifiers: @@ -1350,7 +1350,7 @@ importers: dependencies: '@ice/style-import': link:../style-import devDependencies: - '@ice/app': link:../ice + '@ice/app': 3.3.5 packages/plugin-i18n: specifiers: @@ -1395,8 +1395,8 @@ importers: '@ice/stark': 2.7.5 '@ice/stark-app': 1.5.0 devDependencies: - '@ice/app': link:../ice - '@ice/runtime': link:../runtime + '@ice/app': 3.3.5 + '@ice/runtime': 1.3.1 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -1423,7 +1423,7 @@ importers: babel-plugin-transform-jsx-slot: 0.1.2 babel-runtime-jsx-plus: 0.1.5 devDependencies: - '@ice/app': link:../ice + '@ice/app': 3.3.5 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 @@ -1458,15 +1458,15 @@ importers: regenerator-runtime: 0.11.1 sax: 1.2.4 devDependencies: - '@ice/app': link:../ice - '@ice/runtime': link:../runtime + '@ice/app': 3.3.5_webpack@5.88.2 + '@ice/runtime': 1.3.1 webpack: 5.88.2 packages/plugin-moment-locales: specifiers: '@ice/app': ^3.3.2 devDependencies: - '@ice/app': link:../ice + '@ice/app': 3.3.5 packages/plugin-pha: specifiers: @@ -1489,7 +1489,7 @@ importers: humps: 2.0.1 lodash.clonedeep: 4.5.0 devDependencies: - '@ice/app': link:../ice + '@ice/app': 3.3.5_ls5vlc7kphql6b6gtepk5p7cmu build-scripts: 2.1.2-0 esbuild: 0.17.16 webpack: 5.88.2_esbuild@0.17.16 @@ -1522,7 +1522,7 @@ importers: style-unit: 3.0.5 stylesheet-loader: 0.9.1 devDependencies: - '@ice/app': link:../ice + '@ice/app': 3.3.5_webpack@5.88.2 '@types/lodash-es': 4.17.7 webpack: 5.88.2 @@ -1539,8 +1539,8 @@ importers: ahooks: 3.7.5 axios: 0.27.2 devDependencies: - '@ice/app': link:../ice - '@ice/runtime': link:../runtime + '@ice/app': 3.3.5 + '@ice/runtime': 1.3.1 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 regenerator-runtime: 0.13.11 @@ -1638,7 +1638,7 @@ importers: react: ^18.2.0 react-dom: ^18.2.0 react-router-dom: 6.14.2 - react-server-dom-webpack: canary + react-server-dom-webpack: 18.3.0-canary-dd480ef92-20230822 regenerator-runtime: ^0.13.9 semver: ^7.4.0 source-map: ^0.7.4 @@ -1660,7 +1660,7 @@ importers: '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-server-dom-webpack: 18.3.0-canary-e61a60fac-20231011_biqbaboplfbrettd7655fr4n2y + react-server-dom-webpack: 18.3.0-canary-dd480ef92-20230822_biqbaboplfbrettd7655fr4n2y regenerator-runtime: 0.13.11 packages/shared: @@ -5487,174 +5487,774 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@ice/css-modules-hash-darwin-arm64/0.0.6: - resolution: {integrity: sha512-5QWZl3+biY5U/kRhymH+6X/kAk3Imvkqu9QpV+LTDxhoXEkdhzZd2sCO5ZNfrsODFuHy78iKzh6gEweADPwYkQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@ice/css-modules-hash-darwin-universal/0.0.6: - resolution: {integrity: sha512-PLmDCFZHvpNysvMhUa363QWvgCMIwr6vYwEkHkC/AF9NZvl25r2R9mfdExHw8sZHu9fMHVINwWEBcMiYbZd/cg==} - engines: {node: '>= 10'} - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@ice/css-modules-hash-darwin-x64/0.0.6: - resolution: {integrity: sha512-HOmh+Yiw6rH9VJD2XBN7sZmigo+jwi7qAD/J12pbxVrMJ//aIsv3BwpgFhfGO8eqKeyVqNXac3S/vC2hq8t8jw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@ice/css-modules-hash-linux-x64-gnu/0.0.6: - resolution: {integrity: sha512-PS7lTINETFqzbU0nbgLgxXJOp+BU51VvNeNEF1h6Xz6soR23yqFht6d8xuNC1auBnPHZM+RDiQYzwi9MCBTvgA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@ice/css-modules-hash-linux-x64-musl/0.0.6: - resolution: {integrity: sha512-UiDg8KpoDGmQrBt9z5lqjr+OAG2S2xQi00Unt2yali1dvhS1tpcN16isiBA2yO3JOy2b0Y0VtlmpJKxpMDsFcg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@ice/css-modules-hash-win32-arm64-msvc/0.0.6: - resolution: {integrity: sha512-7rF1gX9QyhhGUo4JKZUQ6DSJs/xJiJlrKC9D91dkTHs81e0G6IQLv9EnIaX2OPF3/SPnqp7CAGxr7TOtDYsyAw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@ice/css-modules-hash-win32-x64-msvc/0.0.6: - resolution: {integrity: sha512-on3tYfhvBW6XQ6tkE0KKZvFK0JB/iwBrvUiRo/Di3ceJPPwD619PJNNQnn78kqcrZIVdQZ41HMdyuEnz8UHVpQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@ice/css-modules-hash/0.0.6: - resolution: {integrity: sha512-UbYq2Ldw+hamc9HoIfKTZORmmYCaGnP6f361XdB/7PQZHZ5hAak6TePdcVQekLHGEg/+zIccN33mflJqucC1Aw==} - engines: {node: '>= 10'} - optionalDependencies: - '@ice/css-modules-hash-darwin-arm64': 0.0.6 - '@ice/css-modules-hash-darwin-universal': 0.0.6 - '@ice/css-modules-hash-darwin-x64': 0.0.6 - '@ice/css-modules-hash-linux-x64-gnu': 0.0.6 - '@ice/css-modules-hash-linux-x64-musl': 0.0.6 - '@ice/css-modules-hash-win32-arm64-msvc': 0.0.6 - '@ice/css-modules-hash-win32-x64-msvc': 0.0.6 - dev: false - - /@ice/pkg/1.5.5: - resolution: {integrity: sha512-0BIfv6Uzs2wpHv7RmFwz+kWfoJLfx0yJrQyh3yqy+F6TZWxTwrqQmX+5yRmgqK5f7lGGhYfMMVNWjRSCw5MHPQ==} - engines: {node: '>=16.14.0'} + /@ice/app/3.3.5: + resolution: {integrity: sha512-loVbr/CqH5suvWchw/mvbLS/yfO/qsxOx/KvcmdQYA8Unr0J1fYHrBFlYbKmpJe0aEDnSfSzDKebJsbyDTKGJQ==} + engines: {node: '>=14.19.0', npm: '>=3.0.0'} hasBin: true + requiresBuild: true + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/core': 7.21.0 - '@babel/parser': 7.21.2 - '@babel/preset-react': 7.18.6_@babel+core@7.21.0 - '@babel/preset-typescript': 7.21.0_@babel+core@7.21.0 - '@rollup/plugin-commonjs': 21.1.0_rollup@2.79.1 - '@rollup/plugin-image': 3.0.2_rollup@2.79.1 - '@rollup/plugin-json': 4.1.0_rollup@2.79.1 - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.1 - '@rollup/plugin-replace': 5.0.2_rollup@2.79.1 - '@rollup/pluginutils': 4.2.1 - '@swc/core': 1.3.32 - acorn: 8.8.2 - autoprefixer: 10.4.13_postcss@8.4.31 - build-scripts: 2.1.0 - cac: 6.7.14 - chokidar: 3.5.3 + '@ice/bundles': 0.1.16_oikrtulvecolg3hvcan4tch6ku + '@ice/route-manifest': 1.2.2 + '@ice/rspack-config': 1.0.5_oikrtulvecolg3hvcan4tch6ku + '@ice/runtime': 1.3.1 + '@ice/shared-config': 1.1.0_oikrtulvecolg3hvcan4tch6ku + '@ice/webpack-config': 1.1.4_oikrtulvecolg3hvcan4tch6ku + '@swc/helpers': 0.5.1 + '@types/express': 4.17.17 + address: 1.2.2 + build-scripts: 2.1.2-0 + chalk: 4.1.2 + commander: 9.5.0 consola: 2.15.3 - debug: 4.3.4 - deepmerge: 4.3.0 - escape-string-regexp: 5.0.0 + cross-spawn: 7.0.3 + detect-port: 1.5.1 + dotenv: 16.0.3 + dotenv-expand: 8.0.3 + ejs: 3.1.8 + fast-glob: 3.3.0 + find-up: 5.0.0 fs-extra: 10.1.0 - globby: 11.1.0 - gzip-size: 7.0.0 - lodash.merge: 4.6.2 - magic-string: 0.25.9 - picocolors: 1.0.0 - postcss: 8.4.31 - rollup: 2.79.1 - rollup-plugin-styles: 4.0.0_rollup@2.79.1 - rollup-plugin-visualizer: 5.9.0_rollup@2.79.1 - tsc-alias: 1.8.5 - typescript: 4.9.5 + micromatch: 4.0.5 + mlly: 1.1.1 + mrmime: 1.0.1 + open: 8.4.2 + path-to-regexp: 6.2.1 + regenerator-runtime: 0.13.11 + resolve.exports: 1.1.1 + semver: 7.4.0 + source-map-support: 0.5.21 + temp: 0.9.4 + yargs-parser: 21.1.1 transitivePeerDependencies: + - '@types/webpack' + - bufferutil + - debug + - sockjs-client - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve dev: true - /@ice/sandbox/1.1.4: - resolution: {integrity: sha512-MEVF0Ze3McKDutnFiUAhUoc+WwOFxITVBgSSHmbGpKtWbXJX9kUVlx3VsEVJvdqU3O1kiBNx6zE1sFMjKPRTIQ==} - dev: false - - /@ice/stark-app/1.5.0: - resolution: {integrity: sha512-9fuCri48eZj6TnfPkCju4vVLhGurz+mt6lFx4JQFHhnRBQ5MuiBqRZg5F/3vdnJ7dAYQJlCXmHlQtBHok82z+g==} - dev: false - - /@ice/stark/2.7.5: - resolution: {integrity: sha512-HyV3/6PtTfNiKBkncztunpjsWMBw/SyQ24TvrYLnpkuSmrlZ9t0/jkJWuaM6nGpAufyZ62YfQ2Tn032So9OeIg==} + /@ice/app/3.3.5_ls5vlc7kphql6b6gtepk5p7cmu: + resolution: {integrity: sha512-loVbr/CqH5suvWchw/mvbLS/yfO/qsxOx/KvcmdQYA8Unr0J1fYHrBFlYbKmpJe0aEDnSfSzDKebJsbyDTKGJQ==} + engines: {node: '>=14.19.0', npm: '>=3.0.0'} + hasBin: true + requiresBuild: true peerDependencies: - react: '>=15.0.0' + react: '>=18.0.0' + react-dom: '>=18.0.0' dependencies: - '@ice/sandbox': 1.1.4 - lodash.isempty: 4.4.0 - lodash.isequal: 4.5.0 - path-to-regexp: 1.8.0 - url-parse: 1.5.10 - dev: false + '@ice/bundles': 0.1.16_4mgkpocji6i4c7t543qhprlmp4 + '@ice/route-manifest': 1.2.2 + '@ice/rspack-config': 1.0.5_4mgkpocji6i4c7t543qhprlmp4 + '@ice/runtime': 1.3.1 + '@ice/shared-config': 1.1.0_4mgkpocji6i4c7t543qhprlmp4 + '@ice/webpack-config': 1.1.4_4mgkpocji6i4c7t543qhprlmp4 + '@swc/helpers': 0.5.1 + '@types/express': 4.17.17 + address: 1.2.2 + build-scripts: 2.1.2-0 + chalk: 4.1.2 + commander: 9.5.0 + consola: 2.15.3 + cross-spawn: 7.0.3 + detect-port: 1.5.1 + dotenv: 16.0.3 + dotenv-expand: 8.0.3 + ejs: 3.1.8 + fast-glob: 3.3.0 + find-up: 5.0.0 + fs-extra: 10.1.0 + micromatch: 4.0.5 + mlly: 1.1.1 + mrmime: 1.0.1 + open: 8.4.2 + path-to-regexp: 6.2.1 + regenerator-runtime: 0.13.11 + resolve.exports: 1.1.1 + semver: 7.4.0 + source-map-support: 0.5.21 + temp: 0.9.4 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true - /@ice/store/2.0.3_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-U1YcY380bejqc3+WtkEqIwE6HnjBjSKd4IWFyq8gakPeAvA6fEJ58Qx9hzscYxlogWbiCb0Wm9kqkcDU+njx7g==} + /@ice/app/3.3.5_webpack@5.88.2: + resolution: {integrity: sha512-loVbr/CqH5suvWchw/mvbLS/yfO/qsxOx/KvcmdQYA8Unr0J1fYHrBFlYbKmpJe0aEDnSfSzDKebJsbyDTKGJQ==} + engines: {node: '>=14.19.0', npm: '>=3.0.0'} + hasBin: true + requiresBuild: true peerDependencies: - react: ^16.8 || ^17 || ^18 + react: '>=18.0.0' + react-dom: '>=18.0.0' dependencies: - immer: 9.0.19 - lodash.isfunction: 3.0.9 - react: 18.2.0 - react-redux: 7.2.9_biqbaboplfbrettd7655fr4n2y - redux: 4.2.1 - redux-thunk: 2.4.2_redux@4.2.1 - transitivePeerDependencies: - - react-dom - - react-native - dev: false - - /@ice/swc-plugin-keep-export/0.2.0: - resolution: {integrity: sha512-N3tg4BOV78jZSR/9CypJf5YzHxrNi40dNlUAwFjf7nr9pzMvVlo9bZM0I/A9l6J9vMff/5mgtkW5+JiMYdyjig==} - dev: false - - /@ice/swc-plugin-node-transform/0.2.0: - resolution: {integrity: sha512-06NtOUGVAUKP1eQXGMkaIZpNl9d5RK6SB6xQJsMY/DIso8WnwymyN7hmoFXPzX0eFkhmQEc7jzJ7NDBXaXRqWQ==} - dev: false - - /@ice/swc-plugin-react-server-component/0.1.1: - resolution: {integrity: sha512-3FdXOZ7HTBHY+DKQXDpzqV10ngfl0ifffc7HFV0P4YPLfvEJjT0RxIZJW1QwRZ3QeB2ph4zvXfdBG1lYTzT58Q==} - dev: false + '@ice/bundles': 0.1.16_nybtr22olkopkms5hv7r5oud4i + '@ice/route-manifest': 1.2.2 + '@ice/rspack-config': 1.0.5_nybtr22olkopkms5hv7r5oud4i + '@ice/runtime': 1.3.1 + '@ice/shared-config': 1.1.0_nybtr22olkopkms5hv7r5oud4i + '@ice/webpack-config': 1.1.4_nybtr22olkopkms5hv7r5oud4i + '@swc/helpers': 0.5.1 + '@types/express': 4.17.17 + address: 1.2.2 + build-scripts: 2.1.2-0 + chalk: 4.1.2 + commander: 9.5.0 + consola: 2.15.3 + cross-spawn: 7.0.3 + detect-port: 1.5.1 + dotenv: 16.0.3 + dotenv-expand: 8.0.3 + ejs: 3.1.8 + fast-glob: 3.3.0 + find-up: 5.0.0 + fs-extra: 10.1.0 + micromatch: 4.0.5 + mlly: 1.1.1 + mrmime: 1.0.1 + open: 8.4.2 + path-to-regexp: 6.2.1 + regenerator-runtime: 0.13.11 + resolve.exports: 1.1.1 + semver: 7.4.0 + source-map-support: 0.5.21 + temp: 0.9.4 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/bundles/0.1.16_4mgkpocji6i4c7t543qhprlmp4: + resolution: {integrity: sha512-1wpmStho4gUplggwERopzmIz2NkEaRwnzta7ZpoNBzCM/KaTI9FvbTGuty087kQq81uu4mFfozYS+Bw6kk6bVA==} + dependencies: + '@ice/css-modules-hash': 0.0.6 + '@ice/swc-plugin-keep-export': 0.2.0 + '@ice/swc-plugin-node-transform': 0.2.0 + '@ice/swc-plugin-remove-export': 0.2.0 + '@rspack/core': 0.3.0_ls5vlc7kphql6b6gtepk5p7cmu + '@rspack/dev-server': 0.3.0_xwlm2ukmbpiz7ykxwfclqtcmji + '@swc/core': 1.3.80_@swc+helpers@0.5.1 + ansi-html-community: 0.0.8 + caniuse-lite: 1.0.30001462 + chokidar: 3.5.3 + core-js: 3.32.0 + core-js-pure: 3.29.0 + error-stack-parser: 2.1.4 + esbuild: 0.17.16 + events: 3.3.0 + html-entities: 2.3.3 + jest-worker: 27.5.1 + less: 4.1.2 + postcss: 8.4.12 + react-refresh: 0.14.0 + sass: 1.50.0 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/bundles/0.1.16_nybtr22olkopkms5hv7r5oud4i: + resolution: {integrity: sha512-1wpmStho4gUplggwERopzmIz2NkEaRwnzta7ZpoNBzCM/KaTI9FvbTGuty087kQq81uu4mFfozYS+Bw6kk6bVA==} + dependencies: + '@ice/css-modules-hash': 0.0.6 + '@ice/swc-plugin-keep-export': 0.2.0 + '@ice/swc-plugin-node-transform': 0.2.0 + '@ice/swc-plugin-remove-export': 0.2.0 + '@rspack/core': 0.3.0_webpack@5.88.2 + '@rspack/dev-server': 0.3.0_xwlm2ukmbpiz7ykxwfclqtcmji + '@swc/core': 1.3.80_@swc+helpers@0.5.1 + ansi-html-community: 0.0.8 + caniuse-lite: 1.0.30001462 + chokidar: 3.5.3 + core-js: 3.32.0 + core-js-pure: 3.29.0 + error-stack-parser: 2.1.4 + esbuild: 0.17.16 + events: 3.3.0 + html-entities: 2.3.3 + jest-worker: 27.5.1 + less: 4.1.2 + postcss: 8.4.12 + react-refresh: 0.14.0 + sass: 1.50.0 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/bundles/0.1.16_oikrtulvecolg3hvcan4tch6ku: + resolution: {integrity: sha512-1wpmStho4gUplggwERopzmIz2NkEaRwnzta7ZpoNBzCM/KaTI9FvbTGuty087kQq81uu4mFfozYS+Bw6kk6bVA==} + dependencies: + '@ice/css-modules-hash': 0.0.6 + '@ice/swc-plugin-keep-export': 0.2.0 + '@ice/swc-plugin-node-transform': 0.2.0 + '@ice/swc-plugin-remove-export': 0.2.0 + '@rspack/core': 0.3.0 + '@rspack/dev-server': 0.3.0_xwlm2ukmbpiz7ykxwfclqtcmji + '@swc/core': 1.3.80_@swc+helpers@0.5.1 + ansi-html-community: 0.0.8 + caniuse-lite: 1.0.30001462 + chokidar: 3.5.3 + core-js: 3.32.0 + core-js-pure: 3.29.0 + error-stack-parser: 2.1.4 + esbuild: 0.17.16 + events: 3.3.0 + html-entities: 2.3.3 + jest-worker: 27.5.1 + less: 4.1.2 + postcss: 8.4.12 + react-refresh: 0.14.0 + sass: 1.50.0 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/css-modules-hash-darwin-arm64/0.0.6: + resolution: {integrity: sha512-5QWZl3+biY5U/kRhymH+6X/kAk3Imvkqu9QpV+LTDxhoXEkdhzZd2sCO5ZNfrsODFuHy78iKzh6gEweADPwYkQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@ice/css-modules-hash-darwin-universal/0.0.6: + resolution: {integrity: sha512-PLmDCFZHvpNysvMhUa363QWvgCMIwr6vYwEkHkC/AF9NZvl25r2R9mfdExHw8sZHu9fMHVINwWEBcMiYbZd/cg==} + engines: {node: '>= 10'} + os: [darwin] + requiresBuild: true + optional: true + + /@ice/css-modules-hash-darwin-x64/0.0.6: + resolution: {integrity: sha512-HOmh+Yiw6rH9VJD2XBN7sZmigo+jwi7qAD/J12pbxVrMJ//aIsv3BwpgFhfGO8eqKeyVqNXac3S/vC2hq8t8jw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@ice/css-modules-hash-linux-x64-gnu/0.0.6: + resolution: {integrity: sha512-PS7lTINETFqzbU0nbgLgxXJOp+BU51VvNeNEF1h6Xz6soR23yqFht6d8xuNC1auBnPHZM+RDiQYzwi9MCBTvgA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@ice/css-modules-hash-linux-x64-musl/0.0.6: + resolution: {integrity: sha512-UiDg8KpoDGmQrBt9z5lqjr+OAG2S2xQi00Unt2yali1dvhS1tpcN16isiBA2yO3JOy2b0Y0VtlmpJKxpMDsFcg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@ice/css-modules-hash-win32-arm64-msvc/0.0.6: + resolution: {integrity: sha512-7rF1gX9QyhhGUo4JKZUQ6DSJs/xJiJlrKC9D91dkTHs81e0G6IQLv9EnIaX2OPF3/SPnqp7CAGxr7TOtDYsyAw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + + /@ice/css-modules-hash-win32-x64-msvc/0.0.6: + resolution: {integrity: sha512-on3tYfhvBW6XQ6tkE0KKZvFK0JB/iwBrvUiRo/Di3ceJPPwD619PJNNQnn78kqcrZIVdQZ41HMdyuEnz8UHVpQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@ice/css-modules-hash/0.0.6: + resolution: {integrity: sha512-UbYq2Ldw+hamc9HoIfKTZORmmYCaGnP6f361XdB/7PQZHZ5hAak6TePdcVQekLHGEg/+zIccN33mflJqucC1Aw==} + engines: {node: '>= 10'} + optionalDependencies: + '@ice/css-modules-hash-darwin-arm64': 0.0.6 + '@ice/css-modules-hash-darwin-universal': 0.0.6 + '@ice/css-modules-hash-darwin-x64': 0.0.6 + '@ice/css-modules-hash-linux-x64-gnu': 0.0.6 + '@ice/css-modules-hash-linux-x64-musl': 0.0.6 + '@ice/css-modules-hash-win32-arm64-msvc': 0.0.6 + '@ice/css-modules-hash-win32-x64-msvc': 0.0.6 + + /@ice/jsx-runtime/0.2.2: + resolution: {integrity: sha512-RKwn3QgqualrWz+HxGZh7gS5lmCHIwvF6oVRsZbUI6Ekll98RrgGGvUvkn1SdSF7fYqWOG4ZA4neplBCJqf4NA==} + peerDependencies: + react: ^16 || ^17 || ^18 + dependencies: + style-unit: 3.0.5 + dev: true + + /@ice/jsx-runtime/0.2.2_react@18.2.0: + resolution: {integrity: sha512-RKwn3QgqualrWz+HxGZh7gS5lmCHIwvF6oVRsZbUI6Ekll98RrgGGvUvkn1SdSF7fYqWOG4ZA4neplBCJqf4NA==} + peerDependencies: + react: ^16 || ^17 || ^18 + dependencies: + react: 18.2.0 + style-unit: 3.0.5 + dev: false + + /@ice/pkg/1.5.5: + resolution: {integrity: sha512-0BIfv6Uzs2wpHv7RmFwz+kWfoJLfx0yJrQyh3yqy+F6TZWxTwrqQmX+5yRmgqK5f7lGGhYfMMVNWjRSCw5MHPQ==} + engines: {node: '>=16.14.0'} + hasBin: true + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/core': 7.21.0 + '@babel/parser': 7.21.2 + '@babel/preset-react': 7.18.6_@babel+core@7.21.0 + '@babel/preset-typescript': 7.21.0_@babel+core@7.21.0 + '@rollup/plugin-commonjs': 21.1.0_rollup@2.79.1 + '@rollup/plugin-image': 3.0.2_rollup@2.79.1 + '@rollup/plugin-json': 4.1.0_rollup@2.79.1 + '@rollup/plugin-node-resolve': 13.3.0_rollup@2.79.1 + '@rollup/plugin-replace': 5.0.2_rollup@2.79.1 + '@rollup/pluginutils': 4.2.1 + '@swc/core': 1.3.32 + acorn: 8.8.2 + autoprefixer: 10.4.13_postcss@8.4.25 + build-scripts: 2.1.0 + cac: 6.7.14 + chokidar: 3.5.3 + consola: 2.15.3 + debug: 4.3.4 + deepmerge: 4.3.0 + escape-string-regexp: 5.0.0 + fs-extra: 10.1.0 + globby: 11.1.0 + gzip-size: 7.0.0 + lodash.merge: 4.6.2 + magic-string: 0.25.9 + picocolors: 1.0.0 + postcss: 8.4.25 + rollup: 2.79.1 + rollup-plugin-styles: 4.0.0_rollup@2.79.1 + rollup-plugin-visualizer: 5.9.0_rollup@2.79.1 + tsc-alias: 1.8.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@ice/route-manifest/1.2.2: + resolution: {integrity: sha512-wu8qg/3MKnUkldOIq8fJYwnMoc2YmtQ/ry2OeQdnrHK8S+H4gbwR3uRseioKfoUhpMw0Ds7bjVDLX3ucGY078Q==} + dependencies: + minimatch: 5.1.6 + dev: true + + /@ice/rspack-config/1.0.5_4mgkpocji6i4c7t543qhprlmp4: + resolution: {integrity: sha512-dMvsK36Q3IzQGyT32b6fGpg7Rwla57jvo/gaQoQ8N5Zg+hnnTgSbfSj23/QaN82CxxnnSKCjsFlXeBA4tcDeBA==} + dependencies: + '@ice/bundles': 0.1.16_4mgkpocji6i4c7t543qhprlmp4 + '@ice/shared-config': 1.1.0_4mgkpocji6i4c7t543qhprlmp4 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/rspack-config/1.0.5_nybtr22olkopkms5hv7r5oud4i: + resolution: {integrity: sha512-dMvsK36Q3IzQGyT32b6fGpg7Rwla57jvo/gaQoQ8N5Zg+hnnTgSbfSj23/QaN82CxxnnSKCjsFlXeBA4tcDeBA==} + dependencies: + '@ice/bundles': 0.1.16_nybtr22olkopkms5hv7r5oud4i + '@ice/shared-config': 1.1.0_nybtr22olkopkms5hv7r5oud4i + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/rspack-config/1.0.5_oikrtulvecolg3hvcan4tch6ku: + resolution: {integrity: sha512-dMvsK36Q3IzQGyT32b6fGpg7Rwla57jvo/gaQoQ8N5Zg+hnnTgSbfSj23/QaN82CxxnnSKCjsFlXeBA4tcDeBA==} + dependencies: + '@ice/bundles': 0.1.16_oikrtulvecolg3hvcan4tch6ku + '@ice/shared-config': 1.1.0_oikrtulvecolg3hvcan4tch6ku + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/runtime/1.3.1: + resolution: {integrity: sha512-Bil7i9KQF1Mu8BaT9eHvSEDk36/eYvhKQ16L6QEfiEu/rKB7AjcV38RK5q1RH8SYRQP6rdqH9z7OLsVxZjqOVA==} + requiresBuild: true + peerDependencies: + react: ^18.1.0 + react-dom: ^18.1.0 + dependencies: + '@ice/jsx-runtime': 0.2.2 + '@ice/shared': 1.0.2 + '@remix-run/router': 1.7.2 + abortcontroller-polyfill: 1.7.5 + ejs: 3.1.8 + fs-extra: 10.1.0 + history: 5.3.0 + htmlparser2: 8.0.1 + react-router-dom: 6.14.2 + semver: 7.4.0 + source-map: 0.7.4 + dev: true + + /@ice/runtime/1.3.1_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-Bil7i9KQF1Mu8BaT9eHvSEDk36/eYvhKQ16L6QEfiEu/rKB7AjcV38RK5q1RH8SYRQP6rdqH9z7OLsVxZjqOVA==} + requiresBuild: true + peerDependencies: + react: ^18.1.0 + react-dom: ^18.1.0 + dependencies: + '@ice/jsx-runtime': 0.2.2_react@18.2.0 + '@ice/shared': 1.0.2 + '@remix-run/router': 1.7.2 + abortcontroller-polyfill: 1.7.5 + ejs: 3.1.8 + fs-extra: 10.1.0 + history: 5.3.0 + htmlparser2: 8.0.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-router-dom: 6.14.2_biqbaboplfbrettd7655fr4n2y + semver: 7.4.0 + source-map: 0.7.4 + dev: false + + /@ice/runtime/1.3.1_react@18.2.0: + resolution: {integrity: sha512-Bil7i9KQF1Mu8BaT9eHvSEDk36/eYvhKQ16L6QEfiEu/rKB7AjcV38RK5q1RH8SYRQP6rdqH9z7OLsVxZjqOVA==} + requiresBuild: true + peerDependencies: + react: ^18.1.0 + react-dom: ^18.1.0 + dependencies: + '@ice/jsx-runtime': 0.2.2_react@18.2.0 + '@ice/shared': 1.0.2 + '@remix-run/router': 1.7.2 + abortcontroller-polyfill: 1.7.5 + ejs: 3.1.8 + fs-extra: 10.1.0 + history: 5.3.0 + htmlparser2: 8.0.1 + react: 18.2.0 + react-router-dom: 6.14.2_react@18.2.0 + semver: 7.4.0 + source-map: 0.7.4 + dev: false + + /@ice/sandbox/1.1.4: + resolution: {integrity: sha512-MEVF0Ze3McKDutnFiUAhUoc+WwOFxITVBgSSHmbGpKtWbXJX9kUVlx3VsEVJvdqU3O1kiBNx6zE1sFMjKPRTIQ==} + dev: false + + /@ice/shared-config/1.1.0_4mgkpocji6i4c7t543qhprlmp4: + resolution: {integrity: sha512-5llovTXzFFPyCZNVV+i1LcC6M8FLjNK3v8Y9DmeL2jtOyB+jBMlkCWRALPE6qsSoeJG1T41MfrDyaeIs8CY2kA==} + dependencies: + '@ice/bundles': 0.1.16_4mgkpocji6i4c7t543qhprlmp4 + '@rollup/pluginutils': 4.2.1 + browserslist: 4.21.5 + consola: 2.15.3 + fast-glob: 3.3.0 + process: 0.11.10 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/shared-config/1.1.0_nybtr22olkopkms5hv7r5oud4i: + resolution: {integrity: sha512-5llovTXzFFPyCZNVV+i1LcC6M8FLjNK3v8Y9DmeL2jtOyB+jBMlkCWRALPE6qsSoeJG1T41MfrDyaeIs8CY2kA==} + dependencies: + '@ice/bundles': 0.1.16_nybtr22olkopkms5hv7r5oud4i + '@rollup/pluginutils': 4.2.1 + browserslist: 4.21.5 + consola: 2.15.3 + fast-glob: 3.3.0 + process: 0.11.10 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/shared-config/1.1.0_oikrtulvecolg3hvcan4tch6ku: + resolution: {integrity: sha512-5llovTXzFFPyCZNVV+i1LcC6M8FLjNK3v8Y9DmeL2jtOyB+jBMlkCWRALPE6qsSoeJG1T41MfrDyaeIs8CY2kA==} + dependencies: + '@ice/bundles': 0.1.16_oikrtulvecolg3hvcan4tch6ku + '@rollup/pluginutils': 4.2.1 + browserslist: 4.21.5 + consola: 2.15.3 + fast-glob: 3.3.0 + process: 0.11.10 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/shared/1.0.2: + resolution: {integrity: sha512-fSSTUzQEqodKsnvIFShJujp8qljCd88QjfEDJ9JIGgeHQfanMjZeL8s+jwI4o6L0oYl6Xg0hh/3UTIJ1Xar7KQ==} + + /@ice/stark-app/1.5.0: + resolution: {integrity: sha512-9fuCri48eZj6TnfPkCju4vVLhGurz+mt6lFx4JQFHhnRBQ5MuiBqRZg5F/3vdnJ7dAYQJlCXmHlQtBHok82z+g==} + dev: false + + /@ice/stark/2.7.5: + resolution: {integrity: sha512-HyV3/6PtTfNiKBkncztunpjsWMBw/SyQ24TvrYLnpkuSmrlZ9t0/jkJWuaM6nGpAufyZ62YfQ2Tn032So9OeIg==} + peerDependencies: + react: '>=15.0.0' + dependencies: + '@ice/sandbox': 1.1.4 + lodash.isempty: 4.4.0 + lodash.isequal: 4.5.0 + path-to-regexp: 1.8.0 + url-parse: 1.5.10 + dev: false + + /@ice/store/2.0.3_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-U1YcY380bejqc3+WtkEqIwE6HnjBjSKd4IWFyq8gakPeAvA6fEJ58Qx9hzscYxlogWbiCb0Wm9kqkcDU+njx7g==} + peerDependencies: + react: ^16.8 || ^17 || ^18 + dependencies: + immer: 9.0.19 + lodash.isfunction: 3.0.9 + react: 18.2.0 + react-redux: 7.2.9_biqbaboplfbrettd7655fr4n2y + redux: 4.2.1 + redux-thunk: 2.4.2_redux@4.2.1 + transitivePeerDependencies: + - react-dom + - react-native + dev: false + + /@ice/swc-plugin-keep-export/0.2.0: + resolution: {integrity: sha512-N3tg4BOV78jZSR/9CypJf5YzHxrNi40dNlUAwFjf7nr9pzMvVlo9bZM0I/A9l6J9vMff/5mgtkW5+JiMYdyjig==} + + /@ice/swc-plugin-node-transform/0.2.0: + resolution: {integrity: sha512-06NtOUGVAUKP1eQXGMkaIZpNl9d5RK6SB6xQJsMY/DIso8WnwymyN7hmoFXPzX0eFkhmQEc7jzJ7NDBXaXRqWQ==} + + /@ice/swc-plugin-react-server-component/0.1.1: + resolution: {integrity: sha512-3FdXOZ7HTBHY+DKQXDpzqV10ngfl0ifffc7HFV0P4YPLfvEJjT0RxIZJW1QwRZ3QeB2ph4zvXfdBG1lYTzT58Q==} + dev: false /@ice/swc-plugin-remove-export/0.2.0: resolution: {integrity: sha512-kmyrCMtuEsS7J3rpENT5qUhhbuu3eldsN1WpJjtXX4rgogJ1+QmnAPjnhB0SWzr0/b5ArGfz83O6M+5NNGRd+A==} - dev: false + + /@ice/webpack-config/1.1.4_4mgkpocji6i4c7t543qhprlmp4: + resolution: {integrity: sha512-h+ckjRPEPVydvFyca7Mkc6I+mexR+A+1p+QBYK3CfJ2MBEpbZx2t8E6XfaOBes8BZ3ag7yBQDeGrpu9J7Ad+oQ==} + dependencies: + '@ice/bundles': 0.1.16_4mgkpocji6i4c7t543qhprlmp4 + '@ice/shared-config': 1.1.0_4mgkpocji6i4c7t543qhprlmp4 + fast-glob: 3.3.0 + process: 0.11.10 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/webpack-config/1.1.4_nybtr22olkopkms5hv7r5oud4i: + resolution: {integrity: sha512-h+ckjRPEPVydvFyca7Mkc6I+mexR+A+1p+QBYK3CfJ2MBEpbZx2t8E6XfaOBes8BZ3ag7yBQDeGrpu9J7Ad+oQ==} + dependencies: + '@ice/bundles': 0.1.16_nybtr22olkopkms5hv7r5oud4i + '@ice/shared-config': 1.1.0_nybtr22olkopkms5hv7r5oud4i + fast-glob: 3.3.0 + process: 0.11.10 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@ice/webpack-config/1.1.4_oikrtulvecolg3hvcan4tch6ku: + resolution: {integrity: sha512-h+ckjRPEPVydvFyca7Mkc6I+mexR+A+1p+QBYK3CfJ2MBEpbZx2t8E6XfaOBes8BZ3ag7yBQDeGrpu9J7Ad+oQ==} + dependencies: + '@ice/bundles': 0.1.16_oikrtulvecolg3hvcan4tch6ku + '@ice/shared-config': 1.1.0_oikrtulvecolg3hvcan4tch6ku + fast-glob: 3.3.0 + process: 0.11.10 + transitivePeerDependencies: + - '@swc/helpers' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack + - webpack-cli + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true /@iceworks/generate-project/2.0.2: resolution: {integrity: sha512-t7/uHl5kM71o+xyR+FnaPsgyFqhFQm89TdqPahM4Kv/ubdKDknFVUYLio1khMDGY8Ops0ahn/+KM+gFnHEKSQw==} @@ -6421,7 +7021,6 @@ packages: source-map: 0.7.4 webpack: 5.76.0_pur5qe7dhbhqwjtj2daaog4n7u webpack-dev-server: 4.13.1_webpack@5.76.0 - dev: false /@pmmmwh/react-refresh-webpack-plugin/0.5.10_p44l2xjftguod6ctnkuod3jp7e: resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} @@ -6540,6 +7139,45 @@ packages: webpack-dev-server: 4.11.1_webpack@5.88.2 dev: true + /@pmmmwh/react-refresh-webpack-plugin/0.5.10_wrxi7ct7dz7g7lwv6srrq7wgqy: + resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <4.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.29.0 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.3.3 + loader-utils: 2.0.4 + react-refresh: 0.14.0 + schema-utils: 3.1.1 + source-map: 0.7.4 + webpack: 5.88.2 + dev: true + /@pmmmwh/react-refresh-webpack-plugin/0.5.10_ynqbgb5bmgbvx2am6mt2h3lxsq: resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} engines: {node: '>= 10.13'} @@ -6993,6 +7631,35 @@ packages: - webpack-plugin-serve dev: true + /@rspack/core/0.3.0_webpack@5.88.2: + resolution: {integrity: sha512-YltE0AQimUMOSTIFuDP+BW2GoJsabrig/GmgCR1eDWlVeKlmGJ6wd2GdYjmW5TWdH6FBQPQ3YfU8GOB4XWsvgQ==} + dependencies: + '@rspack/binding': 0.3.0 + '@rspack/dev-client': 0.3.0_wrxi7ct7dz7g7lwv6srrq7wgqy + '@swc/helpers': 0.5.1 + browserslist: 4.21.5 + compare-versions: 6.0.0-rc.1 + enhanced-resolve: 5.12.0 + graceful-fs: 4.2.10 + neo-async: 2.6.2 + react-refresh: 0.14.0 + schema-utils: 4.0.0 + tapable: 2.2.1 + util: 0.12.5 + watchpack: 2.4.0 + webpack-sources: 3.2.3 + zod: 3.21.4 + zod-validation-error: 1.2.0_zod@3.21.4 + transitivePeerDependencies: + - '@types/webpack' + - sockjs-client + - type-fest + - webpack + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + /@rspack/core/0.3.0_zur76qpjdwubwowmoyfe2ntqhe: resolution: {integrity: sha512-YltE0AQimUMOSTIFuDP+BW2GoJsabrig/GmgCR1eDWlVeKlmGJ6wd2GdYjmW5TWdH6FBQPQ3YfU8GOB4XWsvgQ==} dependencies: @@ -7040,7 +7707,6 @@ packages: - webpack-dev-server - webpack-hot-middleware - webpack-plugin-serve - dev: false /@rspack/dev-client/0.3.0_p44l2xjftguod6ctnkuod3jp7e: resolution: {integrity: sha512-nttTUBVctbh9auvPq91ThmjNDcBLj3kfLDjM/O1jBYA3xTz9MNsTN3rInLOb4S2fWEsSBLz7CVsNLP7LWtUecA==} @@ -7101,6 +7767,26 @@ packages: - webpack-plugin-serve dev: true + /@rspack/dev-client/0.3.0_wrxi7ct7dz7g7lwv6srrq7wgqy: + resolution: {integrity: sha512-nttTUBVctbh9auvPq91ThmjNDcBLj3kfLDjM/O1jBYA3xTz9MNsTN3rInLOb4S2fWEsSBLz7CVsNLP7LWtUecA==} + peerDependencies: + react-refresh: '>=0.10.0 <1.0.0' + peerDependenciesMeta: + react-refresh: + optional: true + dependencies: + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_wrxi7ct7dz7g7lwv6srrq7wgqy + react-refresh: 0.14.0 + transitivePeerDependencies: + - '@types/webpack' + - sockjs-client + - type-fest + - webpack + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + /@rspack/dev-client/0.3.0_ynqbgb5bmgbvx2am6mt2h3lxsq: resolution: {integrity: sha512-nttTUBVctbh9auvPq91ThmjNDcBLj3kfLDjM/O1jBYA3xTz9MNsTN3rInLOb4S2fWEsSBLz7CVsNLP7LWtUecA==} peerDependencies: @@ -7153,21 +7839,55 @@ packages: - webpack-cli - webpack-hot-middleware - webpack-plugin-serve - dev: false + dev: false + + /@rspack/dev-server/0.3.0_saarlyqjwgcwik7cbeuxgtrvdm: + resolution: {integrity: sha512-aKY1mUP1PdOWXDvxpUA14mEE7p+IFYnU67i7cAUh361z2/v5KbCTngt521ly8H1LqJv3SJIoEXqSqNc8c62Dsg==} + peerDependencies: + '@rspack/core': '*' + dependencies: + '@rspack/core': 0.3.0_ls5vlc7kphql6b6gtepk5p7cmu + '@rspack/dev-client': 0.3.0_p44l2xjftguod6ctnkuod3jp7e + chokidar: 3.5.3 + connect-history-api-fallback: 2.0.0 + express: 4.18.1 + http-proxy-middleware: 2.0.6_@types+express@4.17.17 + mime-types: 2.1.35 + webpack: 5.76.0_esbuild@0.17.16 + webpack-dev-middleware: 6.0.2_webpack@5.76.0 + webpack-dev-server: 4.13.1_webpack@5.76.0 + ws: 8.8.1 + transitivePeerDependencies: + - '@swc/core' + - '@types/express' + - '@types/webpack' + - bufferutil + - debug + - esbuild + - react-refresh + - sockjs-client + - supports-color + - type-fest + - uglify-js + - utf-8-validate + - webpack-cli + - webpack-hot-middleware + - webpack-plugin-serve + dev: true - /@rspack/dev-server/0.3.0_saarlyqjwgcwik7cbeuxgtrvdm: + /@rspack/dev-server/0.3.0_xwlm2ukmbpiz7ykxwfclqtcmji: resolution: {integrity: sha512-aKY1mUP1PdOWXDvxpUA14mEE7p+IFYnU67i7cAUh361z2/v5KbCTngt521ly8H1LqJv3SJIoEXqSqNc8c62Dsg==} peerDependencies: '@rspack/core': '*' dependencies: - '@rspack/core': 0.3.0_ls5vlc7kphql6b6gtepk5p7cmu - '@rspack/dev-client': 0.3.0_p44l2xjftguod6ctnkuod3jp7e + '@rspack/core': 0.3.0 + '@rspack/dev-client': 0.3.0_4p7fys4vpjth4wnvvzaxfza3hm chokidar: 3.5.3 connect-history-api-fallback: 2.0.0 express: 4.18.1 http-proxy-middleware: 2.0.6_@types+express@4.17.17 mime-types: 2.1.35 - webpack: 5.76.0_esbuild@0.17.16 + webpack: 5.76.0_yt3h3qjhcnsf3663codtuni62a webpack-dev-middleware: 6.0.2_webpack@5.76.0 webpack-dev-server: 4.13.1_webpack@5.76.0 ws: 8.8.1 @@ -7500,6 +8220,15 @@ packages: dev: true optional: true + /@swc/core-darwin-arm64/1.3.80: + resolution: {integrity: sha512-rhoFTcQMUGfO7IkfOnopPSF6O0/aVJ58B7KueIKbvrMe6YvSfFj9QfObELFjYCcrJZTvUWBhig0QrsfPIiUphA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@swc/core-darwin-arm64/1.3.85: resolution: {integrity: sha512-jTikp+i4nO4Ofe6qGm4I3sFeebD1OvueBCHITux5tQKD6umN1c2z4CRGv6K49NIz/qEpUcdr6Qny6K+3yibVFQ==} engines: {node: '>=10'} @@ -7517,6 +8246,15 @@ packages: dev: true optional: true + /@swc/core-darwin-x64/1.3.80: + resolution: {integrity: sha512-0dOLedFpVXe+ugkKHXsqSxMKqvQYfFtibWbrZ7j8wOaErzSGPr0VpyWvepNVb9s046725kPXSw+fsGhqZR8wrw==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@swc/core-darwin-x64/1.3.85: resolution: {integrity: sha512-3uHYkjVU+2F+YbVYtq5rH0uCJIztFTALaS3mQEfQUZKXZ5/8jD5titTCRqFKtSlQg0CzaFZgsYsuqwYBmgN0mA==} engines: {node: '>=10'} @@ -7534,6 +8272,15 @@ packages: dev: true optional: true + /@swc/core-linux-arm-gnueabihf/1.3.80: + resolution: {integrity: sha512-QIjwP3PtDeHBDkwF6+ZZqdUsqAhORbMpxrw2jq3mHe4lQrxBttSFTq018vlMRo2mFEorOvXdadzaD9m+NymPrw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@swc/core-linux-arm-gnueabihf/1.3.85: resolution: {integrity: sha512-ouHzAHsFaEOkRuoTAOI/8n2m8BQAAnb4vr/xbMhhDOmix0lp5eNsW5Iac/EcJ2uG6B3n7P2K8oycj9SWkj+pfw==} engines: {node: '>=10'} @@ -7551,6 +8298,15 @@ packages: dev: true optional: true + /@swc/core-linux-arm64-gnu/1.3.80: + resolution: {integrity: sha512-cg8WriIueab58ZwkzXmIACnjSzFLzOBwxlC9k65gPXMNgCjab2YbqEYvAbjBqneuqaao02gW6tad2uhjgYaExw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@swc/core-linux-arm64-gnu/1.3.85: resolution: {integrity: sha512-/Z1CZOWiO+NqJEh1J20PIxQFHMH43upQJ1l7FJ5Z7+MyuYF8WkeJ7OSovau729pBR+38vvvccEJrMZIztfv7hQ==} engines: {node: '>=10'} @@ -7568,6 +8324,15 @@ packages: dev: true optional: true + /@swc/core-linux-arm64-musl/1.3.80: + resolution: {integrity: sha512-AhdCQ7QKx5mWrtpaOA1mFRiWWvuiiUtspvo0QSpspDetRKTND1rlf/3UB5+gp0kCeCNUTsVmJWU7fIA9ICZtXA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@swc/core-linux-arm64-musl/1.3.85: resolution: {integrity: sha512-gfh7CfKavi076dbMBTzfdawSGcYfZ4+1Q+8aRkSesqepKHcIWIJti8Cf3zB4a6CHNhJe+VN0Gb7DEfumydAm1w==} engines: {node: '>=10'} @@ -7585,6 +8350,15 @@ packages: dev: true optional: true + /@swc/core-linux-x64-gnu/1.3.80: + resolution: {integrity: sha512-+2e5oni1vOrLIjM5Q2/GIzK/uS2YEtuJqnjPvCK8SciRJsSl8OgVsRvyCDbmKeZNtJ2Q+o/O2AQ2w1qpAJG6jg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@swc/core-linux-x64-gnu/1.3.85: resolution: {integrity: sha512-lWVqjHKzofb9q1qrBM4dLqO7CIisp08/xMS5Hz9DWex1gTc5F2b6yJO6Ceqwa256GMweJcdP6A5EvEFQAiZ5dg==} engines: {node: '>=10'} @@ -7602,6 +8376,15 @@ packages: dev: true optional: true + /@swc/core-linux-x64-musl/1.3.80: + resolution: {integrity: sha512-8OK9IlI1zpWOm7vIp1iXmZSEzLAwFpqhsGSEhxPavpOx2m54kLFdPcw/Uv3n461f6TCtszIxkGq1kSqBUdfUBA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@swc/core-linux-x64-musl/1.3.85: resolution: {integrity: sha512-EPJmlfqC05TUetnlErxNRyIp7Nc3B2w9abET6oQ/EgldeAeQnZ3M6svMViET/c2QSomgrU3rdP+Qcozkt62/4A==} engines: {node: '>=10'} @@ -7619,6 +8402,15 @@ packages: dev: true optional: true + /@swc/core-win32-arm64-msvc/1.3.80: + resolution: {integrity: sha512-RKhatwiAGlffnF6z2Mm3Ddid0v3KB+uf5m/Gc7N9zO/EUAV0PnHRuYuZSGyqodHmGFC+mK8YrCooFCEmHL9n+w==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@swc/core-win32-arm64-msvc/1.3.85: resolution: {integrity: sha512-ibckJDZw8kNosciMexwk0z75ZyUhwtiFMV9rSBpup0opa7NNCUCoERCJ1e9LRyMdhsVUoLpZg/KZiHCdTw96hQ==} engines: {node: '>=10'} @@ -7636,6 +8428,15 @@ packages: dev: true optional: true + /@swc/core-win32-ia32-msvc/1.3.80: + resolution: {integrity: sha512-3jiiZzU/kaw7k4zUp1yMq1QiUe4wJVtCEXIhf+fKuBsIwm7rdvyK/+PIx5KHnZy4TGQnYczKBRhJA5nuBcrUCQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@swc/core-win32-ia32-msvc/1.3.85: resolution: {integrity: sha512-hY4MpHGUVQHL1T2kgRXOigDho4DTIpVPYzJ4uyy8VQRbS7GzN5XtvdGP/fA4zp8+2BQjcig+6J7Y92SY15ouNQ==} engines: {node: '>=10'} @@ -7653,6 +8454,15 @@ packages: dev: true optional: true + /@swc/core-win32-x64-msvc/1.3.80: + resolution: {integrity: sha512-2eZtIoIWQBWqykfms92Zd37lveYOBWQTZjdooBGlsLHtcoQLkNpf1NXmR6TKY0yy8q6Yl3OhPvY+izjmO08MSg==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@swc/core-win32-x64-msvc/1.3.85: resolution: {integrity: sha512-ktxWOMFJ0iqKn6WUHtXqi4CS7xkyHmrRtjllGRuGqxmLmDX/HSOfuQ55Tm1KXKk5oHLacJkUbOSF2kBrpZ8dpg==} engines: {node: '>=10'} @@ -7678,6 +8488,31 @@ packages: '@swc/core-win32-x64-msvc': 1.3.32 dev: true + /@swc/core/1.3.80_@swc+helpers@0.5.1: + resolution: {integrity: sha512-yX2xV5I/lYswHHR+44TPvzBgq3/Y8N1YWpTQADYuvSiX3Jxyvemk5Jpx3rRtigYb8WBkWAAf2i5d5ZJ2M7hhgw==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': ^0.5.0 + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@swc/helpers': 0.5.1 + '@swc/types': 0.1.4 + optionalDependencies: + '@swc/core-darwin-arm64': 1.3.80 + '@swc/core-darwin-x64': 1.3.80 + '@swc/core-linux-arm-gnueabihf': 1.3.80 + '@swc/core-linux-arm64-gnu': 1.3.80 + '@swc/core-linux-arm64-musl': 1.3.80 + '@swc/core-linux-x64-gnu': 1.3.80 + '@swc/core-linux-x64-musl': 1.3.80 + '@swc/core-win32-arm64-msvc': 1.3.80 + '@swc/core-win32-ia32-msvc': 1.3.80 + '@swc/core-win32-x64-msvc': 1.3.80 + dev: true + /@swc/core/1.3.85: resolution: {integrity: sha512-qnoxp+2O0GtvRdYnXgR1v8J7iymGGYpx6f6yCK9KxipOZOjrlKILFANYlghQxZyPUfXwK++TFxfSlX4r9wK+kg==} engines: {node: '>=10'} @@ -8432,7 +9267,6 @@ packages: /@uni/env/1.1.0: resolution: {integrity: sha512-2GVgUzxIaO2vGElXEuc45+I7L6Jbw8inLDDFuC0K4htjKtPmYywKSE6oDhvmdAXb4GCOH8hmxECYtAh1rjsgoQ==} - dev: false /@use-gesture/core/10.2.20: resolution: {integrity: sha512-4lFhHc8so4yIHkBEs641DnEsBxPyhJ5GEjB4PURFDH4p/FcZriH6w99knZgI63zN/MBFfylMyb8+PDuj6RIXKQ==} @@ -8706,7 +9540,6 @@ packages: /abortcontroller-polyfill/1.7.5: resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} - dev: false /accept-language-parser/1.5.0: resolution: {integrity: sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw==} @@ -9275,7 +10108,6 @@ packages: /async/3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: false /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -9290,6 +10122,22 @@ packages: hasBin: true dev: false + /autoprefixer/10.4.13_postcss@8.4.25: + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.5 + caniuse-lite: 1.0.30001462 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.25 + postcss-value-parser: 4.2.0 + dev: true + /autoprefixer/10.4.13_postcss@8.4.31: resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} engines: {node: ^10 || ^12 || >=14} @@ -11407,12 +12255,10 @@ packages: /dotenv-expand/8.0.3: resolution: {integrity: sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==} engines: {node: '>=12'} - dev: false /dotenv/16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} - dev: false /dts-bundle/0.7.3: resolution: {integrity: sha512-EEAEuPRk8QyKhoN90NHTh+spSQujkkvOnKWUfuzpmC/fgryiWopL1SegSktx0UsoPfNidIGVDN7/AXpBDBv0WQ==} @@ -11454,7 +12300,6 @@ packages: hasBin: true dependencies: jake: 10.8.5 - dev: false /electron-to-chromium/1.4.322: resolution: {integrity: sha512-KovjizNC9XB7dno/2GjxX8VS0SlfPpCjtyoKft+bCO+UfD8bFy16hY4Sh9s0h9BDxbRH2U0zX5VBjpM1LTcNlg==} @@ -12829,7 +13674,6 @@ packages: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.6 - dev: false /filesize/8.0.7: resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} @@ -14498,7 +15342,6 @@ packages: chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - dev: false /jest-changed-files/28.1.3: resolution: {integrity: sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==} @@ -15553,7 +16396,6 @@ packages: /jsonc-parser/3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: false /jsonfile/4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -16318,7 +17160,6 @@ packages: pathe: 1.1.0 pkg-types: 1.0.2 ufo: 1.1.1 - dev: false /moment/2.29.4: resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} @@ -16351,6 +17192,12 @@ packages: engines: {node: '>=12.0.0'} dev: true + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /nanoid/3.3.6: resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -16895,7 +17742,6 @@ packages: /path-to-regexp/6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} - dev: false /path-type/4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -16903,7 +17749,6 @@ packages: /pathe/1.1.0: resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} - dev: false /pathval/1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} @@ -16960,7 +17805,6 @@ packages: jsonc-parser: 3.2.0 mlly: 1.1.1 pathe: 1.1.0 - dev: false /pkg-up/3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} @@ -17815,9 +18659,27 @@ packages: source-map: 0.6.1 dev: false + /postcss/8.4.12: + resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /postcss/8.4.21: resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /postcss/8.4.25: + resolution: {integrity: sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 picocolors: 1.0.0 @@ -17917,7 +18779,6 @@ packages: /process/0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - dev: false /progress/2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} @@ -19327,6 +20188,17 @@ packages: tiny-invariant: 1.3.1 tiny-warning: 1.0.3 + /react-router-dom/6.14.2: + resolution: {integrity: sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + '@remix-run/router': 1.7.2 + react-router: 6.14.2 + dev: true + /react-router-dom/6.14.2_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==} engines: {node: '>=14'} @@ -19340,6 +20212,18 @@ packages: react-router: 6.14.2_react@18.2.0 dev: false + /react-router-dom/6.14.2_react@18.2.0: + resolution: {integrity: sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + '@remix-run/router': 1.7.2 + react: 18.2.0 + react-router: 6.14.2_react@18.2.0 + dev: false + /react-router/5.3.4_react@17.0.2: resolution: {integrity: sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==} peerDependencies: @@ -19356,6 +20240,15 @@ packages: tiny-invariant: 1.3.1 tiny-warning: 1.0.3 + /react-router/6.14.2: + resolution: {integrity: sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8' + dependencies: + '@remix-run/router': 1.7.2 + dev: true + /react-router/6.14.2_react@18.2.0: resolution: {integrity: sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==} engines: {node: '>=14'} @@ -19365,7 +20258,7 @@ packages: '@remix-run/router': 1.7.2 react: 18.2.0 - /react-server-dom-webpack/18.3.0-canary-dd480ef92-20230822_webpack@5.88.2: + /react-server-dom-webpack/18.3.0-canary-dd480ef92-20230822_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-vBIBAkrOMrqZZGKgjSY9ly82YgZrmQgK4OOMBfMD5ZpAl58eifQFF18ZtVYNX9sLdPPi4MrizYfGjMaS9fP2VQ==} engines: {node: '>=0.10.0'} peerDependencies: @@ -19376,22 +20269,22 @@ packages: acorn-loose: 8.3.0 loose-envify: 1.4.0 neo-async: 2.6.2 - webpack: 5.88.2_pur5qe7dhbhqwjtj2daaog4n7u + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 dev: true - /react-server-dom-webpack/18.3.0-canary-e61a60fac-20231011_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-5QrTDm7L1wJulbQm05JcAw0TYM5zR2MHNEt/7jDRyL15S0/06G032QahaN1qcbUW29Shv0LTZq82jrA7aH+/dg==} + /react-server-dom-webpack/18.3.0-canary-dd480ef92-20230822_webpack@5.88.2: + resolution: {integrity: sha512-vBIBAkrOMrqZZGKgjSY9ly82YgZrmQgK4OOMBfMD5ZpAl58eifQFF18ZtVYNX9sLdPPi4MrizYfGjMaS9fP2VQ==} engines: {node: '>=0.10.0'} peerDependencies: - react: 18.3.0-canary-e61a60fac-20231011 - react-dom: 18.3.0-canary-e61a60fac-20231011 + react: 18.3.0-canary-dd480ef92-20230822 + react-dom: 18.3.0-canary-dd480ef92-20230822 webpack: ^5.59.0 dependencies: acorn-loose: 8.3.0 loose-envify: 1.4.0 neo-async: 2.6.2 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 + webpack: 5.88.2_pur5qe7dhbhqwjtj2daaog4n7u dev: true /react-textarea-autosize/8.4.0_h7fc2el62uaa77gho3xhys6ola: @@ -19887,7 +20780,6 @@ packages: hasBin: true dependencies: glob: 7.2.3 - dev: false /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -20815,7 +21707,6 @@ packages: dependencies: '@babel/runtime': 7.21.0 universal-env: 3.3.3 - dev: false /stylehacks/5.1.1_postcss@8.4.31: resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} @@ -21078,7 +21969,6 @@ packages: dependencies: mkdirp: 0.5.6 rimraf: 2.6.3 - dev: false /term-size/2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} @@ -21093,6 +21983,32 @@ packages: supports-hyperlinks: 2.3.0 dev: true + /terser-webpack-plugin/5.3.5_c2jhsnh755mj2bl6newvfwu7wy: + resolution: {integrity: sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.17 + '@swc/core': 1.3.80_@swc+helpers@0.5.1 + esbuild: 0.17.16 + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.1 + terser: 5.14.2 + webpack: 5.76.0_yt3h3qjhcnsf3663codtuni62a + dev: true + /terser-webpack-plugin/5.3.5_ghmre4bibzh3hfhoafsn4shpjy: resolution: {integrity: sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==} engines: {node: '>= 10.13.0'} @@ -21167,7 +22083,6 @@ packages: serialize-javascript: 6.0.1 terser: 5.14.2 webpack: 5.76.0_esbuild@0.17.16 - dev: true /terser-webpack-plugin/5.3.6_webpack@5.88.2: resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} @@ -21240,7 +22155,6 @@ packages: serialize-javascript: 6.0.1 terser: 5.16.5 webpack: 5.88.2_esbuild@0.17.16 - dev: true /terser-webpack-plugin/5.3.7_ghmre4bibzh3hfhoafsn4shpjy: resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} @@ -21712,7 +22626,6 @@ packages: /ufo/1.1.1: resolution: {integrity: sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==} - dev: false /uglify-js/3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} @@ -21859,7 +22772,6 @@ packages: engines: {npm: '>=3.0.0'} dependencies: '@uni/env': 1.1.0 - dev: false /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -21898,7 +22810,7 @@ packages: acorn: 8.8.2 chokidar: 3.5.3 esbuild: 0.17.16 - webpack: 5.88.2_pur5qe7dhbhqwjtj2daaog4n7u + webpack: 5.88.2_esbuild@0.17.16 webpack-sources: 3.2.3 webpack-virtual-modules: 0.4.6 dev: true @@ -22470,7 +23382,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.76.0_pur5qe7dhbhqwjtj2daaog4n7u + webpack: 5.76.0_esbuild@0.17.16 /webpack-dev-middleware/5.3.3_webpack@5.86.0: resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} @@ -22497,7 +23409,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.88.2_pur5qe7dhbhqwjtj2daaog4n7u + webpack: 5.88.2_esbuild@0.17.16 /webpack-dev-middleware/6.0.2_webpack@5.76.0: resolution: {integrity: sha512-iOddiJzPcQC6lwOIu60vscbGWth8PCRcWRCwoQcTQf9RMoOWBHg5EyzpGdtSmGMrSPd5vHEfFXmVErQEmkRngQ==} @@ -22513,7 +23425,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.76.0_pur5qe7dhbhqwjtj2daaog4n7u + webpack: 5.76.0_esbuild@0.17.16 /webpack-dev-server/4.11.1_webpack@5.88.2: resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} @@ -22604,7 +23516,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.76.0_pur5qe7dhbhqwjtj2daaog4n7u + webpack: 5.76.0_esbuild@0.17.16 webpack-dev-middleware: 5.3.3_webpack@5.76.0 ws: 8.13.0 transitivePeerDependencies: @@ -22876,7 +23788,6 @@ packages: - '@swc/core' - esbuild - uglify-js - dev: true /webpack/5.76.0_pur5qe7dhbhqwjtj2daaog4n7u: resolution: {integrity: sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==} @@ -22917,6 +23828,46 @@ packages: - esbuild - uglify-js + /webpack/5.76.0_yt3h3qjhcnsf3663codtuni62a: + resolution: {integrity: sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.8.2 + acorn-import-assertions: 1.9.0_acorn@8.8.2 + browserslist: 4.21.5 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.5_c2jhsnh755mj2bl6newvfwu7wy + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + /webpack/5.86.0_esbuild@0.17.16: resolution: {integrity: sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==} engines: {node: '>=10.13.0'} @@ -23034,7 +23985,6 @@ packages: - '@swc/core' - esbuild - uglify-js - dev: true /webpack/5.88.2_pur5qe7dhbhqwjtj2daaog4n7u: resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==}