From cdb8ac26a73c28e8f199b069e47f0c0ecc58a4a0 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Thu, 22 Aug 2024 11:16:18 -0300 Subject: [PATCH 01/18] Migrate raw CSS to Rspack --- programs/develop/package.json | 4 ++-- .../develop/webpack/plugin-css/common-style-loaders.ts | 4 ++-- programs/develop/webpack/plugin-css/index.ts | 8 ++++++-- .../webpack/plugin-extension/feature-html/index.ts | 2 +- .../webpack/plugin-extension/feature-resolve/index.ts | 2 +- .../feature-resolve/steps/transform-source/index.ts | 1 + .../webpack/plugin-extension/feature-scripts/index.ts | 6 +++--- programs/develop/webpack/plugin-js-frameworks/index.ts | 5 +++-- .../webpack/plugin-js-frameworks/js-tools/babel.ts | 2 +- .../develop/webpack/plugin-js-frameworks/js-tools/vue.ts | 2 +- .../steps/setup-chromium-reload-client/index.ts | 2 +- .../steps/setup-firefox-reload-client/index.ts | 2 +- 12 files changed, 23 insertions(+), 17 deletions(-) diff --git a/programs/develop/package.json b/programs/develop/package.json index 1148bb82..1c58e715 100644 --- a/programs/develop/package.json +++ b/programs/develop/package.json @@ -31,6 +31,8 @@ }, "dependencies": { "@colors/colors": "^1.6.0", + "@rspack/cli": "^0.7.5", + "@rspack/core": "^0.7.5", "@swc/core": "^1.7.3", "@types/firefox-webext-browser": "^120.0.4", "acorn": "^8.12.1", @@ -55,7 +57,6 @@ "ignore": "^5.3.1", "loader-utils": "^3.3.1", "micromatch": "^4.0.7", - "mini-css-extract-plugin": "^2.8.1", "parse5": "^7.1.2", "parse5-utils": "^2.0.0", "postcss": "^8.4.40", @@ -68,7 +69,6 @@ "vue-template-compiler": "^2.7.16", "webextension-polyfill": "^0.12.0", "webpack": "~5.92.0", - "webpack-dev-server": "^5.0.2", "webpack-merge": "^6.0.1", "webpack-target-webextension": "^1.1.2" }, diff --git a/programs/develop/webpack/plugin-css/common-style-loaders.ts b/programs/develop/webpack/plugin-css/common-style-loaders.ts index 556b74f6..6d48ed57 100644 --- a/programs/develop/webpack/plugin-css/common-style-loaders.ts +++ b/programs/develop/webpack/plugin-css/common-style-loaders.ts @@ -1,5 +1,5 @@ import {type RuleSetRule} from 'webpack' -import MiniCssExtractPlugin from 'mini-css-extract-plugin' +import rspack from '@rspack/core' import {DevOptions} from '../../commands/dev' import {isUsingTailwind} from './css-tools/tailwind' import {isUsingSass} from './css-tools/sass' @@ -17,7 +17,7 @@ export async function commonStyleLoaders( projectPath: string, opts: StyleLoaderOptions ): Promise { - const miniCssLoader = MiniCssExtractPlugin.loader + const miniCssLoader = rspack.CssExtractRspackPlugin.loader const styleLoaders: RuleSetRule['use'] = [ opts.useMiniCssExtractPlugin ? miniCssLoader diff --git a/programs/develop/webpack/plugin-css/index.ts b/programs/develop/webpack/plugin-css/index.ts index 098755c7..f072511f 100644 --- a/programs/develop/webpack/plugin-css/index.ts +++ b/programs/develop/webpack/plugin-css/index.ts @@ -4,7 +4,7 @@ import { type Compiler, type RuleSetRule } from 'webpack' -import MiniCssExtractPlugin from 'mini-css-extract-plugin' +import rspack from '@rspack/core' import {commonStyleLoaders} from './common-style-loaders' import {PluginInterface} from '../webpack-types' import {type DevOptions} from '../../commands/dev' @@ -26,7 +26,9 @@ export class CssPlugin { private async configureOptions(compiler: Compiler) { const projectPath = path.dirname(this.manifestPath) - const plugins: WebpackPluginInstance[] = [new MiniCssExtractPlugin()] + const plugins: WebpackPluginInstance[] = [ + new rspack.CssExtractRspackPlugin() as any + ] plugins.forEach((plugin) => plugin.apply(compiler)) @@ -37,6 +39,7 @@ export class CssPlugin { { test: /\.css$/, exclude: /\.module\.css$/, + type: 'javascript/auto', oneOf: [ { resourceQuery: /is_content_css_import=true/, @@ -55,6 +58,7 @@ export class CssPlugin { }, { test: /\.module\.css$/, + type: 'javascript/auto', oneOf: [ { resourceQuery: /is_content_css_import=true/, diff --git a/programs/develop/webpack/plugin-extension/feature-html/index.ts b/programs/develop/webpack/plugin-extension/feature-html/index.ts index 146f60f1..8e96d706 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/index.ts @@ -83,7 +83,7 @@ export class HtmlPlugin { compiler.options.module.rules.push({ test: /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/, include: [path.dirname(this.manifestPath)], - exclude: /node_modules/, + exclude: [/[\\/]node_modules[\\/]/], use: [ { loader: require.resolve( diff --git a/programs/develop/webpack/plugin-extension/feature-resolve/index.ts b/programs/develop/webpack/plugin-extension/feature-resolve/index.ts index 1b00ec21..a661b20e 100644 --- a/programs/develop/webpack/plugin-extension/feature-resolve/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-resolve/index.ts @@ -66,7 +66,7 @@ export class ResolvePlugin { test: /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/, loader: require.resolve(path.resolve(__dirname, './resolver-loader.js')), include: [path.dirname(this.manifestPath)], - exclude: /node_modules/, + exclude: [/[\\/]node_modules[\\/]/], options: { manifestPath: this.manifestPath, includeList: this.includeList, diff --git a/programs/develop/webpack/plugin-extension/feature-resolve/steps/transform-source/index.ts b/programs/develop/webpack/plugin-extension/feature-resolve/steps/transform-source/index.ts index cb4ce785..dce2719e 100644 --- a/programs/develop/webpack/plugin-extension/feature-resolve/steps/transform-source/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-resolve/steps/transform-source/index.ts @@ -86,6 +86,7 @@ export function transformSource(source: string, options: LoaderOptions) { jsc: { loose: true, target: 'es2016', + externalHelpers: true, parser: { syntax: options.typescript ? 'typescript' : 'ecmascript', jsx: !options.typescript && options.jsx, diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/index.ts b/programs/develop/webpack/plugin-extension/feature-scripts/index.ts index 3d591092..b675a393 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/index.ts @@ -54,7 +54,7 @@ export class ScriptsPlugin { compiler.options.module.rules.push({ test: /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/, include: [path.dirname(this.manifestPath)], - exclude: /node_modules/, + exclude: [/[\\/]node_modules[\\/]/], use: [ { loader: require.resolve( @@ -75,7 +75,7 @@ export class ScriptsPlugin { compiler.options.module.rules.push({ test: /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/, include: [path.dirname(this.manifestPath)], - exclude: /node_modules/, + exclude: [/[\\/]node_modules[\\/]/], use: [ { loader: require.resolve( @@ -117,7 +117,7 @@ export class ScriptsPlugin { compiler.options.module.rules.push({ test: /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/, include: [path.dirname(this.manifestPath)], - exclude: /node_modules/, + exclude: [/[\\/]node_modules[\\/]/], use: [ { loader: path.resolve( diff --git a/programs/develop/webpack/plugin-js-frameworks/index.ts b/programs/develop/webpack/plugin-js-frameworks/index.ts index 7347a1d7..023ce8ba 100644 --- a/programs/develop/webpack/plugin-js-frameworks/index.ts +++ b/programs/develop/webpack/plugin-js-frameworks/index.ts @@ -42,9 +42,9 @@ export class JsFrameworksPlugin { { test: /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/, include: [path.dirname(this.manifestPath)], - exclude: /node_modules/, + exclude: [/[\\/]node_modules[\\/]/], use: { - loader: require.resolve('swc-loader'), + loader: require.resolve('builtin:swc-loader'), options: { sync: true, module: { @@ -54,6 +54,7 @@ export class JsFrameworksPlugin { isModule: true, jsc: { target: 'es2016', + externalHelpers: true, parser: { syntax: isUsingTypeScript(projectPath) ? 'typescript' diff --git a/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts b/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts index 1f66140e..7da65fc5 100644 --- a/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts +++ b/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts @@ -160,7 +160,7 @@ export async function maybeUseBabel( { test: files, include: projectPath, - exclude: /node_modules/, + exclude: [/[\\/]node_modules[\\/]/], loader: require.resolve('babel-loader'), options: babelConfig(projectPath, { mode, diff --git a/programs/develop/webpack/plugin-js-frameworks/js-tools/vue.ts b/programs/develop/webpack/plugin-js-frameworks/js-tools/vue.ts index 1ab8e50b..ee2ea51d 100644 --- a/programs/develop/webpack/plugin-js-frameworks/js-tools/vue.ts +++ b/programs/develop/webpack/plugin-js-frameworks/js-tools/vue.ts @@ -81,7 +81,7 @@ export async function maybeUseVue( test: /\.vue$/, loader: require.resolve('vue-loader'), include: projectPath, - exclude: /node_modules/ + exclude: [/[\\/]node_modules[\\/]/] } ] diff --git a/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/index.ts index 01edd321..ebc26ba3 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/index.ts @@ -10,7 +10,7 @@ export function SetupChromiumReloadClient( compiler.options.module.rules.push({ test: /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/, include: [path.dirname(manifestPath)], - exclude: /node_modules/, + exclude: [/[\\/]node_modules[\\/]/], use: [ { loader: path.resolve(__dirname, './inject-chromium-client-loader'), diff --git a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts index dc129281..8906364a 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts @@ -10,7 +10,7 @@ export function SetupFirefoxReloadClient( compiler.options.module.rules.push({ test: /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/, include: [path.dirname(manifestPath)], - exclude: /node_modules/, + exclude: [/[\\/]node_modules[\\/]/], use: [ { loader: path.resolve(__dirname, './inject-firefox-client-loader'), From d3afabbff33c75155b46363ac23c6f71229b6f75 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Thu, 22 Aug 2024 12:39:08 -0300 Subject: [PATCH 02/18] Migrate SASS/LESS to Rspack --- programs/develop/package.json | 1 + .../plugin-css/common-style-loaders.ts | 2 ++ .../webpack/plugin-css/css-tools/less.ts | 25 +++++++++++++++++++ .../webpack/plugin-css/css-tools/sass.ts | 10 ++++++++ 4 files changed, 38 insertions(+) diff --git a/programs/develop/package.json b/programs/develop/package.json index 1c58e715..4eb7a77a 100644 --- a/programs/develop/package.json +++ b/programs/develop/package.json @@ -61,6 +61,7 @@ "parse5-utils": "^2.0.0", "postcss": "^8.4.40", "progress": "^2.0.3", + "sass-embedded": "^1.77.8", "schema-utils": "^4.2.0", "slugify": "^1.6.6", "style-loader": "^3.3.4", diff --git a/programs/develop/webpack/plugin-css/common-style-loaders.ts b/programs/develop/webpack/plugin-css/common-style-loaders.ts index 6d48ed57..eadcc00e 100644 --- a/programs/develop/webpack/plugin-css/common-style-loaders.ts +++ b/programs/develop/webpack/plugin-css/common-style-loaders.ts @@ -11,6 +11,7 @@ export interface StyleLoaderOptions { mode: DevOptions['mode'] useMiniCssExtractPlugin: boolean loader?: string + loaderOptions?: Record } export async function commonStyleLoaders( @@ -56,6 +57,7 @@ export async function commonStyleLoaders( { loader: require.resolve(opts.loader), options: { + ...opts.loaderOptions, sourceMap: opts.mode === 'development' } } diff --git a/programs/develop/webpack/plugin-css/css-tools/less.ts b/programs/develop/webpack/plugin-css/css-tools/less.ts index 533f981a..661f5516 100644 --- a/programs/develop/webpack/plugin-css/css-tools/less.ts +++ b/programs/develop/webpack/plugin-css/css-tools/less.ts @@ -63,6 +63,8 @@ export async function maybeUseLess( return [ { test: /\.less$/, + // Set to 'css/auto' if you want to support '*.module.less' as CSS Modules, otherwise set type to 'css' + type: 'css/auto', oneOf: [ { resourceQuery: /is_content_css_import=true/, @@ -80,6 +82,29 @@ export async function maybeUseLess( }) } ] + }, + { + test: /\.module\.(s(a|c)ss)$/, + // Set to 'css/auto' if you want to support '*.module.less' as CSS Modules, otherwise set type to 'css' + type: 'css/auto', + oneOf: [ + { + resourceQuery: /is_content_css_import=true/, + type: 'javascript/auto', + use: await commonStyleLoaders(projectPath, { + loader: 'less-loader', + mode, + useMiniCssExtractPlugin: false + }) + }, + { + use: await commonStyleLoaders(projectPath, { + loader: 'less-loader', + mode, + useMiniCssExtractPlugin: true + }) + } + ] } ] } diff --git a/programs/develop/webpack/plugin-css/css-tools/sass.ts b/programs/develop/webpack/plugin-css/css-tools/sass.ts index 94af4833..e78daebb 100644 --- a/programs/develop/webpack/plugin-css/css-tools/sass.ts +++ b/programs/develop/webpack/plugin-css/css-tools/sass.ts @@ -75,6 +75,8 @@ export async function maybeUseSass( return [ { test: /\.(s(a|c)ss)$/, + // Set to 'css/auto' if you want to support '*.module.less' as CSS Modules, otherwise set type to 'css' + type: 'css', exclude: /\.module\.(s(a|c)ss)$/, oneOf: [ { @@ -96,11 +98,19 @@ export async function maybeUseSass( }, { test: /\.module\.(s(a|c)ss)$/, + // Set to 'css/auto' if you want to support '*.module.less' as CSS Modules, otherwise set type to 'css' + type: 'css/auto', oneOf: [ { resourceQuery: /is_content_css_import=true/, use: await commonStyleLoaders(projectPath, { loader: 'sass-loader', + loaderOptions: { + // using `modern-compiler` and `sass-embedded` together significantly improve build performance, + // requires `sass-loader >= 14.2.1` + api: 'modern-compiler', + implementation: require.resolve('sass-embedded') + }, mode, useMiniCssExtractPlugin: false }) From ce27817306c7dde27c09d86659de2dcd8249a463 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Fri, 23 Aug 2024 08:04:44 -0300 Subject: [PATCH 03/18] Replace webpack with @rspack/core --- CONTRIBUTING.md | 4 +-- eslint.config.mjs | 2 +- programs/create/create.spec.ts | 4 +-- programs/develop/commands/build.ts | 10 ++++---- .../commands/commands-lib/config-types.ts | 2 +- .../commands/commands-lib/generate-zip.ts | 7 +++--- .../commands-lib/get-extension-config.ts | 2 +- .../develop/commands/commands-lib/messages.ts | 14 +++++------ programs/develop/commands/preview.ts | 8 +++--- programs/develop/commands/start.ts | 8 +++--- .../plugin-browsers/browsers-lib/messages.ts | 8 +++--- programs/develop/plugin-browsers/index.ts | 4 +-- .../plugin-browsers/run-chromium/index.ts | 2 +- .../run-firefox/firefox-location.ts | 4 +-- .../run-firefox/firefox/browser-config.ts | 2 +- .../plugin-browsers/run-firefox/index.ts | 2 +- .../run-firefox/remote-firefox/index.ts | 2 +- programs/develop/webpack/dev-server.ts | 14 +++++------ programs/develop/webpack/lib/messages.ts | 14 +++++++---- programs/develop/webpack/lib/utils.ts | 2 +- .../feature-browser-fields.ts | 2 +- .../plugin-compatibility/feature-polyfill.ts | 2 +- .../webpack/plugin-compatibility/index.ts | 2 +- .../plugin-compilation/clean-hot-updates.ts | 2 +- .../develop/webpack/plugin-compilation/env.ts | 6 ++--- .../webpack/plugin-compilation/index.ts | 8 +++--- .../plugin-css/common-style-loaders.ts | 7 +++--- .../webpack/plugin-css/css-tools/stylelint.ts | 4 +-- programs/develop/webpack/plugin-css/index.ts | 10 ++++---- .../develop/webpack/plugin-errors/index.ts | 2 +- .../firefox-service-worker-error.ts | 8 +++--- .../manifest-runtime-errors/index.ts | 4 +-- .../insecure-csp-value-errors.ts | 8 +++--- .../no-default-locale-error.ts | 8 +++--- .../wrong-web-resource-format-error.ts | 8 +++--- .../deprecated-errors.ts | 2 +- .../manifest-schema-errors/index.ts | 2 +- .../invalid-field-type-errors.ts | 2 +- .../required-field-errors.ts | 2 +- .../compilation-error-handlers.ts | 25 ++++++------------- .../webpack-common-errors/index.ts | 4 +-- .../feature-html/html-lib/patch-html.ts | 2 +- .../plugin-extension/feature-html/index.ts | 2 +- .../steps/add-assets-to-compilation.ts | 5 ++-- .../add-scripts-and-styles-to-compilation.ts | 6 ++--- .../steps/add-to-file-dependencies.ts | 3 +-- .../feature-html/steps/emit-html-file.ts | 7 ++---- .../steps/handle-common-errors.ts | 4 +-- .../steps/throw-if-recompile-is-needed.ts | 2 +- .../feature-html/steps/update-html-file.ts | 3 +-- .../plugin-extension/feature-icons/index.ts | 4 +-- .../steps/add-to-file-dependencies.ts | 2 +- .../feature-icons/steps/emit-file.ts | 5 ++-- .../plugin-extension/feature-json/index.ts | 7 +++--- .../plugin-extension/feature-locales/index.ts | 11 +++----- .../feature-manifest/index.ts | 4 +-- .../steps/add-dependencies.ts | 4 +-- .../steps/check-manifest-files.ts | 9 ++----- .../feature-manifest/steps/emit-manifest.ts | 5 ++-- .../steps/throw-if-recompile.ts | 8 +++--- .../feature-manifest/steps/update-manifest.ts | 2 +- .../plugin-extension/feature-resolve/index.ts | 6 ++--- .../plugin-extension/feature-scripts/index.ts | 4 +-- .../feature-scripts/scripts-lib/utils.ts | 8 +++--- .../steps/add-public-path-for-main-world.ts | 3 +-- .../steps/add-public-path-runtime-module.ts | 7 +++++- .../feature-scripts/steps/add-scripts.ts | 4 +-- .../copy-public-folder.ts | 4 +-- .../feature-special-folders/index.ts | 2 +- .../warn-upon-folder-changes.ts | 2 +- .../feature-web-resources/index.ts | 4 +-- .../develop/webpack/plugin-extension/index.ts | 2 +- .../webpack/plugin-js-frameworks/index.ts | 7 +++++- .../plugin-js-frameworks/js-tools/babel.ts | 2 +- .../plugin-js-frameworks/js-tools/preact.ts | 4 +-- .../plugin-js-frameworks/js-tools/react.ts | 4 +-- .../develop/webpack/plugin-reload/index.ts | 4 +-- .../steps/create-web-socket-server/index.ts | 2 +- .../web-socket-server/start-server.ts | 2 +- .../setup-chromium-reload-client/index.ts | 2 +- .../inject-chromium-client-loader.ts | 2 +- .../setup-firefox-reload-client/index.ts | 3 +-- .../inject-firefox-client-loader.ts | 2 +- .../apply-manifest-dev-defaults/index.ts | 7 +++--- .../steps/setup-reload-strategy/index.ts | 4 +-- .../target-web-extension-plugin/index.ts | 8 +++--- .../webpack/plugin-static-assets/index.ts | 2 +- .../{webpack-config.ts => rspack-config.ts} | 25 ++++++++++--------- programs/develop/webpack/webpack-types.ts | 8 +++--- 89 files changed, 221 insertions(+), 241 deletions(-) rename programs/develop/webpack/{webpack-config.ts => rspack-config.ts} (90%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8f4e66bf..462c1af4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,13 +2,13 @@ First off, thanks a lot for taking time to read this part. Extension.js' core phiolosophy is to make it very easy to develop browser extensions, and that includes the program that makes it happen as well. Hope this guide makes it very easy for you to contribute ;) -Extension.js runs on top of webpack using custom plugins. The whole Extension.js program consists of three core modules. +Extension.js runs on top of Rspack using custom plugins. The whole Extension.js program consists of three core modules. | Program | Description | | --------- | ---------------------------------------------------------------------------------------------- | | `cli` | The Command Line Interface that executes the Extension.js programs. | | `create` | Create extensions from built-in templates. This is what runs when `extension create` is fired. | -| `develop` | Wrapper around the webpack config that consists of the `dev`, `start`, and `build` commands. | +| `develop` | Wrapper around the rspack config that consists of the `dev`, `start`, and `build` commands. | ## Installation diff --git a/eslint.config.mjs b/eslint.config.mjs index 62199a27..76487431 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -16,7 +16,7 @@ export default [ ignores: [ '__TEST__', '**/dist/', - '**/webpack.config.js', + '**/rspack.config.js', '**/postcss.config.js', '**/tailwind.config.js', '**/stylelint.config.json' diff --git a/programs/create/create.spec.ts b/programs/create/create.spec.ts index 0ab84839..30df3d65 100644 --- a/programs/create/create.spec.ts +++ b/programs/create/create.spec.ts @@ -84,8 +84,8 @@ describe('extension create', () => { ? 'ts' : 'tsx' : template.configFiles?.includes('tsconfig.json') - ? 'ts' - : 'js' + ? 'ts' + : 'js' template.uiContext?.forEach((context: string) => { // Expect [context]/index.html for all contexts except 'content' diff --git a/programs/develop/commands/build.ts b/programs/develop/commands/build.ts index 38cb7e98..6cc0019d 100644 --- a/programs/develop/commands/build.ts +++ b/programs/develop/commands/build.ts @@ -7,9 +7,9 @@ import fs from 'fs' import path from 'path' -import webpack from 'webpack' +import {rspack} from '@rspack/core' import {merge} from 'webpack-merge' -import webpackConfig from '../webpack/webpack-config' +import rspackConfig from '../webpack/rspack-config' import {getProjectPath} from './commands-lib/get-project-path' import * as messages from './commands-lib/messages' import {generateZip} from './commands-lib/generate-zip' @@ -40,7 +40,7 @@ export async function extensionBuild( try { const browser = buildOptions?.browser || 'chrome' - const baseConfig = webpackConfig(projectPath, { + const baseConfig = rspackConfig(projectPath, { ...buildOptions, browser, mode: 'production' @@ -60,7 +60,7 @@ export async function extensionBuild( }) const compilerConfig = merge(userConfig) - const compiler = webpack(compilerConfig) + const compiler = rspack(compilerConfig) await new Promise((resolve, reject) => { compiler.run(async (err, stats) => { @@ -69,7 +69,7 @@ export async function extensionBuild( return reject(err) } - console.log(messages.buildWebpack(projectPath, stats, browser)) + console.log(messages.buildRspack(projectPath, stats, browser)) if (buildOptions?.zip || buildOptions?.zipSource) { await generateZip(projectPath, {...buildOptions, browser}) diff --git a/programs/develop/commands/commands-lib/config-types.ts b/programs/develop/commands/commands-lib/config-types.ts index 41b53771..52f15e35 100644 --- a/programs/develop/commands/commands-lib/config-types.ts +++ b/programs/develop/commands/commands-lib/config-types.ts @@ -1,4 +1,4 @@ -import {Configuration} from 'webpack' +import {Configuration} from '@rspack/core' export interface FileConfig { config: (config: Configuration) => Configuration diff --git a/programs/develop/commands/commands-lib/generate-zip.ts b/programs/develop/commands/commands-lib/generate-zip.ts index 7c3be4bf..65d28eb2 100644 --- a/programs/develop/commands/commands-lib/generate-zip.ts +++ b/programs/develop/commands/commands-lib/generate-zip.ts @@ -73,9 +73,10 @@ export async function generateZip( const outputDir = path.join(distDir, browser) // We collect data from the projectDir if the user wants to zip the source files. const dataDir = options.zipSource ? projectDir : outputDir - const manifest: Record = require( - path.join(dataDir, 'manifest.json') - ) + const manifest: Record = require(path.join( + dataDir, + 'manifest.json' + )) const name = getPackageName(manifest, options) const ext = getExtensionExtension(browser) // Dist zips are stored in dist/[browser]/[name].zip diff --git a/programs/develop/commands/commands-lib/get-extension-config.ts b/programs/develop/commands/commands-lib/get-extension-config.ts index 168aaff7..748414eb 100644 --- a/programs/develop/commands/commands-lib/get-extension-config.ts +++ b/programs/develop/commands/commands-lib/get-extension-config.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import {Configuration} from 'webpack' +import {Configuration} from '@rspack/core' import {FileConfig} from './config-types' import * as messages from './messages' diff --git a/programs/develop/commands/commands-lib/messages.ts b/programs/develop/commands/commands-lib/messages.ts index 220ceb87..e36d6fd6 100644 --- a/programs/develop/commands/commands-lib/messages.ts +++ b/programs/develop/commands/commands-lib/messages.ts @@ -1,6 +1,6 @@ import path from 'path' import fs from 'fs' -import {StatsAsset} from 'webpack' +import {StatsAsset} from '@rspack/core' import { gray, red, @@ -19,10 +19,10 @@ function getLoggingPrefix(type: 'warn' | 'info' | 'error' | 'success'): string { type === 'warn' ? brightYellow('►►►') : type === 'info' - ? magenta('►►►') - : type === 'error' - ? red('✖︎✖︎✖︎') - : brightGreen('►►►') + ? magenta('►►►') + : type === 'error' + ? red('✖︎✖︎✖︎') + : brightGreen('►►►') // return `🧩 ${'Extension.js'} ${arrow}` return `${arrow}` } @@ -95,11 +95,11 @@ export function previewing(browser: DevOptions['browser']) { )} Previewing the extension on ${capitalizedBrowserName(browser)}...` } -export function previewWebpack() { +export function previewRspack() { return `${getLoggingPrefix('info')} Previewing the extension package...` } -export function buildWebpack( +export function buildRspack( projectDir: string, stats: any, browser: DevOptions['browser'] diff --git a/programs/develop/commands/preview.ts b/programs/develop/commands/preview.ts index 6e3fe534..9fe8ecf5 100644 --- a/programs/develop/commands/preview.ts +++ b/programs/develop/commands/preview.ts @@ -7,9 +7,9 @@ import fs from 'fs' import path from 'path' -import webpack from 'webpack' +import {rspack} from '@rspack/core' import {merge} from 'webpack-merge' -import webpackConfig from '../webpack/webpack-config' +import rspackConfig from '../webpack/rspack-config' import {getProjectPath} from './commands-lib/get-project-path' import * as messages from './commands-lib/messages' import {loadExtensionConfig} from './commands-lib/get-extension-config' @@ -36,7 +36,7 @@ export async function extensionPreview( try { const browser = previewOptions.browser || 'chrome' - const baseConfig = webpackConfig(projectPath, { + const baseConfig = rspackConfig(projectPath, { ...previewOptions, browser, mode: 'production' @@ -54,7 +54,7 @@ export async function extensionPreview( plugins: onlyBrowserRunners }) const compilerConfig = merge(userConfig) - const compiler = webpack(compilerConfig) + const compiler = rspack(compilerConfig) compiler.run(async (err, stats) => { if (err) { diff --git a/programs/develop/commands/start.ts b/programs/develop/commands/start.ts index 1a507df3..6720cebe 100644 --- a/programs/develop/commands/start.ts +++ b/programs/develop/commands/start.ts @@ -7,9 +7,9 @@ import fs from 'fs' import path from 'path' -import webpack from 'webpack' +import {rspack} from '@rspack/core' import {merge} from 'webpack-merge' -import webpackConfig from '../webpack/webpack-config' +import rspackConfig from '../webpack/rspack-config' import {getProjectPath} from './commands-lib/get-project-path' import * as messages from './commands-lib/messages' import {loadExtensionConfig} from './commands-lib/get-extension-config' @@ -40,7 +40,7 @@ export async function extensionStart( try { const browser = startOptions.browser || 'chrome' - const baseConfig = webpackConfig(projectPath, { + const baseConfig = rspackConfig(projectPath, { ...startOptions, browser, mode: 'production' @@ -58,7 +58,7 @@ export async function extensionStart( plugins: allPluginsButReloader }) const compilerConfig = merge(userConfig) - const compiler = webpack(compilerConfig) + const compiler = rspack(compilerConfig) compiler.run((err, stats) => { if (err) { diff --git a/programs/develop/plugin-browsers/browsers-lib/messages.ts b/programs/develop/plugin-browsers/browsers-lib/messages.ts index f6ea61e7..eb086522 100644 --- a/programs/develop/plugin-browsers/browsers-lib/messages.ts +++ b/programs/develop/plugin-browsers/browsers-lib/messages.ts @@ -18,10 +18,10 @@ function getLoggingPrefix( type === 'warn' ? brightYellow('►►►') : type === 'info' - ? cyan('►►►') - : type === 'error' - ? red('✖︎✖︎✖︎') - : brightGreen('►►►') + ? cyan('►►►') + : type === 'error' + ? red('✖︎✖︎✖︎') + : brightGreen('►►►') return `${gray('')}${arrow}` } diff --git a/programs/develop/plugin-browsers/index.ts b/programs/develop/plugin-browsers/index.ts index 1543bbc2..de51e843 100644 --- a/programs/develop/plugin-browsers/index.ts +++ b/programs/develop/plugin-browsers/index.ts @@ -1,6 +1,6 @@ import os from 'os' import path from 'path' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {type PluginInterface} from './browsers-types' import {RunChromiumPlugin} from './run-chromium' import {RunFirefoxPlugin} from './run-firefox' @@ -9,7 +9,7 @@ import {DevOptions} from '../commands/dev' /** * BrowsersPlugin works by creating a WebSockets server * that listens to changes triggered by the user extension - * via webpack. When a change is detected, the server sends + * via rspack. When a change is detected, the server sends * a message to an extension called reload-extension, which * is injected into the browser. This extension is responsible * for sending messages to the user extension. We do that by diff --git a/programs/develop/plugin-browsers/run-chromium/index.ts b/programs/develop/plugin-browsers/run-chromium/index.ts index 7e70160e..9c8a2d78 100644 --- a/programs/develop/plugin-browsers/run-chromium/index.ts +++ b/programs/develop/plugin-browsers/run-chromium/index.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {spawn} from 'child_process' import {browserConfig} from './browser-config' import * as messages from '../browsers-lib/messages' diff --git a/programs/develop/plugin-browsers/run-firefox/firefox-location.ts b/programs/develop/plugin-browsers/run-firefox/firefox-location.ts index b4e10e00..462597e2 100644 --- a/programs/develop/plugin-browsers/run-firefox/firefox-location.ts +++ b/programs/develop/plugin-browsers/run-firefox/firefox-location.ts @@ -22,8 +22,8 @@ function getFirefoxLocation(): string | null { return fs.existsSync(regPath) ? regPath : fs.existsSync(altPath) - ? altPath - : null + ? altPath + : null } else { const suffix = path.join('Mozilla Firefox', 'firefox.exe') const possiblePaths = [ diff --git a/programs/develop/plugin-browsers/run-firefox/firefox/browser-config.ts b/programs/develop/plugin-browsers/run-firefox/firefox/browser-config.ts index 36910fff..1fd1efa1 100644 --- a/programs/develop/plugin-browsers/run-firefox/firefox/browser-config.ts +++ b/programs/develop/plugin-browsers/run-firefox/firefox/browser-config.ts @@ -1,4 +1,4 @@ -import {Compiler} from 'webpack' +import {Compiler} from '@rspack/core' import {createUserDataDir} from './create-profile' import {type PluginInterface} from '../../browsers-types' diff --git a/programs/develop/plugin-browsers/run-firefox/index.ts b/programs/develop/plugin-browsers/run-firefox/index.ts index 1a2d8cad..35483f5a 100644 --- a/programs/develop/plugin-browsers/run-firefox/index.ts +++ b/programs/develop/plugin-browsers/run-firefox/index.ts @@ -1,6 +1,6 @@ import fs from 'fs' import {exec, ChildProcess} from 'child_process' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {firefoxLocation} from './firefox-location' import {browserConfig} from './firefox/browser-config' import {RemoteFirefox} from './remote-firefox' diff --git a/programs/develop/plugin-browsers/run-firefox/remote-firefox/index.ts b/programs/develop/plugin-browsers/run-firefox/remote-firefox/index.ts index 3ebb292e..8d09c8b6 100644 --- a/programs/develop/plugin-browsers/run-firefox/remote-firefox/index.ts +++ b/programs/develop/plugin-browsers/run-firefox/remote-firefox/index.ts @@ -1,5 +1,5 @@ import path from 'path' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {MessagingClient} from './messaging-client' import {isErrorWithCode, requestErrorToMessage} from './message-utils' import {type PluginInterface} from '../../browsers-types' diff --git a/programs/develop/webpack/dev-server.ts b/programs/develop/webpack/dev-server.ts index b0e01ca3..21ac7571 100644 --- a/programs/develop/webpack/dev-server.ts +++ b/programs/develop/webpack/dev-server.ts @@ -6,15 +6,15 @@ // ╚═════╝ ╚══════╝ ╚═══╝ ╚══════╝╚══════╝ ╚═════╝ ╚═╝ import path from 'path' -import webpack from 'webpack' -import WebpackDevServer from 'webpack-dev-server' +import {rspack} from '@rspack/core' +import {RspackDevServer, Configuration} from '@rspack/dev-server' import {merge} from 'webpack-merge' -import webpackConfig from './webpack-config' +import webpackConfig from './rspack-config' import type {DevOptions} from '../commands/dev' import * as utils from './lib/utils' import {loadExtensionConfig} from '../commands/commands-lib/get-extension-config' -function closeAll(devServer: WebpackDevServer) { +function closeAll(devServer: RspackDevServer) { devServer .stop() .then(() => { @@ -36,9 +36,9 @@ export async function devServer( const userExtensionConfig = loadExtensionConfig(projectPath) const userConfig = userExtensionConfig(baseConfig) const compilerConfig = merge(userConfig) - const compiler = webpack(compilerConfig) + const compiler = rspack(compilerConfig) - const serverConfig: WebpackDevServer.Configuration = { + const serverConfig: Configuration = { host: '127.0.0.1', allowedHosts: 'all', static: path.join(projectPath, 'public'), @@ -74,7 +74,7 @@ export async function devServer( hot: 'only' } - const devServer = new WebpackDevServer(serverConfig, compiler) + const devServer = new RspackDevServer(serverConfig, compiler) devServer.startCallback((error) => { if (error != null) { diff --git a/programs/develop/webpack/lib/messages.ts b/programs/develop/webpack/lib/messages.ts index 6a460224..e491ccc9 100644 --- a/programs/develop/webpack/lib/messages.ts +++ b/programs/develop/webpack/lib/messages.ts @@ -14,7 +14,7 @@ import { import {Manifest} from '../webpack-types' import {DevOptions} from '../../commands/dev' import {CERTIFICATE_DESTINATION_PATH} from './constants' -import {Stats} from 'webpack' +import {Stats} from '@rspack/core' type PrefixType = 'warn' | 'info' | 'error' | 'success' @@ -29,8 +29,8 @@ function getLoggingPrefix(manifestName: string, type: PrefixType): string { type === 'warn' ? brightYellow('►►►') : type === 'info' - ? cyan('►►►') - : brightGreen('►►►') + ? cyan('►►►') + : brightGreen('►►►') return `${arrow} ${manifestName}` } @@ -659,8 +659,12 @@ export function certRequired() { )} \\\n` + ` ${brightGreen('--cert')} ${brightYellow('localhost.cert')} \\\n` + ` ${brightGreen('--key')} ${brightYellow('localhost.key')}\n\n` + - `This will enable the secure certificate needed for Firefox via ${bold('mkcert')}.\n\n` + - `Learn more about ${bold('mkcert')}: ${underline(`https://github.com/FiloSottile/mkcert`)}` + `This will enable the secure certificate needed for Firefox via ${bold( + 'mkcert' + )}.\n\n` + + `Learn more about ${bold('mkcert')}: ${underline( + `https://github.com/FiloSottile/mkcert` + )}` ) } diff --git a/programs/develop/webpack/lib/utils.ts b/programs/develop/webpack/lib/utils.ts index 8dd9dc65..cbf73e6d 100644 --- a/programs/develop/webpack/lib/utils.ts +++ b/programs/develop/webpack/lib/utils.ts @@ -1,6 +1,6 @@ import path from 'path' import fs from 'fs' -import {type Compilation} from 'webpack' +import {type Compilation} from '@rspack/core' import {execSync} from 'child_process' import {detect} from 'detect-package-manager' import * as messages from './messages' diff --git a/programs/develop/webpack/plugin-compatibility/feature-browser-fields.ts b/programs/develop/webpack/plugin-compatibility/feature-browser-fields.ts index 912a79ed..9719511b 100644 --- a/programs/develop/webpack/plugin-compatibility/feature-browser-fields.ts +++ b/programs/develop/webpack/plugin-compatibility/feature-browser-fields.ts @@ -1,4 +1,4 @@ -import {type Compiler, Compilation, sources} from 'webpack' +import {type Compiler, Compilation, sources} from '@rspack/core' import {type PluginInterface, type Manifest} from '../webpack-types' import {type DevOptions} from '../../commands/dev' import {getManifestContent} from '../lib/utils' diff --git a/programs/develop/webpack/plugin-compatibility/feature-polyfill.ts b/programs/develop/webpack/plugin-compatibility/feature-polyfill.ts index dba6a720..0ee9373c 100644 --- a/programs/develop/webpack/plugin-compatibility/feature-polyfill.ts +++ b/programs/develop/webpack/plugin-compatibility/feature-polyfill.ts @@ -1,4 +1,4 @@ -import webpack, {type Compiler} from 'webpack' +import webpack, {type Compiler} from '@rspack/core' interface PolyfillPluginInterface { manifestPath: string diff --git a/programs/develop/webpack/plugin-compatibility/index.ts b/programs/develop/webpack/plugin-compatibility/index.ts index d83ed1d4..11fb3dca 100644 --- a/programs/develop/webpack/plugin-compatibility/index.ts +++ b/programs/develop/webpack/plugin-compatibility/index.ts @@ -5,7 +5,7 @@ // ██████╔╝███████╗ ╚████╔╝ ███████╗███████╗╚██████╔╝██║ // ╚═════╝ ╚══════╝ ╚═══╝ ╚══════╝╚══════╝ ╚═════╝ ╚═╝ -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {PluginInterface} from '../webpack-types' import {PolyfillPlugin} from './feature-polyfill' import {BrowserFieldsPlugin} from './feature-browser-fields' diff --git a/programs/develop/webpack/plugin-compilation/clean-hot-updates.ts b/programs/develop/webpack/plugin-compilation/clean-hot-updates.ts index fb48a2f1..cb9de265 100644 --- a/programs/develop/webpack/plugin-compilation/clean-hot-updates.ts +++ b/programs/develop/webpack/plugin-compilation/clean-hot-updates.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' export class CleanHotUpdatesPlugin { apply(compiler: Compiler): void { diff --git a/programs/develop/webpack/plugin-compilation/env.ts b/programs/develop/webpack/plugin-compilation/env.ts index fce5c52e..5241661d 100644 --- a/programs/develop/webpack/plugin-compilation/env.ts +++ b/programs/develop/webpack/plugin-compilation/env.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import Dotenv from 'dotenv-webpack' import * as messages from '../lib/messages' import {type Manifest} from '../webpack-types' @@ -30,8 +30,8 @@ export class EnvPlugin { path: fs.existsSync(path.join(projectPath, '.env')) ? path.join(projectPath, '.env') : fs.existsSync(path.join(projectPath, '.env.local')) - ? path.join(projectPath, '.env.local') - : path.join(projectPath, '.env.example'), + ? path.join(projectPath, '.env.local') + : path.join(projectPath, '.env.example'), allowEmptyValues: true, defaults: fs.existsSync(path.join(projectPath, '.env.defaults')), systemvars: true diff --git a/programs/develop/webpack/plugin-compilation/index.ts b/programs/develop/webpack/plugin-compilation/index.ts index e36c8f25..8f06e59a 100644 --- a/programs/develop/webpack/plugin-compilation/index.ts +++ b/programs/develop/webpack/plugin-compilation/index.ts @@ -1,5 +1,4 @@ -import {Compiler} from 'webpack' -import CaseSensitivePathsPlugin from 'case-sensitive-paths-webpack-plugin' +import {Compiler} from '@rspack/core' import {EnvPlugin} from './env' import {CleanHotUpdatesPlugin} from './clean-hot-updates' import * as messages from '../lib/messages' @@ -16,8 +15,6 @@ export class CompilationPlugin { } public apply(compiler: Compiler): void { - new CaseSensitivePathsPlugin().apply(compiler) - new EnvPlugin({manifestPath: this.manifestPath}).apply(compiler) new CleanHotUpdatesPlugin().apply(compiler) @@ -26,7 +23,8 @@ export class CompilationPlugin { stats.compilation.name = undefined // Calculate compilation time - const duration = stats.endTime - stats.startTime + const duration = + (stats.compilation.endTime || 0) - (stats.compilation.startTime || 0) const manifestName = require(this.manifestPath).name console.log(messages.boring(manifestName, duration, stats)) diff --git a/programs/develop/webpack/plugin-css/common-style-loaders.ts b/programs/develop/webpack/plugin-css/common-style-loaders.ts index eadcc00e..b7c620cf 100644 --- a/programs/develop/webpack/plugin-css/common-style-loaders.ts +++ b/programs/develop/webpack/plugin-css/common-style-loaders.ts @@ -1,4 +1,4 @@ -import {type RuleSetRule} from 'webpack' +import {type RuleSetRule} from '@rspack/core' import rspack from '@rspack/core' import {DevOptions} from '../../commands/dev' import {isUsingTailwind} from './css-tools/tailwind' @@ -23,8 +23,8 @@ export async function commonStyleLoaders( opts.useMiniCssExtractPlugin ? miniCssLoader : isUsingVue(projectPath) - ? require.resolve('vue-style-loader') - : require.resolve('style-loader'), + ? require.resolve('vue-style-loader') + : require.resolve('style-loader'), { loader: require.resolve('css-loader'), options: { @@ -40,6 +40,7 @@ export async function commonStyleLoaders( ) { const maybeInstallPostCss = await maybeUsePostCss(projectPath, opts) if (maybeInstallPostCss.loader) { + // @ts-expect-error styleLoaders.push(maybeInstallPostCss) } } diff --git a/programs/develop/webpack/plugin-css/css-tools/stylelint.ts b/programs/develop/webpack/plugin-css/css-tools/stylelint.ts index b52a3b8b..24106318 100644 --- a/programs/develop/webpack/plugin-css/css-tools/stylelint.ts +++ b/programs/develop/webpack/plugin-css/css-tools/stylelint.ts @@ -7,7 +7,7 @@ import path from 'path' import fs from 'fs' -import {type WebpackPluginInstance} from 'webpack' +import {type RspackPluginInstance} from '@rspack/core' import * as messages from '../../lib/messages' import {installOptionalDependencies} from '../../lib/utils' @@ -66,7 +66,7 @@ export function isUsingStylelint(projectPath: string) { export async function maybeUseStylelint( projectPath: string -): Promise { +): Promise { if (!isUsingStylelint(projectPath)) return [] try { diff --git a/programs/develop/webpack/plugin-css/index.ts b/programs/develop/webpack/plugin-css/index.ts index f072511f..a7b89d68 100644 --- a/programs/develop/webpack/plugin-css/index.ts +++ b/programs/develop/webpack/plugin-css/index.ts @@ -1,10 +1,10 @@ import path from 'path' import { - type WebpackPluginInstance, + CssExtractRspackPlugin, + type RspackPluginInstance, type Compiler, type RuleSetRule -} from 'webpack' -import rspack from '@rspack/core' +} from '@rspack/core' import {commonStyleLoaders} from './common-style-loaders' import {PluginInterface} from '../webpack-types' import {type DevOptions} from '../../commands/dev' @@ -26,8 +26,8 @@ export class CssPlugin { private async configureOptions(compiler: Compiler) { const projectPath = path.dirname(this.manifestPath) - const plugins: WebpackPluginInstance[] = [ - new rspack.CssExtractRspackPlugin() as any + const plugins: RspackPluginInstance[] = [ + new CssExtractRspackPlugin() as any ] plugins.forEach((plugin) => plugin.apply(compiler)) diff --git a/programs/develop/webpack/plugin-errors/index.ts b/programs/develop/webpack/plugin-errors/index.ts index 4f3654e1..5d281f92 100644 --- a/programs/develop/webpack/plugin-errors/index.ts +++ b/programs/develop/webpack/plugin-errors/index.ts @@ -5,7 +5,7 @@ // ██████╔╝███████╗ ╚████╔╝ ███████╗███████╗╚██████╔╝██║ // ╚═════╝ ╚══════╝ ╚═══╝ ╚══════╝╚══════╝ ╚═════╝ ╚═╝ -import {Compiler} from 'webpack' +import {Compiler} from '@rspack/core' import {type PluginInterface} from '../webpack-types' import {DevOptions} from '../../commands/dev' import {ManifestRuntimeErrorsPlugin} from './manifest-runtime-errors' diff --git a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/firefox-service-worker-error.ts b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/firefox-service-worker-error.ts index 522208cd..8f61f27d 100644 --- a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/firefox-service-worker-error.ts +++ b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/firefox-service-worker-error.ts @@ -1,17 +1,15 @@ -import webpack from 'webpack' +import {WebpackError} from '@rspack/core' import * as messages from '../../lib/messages' import {type Manifest} from '../../webpack-types' export function firefoxRunningServiceWorkerError( manifest: Manifest, browser: string -): webpack.WebpackError | null { +) { if (browser === 'firefox') { if (manifest.background?.service_worker) { const manifestName = manifest.name || 'Extension.js' - return new webpack.WebpackError( - messages.firefoxServiceWorkerError(manifestName) - ) + return new WebpackError(messages.firefoxServiceWorkerError(manifestName)) } } diff --git a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/index.ts b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/index.ts index becf6bae..5a77c483 100644 --- a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/index.ts +++ b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/index.ts @@ -1,4 +1,4 @@ -import webpack, {type Compiler} from 'webpack' +import {type Compilation, type Compiler} from '@rspack/core' import fs from 'fs' import {type PluginInterface, type Manifest} from '../../webpack-types' import {insecureCSPValueError} from './insecure-csp-value-errors' @@ -15,7 +15,7 @@ export class ManifestRuntimeErrorsPlugin { } handleRuntimeErrors( - compilation: webpack.Compilation, + compilation: Compilation, manifest: Manifest, browser: DevOptions['browser'] ) { diff --git a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/insecure-csp-value-errors.ts b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/insecure-csp-value-errors.ts index 5abaf08b..4b44f164 100644 --- a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/insecure-csp-value-errors.ts +++ b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/insecure-csp-value-errors.ts @@ -1,11 +1,9 @@ -import webpack from 'webpack' +import {WebpackError} from '@rspack/core' import parseCSP from 'content-security-policy-parser' import * as messages from '../../lib/messages' import {type Manifest} from '../../webpack-types' -export function insecureCSPValueError( - manifest: Manifest -): webpack.WebpackError | null { +export function insecureCSPValueError(manifest: Manifest) { const manifestCSP: string | undefined = manifest.content_security_policy const extensionPagesCSP: string | undefined = manifest.content_security_policy?.extension_pages @@ -29,7 +27,7 @@ export function insecureCSPValueError( : undefined if (extensionPagesCSPError) { - return new webpack.WebpackError(extensionPagesCSPError) + return new WebpackError(extensionPagesCSPError) } } diff --git a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/no-default-locale-error.ts b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/no-default-locale-error.ts index c0db2856..e4a30c33 100644 --- a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/no-default-locale-error.ts +++ b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/no-default-locale-error.ts @@ -1,19 +1,19 @@ import path from 'path' import fs from 'fs' -import webpack from 'webpack' +import {Compilation, WebpackError} from '@rspack/core' import * as messages from '../../lib/messages' import {type Manifest} from '../../webpack-types' export function noDefaultLocaleError( manifest: Manifest, - compilation: webpack.Compilation -): webpack.WebpackError | null { + compilation: Compilation +) { // Check if a top-level _locales directory exists. const localesDir = path.join(compilation.options.context || '', '_locales') const manifestName = manifest.name || 'Extension.js' if (fs.existsSync(localesDir) && !manifest.default_locale) { - return new webpack.WebpackError(messages.noDefaultLocaleError(manifestName)) + return new WebpackError(messages.noDefaultLocaleError(manifestName)) } return null diff --git a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/wrong-web-resource-format-error.ts b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/wrong-web-resource-format-error.ts index 2e287b7e..211fc755 100644 --- a/programs/develop/webpack/plugin-errors/manifest-runtime-errors/wrong-web-resource-format-error.ts +++ b/programs/develop/webpack/plugin-errors/manifest-runtime-errors/wrong-web-resource-format-error.ts @@ -1,4 +1,4 @@ -import webpack from 'webpack' +import {WebpackError} from '@rspack/core' import * as messages from '../../lib/messages' import {type Manifest} from '../../webpack-types' import {DevOptions} from '../../../module' @@ -6,7 +6,7 @@ import {DevOptions} from '../../../module' export function wrongWebResourceFormatError( manifest: Manifest, browser: DevOptions['browser'] -): webpack.WebpackError | null { +) { const webResources = manifest.web_accessible_resources as string[] if (webResources) { @@ -23,13 +23,13 @@ export function wrongWebResourceFormatError( const manifestName = manifest.name || 'Extension.js' if (manifest.manifest_version === 2 && !mv2Format) { - return new webpack.WebpackError( + return new WebpackError( messages.webAccessibleResourcesV2Type(manifestName, browser) ) } if (manifest.manifest_version === 3 && !mv3Format) { - return new webpack.WebpackError( + return new WebpackError( messages.webAccessibleResourcesV3Type(manifestName, browser) ) } diff --git a/programs/develop/webpack/plugin-errors/manifest-schema-errors/deprecated-errors.ts b/programs/develop/webpack/plugin-errors/manifest-schema-errors/deprecated-errors.ts index 0133449e..262bb504 100644 --- a/programs/develop/webpack/plugin-errors/manifest-schema-errors/deprecated-errors.ts +++ b/programs/develop/webpack/plugin-errors/manifest-schema-errors/deprecated-errors.ts @@ -1,5 +1,5 @@ import path from 'path' -import {WebpackError, type Compilation} from 'webpack' +import {WebpackError, type Compilation} from '@rspack/core' import {type ErrorObject} from 'ajv' import * as messages from '../../lib/messages' import {type Manifest} from '../../webpack-types' diff --git a/programs/develop/webpack/plugin-errors/manifest-schema-errors/index.ts b/programs/develop/webpack/plugin-errors/manifest-schema-errors/index.ts index 053d60a8..4c60ff37 100644 --- a/programs/develop/webpack/plugin-errors/manifest-schema-errors/index.ts +++ b/programs/develop/webpack/plugin-errors/manifest-schema-errors/index.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import {type Compiler, type Compilation} from 'webpack' +import {type Compiler, type Compilation} from '@rspack/core' import Ajv from 'ajv' import v3Schema from './lib/manifest.schema.v3.json' import {addCustomFormats} from './lib/custom-validators' diff --git a/programs/develop/webpack/plugin-errors/manifest-schema-errors/invalid-field-type-errors.ts b/programs/develop/webpack/plugin-errors/manifest-schema-errors/invalid-field-type-errors.ts index 2a45e0ae..abeefb8f 100644 --- a/programs/develop/webpack/plugin-errors/manifest-schema-errors/invalid-field-type-errors.ts +++ b/programs/develop/webpack/plugin-errors/manifest-schema-errors/invalid-field-type-errors.ts @@ -1,5 +1,5 @@ import path from 'path' -import {WebpackError, type Compilation} from 'webpack' +import {WebpackError, type Compilation} from '@rspack/core' import {type ErrorObject} from 'ajv' import {type Manifest} from '../../webpack-types' import * as messages from '../../lib/messages' diff --git a/programs/develop/webpack/plugin-errors/manifest-schema-errors/required-field-errors.ts b/programs/develop/webpack/plugin-errors/manifest-schema-errors/required-field-errors.ts index cf5fb54d..33f5c2e3 100644 --- a/programs/develop/webpack/plugin-errors/manifest-schema-errors/required-field-errors.ts +++ b/programs/develop/webpack/plugin-errors/manifest-schema-errors/required-field-errors.ts @@ -1,5 +1,5 @@ import path from 'path' -import {WebpackError, type Compilation} from 'webpack' +import {WebpackError, type Compilation} from '@rspack/core' import {type ErrorObject} from 'ajv' import {type Manifest} from '../../webpack-types' import * as messages from '../../lib/messages' diff --git a/programs/develop/webpack/plugin-errors/webpack-common-errors/compilation-error-handlers.ts b/programs/develop/webpack/plugin-errors/webpack-common-errors/compilation-error-handlers.ts index f1c7d3bb..1c4cacc0 100644 --- a/programs/develop/webpack/plugin-errors/webpack-common-errors/compilation-error-handlers.ts +++ b/programs/develop/webpack/plugin-errors/webpack-common-errors/compilation-error-handlers.ts @@ -1,17 +1,14 @@ -import webpack from 'webpack' +import {WebpackError} from '@rspack/core' import * as messages from '../../lib/messages' -export function handleMultipleAssetsError( - packageJsonPath: string, - error: webpack.WebpackError -): webpack.WebpackError | null { +export function handleMultipleAssetsError(packageJsonPath: string, error: any) { const actualMsg = 'Conflict: Multiple assets emit different content to the same filename ' if (error.message.includes(actualMsg)) { const filename = error.message.replace(actualMsg, '') if (filename.startsWith('content_scripts')) { - return new webpack.WebpackError( + return new WebpackError( messages.handleMultipleAssetsError(packageJsonPath, filename) ) } @@ -19,10 +16,7 @@ export function handleMultipleAssetsError( return null } -export function handleCantResolveError( - packageJsonPath: string, - error: webpack.WebpackError -): webpack.WebpackError | null { +export function handleCantResolveError(packageJsonPath: string, error: any) { const manifest = require(packageJsonPath) const cantResolveMsg = 'Module not found: Error:' @@ -32,7 +26,7 @@ export function handleCantResolveError( // Module not found: Error: Can't resolve 'dep' in 'dep_path'. // We just want the 'dep' part. const moduleName = noPrefixMsg.split("'")[2] - return new webpack.WebpackError( + return new WebpackError( messages.handleCantResolveError(manifest.name, moduleName) ) } @@ -40,18 +34,13 @@ export function handleCantResolveError( return null } -export function handleTopLevelAwaitError( - packageJsonPath: string, - error: webpack.WebpackError -): webpack.WebpackError | null { +export function handleTopLevelAwaitError(packageJsonPath: string, error: any) { const manifest = require(packageJsonPath) const topLevelAwaitMsg = 'Top-level-await is only supported in EcmaScript Modules' if (error.message.includes(topLevelAwaitMsg)) { - return new webpack.WebpackError( - messages.handleTopLevelAwaitError(manifest.name) - ) + return new WebpackError(messages.handleTopLevelAwaitError(manifest.name)) } return null diff --git a/programs/develop/webpack/plugin-errors/webpack-common-errors/index.ts b/programs/develop/webpack/plugin-errors/webpack-common-errors/index.ts index 8e7039d2..ace59300 100644 --- a/programs/develop/webpack/plugin-errors/webpack-common-errors/index.ts +++ b/programs/develop/webpack/plugin-errors/webpack-common-errors/index.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import { handleMultipleAssetsError, handleTopLevelAwaitError @@ -15,7 +15,7 @@ export class WebpackCommonErrorsPlugin { this.manifestPath = options.manifestPath } - apply(compiler: webpack.Compiler) { + apply(compiler: Compiler) { const packageJsonPath = path.join( path.dirname(this.manifestPath), 'package.json' diff --git a/programs/develop/webpack/plugin-extension/feature-html/html-lib/patch-html.ts b/programs/develop/webpack/plugin-extension/feature-html/html-lib/patch-html.ts index eb6885bc..3551154c 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/html-lib/patch-html.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/html-lib/patch-html.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import {type Compilation} from 'webpack' +import {type Compilation} from '@rspack/core' // @ts-ignore import parse5utils from 'parse5-utils' import {parseHtml} from './parse-html' diff --git a/programs/develop/webpack/plugin-extension/feature-html/index.ts b/programs/develop/webpack/plugin-extension/feature-html/index.ts index 8e96d706..c6ad824b 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/index.ts @@ -1,5 +1,5 @@ import path from 'path' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../webpack-types' import {EmitHtmlFile} from './steps/emit-html-file' diff --git a/programs/develop/webpack/plugin-extension/feature-html/steps/add-assets-to-compilation.ts b/programs/develop/webpack/plugin-extension/feature-html/steps/add-assets-to-compilation.ts index 947bcaba..10014f13 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/steps/add-assets-to-compilation.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/steps/add-assets-to-compilation.ts @@ -1,7 +1,6 @@ import fs from 'fs' import path from 'path' -import webpack, {type Compiler} from 'webpack' -import {sources, Compilation} from 'webpack' +import {type Compiler, WebpackError, sources, Compilation} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' import {getAssetsFromHtml, isFromIncludeList} from '../html-lib/utils' import * as messages from '../../../lib/messages' @@ -78,7 +77,7 @@ export class AddAssetsToCompilation { ) compilation.warnings.push( - new webpack.WebpackError(errorMessage) + new WebpackError(errorMessage) ) return diff --git a/programs/develop/webpack/plugin-extension/feature-html/steps/add-scripts-and-styles-to-compilation.ts b/programs/develop/webpack/plugin-extension/feature-html/steps/add-scripts-and-styles-to-compilation.ts index 1b3dcbd4..d1338eb5 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/steps/add-scripts-and-styles-to-compilation.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/steps/add-scripts-and-styles-to-compilation.ts @@ -1,6 +1,6 @@ import path from 'path' import fs from 'fs' -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' import * as utils from '../../../lib/utils' import * as htmlUtils from '../html-lib/utils' @@ -16,7 +16,7 @@ export class AddScriptsAndStylesToCompilation { this.excludeList = options.excludeList } - public apply(compiler: webpack.Compiler) { + public apply(compiler: Compiler) { const htmlEntries = this.includeList || {} for (const field of Object.entries(htmlEntries)) { @@ -43,7 +43,7 @@ export class AddScriptsAndStylesToCompilation { if (!utils.shouldExclude(resource as string, this.excludeList)) { compiler.options.entry = { ...compiler.options.entry, - // https://webpack.js.org/configuration/entry-context/#entry-descriptor + // https://js.org/configuration/entry-context/#entry-descriptor [feature]: { import: fileAssets } diff --git a/programs/develop/webpack/plugin-extension/feature-html/steps/add-to-file-dependencies.ts b/programs/develop/webpack/plugin-extension/feature-html/steps/add-to-file-dependencies.ts index 560c61a7..304bf563 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/steps/add-to-file-dependencies.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/steps/add-to-file-dependencies.ts @@ -1,6 +1,5 @@ import fs from 'fs' -import {type Compiler} from 'webpack' -import {Compilation} from 'webpack' +import {type Compiler, Compilation} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' import {getAssetsFromHtml} from '../html-lib/utils' diff --git a/programs/develop/webpack/plugin-extension/feature-html/steps/emit-html-file.ts b/programs/develop/webpack/plugin-extension/feature-html/steps/emit-html-file.ts index 379ef717..3851e8f8 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/steps/emit-html-file.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/steps/emit-html-file.ts @@ -1,6 +1,5 @@ import fs from 'fs' -import webpack, {type Compiler, Compilation} from 'webpack' -import {sources} from 'webpack' +import {WebpackError, sources, type Compiler, Compilation} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' import * as messages from '../../../lib/messages' import * as utils from '../../../lib/utils' @@ -44,9 +43,7 @@ export class EmitHtmlFile { featureName, resource as string ) - compilation.warnings.push( - new webpack.WebpackError(errorMessage) - ) + compilation.warnings.push(new WebpackError(errorMessage)) return } diff --git a/programs/develop/webpack/plugin-extension/feature-html/steps/handle-common-errors.ts b/programs/develop/webpack/plugin-extension/feature-html/steps/handle-common-errors.ts index 4d77dddb..bc8089bb 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/steps/handle-common-errors.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/steps/handle-common-errors.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import {WebpackError, type Compiler} from 'webpack' +import {WebpackError, type Compiler, StatsError} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' import {getAssetsFromHtml} from '../html-lib/utils' @@ -8,7 +8,7 @@ import * as messages from '../../../lib/messages' function handleCantResolveError( manifestPath: string, includesList: FilepathList, - error: NodeJS.ErrnoException + error: StatsError ) { const cantResolveMsg = "Module not found: Error: Can't resolve " const customError = error.message.replace(cantResolveMsg, '') diff --git a/programs/develop/webpack/plugin-extension/feature-html/steps/throw-if-recompile-is-needed.ts b/programs/develop/webpack/plugin-extension/feature-html/steps/throw-if-recompile-is-needed.ts index 6ad7318c..e509f130 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/steps/throw-if-recompile-is-needed.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/steps/throw-if-recompile-is-needed.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' import {getAssetsFromHtml} from '../html-lib/utils' import * as messages from '../../../lib/messages' diff --git a/programs/develop/webpack/plugin-extension/feature-html/steps/update-html-file.ts b/programs/develop/webpack/plugin-extension/feature-html/steps/update-html-file.ts index 28112775..34644ded 100644 --- a/programs/develop/webpack/plugin-extension/feature-html/steps/update-html-file.ts +++ b/programs/develop/webpack/plugin-extension/feature-html/steps/update-html-file.ts @@ -1,5 +1,4 @@ -import {type Compiler} from 'webpack' -import {sources, Compilation} from 'webpack' +import {type Compiler, sources, Compilation} from '@rspack/core' import {patchHtml} from '../html-lib/patch-html' import {getFilePath} from '../html-lib/utils' import * as utils from '../../../lib/utils' diff --git a/programs/develop/webpack/plugin-extension/feature-icons/index.ts b/programs/develop/webpack/plugin-extension/feature-icons/index.ts index 017df732..05024cc8 100644 --- a/programs/develop/webpack/plugin-extension/feature-icons/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-icons/index.ts @@ -1,4 +1,4 @@ -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import {EmitFile} from './steps/emit-file' import {AddToFileDependencies} from './steps/add-to-file-dependencies' import { @@ -29,7 +29,7 @@ export class IconsPlugin { this.includeList = options.includeList this.excludeList = options.excludeList } - public apply(compiler: webpack.Compiler): void { + public apply(compiler: Compiler): void { new EmitFile({ manifestPath: this.manifestPath, includeList: this.includeList as FilepathList, diff --git a/programs/develop/webpack/plugin-extension/feature-icons/steps/add-to-file-dependencies.ts b/programs/develop/webpack/plugin-extension/feature-icons/steps/add-to-file-dependencies.ts index 24ed6d2d..0ea68feb 100644 --- a/programs/develop/webpack/plugin-extension/feature-icons/steps/add-to-file-dependencies.ts +++ b/programs/develop/webpack/plugin-extension/feature-icons/steps/add-to-file-dependencies.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import {type Compiler, Compilation} from 'webpack' +import {type Compiler, Compilation} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' export class AddToFileDependencies { diff --git a/programs/develop/webpack/plugin-extension/feature-icons/steps/emit-file.ts b/programs/develop/webpack/plugin-extension/feature-icons/steps/emit-file.ts index 240a5df5..4d692730 100644 --- a/programs/develop/webpack/plugin-extension/feature-icons/steps/emit-file.ts +++ b/programs/develop/webpack/plugin-extension/feature-icons/steps/emit-file.ts @@ -1,7 +1,6 @@ import fs from 'fs' import path from 'path' -import type webpack from 'webpack' -import {sources, Compilation} from 'webpack' +import {Compiler, sources, Compilation} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' import * as utils from '../../../lib/utils' @@ -16,7 +15,7 @@ export class EmitFile { this.excludeList = options.excludeList } - public apply(compiler: webpack.Compiler): void { + public apply(compiler: Compiler): void { compiler.hooks.thisCompilation.tap('icons:emit-file', (compilation) => { compilation.hooks.processAssets.tap( { diff --git a/programs/develop/webpack/plugin-extension/feature-json/index.ts b/programs/develop/webpack/plugin-extension/feature-json/index.ts index 3a93ee21..1bf2dbc8 100644 --- a/programs/develop/webpack/plugin-extension/feature-json/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-json/index.ts @@ -1,6 +1,5 @@ import fs from 'fs' -import webpack from 'webpack' -import {sources, Compilation} from 'webpack' +import {sources, Compilation, Compiler, WebpackError} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../webpack-types' import * as utils from '../../lib/utils' import * as messages from '../../lib/messages' @@ -25,7 +24,7 @@ export class JsonPlugin { this.excludeList = options.excludeList } - public apply(compiler: webpack.Compiler): void { + public apply(compiler: Compiler): void { // Add the JSON to the compilation. This is important so other // plugins can get it via the compilation.assets object, // allowing them to modify it. @@ -62,7 +61,7 @@ export class JsonPlugin { const manifestName = manifest.name || 'Extension.js' compilation.warnings.push( - new webpack.WebpackError( + new WebpackError( messages.entryNotFoundWarn( manifestName, feature, diff --git a/programs/develop/webpack/plugin-extension/feature-locales/index.ts b/programs/develop/webpack/plugin-extension/feature-locales/index.ts index e5ceb838..7e9f593f 100644 --- a/programs/develop/webpack/plugin-extension/feature-locales/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-locales/index.ts @@ -1,7 +1,6 @@ import path from 'path' import fs from 'fs' -import webpack from 'webpack' -import {sources, Compilation} from 'webpack' +import {sources, Compilation, Compiler, WebpackError} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../webpack-types' import * as messages from '../../lib/messages' import * as utils from '../../lib/utils' @@ -22,7 +21,7 @@ export class LocalesPlugin { this.excludeList = options.excludeList } - public apply(compiler: webpack.Compiler): void { + public apply(compiler: Compiler): void { // Add the locales to the compilation. This is important so other // plugins can get it via the compilation.assets object, // allowing them to modify it. @@ -40,9 +39,7 @@ export class LocalesPlugin { // Do not emit if manifest doesn't exist. if (!fs.existsSync(this.manifestPath)) { compilation.errors.push( - new webpack.WebpackError( - messages.manifestNotFoundError(manifestName) - ) + new WebpackError(messages.manifestNotFoundError(manifestName)) ) return } @@ -62,7 +59,7 @@ export class LocalesPlugin { // and output the file accordingly. if (!fs.existsSync(thisResource)) { compilation.warnings.push( - new webpack.WebpackError( + new WebpackError( messages.entryNotFoundWarn( manifestName, feature, diff --git a/programs/develop/webpack/plugin-extension/feature-manifest/index.ts b/programs/develop/webpack/plugin-extension/feature-manifest/index.ts index 3cce01db..eb108bd9 100644 --- a/programs/develop/webpack/plugin-extension/feature-manifest/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-manifest/index.ts @@ -1,4 +1,4 @@ -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' // Manifest plugins import {EmitManifest} from './steps/emit-manifest' @@ -33,7 +33,7 @@ export class ManifestPlugin { this.excludeList = options.excludeList } - public apply(compiler: webpack.Compiler) { + public apply(compiler: Compiler) { // 1 - Emit the manifest to the assets bundle. // It doesn't change the manifest, it just ensures // it's emitted to the assets bundle so other plugins diff --git a/programs/develop/webpack/plugin-extension/feature-manifest/steps/add-dependencies.ts b/programs/develop/webpack/plugin-extension/feature-manifest/steps/add-dependencies.ts index e9925694..bf2f207e 100644 --- a/programs/develop/webpack/plugin-extension/feature-manifest/steps/add-dependencies.ts +++ b/programs/develop/webpack/plugin-extension/feature-manifest/steps/add-dependencies.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' export class AddDependencies { private readonly dependencyList: string[] @@ -8,7 +8,7 @@ export class AddDependencies { this.dependencyList = dependencyList } - apply(compiler: webpack.Compiler): void { + apply(compiler: Compiler): void { compiler.hooks.afterCompile.tap( 'ManifestPlugin (AddDependenciesPlugin)', (compilation) => { diff --git a/programs/develop/webpack/plugin-extension/feature-manifest/steps/check-manifest-files.ts b/programs/develop/webpack/plugin-extension/feature-manifest/steps/check-manifest-files.ts index 92d1630e..ea54915d 100644 --- a/programs/develop/webpack/plugin-extension/feature-manifest/steps/check-manifest-files.ts +++ b/programs/develop/webpack/plugin-extension/feature-manifest/steps/check-manifest-files.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import webpack, {Compilation, Compiler} from 'webpack' +import {Compilation, Compiler, WebpackError} from '@rspack/core' import * as messages from '../../../lib/messages' import {PluginInterface, FilepathList} from '../../../webpack-types' @@ -43,10 +43,7 @@ export class CheckManifestFiles { return paths } - private handleErrors( - compilation: Compilation, - WebpackError: typeof webpack.WebpackError - ) { + private handleErrors(compilation: Compilation, WebpackError: any) { const iconExts = ['.png', '.jpg', '.jpeg', '.svg', '.gif', '.webp'] const jsonExts = ['.json'] const scriptExts = ['.js', '.ts', '.jsx', '.tsx', '.mjs', '.cjs'] @@ -97,8 +94,6 @@ export class CheckManifestFiles { stage: Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_COUNT }, () => { - const WebpackError = webpack.WebpackError - // Handle all errors. this.handleErrors(compilation, WebpackError) } diff --git a/programs/develop/webpack/plugin-extension/feature-manifest/steps/emit-manifest.ts b/programs/develop/webpack/plugin-extension/feature-manifest/steps/emit-manifest.ts index 5aab00da..2b707086 100644 --- a/programs/develop/webpack/plugin-extension/feature-manifest/steps/emit-manifest.ts +++ b/programs/develop/webpack/plugin-extension/feature-manifest/steps/emit-manifest.ts @@ -1,6 +1,5 @@ import fs from 'fs' -import webpack, {Compiler, Compilation} from 'webpack' -import {sources} from 'webpack' +import {Compiler, Compilation, sources, WebpackError} from '@rspack/core' import * as messages from '../../../lib/messages' import {type PluginInterface} from '../../../webpack-types' @@ -32,7 +31,7 @@ export class EmitManifest { const manifest = require(this.manifestPath) const manifestName = manifest.name || 'Extension.js' compilation.errors.push( - new webpack.WebpackError( + new WebpackError( messages.manifestInvalidError(manifestName, error) ) ) diff --git a/programs/develop/webpack/plugin-extension/feature-manifest/steps/throw-if-recompile.ts b/programs/develop/webpack/plugin-extension/feature-manifest/steps/throw-if-recompile.ts index be2322a7..aea090ac 100644 --- a/programs/develop/webpack/plugin-extension/feature-manifest/steps/throw-if-recompile.ts +++ b/programs/develop/webpack/plugin-extension/feature-manifest/steps/throw-if-recompile.ts @@ -1,5 +1,5 @@ import fs from 'fs' -import webpack, {Compilation} from 'webpack' +import {Compilation, Compiler, WebpackError} from '@rspack/core' import * as messages from '../../../lib/messages' import {DevOptions} from '../../../../commands/dev' import {PluginInterface, FilepathList, Manifest} from '../../../webpack-types' @@ -22,7 +22,7 @@ export class ThrowIfRecompileIsNeeded { return arr.flat(Infinity).sort() } - public apply(compiler: webpack.Compiler): void { + public apply(compiler: Compiler): void { compiler.hooks.watchRun.tapAsync( 'manifest:throw-if-recompile-is-needed', (compiler, done) => { @@ -82,9 +82,7 @@ export class ThrowIfRecompileIsNeeded { fileAdded, fileRemoved ) - compilation.errors.push( - new webpack.WebpackError(errorMessage) - ) + compilation.errors.push(new WebpackError(errorMessage)) } } ) diff --git a/programs/develop/webpack/plugin-extension/feature-manifest/steps/update-manifest.ts b/programs/develop/webpack/plugin-extension/feature-manifest/steps/update-manifest.ts index bf357a99..f4627e94 100644 --- a/programs/develop/webpack/plugin-extension/feature-manifest/steps/update-manifest.ts +++ b/programs/develop/webpack/plugin-extension/feature-manifest/steps/update-manifest.ts @@ -1,4 +1,4 @@ -import {type Compiler, Compilation, sources} from 'webpack' +import {type Compiler, Compilation, sources} from '@rspack/core' import {getManifestOverrides} from '../manifest-overrides' import {getFilename, getManifestContent} from '../../../lib/utils' import { diff --git a/programs/develop/webpack/plugin-extension/feature-resolve/index.ts b/programs/develop/webpack/plugin-extension/feature-resolve/index.ts index a661b20e..1d65eee9 100644 --- a/programs/develop/webpack/plugin-extension/feature-resolve/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-resolve/index.ts @@ -1,5 +1,5 @@ import path from 'path' -import webpack from 'webpack' +import {Compiler, ProvidePlugin} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../webpack-types' /** @@ -54,8 +54,8 @@ export class ResolvePlugin { this.loaderOptions = options.loaderOptions } - public apply(compiler: webpack.Compiler): void { - new webpack.ProvidePlugin({ + public apply(compiler: Compiler): void { + new ProvidePlugin({ r: [path.resolve(__dirname, './resolver-module.js'), 'default'] }).apply(compiler) diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/index.ts b/programs/develop/webpack/plugin-extension/feature-scripts/index.ts index b675a393..22417679 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/index.ts @@ -1,5 +1,5 @@ import path from 'path' -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../webpack-types' import {AddScripts} from './steps/add-scripts' import {AddPublicPathRuntimeModule} from './steps/add-public-path-runtime-module' @@ -35,7 +35,7 @@ export class ScriptsPlugin { this.excludeList = options.excludeList } - public apply(compiler: webpack.Compiler): void { + public apply(compiler: Compiler): void { // 1 - Adds the scripts entries from the manifest file // and from the extra scripts defined in this.include // to the compilation. diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/scripts-lib/utils.ts b/programs/develop/webpack/plugin-extension/feature-scripts/scripts-lib/utils.ts index 1aff2ddd..b68a67b4 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/scripts-lib/utils.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/scripts-lib/utils.ts @@ -10,8 +10,8 @@ export function getScriptEntries( const scriptEntries = Array.isArray(scriptPath) ? scriptPath || [] : scriptPath - ? [scriptPath] - : [] + ? [scriptPath] + : [] const fileAssets = scriptEntries.filter((scriptAsset) => { const validFile = @@ -40,8 +40,8 @@ export function getCssEntries( const scriptEntries = Array.isArray(scriptPath) ? scriptPath || [] : scriptPath - ? [scriptPath] - : [] + ? [scriptPath] + : [] const fileAssets = scriptEntries.filter((scriptAsset) => { const validFile = diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-for-main-world.ts b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-for-main-world.ts index 44f678f2..74f85991 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-for-main-world.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-for-main-world.ts @@ -1,4 +1,4 @@ -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import { type FilepathList, type PluginInterface, @@ -20,7 +20,6 @@ export class AddPublicPathForMainWorld { this.includeList = options.includeList || {} this.excludeList = options.excludeList || {} } - public apply(): void { const manifest: Manifest = require(this.manifestPath) if ( diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-runtime-module.ts b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-runtime-module.ts index f53dcff1..f8fa8ace 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-runtime-module.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-runtime-module.ts @@ -2,7 +2,12 @@ // https://github.com/awesome-webextension/webpack-target-webextension // Released under the MIT License. -import {RuntimeGlobals, RuntimeModule, Template, type Compiler} from 'webpack' +import { + RuntimeGlobals, + RuntimeModule, + Template, + type Compiler +} from '@rspack/core' const basic = [ `var isBrowser = !!(() => { try { return browser.runtime.getURL("/") } catch(e) {} })()`, diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-scripts.ts b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-scripts.ts index db0fb7f7..0db7883c 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-scripts.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-scripts.ts @@ -1,4 +1,4 @@ -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' import {getScriptEntries, getCssEntries} from '../scripts-lib/utils' @@ -14,7 +14,7 @@ export class AddScripts { this.excludeList = options.excludeList || {} } - public apply(compiler: webpack.Compiler): void { + public apply(compiler: Compiler): void { const scriptFields = this.includeList || {} const newEntries: Record = {} diff --git a/programs/develop/webpack/plugin-extension/feature-special-folders/copy-public-folder.ts b/programs/develop/webpack/plugin-extension/feature-special-folders/copy-public-folder.ts index 9e0c1ab3..72dc775e 100644 --- a/programs/develop/webpack/plugin-extension/feature-special-folders/copy-public-folder.ts +++ b/programs/develop/webpack/plugin-extension/feature-special-folders/copy-public-folder.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import chokidar from 'chokidar' interface CopyPublicFolderOptions { @@ -44,7 +44,7 @@ export class CopyPublicFolder { }) } - apply(compiler: webpack.Compiler): void { + apply(compiler: Compiler): void { const projectPath = path.dirname(this.options.manifestPath) const staticDir = path.join(projectPath, 'public') const output = compiler.options.output?.path || '' diff --git a/programs/develop/webpack/plugin-extension/feature-special-folders/index.ts b/programs/develop/webpack/plugin-extension/feature-special-folders/index.ts index edd063d2..50c59928 100644 --- a/programs/develop/webpack/plugin-extension/feature-special-folders/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-special-folders/index.ts @@ -1,4 +1,4 @@ -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {CopyPublicFolder} from './copy-public-folder' import {WarnUponFolderChanges} from './warn-upon-folder-changes' diff --git a/programs/develop/webpack/plugin-extension/feature-special-folders/warn-upon-folder-changes.ts b/programs/develop/webpack/plugin-extension/feature-special-folders/warn-upon-folder-changes.ts index 557eba39..51400588 100644 --- a/programs/develop/webpack/plugin-extension/feature-special-folders/warn-upon-folder-changes.ts +++ b/programs/develop/webpack/plugin-extension/feature-special-folders/warn-upon-folder-changes.ts @@ -1,6 +1,6 @@ import * as path from 'path' import * as chokidar from 'chokidar' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import * as messages from '../../lib/messages' export class WarnUponFolderChanges { diff --git a/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts b/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts index 2a879f92..f912a9a1 100644 --- a/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts @@ -1,4 +1,4 @@ -import webpack, {Compilation, Compiler, sources} from 'webpack' +import {Compilation, Compiler, sources} from '@rspack/core' import { type FilepathList, type PluginInterface, @@ -27,7 +27,7 @@ export class WebResourcesPlugin { } private generateManifestPatches( - compilation: webpack.Compilation, + compilation: Compilation, entryImports: Record ) { const manifest = utils.getManifestContent(compilation, this.manifestPath!) diff --git a/programs/develop/webpack/plugin-extension/index.ts b/programs/develop/webpack/plugin-extension/index.ts index da69aaf3..60e366e7 100644 --- a/programs/develop/webpack/plugin-extension/index.ts +++ b/programs/develop/webpack/plugin-extension/index.ts @@ -6,7 +6,7 @@ // ╚═════╝ ╚══════╝ ╚═══╝ ╚══════╝╚══════╝ ╚═════╝ ╚═╝ import path from 'path' -import {Compiler} from 'webpack' +import {Compiler} from '@rspack/core' import {getManifestFieldsData} from './data/manifest-fields' import {getSpecialFoldersData} from './data/special-folders' diff --git a/programs/develop/webpack/plugin-js-frameworks/index.ts b/programs/develop/webpack/plugin-js-frameworks/index.ts index 023ce8ba..7763112b 100644 --- a/programs/develop/webpack/plugin-js-frameworks/index.ts +++ b/programs/develop/webpack/plugin-js-frameworks/index.ts @@ -1,5 +1,5 @@ import path from 'path' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {PluginInterface} from '../webpack-types' import {type DevOptions} from '../../commands/dev' import {maybeUseBabel} from './js-tools/babel' @@ -43,6 +43,7 @@ export class JsFrameworksPlugin { test: /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/, include: [path.dirname(this.manifestPath)], exclude: [/[\\/]node_modules[\\/]/], + type: 'javascript/auto', use: { loader: require.resolve('builtin:swc-loader'), options: { @@ -73,6 +74,10 @@ export class JsFrameworksPlugin { refresh: this.mode === 'development', runtime: 'automatic', importSource: 'react' + // pragma: 'React.createElement', + // pragmaFrag: 'React.Fragment', + // throwIfNamespace: true, + // useBuiltins: false, } } } diff --git a/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts b/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts index 7da65fc5..cfe7c0ca 100644 --- a/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts +++ b/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts @@ -7,7 +7,7 @@ import path from 'path' import fs from 'fs' -import {Compiler} from 'webpack' +import {Compiler} from '@rspack/core' import * as messages from '../../lib/messages' import {installOptionalDependencies} from '../../lib/utils' import {isUsingPreact} from './preact' diff --git a/programs/develop/webpack/plugin-js-frameworks/js-tools/preact.ts b/programs/develop/webpack/plugin-js-frameworks/js-tools/preact.ts index 65b69313..a70deedf 100644 --- a/programs/develop/webpack/plugin-js-frameworks/js-tools/preact.ts +++ b/programs/develop/webpack/plugin-js-frameworks/js-tools/preact.ts @@ -10,7 +10,7 @@ import fs from 'fs' import * as messages from '../../lib/messages' import {installOptionalDependencies} from '../../lib/utils' import {JsFramework} from '../../webpack-types' -import {WebpackPluginInstance} from 'webpack' +import {RspackPluginInstance} from '@rspack/core' let userMessageDelivered = false @@ -70,7 +70,7 @@ export async function maybeUsePreact( process.exit(0) } - const preactPlugins: WebpackPluginInstance[] = [ + const preactPlugins: RspackPluginInstance[] = [ new (require('@prefresh/webpack'))() ] diff --git a/programs/develop/webpack/plugin-js-frameworks/js-tools/react.ts b/programs/develop/webpack/plugin-js-frameworks/js-tools/react.ts index 1e788ffa..073fafcb 100644 --- a/programs/develop/webpack/plugin-js-frameworks/js-tools/react.ts +++ b/programs/develop/webpack/plugin-js-frameworks/js-tools/react.ts @@ -7,7 +7,7 @@ import path from 'path' import fs from 'fs' -import {type WebpackPluginInstance} from 'webpack' +import {type RspackPluginInstance} from '@rspack/core' import * as messages from '../../lib/messages' import {installOptionalDependencies} from '../../lib/utils' import {JsFramework} from '../../webpack-types' @@ -68,7 +68,7 @@ export async function maybeUseReact( process.exit(0) } - const reactPlugins: WebpackPluginInstance[] = [ + const reactPlugins: RspackPluginInstance[] = [ new (require('@pmmmwh/react-refresh-webpack-plugin'))({ overlay: false }) diff --git a/programs/develop/webpack/plugin-reload/index.ts b/programs/develop/webpack/plugin-reload/index.ts index 412e3885..78d4ce8f 100644 --- a/programs/develop/webpack/plugin-reload/index.ts +++ b/programs/develop/webpack/plugin-reload/index.ts @@ -1,4 +1,4 @@ -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import {type PluginInterface} from './reload-types' import CreateWebSocketServer from './steps/create-web-socket-server' import SetupReloadStrategy from './steps/setup-reload-strategy' @@ -21,7 +21,7 @@ export class ReloadPlugin { this.autoReload = options.autoReload } - apply(compiler: webpack.Compiler) { + apply(compiler: Compiler) { // 1 - Creates a WebSockets server to communicate with the browser. // This server is responsible for sending reload requests to the client, // which is a browser extension that is injected into the browser called diff --git a/programs/develop/webpack/plugin-reload/steps/create-web-socket-server/index.ts b/programs/develop/webpack/plugin-reload/steps/create-web-socket-server/index.ts index 2988a4d1..be7dd649 100644 --- a/programs/develop/webpack/plugin-reload/steps/create-web-socket-server/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/create-web-socket-server/index.ts @@ -1,5 +1,5 @@ import path from 'path' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {PluginInterface} from '../../reload-types' import {messageDispatcher} from './web-socket-server/message-dispatcher' import {startServer} from './web-socket-server/start-server' diff --git a/programs/develop/webpack/plugin-reload/steps/create-web-socket-server/web-socket-server/start-server.ts b/programs/develop/webpack/plugin-reload/steps/create-web-socket-server/web-socket-server/start-server.ts index ea1cf6fa..b450c2bb 100644 --- a/programs/develop/webpack/plugin-reload/steps/create-web-socket-server/web-socket-server/start-server.ts +++ b/programs/develop/webpack/plugin-reload/steps/create-web-socket-server/web-socket-server/start-server.ts @@ -1,7 +1,7 @@ import path from 'path' import fs from 'fs' import WebSocket from 'ws' -import {Compiler} from 'webpack' +import {Compiler} from '@rspack/core' import * as messages from '../../../../lib/messages' import {type Manifest} from '../../../../webpack-types' import {getHardcodedMessage, isFirstRun} from '../../../../lib/utils' diff --git a/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/index.ts index ebc26ba3..d168de49 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/index.ts @@ -1,5 +1,5 @@ import path from 'path' -import {type Compiler} from 'webpack' +import {type Compiler} from '@rspack/core' import {DevOptions} from '../../../../commands/dev' export function SetupChromiumReloadClient( diff --git a/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/inject-chromium-client-loader.ts b/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/inject-chromium-client-loader.ts index 06071ada..5965c56a 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/inject-chromium-client-loader.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-chromium-reload-client/inject-chromium-client-loader.ts @@ -1,7 +1,7 @@ import path from 'path' import {urlToRequest} from 'loader-utils' import {validate} from 'schema-utils' -import {type LoaderContext} from 'webpack' +import {type LoaderContext} from '@rspack/core' import {type Schema} from 'schema-utils/declarations/validate' import {type Manifest} from '../../../webpack-types' diff --git a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts index 8906364a..a8f4336f 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts @@ -1,6 +1,5 @@ import path from 'path' -import {type Compiler} from 'webpack' -import {DevOptions} from '../../../../module' +import {type Compiler} from '@rspack/core' export function SetupFirefoxReloadClient( compiler: Compiler, diff --git a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/inject-firefox-client-loader.ts b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/inject-firefox-client-loader.ts index f0e119ea..dc84d04c 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/inject-firefox-client-loader.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/inject-firefox-client-loader.ts @@ -1,7 +1,7 @@ import path from 'path' import {urlToRequest} from 'loader-utils' import {validate} from 'schema-utils' -import {type LoaderContext} from 'webpack' +import {type LoaderContext} from '@rspack/core' import {type Schema} from 'schema-utils/declarations/validate' import {type Manifest} from '../../../webpack-types' diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/apply-manifest-dev-defaults/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/apply-manifest-dev-defaults/index.ts index b0656e12..88be39af 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/apply-manifest-dev-defaults/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/apply-manifest-dev-defaults/index.ts @@ -1,5 +1,4 @@ -import type webpack from 'webpack' -import {Compilation, sources} from 'webpack' +import {Compilation, sources, Compiler} from '@rspack/core' import {patchV2CSP, patchV3CSP} from './patch-csp' import {patchWebResourcesV2, patchWebResourcesV3} from './patch-web-resources' import patchBackground from './patch-background' @@ -17,7 +16,7 @@ export class ApplyManifestDevDefaults { this.browser = options.browser || 'chrome' } - private generateManifestPatches(compilation: webpack.Compilation) { + private generateManifestPatches(compilation: Compilation) { const manifest = utils.getManifestContent(compilation, this.manifestPath!) const patchedManifest = { @@ -68,7 +67,7 @@ export class ApplyManifestDevDefaults { } } - apply(compiler: webpack.Compiler) { + apply(compiler: Compiler) { compiler.hooks.thisCompilation.tap( 'run-chromium:apply-manifest-dev-defaults', (compilation) => { diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts index 9acfdcb8..20725e6e 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts @@ -1,4 +1,4 @@ -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import {type PluginInterface} from '../../reload-types' import {SetupChromiumReloadClient} from '../setup-chromium-reload-client' import {SetupFirefoxReloadClient} from '../setup-firefox-reload-client' @@ -16,7 +16,7 @@ class SetupReloadStrategy { this.browser = options.browser || 'chrome' } - public apply(compiler: webpack.Compiler) { + public apply(compiler: Compiler) { // 1 - Ensure the background scripts (and service_worker) can // receive messages from the extension reload plugin. if (CHROMIUM_BASED_BROWSERS.includes(this.browser)) { diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts index 47039aaf..407805ed 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import type webpack from 'webpack' +import {type Compiler} from '@rspack/core' import WebExtension from 'webpack-target-webextension' import {type PluginInterface} from '../../../reload-types' import {type Manifest} from '../../../../webpack-types' @@ -17,7 +17,7 @@ export class TargetWebExtensionPlugin { } private handleBackground( - compiler: webpack.Compiler, + compiler: Compiler, browser: DevOptions['browser'], manifest: Manifest ) { @@ -106,7 +106,7 @@ export class TargetWebExtensionPlugin { } private addDefaultEntry( - compiler: webpack.Compiler, + compiler: Compiler, name: string, defaultScript: string ) { @@ -130,7 +130,7 @@ export class TargetWebExtensionPlugin { return {pageEntry: 'background'} } - public apply(compiler: webpack.Compiler) { + public apply(compiler: Compiler) { if (!this.manifestPath || !fs.lstatSync(this.manifestPath).isFile()) { return } diff --git a/programs/develop/webpack/plugin-static-assets/index.ts b/programs/develop/webpack/plugin-static-assets/index.ts index a7fd106c..0e34caf4 100644 --- a/programs/develop/webpack/plugin-static-assets/index.ts +++ b/programs/develop/webpack/plugin-static-assets/index.ts @@ -1,4 +1,4 @@ -import {type Compiler, type RuleSetRule} from 'webpack' +import {type Compiler, type RuleSetRule} from '@rspack/core' import {PluginInterface} from '../webpack-types' import {type DevOptions} from '../../commands/dev' diff --git a/programs/develop/webpack/webpack-config.ts b/programs/develop/webpack/rspack-config.ts similarity index 90% rename from programs/develop/webpack/webpack-config.ts rename to programs/develop/webpack/rspack-config.ts index 1ce22cab..cf0fd5c0 100644 --- a/programs/develop/webpack/webpack-config.ts +++ b/programs/develop/webpack/rspack-config.ts @@ -6,7 +6,7 @@ // ╚═════╝ ╚══════╝ ╚═══╝ ╚══════╝╚══════╝ ╚═════╝ ╚═╝ import path from 'path' -import type webpack from 'webpack' +import type rspack from '@rspack/core' import {type DevOptions} from '../commands/dev' // Plugins @@ -20,10 +20,10 @@ import {CompatibilityPlugin} from './plugin-compatibility' import {ErrorsPlugin} from './plugin-errors' import {BrowsersPlugin} from '../plugin-browsers' -export default function webpackConfig( +export default function rspackConfig( projectPath: string, devOptions: DevOptions -): webpack.Configuration { +): rspack.Configuration { const manifestPath = path.join(projectPath, 'manifest.json') const userExtensionOutputPath = path.join( projectPath, @@ -40,15 +40,16 @@ export default function webpackConfig( ? 'cheap-source-map' : 'eval-cheap-source-map', output: { - clean: { - keep(asset) { - // Avoids deleting the hot-update files for the content scripts. - // This is a workaround for the issue described - // in https://github.com/cezaraugusto/extension.js/issues/35. - // These HMR assets are eventually deleted by CleanHotUpdatesPlugin when webpack starts. - return !asset.startsWith('hot/background') - } - }, + clean: false, + // { + // keep(asset) { + // // Avoids deleting the hot-update files for the content scripts. + // // This is a workaround for the issue described + // // in https://github.com/cezaraugusto/extension.js/issues/35. + // // These HMR assets are eventually deleted by CleanHotUpdatesPlugin when webpack starts. + // return !asset.startsWith('hot/background') + // } + // }, path: userExtensionOutputPath, // See https://webpack.js.org/configuration/output/#outputpublicpath publicPath: '/', diff --git a/programs/develop/webpack/webpack-types.ts b/programs/develop/webpack/webpack-types.ts index 16e8f780..98d92a3e 100644 --- a/programs/develop/webpack/webpack-types.ts +++ b/programs/develop/webpack/webpack-types.ts @@ -1,5 +1,7 @@ -import {type LoaderContext as WebpackLoaderContext} from 'webpack' -import {type WebpackPluginInstance} from 'webpack' +import { + type RspackPluginInstance, + type LoaderContext as WebpackLoaderContext +} from '@rspack/core' import {DevOptions} from '../commands/dev' export type ChromeManifest = Partial & @@ -65,7 +67,7 @@ export interface LoaderContext { } export interface JsFramework { - plugins: WebpackPluginInstance[] | undefined + plugins: RspackPluginInstance[] | undefined loaders: Record[] | undefined alias: Record | undefined } From 5d2af53b20f70b20fa6c01903d71aec5da65e83c Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Fri, 23 Aug 2024 14:02:51 -0300 Subject: [PATCH 04/18] Update StaticAssets plugin --- programs/develop/webpack/plugin-static-assets/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/programs/develop/webpack/plugin-static-assets/index.ts b/programs/develop/webpack/plugin-static-assets/index.ts index 0e34caf4..99f3dfca 100644 --- a/programs/develop/webpack/plugin-static-assets/index.ts +++ b/programs/develop/webpack/plugin-static-assets/index.ts @@ -17,7 +17,7 @@ export class StaticAssetsPlugin { // Define the default SVG rule const defaultSvgRule: RuleSetRule = { test: /\.svg$/i, - type: 'asset/resource', + type: 'asset', generator: { filename: 'assets/[name][ext]' }, @@ -44,7 +44,7 @@ export class StaticAssetsPlugin { ...(hasCustomSvgRule ? [] : [defaultSvgRule]), { test: /\.(png|jpg|jpeg|gif|webp|avif|ico|bmp)$/i, - type: 'asset/resource', + type: 'asset', generator: { filename: 'assets/[name][ext]' }, @@ -57,20 +57,20 @@ export class StaticAssetsPlugin { }, { test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: 'asset/resource', + type: 'asset', generator: { filename: 'assets/[name][ext]' } }, { test: /\.(txt|md|csv|tsv|xml|pdf|docx|doc|xls|xlsx|ppt|pptx|zip|gz|gzip|tgz)$/i, - type: 'asset/resource', + type: 'asset', generator: { filename: 'assets/[name][ext]' }, parser: { dataUrlCondition: { - // inline images < 2 KB + // inline files < 2 KB maxSize: 2 * 1024 } } From 3a24b93883ebaaf60b14488ad6577e17266d8742 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Fri, 23 Aug 2024 15:34:49 -0300 Subject: [PATCH 05/18] React support --- .../develop/commands/commands-lib/generate-zip.ts | 7 +++---- .../develop/commands/commands-lib/messages.ts | 8 ++++---- programs/develop/package.json | 10 ++++------ .../plugin-browsers/browsers-lib/messages.ts | 8 ++++---- .../run-firefox/firefox-location.ts | 4 ++-- programs/develop/webpack/lib/messages.ts | 4 ++-- .../develop/webpack/plugin-compilation/env.ts | 4 ++-- .../webpack/plugin-css/common-style-loaders.ts | 4 ++-- .../feature-scripts/scripts-lib/utils.ts | 8 ++++---- .../develop/webpack/plugin-js-frameworks/index.ts | 15 ++++++++------- .../plugin-js-frameworks/js-tools/react.ts | 10 +++------- 11 files changed, 38 insertions(+), 44 deletions(-) diff --git a/programs/develop/commands/commands-lib/generate-zip.ts b/programs/develop/commands/commands-lib/generate-zip.ts index 65d28eb2..7c3be4bf 100644 --- a/programs/develop/commands/commands-lib/generate-zip.ts +++ b/programs/develop/commands/commands-lib/generate-zip.ts @@ -73,10 +73,9 @@ export async function generateZip( const outputDir = path.join(distDir, browser) // We collect data from the projectDir if the user wants to zip the source files. const dataDir = options.zipSource ? projectDir : outputDir - const manifest: Record = require(path.join( - dataDir, - 'manifest.json' - )) + const manifest: Record = require( + path.join(dataDir, 'manifest.json') + ) const name = getPackageName(manifest, options) const ext = getExtensionExtension(browser) // Dist zips are stored in dist/[browser]/[name].zip diff --git a/programs/develop/commands/commands-lib/messages.ts b/programs/develop/commands/commands-lib/messages.ts index e36d6fd6..f1ff0b2c 100644 --- a/programs/develop/commands/commands-lib/messages.ts +++ b/programs/develop/commands/commands-lib/messages.ts @@ -19,10 +19,10 @@ function getLoggingPrefix(type: 'warn' | 'info' | 'error' | 'success'): string { type === 'warn' ? brightYellow('►►►') : type === 'info' - ? magenta('►►►') - : type === 'error' - ? red('✖︎✖︎✖︎') - : brightGreen('►►►') + ? magenta('►►►') + : type === 'error' + ? red('✖︎✖︎✖︎') + : brightGreen('►►►') // return `🧩 ${'Extension.js'} ${arrow}` return `${arrow}` } diff --git a/programs/develop/package.json b/programs/develop/package.json index 4eb7a77a..1a6f0ece 100644 --- a/programs/develop/package.json +++ b/programs/develop/package.json @@ -31,8 +31,8 @@ }, "dependencies": { "@colors/colors": "^1.6.0", - "@rspack/cli": "^0.7.5", - "@rspack/core": "^0.7.5", + "@rspack/cli": "^1.0.0-beta.5", + "@rspack/core": "^1.0.0-beta.5", "@swc/core": "^1.7.3", "@types/firefox-webext-browser": "^120.0.4", "acorn": "^8.12.1", @@ -69,7 +69,6 @@ "tiny-glob": "^0.2.9", "vue-template-compiler": "^2.7.16", "webextension-polyfill": "^0.12.0", - "webpack": "~5.92.0", "webpack-merge": "^6.0.1", "webpack-target-webextension": "^1.1.2" }, @@ -89,8 +88,8 @@ }, "optionalDependencies": { "@babel/core": "^7.24.9", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", "@prefresh/webpack": "^4.0.1", + "@rspack/plugin-react-refresh": "^1.0.0", "@vue/compiler-sfc": "^3.4.34", "babel-loader": "^9.1.3", "babel-preset-modern-browser-extension": "^0.7.0", @@ -102,7 +101,6 @@ "postcss-preset-env": "^9.6.0", "postcss-scss": "^4.0.9", "react-refresh": "^0.14.2", - "react-refresh-typescript": "^2.0.9", "resolve-url-loader": "^5.0.0", "sass": "^1.77.8", "sass-loader": "^16.0.0", @@ -114,4 +112,4 @@ "vue-style-loader": "^4.1.3", "vue-template-compiler": "^2.7.16" } -} +} \ No newline at end of file diff --git a/programs/develop/plugin-browsers/browsers-lib/messages.ts b/programs/develop/plugin-browsers/browsers-lib/messages.ts index eb086522..f6ea61e7 100644 --- a/programs/develop/plugin-browsers/browsers-lib/messages.ts +++ b/programs/develop/plugin-browsers/browsers-lib/messages.ts @@ -18,10 +18,10 @@ function getLoggingPrefix( type === 'warn' ? brightYellow('►►►') : type === 'info' - ? cyan('►►►') - : type === 'error' - ? red('✖︎✖︎✖︎') - : brightGreen('►►►') + ? cyan('►►►') + : type === 'error' + ? red('✖︎✖︎✖︎') + : brightGreen('►►►') return `${gray('')}${arrow}` } diff --git a/programs/develop/plugin-browsers/run-firefox/firefox-location.ts b/programs/develop/plugin-browsers/run-firefox/firefox-location.ts index 462597e2..b4e10e00 100644 --- a/programs/develop/plugin-browsers/run-firefox/firefox-location.ts +++ b/programs/develop/plugin-browsers/run-firefox/firefox-location.ts @@ -22,8 +22,8 @@ function getFirefoxLocation(): string | null { return fs.existsSync(regPath) ? regPath : fs.existsSync(altPath) - ? altPath - : null + ? altPath + : null } else { const suffix = path.join('Mozilla Firefox', 'firefox.exe') const possiblePaths = [ diff --git a/programs/develop/webpack/lib/messages.ts b/programs/develop/webpack/lib/messages.ts index e491ccc9..19dfc6eb 100644 --- a/programs/develop/webpack/lib/messages.ts +++ b/programs/develop/webpack/lib/messages.ts @@ -29,8 +29,8 @@ function getLoggingPrefix(manifestName: string, type: PrefixType): string { type === 'warn' ? brightYellow('►►►') : type === 'info' - ? cyan('►►►') - : brightGreen('►►►') + ? cyan('►►►') + : brightGreen('►►►') return `${arrow} ${manifestName}` } diff --git a/programs/develop/webpack/plugin-compilation/env.ts b/programs/develop/webpack/plugin-compilation/env.ts index 5241661d..c6d76120 100644 --- a/programs/develop/webpack/plugin-compilation/env.ts +++ b/programs/develop/webpack/plugin-compilation/env.ts @@ -30,8 +30,8 @@ export class EnvPlugin { path: fs.existsSync(path.join(projectPath, '.env')) ? path.join(projectPath, '.env') : fs.existsSync(path.join(projectPath, '.env.local')) - ? path.join(projectPath, '.env.local') - : path.join(projectPath, '.env.example'), + ? path.join(projectPath, '.env.local') + : path.join(projectPath, '.env.example'), allowEmptyValues: true, defaults: fs.existsSync(path.join(projectPath, '.env.defaults')), systemvars: true diff --git a/programs/develop/webpack/plugin-css/common-style-loaders.ts b/programs/develop/webpack/plugin-css/common-style-loaders.ts index b7c620cf..26e8c795 100644 --- a/programs/develop/webpack/plugin-css/common-style-loaders.ts +++ b/programs/develop/webpack/plugin-css/common-style-loaders.ts @@ -23,8 +23,8 @@ export async function commonStyleLoaders( opts.useMiniCssExtractPlugin ? miniCssLoader : isUsingVue(projectPath) - ? require.resolve('vue-style-loader') - : require.resolve('style-loader'), + ? require.resolve('vue-style-loader') + : require.resolve('style-loader'), { loader: require.resolve('css-loader'), options: { diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/scripts-lib/utils.ts b/programs/develop/webpack/plugin-extension/feature-scripts/scripts-lib/utils.ts index b68a67b4..1aff2ddd 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/scripts-lib/utils.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/scripts-lib/utils.ts @@ -10,8 +10,8 @@ export function getScriptEntries( const scriptEntries = Array.isArray(scriptPath) ? scriptPath || [] : scriptPath - ? [scriptPath] - : [] + ? [scriptPath] + : [] const fileAssets = scriptEntries.filter((scriptAsset) => { const validFile = @@ -40,8 +40,8 @@ export function getCssEntries( const scriptEntries = Array.isArray(scriptPath) ? scriptPath || [] : scriptPath - ? [scriptPath] - : [] + ? [scriptPath] + : [] const fileAssets = scriptEntries.filter((scriptAsset) => { const validFile = diff --git a/programs/develop/webpack/plugin-js-frameworks/index.ts b/programs/develop/webpack/plugin-js-frameworks/index.ts index 7763112b..bcadd2c0 100644 --- a/programs/develop/webpack/plugin-js-frameworks/index.ts +++ b/programs/develop/webpack/plugin-js-frameworks/index.ts @@ -45,7 +45,7 @@ export class JsFrameworksPlugin { exclude: [/[\\/]node_modules[\\/]/], type: 'javascript/auto', use: { - loader: require.resolve('builtin:swc-loader'), + loader: 'builtin:swc-loader', options: { sync: true, module: { @@ -53,6 +53,7 @@ export class JsFrameworksPlugin { }, minify: this.mode === 'production', isModule: true, + sourceMap: this.mode === 'development', jsc: { target: 'es2016', externalHelpers: true, @@ -84,16 +85,16 @@ export class JsFrameworksPlugin { } } }, - ...(maybeInstallBabel?.loaders || []), - ...(maybeInstallReact?.loaders || []), - ...(maybeInstallPreact?.loaders || []), - ...(maybeInstallVue?.loaders || []), + // ...(maybeInstallBabel?.loaders || []), + // ...(maybeInstallReact?.loaders || []), + // ...(maybeInstallPreact?.loaders || []), + // ...(maybeInstallVue?.loaders || []), ...compiler.options.module.rules ].filter(Boolean) maybeInstallReact?.plugins?.forEach((plugin) => plugin.apply(compiler)) - maybeInstallPreact?.plugins?.forEach((plugin) => plugin.apply(compiler)) - maybeInstallVue?.plugins?.forEach((plugin) => plugin.apply(compiler)) + // maybeInstallPreact?.plugins?.forEach((plugin) => plugin.apply(compiler)) + // maybeInstallVue?.plugins?.forEach((plugin) => plugin.apply(compiler)) } public async apply(compiler: Compiler) { diff --git a/programs/develop/webpack/plugin-js-frameworks/js-tools/react.ts b/programs/develop/webpack/plugin-js-frameworks/js-tools/react.ts index 073fafcb..06dafda0 100644 --- a/programs/develop/webpack/plugin-js-frameworks/js-tools/react.ts +++ b/programs/develop/webpack/plugin-js-frameworks/js-tools/react.ts @@ -49,13 +49,9 @@ export async function maybeUseReact( if (!isUsingReact(projectPath)) return undefined try { - require.resolve('@pmmmwh/react-refresh-webpack-plugin') + require.resolve('react-refresh') } catch (e) { - const reactDependencies = [ - 'react-refresh', - '@pmmmwh/react-refresh-webpack-plugin', - 'react-refresh-typescript' - ] + const reactDependencies = ['react-refresh', '@rspack/plugin-react-refresh'] const manifest = require(path.join(projectPath, 'manifest.json')) const manifestName = manifest.name || 'Extension.js' @@ -69,7 +65,7 @@ export async function maybeUseReact( } const reactPlugins: RspackPluginInstance[] = [ - new (require('@pmmmwh/react-refresh-webpack-plugin'))({ + new (require('@rspack/plugin-react-refresh'))({ overlay: false }) ] From 57d30e57ffe45aa43b1a392f6b45cb39586dbea0 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Fri, 23 Aug 2024 17:23:25 -0300 Subject: [PATCH 06/18] Preact support --- programs/develop/package.json | 6 +++++- .../webpack/plugin-js-frameworks/index.ts | 18 +++++++++++------- .../plugin-js-frameworks/js-tools/preact.ts | 12 ++++++++---- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/programs/develop/package.json b/programs/develop/package.json index 1a6f0ece..1f8b9463 100644 --- a/programs/develop/package.json +++ b/programs/develop/package.json @@ -60,6 +60,7 @@ "parse5": "^7.1.2", "parse5-utils": "^2.0.0", "postcss": "^8.4.40", + "preact": "^10.23.2", "progress": "^2.0.3", "sass-embedded": "^1.77.8", "schema-utils": "^4.2.0", @@ -88,7 +89,10 @@ }, "optionalDependencies": { "@babel/core": "^7.24.9", + "@prefresh/core": "^1.5.2", + "@prefresh/utils": "^1.2.0", "@prefresh/webpack": "^4.0.1", + "@rspack/plugin-preact-refresh": "^1.0.0", "@rspack/plugin-react-refresh": "^1.0.0", "@vue/compiler-sfc": "^3.4.34", "babel-loader": "^9.1.3", @@ -112,4 +116,4 @@ "vue-style-loader": "^4.1.3", "vue-template-compiler": "^2.7.16" } -} \ No newline at end of file +} diff --git a/programs/develop/webpack/plugin-js-frameworks/index.ts b/programs/develop/webpack/plugin-js-frameworks/index.ts index bcadd2c0..3a9b6ff7 100644 --- a/programs/develop/webpack/plugin-js-frameworks/index.ts +++ b/programs/develop/webpack/plugin-js-frameworks/index.ts @@ -74,11 +74,15 @@ export class JsFrameworksPlugin { development: this.mode === 'development', refresh: this.mode === 'development', runtime: 'automatic', - importSource: 'react' - // pragma: 'React.createElement', - // pragmaFrag: 'React.Fragment', - // throwIfNamespace: true, - // useBuiltins: false, + importSource: 'react', + ...(isUsingPreact(projectPath) + ? { + pragma: 'h', + pragmaFrag: 'Fragment', + throwIfNamespace: true, + useBuiltins: false + } + : {}) } } } @@ -87,13 +91,13 @@ export class JsFrameworksPlugin { }, // ...(maybeInstallBabel?.loaders || []), // ...(maybeInstallReact?.loaders || []), - // ...(maybeInstallPreact?.loaders || []), + ...(maybeInstallPreact?.loaders || []), // ...(maybeInstallVue?.loaders || []), ...compiler.options.module.rules ].filter(Boolean) maybeInstallReact?.plugins?.forEach((plugin) => plugin.apply(compiler)) - // maybeInstallPreact?.plugins?.forEach((plugin) => plugin.apply(compiler)) + maybeInstallPreact?.plugins?.forEach((plugin) => plugin.apply(compiler)) // maybeInstallVue?.plugins?.forEach((plugin) => plugin.apply(compiler)) } diff --git a/programs/develop/webpack/plugin-js-frameworks/js-tools/preact.ts b/programs/develop/webpack/plugin-js-frameworks/js-tools/preact.ts index a70deedf..b3997304 100644 --- a/programs/develop/webpack/plugin-js-frameworks/js-tools/preact.ts +++ b/programs/develop/webpack/plugin-js-frameworks/js-tools/preact.ts @@ -52,9 +52,14 @@ export async function maybeUsePreact( try { // Fast-refresh for Preact! // https://github.com/preactjs/prefresh - require.resolve('@prefresh/webpack') + require.resolve('@rspack/plugin-preact-refresh') } catch (e) { - const preactDependencies = ['@prefresh/webpack'] + const preactDependencies = [ + '@prefresh/core', + '@prefresh/utils', + '@rspack/plugin-preact-refresh', + 'preact' + ] const manifest = require(path.join(projectPath, 'manifest.json')) const manifestName = manifest.name || 'Extension.js' @@ -71,9 +76,8 @@ export async function maybeUsePreact( } const preactPlugins: RspackPluginInstance[] = [ - new (require('@prefresh/webpack'))() + new (require('@rspack/plugin-preact-refresh'))() ] - return { plugins: preactPlugins, loaders: undefined, From b57fb002797845bf6d5fea896522a9253579ca82 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Fri, 23 Aug 2024 17:27:10 -0300 Subject: [PATCH 07/18] Vue support --- programs/develop/webpack/plugin-js-frameworks/index.ts | 6 +++--- .../develop/webpack/plugin-js-frameworks/js-tools/vue.ts | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/programs/develop/webpack/plugin-js-frameworks/index.ts b/programs/develop/webpack/plugin-js-frameworks/index.ts index 3a9b6ff7..be0b2262 100644 --- a/programs/develop/webpack/plugin-js-frameworks/index.ts +++ b/programs/develop/webpack/plugin-js-frameworks/index.ts @@ -90,15 +90,15 @@ export class JsFrameworksPlugin { } }, // ...(maybeInstallBabel?.loaders || []), - // ...(maybeInstallReact?.loaders || []), + ...(maybeInstallReact?.loaders || []), ...(maybeInstallPreact?.loaders || []), - // ...(maybeInstallVue?.loaders || []), + ...(maybeInstallVue?.loaders || []), ...compiler.options.module.rules ].filter(Boolean) maybeInstallReact?.plugins?.forEach((plugin) => plugin.apply(compiler)) maybeInstallPreact?.plugins?.forEach((plugin) => plugin.apply(compiler)) - // maybeInstallVue?.plugins?.forEach((plugin) => plugin.apply(compiler)) + maybeInstallVue?.plugins?.forEach((plugin) => plugin.apply(compiler)) } public async apply(compiler: Compiler) { diff --git a/programs/develop/webpack/plugin-js-frameworks/js-tools/vue.ts b/programs/develop/webpack/plugin-js-frameworks/js-tools/vue.ts index ee2ea51d..77d12326 100644 --- a/programs/develop/webpack/plugin-js-frameworks/js-tools/vue.ts +++ b/programs/develop/webpack/plugin-js-frameworks/js-tools/vue.ts @@ -81,7 +81,12 @@ export async function maybeUseVue( test: /\.vue$/, loader: require.resolve('vue-loader'), include: projectPath, - exclude: [/[\\/]node_modules[\\/]/] + exclude: [/[\\/]node_modules[\\/]/], + options: { + // Note, for the majority of features to be available, make sure this option is `true`. + // https://rspack.dev/guide/tech/vue#vue-3 + experimentalInlineMatchResource: true + } } ] From 57420c1d20d7f96a6246fe6f60a1b6bf01991c08 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Fri, 23 Aug 2024 17:36:06 -0300 Subject: [PATCH 08/18] Remove Babel support --- examples/config-babel/.gitignore | 31 ---- examples/config-babel/babel.config.json | 4 - examples/config-babel/images/babel.png | Bin 38458 -> 0 bytes .../config-babel/images/extension_128.png | Bin 7624 -> 0 bytes examples/config-babel/images/extension_16.png | Bin 598 -> 0 bytes examples/config-babel/images/extension_48.png | Bin 2504 -> 0 bytes examples/config-babel/manifest.json | 14 -- examples/config-babel/newtab/index.html | 40 ---- examples/config-babel/newtab/scripts.js | 11 -- examples/config-babel/newtab/styles.css | 22 --- examples/config-babel/package.json | 14 -- examples/content-preact/package.json | 1 - examples/data.ts | 9 - examples/new-preact/package.json | 1 - examples/types.ts | 1 - programs/create/create.spec.ts | 4 +- programs/develop/package.json | 3 - .../webpack/plugin-js-frameworks/index.ts | 4 - .../plugin-js-frameworks/js-tools/babel.ts | 173 ------------------ 19 files changed, 2 insertions(+), 330 deletions(-) delete mode 100644 examples/config-babel/.gitignore delete mode 100644 examples/config-babel/babel.config.json delete mode 100644 examples/config-babel/images/babel.png delete mode 100644 examples/config-babel/images/extension_128.png delete mode 100644 examples/config-babel/images/extension_16.png delete mode 100644 examples/config-babel/images/extension_48.png delete mode 100644 examples/config-babel/manifest.json delete mode 100644 examples/config-babel/newtab/index.html delete mode 100644 examples/config-babel/newtab/scripts.js delete mode 100644 examples/config-babel/newtab/styles.css delete mode 100644 examples/config-babel/package.json delete mode 100644 programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts diff --git a/examples/config-babel/.gitignore b/examples/config-babel/.gitignore deleted file mode 100644 index 5e8c65b7..00000000 --- a/examples/config-babel/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -node_modules - -# testing -coverage - -# production -dist - -# misc -.DS_Store - -# local env files -.env.local -.env.development.local -.env.test.local -.env.production.local - -# lock files -yarn.lock -package-lock.json - -# debug files -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# extension.js -extension-env.d.ts diff --git a/examples/config-babel/babel.config.json b/examples/config-babel/babel.config.json deleted file mode 100644 index ab1c3115..00000000 --- a/examples/config-babel/babel.config.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "presets": [], - "plugins": [] -} diff --git a/examples/config-babel/images/babel.png b/examples/config-babel/images/babel.png deleted file mode 100644 index a9e907c4fc4e31775e21672522f56aac78ae23ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38458 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 E7b``wZ~y=R diff --git a/examples/config-babel/images/extension_128.png b/examples/config-babel/images/extension_128.png deleted file mode 100644 index c399dc75954d5899fa5545e7c959fb965d47c32c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7624 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 diff --git a/examples/config-babel/images/extension_48.png b/examples/config-babel/images/extension_48.png deleted file mode 100644 index 9d83a03bab2356a95ef7e8663705f368808367c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2504 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 SW_%+60000 - - - - - Babel Extension - - - - - - - - - diff --git a/examples/config-babel/newtab/scripts.js b/examples/config-babel/newtab/scripts.js deleted file mode 100644 index f6c62d62..00000000 --- a/examples/config-babel/newtab/scripts.js +++ /dev/null @@ -1,11 +0,0 @@ -function getManifest() { - return chrome.runtime.getManifest() -} - -const manifest = getManifest() - -console.table({ - name: manifest.name, - version: manifest.version, - description: manifest.description -}) diff --git a/examples/config-babel/newtab/styles.css b/examples/config-babel/newtab/styles.css deleted file mode 100644 index 8443a38a..00000000 --- a/examples/config-babel/newtab/styles.css +++ /dev/null @@ -1,22 +0,0 @@ -body { - display: flex; - justify-content: center; - align-items: center; - height: calc(100vh - 26px); -} - -h1 { - font-size: 4.7em; -} - -.babel:hover { - filter: grayscale(1); - transition: - filter 2s, - border-color 2s; -} - -.new:hover { - filter: grayscale(0); - border-color: aquamarine; -} diff --git a/examples/config-babel/package.json b/examples/config-babel/package.json deleted file mode 100644 index a5881a38..00000000 --- a/examples/config-babel/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "private": true, - "name": "config-babel", - "description": "An Extension.js example.", - "version": "0.0.1", - "author": { - "name": "Cezar Augusto", - "email": "boss@cezaraugusto.net", - "url": "https://cezaraugusto.com" - }, - "devDependencies": { - "stylelint": "^16.7.0" - } -} diff --git a/examples/content-preact/package.json b/examples/content-preact/package.json index 2c0df32e..a63f7688 100644 --- a/examples/content-preact/package.json +++ b/examples/content-preact/package.json @@ -15,7 +15,6 @@ "tailwindcss": "^3.4.1" }, "devDependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.2", "typescript": "5.3.3" } } diff --git a/examples/data.ts b/examples/data.ts index 3c93a28a..8854908c 100644 --- a/examples/data.ts +++ b/examples/data.ts @@ -21,15 +21,6 @@ const JS_TEMPLATES: Template[] = [ configFiles: undefined }, // { - // name: 'config-babel', - // uiContext: ['newTab'], - // uiFramework: undefined, - // css: 'css', - // hasBackground: false, - // hasEnv: false, - // configFiles: ['babel.config.json'] - // }, - // { // name: 'content-extension-config', // uiContext: ['content'], // uiFramework: 'react', diff --git a/examples/new-preact/package.json b/examples/new-preact/package.json index 594e7d27..a6a1d26a 100644 --- a/examples/new-preact/package.json +++ b/examples/new-preact/package.json @@ -14,7 +14,6 @@ "sakura.css": "^1.5.0" }, "devDependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.2", "typescript": "5.3.3" } } diff --git a/examples/types.ts b/examples/types.ts index 4977dd72..47e96b59 100644 --- a/examples/types.ts +++ b/examples/types.ts @@ -3,7 +3,6 @@ export type ConfigFiles = | 'postcss.config.js' | 'tailwind.config.js' | 'tsconfig.json' - | 'babel.config.js' | 'stylelint.config.json' | 'extension.config.js' diff --git a/programs/create/create.spec.ts b/programs/create/create.spec.ts index 30df3d65..0ab84839 100644 --- a/programs/create/create.spec.ts +++ b/programs/create/create.spec.ts @@ -84,8 +84,8 @@ describe('extension create', () => { ? 'ts' : 'tsx' : template.configFiles?.includes('tsconfig.json') - ? 'ts' - : 'js' + ? 'ts' + : 'js' template.uiContext?.forEach((context: string) => { // Expect [context]/index.html for all contexts except 'content' diff --git a/programs/develop/package.json b/programs/develop/package.json index 1f8b9463..25ad7d9d 100644 --- a/programs/develop/package.json +++ b/programs/develop/package.json @@ -88,15 +88,12 @@ "typescript": "5.3.3" }, "optionalDependencies": { - "@babel/core": "^7.24.9", "@prefresh/core": "^1.5.2", "@prefresh/utils": "^1.2.0", "@prefresh/webpack": "^4.0.1", "@rspack/plugin-preact-refresh": "^1.0.0", "@rspack/plugin-react-refresh": "^1.0.0", "@vue/compiler-sfc": "^3.4.34", - "babel-loader": "^9.1.3", - "babel-preset-modern-browser-extension": "^0.7.0", "less": "^4.2.0", "less-loader": "^12.2.0", "postcss-flexbugs-fixes": "^5.0.2", diff --git a/programs/develop/webpack/plugin-js-frameworks/index.ts b/programs/develop/webpack/plugin-js-frameworks/index.ts index be0b2262..897e7a7b 100644 --- a/programs/develop/webpack/plugin-js-frameworks/index.ts +++ b/programs/develop/webpack/plugin-js-frameworks/index.ts @@ -2,7 +2,6 @@ import path from 'path' import {type Compiler} from '@rspack/core' import {PluginInterface} from '../webpack-types' import {type DevOptions} from '../../commands/dev' -import {maybeUseBabel} from './js-tools/babel' import {isUsingPreact, maybeUsePreact} from './js-tools/preact' import {isUsingReact, maybeUseReact} from './js-tools/react' import {maybeUseVue} from './js-tools/vue' @@ -25,13 +24,11 @@ export class JsFrameworksPlugin { private async configureOptions(compiler: Compiler) { const projectPath = path.dirname(this.manifestPath) - const maybeInstallBabel = await maybeUseBabel(compiler, projectPath) const maybeInstallReact = await maybeUseReact(projectPath) const maybeInstallPreact = await maybeUsePreact(projectPath) const maybeInstallVue = await maybeUseVue(projectPath) compiler.options.resolve.alias = { - ...(maybeInstallBabel?.alias || {}), ...(maybeInstallReact?.alias || {}), ...(maybeInstallPreact?.alias || {}), ...(maybeInstallVue?.alias || {}), @@ -89,7 +86,6 @@ export class JsFrameworksPlugin { } } }, - // ...(maybeInstallBabel?.loaders || []), ...(maybeInstallReact?.loaders || []), ...(maybeInstallPreact?.loaders || []), ...(maybeInstallVue?.loaders || []), diff --git a/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts b/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts deleted file mode 100644 index cfe7c0ca..00000000 --- a/programs/develop/webpack/plugin-js-frameworks/js-tools/babel.ts +++ /dev/null @@ -1,173 +0,0 @@ -// ██████╗ ███████╗██╗ ██╗███████╗██╗ ██████╗ ██████╗ -// ██╔══██╗██╔════╝██║ ██║██╔════╝██║ ██╔═══██╗██╔══██╗ -// ██║ ██║█████╗ ██║ ██║█████╗ ██║ ██║ ██║██████╔╝ -// ██║ ██║██╔══╝ ╚██╗ ██╔╝██╔══╝ ██║ ██║ ██║██╔═══╝ -// ██████╔╝███████╗ ╚████╔╝ ███████╗███████╗╚██████╔╝██║ -// ╚═════╝ ╚══════╝ ╚═══╝ ╚══════╝╚══════╝ ╚═════╝ ╚═╝ - -import path from 'path' -import fs from 'fs' -import {Compiler} from '@rspack/core' -import * as messages from '../../lib/messages' -import {installOptionalDependencies} from '../../lib/utils' -import {isUsingPreact} from './preact' -import {DevOptions} from '../../../commands/dev' -import {isUsingTypeScript, maybeUseTypeScript} from './typescript' -import {JsFramework} from '../../webpack-types' - -let userMessageDelivered = false - -const babelConfigFiles = [ - '.babelrc', - '.babelrc.json', - '.babelrc.js', - '.babelrc.cjs', - 'babel.config.json', - 'babel.config.js', - 'babel.config.cjs' -] - -export function isUsingBabel(projectPath: string): boolean { - const packageJsonPath = path.join(projectPath, 'package.json') - const manifestJsonPath = path.join(projectPath, 'manifest.json') - - if (!fs.existsSync(packageJsonPath)) { - return false - } - - const packageJson = require(packageJsonPath) - - const babelAsDevDep = - packageJson.devDependencies && packageJson.devDependencies['babel-core'] - - const babelAsDep = - packageJson.dependencies && packageJson.dependencies['babel-core'] - - const isUsingBabel = - babelConfigFiles.some((file) => - fs.existsSync(path.join(projectPath, file)) - ) || - !!babelAsDevDep || - !!babelAsDep - - if (isUsingBabel) { - if (!userMessageDelivered) { - const manifest = require(manifestJsonPath) - const manifestName = manifest.name || 'Extension.js' - if (process.env.EXTENSION_ENV === 'development') { - if (process.env.EXTENSION_ENV === 'development') { - console.log(messages.isUsingIntegration(manifestName, 'Babel')) - } - } - - userMessageDelivered = true - } - } - - return isUsingBabel -} - -export function getBabelConfigFile(projectPath: string) { - for (const file of babelConfigFiles) { - const configFile = path.join(projectPath, file) - - if (fs.existsSync(configFile)) { - return configFile - } - } - - return undefined -} - -export function babelConfig( - projectPath: string, - opts: { - mode: DevOptions['mode'] - typescript: boolean - } -) { - const presetModernExtensions = - require('babel-preset-modern-browser-extension').default - - return { - // When set, the given directory will be used to cache the results - // of the loader. Future webpack builds will attempt to read from - // the cache to avoid needing to run the potentially expensive Babel - // recompilation process on each run. If the value is set to true in - // options ({cacheDirectory: true}), the loader will use the default - // cache directory in node_modules/.cache/babel-loader or fallback to - // the default OS temporary file directory if no node_modules folder - // could be found in any root directory. - cacheDirectory: false, - // When set, each Babel transform output will be compressed with Gzip. - // If you want to opt-out of cache compression, set it to false -- your - // project may benefit from this if it transpiles thousands of files. - cacheCompression: false, - babelrc: false, - configFile: getBabelConfigFile(projectPath), - compact: opts.mode === 'production', - overrides: [presetModernExtensions(opts).overrides], - presets: [...presetModernExtensions(opts).presets], - plugins: [ - ...presetModernExtensions(opts).plugins, - process.env.NODE_ENV !== 'test' && - opts.mode === 'development' && - isUsingPreact(projectPath) && - require.resolve('react-refresh/babel') - ].filter(Boolean) - } -} - -export async function maybeUseBabel( - compiler: Compiler, - projectPath: string -): Promise { - if (!isUsingBabel(projectPath)) return undefined - - try { - require.resolve('babel-loader') - } catch (e) { - const babelDependencies = [ - '@babel/core', - 'babel-loader', - 'babel-preset-modern-browser-extension' - ] - - const manifest = require(path.join(projectPath, 'manifest.json')) - const manifestName = manifest.name || 'Extension.js' - - await installOptionalDependencies(manifestName, 'Babel', babelDependencies) - - // The compiler will exit after installing the dependencies - // as it can't read the new dependencies without a restart. - console.log(messages.youAreAllSet(manifestName, 'Babel')) - process.exit(0) - } - - // Prevent users from running ts/tsx files when not using TypeScript - const files = isUsingTypeScript(projectPath) - ? /\.(js|mjs|jsx|mjsx|ts|mts|tsx|mtsx)$/ - : /\.(js|mjs|jsx|mjsx)$/ - - const mode = compiler.options.mode - const maybeInstallTypeScript = await maybeUseTypeScript(projectPath) - - return { - plugins: undefined, - loaders: [ - // https://webpack.js.org/loaders/babel-loader/ - // https://babeljs.io/docs/en/babel-loader - { - test: files, - include: projectPath, - exclude: [/[\\/]node_modules[\\/]/], - loader: require.resolve('babel-loader'), - options: babelConfig(projectPath, { - mode, - typescript: maybeInstallTypeScript - }) - } - ], - alias: undefined - } -} From 73130ab0d59dcdd3db83c9a924865013a15880d3 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Fri, 23 Aug 2024 17:41:31 -0300 Subject: [PATCH 09/18] Support WebResources plugin --- .../plugin-extension/feature-web-resources/index.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts b/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts index f912a9a1..e8218b82 100644 --- a/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts @@ -131,12 +131,11 @@ export class WebResourcesPlugin { ) modules.forEach((module) => { - chunkGraph.getModuleChunks(module).forEach((chunk) => { - chunk.auxiliaryFiles.forEach((file) => { - if (!importedFiles.includes(file)) { - importedFiles.push(file) - } - }) + // Rspack does not provide `getModuleChunks` API. + chunk.files.forEach((file) => { + if (!importedFiles.includes(file)) { + importedFiles.push(file) + } }) }) }) From 556603042cf2e4522329986495cc5cd1f6c2985a Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Fri, 23 Aug 2024 18:31:32 -0300 Subject: [PATCH 10/18] Port pending public path runtime module --- .../steps/add-public-path-runtime-module.ts | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-runtime-module.ts b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-runtime-module.ts index f8fa8ace..cabcd360 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-runtime-module.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-runtime-module.ts @@ -3,10 +3,11 @@ // Released under the MIT License. import { + Compilation, + Compiler, RuntimeGlobals, - RuntimeModule, Template, - type Compiler + sources } from '@rspack/core' const basic = [ @@ -21,42 +22,41 @@ const weakRuntimeCheck = [ export class AddPublicPathRuntimeModule { apply(compiler: Compiler) { - const {RuntimeGlobals} = compiler.webpack - - compiler.hooks.compilation.tap('PublicPathRuntimeModule', (compilation) => { - compilation.hooks.runtimeRequirementInTree - .for(RuntimeGlobals.publicPath) - .tap(AddPublicPathRuntimeModule.name, (chunk) => { - const module = PublicPathRuntimeModule() - - compilation.addRuntimeModule(chunk, module) - - return true - }) - }) + compiler.hooks.thisCompilation.tap( + 'scripts:add-public-path-runtime-module', + (compilation: Compilation) => { + compilation.hooks.processAssets.tap( + { + name: 'scripts:add-public-path-runtime-module', + stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + const publicPath = compilation.outputOptions.publicPath || '' + const path = JSON.stringify( + compilation.getPath(publicPath, { + hash: compilation.hash || 'XXXX' + }) + ) + + const runtimeSource = Template.asString([ + ...weakRuntimeCheck, + `${RuntimeGlobals.publicPath} = typeof importScripts === 'function' || !(isBrowser || isChrome) ? ${path} : runtime.runtime.getURL(${path});` + ]) + + // Iterate through all chunks and inject the runtime code where necessary + for (const chunk of compilation.chunks) { + for (const file of chunk.files) { + const existingSource = compilation.assets[file] + const combinedSource = new sources.ConcatSource( + existingSource, + new sources.RawSource(runtimeSource) + ) + compilation.updateAsset(file, combinedSource) + } + } + } + ) + } + ) } } - -function PublicPathRuntimeModule() { - class PublicPathRuntimeModule extends RuntimeModule { - constructor() { - super('publicPath', RuntimeModule.STAGE_BASIC) - } - - generate() { - const publicPath = this.compilation?.outputOptions.publicPath - - return Template.asString([ - ...weakRuntimeCheck, - `var path = ${JSON.stringify( - this.compilation?.getPath(publicPath || '', { - hash: this.compilation.hash || 'XXXX' - }) - )}`, - `${RuntimeGlobals.publicPath} = typeof importScripts === 'function' || !(isBrowser || isChrome) ? path : runtime.runtime.getURL(path);` - ]) - } - } - - return new PublicPathRuntimeModule() -} From 53ddb687b33a47e474c787c9f8c6cb118cd8ef67 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Fri, 23 Aug 2024 19:23:53 -0300 Subject: [PATCH 11/18] Port webpack-target-webextension to Rspack --- .../target-web-extension-plugin/index.ts | 4 +- .../BrowserRuntime.ts | 15 ++ .../rspack-target-webextension/ChunkLoader.ts | 102 +++++++++++++ .../HMRDevServer.ts | 51 +++++++ .../NoDangerNamePlugin.ts | 60 ++++++++ .../RuntimeModules/AutoPublicPath.ts | 122 +++++++++++++++ .../RuntimeModules/ChunkLoaderFallback.ts | 61 ++++++++ .../RuntimeModules/EagerlyLoadChunks.ts | 25 ++++ .../RuntimeModules/LoadScript.ts | 140 ++++++++++++++++++ .../RuntimeModules/PublicPath.ts | 36 +++++ .../ServiceWorkerPlugin.ts | 136 +++++++++++++++++ .../rspack-target-webextension/index.ts | 78 ++++++++++ .../rspack-target-webextension/types.ts | 15 ++ programs/develop/webpack/rspack-config.ts | 12 +- 14 files changed, 849 insertions(+), 8 deletions(-) create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/BrowserRuntime.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/NoDangerNamePlugin.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/AutoPublicPath.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/ChunkLoaderFallback.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/EagerlyLoadChunks.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/index.ts create mode 100644 programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/types.ts diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts index 407805ed..422558b8 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts @@ -1,7 +1,7 @@ import fs from 'fs' import path from 'path' import {type Compiler} from '@rspack/core' -import WebExtension from 'webpack-target-webextension' +import {WebExtensionPlugin} from './rspack-target-webextension' import {type PluginInterface} from '../../../reload-types' import {type Manifest} from '../../../../webpack-types' import {type DevOptions} from '../../../../../commands/dev' @@ -139,7 +139,7 @@ export class TargetWebExtensionPlugin { this.handleBackground(compiler, this.browser, manifest) - new WebExtension({ + new WebExtensionPlugin({ background: this.getEntryName(manifest), weakRuntimeCheck: true }).apply(compiler) diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/BrowserRuntime.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/BrowserRuntime.ts new file mode 100644 index 00000000..f003a532 --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/BrowserRuntime.ts @@ -0,0 +1,15 @@ +// @ts-check +const basic = [ + `var isBrowser = !!(() => { try { return browser.runtime.getURL("/") } catch(e) {} })()`, + `var isChrome = !!(() => { try { return chrome.runtime.getURL("/") } catch(e) {} })()` +] +const strong = [ + ...basic, + `var runtime = isBrowser ? browser : isChrome ? chrome : { get runtime() { throw new Error("No chrome or browser runtime found") } }` +] +const weak = [ + ...basic, + `var runtime = isBrowser ? browser : isChrome ? chrome : (typeof self === 'object' && self.addEventListener) ? { get runtime() { throw new Error("No chrome or browser runtime found") } } : { runtime: { getURL: x => x } }` +] + +export default (getWeak = false) => (getWeak ? weak : strong) diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts new file mode 100644 index 00000000..3c20aaea --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts @@ -0,0 +1,102 @@ +import {Compiler} from '@rspack/core' + +import {LoadScriptRuntimeModule} from './RuntimeModules/LoadScript' +import {PublicPathRuntimeModule} from './RuntimeModules/PublicPath' +import {AutoPublicPathRuntimeModule} from './RuntimeModules/AutoPublicPath' +import {ChunkLoaderFallbackRuntimeModule} from './RuntimeModules/ChunkLoaderFallback' +import {BackgroundOptions} from './types' + +export class ChuckLoaderRuntimePlugin { + private readonly options: BackgroundOptions + private readonly weakRuntimeCheck: boolean + + constructor(options: BackgroundOptions, weakRuntimeCheck: boolean) { + this.options = options + this.weakRuntimeCheck = weakRuntimeCheck + } + + apply(compiler: Compiler) { + const {RuntimeGlobals} = compiler.webpack + const {options} = this + + compiler.hooks.compilation.tap( + ChuckLoaderRuntimePlugin.name, + (compilation) => { + compilation.hooks.runtimeRequirementInTree + .for(RuntimeGlobals.loadScript) + .tap(ChuckLoaderRuntimePlugin.name, (chunk) => { + compilation.addRuntimeModule( + chunk, + LoadScriptRuntimeModule( + compiler.webpack, + compilation.outputOptions.environment && + compilation.outputOptions.environment.dynamicImport, + options && options.classicLoader !== false, + this.weakRuntimeCheck + ) + ) + return true + }) + + compilation.hooks.runtimeRequirementInTree + .for(RuntimeGlobals.publicPath) + .tap(ChuckLoaderRuntimePlugin.name, (chunk, set) => { + const {outputOptions} = compilation + const {publicPath, scriptType} = outputOptions + + if (publicPath === 'auto') { + const module = AutoPublicPathRuntimeModule( + compiler.webpack, + this.weakRuntimeCheck + ) + + if (scriptType !== 'module') { + set.add(RuntimeGlobals.global) + } + + compilation.addRuntimeModule(chunk, module) + } else { + const module = PublicPathRuntimeModule( + compiler.webpack, + this.weakRuntimeCheck + ) + + if ( + typeof publicPath !== 'string' || + /\[(full)?hash\]/.test(publicPath) + ) { + module.fullHash = true + } + + compilation.addRuntimeModule(chunk, module) + } + return true + }) + + if (options && options.classicLoader !== false) { + compilation.hooks.afterChunks.tap( + ChuckLoaderRuntimePlugin.name, + () => { + const {entry, pageEntry, serviceWorkerEntry} = options + const entryPoint = entry && compilation.entrypoints.get(entry) + const entryPoint2 = + pageEntry && compilation.entrypoints.get(pageEntry) + const entryPoint3 = + serviceWorkerEntry && + compilation.entrypoints.get(serviceWorkerEntry) + + for (const entry of [entryPoint, entryPoint2, entryPoint3]) { + if (!entry) continue + + compilation.addRuntimeModule( + entry.chunks[0], + ChunkLoaderFallbackRuntimeModule(compiler.webpack) + ) + } + } + ) + } + } + ) + } +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts new file mode 100644 index 00000000..f3be70c0 --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts @@ -0,0 +1,51 @@ +import {Compiler} from '@rspack/core' + +// @ts-check +export class HMRDevServerPlugin { + apply(compiler: Compiler) { + if (!compiler.options.devServer) compiler.options.devServer = {} + const devServer = compiler.options.devServer + + setDefault(devServer, 'devMiddleware', {}) + // Extensions cannot be loaded over network + setDefault(devServer.devMiddleware, 'writeToDisk', true) + + if (!devServer.hot) return + + setDefault(devServer, 'host', '127.0.0.1') + setDefault(devServer, 'client', { + overlay: false, + progress: false, + webSocketURL: { + protocol: 'ws' + } + }) + // Overlay doesn't work well in content script. + setDefault(devServer.client, 'overlay', false) + // Progress is annoying in console. + setDefault(devServer.client, 'progress', false) + // In content script loaded in https:// pages, it will try to use wss:// because of protocol detect. + setDefault(devServer.client, 'webSocketURL', {protocol: 'ws'}) + setDefault(devServer.client.webSocketURL, 'protocol', 'ws') + + // HMR requires CORS requests in content scripts. + setDefault(devServer, 'allowedHosts', 'all') + setDefault(devServer, 'headers', { + 'Access-Control-Allow-Origin': '*' + }) + + // Avoid listening to node_modules + setDefault(devServer, 'static', {watch: {ignored: /\bnode_modules\b/}}) + setDefault(devServer.static, 'watch', {ignored: /\bnode_modules\b/}) + isObject(devServer.static) && + setDefault(devServer.static.watch, 'ignored', /\bnode_modules\b/) + } +} + +function setDefault(obj: {[x: string]: any}, key: string | number, val: any) { + if (isObject(obj) && obj[key] === undefined) obj[key] = val +} + +function isObject(x: any): x is Record { + return typeof x === 'object' && x !== null +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/NoDangerNamePlugin.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/NoDangerNamePlugin.ts new file mode 100644 index 00000000..081091fe --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/NoDangerNamePlugin.ts @@ -0,0 +1,60 @@ +import {Compiler} from '@rspack/core' + +// @ts-check +export class NoDangerNamePlugin { + apply(compiler: Compiler) { + const Error = compiler.webpack.WebpackError + + // Chrome bug https://bugs.chromium.org/p/chromium/issues/detail?id=1108199 + { + const optimization = compiler.options.optimization + + if (optimization.splitChunks === undefined) + optimization.splitChunks = {automaticNameDelimiter: '-'} + else if ( + optimization.splitChunks && + optimization.splitChunks.automaticNameDelimiter === undefined + ) { + optimization.splitChunks.automaticNameDelimiter = '-' + } + } + + compiler.hooks.emit.tap(NoDangerNamePlugin.name, (compilation) => { + const with_ = [] + const withTilde = [] + for (const file in compilation.assets) { + if (file.startsWith('_')) { + if (file.startsWith('_locales/') || file === '_locales') { + } else with_.push(String(file)) + } + if (file.includes('~')) withTilde.push(String(file)) + } + if (with_.length) { + compilation.errors.push( + new Error( + `[webpack-extension-target] +Path starts with "_" is preserved by the browser. +The browser will refuse to load this extension. +Please adjust your webpack configuration to remove that. +File(s) starts with "_": +` + with_.map((x) => ' ' + x).join('\n') + ) + ) + } + if (withTilde.length) { + compilation.errors.push( + new Error( + `[webpack-extension-target] +File includes "~" is not be able to loaded by Chrome due to a bug https://bugs.chromium.org/p/chromium/issues/detail?id=1108199. +Please adjust your webpack configuration to remove that. +If you're using splitChunks, please set config.optimization.splitChunks.automaticNameDelimiter to other char like "-". +If you're using runtimeChunks, please set config.optimization.runtimeChunk.name to a function like + entrypoint => \`runtime-\${entrypoint.name}\` +File(s) includes "~": +` + withTilde.map((x) => ' ' + x).join('\n') + ) + ) + } + }) + } +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/AutoPublicPath.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/AutoPublicPath.ts new file mode 100644 index 00000000..810b9772 --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/AutoPublicPath.ts @@ -0,0 +1,122 @@ +import {type rspack} from '@rspack/core' +import BrowserRuntime from '../BrowserRuntime' + +/** + * @returns {import('webpack').RuntimeModule} + */ +export function AutoPublicPathRuntimeModule( + webpack: typeof rspack, + acceptWeak: boolean +) { + const { + RuntimeModule, + RuntimeGlobals, + Template, + javascript: {JavascriptModulesPlugin} + } = webpack + + class AutoPublicPathRuntimeModule extends RuntimeModule { + constructor() { + super('publicPath', RuntimeModule.STAGE_BASIC) + } + + /** + * @returns {string} runtime code + */ + generate() { + const {compilation} = this + + if (!compilation) + return Template.asString( + '/* [webpack-target-webextension] AutoPublicPathRuntimeModule skipped because no compilation is found. */' + ) + const {scriptType, importMetaName} = compilation.outputOptions + const chunkName = compilation.getPath( + JavascriptModulesPlugin.getChunkFilenameTemplate( + this.chunk, + compilation.outputOptions + ), + { + chunk: this.chunk, + contentHashType: 'javascript' + } + ) + const outputPath = compilation.outputOptions.path + if (!outputPath) + return Template.asString( + '/* [webpack-target-webextension] AutoPublicPathRuntimeModule skipped because no output path is found. */' + ) + const undoPath = getUndoPath(chunkName, outputPath, false) + + return Template.asString([ + ...BrowserRuntime(acceptWeak), + 'var scriptUrl;', + scriptType === 'module' + ? `if (typeof ${importMetaName}.url === "string") scriptUrl = ${importMetaName}.url` + : Template.asString([ + `if (${RuntimeGlobals.global}.importScripts) scriptUrl = ${RuntimeGlobals.global}.location + "";`, + `var document = ${RuntimeGlobals.global}.document;`, + 'if (!scriptUrl && document && document.currentScript) {', + Template.indent(`scriptUrl = document.currentScript.src`), + '}' + ]), + '// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration', + '// or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.', + 'if (!scriptUrl) {', + Template.indent([ + 'if (isChrome || isBrowser) scriptUrl = runtime.runtime.getURL("/");', + 'else throw new Error("Automatic publicPath is not supported in this browser");' + ]), + '}', + 'scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\\?.*$/, "").replace(/\\/[^\\/]+$/, "/");', + !undoPath + ? `${RuntimeGlobals.publicPath} = scriptUrl;` + : `${RuntimeGlobals.publicPath} = scriptUrl + ${JSON.stringify(undoPath)};` + ]) + } + } + + return new AutoPublicPathRuntimeModule() +} + +/** + * The following function (from webpack/lib/util/identifier) is not exported by Webpack 5 as a public API. + * To not import anything from Webpack directly, this function is copied here. + * + * It follows the MIT license. + * + * @param {string} filename the filename which should be undone + * @param {string} outputPath the output path that is restored (only relevant when filename contains "..") + * @param {boolean} enforceRelative true returns ./ for empty paths + * @returns {string} repeated ../ to leave the directory of the provided filename to be back on output dir + */ +function getUndoPath( + filename: string, + outputPath: string, + enforceRelative: boolean +): string { + let depth = -1 + let append = '' + outputPath = outputPath.replace(/[\\/]$/, '') + for (const part of filename.split(/[/\\]+/)) { + if (part === '..') { + if (depth > -1) { + depth-- + } else { + const i = outputPath.lastIndexOf('/') + const j = outputPath.lastIndexOf('\\') + const pos = i < 0 ? j : j < 0 ? i : Math.max(i, j) + if (pos < 0) return outputPath + '/' + append = outputPath.slice(pos + 1) + '/' + append + outputPath = outputPath.slice(0, pos) + } + } else if (part !== '.') { + depth++ + } + } + return depth > 0 + ? `${'../'.repeat(depth)}${append}` + : enforceRelative + ? `./${append}` + : append +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/ChunkLoaderFallback.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/ChunkLoaderFallback.ts new file mode 100644 index 00000000..05f39a3e --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/ChunkLoaderFallback.ts @@ -0,0 +1,61 @@ +import {type rspack} from '@rspack/core' + +export function ChunkLoaderFallbackRuntimeModule(webpack: typeof rspack) { + const {RuntimeModule, Template} = webpack + class ChunkLoaderFallbackRuntimeModule extends RuntimeModule { + constructor() { + super('chunk loader fallback', RuntimeModule.STAGE_TRIGGER) + } + generate() { + return Template.getFunctionContent(runtime) + } + } + return new ChunkLoaderFallbackRuntimeModule() +} + +var browser: any +var chrome: any +var URL: string + +const runtime = function () { + const isBrowser = !!(() => { + try { + if (typeof browser.runtime.getURL === 'function') return true + } catch (err) {} + })() + + const runtime = isBrowser ? browser : chrome + runtime.runtime.onMessage.addListener((message, sender, sendResponse) => { + const cond = + message && + message.type === 'WTW_INJECT' && + sender && + sender.tab && + sender.tab.id != null + if (!cond) return + let file = message.file + try { + file = new URL(file).pathname + } catch {} + if (!file) return + + if (runtime.scripting) { + runtime.scripting + .executeScript({ + target: {tabId: sender.tab.id, frameIds: [sender.frameId]}, + files: [file] + }) + .then(sendResponse) + } else { + const details = {frameId: sender.frameId, file, matchAboutBlank: true} + + if (isBrowser) { + runtime.tabs.executeScript(sender.tab.id, details).then(sendResponse) + } else { + runtime.tabs.executeScript(sender.tab.id, details, sendResponse) + } + } + + return true + }) +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/EagerlyLoadChunks.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/EagerlyLoadChunks.ts new file mode 100644 index 00000000..1f68e3b2 --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/EagerlyLoadChunks.ts @@ -0,0 +1,25 @@ +import {type rspack} from '@rspack/core' + +export function createEagerlyLoadChunksRuntimeModule(webpack: typeof rspack) { + const {RuntimeGlobals, RuntimeModule, Template} = webpack + + class EagerlyLoadChunksRuntimeModule extends RuntimeModule { + constructor(chunks: (string | number | null)[]) { + super('eagerly load chunks', RuntimeModule.STAGE_TRIGGER) + this.chunks = chunks + } + + generate() { + return Template.asString( + this.chunks + .filter((x) => x !== null) + .map( + (x) => + `${RuntimeGlobals.ensureChunkHandlers}.i(${JSON.stringify(x)})` + ) + ) + } + } + + return EagerlyLoadChunksRuntimeModule +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts new file mode 100644 index 00000000..a9fb0f2d --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts @@ -0,0 +1,140 @@ +import {type rspack} from '@rspack/core' +import BrowserRuntime from '../BrowserRuntime' + +// import() +const DYNAMIC_IMPORT_LOADER = 'dynamicImportLoader' +// createElement('script') +const DOM_LOADER = 'scriptLoader' +// importScripts +const WORKER_LOADER = 'workerLoader' +// browser.runtime.sendMessage() +const CLASSIC_LOADER = 'classicLoader' +const CLASSIC_SUPPORT = '__send__' +// fallback choice when DYNAMIC_IMPORT_LOADER fails +const FALLBACK_LOADER = 'fallbackLoader' + +/** + * @returns {import('webpack').RuntimeModule} + */ +export function LoadScriptRuntimeModule( + webpack: typeof rspack, + supportDynamicImport: boolean | undefined, + classicLoaderEnabled: boolean | undefined, + acceptWeak: boolean +) { + const {Template, RuntimeGlobals, RuntimeModule} = webpack + + class LoadScriptRuntimeModule extends RuntimeModule { + constructor() { + super('load script') + this.supportDynamicImport = Boolean(supportDynamicImport) + this.classicLoaderEnabled = Boolean(classicLoaderEnabled) + } + + f(args: string, body: string[]) { + if (!this.compilation) throw new TypeError('No compilation is found.') + return this.compilation.runtimeTemplate.basicFunction(args, body) + } + + generate() { + const DynamicImportLoader = + `var ${DYNAMIC_IMPORT_LOADER} = ` + + this.f('url, done, key, chunkId', [ + `import(url).then(${this.f('', [ + `if (isNotIframe) return done()`, + `try {`, + Template.indent([ + `// It's a Chrome bug, if the import() is called in a sandboxed iframe, it _fails_ the script loading but _resolve_ the Promise.`, + `// we call ${RuntimeGlobals.ensureChunkHandlers}.j(chunkId) to check if it is loaded.`, + `// if it is, this is a no-op. if it is not, it will throw a TypeError because this function requires 2 parameters.`, + `// This call will not trigger the chunk loading because it is already loading.`, + `// see https://github.com/awesome-webextension/webpack-target-webextension/issues/41`, + `chunkId !== undefined && ${RuntimeGlobals.ensureChunkHandlers}.j(chunkId)`, + `done()` + ]), + `}`, + `catch {`, + Template.indent([ + `if (!bug816121warned) {`, + Template.indent([ + 'console.warn("Chrome bug https://crbug.com/816121 hit.")', + 'bug816121warned = true' + ]), + `}`, + `return ${FALLBACK_LOADER}(url, done, key, chunkId)` + ]), + `}` + ])}, ${this.f('e', [ + `console.warn('Dynamic import loader failed. Using fallback loader (see https://github.com/awesome-webextension/webpack-target-webextension#content-script).', e)`, + `${FALLBACK_LOADER}(url, done, key, chunkId)` + ])})` + ]) + const DOMLoader = + `var ${DOM_LOADER} = ` + + this.f('url, done', [ + `var script = document.createElement('script')`, + `script.src = url`, + `script.onload = done`, + `script.onerror = done`, + `document.body.appendChild(script)` + ]) + const WorkerLoader = + `var ${WORKER_LOADER} = ` + + this.f('url, done', [ + `try { importScripts(url); done() } catch (e) { done(e) }` + ]) + const ClassicLoader = + `var ${CLASSIC_LOADER} = ` + + this.f('url, done', [ + `${CLASSIC_SUPPORT}({ type: 'WTW_INJECT', file: url }).then(done, (e) => done(Object.assign(e, { type: 'missing' })))` + ]) + const ClassicLoaderSupport = + `var ${CLASSIC_SUPPORT} = ` + + this.f('msg', [ + `if (isBrowser) return runtime.runtime.sendMessage(msg)`, + `return new Promise(r => runtime.runtime.sendMessage(msg, r))` + ]) + const ClassicLoaderDisabled = + `var ${CLASSIC_LOADER} = ` + + this.f('', [ + 'throw new Error("No loader for content script is found. You must set output.environment.dynamicImport to enable ES Module loader, or specify the background entry in your webpack config to enable the classic loader.")' + ]) + return Template.asString( + [ + ...BrowserRuntime(acceptWeak), + + this.supportDynamicImport + ? `var bug816121warned, isNotIframe` + : undefined, + this.supportDynamicImport + ? `try { isNotIframe = typeof window === "object" ? window.top === window : true } catch(e) { isInIframe = false /* CORS error */ }` + : undefined, + + this.classicLoaderEnabled ? ClassicLoaderSupport : '', + this.classicLoaderEnabled ? ClassicLoader : ClassicLoaderDisabled, + + this.supportDynamicImport ? DynamicImportLoader : '', + + DOMLoader, + WorkerLoader, + + `var isWorker = typeof importScripts === 'function'`, + // extension page + `if (typeof location === 'object' && location.protocol.includes('-extension:')) ${RuntimeGlobals.loadScript} = isWorker ? ${WORKER_LOADER} : ${DOM_LOADER}`, + // content script + `else if (!isWorker) ${RuntimeGlobals.loadScript} = ${CLASSIC_LOADER}`, + // worker in content script + `else { throw new TypeError('Unable to determinate the chunk loader: content script + Worker') }`, + + this.supportDynamicImport + ? `var ${FALLBACK_LOADER} = ${RuntimeGlobals.loadScript}` + : '', + this.supportDynamicImport + ? `${RuntimeGlobals.loadScript} = ${DYNAMIC_IMPORT_LOADER}` + : '' + ].filter(Boolean) + ) + } + } + return new LoadScriptRuntimeModule() +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts new file mode 100644 index 00000000..0f51f6d4 --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts @@ -0,0 +1,36 @@ +import {type rspack} from '@rspack/core' +import BrowserRuntime from '../BrowserRuntime' + +export function PublicPathRuntimeModule( + webpack: typeof rspack, + acceptWeak: boolean +) { + const {RuntimeGlobals, RuntimeModule, Template} = webpack + + class PublicPathRuntimeModule extends RuntimeModule { + constructor() { + super('publicPath', RuntimeModule.STAGE_BASIC) + } + + generate() { + const {compilation} = this + if (!compilation) + return Template.asString( + '/* [webpack-target-webextension] PublicPathRuntimeModule skipped because no compilation is found. */' + ) + const {publicPath} = compilation.outputOptions + + return Template.asString([ + ...BrowserRuntime(acceptWeak), + `var path = ${JSON.stringify( + compilation.getPath(publicPath || '', { + hash: compilation.hash || 'XXXX' + }) + )}`, + `${RuntimeGlobals.publicPath} = typeof importScripts === 'function' || !(isBrowser || isChrome) ? path : runtime.runtime.getURL(path);` + ]) + } + } + + return new PublicPathRuntimeModule() +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts new file mode 100644 index 00000000..1c9c2e6b --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts @@ -0,0 +1,136 @@ +import {Compiler} from '@rspack/core' +import {createEagerlyLoadChunksRuntimeModule} from './RuntimeModules/EagerlyLoadChunks' +import {BackgroundOptions} from './types' + +export class ServiceWorkerEntryPlugin { + private readonly options: BackgroundOptions + private readonly entry: string + + constructor(options: BackgroundOptions, entry: string) { + this.options = options + this.entry = entry + } + + apply(compiler: Compiler) { + const hook = compiler.hooks.entryOption + // Set chunkLoading to import-scripts + // @ts-ignore DO NOT add return boolean to this function, this is a BailHook and we don't want to bail. + hook.tap(ServiceWorkerEntryPlugin.name, (context, entries) => { + if (typeof entries === 'function') { + if (this.options.noWarningDynamicEntry) return + + console.warn( + '[webpack-extension-target] Dynamic entry points not supported yet.\n' + + 'You must manually set the chuck loading of entry point ${this.entry} to "import-scripts".\n\n' + + 'See https://webpack.js.org/configuration/entry-context/#entry-descriptor\n\n' + + 'Set background.noWarningDynamicEntry to true to disable this warning.' + ) + } + + const selectedEntry = entries[this.entry] + + if (!selectedEntry) + throw new Error( + `[webpack-extension-target] There is no entry called ${this.entry}.` + ) + + selectedEntry.chunkLoading = 'import-scripts' + }) + + // Set all lazy chunks to eagerly loaded + // See https://bugs.chromium.org/p/chromium/issues/detail?id=1198822 + if (this.options.eagerChunkLoading !== false) { + compiler.hooks.compilation.tap( + ServiceWorkerEntryPlugin.name, + (compilation) => { + compilation.hooks.afterOptimizeChunkIds.tap( + ServiceWorkerEntryPlugin.name, + () => { + const entryPoint = compilation.entrypoints.get(this.entry) + if (!entryPoint) return + const entryChunk = entryPoint.getEntrypointChunk() + + const children = entryPoint.getChildren() + + /** @typedef {typeof children[0]} ChunkGroup */ + /** @type {Set} */ + const visitedChunkGroups = new Set() + + /** @type {Set} */ + const reachableChunks = new Set(entryPoint.chunks) + collectAllChildren(entryPoint) + + const reachableChunkIds = new Set( + [...reachableChunks].map((x) => x.id) + ) + + for (const id of getInitialChunkIds( + entryChunk, + compilation.chunkGraph, + chunkHasJs + )) { + reachableChunkIds.delete(id) + } + + if (reachableChunkIds.size) { + const EagerlyLoadChunksRuntimeModule = + createEagerlyLoadChunksRuntimeModule(compiler.webpack) + + compilation.hooks.additionalTreeRuntimeRequirements.tap( + EagerlyLoadChunksRuntimeModule.name, + (chunk, set) => { + if (chunk.id !== entryChunk.id) return + set.add(compiler.webpack.RuntimeGlobals.ensureChunkHandlers) + compilation.addRuntimeModule( + entryChunk, + new EagerlyLoadChunksRuntimeModule([...reachableChunkIds]) + ) + } + ) + } + + /** @param {ChunkGroup} chunkGroup */ + function collectAllChildren(chunkGroup) { + for (const x of chunkGroup.getChildren()) { + if (visitedChunkGroups.has(x)) continue + else { + visitedChunkGroups.add(x) + x.chunks.forEach((x) => reachableChunks.add(x)) + collectAllChildren(x) + } + } + } + } + ) + } + ) + } + } +} + +// webpack/lib/javascript/StartupHelpers.js +/** + * @param {import('webpack').Chunk} chunk the chunk + * @param {import('webpack').ChunkGraph} chunkGraph the chunk graph + * @param {function(import('webpack').Chunk, import('webpack').ChunkGraph): boolean} filterFn filter function + * @returns {Set} initially fulfilled chunk ids + */ +function getInitialChunkIds(chunk, chunkGraph, filterFn) { + const initialChunkIds = new Set(chunk.ids) + for (const c of chunk.getAllInitialChunks()) { + if (c === chunk || filterFn(c, chunkGraph)) continue + for (const id of c.ids) initialChunkIds.add(id) + } + return initialChunkIds +} + +// webpack/lib/javascript/JavascriptModulesPlugin.js +/** + * @param {import('webpack').Chunk} chunk a chunk + * @param {import('webpack').ChunkGraph} chunkGraph the chunk graph + * @returns {boolean} true, when a JS file is needed for this chunk + */ +function chunkHasJs(chunk, chunkGraph) { + if (chunkGraph.getNumberOfEntryModules(chunk) > 0) return true + return !!chunkGraph.getChunkModulesIterableBySourceType(chunk, 'javascript') +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/index.ts new file mode 100644 index 00000000..0987e7b1 --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/index.ts @@ -0,0 +1,78 @@ +import {Compiler} from '@rspack/core' +import {WebExtensionPluginOptions} from './types' + +// Make dynamic import & chunk splitting works. +import {ChuckLoaderRuntimePlugin} from './ChunkLoader' +// Ban invalid file names in web extension +import {NoDangerNamePlugin} from './NoDangerNamePlugin' +// Provide support for MV3 +import {ServiceWorkerEntryPlugin} from './ServiceWorkerPlugin' +// Automatically tweak HMR server +import {HMRDevServerPlugin} from './HMRDevServer' + +export class WebExtensionPlugin { + private readonly options: WebExtensionPluginOptions + + constructor(options: WebExtensionPluginOptions = {}) { + const {background} = options + if (background && (background.entry || background.manifest)) { + console.warn( + '[webpack-extension-target] background.entry and background.manifest ' + + 'has been deprecated.\n' + + '- background.manifest is no longer needed.\n' + + '- background.entry should be replaced with background.pageEntry ' + + 'and background.serviceWorkerEntry instead.' + ) + + if (background.pageEntry || background.serviceWorkerEntry) { + throw new Error( + '[webpack-extension-target] Deprecated background.entry and ' + + 'background.manifest cannot be specified with background.pageEntry ' + + 'or background.serviceWorkerEntry.' + ) + } + } + this.options = options + } + + apply(compiler: Compiler) { + const {background} = this.options + + if (background) { + if (background.serviceWorkerEntry) { + if (background.serviceWorkerEntry === background.pageEntry) { + // TODO: throw error in next version. + console.warn( + '[webpack-extension-target] background.serviceWorkerEntry must not ' + + 'be the same as background.pageEntry. Service Worker entry only ' + + 'supports importScript, but importScript does not exist in ' + + 'background page (mv2) or limited event page (mv3). A possible fix ' + + 'is to create two new files to be the service worker entry and the ' + + 'page entry, then those two files imports the background entry.' + ) + } + new ServiceWorkerEntryPlugin( + background, + background.serviceWorkerEntry + ).apply(compiler) + } + + if (background.manifest === 3 && background.entry) { + new ServiceWorkerEntryPlugin(background, background.entry).apply( + compiler + ) + } + } + + new ChuckLoaderRuntimePlugin( + this.options.background || {}, + this.options.weakRuntimeCheck || false + ).apply(compiler) + + new NoDangerNamePlugin().apply(compiler) + + if (this.options.hmrConfig !== false) { + new HMRDevServerPlugin().apply(compiler) + } + } +} diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/types.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/types.ts new file mode 100644 index 00000000..07fb996c --- /dev/null +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/types.ts @@ -0,0 +1,15 @@ +export interface BackgroundOptions { + noWarningDynamicEntry?: boolean + entry?: string // Deprecated, use pageEntry and serviceWorkerEntry instead. + manifest?: 2 | 3 // Defaults to 2. Deprecated. + pageEntry?: string + serviceWorkerEntry?: string + eagerChunkLoading?: boolean // Defaults to true + classicLoader?: boolean // Defaults to true +} + +export interface WebExtensionPluginOptions { + background?: BackgroundOptions + hmrConfig?: boolean // Defaults to true + weakRuntimeCheck?: boolean +} diff --git a/programs/develop/webpack/rspack-config.ts b/programs/develop/webpack/rspack-config.ts index cf0fd5c0..1e8a407c 100644 --- a/programs/develop/webpack/rspack-config.ts +++ b/programs/develop/webpack/rspack-config.ts @@ -114,12 +114,12 @@ export default function rspackConfig( browser: devOptions.browser, mode: devOptions.mode }), - new ReloadPlugin({ - manifestPath, - browser: devOptions.browser, - stats: true, - port: devOptions.port || 8000 - }), + // new ReloadPlugin({ + // manifestPath, + // browser: devOptions.browser, + // stats: true, + // port: devOptions.port || 8000 + // }), !devOptions.noOpen && new BrowsersPlugin({ extension: [ From 7d56d937d60ddcd989bc4d922e1f0199b486c088 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Sat, 24 Aug 2024 14:10:58 -0300 Subject: [PATCH 12/18] More of s/webpack/rspack --- programs/develop/build.spec.ts | 4 ++-- programs/develop/webpack/dev-server.ts | 4 ++-- .../webpack/plugin-compatibility/feature-polyfill.ts | 4 ++-- .../target-web-extension-plugin/index.ts | 8 ++++---- programs/develop/webpack/rspack-config.ts | 12 ++++++------ programs/develop/webpack/webpack-types.ts | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/programs/develop/build.spec.ts b/programs/develop/build.spec.ts index c08cd786..29613263 100644 --- a/programs/develop/build.spec.ts +++ b/programs/develop/build.spec.ts @@ -76,8 +76,8 @@ describe('extension build', () => { const postCssConfig = path.join(templatePath, 'postcss.config.js') // Dynamically mock the postcss.config.js file if it exists. - // Since the file is dynamically imported in the webpack config, - // we need to mock it before the webpack config is created. + // Since the file is dynamically imported in the Rspack config, + // we need to mock it before the Rspack config is created. if (fs.existsSync(postCssConfig)) { jest.mock(postCssConfig, () => jest.fn()) } diff --git a/programs/develop/webpack/dev-server.ts b/programs/develop/webpack/dev-server.ts index 21ac7571..decdda8a 100644 --- a/programs/develop/webpack/dev-server.ts +++ b/programs/develop/webpack/dev-server.ts @@ -9,7 +9,7 @@ import path from 'path' import {rspack} from '@rspack/core' import {RspackDevServer, Configuration} from '@rspack/dev-server' import {merge} from 'webpack-merge' -import webpackConfig from './rspack-config' +import rspackConfig from './rspack-config' import type {DevOptions} from '../commands/dev' import * as utils from './lib/utils' import {loadExtensionConfig} from '../commands/commands-lib/get-extension-config' @@ -29,7 +29,7 @@ export async function devServer( projectPath: string, {...devOptions}: DevOptions ) { - const baseConfig = webpackConfig(projectPath, { + const baseConfig = rspackConfig(projectPath, { ...devOptions, mode: 'development' }) diff --git a/programs/develop/webpack/plugin-compatibility/feature-polyfill.ts b/programs/develop/webpack/plugin-compatibility/feature-polyfill.ts index 0ee9373c..451ed94f 100644 --- a/programs/develop/webpack/plugin-compatibility/feature-polyfill.ts +++ b/programs/develop/webpack/plugin-compatibility/feature-polyfill.ts @@ -1,4 +1,4 @@ -import webpack, {type Compiler} from '@rspack/core' +import rspack, {type Compiler} from '@rspack/core' interface PolyfillPluginInterface { manifestPath: string @@ -19,7 +19,7 @@ export class PolyfillPlugin { } apply(compiler: Compiler) { - new webpack.ProvidePlugin({ + new rspack.ProvidePlugin({ browser: require.resolve('webextension-polyfill') }).apply(compiler) } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts index 422558b8..a3293327 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts @@ -139,9 +139,9 @@ export class TargetWebExtensionPlugin { this.handleBackground(compiler, this.browser, manifest) - new WebExtensionPlugin({ - background: this.getEntryName(manifest), - weakRuntimeCheck: true - }).apply(compiler) + // new WebExtensionPlugin({ + // background: this.getEntryName(manifest), + // weakRuntimeCheck: true + // }).apply(compiler) } } diff --git a/programs/develop/webpack/rspack-config.ts b/programs/develop/webpack/rspack-config.ts index 1e8a407c..cf0fd5c0 100644 --- a/programs/develop/webpack/rspack-config.ts +++ b/programs/develop/webpack/rspack-config.ts @@ -114,12 +114,12 @@ export default function rspackConfig( browser: devOptions.browser, mode: devOptions.mode }), - // new ReloadPlugin({ - // manifestPath, - // browser: devOptions.browser, - // stats: true, - // port: devOptions.port || 8000 - // }), + new ReloadPlugin({ + manifestPath, + browser: devOptions.browser, + stats: true, + port: devOptions.port || 8000 + }), !devOptions.noOpen && new BrowsersPlugin({ extension: [ diff --git a/programs/develop/webpack/webpack-types.ts b/programs/develop/webpack/webpack-types.ts index 98d92a3e..5c96f312 100644 --- a/programs/develop/webpack/webpack-types.ts +++ b/programs/develop/webpack/webpack-types.ts @@ -1,6 +1,6 @@ import { type RspackPluginInstance, - type LoaderContext as WebpackLoaderContext + type LoaderContext as RspackLoaderContext } from '@rspack/core' import {DevOptions} from '../commands/dev' @@ -26,7 +26,7 @@ export type PluginInterface = { excludeList?: FilepathList } -export interface LoaderInterface extends WebpackLoaderContext { +export interface LoaderInterface extends RspackLoaderContext { manifestPath: string includeList?: FilepathList excludeList?: FilepathList From cb7c5df28e996ec1116f337a44f4b88fa266daf5 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Sat, 24 Aug 2024 14:12:22 -0300 Subject: [PATCH 13/18] Begin rspack-target-webextension --- .../steps/setup-reload-strategy/index.ts | 8 +- .../rspack-target-webextension/ChunkLoader.ts | 105 +++++---- .../HMRDevServer.ts | 26 ++- .../NoDangerNamePlugin.ts | 2 + .../RuntimeModules/AutoPublicPath.ts | 121 +++++----- .../RuntimeModules/ChunkLoaderFallback.ts | 83 +++---- .../RuntimeModules/EagerlyLoadChunks.ts | 63 +++-- .../RuntimeModules/LoadScript.ts | 221 +++++++++--------- .../RuntimeModules/PublicPath.ts | 47 ++-- .../ServiceWorkerPlugin.ts | 172 +++++++------- 10 files changed, 433 insertions(+), 415 deletions(-) diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts index 20725e6e..5544b98d 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts @@ -36,10 +36,10 @@ class SetupReloadStrategy { }).apply(compiler) // 3 - Add the HMR reloader to the entry point. - new TargetWebExtensionPlugin({ - manifestPath: this.manifestPath, - browser: this.browser - }).apply(compiler) + // new TargetWebExtensionPlugin({ + // manifestPath: this.manifestPath, + // browser: this.browser + // }).apply(compiler) } } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts index 3c20aaea..132c09b7 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts @@ -1,5 +1,4 @@ -import {Compiler} from '@rspack/core' - +import {Compiler, sources} from '@rspack/core' import {LoadScriptRuntimeModule} from './RuntimeModules/LoadScript' import {PublicPathRuntimeModule} from './RuntimeModules/PublicPath' import {AutoPublicPathRuntimeModule} from './RuntimeModules/AutoPublicPath' @@ -16,83 +15,89 @@ export class ChuckLoaderRuntimePlugin { } apply(compiler: Compiler) { - const {RuntimeGlobals} = compiler.webpack + const {RuntimeGlobals, Template} = compiler.webpack const {options} = this compiler.hooks.compilation.tap( ChuckLoaderRuntimePlugin.name, (compilation) => { - compilation.hooks.runtimeRequirementInTree - .for(RuntimeGlobals.loadScript) - .tap(ChuckLoaderRuntimePlugin.name, (chunk) => { - compilation.addRuntimeModule( - chunk, - LoadScriptRuntimeModule( - compiler.webpack, - compilation.outputOptions.environment && - compilation.outputOptions.environment.dynamicImport, - options && options.classicLoader !== false, - this.weakRuntimeCheck - ) + // Handling LoadScript Runtime Module + compilation.hooks.processAssets.tap( + ChuckLoaderRuntimePlugin.name, + () => { + const loadScriptModule = LoadScriptRuntimeModule( + compiler.webpack, + compilation.outputOptions.environment?.dynamicImport, + options.classicLoader !== false, + this.weakRuntimeCheck ) - return true - }) - compilation.hooks.runtimeRequirementInTree - .for(RuntimeGlobals.publicPath) - .tap(ChuckLoaderRuntimePlugin.name, (chunk, set) => { + // Add the generated code directly to assets + const source = new sources.RawSource(loadScriptModule.source()) + compilation.emitAsset('load-script-runtime.js', source) + } + ) + + // Handling PublicPath Runtime Module + compilation.hooks.processAssets.tap( + ChuckLoaderRuntimePlugin.name, + () => { const {outputOptions} = compilation const {publicPath, scriptType} = outputOptions + let module if (publicPath === 'auto') { - const module = AutoPublicPathRuntimeModule( + module = AutoPublicPathRuntimeModule( compiler.webpack, this.weakRuntimeCheck ) - - if (scriptType !== 'module') { - set.add(RuntimeGlobals.global) - } - - compilation.addRuntimeModule(chunk, module) } else { - const module = PublicPathRuntimeModule( + module = PublicPathRuntimeModule( compiler.webpack, this.weakRuntimeCheck ) + } - if ( - typeof publicPath !== 'string' || - /\[(full)?hash\]/.test(publicPath) - ) { - module.fullHash = true - } + // Adding runtime module directly to assets + const source = new sources.RawSource( + module.generate(compilation, {}) + ) + compilation.emitAsset('public-path-runtime.js', source) - compilation.addRuntimeModule(chunk, module) + if (scriptType !== 'module') { + // Handle global variables if needed + const globalVarSource = new sources.RawSource( + `${RuntimeGlobals.global} = window;` + ) + compilation.emitAsset('global-var-runtime.js', globalVarSource) } - return true - }) + } + ) - if (options && options.classicLoader !== false) { - compilation.hooks.afterChunks.tap( + // Handling Chunk Loader Fallback for Classic Loader + if (options.classicLoader !== false) { + compilation.hooks.processAssets.tap( ChuckLoaderRuntimePlugin.name, () => { const {entry, pageEntry, serviceWorkerEntry} = options - const entryPoint = entry && compilation.entrypoints.get(entry) - const entryPoint2 = - pageEntry && compilation.entrypoints.get(pageEntry) - const entryPoint3 = + const entryPoints = [ + entry && compilation.entrypoints.get(entry), + pageEntry && compilation.entrypoints.get(pageEntry), serviceWorkerEntry && - compilation.entrypoints.get(serviceWorkerEntry) + compilation.entrypoints.get(serviceWorkerEntry) + ] - for (const entry of [entryPoint, entryPoint2, entryPoint3]) { - if (!entry) continue + entryPoints.forEach((entryPoint) => { + if (!entryPoint) return - compilation.addRuntimeModule( - entry.chunks[0], - ChunkLoaderFallbackRuntimeModule(compiler.webpack) + const fallbackModule = ChunkLoaderFallbackRuntimeModule( + compiler.webpack + ) + const source = new sources.RawSource( + fallbackModule.generate(compilation) ) - } + compilation.emitAsset('chunk-loader-fallback.js', source) + }) } ) } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts index f3be70c0..1f99b5b6 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts @@ -3,12 +3,13 @@ import {Compiler} from '@rspack/core' // @ts-check export class HMRDevServerPlugin { apply(compiler: Compiler) { - if (!compiler.options.devServer) compiler.options.devServer = {} - const devServer = compiler.options.devServer + const options = compiler.options + if (!options.devServer) options.devServer = {} + const devServer = options.devServer setDefault(devServer, 'devMiddleware', {}) // Extensions cannot be loaded over network - setDefault(devServer.devMiddleware, 'writeToDisk', true) + setDefault(devServer.devMiddleware!, 'writeToDisk', true) if (!devServer.hot) return @@ -20,13 +21,14 @@ export class HMRDevServerPlugin { protocol: 'ws' } }) + + const devServerClient = devServer.client! as Record // Overlay doesn't work well in content script. - setDefault(devServer.client, 'overlay', false) + setDefault(devServerClient, 'overlay', false) // Progress is annoying in console. - setDefault(devServer.client, 'progress', false) - // In content script loaded in https:// pages, it will try to use wss:// because of protocol detect. - setDefault(devServer.client, 'webSocketURL', {protocol: 'ws'}) - setDefault(devServer.client.webSocketURL, 'protocol', 'ws') + setDefault(devServerClient, 'progress', false) + // In content script loaded in https:// pages, it will try to use wss:// because of protocol detection. + setDefault(devServer!, 'webSocketServer', 'ws') // HMR requires CORS requests in content scripts. setDefault(devServer, 'allowedHosts', 'all') @@ -36,13 +38,13 @@ export class HMRDevServerPlugin { // Avoid listening to node_modules setDefault(devServer, 'static', {watch: {ignored: /\bnode_modules\b/}}) - setDefault(devServer.static, 'watch', {ignored: /\bnode_modules\b/}) - isObject(devServer.static) && - setDefault(devServer.static.watch, 'ignored', /\bnode_modules\b/) + if (isObject(devServer.static)) { + setDefault(devServer.static, 'watch', {ignored: /\bnode_modules\b/}) + } } } -function setDefault(obj: {[x: string]: any}, key: string | number, val: any) { +function setDefault(obj: Record, key: string | number, val: any) { if (isObject(obj) && obj[key] === undefined) obj[key] = val } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/NoDangerNamePlugin.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/NoDangerNamePlugin.ts index 081091fe..59f268c3 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/NoDangerNamePlugin.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/NoDangerNamePlugin.ts @@ -27,8 +27,10 @@ export class NoDangerNamePlugin { if (file.startsWith('_locales/') || file === '_locales') { } else with_.push(String(file)) } + if (file.includes('~')) withTilde.push(String(file)) } + if (with_.length) { compilation.errors.push( new Error( diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/AutoPublicPath.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/AutoPublicPath.ts index 810b9772..bf7f42ae 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/AutoPublicPath.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/AutoPublicPath.ts @@ -1,82 +1,71 @@ -import {type rspack} from '@rspack/core' +import {rspack, Compilation} from '@rspack/core' import BrowserRuntime from '../BrowserRuntime' -/** - * @returns {import('webpack').RuntimeModule} - */ export function AutoPublicPathRuntimeModule( - webpack: typeof rspack, + rspackLib: typeof rspack, acceptWeak: boolean ) { - const { - RuntimeModule, - RuntimeGlobals, - Template, - javascript: {JavascriptModulesPlugin} - } = webpack + const {Template, RuntimeGlobals} = rspackLib - class AutoPublicPathRuntimeModule extends RuntimeModule { - constructor() { - super('publicPath', RuntimeModule.STAGE_BASIC) + function generate(compilation: Compilation, chunk: any) { + if (!compilation) { + return Template.asString( + '/* [webpack-target-webextension] AutoPublicPathRuntimeModule skipped because no compilation is found. */' + ) } - /** - * @returns {string} runtime code - */ - generate() { - const {compilation} = this + const { + scriptType, + importMetaName, + path: outputPath + } = compilation.outputOptions + const chunkName = compilation.getPath( + chunk.filenameTemplate || compilation.outputOptions.filename, + { + chunk, + contentHash: 'javascript' + } + ) - if (!compilation) - return Template.asString( - '/* [webpack-target-webextension] AutoPublicPathRuntimeModule skipped because no compilation is found. */' - ) - const {scriptType, importMetaName} = compilation.outputOptions - const chunkName = compilation.getPath( - JavascriptModulesPlugin.getChunkFilenameTemplate( - this.chunk, - compilation.outputOptions - ), - { - chunk: this.chunk, - contentHashType: 'javascript' - } + if (!outputPath) { + return Template.asString( + '/* [webpack-target-webextension] AutoPublicPathRuntimeModule skipped because no output path is found. */' ) - const outputPath = compilation.outputOptions.path - if (!outputPath) - return Template.asString( - '/* [webpack-target-webextension] AutoPublicPathRuntimeModule skipped because no output path is found. */' - ) - const undoPath = getUndoPath(chunkName, outputPath, false) - - return Template.asString([ - ...BrowserRuntime(acceptWeak), - 'var scriptUrl;', - scriptType === 'module' - ? `if (typeof ${importMetaName}.url === "string") scriptUrl = ${importMetaName}.url` - : Template.asString([ - `if (${RuntimeGlobals.global}.importScripts) scriptUrl = ${RuntimeGlobals.global}.location + "";`, - `var document = ${RuntimeGlobals.global}.document;`, - 'if (!scriptUrl && document && document.currentScript) {', - Template.indent(`scriptUrl = document.currentScript.src`), - '}' - ]), - '// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration', - '// or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.', - 'if (!scriptUrl) {', - Template.indent([ - 'if (isChrome || isBrowser) scriptUrl = runtime.runtime.getURL("/");', - 'else throw new Error("Automatic publicPath is not supported in this browser");' - ]), - '}', - 'scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\\?.*$/, "").replace(/\\/[^\\/]+$/, "/");', - !undoPath - ? `${RuntimeGlobals.publicPath} = scriptUrl;` - : `${RuntimeGlobals.publicPath} = scriptUrl + ${JSON.stringify(undoPath)};` - ]) } + + const undoPath = getUndoPath(chunkName, outputPath, false) + + return Template.asString([ + ...BrowserRuntime(acceptWeak), + 'var scriptUrl;', + scriptType === 'module' + ? `if (typeof ${importMetaName}.url === "string") scriptUrl = ${importMetaName}.url` + : Template.asString([ + `if (${RuntimeGlobals.global}.importScripts) scriptUrl = ${RuntimeGlobals.global}.location + "";`, + `var document = ${RuntimeGlobals.global}.document;`, + 'if (!scriptUrl && document && document.currentScript) {', + Template.indent(`scriptUrl = document.currentScript.src`), + '}' + ]), + '// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration', + '// or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.', + 'if (!scriptUrl) {', + Template.indent([ + 'if (isChrome || isBrowser) scriptUrl = runtime.runtime.getURL("/");', + 'else throw new Error("Automatic publicPath is not supported in this browser");' + ]), + '}', + 'scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\\?.*$/, "").replace(/\\/[^\\/]+$/, "/");', + !undoPath + ? `${RuntimeGlobals.publicPath} = scriptUrl;` + : `${RuntimeGlobals.publicPath} = scriptUrl + ${JSON.stringify(undoPath)};` + ]) } - return new AutoPublicPathRuntimeModule() + return { + name: 'AutoPublicPathRuntimeModule', + generate + } } /** diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/ChunkLoaderFallback.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/ChunkLoaderFallback.ts index 05f39a3e..61ab3f55 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/ChunkLoaderFallback.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/ChunkLoaderFallback.ts @@ -1,16 +1,14 @@ -import {type rspack} from '@rspack/core' +import {rspack, Compilation} from '@rspack/core' -export function ChunkLoaderFallbackRuntimeModule(webpack: typeof rspack) { - const {RuntimeModule, Template} = webpack - class ChunkLoaderFallbackRuntimeModule extends RuntimeModule { - constructor() { - super('chunk loader fallback', RuntimeModule.STAGE_TRIGGER) - } - generate() { +export function ChunkLoaderFallbackRuntimeModule(rspackLib: typeof rspack) { + const {Template} = rspackLib + + return { + name: 'ChunkLoaderFallbackRuntimeModule', + generate(_compilation: Compilation) { return Template.getFunctionContent(runtime) } } - return new ChunkLoaderFallbackRuntimeModule() } var browser: any @@ -25,37 +23,44 @@ const runtime = function () { })() const runtime = isBrowser ? browser : chrome - runtime.runtime.onMessage.addListener((message, sender, sendResponse) => { - const cond = - message && - message.type === 'WTW_INJECT' && - sender && - sender.tab && - sender.tab.id != null - if (!cond) return - let file = message.file - try { - file = new URL(file).pathname - } catch {} - if (!file) return - - if (runtime.scripting) { - runtime.scripting - .executeScript({ - target: {tabId: sender.tab.id, frameIds: [sender.frameId]}, - files: [file] - }) - .then(sendResponse) - } else { - const details = {frameId: sender.frameId, file, matchAboutBlank: true} - - if (isBrowser) { - runtime.tabs.executeScript(sender.tab.id, details).then(sendResponse) + runtime.runtime.onMessage.addListener( + // @ts-expect-error + (message, sender, sendResponse) => { + const cond = + message && + message.type === 'WTW_INJECT' && + sender && + sender.tab && + sender.tab.id != null + if (!cond) return + + let file: string = message.file + + try { + // @ts-expect-error + file = new URL(file).pathname + } catch {} + + if (!file) return + + if (runtime.scripting) { + runtime.scripting + .executeScript({ + target: {tabId: sender.tab.id, frameIds: [sender.frameId]}, + files: [file] + }) + .then(sendResponse) } else { - runtime.tabs.executeScript(sender.tab.id, details, sendResponse) + const details = {frameId: sender.frameId, file, matchAboutBlank: true} + + if (isBrowser) { + runtime.tabs.executeScript(sender.tab.id, details).then(sendResponse) + } else { + runtime.tabs.executeScript(sender.tab.id, details, sendResponse) + } } - } - return true - }) + return true + } + ) } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/EagerlyLoadChunks.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/EagerlyLoadChunks.ts index 1f68e3b2..58a7e981 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/EagerlyLoadChunks.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/EagerlyLoadChunks.ts @@ -1,25 +1,50 @@ -import {type rspack} from '@rspack/core' +import {Compiler, Compilation, sources} from '@rspack/core' -export function createEagerlyLoadChunksRuntimeModule(webpack: typeof rspack) { - const {RuntimeGlobals, RuntimeModule, Template} = webpack +export class EagerlyLoadChunksPlugin { + private readonly chunks: (string | number | null)[] - class EagerlyLoadChunksRuntimeModule extends RuntimeModule { - constructor(chunks: (string | number | null)[]) { - super('eagerly load chunks', RuntimeModule.STAGE_TRIGGER) - this.chunks = chunks - } + constructor(chunks: (string | number | null)[]) { + this.chunks = chunks + } + + apply(compiler: Compiler) { + compiler.hooks.thisCompilation.tap( + 'EagerlyLoadChunksPlugin', + (compilation) => { + compilation.hooks.processAssets.tap( + { + name: 'EagerlyLoadChunksPlugin', + stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + for (const chunk of compilation.chunks) { + for (const group of chunk.groupsIterable) { + const chunkIds = group.chunks.map((c) => c.id) + const chunkLoadingCode = chunkIds + .filter((id) => this.chunks.includes(id || null)) + .map((id) => `__webpack_require__.e(${JSON.stringify(id)})`) + .join(';') - generate() { - return Template.asString( - this.chunks - .filter((x) => x !== null) - .map( - (x) => - `${RuntimeGlobals.ensureChunkHandlers}.i(${JSON.stringify(x)})` - ) - ) - } + const runtimeSource = new sources.RawSource(chunkLoadingCode) + + if (chunk.files.has('main.js')) { + compilation.updateAsset( + 'main.js', + (source) => new sources.ConcatSource(source, runtimeSource) + ) + } + } + } + } + ) + } + ) } - return EagerlyLoadChunksRuntimeModule + generate() { + return this.chunks + .filter((x) => x !== null) + .map((x) => `__webpack_require__.e(${JSON.stringify(x)})`) + .join(';') + } } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts index a9fb0f2d..974e1c46 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts @@ -1,140 +1,131 @@ -import {type rspack} from '@rspack/core' +import {rspack, Compilation, sources} from '@rspack/core' import BrowserRuntime from '../BrowserRuntime' // import() const DYNAMIC_IMPORT_LOADER = 'dynamicImportLoader' -// createElement('script') const DOM_LOADER = 'scriptLoader' -// importScripts const WORKER_LOADER = 'workerLoader' -// browser.runtime.sendMessage() const CLASSIC_LOADER = 'classicLoader' const CLASSIC_SUPPORT = '__send__' -// fallback choice when DYNAMIC_IMPORT_LOADER fails const FALLBACK_LOADER = 'fallbackLoader' -/** - * @returns {import('webpack').RuntimeModule} - */ export function LoadScriptRuntimeModule( - webpack: typeof rspack, + rspackLib: typeof rspack, supportDynamicImport: boolean | undefined, classicLoaderEnabled: boolean | undefined, acceptWeak: boolean ) { - const {Template, RuntimeGlobals, RuntimeModule} = webpack + const {Template, RuntimeGlobals} = rspackLib - class LoadScriptRuntimeModule extends RuntimeModule { - constructor() { - super('load script') - this.supportDynamicImport = Boolean(supportDynamicImport) - this.classicLoaderEnabled = Boolean(classicLoaderEnabled) - } + const dynamicImportLoader = Template.asString([ + `var ${DYNAMIC_IMPORT_LOADER} = function(url, done, key, chunkId) {`, + Template.indent([ + `import(url).then(function() {`, + Template.indent([ + `if (isNotIframe) return done();`, + `try {`, + Template.indent([ + `chunkId !== undefined && ${RuntimeGlobals.ensureChunkHandlers}.j(chunkId);`, + `done();` + ]), + `} catch (err) {`, + Template.indent([ + `if (!bug816121warned) {`, + Template.indent([ + 'console.warn("Chrome bug https://crbug.com/816121 hit.");', + 'bug816121warned = true;' + ]), + `}`, + `${FALLBACK_LOADER}(url, done, key, chunkId);` + ]), + `}` + ]), + `}, function(e) {`, + Template.indent([ + `console.warn('Dynamic import loader failed. Using fallback loader.', e);`, + `${FALLBACK_LOADER}(url, done, key, chunkId);` + ]), + `});` + ]), + `};` + ]) - f(args: string, body: string[]) { - if (!this.compilation) throw new TypeError('No compilation is found.') - return this.compilation.runtimeTemplate.basicFunction(args, body) - } + const domLoader = Template.asString([ + `var ${DOM_LOADER} = function(url, done) {`, + Template.indent([ + `var script = document.createElement('script');`, + `script.src = url;`, + `script.onload = done;`, + `script.onerror = done;`, + `document.body.appendChild(script);` + ]), + `};` + ]) - generate() { - const DynamicImportLoader = - `var ${DYNAMIC_IMPORT_LOADER} = ` + - this.f('url, done, key, chunkId', [ - `import(url).then(${this.f('', [ - `if (isNotIframe) return done()`, - `try {`, - Template.indent([ - `// It's a Chrome bug, if the import() is called in a sandboxed iframe, it _fails_ the script loading but _resolve_ the Promise.`, - `// we call ${RuntimeGlobals.ensureChunkHandlers}.j(chunkId) to check if it is loaded.`, - `// if it is, this is a no-op. if it is not, it will throw a TypeError because this function requires 2 parameters.`, - `// This call will not trigger the chunk loading because it is already loading.`, - `// see https://github.com/awesome-webextension/webpack-target-webextension/issues/41`, - `chunkId !== undefined && ${RuntimeGlobals.ensureChunkHandlers}.j(chunkId)`, - `done()` - ]), - `}`, - `catch {`, - Template.indent([ - `if (!bug816121warned) {`, - Template.indent([ - 'console.warn("Chrome bug https://crbug.com/816121 hit.")', - 'bug816121warned = true' - ]), - `}`, - `return ${FALLBACK_LOADER}(url, done, key, chunkId)` - ]), - `}` - ])}, ${this.f('e', [ - `console.warn('Dynamic import loader failed. Using fallback loader (see https://github.com/awesome-webextension/webpack-target-webextension#content-script).', e)`, - `${FALLBACK_LOADER}(url, done, key, chunkId)` - ])})` - ]) - const DOMLoader = - `var ${DOM_LOADER} = ` + - this.f('url, done', [ - `var script = document.createElement('script')`, - `script.src = url`, - `script.onload = done`, - `script.onerror = done`, - `document.body.appendChild(script)` - ]) - const WorkerLoader = - `var ${WORKER_LOADER} = ` + - this.f('url, done', [ - `try { importScripts(url); done() } catch (e) { done(e) }` - ]) - const ClassicLoader = - `var ${CLASSIC_LOADER} = ` + - this.f('url, done', [ - `${CLASSIC_SUPPORT}({ type: 'WTW_INJECT', file: url }).then(done, (e) => done(Object.assign(e, { type: 'missing' })))` - ]) - const ClassicLoaderSupport = - `var ${CLASSIC_SUPPORT} = ` + - this.f('msg', [ - `if (isBrowser) return runtime.runtime.sendMessage(msg)`, - `return new Promise(r => runtime.runtime.sendMessage(msg, r))` - ]) - const ClassicLoaderDisabled = - `var ${CLASSIC_LOADER} = ` + - this.f('', [ - 'throw new Error("No loader for content script is found. You must set output.environment.dynamicImport to enable ES Module loader, or specify the background entry in your webpack config to enable the classic loader.")' - ]) - return Template.asString( - [ - ...BrowserRuntime(acceptWeak), + const workerLoader = Template.asString([ + `var ${WORKER_LOADER} = function(url, done) {`, + Template.indent([ + `try { importScripts(url); done(); } catch (e) { done(e); }` + ]), + `};` + ]) - this.supportDynamicImport - ? `var bug816121warned, isNotIframe` - : undefined, - this.supportDynamicImport - ? `try { isNotIframe = typeof window === "object" ? window.top === window : true } catch(e) { isInIframe = false /* CORS error */ }` - : undefined, + const classicLoaderSupport = Template.asString([ + `var ${CLASSIC_SUPPORT} = function(msg) {`, + Template.indent([ + `if (isBrowser) return runtime.runtime.sendMessage(msg);`, + `return new Promise(function(r) { runtime.runtime.sendMessage(msg, r); });` + ]), + `};` + ]) - this.classicLoaderEnabled ? ClassicLoaderSupport : '', - this.classicLoaderEnabled ? ClassicLoader : ClassicLoaderDisabled, + const classicLoader = Template.asString([ + `var ${CLASSIC_LOADER} = function(url, done) {`, + Template.indent([ + `${CLASSIC_SUPPORT}({ type: 'WTW_INJECT', file: url }).then(done, function(e) { done(Object.assign(e, { type: 'missing' })); });` + ]), + `};` + ]) - this.supportDynamicImport ? DynamicImportLoader : '', + const classicLoaderDisabled = Template.asString([ + `var ${CLASSIC_LOADER} = function() {`, + Template.indent([ + 'throw new Error("No loader for content script is found. Enable ES Module loader or specify the background entry in your config.");' + ]), + `};` + ]) - DOMLoader, - WorkerLoader, + const fallbackLoader = Template.asString([ + `var ${FALLBACK_LOADER} = ${RuntimeGlobals.loadScript};` + ]) - `var isWorker = typeof importScripts === 'function'`, - // extension page - `if (typeof location === 'object' && location.protocol.includes('-extension:')) ${RuntimeGlobals.loadScript} = isWorker ? ${WORKER_LOADER} : ${DOM_LOADER}`, - // content script - `else if (!isWorker) ${RuntimeGlobals.loadScript} = ${CLASSIC_LOADER}`, - // worker in content script - `else { throw new TypeError('Unable to determinate the chunk loader: content script + Worker') }`, + const scriptSetup = Template.asString([ + supportDynamicImport ? `var bug816121warned, isNotIframe;` : '', + supportDynamicImport + ? `try { isNotIframe = typeof window === "object" ? window.top === window : true; } catch(e) { isNotIframe = false; }` + : '', + classicLoaderEnabled ? classicLoaderSupport : '', + classicLoaderEnabled ? classicLoader : classicLoaderDisabled, + supportDynamicImport ? dynamicImportLoader : '', + domLoader, + workerLoader, + `var isWorker = typeof importScripts === 'function';`, + `if (typeof location === 'object' && location.protocol.includes('-extension:')) {`, + Template.indent([ + `${RuntimeGlobals.loadScript} = isWorker ? ${WORKER_LOADER} : ${DOM_LOADER};` + ]), + `} else if (!isWorker) {`, + Template.indent([`${RuntimeGlobals.loadScript} = ${CLASSIC_LOADER};`]), + `} else {`, + Template.indent([ + `throw new TypeError('Unable to determine the chunk loader: content script + Worker');` + ]), + `}`, + supportDynamicImport ? fallbackLoader : '', + supportDynamicImport + ? `${RuntimeGlobals.loadScript} = ${DYNAMIC_IMPORT_LOADER};` + : '' + ]) - this.supportDynamicImport - ? `var ${FALLBACK_LOADER} = ${RuntimeGlobals.loadScript}` - : '', - this.supportDynamicImport - ? `${RuntimeGlobals.loadScript} = ${DYNAMIC_IMPORT_LOADER}` - : '' - ].filter(Boolean) - ) - } - } - return new LoadScriptRuntimeModule() + return new sources.RawSource(scriptSetup) } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts index 0f51f6d4..a4015c74 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts @@ -1,36 +1,33 @@ -import {type rspack} from '@rspack/core' +import {rspack, Compilation, sources} from '@rspack/core' import BrowserRuntime from '../BrowserRuntime' export function PublicPathRuntimeModule( - webpack: typeof rspack, + rspackLib: typeof rspack, acceptWeak: boolean ) { - const {RuntimeGlobals, RuntimeModule, Template} = webpack + const {RuntimeGlobals, Template} = rspackLib - class PublicPathRuntimeModule extends RuntimeModule { - constructor() { - super('publicPath', RuntimeModule.STAGE_BASIC) + function generate(compilation: Compilation) { + if (!compilation) { + return Template.asString( + '/* [webpack-target-webextension] PublicPathRuntimeModule skipped because no compilation is found. */' + ) } + const {publicPath} = compilation.outputOptions - generate() { - const {compilation} = this - if (!compilation) - return Template.asString( - '/* [webpack-target-webextension] PublicPathRuntimeModule skipped because no compilation is found. */' - ) - const {publicPath} = compilation.outputOptions - - return Template.asString([ - ...BrowserRuntime(acceptWeak), - `var path = ${JSON.stringify( - compilation.getPath(publicPath || '', { - hash: compilation.hash || 'XXXX' - }) - )}`, - `${RuntimeGlobals.publicPath} = typeof importScripts === 'function' || !(isBrowser || isChrome) ? path : runtime.runtime.getURL(path);` - ]) - } + return Template.asString([ + ...BrowserRuntime(acceptWeak), + `var path = ${JSON.stringify( + compilation.getPath(publicPath || '', { + hash: compilation.hash || 'XXXX' + }) + )}`, + `${RuntimeGlobals.publicPath} = typeof importScripts === 'function' || !(isBrowser || isChrome) ? path : runtime.runtime.getURL(path);` + ]) } - return new PublicPathRuntimeModule() + return { + name: 'PublicPathRuntimeModule', + generate + } } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts index 1c9c2e6b..46524b0e 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts @@ -1,5 +1,5 @@ -import {Compiler} from '@rspack/core' -import {createEagerlyLoadChunksRuntimeModule} from './RuntimeModules/EagerlyLoadChunks' +import {Compiler, Compilation, Chunk, ChunkGroup, sources} from '@rspack/core' +import {EagerlyLoadChunksPlugin} from './RuntimeModules/EagerlyLoadChunks' import {BackgroundOptions} from './types' export class ServiceWorkerEntryPlugin { @@ -12,94 +12,92 @@ export class ServiceWorkerEntryPlugin { } apply(compiler: Compiler) { - const hook = compiler.hooks.entryOption - // Set chunkLoading to import-scripts - // @ts-ignore DO NOT add return boolean to this function, this is a BailHook and we don't want to bail. - hook.tap(ServiceWorkerEntryPlugin.name, (context, entries) => { - if (typeof entries === 'function') { - if (this.options.noWarningDynamicEntry) return - - console.warn( - '[webpack-extension-target] Dynamic entry points not supported yet.\n' + - 'You must manually set the chuck loading of entry point ${this.entry} to "import-scripts".\n\n' + - 'See https://webpack.js.org/configuration/entry-context/#entry-descriptor\n\n' + - 'Set background.noWarningDynamicEntry to true to disable this warning.' - ) - } + compiler.hooks.entryOption.tap( + ServiceWorkerEntryPlugin.name, + (context, entries) => { + if (typeof entries === 'function') { + if (this.options.noWarningDynamicEntry) return + + console.warn( + `[rspack-extension-target] Dynamic entry points not supported yet.\n` + + `You must manually set the chunk loading of entry point ${this.entry} to "import-scripts".\n\n` + + `Set background.noWarningDynamicEntry to true to disable this warning.` + ) + } - const selectedEntry = entries[this.entry] + // @ts-expect-error entries is an object + const selectedEntry = entries[this.entry] - if (!selectedEntry) - throw new Error( - `[webpack-extension-target] There is no entry called ${this.entry}.` - ) + if (!selectedEntry) { + throw new Error( + `[rspack-extension-target] There is no entry called ${this.entry}.` + ) + } - selectedEntry.chunkLoading = 'import-scripts' - }) + selectedEntry.chunkLoading = 'import-scripts' + } + ) - // Set all lazy chunks to eagerly loaded - // See https://bugs.chromium.org/p/chromium/issues/detail?id=1198822 if (this.options.eagerChunkLoading !== false) { compiler.hooks.compilation.tap( ServiceWorkerEntryPlugin.name, - (compilation) => { - compilation.hooks.afterOptimizeChunkIds.tap( + (compilation: Compilation) => { + compilation.hooks.optimizeChunkModules.tap( ServiceWorkerEntryPlugin.name, - () => { + (chunks, chunkGraph) => { const entryPoint = compilation.entrypoints.get(this.entry) if (!entryPoint) return - const entryChunk = entryPoint.getEntrypointChunk() - const children = entryPoint.getChildren() - - /** @typedef {typeof children[0]} ChunkGroup */ - /** @type {Set} */ - const visitedChunkGroups = new Set() - - /** @type {Set} */ - const reachableChunks = new Set(entryPoint.chunks) - collectAllChildren(entryPoint) - - const reachableChunkIds = new Set( - [...reachableChunks].map((x) => x.id) - ) + const entryChunk = Array.from(entryPoint.chunks)[0] + const reachableChunkIds = new Set([ + ...entryChunk.ids + ]) for (const id of getInitialChunkIds( entryChunk, - compilation.chunkGraph, + compilation, chunkHasJs )) { reachableChunkIds.delete(id) } if (reachableChunkIds.size) { - const EagerlyLoadChunksRuntimeModule = - createEagerlyLoadChunksRuntimeModule(compiler.webpack) - - compilation.hooks.additionalTreeRuntimeRequirements.tap( - EagerlyLoadChunksRuntimeModule.name, - (chunk, set) => { - if (chunk.id !== entryChunk.id) return - set.add(compiler.webpack.RuntimeGlobals.ensureChunkHandlers) - compilation.addRuntimeModule( - entryChunk, - new EagerlyLoadChunksRuntimeModule([...reachableChunkIds]) + compilation.hooks.processAssets.tap( + { + name: ServiceWorkerEntryPlugin.name, + stage: Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL + }, + () => { + const eagerlyLoadChunksModule = new EagerlyLoadChunksPlugin( + Array.from(reachableChunkIds) + ) + const moduleSource = new sources.RawSource( + eagerlyLoadChunksModule.generate() ) + + const files = [...entryChunk.files] + compilation.updateAsset(files[0], moduleSource) } ) } - /** @param {ChunkGroup} chunkGroup */ - function collectAllChildren(chunkGroup) { - for (const x of chunkGroup.getChildren()) { - if (visitedChunkGroups.has(x)) continue - else { - visitedChunkGroups.add(x) - x.chunks.forEach((x) => reachableChunks.add(x)) - collectAllChildren(x) + function collectAllChildren(chunkGroup: ChunkGroup) { + chunkGroup.chunks.forEach((chunk) => { + if (!visitedChunkGroups.has(chunkGroup)) { + visitedChunkGroups.add(chunkGroup) + reachableChunks.add(chunk) + + // Iterate over each child group (parent group in this case) + for (const parentGroup of chunkGroup.getParents()) { + collectAllChildren(parentGroup) + } } - } + }) } + + const visitedChunkGroups = new Set() + const reachableChunks = new Set(entryPoint.chunks) + collectAllChildren(entryPoint) } ) } @@ -108,29 +106,33 @@ export class ServiceWorkerEntryPlugin { } } -// webpack/lib/javascript/StartupHelpers.js -/** - * @param {import('webpack').Chunk} chunk the chunk - * @param {import('webpack').ChunkGraph} chunkGraph the chunk graph - * @param {function(import('webpack').Chunk, import('webpack').ChunkGraph): boolean} filterFn filter function - * @returns {Set} initially fulfilled chunk ids - */ -function getInitialChunkIds(chunk, chunkGraph, filterFn) { - const initialChunkIds = new Set(chunk.ids) - for (const c of chunk.getAllInitialChunks()) { - if (c === chunk || filterFn(c, chunkGraph)) continue - for (const id of c.ids) initialChunkIds.add(id) +// Helper functions +function chunkHasJs(chunk: Chunk, compilation: Compilation): boolean { + for (const file of chunk.files) { + if (file.endsWith('.js')) { + return true + } } - return initialChunkIds + return false } -// webpack/lib/javascript/JavascriptModulesPlugin.js -/** - * @param {import('webpack').Chunk} chunk a chunk - * @param {import('webpack').ChunkGraph} chunkGraph the chunk graph - * @returns {boolean} true, when a JS file is needed for this chunk - */ -function chunkHasJs(chunk, chunkGraph) { - if (chunkGraph.getNumberOfEntryModules(chunk) > 0) return true - return !!chunkGraph.getChunkModulesIterableBySourceType(chunk, 'javascript') +// Function to get the initial chunk IDs +function getInitialChunkIds( + chunk: Chunk, + compilation: Compilation, + filterFn: (chunk: Chunk, compilation: Compilation) => boolean +): Set { + const initialChunkIds = new Set(chunk.ids) + + for (const chunkGroup of compilation.chunkGroups) { + if (chunkGroup.chunks.includes(chunk) || filterFn(chunk, compilation)) { + continue + } + + for (const id of chunkGroup.chunks.flatMap((c) => c.ids)) { + initialChunkIds.add(id) + } + } + + return initialChunkIds } From 1b2b639000eebe6d29fd2868352100b70fd78d07 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Sat, 24 Aug 2024 14:12:37 -0300 Subject: [PATCH 14/18] Update reload client plugins --- .../plugin-reload/steps/setup-firefox-reload-client/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts index a8f4336f..2b300f35 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts @@ -1,5 +1,6 @@ import path from 'path' import {type Compiler} from '@rspack/core' +import { DevOptions } from '../../../../module' export function SetupFirefoxReloadClient( compiler: Compiler, From 4d07ebdf2fbce86f20de0022f3daa521a84c8f3b Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Sat, 24 Aug 2024 14:12:51 -0300 Subject: [PATCH 15/18] Remove webpack-target-webextension dependency --- programs/develop/package.json | 3 +-- yarn.lock | 5 ----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/programs/develop/package.json b/programs/develop/package.json index 25ad7d9d..fe70c585 100644 --- a/programs/develop/package.json +++ b/programs/develop/package.json @@ -70,8 +70,7 @@ "tiny-glob": "^0.2.9", "vue-template-compiler": "^2.7.16", "webextension-polyfill": "^0.12.0", - "webpack-merge": "^6.0.1", - "webpack-target-webextension": "^1.1.2" + "webpack-merge": "^6.0.1" }, "devDependencies": { "@types/adm-zip": "^0.5.5", diff --git a/yarn.lock b/yarn.lock index 23b9e228..0a5f69d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8520,11 +8520,6 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack-target-webextension@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/webpack-target-webextension/-/webpack-target-webextension-1.1.2.tgz#3966d69f754e7e270e253383314e48e2fbfab056" - integrity sha512-/BwCTlnkq4BmY4pD3HV2tLZVTMJhM+YslbJFi8Yl4GL8FsPsHvg0jcDs/XGtHwm59A9oK3Oiaz+0y1nJNZESrg== - webpack@^5: version "5.94.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f" From 17a15cde399dc094b05a6c1b2feb8f1566932ab3 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Tue, 27 Aug 2024 15:33:34 -0300 Subject: [PATCH 16/18] Add missing SWC helpers --- programs/develop/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/programs/develop/package.json b/programs/develop/package.json index fe70c585..e00af4a9 100644 --- a/programs/develop/package.json +++ b/programs/develop/package.json @@ -34,6 +34,7 @@ "@rspack/cli": "^1.0.0-beta.5", "@rspack/core": "^1.0.0-beta.5", "@swc/core": "^1.7.3", + "@swc/helpers": "^0.5.12", "@types/firefox-webext-browser": "^120.0.4", "acorn": "^8.12.1", "acorn-walk": "^8.3.3", From 24fe28492e77b6b740e5233c3c1c7b5903ffefc1 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Tue, 27 Aug 2024 15:56:44 -0300 Subject: [PATCH 17/18] Fix types --- programs/develop/webpack/dev-server.ts | 6 ++++- .../steps/add-dependencies.ts | 2 +- .../feature-web-resources/index.ts | 2 +- .../setup-firefox-reload-client/index.ts | 2 +- .../steps/setup-reload-strategy/index.ts | 8 +++--- .../target-web-extension-plugin/index.ts | 24 ++++++++--------- .../rspack-target-webextension/ChunkLoader.ts | 2 +- .../HMRDevServer.ts | 27 +++++++++++-------- .../RuntimeModules/LoadScript.ts | 5 ++-- .../RuntimeModules/PublicPath.ts | 2 +- .../ServiceWorkerPlugin.ts | 6 ++--- 11 files changed, 47 insertions(+), 39 deletions(-) diff --git a/programs/develop/webpack/dev-server.ts b/programs/develop/webpack/dev-server.ts index decdda8a..4dfb0381 100644 --- a/programs/develop/webpack/dev-server.ts +++ b/programs/develop/webpack/dev-server.ts @@ -41,7 +41,11 @@ export async function devServer( const serverConfig: Configuration = { host: '127.0.0.1', allowedHosts: 'all', - static: path.join(projectPath, 'public'), + static: { + watch: { + ignored: /\bnode_modules\b/ + } + }, compress: false, devMiddleware: { writeToDisk: true diff --git a/programs/develop/webpack/plugin-extension/feature-manifest/steps/add-dependencies.ts b/programs/develop/webpack/plugin-extension/feature-manifest/steps/add-dependencies.ts index bf2f207e..0ffeedd6 100644 --- a/programs/develop/webpack/plugin-extension/feature-manifest/steps/add-dependencies.ts +++ b/programs/develop/webpack/plugin-extension/feature-manifest/steps/add-dependencies.ts @@ -10,7 +10,7 @@ export class AddDependencies { apply(compiler: Compiler): void { compiler.hooks.afterCompile.tap( - 'ManifestPlugin (AddDependenciesPlugin)', + 'manifest:add-dependency', (compilation) => { if (compilation.errors?.length) return diff --git a/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts b/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts index e8218b82..bf08d3c2 100644 --- a/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts +++ b/programs/develop/webpack/plugin-extension/feature-web-resources/index.ts @@ -130,7 +130,7 @@ export class WebResourcesPlugin { chunkGraph.getChunkModulesIterable(chunk) ) - modules.forEach((module) => { + modules.forEach((_module) => { // Rspack does not provide `getModuleChunks` API. chunk.files.forEach((file) => { if (!importedFiles.includes(file)) { diff --git a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts index 2b300f35..ab80420d 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-firefox-reload-client/index.ts @@ -1,6 +1,6 @@ import path from 'path' import {type Compiler} from '@rspack/core' -import { DevOptions } from '../../../../module' +import {DevOptions} from '../../../../module' export function SetupFirefoxReloadClient( compiler: Compiler, diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts index 5544b98d..20725e6e 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/index.ts @@ -36,10 +36,10 @@ class SetupReloadStrategy { }).apply(compiler) // 3 - Add the HMR reloader to the entry point. - // new TargetWebExtensionPlugin({ - // manifestPath: this.manifestPath, - // browser: this.browser - // }).apply(compiler) + new TargetWebExtensionPlugin({ + manifestPath: this.manifestPath, + browser: this.browser + }).apply(compiler) } } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts index a3293327..bb622596 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.ts @@ -1,7 +1,7 @@ import fs from 'fs' import path from 'path' import {type Compiler} from '@rspack/core' -import {WebExtensionPlugin} from './rspack-target-webextension' +// import {WebExtensionPlugin} from './rspack-target-webextension' import {type PluginInterface} from '../../../reload-types' import {type Manifest} from '../../../../webpack-types' import {type DevOptions} from '../../../../../commands/dev' @@ -116,19 +116,19 @@ export class TargetWebExtensionPlugin { } } - private getEntryName(manifest: Manifest) { - if (manifest.background) { - if (manifest.manifest_version === 3) { - return {serviceWorkerEntry: 'background/service_worker'} - } + // private getEntryName(manifest: Manifest) { + // if (manifest.background) { + // if (manifest.manifest_version === 3) { + // return {serviceWorkerEntry: 'background/service_worker'} + // } - if (manifest.manifest_version === 2) { - return {pageEntry: 'background/script'} - } - } + // if (manifest.manifest_version === 2) { + // return {pageEntry: 'background/script'} + // } + // } - return {pageEntry: 'background'} - } + // return {pageEntry: 'background'} + // } public apply(compiler: Compiler) { if (!this.manifestPath || !fs.lstatSync(this.manifestPath).isFile()) { diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts index 132c09b7..a196d3c4 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ChunkLoader.ts @@ -15,7 +15,7 @@ export class ChuckLoaderRuntimePlugin { } apply(compiler: Compiler) { - const {RuntimeGlobals, Template} = compiler.webpack + const {RuntimeGlobals /*, Template */} = compiler.webpack const {options} = this compiler.hooks.compilation.tap( diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts index 1f99b5b6..870c7d25 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/HMRDevServer.ts @@ -1,14 +1,13 @@ -import {Compiler} from '@rspack/core' +import {Compiler, RspackOptionsNormalized} from '@rspack/core' -// @ts-check export class HMRDevServerPlugin { apply(compiler: Compiler) { - const options = compiler.options + const options = compiler.options as RspackOptionsNormalized if (!options.devServer) options.devServer = {} const devServer = options.devServer setDefault(devServer, 'devMiddleware', {}) - // Extensions cannot be loaded over network + // Extensions cannot be loaded over the network setDefault(devServer.devMiddleware!, 'writeToDisk', true) if (!devServer.hot) return @@ -22,13 +21,13 @@ export class HMRDevServerPlugin { } }) - const devServerClient = devServer.client! as Record - // Overlay doesn't work well in content script. + const devServerClient = devServer.client as Record + // Overlay doesn't work well in content scripts. setDefault(devServerClient, 'overlay', false) - // Progress is annoying in console. + // Progress is annoying in the console. setDefault(devServerClient, 'progress', false) // In content script loaded in https:// pages, it will try to use wss:// because of protocol detection. - setDefault(devServer!, 'webSocketServer', 'ws') + setDefault(devServerClient, 'webSocketTransport', 'ws') // HMR requires CORS requests in content scripts. setDefault(devServer, 'allowedHosts', 'all') @@ -44,10 +43,16 @@ export class HMRDevServerPlugin { } } -function setDefault(obj: Record, key: string | number, val: any) { - if (isObject(obj) && obj[key] === undefined) obj[key] = val +function setDefault( + obj: T, + key: K, + val: T[K] +) { + if (isObject(obj) && obj[key] === undefined) { + (obj as any)[key] = val + } } -function isObject(x: any): x is Record { +function isObject(x: unknown): x is Record { return typeof x === 'object' && x !== null } diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts index 974e1c46..4913e7c9 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/LoadScript.ts @@ -1,5 +1,4 @@ -import {rspack, Compilation, sources} from '@rspack/core' -import BrowserRuntime from '../BrowserRuntime' +import {rspack, sources} from '@rspack/core' // import() const DYNAMIC_IMPORT_LOADER = 'dynamicImportLoader' @@ -13,7 +12,7 @@ export function LoadScriptRuntimeModule( rspackLib: typeof rspack, supportDynamicImport: boolean | undefined, classicLoaderEnabled: boolean | undefined, - acceptWeak: boolean + _acceptWeak: boolean ) { const {Template, RuntimeGlobals} = rspackLib diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts index a4015c74..16653bd1 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/RuntimeModules/PublicPath.ts @@ -1,4 +1,4 @@ -import {rspack, Compilation, sources} from '@rspack/core' +import {rspack, Compilation} from '@rspack/core' import BrowserRuntime from '../BrowserRuntime' export function PublicPathRuntimeModule( diff --git a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts index 46524b0e..08c58f1a 100644 --- a/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts +++ b/programs/develop/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/rspack-target-webextension/ServiceWorkerPlugin.ts @@ -14,7 +14,7 @@ export class ServiceWorkerEntryPlugin { apply(compiler: Compiler) { compiler.hooks.entryOption.tap( ServiceWorkerEntryPlugin.name, - (context, entries) => { + (_context, entries) => { if (typeof entries === 'function') { if (this.options.noWarningDynamicEntry) return @@ -44,7 +44,7 @@ export class ServiceWorkerEntryPlugin { (compilation: Compilation) => { compilation.hooks.optimizeChunkModules.tap( ServiceWorkerEntryPlugin.name, - (chunks, chunkGraph) => { + () => { const entryPoint = compilation.entrypoints.get(this.entry) if (!entryPoint) return @@ -107,7 +107,7 @@ export class ServiceWorkerEntryPlugin { } // Helper functions -function chunkHasJs(chunk: Chunk, compilation: Compilation): boolean { +function chunkHasJs(chunk: Chunk): boolean { for (const file of chunk.files) { if (file.endsWith('.js')) { return true From 70aaee7c3d2163c876abfe72f7de7d71693c0af1 Mon Sep 17 00:00:00 2001 From: Cezar Augusto Date: Tue, 3 Sep 2024 19:32:04 -0300 Subject: [PATCH 18/18] Fix types after rebase --- .../commands/commands-lib/extract-from-zip.ts | 1 - programs/develop/package.json | 4 +- .../webpack/lib/__spec__/utils.spec.ts | 2 +- .../steps/add-public-path-for-main-world.ts | 4 +- .../feature-scripts/steps/add-scripts.ts | 4 +- yarn.lock | 1737 ++++++----------- 6 files changed, 558 insertions(+), 1194 deletions(-) diff --git a/programs/develop/commands/commands-lib/extract-from-zip.ts b/programs/develop/commands/commands-lib/extract-from-zip.ts index b4ad1e56..fea1ff12 100644 --- a/programs/develop/commands/commands-lib/extract-from-zip.ts +++ b/programs/develop/commands/commands-lib/extract-from-zip.ts @@ -1,4 +1,3 @@ -import fs from 'fs/promises' import path from 'path' import axios from 'axios' import AdmZip from 'adm-zip' diff --git a/programs/develop/package.json b/programs/develop/package.json index e00af4a9..bec2f320 100644 --- a/programs/develop/package.json +++ b/programs/develop/package.json @@ -31,8 +31,8 @@ }, "dependencies": { "@colors/colors": "^1.6.0", - "@rspack/cli": "^1.0.0-beta.5", - "@rspack/core": "^1.0.0-beta.5", + "@rspack/cli": "^1.0.1", + "@rspack/core": "^1.0.1", "@swc/core": "^1.7.3", "@swc/helpers": "^0.5.12", "@types/firefox-webext-browser": "^120.0.4", diff --git a/programs/develop/webpack/lib/__spec__/utils.spec.ts b/programs/develop/webpack/lib/__spec__/utils.spec.ts index 626d223f..35194484 100644 --- a/programs/develop/webpack/lib/__spec__/utils.spec.ts +++ b/programs/develop/webpack/lib/__spec__/utils.spec.ts @@ -1,6 +1,6 @@ import fs from 'fs' import path from 'path' -import {Compilation} from 'webpack' +import {Compilation} from '@rspack/core' import * as utils from '../utils' import {Manifest, FilepathList} from '../../webpack-types' diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-for-main-world.ts b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-for-main-world.ts index 74f85991..16eebfdd 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-for-main-world.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-public-path-for-main-world.ts @@ -1,4 +1,4 @@ -import {type Compiler} from '@rspack/core' +import {Compiler} from '@rspack/core' import { type FilepathList, type PluginInterface, @@ -20,7 +20,7 @@ export class AddPublicPathForMainWorld { this.includeList = options.includeList || {} this.excludeList = options.excludeList || {} } - public apply(): void { + public apply(_compiler: Compiler): void { const manifest: Manifest = require(this.manifestPath) if ( manifest.content_scripts?.some( diff --git a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-scripts.ts b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-scripts.ts index 0db7883c..a15adcbd 100644 --- a/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-scripts.ts +++ b/programs/develop/webpack/plugin-extension/feature-scripts/steps/add-scripts.ts @@ -1,4 +1,4 @@ -import {type Compiler} from '@rspack/core' +import {type EntryObject, type Compiler} from '@rspack/core' import {type FilepathList, type PluginInterface} from '../../../webpack-types' import {getScriptEntries, getCssEntries} from '../scripts-lib/utils' @@ -17,7 +17,7 @@ export class AddScripts { public apply(compiler: Compiler): void { const scriptFields = this.includeList || {} - const newEntries: Record = {} + const newEntries: Record = {} for (const [feature, scriptPath] of Object.entries(scriptFields)) { const scriptImports = getScriptEntries(scriptPath, this.excludeList) diff --git a/yarn.lock b/yarn.lock index 0a5f69d3..d9703909 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,12 +23,12 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2", "@babel/compat-data@^7.25.4": +"@babel/compat-data@^7.25.2": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.24.9": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== @@ -59,22 +59,7 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" - integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" - integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": +"@babel/helper-compilation-targets@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== @@ -85,47 +70,6 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0", "@babel/helper-create-class-features-plugin@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz#57eaf1af38be4224a9d9dd01ddde05b741f50e14" - integrity sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/traverse" "^7.25.4" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7", "@babel/helper-create-regexp-features-plugin@^7.25.0", "@babel/helper-create-regexp-features-plugin@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" - integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-member-expression-to-functions@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" - integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== - dependencies: - "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.8" - "@babel/helper-module-imports@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" @@ -134,7 +78,7 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.0", "@babel/helper-module-transforms@^7.25.2": +"@babel/helper-module-transforms@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== @@ -144,36 +88,11 @@ "@babel/helper-validator-identifier" "^7.24.7" "@babel/traverse" "^7.25.2" -"@babel/helper-optimise-call-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" - integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== -"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" - integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-wrap-function" "^7.25.0" - "@babel/traverse" "^7.25.0" - -"@babel/helper-replace-supers@^7.24.7", "@babel/helper-replace-supers@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" - integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.24.8" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/traverse" "^7.25.0" - "@babel/helper-simple-access@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" @@ -182,14 +101,6 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-skip-transparent-expression-wrappers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" - integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - "@babel/helper-string-parser@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" @@ -200,20 +111,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== -"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": +"@babel/helper-validator-option@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== -"@babel/helper-wrap-function@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" - integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== - dependencies: - "@babel/template" "^7.25.0" - "@babel/traverse" "^7.25.0" - "@babel/types" "^7.25.0" - "@babel/helpers@^7.25.0": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" @@ -232,66 +134,13 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.6": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3", "@babel/parser@^7.25.6": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== dependencies: "@babel/types" "^7.25.6" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.3": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz#dca427b45a6c0f5c095a1c639dfe2476a3daba7f" - integrity sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.3" - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz#cd0c583e01369ef51676bdb3d7b603e17d2b3f73" - integrity sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz#749bde80356b295390954643de7635e0dffabe73" - integrity sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" - integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz#3a82a70e7cb7294ad2559465ebcb871dfbf078fb" - integrity sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.0" - -"@babel/plugin-proposal-decorators@^7.24.0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz#7e2dcfeda4a42596b57c4c9de1f5176bbfc532e3" - integrity sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-decorators" "^7.24.7" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -320,34 +169,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz#e4f8a0a8778ccec669611cd5aed1ed8e6e3a6fcf" - integrity sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.24.7": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz#bb918905c58711b86f9710d74a3744b6c56573b5" - integrity sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/plugin-syntax-import-attributes@^7.24.7": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz#6d4c78f042db0e82fd6436cd65fec5dc78ad2bde" @@ -369,7 +190,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.24.7", "@babel/plugin-syntax-jsx@^7.7.2": +"@babel/plugin-syntax-jsx@^7.7.2": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== @@ -432,592 +253,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": +"@babel/plugin-syntax-typescript@^7.7.2": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz#04db9ce5a9043d9c635e75ae7969a2cd50ca97ff" integrity sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" - integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-async-generator-functions@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz#2afd4e639e2d055776c9f091b6c0c180ed8cf083" - integrity sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-remap-async-to-generator" "^7.25.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/traverse" "^7.25.4" - -"@babel/plugin-transform-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" - integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" - -"@babel/plugin-transform-block-scoped-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" - integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-block-scoping@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" - integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-class-properties@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz#bae7dbfcdcc2e8667355cd1fb5eda298f05189fd" - integrity sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-class-static-block@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" - integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz#d29dbb6a72d79f359952ad0b66d88518d65ef89a" - integrity sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-replace-supers" "^7.25.0" - "@babel/traverse" "^7.25.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" - integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/template" "^7.24.7" - -"@babel/plugin-transform-destructuring@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" - integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-dotall-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" - integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-duplicate-keys@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" - integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz#809af7e3339466b49c034c683964ee8afb3e2604" - integrity sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-dynamic-import@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" - integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" - integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-export-namespace-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" - integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" - integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - -"@babel/plugin-transform-function-name@^7.25.1": - version "7.25.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" - integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== - dependencies: - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/traverse" "^7.25.1" - -"@babel/plugin-transform-json-strings@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" - integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.25.2": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" - integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-logical-assignment-operators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" - integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" - integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-modules-amd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" - integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-modules-commonjs@^7.24.7", "@babel/plugin-transform-modules-commonjs@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" - integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== - dependencies: - "@babel/helper-module-transforms" "^7.24.8" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-simple-access" "^7.24.7" - -"@babel/plugin-transform-modules-systemjs@^7.25.0": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz#8f46cdc5f9e5af74f3bd019485a6cbe59685ea33" - integrity sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw== - dependencies: - "@babel/helper-module-transforms" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-identifier" "^7.24.7" - "@babel/traverse" "^7.25.0" - -"@babel/plugin-transform-modules-umd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" - integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== - dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" - integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-new-target@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" - integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" - integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" - integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== - dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" - -"@babel/plugin-transform-object-super@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" - integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" - -"@babel/plugin-transform-optional-catch-binding@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" - integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" - integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" - integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-private-methods@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz#9bbefbe3649f470d681997e0b64a4b254d877242" - integrity sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.4" - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-private-property-in-object@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" - integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" - integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-react-display-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" - integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-react-jsx-development@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" - integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.24.7" - -"@babel/plugin-transform-react-jsx@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" - integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/types" "^7.25.2" - -"@babel/plugin-transform-react-pure-annotations@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" - integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-regenerator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" - integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" - integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-shorthand-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" - integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" - integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - -"@babel/plugin-transform-sticky-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" - integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-template-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" - integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-typeof-symbol@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" - integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/plugin-transform-typescript@^7.24.7": - version "7.25.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" - integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.25.0" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-typescript" "^7.24.7" - -"@babel/plugin-transform-unicode-escapes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" - integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-unicode-property-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" - integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-unicode-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" - integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - -"@babel/plugin-transform-unicode-sets-regex@^7.25.4": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz#be664c2a0697ffacd3423595d5edef6049e8946c" - integrity sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - -"@babel/preset-env@^7.24.0": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.25.4.tgz#be23043d43a34a2721cd0f676c7ba6f1481f6af6" - integrity sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw== - dependencies: - "@babel/compat-data" "^7.25.4" - "@babel/helper-compilation-targets" "^7.25.2" - "@babel/helper-plugin-utils" "^7.24.8" - "@babel/helper-validator-option" "^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.3" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.0" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.0" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.7" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.25.4" - "@babel/plugin-transform-async-to-generator" "^7.24.7" - "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.25.0" - "@babel/plugin-transform-class-properties" "^7.25.4" - "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.25.4" - "@babel/plugin-transform-computed-properties" "^7.24.7" - "@babel/plugin-transform-destructuring" "^7.24.8" - "@babel/plugin-transform-dotall-regex" "^7.24.7" - "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.0" - "@babel/plugin-transform-dynamic-import" "^7.24.7" - "@babel/plugin-transform-exponentiation-operator" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.24.7" - "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.25.1" - "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.25.2" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" - "@babel/plugin-transform-member-expression-literals" "^7.24.7" - "@babel/plugin-transform-modules-amd" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.8" - "@babel/plugin-transform-modules-systemjs" "^7.25.0" - "@babel/plugin-transform-modules-umd" "^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" - "@babel/plugin-transform-new-target" "^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" - "@babel/plugin-transform-numeric-separator" "^7.24.7" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-object-super" "^7.24.7" - "@babel/plugin-transform-optional-catch-binding" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.8" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.25.4" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-property-literals" "^7.24.7" - "@babel/plugin-transform-regenerator" "^7.24.7" - "@babel/plugin-transform-reserved-words" "^7.24.7" - "@babel/plugin-transform-shorthand-properties" "^7.24.7" - "@babel/plugin-transform-spread" "^7.24.7" - "@babel/plugin-transform-sticky-regex" "^7.24.7" - "@babel/plugin-transform-template-literals" "^7.24.7" - "@babel/plugin-transform-typeof-symbol" "^7.24.8" - "@babel/plugin-transform-unicode-escapes" "^7.24.7" - "@babel/plugin-transform-unicode-property-regex" "^7.24.7" - "@babel/plugin-transform-unicode-regex" "^7.24.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.4" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.6" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.37.1" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.23.3": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" - integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-transform-react-display-name" "^7.24.7" - "@babel/plugin-transform-react-jsx" "^7.24.7" - "@babel/plugin-transform-react-jsx-development" "^7.24.7" - "@babel/plugin-transform-react-pure-annotations" "^7.24.7" - -"@babel/preset-typescript@^7.23.3": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" - integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-typescript" "^7.24.7" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/runtime@^7.20.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.20.1", "@babel/runtime@^7.5.5": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3": +"@babel/template@^7.25.0", "@babel/template@^7.3.3": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== @@ -1026,7 +276,7 @@ "@babel/parser" "^7.25.0" "@babel/types" "^7.25.0" -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": +"@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== @@ -1039,7 +289,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.3.3": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== @@ -1053,6 +303,11 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@bufbuild/protobuf@^1.0.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.10.0.tgz#1a67ac889c2d464a3492b3e54c38f80517963b16" + integrity sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag== + "@changesets/apply-release-plan@^7.0.4": version "7.0.4" resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-7.0.4.tgz#f963e11848efa24c53abd10713662f2012b6082b" @@ -1604,6 +859,11 @@ resolved "https://registry.yarnpkg.com/@csstools/utilities/-/utilities-1.0.0.tgz#42f3c213f2fb929324d465684ab9f46a0febd4bb" integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg== +"@discoveryjs/json-ext@^0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + "@dual-bundle/import-meta-resolve@^4.1.0": version "4.1.0" resolved "https://registry.yarnpkg.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#519c1549b0e147759e7825701ecffd25e5819f7b" @@ -2100,6 +1360,34 @@ globby "^11.0.0" read-yaml-file "^1.1.0" +"@module-federation/runtime-tools@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@module-federation/runtime-tools/-/runtime-tools-0.5.1.tgz#1b1f93837159a6bf0c0ba78730d589a5a8f74aa3" + integrity sha512-nfBedkoZ3/SWyO0hnmaxuz0R0iGPSikHZOAZ0N/dVSQaIzlffUo35B5nlC2wgWIc0JdMZfkwkjZRrnuuDIJbzg== + dependencies: + "@module-federation/runtime" "0.5.1" + "@module-federation/webpack-bundler-runtime" "0.5.1" + +"@module-federation/runtime@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@module-federation/runtime/-/runtime-0.5.1.tgz#b548a75e2068952ff66ad717cbf73fc921edd5d7" + integrity sha512-xgiMUWwGLWDrvZc9JibuEbXIbhXg6z2oUkemogSvQ4LKvrl/n0kbqP1Blk669mXzyWbqtSp6PpvNdwaE1aN5xQ== + dependencies: + "@module-federation/sdk" "0.5.1" + +"@module-federation/sdk@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@module-federation/sdk/-/sdk-0.5.1.tgz#6c0a4053c23fa84db7aae7e4736496c541de7191" + integrity sha512-exvchtjNURJJkpqjQ3/opdbfeT2wPKvrbnGnyRkrwW5o3FH1LaST1tkiNviT6OXTexGaVc2DahbdniQHVtQ7pA== + +"@module-federation/webpack-bundler-runtime@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.5.1.tgz#ef626af0d57e3568c474d66d7d3797366e09cafd" + integrity sha512-mMhRFH0k2VjwHt3Jol9JkUsmI/4XlrAoBG3E0o7HoyoPYv1UFOWyqAflfANcUPgbYpvqmyLzDcO+3IT36LXnrA== + dependencies: + "@module-federation/runtime" "0.5.1" + "@module-federation/sdk" "0.5.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2126,20 +1414,12 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@pmmmwh/react-refresh-webpack-plugin@^0.5.15": - version "0.5.15" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz#f126be97c30b83ed777e2aeabd518bc592e6e7c4" - integrity sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ== - dependencies: - ansi-html "^0.0.9" - core-js-pure "^3.23.3" - error-stack-parser "^2.0.6" - html-entities "^2.1.0" - loader-utils "^2.0.4" - schema-utils "^4.2.0" - source-map "^0.7.3" +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.25" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" + integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== -"@prefresh/core@^1.5.0": +"@prefresh/core@^1.5.0", "@prefresh/core@^1.5.2": version "1.5.2" resolved "https://registry.yarnpkg.com/@prefresh/core/-/core-1.5.2.tgz#750e1936d82f3b0a1199d3cda5c35e3443128490" integrity sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA== @@ -2237,6 +1517,123 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz#e4291e3c1bc637083f87936c333cdbcad22af63b" integrity sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA== +"@rspack/binding-darwin-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.0.1.tgz#c09eedca2e0de205d6192f78f76645f95ee115fa" + integrity sha512-oJ4ex0USLoOR5nFt0uQFinG6bDCSbCqwobepjA0qk33kuXdJyJw5LAwDW0Mfw3up+/ngEhySOZtQIv6PDeSFqQ== + +"@rspack/binding-darwin-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.0.1.tgz#0a5c97b63c2c77f13e772c731ef9bf9e26f32274" + integrity sha512-v5rfOUVGIQ25WAOSbzBHv42Qsz/DaC7bqjc7mEb1jO8a4Y9y0fO7Nw2/bgLRg1di2y+Q2M9CBgPf9TDt8T1jOg== + +"@rspack/binding-linux-arm64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.1.tgz#c7ed28d070f02bcd2c166e73e0054dfa8e25d6b9" + integrity sha512-kCh94gOTms2N9A9oAaVpxqOn6l9Lr/oWGSQS9Zc4f0cyHmThYYMyPX76kLdL1WR/UpzrihQ3L9RfMU1FHMfjow== + +"@rspack/binding-linux-arm64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.1.tgz#2a233830a2694e6b1e396abaf7e7182f2d17dc29" + integrity sha512-GCp5TxYSESzstqoZKBR0dFm8bh1F9aWsVnypcKndE3PCEPsptGwWvGZKl2QLZm87d/FL21eysAjFX4KQ1NNy+Q== + +"@rspack/binding-linux-x64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.1.tgz#f52196769e1e31653a0feef1e11a3686e310d857" + integrity sha512-kvwDRsXHp9HRWRqSqsFn+tEk8Uc2wPuGPzHo6pHaEKUu8S5czQmPuF5W0UtK7OluR+eec/6RfCy18WclGQx8Vg== + +"@rspack/binding-linux-x64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.1.tgz#366004fb42e4ae108390faade29a95cffd051878" + integrity sha512-Di64N+wOxiWFH5xTg8NJpPGe2Syv/wkHYlA8mVo6nPvfTIPdyzybrjYl7TX9YHUnCXPKSIaEVuQM3FppuSvK1w== + +"@rspack/binding-win32-arm64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.1.tgz#b1e825bcfdb4a855f7d2752c031970b45f69e40d" + integrity sha512-UChXLKqND90LwBjoPZgD9P9ZYKmp9+y51n7kgNtDX2Hi/wsnFOZHUK2kpiSH9W69vE+c3pGFf0NIJ/scLdeUZw== + +"@rspack/binding-win32-ia32-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.1.tgz#7cedb99c0c02ca8651ae9c0b7bf1d0353f03124d" + integrity sha512-at+/S2t5yaADOV8s27S1nSsQc1Y5BxAb/y9lRvxKJJgshewsoOTNMQ1PFcy8pNDOF4Dvn/xiiCctqpZUjrT+jw== + +"@rspack/binding-win32-x64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.1.tgz#e43056670304b7ae002ae5c620c27ddd681591e6" + integrity sha512-PpKDYqFSUypbATkSx7N0j521T6shYjiOEl44VI+99AkZVt7gQnS/LWXWrRYuZrueO2klPm+LUBACBJUKPWNYNg== + +"@rspack/binding@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/binding/-/binding-1.0.1.tgz#fd571b4ed90a05c54b28b87faf51de2b142d7bee" + integrity sha512-bf5uTyen6Y1NYbHERA3oLX/IGx6T9C2PyKH+cia9Ik5A4hUwkOYamIAQIIC29VEPs06W1DccPLmGRZd3gjA7pA== + optionalDependencies: + "@rspack/binding-darwin-arm64" "1.0.1" + "@rspack/binding-darwin-x64" "1.0.1" + "@rspack/binding-linux-arm64-gnu" "1.0.1" + "@rspack/binding-linux-arm64-musl" "1.0.1" + "@rspack/binding-linux-x64-gnu" "1.0.1" + "@rspack/binding-linux-x64-musl" "1.0.1" + "@rspack/binding-win32-arm64-msvc" "1.0.1" + "@rspack/binding-win32-ia32-msvc" "1.0.1" + "@rspack/binding-win32-x64-msvc" "1.0.1" + +"@rspack/cli@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/cli/-/cli-1.0.1.tgz#9b8bed9fdea7790c441c7ea878298d2aac9ca545" + integrity sha512-yW+U2W6kV0BYFSvXxjxRD+gbHVn+pR/zmJjWw78d3JtKcfroVkNNB+EGoPXhZuaoe+tG68WC55xN171xmzuP/A== + dependencies: + "@discoveryjs/json-ext" "^0.5.7" + "@rspack/dev-server" "1.0.1" + colorette "2.0.19" + exit-hook "^3.2.0" + interpret "^3.1.1" + rechoir "^0.8.0" + semver "^7.6.2" + webpack-bundle-analyzer "4.6.1" + yargs "17.6.2" + +"@rspack/core@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/core/-/core-1.0.1.tgz#b3709a1ef13365c4ac9fe8e346932cdd270c07da" + integrity sha512-z09J/6oJA5y7iclPe+4INg13J5OEWgBw6PdGAOExdcj0DvCicbTGR7QVx1vSrMRbi8oxWk10J3nosOs0zf1bRQ== + dependencies: + "@module-federation/runtime-tools" "0.5.1" + "@rspack/binding" "1.0.1" + "@rspack/lite-tapable" "1.0.0" + caniuse-lite "^1.0.30001616" + +"@rspack/dev-server@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@rspack/dev-server/-/dev-server-1.0.1.tgz#7f6ae24f624d6eb2bc9c25da6c4deb04346c15db" + integrity sha512-cRjTlp2/2c4/BM+B8wN4lhSrvXpVsHFIGe0ZqFfWmtyX/7jNG7A11M9GTJWWr6P0AERqpkFN4MTJRqbqIGZdJA== + dependencies: + chokidar "^3.6.0" + connect-history-api-fallback "^2.0.0" + express "^4.19.2" + http-proxy-middleware "^2.0.6" + mime-types "^2.1.35" + webpack-dev-middleware "^7.4.2" + webpack-dev-server "^5.0.4" + ws "^8.16.0" + +"@rspack/lite-tapable@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@rspack/lite-tapable/-/lite-tapable-1.0.0.tgz#160883693462f164d0e6ede22f32614673ef6429" + integrity sha512-7MZf4lburSUZoEenwazwUDKHhqyfnLCGnQ/tKcUtztfmVzfjZfRn/EaiT0AKkYGnL2U8AGsw89oUeVyvaOLVCw== + +"@rspack/plugin-preact-refresh@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@rspack/plugin-preact-refresh/-/plugin-preact-refresh-1.0.0.tgz#f52cc960c41a7c2f28e84c8249dc212ae45799e8" + integrity sha512-FCdZTM0Z5/Am8jgTLyOQA5IDSysQNw19u87mRVem8r9tgzaEiGUv9Q7IIRnpCqNwzofeh/I/Qx/SneS7UpLQeQ== + +"@rspack/plugin-react-refresh@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.0.0.tgz#7e0cc22b157d25131be4283667cdbb86960a3650" + integrity sha512-WvXkLewW5G0Mlo5H1b251yDh5FFiH4NDAbYlFpvFjcuXX2AchZRf9zdw57BDE/ADyWsJgA8kixN/zZWBTN3iYA== + dependencies: + error-stack-parser "^2.0.6" + html-entities "^2.1.0" + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -2256,80 +1653,87 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@swc/core-darwin-arm64@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.22.tgz#2ce216c4bb61627ff9689213e690ffc64ed02114" - integrity sha512-B2Bh2W+C7ALdGwDxRWAJ+UtNExfozvwyayGiNkbR3wmDKXXeQfhGM5MK+QYUWKu7UQ6ATq69OyZrxofDobKUug== - -"@swc/core-darwin-x64@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.7.22.tgz#78d028d72756193a1bedf3cc0766aede1b290878" - integrity sha512-s34UQntnQ6tL9hS9aX3xG7OfGhpmy05FEEndbHaooGO8O+L5k8uWxhE5KhYCOC0N803sGdZg6YZmKtYrWN/YxA== - -"@swc/core-linux-arm-gnueabihf@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.22.tgz#f95e45179e362dd5cfc3c9b8083af33e430195d9" - integrity sha512-SE69+oos1jLOXx5YdMH//Qc5zQc2xYukajB+0BWmkcFd/S/cCanGWYtdSzYausm8af2Fw1hPJMNIfndJLnBDFw== - -"@swc/core-linux-arm64-gnu@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.22.tgz#8058a7c18385cadf56ca7d2db4d6fa41e52f4bd3" - integrity sha512-59FzDW/ojgiTj4dlnv3Z3ESuVlzhSAq9X12CNYh4/WTCNA8BoJqOnWMRQKspWtoNlnVviFLMvpek0pGXHndEBA== - -"@swc/core-linux-arm64-musl@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.22.tgz#8d29b9574ad3ff615fcba85b6e661d510f48186e" - integrity sha512-cMQMI8YRO/XR3OrYuiUlWksNsJOZSkA6gSLNyH6eHTw+FOAzv05oJ4SFYe6s1WesrOqRwhpez6y5H6OIP/EKzg== - -"@swc/core-linux-x64-gnu@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.22.tgz#ad863612d32c00ec28b3dc3fc1a8418ca9c94f2b" - integrity sha512-639kA7MXrWqWYfwuSJ+XTg21VYb/5o99R1zJrndoEjEX6m7Wza/sXssQKU5jbbkPoSEKVKNP3n/gazLWiUKgiQ== - -"@swc/core-linux-x64-musl@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.22.tgz#421740384a738631b1bbc6202eeb5489ed5e356b" - integrity sha512-f3zfGgY8EJQUOk3ve25ZTkNkhB/kHo9QlN2r+0exaE1g9W7X8IS6J8pWzF3hJrV2P9dBi6ofMOt+opVA89JKHA== - -"@swc/core-win32-arm64-msvc@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.22.tgz#ba62979f394faabe8a4c964e5590169269d8170c" - integrity sha512-p/Fav5U+LtTJD/tbbS0dKK8SVVAhXo5Jdm1TDeBPJ4BEIVguYBZEXgD3CW9wY4K34g1hscpiz2Q2rktfhFj1+A== - -"@swc/core-win32-ia32-msvc@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.22.tgz#7fe30501e853298a552c2bd89306cc41d15f95c8" - integrity sha512-HbmfasaCNTqeCTvDjleYj+jJZQ6MlraiVOdhW55KtbA9mAVQdPBq6DDAvR7VOero3wUNYUM/e36otFKgEJI5Rg== - -"@swc/core-win32-x64-msvc@1.7.22": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.22.tgz#8be5c1f89c61c0d6412093398274b3cbc1b4b52f" - integrity sha512-lppIveE+hpe7WXny/9cUT+T6sBM/ND0E+dviKWJ5jFBISj2KWomlSJGUjYEsRGJVPnTEc8uOlKK7etmXBhQx9A== +"@swc/core-darwin-arm64@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.23.tgz#4ba141f07ba9b90cfc153582cbd874ebb11542fb" + integrity sha512-yyOHPfti6yKlQulfVWMt7BVKst+SyEZYCWuQSGMn1KgmNCH/bYufRWfQXIhkGSj44ZkEepJmsJ8tDyIb4k5WyA== + +"@swc/core-darwin-x64@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.7.23.tgz#09083175361340066c51303e24577c2bfd20c445" + integrity sha512-GzqHwQ0Y1VyjdI/bBKFX2GKm5HD3PIB6OhuAQtWZMTtEr2yIrlT0YK2T+XKh7oIg31JwxGBeQdBk3KTI7DARmQ== + +"@swc/core-linux-arm-gnueabihf@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.23.tgz#6295056530c4620c868889099c26cb183ee99e3d" + integrity sha512-qwX4gB41OS6/OZkHcpTqLFGsdmvoZyffnJIlgB/kZKwH3lfeJWzv6vx57zXtNpM/t7GoQEe0VZUVdmNjxSxBZw== + +"@swc/core-linux-arm64-gnu@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.23.tgz#b25a298883bc3e71faebc485ce9c0ac49808f975" + integrity sha512-TsrbUZdMaUwzI7+g/8rHPLWbntMKYSu5Bn5IBSqVKPeyqaXxNnlIUnWXgXcUcRAc+T+Y8ADfr7EiFz9iz5DuSA== + +"@swc/core-linux-arm64-musl@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.23.tgz#4b528e5d3cdba87a6bca420e9d7fe388ae2e5e7f" + integrity sha512-JEdtwdthazKq4PBz53KSubwwK8MvqODAihGSAzc8u3Unq4ojcvaS8b0CwLBeD+kTQ78HpxOXTt3DsFIxpgaCAA== + +"@swc/core-linux-x64-gnu@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.23.tgz#eded88bbd3f8acde4375a016b858f6a93781d690" + integrity sha512-V51gFPWaVAHbI1yg9ahsoya3aB4uawye3SZ5uQWgcP7wdCdiv60dw4F5nuPJf5Z1oXD3U/BslXuamv8Oh9vXqQ== + +"@swc/core-linux-x64-musl@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.23.tgz#28c06eb3709c2a170ba8a6de5ea6aa8b30fc2c43" + integrity sha512-BBqQi4+UdeRqag3yM4IJjaHG4yc1o3l9ksENHToE0o/u2DT0FY5+K/DiYGZLC1JHbSFzNqRCYsa7DIzRtZ0A1A== + +"@swc/core-win32-arm64-msvc@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.23.tgz#f7242c9f623145e6475ff5687102a5386560e247" + integrity sha512-JPk6pvCKncL6bXG7p+NLZf8PWx4FakVvKNdwGeMrYunb+yk1IZf7qf9LJk8+GDGF5QviDXPs8opZrTrfsW80fA== + +"@swc/core-win32-ia32-msvc@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.23.tgz#619346c6a0c859b6a16dbbf6b89a6f48c7d148a6" + integrity sha512-2Whxi8d+bLQBzJcQ5qYPHlk02YYVGsMVav0fWk+FnX2z1QRREIu1L1xvrpi7gBpjXp6BIU40ya8GiKeekNT2bg== + +"@swc/core-win32-x64-msvc@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.23.tgz#fa7c87db0753e727cc1c167f6dc99ca55c9677df" + integrity sha512-82fARk4/yJ40kwWKY/gdKDisPdtgJE9jgpl/vkNG3alyJxrCzuNM7+CtiKoYbXLeqM8GQTS3wlvCaJu9oQ8dag== "@swc/core@^1.7.3": - version "1.7.22" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.7.22.tgz#fe7d515bba08fdd29937eae6dc40077459634087" - integrity sha512-Asn79WKqyjEuO2VEeSnVjn2YiRMToRhFJwOsQeqftBvwWMn1FGUuzVcXtkQFBk37si8Gh2Vkk/+p0u4K5NxDig== + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.7.23.tgz#1a98a0f73fac6ea1bf2ab452258caf5e29f3a9e4" + integrity sha512-VDNkpDvDlreGh2E3tlDj8B3piiuLhhQA/7rIVZpiLUvG1YpucAa6N7iDXA7Gc/+Hah8spaCg/qvEaBkCmcIYCQ== dependencies: "@swc/counter" "^0.1.3" "@swc/types" "^0.1.12" optionalDependencies: - "@swc/core-darwin-arm64" "1.7.22" - "@swc/core-darwin-x64" "1.7.22" - "@swc/core-linux-arm-gnueabihf" "1.7.22" - "@swc/core-linux-arm64-gnu" "1.7.22" - "@swc/core-linux-arm64-musl" "1.7.22" - "@swc/core-linux-x64-gnu" "1.7.22" - "@swc/core-linux-x64-musl" "1.7.22" - "@swc/core-win32-arm64-msvc" "1.7.22" - "@swc/core-win32-ia32-msvc" "1.7.22" - "@swc/core-win32-x64-msvc" "1.7.22" + "@swc/core-darwin-arm64" "1.7.23" + "@swc/core-darwin-x64" "1.7.23" + "@swc/core-linux-arm-gnueabihf" "1.7.23" + "@swc/core-linux-arm64-gnu" "1.7.23" + "@swc/core-linux-arm64-musl" "1.7.23" + "@swc/core-linux-x64-gnu" "1.7.23" + "@swc/core-linux-x64-musl" "1.7.23" + "@swc/core-win32-arm64-msvc" "1.7.23" + "@swc/core-win32-ia32-msvc" "1.7.23" + "@swc/core-win32-x64-msvc" "1.7.23" "@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== +"@swc/helpers@^0.5.12": + version "0.5.13" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.13.tgz#33e63ff3cd0cade557672bd7888a39ce7d115a8c" + integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== + dependencies: + tslib "^2.4.0" + "@swc/types@^0.1.12": version "0.1.12" resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.12.tgz#7f632c06ab4092ce0ebd046ed77ff7557442282f" @@ -2458,23 +1862,7 @@ tapable "^2.2.0" webpack "^5" -"@types/eslint-scope@^3.7.3": - version "3.7.7" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "9.6.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" - integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@1.0.5", "@types/estree@^1.0.5": +"@types/estree@1.0.5", "@types/estree@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== @@ -2567,7 +1955,7 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -2841,52 +2229,52 @@ "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" -"@vue/compiler-core@3.4.38": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.38.tgz#326dfe3c92fa2b0f1dc9b39a948a231980253496" - integrity sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A== +"@vue/compiler-core@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.0.tgz#d12c44faa56eb80c637fef050096e12bcc3bf091" + integrity sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw== dependencies: - "@babel/parser" "^7.24.7" - "@vue/shared" "3.4.38" + "@babel/parser" "^7.25.3" + "@vue/shared" "3.5.0" entities "^4.5.0" estree-walker "^2.0.2" source-map-js "^1.2.0" -"@vue/compiler-dom@3.4.38": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz#90348fac1130e0bbd408b650635cb626b3b9df06" - integrity sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ== +"@vue/compiler-dom@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz#108ed4315968d0197277128c4e5cb689f8a1ddd6" + integrity sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ== dependencies: - "@vue/compiler-core" "3.4.38" - "@vue/shared" "3.4.38" + "@vue/compiler-core" "3.5.0" + "@vue/shared" "3.5.0" "@vue/compiler-sfc@^3.4.34": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz#954c3f6777bbbcca28771ba59b795f12f76ef188" - integrity sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ== - dependencies: - "@babel/parser" "^7.24.7" - "@vue/compiler-core" "3.4.38" - "@vue/compiler-dom" "3.4.38" - "@vue/compiler-ssr" "3.4.38" - "@vue/shared" "3.4.38" + version "3.5.0" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz#dc1e34a331d5deea9e258a1e10e1b4d711b1afd6" + integrity sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ== + dependencies: + "@babel/parser" "^7.25.3" + "@vue/compiler-core" "3.5.0" + "@vue/compiler-dom" "3.5.0" + "@vue/compiler-ssr" "3.5.0" + "@vue/shared" "3.5.0" estree-walker "^2.0.2" - magic-string "^0.30.10" - postcss "^8.4.40" + magic-string "^0.30.11" + postcss "^8.4.44" source-map-js "^1.2.0" -"@vue/compiler-ssr@3.4.38": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz#9ded18f6d9c8b2440039a58492cfff36fa1a7774" - integrity sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw== +"@vue/compiler-ssr@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz#b9d31cf32b748fc4e554996c99988cb920c2458b" + integrity sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA== dependencies: - "@vue/compiler-dom" "3.4.38" - "@vue/shared" "3.4.38" + "@vue/compiler-dom" "3.5.0" + "@vue/shared" "3.5.0" -"@vue/shared@3.4.38": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.38.tgz#552a6770098bfd556fa3e2c686c9d3b4f4cd94c2" - integrity sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw== +"@vue/shared@3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.0.tgz#4842753ae38bab2323c710a4aff98338f1b0a8f5" + integrity sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q== "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" @@ -3037,14 +2425,14 @@ acorn-jsx@^5.3.2: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1, acorn-walk@^8.3.3: +acorn-walk@^8.0.0, acorn-walk@^8.1.1, acorn-walk@^8.3.3: version "8.3.3" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== dependencies: acorn "^8.11.0" -acorn@^8.11.0, acorn@^8.12.0, acorn@^8.12.1, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2: +acorn@^8.0.4, acorn@^8.11.0, acorn@^8.12.0, acorn@^8.12.1, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2: version "8.12.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== @@ -3118,11 +2506,6 @@ ansi-html-community@^0.0.8: resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== -ansi-html@^0.0.9: - version "0.0.9" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.9.tgz#6512d02342ae2cc68131952644a129cb734cd3f0" - integrity sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -3256,14 +2639,6 @@ babel-jest@^29.7.0: graceful-fs "^4.2.9" slash "^3.0.0" -babel-loader@^9.1.3: - version "9.1.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a" - integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw== - dependencies: - find-cache-dir "^4.0.0" - schema-utils "^4.0.0" - babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -3285,40 +2660,6 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.10.6: - version "0.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" - integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - core-js-compat "^3.38.0" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - -babel-plugin-react-require@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-react-require/-/babel-plugin-react-require-4.0.3.tgz#d6769a17b41b2ad24e2293bf135cc4a5c432e569" - integrity sha512-afNcjsCdZX11rtq0BeylXLR1o6DnrQDkwbRK5OyFHZ8l5T4/hq+JcO3MLOWKZWrHU9mz9lz3oxxGy4YzqmIauA== - -babel-plugin-transform-react-remove-prop-types@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" - integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== - babel-preset-current-node-syntax@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" @@ -3348,19 +2689,6 @@ babel-preset-jest@^29.6.3: babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" -babel-preset-modern-browser-extension@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/babel-preset-modern-browser-extension/-/babel-preset-modern-browser-extension-0.7.0.tgz#1e76816dee30414eb9fb59237d524878c9a31a25" - integrity sha512-J/6LNXDuaUUR5/2X/G6lWUK21GgQ8FUmi0tLhPsL6E0vmorkT+whMsAhdpFt0cgE7PcXZIsMOyd1x+erholGZw== - dependencies: - "@babel/plugin-proposal-decorators" "^7.24.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/preset-env" "^7.24.0" - "@babel/preset-react" "^7.23.3" - "@babel/preset-typescript" "^7.23.3" - babel-plugin-react-require "^4.0.2" - babel-plugin-transform-react-remove-prop-types "^0.4.24" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3474,6 +2802,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-builder@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/buffer-builder/-/buffer-builder-0.2.0.tgz#3322cd307d8296dab1f604618593b261a3fade8f" + integrity sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -3539,7 +2872,7 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001646: +caniuse-lite@^1.0.30001616, caniuse-lite@^1.0.30001646: version "1.0.30001655" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== @@ -3671,6 +3004,11 @@ colord@^2.9.3: resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== +colorette@2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + colorette@^2.0.10: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" @@ -3705,10 +3043,10 @@ commander@^4.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== compressible@~2.0.16: version "2.0.18" @@ -3799,18 +3137,6 @@ copy-anything@^2.0.1: dependencies: is-what "^3.14.1" -core-js-compat@^3.37.1, core-js-compat@^3.38.0: - version "3.38.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" - integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== - dependencies: - browserslist "^4.23.3" - -core-js-pure@^3.23.3: - version "3.38.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.38.1.tgz#e8534062a54b7221344884ba9b52474be495ada3" - integrity sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ== - core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -3985,13 +3311,6 @@ default-browser@^5.2.1: bundle-name "^4.1.0" default-browser-id "^5.0.0" -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -4121,6 +3440,11 @@ dotenv@^8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -4176,7 +3500,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -enhanced-resolve@^5.17.0, enhanced-resolve@^5.17.1: +enhanced-resolve@^5.17.1: version "5.17.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== @@ -4439,6 +3763,11 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +exit-hook@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-3.2.0.tgz#7d86bc361a4d79278001b72a0509318a6f468f20" + integrity sha512-aIQN7Q04HGAV/I5BszisuHTZHXNoC23WtLkxdCLuYZMdWviRD0TMIt2bnUBi9MrHaF/hH8b3gwG9iaAUHKnJGA== + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4455,7 +3784,7 @@ expect@^29.0.0, expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -express@^4.17.3: +express@^4.19.2: version "4.19.2" resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== @@ -4604,14 +3933,6 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-cache-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" - integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== - dependencies: - common-path-prefix "^3.0.0" - pkg-dir "^7.0.0" - find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -4628,14 +3949,6 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - find-yarn-workspace-root2@1.2.16: version "1.2.16" resolved "https://registry.yarnpkg.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" @@ -4682,9 +3995,9 @@ flatted@^3.2.9, flatted@^3.3.1: integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== follow-redirects@^1.0.0, follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + version "1.15.8" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.8.tgz#ae67b97ae32e0a7b36066a5448938374ec18d13d" + integrity sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig== foreground-child@^3.1.0: version "3.3.0" @@ -4822,7 +4135,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^10.3.10, glob@^10.3.7: +glob@^10.3.10: version "10.4.5" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== @@ -4934,6 +4247,13 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -5044,7 +4364,7 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy-middleware@^2.0.3: +http-proxy-middleware@^2.0.3, http-proxy-middleware@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== @@ -5162,6 +4482,11 @@ ini@^4.1.3: resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -5792,11 +5117,6 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -5873,9 +5193,9 @@ known-css-properties@^0.34.0: integrity sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ== launch-editor@^2.6.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.1.tgz#3bda72af213ec9b46b170e39661916ec66c2f463" - integrity sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA== + version "2.8.2" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.2.tgz#939e1b3469f9d5471e4eaacedd51b3b7c45352cd" + integrity sha512-eF5slEUZXmi6WvFzI3dYcv+hA24/iKnROf24HztcURJpSz9RBmBgz5cNCVOeguouf1llrwy6Yctl4C4HM+xI8g== dependencies: picocolors "^1.0.0" shell-quote "^1.8.1" @@ -5959,7 +5279,7 @@ loader-utils@^1.0.2: emojis-list "^3.0.0" json5 "^1.0.1" -loader-utils@^2.0.0, loader-utils@^2.0.4: +loader-utils@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== @@ -5987,18 +5307,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -6024,6 +5332,11 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== +lodash@^4.17.20: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + lru-cache@^10.2.0: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" @@ -6044,7 +5357,7 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -magic-string@^0.30.10: +magic-string@^0.30.11: version "0.30.11" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.11.tgz#301a6f93b3e8c2cb13ac1a7a673492c0dfd12954" integrity sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A== @@ -6146,7 +5459,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -6163,14 +5476,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@^2.8.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz#4d184f12ce90582e983ccef0f6f9db637b4be758" - integrity sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ== - dependencies: - schema-utils "^4.0.0" - tapable "^2.2.1" - minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -6224,6 +5529,11 @@ mri@^1.2.0: resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6372,6 +5682,11 @@ open@^10.0.3: is-inside-container "^1.0.0" is-wsl "^3.1.0" +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -6420,13 +5735,6 @@ p-limit@^3.0.2, p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" @@ -6441,13 +5749,6 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -6528,11 +5829,6 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -6567,9 +5863,9 @@ path-type@^4.0.0: integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picocolors@^1.0.0, picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + version "1.1.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" + integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -6598,13 +5894,6 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-dir@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" - integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== - dependencies: - find-up "^6.3.0" - postcss-attribute-case-insensitive@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.3.tgz#d118023911a768dfccfc0b0147f5ff06d8485806" @@ -6989,15 +6278,20 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.2.14, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.40, postcss@^8.4.41: - version "8.4.43" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.43.tgz#a5ddf22f4cc38e64c6ae030182b43e539d316419" - integrity sha512-gJAQVYbh5R3gYm33FijzCZj7CHyQ3hWMgJMprLUlIYqCwTeZhBQ19wp0e9mA25BUbEvY5+EXuuaAjqQsrBxQBQ== +postcss@^8.2.14, postcss@^8.4.23, postcss@^8.4.33, postcss@^8.4.40, postcss@^8.4.41, postcss@^8.4.44: + version "8.4.44" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.44.tgz#d56834ef6508610ba224bb22b2457b2169ed0480" + integrity sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw== dependencies: nanoid "^3.3.7" picocolors "^1.0.1" source-map-js "^1.2.0" +preact@^10.23.2: + version "10.23.2" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.23.2.tgz#52deec92796ae0f0cc6b034d9c66e0fbc1b837dc" + integrity sha512-kKYfePf9rzKnxOAKDpsWhg/ysrHPqT+yQ7UW4JjdnqjFIeNUnNcEJvhuA8fDenxAGWzUqtd51DfVg7xp/8T9NA== + preferred-pm@^3.0.0: version "3.1.4" resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.1.4.tgz#b99cf3da129cdb63555649b226b7530e82769769" @@ -7132,11 +6426,6 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -react-refresh-typescript@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/react-refresh-typescript/-/react-refresh-typescript-2.0.9.tgz#f8a86efcb34f8d717100230564b9b57477d74b10" - integrity sha512-chAnOO4vpxm/3WkgOVmti+eN8yUtkJzeGkOigV6UA9eDFz12W34e/SsYe2H5+RwYJ3+sfSZkVbiXcG1chEBxlg== - react-refresh@^0.14.2: version "0.14.2" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" @@ -7188,47 +6477,23 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + resolve "^1.20.0" regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - regex-parser@^2.2.11: version "2.3.0" resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.3.0.tgz#4bb61461b1a19b8b913f3960364bb57887f920ee" integrity sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg== -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - registry-auth-token@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" @@ -7244,13 +6509,6 @@ registry-url@3.1.0: dependencies: rc "^1.0.1" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -7299,7 +6557,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.2: +resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.2: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -7318,13 +6576,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^5.0.5: - version "5.0.10" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" - integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== - dependencies: - glob "^10.3.7" - rollup@^4.19.0: version "4.21.2" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.21.2.tgz#f41f277a448d6264e923dd1ea179f0a926aaf9b7" @@ -7362,6 +6613,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.4.0: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -7382,6 +6640,121 @@ sanitize.css@*: resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-13.0.0.tgz#2675553974b27964c75562ade3bd85d79879f173" integrity sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA== +sass-embedded-android-arm64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.77.8.tgz#29dd70d04a13142b62a09bec35a6abe9244d58cf" + integrity sha512-EmWHLbEx0Zo/f/lTFzMeH2Du+/I4RmSRlEnERSUKQWVp3aBSO04QDvdxfFezgQ+2Yt/ub9WMqBpma9P/8MPsLg== + +sass-embedded-android-arm@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-android-arm/-/sass-embedded-android-arm-1.77.8.tgz#7de0641036f1f32e0aec4c250561a3fb9907171e" + integrity sha512-GpGL7xZ7V1XpFbnflib/NWbM0euRzineK0iwoo31/ntWKAXGj03iHhGzkSiOwWSFcXgsJJi3eRA5BTmBvK5Q+w== + +sass-embedded-android-ia32@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.77.8.tgz#24603c38361c916d181d30af79a23016fd110b37" + integrity sha512-+GjfJ3lDezPi4dUUyjQBxlNKXNa+XVWsExtGvVNkv1uKyaOxULJhubVo2G6QTJJU0esJdfeXf5Ca5/J0ph7+7w== + +sass-embedded-android-x64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-android-x64/-/sass-embedded-android-x64-1.77.8.tgz#f53d538f57f109d8a8b8bc64d69a2b1f849c13d2" + integrity sha512-YZbFDzGe5NhaMCygShqkeCWtzjhkWxGVunc7ULR97wmxYPQLPeVyx7XFQZc84Aj0lKAJBJS4qRZeqphMqZEJsQ== + +sass-embedded-darwin-arm64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.77.8.tgz#beb4f56677b9310c21ee1be48080cb70bbd1f145" + integrity sha512-aifgeVRNE+i43toIkDFFJc/aPLMo0PJ5s5hKb52U+oNdiJE36n65n2L8F/8z3zZRvCa6eYtFY2b7f1QXR3B0LA== + +sass-embedded-darwin-x64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.77.8.tgz#fc8a06d98e0d67cdad2e018fbc087fe19a124948" + integrity sha512-/VWZQtcWIOek60Zj6Sxk6HebXA1Qyyt3sD8o5qwbTgZnKitB1iEBuNunyGoAgMNeUz2PRd6rVki6hvbas9hQ6w== + +sass-embedded-linux-arm64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.77.8.tgz#0d771159659d5b2e5742fb9fc7f62c0bf5b5d7f0" + integrity sha512-6iIOIZtBFa2YfMsHqOb3qake3C9d/zlKxjooKKnTSo+6g6z+CLTzMXe1bOfayb7yxeenElmFoK1k54kWD/40+g== + +sass-embedded-linux-arm@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.77.8.tgz#67d73e6726df6d96a4223e1032fe452df3d307ba" + integrity sha512-2edZMB6jf0whx3T0zlgH+p131kOEmWp+I4wnKj7ZMUeokiY4Up05d10hSvb0Q63lOrSjFAWu6P5/pcYUUx8arQ== + +sass-embedded-linux-ia32@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.77.8.tgz#63294592cba393ba852590ed586897340d32caca" + integrity sha512-63GsFFHWN5yRLTWiSef32TM/XmjhCBx1DFhoqxmj+Yc6L9Z1h0lDHjjwdG6Sp5XTz5EmsaFKjpDgnQTP9hJX3Q== + +sass-embedded-linux-musl-arm64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.77.8.tgz#c31b3535e2c027d45155a423f3bebad8a7ed12a6" + integrity sha512-j8cgQxNWecYK+aH8ESFsyam/Q6G+9gg8eJegiRVpA9x8yk3ykfHC7UdQWwUcF22ZcuY4zegrjJx8k+thsgsOVA== + +sass-embedded-linux-musl-arm@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.77.8.tgz#3ed067de1a4c94d3c9462d26842e7f34e1282d6a" + integrity sha512-nFkhSl3uu9btubm+JBW7uRglNVJ8W8dGfzVqh3fyQJKS1oyBC3vT3VOtfbT9YivXk28wXscSHpqXZwY7bUuopA== + +sass-embedded-linux-musl-ia32@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.77.8.tgz#b594999e7fd44df31cf231af3b5dc9707081b64c" + integrity sha512-oWveMe+8TFlP8WBWPna/+Ec5TV0CE+PxEutyi0ltSruBds2zxRq9dPVOqrpPcDN9QUx50vNZC0Afgch0aQEd0g== + +sass-embedded-linux-musl-x64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.77.8.tgz#fb25d36f4640ddff94c9111733b9ce9ecad25a24" + integrity sha512-2NtRpMXHeFo9kaYxuZ+Ewwo39CE7BTS2JDfXkTjZTZqd8H+8KC53eBh516YQnn2oiqxSiKxm7a6pxbxGZGwXOQ== + +sass-embedded-linux-x64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.77.8.tgz#66344634aab8e38f0a8d7a5712a744430bef29d4" + integrity sha512-ND5qZLWUCpOn7LJfOf0gLSZUWhNIysY+7NZK1Ctq+pM6tpJky3JM5I1jSMplNxv5H3o8p80n0gSm+fcjsEFfjQ== + +sass-embedded-win32-arm64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.77.8.tgz#b34b9e637ee82fcf84e7af12fa85ddb1e59c2e62" + integrity sha512-7L8zT6xzEvTYj86MvUWnbkWYCNQP+74HvruLILmiPPE+TCgOjgdi750709BtppVJGGZSs40ZuN6mi/YQyGtwXg== + +sass-embedded-win32-ia32@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.77.8.tgz#284b5d4629c2ca3f406497b9cbb0a9f9a6a85dda" + integrity sha512-7Buh+4bP0WyYn6XPbthkIa3M2vtcR8QIsFVg3JElVlr+8Ng19jqe0t0SwggDgbMX6AdQZC+Wj4F1BprZSok42A== + +sass-embedded-win32-x64@1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.77.8.tgz#01d32c063bbd5c3fe6b04a4ec2cdf690e61bbae7" + integrity sha512-rZmLIx4/LLQm+4GW39sRJW0MIlDqmyV0fkRzTmhFP5i/wVC7cuj8TUubPHw18rv2rkHFfBZKZJTCkPjCS5Z+SA== + +sass-embedded@^1.77.8: + version "1.77.8" + resolved "https://registry.yarnpkg.com/sass-embedded/-/sass-embedded-1.77.8.tgz#d8d885ccd59c6040fcccd345299a115187d65726" + integrity sha512-WGXA6jcaoBo5Uhw0HX/s6z/sl3zyYQ7ZOnLOJzqwpctFcFmU4L07zn51e2VSkXXFpQZFAdMZNqOGz/7h/fvcRA== + dependencies: + "@bufbuild/protobuf" "^1.0.0" + buffer-builder "^0.2.0" + immutable "^4.0.0" + rxjs "^7.4.0" + supports-color "^8.1.1" + varint "^6.0.0" + optionalDependencies: + sass-embedded-android-arm "1.77.8" + sass-embedded-android-arm64 "1.77.8" + sass-embedded-android-ia32 "1.77.8" + sass-embedded-android-x64 "1.77.8" + sass-embedded-darwin-arm64 "1.77.8" + sass-embedded-darwin-x64 "1.77.8" + sass-embedded-linux-arm "1.77.8" + sass-embedded-linux-arm64 "1.77.8" + sass-embedded-linux-ia32 "1.77.8" + sass-embedded-linux-musl-arm "1.77.8" + sass-embedded-linux-musl-arm64 "1.77.8" + sass-embedded-linux-musl-ia32 "1.77.8" + sass-embedded-linux-musl-x64 "1.77.8" + sass-embedded-linux-x64 "1.77.8" + sass-embedded-win32-arm64 "1.77.8" + sass-embedded-win32-ia32 "1.77.8" + sass-embedded-win32-x64 "1.77.8" + sass-loader@^16.0.0: version "16.0.1" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.1.tgz#57049c1787076e923b21a1dccc612546ecaf4295" @@ -7445,7 +6818,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.3, semver@^7.5.4, semver@^7.6.3: +semver@^7.5.3, semver@^7.5.4, semver@^7.6.2, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -7582,6 +6955,15 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -7944,7 +7326,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -8015,7 +7397,7 @@ tailwindcss@^3.4.7: resolve "^1.22.2" sucrase "^3.32.0" -tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: +tapable@^2.1.1, tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== @@ -8121,6 +7503,11 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -8192,7 +7579,7 @@ tsconfig@*: strip-bom "^3.0.0" strip-json-comments "^2.0.0" -tslib@^2.0.0, tslib@^2.3.0: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== @@ -8301,29 +7688,6 @@ undici-types@~6.19.2: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -8396,6 +7760,11 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" +varint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -8458,7 +7827,22 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-dev-middleware@^7.1.0: +webpack-bundle-analyzer@4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz#bee2ee05f4ba4ed430e4831a319126bb4ed9f5a6" + integrity sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw== + dependencies: + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-dev-middleware@^7.4.2: version "7.4.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz#40e265a3d3d26795585cff8207630d3a8ff05877" integrity sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA== @@ -8470,10 +7854,10 @@ webpack-dev-middleware@^7.1.0: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz#cb6ea47ff796b9251ec49a94f24a425e12e3c9b8" - integrity sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA== +webpack-dev-server@^5.0.4: + version "5.1.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.1.0.tgz#8f44147402b4d8ab99bfeb9b6880daa1411064e5" + integrity sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ== dependencies: "@types/bonjour" "^3.5.13" "@types/connect-history-api-fallback" "^1.5.4" @@ -8488,8 +7872,7 @@ webpack-dev-server@^5.0.2: colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" + express "^4.19.2" graceful-fs "^4.2.6" html-entities "^2.4.0" http-proxy-middleware "^2.0.3" @@ -8497,14 +7880,13 @@ webpack-dev-server@^5.0.2: launch-editor "^2.6.1" open "^10.0.3" p-retry "^6.2.0" - rimraf "^5.0.5" schema-utils "^4.2.0" selfsigned "^2.4.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^7.1.0" - ws "^8.16.0" + webpack-dev-middleware "^7.4.2" + ws "^8.18.0" webpack-merge@^6.0.1: version "6.0.1" @@ -8549,36 +7931,6 @@ webpack@^5: watchpack "^2.4.1" webpack-sources "^3.2.3" -webpack@~5.92.0: - version "5.92.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.92.1.tgz#eca5c1725b9e189cffbd86e8b6c3c7400efc5788" - integrity sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.12.1" - "@webassemblyjs/wasm-edit" "^1.12.1" - "@webassemblyjs/wasm-parser" "^1.12.1" - acorn "^8.7.1" - acorn-import-attributes "^1.9.5" - browserslist "^4.21.10" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.17.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.11" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" - watchpack "^2.4.1" - webpack-sources "^3.2.3" - websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" @@ -8700,7 +8052,12 @@ write-file-atomic@^5.0.1: imurmurhash "^0.1.4" signal-exit "^4.0.1" -ws@^8.16.0: +ws@^7.3.1: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +ws@^8.16.0, ws@^8.18.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== @@ -8743,6 +8100,19 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +yargs@17.6.2: + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yargs@^17.3.1: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" @@ -8765,8 +8135,3 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" - integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==
-

- The Babel logo -
- Welcome to your Babel Extension -

-

- Learn more about creating cross-browser extensions at - https://extension.js.org. -

-