diff --git a/e2e/fixtures/error.less.syntax-error/expect.js b/e2e/fixtures/error.less.syntax-error/expect.js index 61df2fb4e..bd1242d2f 100644 --- a/e2e/fixtures/error.less.syntax-error/expect.js +++ b/e2e/fixtures/error.less.syntax-error/expect.js @@ -2,7 +2,7 @@ const assert = require("assert"); module.exports = (err) => { assert( - err.stderr.includes(`ParseError: Unrecognised input`), + err.stderr.includes(`Unrecognised input`), "should throw error" ); }; diff --git a/packages/mako/package.json b/packages/mako/package.json index 45901780f..c02d1b325 100644 --- a/packages/mako/package.json +++ b/packages/mako/package.json @@ -24,24 +24,30 @@ }, "license": "MIT", "dependencies": { + "@module-federation/webpack-bundler-runtime": "^0.8.0", "@swc/helpers": "0.5.1", "@types/resolve": "^1.20.6", "chalk": "^4.1.2", + "enhanced-resolve": "^5.18.1", "less": "^4.2.0", - "less-plugin-resolve": "^1.0.2", + "less-loader": "^12.2.0", + "loader-runner": "^4.3.0", + "loader-utils": "^3.3.1", "lodash": "^4.17.21", "node-libs-browser-okam": "^2.2.5", "piscina": "^4.5.1", "react-error-overlay": "6.0.9", "react-refresh": "^0.14.0", "resolve": "^1.22.8", + "sass-loader": "^16.0.5", "semver": "^7.6.2", - "yargs-parser": "^21.1.1", - "@module-federation/webpack-bundler-runtime": "^0.8.0" + "yargs-parser": "^21.1.1" }, "devDependencies": { "@napi-rs/cli": "^2.18.0", "@types/less": "^3.0.6", + "@types/loader-runner": "^2.2.8", + "@types/loader-utils": "^2.0.6", "@types/lodash": "^4.17.1", "@types/node": "^20.12.5", "@types/yargs-parser": "^21.0.3", @@ -90,4 +96,4 @@ "access": "public" }, "repository": "git@github.com:umijs/mako.git" -} \ No newline at end of file +} diff --git a/packages/mako/src/index.ts b/packages/mako/src/index.ts index feb410a62..2c2f7ddf2 100644 --- a/packages/mako/src/index.ts +++ b/packages/mako/src/index.ts @@ -7,9 +7,9 @@ import resolve from 'resolve'; import { type Options } from 'sass'; import * as binding from '../binding'; import { ForkTSChecker as ForkTSChecker } from './forkTSChecker'; -import { LessLoaderOpts, lessLoader } from './lessLoader'; +import { LessLoaderOpts, LessPlugin } from './plugins/less'; +import { SassPlugin } from './plugins/sass'; import { rustPluginResolver } from './rustPlugins'; -import { sassLoader } from './sassLoader'; type Config = binding.BuildParams['config'] & { plugins?: binding.BuildParams['plugins']; @@ -94,7 +94,7 @@ export async function build(params: BuildParams) { ], ]; - const lessPluginAlias = + const resolveAlias = params.config.resolve?.alias?.reduce( (accumulator: Record, currentValue) => { accumulator[currentValue[0]] = currentValue[1]; @@ -104,51 +104,25 @@ export async function build(params: BuildParams) { ) || {}; // built-in less-loader - let less = lessLoader(null, { - modifyVars: params.config.less?.modifyVars || {}, - globalVars: params.config.less?.globalVars, - math: params.config.less?.math, - sourceMap: params.config.less?.sourceMap || false, - plugins: [ - ['less-plugin-resolve', { aliases: lessPluginAlias }], - ...(params.config.less?.plugins || []), - ], - }); - params.config.plugins.push({ - name: 'less', - async load(filePath: string) { - let lessResult = await less.render(filePath); - if (lessResult) { - return lessResult; - } - }, - generateEnd() { - if (!params.watch) { - less.terminate(); - } - }, - }); + params.config.plugins.push( + new LessPlugin({ + ...params, + resolveAlias, + }), + ); if ((makoConfig as any)?.sass || params.config?.sass) { - const sassOpts = { + params.config.sass = { ...((makoConfig as any)?.sass || {}), ...(params.config?.sass || {}), }; - let sass = sassLoader(null, sassOpts); - params.config.plugins.push({ - name: 'sass', - async load(filePath: string) { - let sassResult = await sass.render(filePath); - if (sassResult) { - return sassResult; - } - }, - generateEnd() { - if (!params.watch) { - sass.terminate(); - } - }, - }); + + params.config.plugins.push( + new SassPlugin({ + ...params, + resolveAlias, + }), + ); } if (makoConfig?.moduleFederation || params.config?.moduleFederation) { diff --git a/packages/mako/src/lessLoader/index.ts b/packages/mako/src/lessLoader/index.ts deleted file mode 100644 index b756e60a6..000000000 --- a/packages/mako/src/lessLoader/index.ts +++ /dev/null @@ -1,51 +0,0 @@ -import url from 'url'; -import { createParallelLoader } from './parallelLessLoader'; - -export interface LessLoaderOpts { - modifyVars?: Record; - globalVars?: Record; - math?: - | 'always' - | 'strict' - | 'parens-division' - | 'parens' - | 'strict-legacy' - | number; - sourceMap?: any; - /** - * A plugin can be a file path string, or a file path string with a params object. - * Notice! The file path should be a resolved path like require.resolve("less-plugin-clean-css"), - * and the params object must be a plain json. We will require the plugin file to get the plugin content. - * If the params object been accepted, that means, the required content will be treated as a factory class of Less.Plugin, - * we will create a plugin instance with the params object, or else, the required content will be treated as a plugin instance. - * We do this because the less loader runs in a worker pool for speed, and a less plugin instance can't be passed to worker directly. - */ - plugins?: (string | [string, Record])[]; -} - -function lessLoader(fn: Function | null, opts: LessLoaderOpts) { - let parallelLessLoader: ReturnType | undefined; - return { - render: async (filePath: string) => { - let filename = ''; - try { - filename = decodeURIComponent(url.parse(filePath).pathname || ''); - } catch (e) { - return; - } - if (filename?.endsWith('.less')) { - parallelLessLoader ||= createParallelLoader(); - return await parallelLessLoader.run({ filename, opts }); - } else { - // TODO: remove this - fn && fn(filePath); - } - }, - terminate: () => { - parallelLessLoader?.destroy(); - parallelLessLoader = undefined; - }, - }; -} - -export { lessLoader }; diff --git a/packages/mako/src/lessLoader/render.ts b/packages/mako/src/lessLoader/render.ts deleted file mode 100644 index 25a1c58ab..000000000 --- a/packages/mako/src/lessLoader/render.ts +++ /dev/null @@ -1,38 +0,0 @@ -import fs from 'fs'; -import less from 'less'; -import { LessLoaderOpts } from '.'; - -module.exports = async function render(param: { - filename: string; - opts: LessLoaderOpts; -}): Promise<{ content: string; type: 'css' }> { - const { modifyVars, globalVars, math, sourceMap, plugins } = param.opts; - const input = fs.readFileSync(param.filename, 'utf-8'); - - const pluginInstances: Less.Plugin[] | undefined = plugins?.map((p) => { - if (Array.isArray(p)) { - const pluginModule = require(p[0]); - const PluginClass = pluginModule.default || pluginModule; - return new PluginClass(p[1]); - } else { - return require(p); - } - }); - - const result = await less - .render(input, { - filename: param.filename, - javascriptEnabled: true, - math, - plugins: pluginInstances, - modifyVars, - globalVars, - sourceMap, - rewriteUrls: 'all', - } as unknown as Less.Options) - .catch((err) => { - throw new Error(err.toString()); - }); - - return { content: result.css, type: 'css' }; -}; diff --git a/packages/mako/src/plugins/less/index.ts b/packages/mako/src/plugins/less/index.ts new file mode 100644 index 000000000..0ac1832bb --- /dev/null +++ b/packages/mako/src/plugins/less/index.ts @@ -0,0 +1,77 @@ +import url from 'url'; +import { BuildParams } from '../../'; +import { RunLoadersOptions } from '../../runLoaders'; +import { createParallelLoader } from './parallelLessLoader'; + +export interface LessLoaderOpts { + modifyVars?: Record; + globalVars?: Record; + math?: + | 'always' + | 'strict' + | 'parens-division' + | 'parens' + | 'strict-legacy' + | number; + sourceMap?: any; + /** + * A plugin can be a file path string, or a file path string with a params object. + * Notice! The file path should be a resolved path like require.resolve("less-plugin-clean-css"), + * and the params object must be a plain json. We will require the plugin file to get the plugin content. + * If the params object been accepted, that means, the required content will be treated as a factory class of Less.Plugin, + * we will create a plugin instance with the params object, or else, the required content will be treated as a plugin instance. + * We do this because the less loader runs in a worker pool for speed, and a less plugin instance can't be passed to worker directly. + */ + plugins?: (string | [string, Record])[]; +} + +export class LessPlugin { + name: string; + parallelLessLoader: ReturnType | undefined; + params: BuildParams & { resolveAlias: Record }; + extOpts: RunLoadersOptions; + lessOptions: LessLoaderOpts; + + constructor(params: BuildParams & { resolveAlias: Record }) { + this.name = 'less'; + this.params = params; + this.extOpts = { + alias: params.resolveAlias, + root: params.root, + }; + this.lessOptions = { + modifyVars: params.config.less?.modifyVars || {}, + globalVars: params.config.less?.globalVars, + math: params.config.less?.math, + sourceMap: params.config.less?.sourceMap || false, + plugins: params.config.less?.plugins || [], + }; + } + + load = async (filePath: string) => { + let filename = ''; + try { + filename = decodeURIComponent(url.parse(filePath).pathname || ''); + } catch (e) { + return; + } + + if (!filename?.endsWith('.less')) { + return; + } + + this.parallelLessLoader ||= createParallelLoader(); + return await this.parallelLessLoader.run({ + filename, + opts: this.lessOptions, + extOpts: this.extOpts, + }); + }; + + generateEnd = () => { + if (!this.params.watch) { + this.parallelLessLoader?.destroy(); + this.parallelLessLoader = undefined; + } + }; +} diff --git a/packages/mako/src/lessLoader/parallelLessLoader.ts b/packages/mako/src/plugins/less/parallelLessLoader.ts similarity index 71% rename from packages/mako/src/lessLoader/parallelLessLoader.ts rename to packages/mako/src/plugins/less/parallelLessLoader.ts index 280b34e11..1091d6fc3 100644 --- a/packages/mako/src/lessLoader/parallelLessLoader.ts +++ b/packages/mako/src/plugins/less/parallelLessLoader.ts @@ -1,10 +1,11 @@ import path from 'path'; import { Piscina } from 'piscina'; import { LessLoaderOpts } from '.'; +import { RunLoadersOptions } from '../../runLoaders'; export const createParallelLoader = () => new Piscina< - { filename: string; opts: LessLoaderOpts }, + { filename: string; opts: LessLoaderOpts; extOpts: RunLoadersOptions }, { content: string; type: 'css' } >({ filename: path.resolve(__dirname + '/render.js'), diff --git a/packages/mako/src/plugins/less/render.ts b/packages/mako/src/plugins/less/render.ts new file mode 100644 index 000000000..730624d0a --- /dev/null +++ b/packages/mako/src/plugins/less/render.ts @@ -0,0 +1,61 @@ +import { LessLoaderOpts } from '.'; +import { RunLoadersOptions, runLoaders } from '../../runLoaders'; + +module.exports = async function render(param: { + filename: string; + opts: LessLoaderOpts; + extOpts: RunLoadersOptions; +}): Promise<{ content: string; type: 'css' }> { + const { modifyVars, globalVars, math, sourceMap, plugins } = param.opts; + const extOpts = param.extOpts; + + const pluginInstances: Less.Plugin[] | undefined = plugins?.map((p) => { + if (Array.isArray(p)) { + const pluginModule = require(p[0]); + const PluginClass = pluginModule.default || pluginModule; + return new PluginClass(p[1]); + } else { + return require(p); + } + }); + + const content = await runLoaders({ + alias: extOpts.alias, + root: extOpts.root, + resource: param.filename, + loaders: [ + { + loader: require.resolve('less-loader'), + options: { + lessOptions: { + filename: param.filename, + javascriptEnabled: true, + math, + plugins: pluginInstances, + modifyVars, + globalVars, + rewriteUrls: 'all', + sourceMap, + }, + }, + }, + ], + }) + .then((result) => { + let source: string = ''; + if (result.result) { + const buf = result.result[0]; + if (Buffer.isBuffer(buf)) { + source = buf.toString('utf-8'); + } else { + source = buf ?? ''; + } + } + return source; + }) + .catch((err) => { + throw new Error(err.toString()); + }); + + return { content: content, type: 'css' }; +}; diff --git a/packages/mako/src/plugins/sass/index.ts b/packages/mako/src/plugins/sass/index.ts new file mode 100644 index 000000000..006714738 --- /dev/null +++ b/packages/mako/src/plugins/sass/index.ts @@ -0,0 +1,39 @@ +import url from 'url'; +import { type Options } from 'sass'; +import { BuildParams } from '../../'; +import { RunLoadersOptions } from '../../runLoaders'; + +export class SassPlugin { + name: string; + params: BuildParams & { resolveAlias: Record }; + sassOptions: Options<'async'>; + extOpts: RunLoadersOptions; + + constructor(params: BuildParams & { resolveAlias: Record }) { + this.name = 'sass'; + this.params = params; + this.extOpts = { + alias: params.resolveAlias, + root: params.root, + }; + this.sassOptions = params.config?.sass || {}; + } + + load = async (filePath: string) => { + let filename = ''; + try { + filename = decodeURIComponent(url.parse(filePath).pathname || ''); + } catch (e) { + return; + } + + if (!filename?.endsWith('.scss')) { + return; + } + + const { render } = require('./render'); + return render({ filename, opts: this.sassOptions, extOpts: this.extOpts }); + }; + + generateEnd = () => {}; +} diff --git a/packages/mako/src/plugins/sass/render.ts b/packages/mako/src/plugins/sass/render.ts new file mode 100644 index 000000000..49c54a154 --- /dev/null +++ b/packages/mako/src/plugins/sass/render.ts @@ -0,0 +1,44 @@ +import { type Options } from 'sass'; +import { RunLoadersOptions, runLoaders } from '../../runLoaders'; + +async function render(param: { + filename: string; + opts: Options<'async'> & { resources: string[] }; + extOpts: RunLoadersOptions; +}): Promise<{ content: string; type: 'css' }> { + const options = { style: 'compressed', ...param.opts }; + const extOpts = param.extOpts; + + const content = await runLoaders({ + alias: extOpts.alias, + root: extOpts.root, + resource: param.filename, + loaders: [ + { + loader: require.resolve('sass-loader'), + options: { + sassOptions: options, + }, + }, + ], + }) + .then((result) => { + let source: string = ''; + if (result.result) { + const buf = result.result[0]; + if (Buffer.isBuffer(buf)) { + source = buf.toString('utf-8'); + } else { + source = buf ?? ''; + } + } + return source; + }) + .catch((err) => { + throw new Error(err.toString()); + }); + + return { content: content, type: 'css' }; +} + +export { render }; diff --git a/packages/mako/src/runLoaders/index.ts b/packages/mako/src/runLoaders/index.ts new file mode 100644 index 000000000..2c0038654 --- /dev/null +++ b/packages/mako/src/runLoaders/index.ts @@ -0,0 +1,130 @@ +import fs from 'fs'; +import * as EnhancedResolve from 'enhanced-resolve'; +import * as loaderRunner from 'loader-runner'; +import * as loaderUtils from 'loader-utils'; + +function createLoaderContext(options: { + root: string; + alias?: Record; +}) { + const getResolveContext = (loaderContext: any) => ({ + fileDependencies: { + add: (d: string) => loaderContext.addDependency(d), + }, + contextDependencies: { + add: (d: string) => loaderContext.addContextDependency(d), + }, + missingDependencies: { + add: (d: string) => loaderContext.addMissingDependency(d), + }, + }); + + const defaultResolverOptions = { + fileSystem: new EnhancedResolve.CachedInputFileSystem(fs, 60000), + alias: options.alias, + }; + + const defaultResolver = EnhancedResolve.ResolverFactory.createResolver( + defaultResolverOptions, + ); + + const ctx = { + version: 2, + rootContext: options.root, + fs: new EnhancedResolve.CachedInputFileSystem(fs, 60000), + getOptions(): Record { + const query = (this as unknown as loaderRunner.ExtendedLoaderContext) + .query; + if (typeof query === 'string' && query !== '') { + return loaderUtils.parseQuery(query); + } + + if (!query || typeof query !== 'object') { + return {}; + } + + return query; + }, + resolve(context: string, request: string, callback: any) { + defaultResolver.resolve( + {}, + context, + request, + getResolveContext(this), + callback, + ); + }, + getResolve(options: EnhancedResolve.ResolveOptions) { + const resolver = options + ? EnhancedResolve.ResolverFactory.createResolver({ + ...defaultResolverOptions, + ...options, + }) + : defaultResolver; + + return (context: string, request: string, callback: any) => { + if (callback) { + resolver.resolve( + {}, + context, + request, + getResolveContext(this), + callback, + ); + } else { + return new Promise((resolve, reject) => { + resolver.resolve( + {}, + context, + request, + getResolveContext(this), + (err, result) => { + if (err) reject(err); + else resolve(result); + }, + ); + }); + } + }; + }, + target: 'web', + getLogger() { + return console; + }, + }; + + return ctx; +} + +export interface RunLoadersOptions { + root: string; + alias?: Record; +} + +export function runLoaders( + options: { + resource: string; + loaders: any[]; + } & RunLoadersOptions, +): Promise { + return new Promise((resolve, reject) => { + loaderRunner.runLoaders( + { + resource: options.resource, + readResource: fs.readFile.bind(fs), + context: createLoaderContext({ + root: options.root, + alias: options.alias, + }), + loaders: options.loaders, + }, + (error, data) => { + if (error) { + reject(error); + return; + } + resolve(data); + }, + ); + }); +} diff --git a/packages/mako/src/sassLoader/index.ts b/packages/mako/src/sassLoader/index.ts deleted file mode 100644 index 98b3b598e..000000000 --- a/packages/mako/src/sassLoader/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -import url from 'url'; -import { type Options } from 'sass'; - -function sassLoader(fn: Function | null, opts: Options<'async'>) { - return { - render: async (filePath: string) => { - let filename = ''; - try { - filename = decodeURIComponent(url.parse(filePath).pathname || ''); - } catch (e) { - return; - } - if (filename?.endsWith('.scss')) { - const { render } = require('./render'); - return render({ filename, opts }); - } else { - // TODO: remove this - fn && fn(filePath); - } - }, - terminate: () => {}, - }; -} - -export { sassLoader }; diff --git a/packages/mako/src/sassLoader/render.ts b/packages/mako/src/sassLoader/render.ts deleted file mode 100644 index c8962b90f..000000000 --- a/packages/mako/src/sassLoader/render.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { type Options } from 'sass'; - -async function render(param: { - filename: string; - opts: Options<'async'> & { resources: string[] }; -}): Promise<{ content: string; type: 'css' }> { - let sass; - try { - sass = require('sass'); - } catch (err) { - throw new Error( - 'The "sass" package is not installed. Please run "npm install sass" to install it.', - ); - } - const result = await sass - .compileAsync(param.filename, { style: 'compressed', ...param.opts }) - .catch((err: any) => { - throw new Error(err.toString()); - }); - return { content: result.css, type: 'css' }; -} - -export { render }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 369160ddc..6fef3aeb7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -551,12 +551,21 @@ importers: chalk: specifier: ^4.1.2 version: 4.1.2 + enhanced-resolve: + specifier: ^5.18.1 + version: 5.18.1 less: specifier: ^4.2.0 version: 4.2.0 - less-plugin-resolve: - specifier: ^1.0.2 - version: 1.0.2 + less-loader: + specifier: ^12.2.0 + version: 12.2.0(less@4.2.0)(webpack@5.91.0) + loader-runner: + specifier: ^4.3.0 + version: 4.3.0 + loader-utils: + specifier: ^3.3.1 + version: 3.3.1 lodash: specifier: ^4.17.21 version: 4.17.21 @@ -575,6 +584,9 @@ importers: resolve: specifier: ^1.22.8 version: 1.22.8 + sass-loader: + specifier: ^16.0.5 + version: 16.0.5(sass@1.77.8)(webpack@5.91.0) semver: specifier: ^7.6.2 version: 7.6.2 @@ -613,6 +625,12 @@ importers: '@types/less': specifier: ^3.0.6 version: 3.0.6 + '@types/loader-runner': + specifier: ^2.2.8 + version: 2.2.8 + '@types/loader-utils': + specifier: ^2.0.6 + version: 2.0.6 '@types/lodash': specifier: ^4.17.1 version: 4.17.1 @@ -4927,7 +4945,6 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 - dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -4950,7 +4967,6 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@loadable/component@5.15.2(react@18.2.0): resolution: {integrity: sha512-ryFAZOX5P2vFkUdzaAtTG88IGnr9qxSdvLRvJySXcUA4B4xVWurUNADu3AnKPksxOZajljqTrDEDcYjeL4lvLw==} @@ -5744,22 +5760,18 @@ packages: dependencies: '@types/eslint': 8.40.0 '@types/estree': 1.0.1 - dev: true /@types/eslint@8.40.0: resolution: {integrity: sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==} dependencies: '@types/estree': 1.0.1 '@types/json-schema': 7.0.12 - dev: true /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - dev: true /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} @@ -5862,7 +5874,6 @@ packages: /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - dev: true /@types/jsonfile@6.1.1: resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} @@ -5874,6 +5885,19 @@ packages: resolution: {integrity: sha512-PecSzorDGdabF57OBeQO/xFbAkYWo88g4Xvnsx7LRwqLC17I7OoKtA3bQB9uXkY6UkMWCOsA8HSVpaoitscdXw==} dev: true + /@types/loader-runner@2.2.8: + resolution: {integrity: sha512-5xcLak5lyLlhMXQD9lUG5n63n6IGIMJSkq9g2tqUCs6agnoIZd0H8nyKuDpzP0DxzMF3Rs2+zOVm2DCh3JLuRg==} + dependencies: + '@types/node': 20.14.2 + dev: true + + /@types/loader-utils@2.0.6: + resolution: {integrity: sha512-cgu0Xefgq9O5FjFR78jgI6X31aPjDWCaJ6LCfRtlj6BtyVVWiXagysSYlPACwGKAzRwsFLjKXcj4iGfcVt6cLw==} + dependencies: + '@types/node': 20.14.2 + '@types/webpack': 4.41.40 + dev: true + /@types/lodash@4.17.1: resolution: {integrity: sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==} dev: true @@ -5904,7 +5928,6 @@ packages: resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} dependencies: undici-types: 5.26.5 - dev: true /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -6004,10 +6027,18 @@ packages: '@types/node': 20.14.2 dev: true + /@types/source-list-map@0.1.6: + resolution: {integrity: sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==} + dev: true + /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true + /@types/tapable@1.0.12: + resolution: {integrity: sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==} + dev: true + /@types/tinycolor2@1.4.6: resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} dev: true @@ -6016,10 +6047,35 @@ packages: resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} dev: true + /@types/uglify-js@3.17.5: + resolution: {integrity: sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==} + dependencies: + source-map: 0.6.1 + dev: true + /@types/use-sync-external-store@0.0.3: resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} dev: true + /@types/webpack-sources@3.2.3: + resolution: {integrity: sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==} + dependencies: + '@types/node': 20.14.2 + '@types/source-list-map': 0.1.6 + source-map: 0.7.4 + dev: true + + /@types/webpack@4.41.40: + resolution: {integrity: sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==} + dependencies: + '@types/node': 20.14.2 + '@types/tapable': 1.0.12 + '@types/uglify-js': 3.17.5 + '@types/webpack-sources': 3.2.3 + anymatch: 3.1.3 + source-map: 0.6.1 + dev: true + /@types/which@3.0.0: resolution: {integrity: sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ==} dev: true @@ -7172,15 +7228,12 @@ packages: dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: true /@webassemblyjs/floating-point-hex-parser@1.11.6: resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: true /@webassemblyjs/helper-api-error@1.11.6: resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: true /@webassemblyjs/helper-buffer@1.11.6: resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} @@ -7188,7 +7241,6 @@ packages: /@webassemblyjs/helper-buffer@1.12.1: resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} - dev: true /@webassemblyjs/helper-numbers@1.11.6: resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} @@ -7196,11 +7248,9 @@ packages: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 - dev: true /@webassemblyjs/helper-wasm-bytecode@1.11.6: resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: true /@webassemblyjs/helper-wasm-section@1.11.6: resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} @@ -7218,23 +7268,19 @@ packages: '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/wasm-gen': 1.12.1 - dev: true /@webassemblyjs/ieee754@1.11.6: resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} dependencies: '@xtuc/ieee754': 1.2.0 - dev: true /@webassemblyjs/leb128@1.11.6: resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} dependencies: '@xtuc/long': 4.2.2 - dev: true /@webassemblyjs/utf8@1.11.6: resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: true /@webassemblyjs/wasm-edit@1.11.6: resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} @@ -7260,7 +7306,6 @@ packages: '@webassemblyjs/wasm-opt': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 '@webassemblyjs/wast-printer': 1.12.1 - dev: true /@webassemblyjs/wasm-gen@1.11.6: resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} @@ -7280,7 +7325,6 @@ packages: '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true /@webassemblyjs/wasm-opt@1.11.6: resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} @@ -7298,7 +7342,6 @@ packages: '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/wasm-gen': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - dev: true /@webassemblyjs/wasm-parser@1.11.6: resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} @@ -7320,7 +7363,6 @@ packages: '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 - dev: true /@webassemblyjs/wast-printer@1.11.6: resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} @@ -7334,7 +7376,6 @@ packages: dependencies: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - dev: true /@webpack-cli/configtest@1.2.0(webpack-cli@4.7.2)(webpack@5.84.1): resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==} @@ -7369,11 +7410,9 @@ packages: /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true /abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -7394,7 +7433,6 @@ packages: acorn: ^8 dependencies: acorn: 8.11.2 - dev: true /acorn-import-assertions@1.9.0(acorn@8.8.2): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} @@ -7427,7 +7465,6 @@ packages: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} @@ -7463,7 +7500,6 @@ packages: ajv: ^6.9.1 dependencies: ajv: 6.12.6 - dev: true /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -7472,7 +7508,6 @@ packages: fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true /ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} @@ -8357,7 +8392,6 @@ packages: electron-to-chromium: 1.4.798 node-releases: 2.0.14 update-browserslist-db: 1.0.16(browserslist@4.23.1) - dev: true /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -8367,7 +8401,6 @@ packages: /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true /buffer-okam@4.9.2: resolution: {integrity: sha512-t+vozme+an7flUs6GXHGMiP3PdodTse1NgRHSDWioIFJAtmMlj3pj7qD20Mkr9hZy0+9HA4R0xcumpMewrRdZQ==} @@ -8469,7 +8502,6 @@ packages: /caniuse-lite@1.0.30001632: resolution: {integrity: sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==} - dev: true /canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} @@ -8533,7 +8565,6 @@ packages: /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} - dev: true /ci-info@3.8.0: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} @@ -8671,7 +8702,6 @@ packages: /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true /commander@2.8.1: resolution: {integrity: sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==} @@ -9469,7 +9499,6 @@ packages: /electron-to-chromium@1.4.798: resolution: {integrity: sha512-by9J2CiM9KPGj9qfp5U4FcPSbXJG7FNzqnYaY4WLzX+v2PHieVGmnsA4dxfpGE3QEC7JofpPZmn7Vn1B9NR2+Q==} - dev: true /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -9513,20 +9542,19 @@ packages: dependencies: once: 1.4.0 - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + /enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - /enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + /enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true /enhanced-resolve@5.9.3: resolution: {integrity: sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==} @@ -9722,7 +9750,6 @@ packages: /es-module-lexer@1.2.1: resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} - dev: true /es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} @@ -9927,7 +9954,6 @@ packages: /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - dev: true /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -10006,7 +10032,6 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true /eslint-scope@7.2.0: resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} @@ -10109,17 +10134,14 @@ packages: engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 - dev: true /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} - dev: true /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - dev: true /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -10164,7 +10186,6 @@ packages: /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - dev: true /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -10309,7 +10330,6 @@ packages: /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true /fast-glob@3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} @@ -10335,7 +10355,6 @@ packages: /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} @@ -10849,7 +10868,6 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true /glob@10.2.6: resolution: {integrity: sha512-U/rnDpXJGF414QQQZv5uVsabTVxMSwzS5CH0p3DRCIV6ownl4f7PzGnkGmvlum2wB+9RlJWJZ6ACU1INnBqiPA==} @@ -11325,7 +11343,6 @@ packages: /immutable@4.3.7: resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} - dev: true /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -11971,7 +11988,6 @@ packages: '@types/node': 20.14.2 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true /jest-worker@29.4.3: resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==} @@ -12030,7 +12046,6 @@ packages: /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -12095,6 +12110,23 @@ packages: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} dev: true + /less-loader@12.2.0(less@4.2.0)(webpack@5.91.0): + resolution: {integrity: sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + less: ^3.5.0 || ^4.0.0 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + dependencies: + less: 4.2.0 + webpack: 5.91.0 + dev: false + /less-plugin-clean-css@1.5.1: resolution: {integrity: sha512-Pc68AFHAEJO3aAoRvnUTW5iAiAv6y+TQsWLTTwVNqjiDno6xCvxz1AtfQl7Y0MZSpHPalFajM1EU4RB5UVINpw==} engines: {node: '>=0.4.2'} @@ -12105,7 +12137,8 @@ packages: /less-plugin-resolve@1.0.2: resolution: {integrity: sha512-e1AHq0XNTU8S3d9JCc8CFYajoUBr0EK3pcuLT5PogyBBeE0knzZJL105kKKSZWfq2lQLq3/uEDrMK3JPq+fHaA==} dependencies: - enhanced-resolve: 5.15.0 + enhanced-resolve: 5.18.1 + dev: true /less@4.1.3: resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} @@ -12355,7 +12388,6 @@ packages: /loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} - dev: true /loader-utils@2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} @@ -12366,6 +12398,11 @@ packages: json5: 2.2.3 dev: true + /loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + dev: false + /local-pkg@0.4.3: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} @@ -12567,7 +12604,6 @@ packages: /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -12786,7 +12822,6 @@ packages: /neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true /next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} @@ -12923,7 +12958,6 @@ packages: /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true /nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} @@ -13343,7 +13377,6 @@ packages: /picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -14389,7 +14422,6 @@ packages: /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - dev: true /qiankun@2.10.8: resolution: {integrity: sha512-5w6QeM1INFavJdIWfSoDIVv2InV8MEojauvY5tY9Biu8hhE5Rml/HM2t/Y60kZcuOpgy/HGX+tcc6NkQuzDoCg==} @@ -16735,6 +16767,32 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + /sass-loader@16.0.5(sass@1.77.8)(webpack@5.91.0): + resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + webpack: + optional: true + dependencies: + neo-async: 2.6.2 + sass: 1.77.8 + webpack: 5.91.0 + dev: false + /sass@1.77.8: resolution: {integrity: sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==} engines: {node: '>=14.0.0'} @@ -16743,7 +16801,6 @@ packages: chokidar: 3.5.3 immutable: 4.3.7 source-map-js: 1.2.0 - dev: true /sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} @@ -16777,7 +16834,6 @@ packages: '@types/json-schema': 7.0.12 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true /scroll-into-view-if-needed@3.1.0: resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} @@ -16841,7 +16897,6 @@ packages: resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: randombytes: 2.1.0 - dev: true /serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} @@ -17020,7 +17075,6 @@ packages: /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} - dev: true /source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} @@ -17032,7 +17086,6 @@ packages: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true /source-map@0.4.4: resolution: {integrity: sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==} @@ -17474,7 +17527,6 @@ packages: engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - dev: true /supports-hyperlinks@2.3.0: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} @@ -17586,7 +17638,6 @@ packages: serialize-javascript: 6.0.1 terser: 5.31.1 webpack: 5.91.0 - dev: true /terser-webpack-plugin@5.3.9(webpack@5.84.1): resolution: {integrity: sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==} @@ -17632,7 +17683,6 @@ packages: acorn: 8.11.2 commander: 2.20.3 source-map-support: 0.5.21 - dev: true /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} @@ -17997,7 +18047,6 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true /unfetch@5.0.0: resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==} @@ -18134,13 +18183,11 @@ packages: browserslist: 4.23.1 escalade: 3.1.2 picocolors: 1.1.1 - dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.0 - dev: true /url-join@4.0.1: resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} @@ -18354,7 +18401,6 @@ packages: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true /wbuf@1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} @@ -18451,7 +18497,6 @@ packages: /webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - dev: true /webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -18476,7 +18521,7 @@ packages: acorn-import-assertions: 1.9.0(acorn@8.8.2) browserslist: 4.21.7 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 + enhanced-resolve: 5.17.0 es-module-lexer: 1.2.1 eslint-scope: 5.1.1 events: 3.3.0 @@ -18536,7 +18581,6 @@ packages: - '@swc/core' - esbuild - uglify-js - dev: true /webpod@0.0.2: resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==}