diff --git a/README.md b/README.md
index 6db589e..7c7efc7 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# React Proto - React TypeScript Boilerplate
-![node.js@22](https://img.shields.io/badge/node.js-22-339933?style=for-the-badge&logo=nodedotjs) ![typescript@5](https://img.shields.io/badge/typescript-5-3178C6?style=for-the-badge&logo=typescript) ![reactjs@18](https://img.shields.io/badge/Reactjs-18-61DAFB?style=for-the-badge&logo=react) ![webpack@5](https://img.shields.io/badge/webpack-5-8dd6f9?style=for-the-badge&logo=webpack) ![sass@1.7](https://img.shields.io/badge/sass-1.7-CC6699?style=for-the-badge&logo=sass) ![ts-standard](https://img.shields.io/badge/standard-ts-F3DF49?style=for-the-badge&logo=standardjs)
+![node.js@22](https://img.shields.io/badge/node.js-22-339933?style=for-the-badge&logo=nodedotjs) ![typescript@5](https://img.shields.io/badge/typescript-5-3178C6?style=for-the-badge&logo=typescript) ![reactjs@18](https://img.shields.io/badge/Reactjs-18-61DAFB?style=for-the-badge&logo=react) ![rspack@1](https://img.shields.io/badge/rspack-1-f0965b?style=for-the-badge) ![webpack@5](https://img.shields.io/badge/webpack-5-8dd6f9?style=for-the-badge&logo=webpack) ![sass@1.7](https://img.shields.io/badge/sass-1.7-CC6699?style=for-the-badge&logo=sass) ![ts-standard](https://img.shields.io/badge/standard-ts-F3DF49?style=for-the-badge&logo=standardjs)
@@ -10,6 +10,14 @@ This project is a compilation of different approaches in React development that
You can also check a [React Proto Lite](https://github.com/StopNGo/react-proto-lite) - Template React project for fast SPA prototyping. It contains only everything necessary for Single Page Application projects without any server side parts.
+## Huge Update: Migrating to Rspack
+
+Starting from version `2.0.0`, this project uses [Rspack](https://rspack.dev/) as the primary bundler.
+
+Rspack is a high performance JavaScript bundler written in Rust. It offers strong compatibility with the webpack ecosystem, allowing for seamless replacement of webpack, and provides lightning fast build speeds.
+
+Webpack is still available as an option ([rspack vs webpack](#rspack-vs-webpack) and [switching back to webpack](#switching-back-to-webpack)).
+
---
- [Issue](#issue)
- [What's Inside](#whats-inside)
@@ -26,7 +34,7 @@ You can also check a [React Proto Lite](https://github.com/StopNGo/react-proto-l
Every new React developer knows that React is a library, not a complete framework. Thus, it provides maximum flexibility. However, a lot of knowledge is required to create a fully functional web application powered with React.
-That is why there exist such a famous framework as [Next.js](https://nextjs.org/) as well as a tool [Create React App (CRA)](https://create-react-app.dev/).
+That is why there exist such a famous framework as [Next.js](https://nextjs.org/) as well as a tool [Create React App (CRA)](https://create-react-app.dev/) or [Rsbuild for React](https://rsbuild.dev/guide/framework/react).
Despite the advantages that such tools have, there are some cons that their user may face:
@@ -46,7 +54,7 @@ Thus, the goal of this project is to **collect in one place all the most common
Core:
- **React** 18+ (**Preact** 10+ as an option, see [comparison](#react-vs-preact) below)
-- **webpack** 5+ (with optional **SWC** support and SSR or static build; [why not Vite?](#why-not-vite))
+- **Rspack** 1 (**webpack** 5+ as an option) with **SWC** support and SSR or static build ([why not Vite?](#why-not-vite), [rspack vs webpack](#rspack-vs-webpack) and [switching back to webpack](#switching-back-to-webpack))
- **TypeScript** (with strict rules, including webpack configuration)
SSR:
@@ -130,15 +138,17 @@ Live preview:
`git clone https://github.com/StopNGo/react-proto`
-2. Install all packages:
+2. Delete the `_webpack` folder if you are not going to use webpack bundler or [switch to it](#switching-back-to-webpack) before installing the packages.
+
+3. Install all packages:
`npm i`
-3. Run project in a development mode:
+4. Run project in a development mode:
`npm start`
-4. Open your browser with the next address:
+5. Open your browser with the next address:
`http://localhost:8080/`
@@ -176,6 +186,20 @@ Live preview:
`npm run build:static:report`
+### Switching back to webpack
+
+- Copy the contents of `_webpack` folder (except `README.md`) to the root of the project.
+
+- Delete the `rspack.config.ts` file.
+
+- Delete the `rspack` and `_webpack` folders.
+
+- If you have a previous installation, clean the `node_modules` folder.
+
+- Then install the packages:
+
+ `npm i`
+
### Updating packages
All packages in this project are pinned to latest versions at the time of publishing to exclude version-based conflicts and errors and to guarantee proper work of the code in this repository.
@@ -203,19 +227,43 @@ Vite is an excellent new generation bundler that could speed up your development
As for the speed: you can check this article - [Storybook Performance: Vite vs Webpack](https://storybook.js.org/blog/storybook-performance-from-webpack-to-vite/). As you can see - Webpack could still be fast enough. React Proto has such configurations. In `webpack\constants.ts` you can switch on SWC and Lazy Compilation.
-Also, I'm looking forward to [Turbopack](https://turbo.build/pack) - the Rust-powered successor to Webpack. Now it is available only in Next.js, but I hope the future migration from the Wepback will be smooth because the principle of configuration should be the same.
+Starting from version `2.0.0`, this project uses [Rspack](https://rspack.dev/) as the primary bundler. This bundler written in Rust and offers strong compatibility with the webpack ecosystem, so, performance should be much better ([rspack vs webpack](#rspack-vs-webpack)).
+
+I'm also looking forward to [Turbopack](https://turbo.build/pack) — another Rust-powered successor to Webpack. Currently, it's available only in Next.js, but it might be released as a standalone CLI tool in the future.
+
+### Rspack vs webpack
+Rspack is a high performance JavaScript bundler written in Rust. It offers strong compatibility with the webpack ecosystem, allowing for seamless replacement of webpack, and provides lightning fast build speeds.
+
+Here is a comparison between Rspack 1 with the built-in SWC loader and Webpack 5+ with the external SWC loader, while building the SSR version of the sample application on the same hardware configuration:
+
+| | Rspack | webpack |
+| ------- | --------- | -------- |
+| Server | 5.35 s | 6.83 s |
+| Client | 5.32 s | 7.50 s |
+
+Of course, the larger the project, the greater the performance advantage. However, if you need more webpack compatibility or hot module reloading while developing with [Preact](#react-vs-preact), you can always [switch back to the webpack bundler](#switching-back-to-webpack).
+
+Also, the optimization process of Rspack is currently slightly worse. Check the bundle size comparison for the non-SSR version of the sample application in this repository:
+
+| | Rspack | webpack |
+| ------- | --------- | -------- |
+| Parsed | 284.47 KB | 262.9 KB |
+| Gzipped | 90.29 KB | 86.84 KB |
### React vs Preact
In `webpack\constants.ts` you can choose to use [Preact](https://preactjs.com/) library instead React itself (`IS_PREACT` boolean constant).
-Preact is a fast and compact React-compatible Virtual DOM library. But because its community is much smaller, you can face with some incompatibility with React API and functionality, especially with new ones. Also some tests show some frame drops during moving a lot of elements. Below you can see a bundle size comparison of no-SSR version of the sample application of this repository (according to Webpack Bundle Analyzer):
+Preact is a fast and compact React-compatible Virtual DOM library. But because its community is much smaller, you can face with some incompatibility with React API and functionality, especially with new ones. Also some tests show some frame drops during moving a lot of elements. Below you can see a bundle size comparison of no-SSR version of the sample application of this repository that was built with Rspack (according to Webpack Bundle Analyzer):
| | React | Preact |
| ------- | --------- | -------- |
| Parsed | 262.9 KB | 150.55 KB |
| Gzipped | 86.84 KB | 52.09 KB |
+**Important Note**
+At the moment, the Rspack version of the project does not support hot module reloading during development with Preact. Compared to Webpack, it requires some additional tricky configuration, which I will probably add in the near future. However, if you need HMR (and you definitely do!), you can develop your project using React and then build it with Preact. Or just [switch your project back to the webpack](#switching-back-to-webpack).
+
### Why not any common i18n package?
You can freely integrate any React compatible i18n solution. But if React Proto already uses Redux and RTK, why just not use them for this task? Therefore, I have created a custom internationalization solution with a minimum additional code. It supports translations dynamic loading, server side rendering based on user acceptable languages, strict typing, etc. At the moment it just does not support string processing like pluralization, but it could easily be added later.
diff --git a/_webpack/README.md b/_webpack/README.md
new file mode 100644
index 0000000..caacb7b
--- /dev/null
+++ b/_webpack/README.md
@@ -0,0 +1,17 @@
+## Webpack Version
+
+To use the webpack version of the project:
+
+1. Copy the contents of this folder (except `README.md`) to the root of the project.
+
+2. Delete the `rspack.config.ts` file.
+
+3. Delete the `rspack` and `_webpack` folders.
+
+4. If you have a previous installation, clean the `node_modules` folder.
+
+5. Then install the packages:
+
+ `npm i`
+
+That's it!
diff --git a/_webpack/package.json b/_webpack/package.json
new file mode 100644
index 0000000..69249a1
--- /dev/null
+++ b/_webpack/package.json
@@ -0,0 +1,112 @@
+{
+ "name": "react-proto",
+ "version": "2.0.0",
+ "description": "React TypeScript Boilerplate",
+ "author": "Max L Stop&Go",
+ "license": "ISC",
+ "sideEffects": [
+ "*.css",
+ "*.scss"
+ ],
+ "scripts": {
+ "clean": "rimraf dist",
+ "start:webpack": "cross-env NODE_ENV=development webpack --mode=development",
+ "start:server": "wait-on dist/server.js && node dist/server.js",
+ "dev": "npm run clean && npm-run-all --print-label --parallel start:webpack start:server",
+ "start": "nodemon --exec npm run dev --watch src/server --ext ts,tsx,json ",
+ "build": "npm run clean && cross-env NODE_ENV=production webpack --mode production",
+ "build:report": "npm run build --withReport",
+ "run": "node dist/server.js",
+ "start:static": "npm run clean && cross-env NODE_ENV=development NO_SSR=true webpack serve --mode development --open",
+ "build:static": "npm run clean && cross-env NODE_ENV=production NO_SSR=true webpack --mode production",
+ "build:static:report": "npm run build:static --withReport",
+ "prettier": "prettier \"src/**/*\" --write --single-quote --no-semi --ignore-unknown --trailing-comma none --jsx-single-quote",
+ "lint": "ts-standard . && stylelint **/*.{css,scss}",
+ "lint:fix": "npm run prettier && ts-standard . --fix && stylelint --fix **/*.{css,scss}",
+ "test": "jest",
+ "add-comp": "node scripts/add-comp.js"
+ },
+ "devDependencies": {
+ "@pmmmwh/react-refresh-webpack-plugin": "0.5.15",
+ "@svgr/webpack": "8.1.0",
+ "@swc/core": "1.7.26",
+ "@testing-library/jest-dom": "6.5.0",
+ "@testing-library/preact": "3.2.4",
+ "@testing-library/react": "16.0.1",
+ "@testing-library/user-event": "14.5.2",
+ "@types/compression": "1.7.5",
+ "@types/cookie-parser": "1.4.7",
+ "@types/express": "5.0.0",
+ "@types/jest": "29.5.13",
+ "@types/loadable__component": "5.13.9",
+ "@types/loadable__server": "5.12.11",
+ "@types/node": "22.7.5",
+ "@types/react": "18.3.11",
+ "@types/react-dom": "18.3.0",
+ "@types/react-helmet": "6.1.11",
+ "@types/react-router-dom": "5.3.3",
+ "@types/serialize-javascript": "5.0.4",
+ "@types/webpack-bundle-analyzer": "4.7.0",
+ "@types/webpack-env": "1.18.5",
+ "@types/webpack-hot-middleware": "2.25.9",
+ "@types/webpack-node-externals": "3.0.4",
+ "classnames": "2.5.1",
+ "copy-webpack-plugin": "12.0.2",
+ "cross-env": "7.0.3",
+ "css-hot-loader": "1.4.4",
+ "css-loader": "7.1.2",
+ "csso-webpack-plugin": "2.0.0-beta.3",
+ "express": "4.21.1",
+ "fork-ts-checker-webpack-plugin": "9.0.2",
+ "html-webpack-plugin": "5.6.0",
+ "jest": "29.7.0",
+ "jest-environment-jsdom": "29.7.0",
+ "mini-css-extract-plugin": "2.9.1",
+ "nodemon": "3.1.7",
+ "npm-run-all": "4.1.5",
+ "null-loader": "4.0.1",
+ "postcss": "8.4.47",
+ "postcss-scss": "4.0.9",
+ "prettier": "3.3.3",
+ "rimraf": "6.0.1",
+ "sass": "1.79.4",
+ "sass-loader": "16.0.2",
+ "stylelint": "16.9.0",
+ "stylelint-config-clean-order": "6.1.0",
+ "stylelint-config-standard-scss": "13.1.0",
+ "swc-loader": "0.2.6",
+ "ts-jest": "29.2.5",
+ "ts-loader": "9.5.1",
+ "ts-node": "10.9.2",
+ "ts-standard": "12.0.2",
+ "typescript": "5.6.2",
+ "typescript-plugin-css-modules": "5.1.0",
+ "wait-on": "8.0.1",
+ "webpack": "5.95.0",
+ "webpack-bundle-analyzer": "4.10.2",
+ "webpack-cli": "5.1.4",
+ "webpack-dev-middleware": "7.4.2",
+ "webpack-dev-server": "5.1.0",
+ "webpack-hot-middleware": "2.26.1",
+ "webpack-node-externals": "3.0.0"
+ },
+ "dependencies": {
+ "@apollo/react-ssr": "4.0.0",
+ "@loadable/server": "5.16.5",
+ "@loadable/webpack-plugin": "5.15.2",
+ "@reduxjs/toolkit": "2.2.8",
+ "@types/loadable__webpack-plugin": "5.7.6",
+ "compression": "1.7.4",
+ "cookie-parser": "1.4.7",
+ "cross-fetch": "4.0.0",
+ "helmet": "8.0.0",
+ "identity-obj-proxy": "3.0.0",
+ "preact": "10.24.2",
+ "react": "18.3.1",
+ "react-dom": "18.3.1",
+ "react-helmet-async": "2.0.5",
+ "react-redux": "9.1.2",
+ "react-router-dom": "6.26.2",
+ "serialize-javascript": "6.0.2"
+ }
+}
diff --git a/_webpack/src/server/constants.ts b/_webpack/src/server/constants.ts
new file mode 100644
index 0000000..edd9c79
--- /dev/null
+++ b/_webpack/src/server/constants.ts
@@ -0,0 +1,5 @@
+import { DEV_SERVER_PORT, IS_DEV } from '_webpack/constants'
+
+export const SERVER_PORT: number = IS_DEV ? DEV_SERVER_PORT : 3000
+
+export const IS_RENDER_TO_STREAM: boolean = true
diff --git a/_webpack/src/server/middlewares/csp.ts b/_webpack/src/server/middlewares/csp.ts
new file mode 100644
index 0000000..b25edb3
--- /dev/null
+++ b/_webpack/src/server/middlewares/csp.ts
@@ -0,0 +1,33 @@
+import helmet from 'helmet'
+import { randomUUID } from 'crypto'
+import { Response, Request, NextFunction } from 'express'
+import { IS_DEV } from '_webpack/constants'
+
+const nonce = (_req: Request, res: Response, next: NextFunction): void => {
+ res.locals.cspNonce = Buffer.from(randomUUID()).toString('base64')
+ next()
+}
+
+const csp = (req: Request, res: Response, next: NextFunction): void => {
+ const middleware = helmet({
+ contentSecurityPolicy: {
+ useDefaults: true,
+ directives: {
+ defaultSrc: ["'self'", 'pokeapi.co', 'localhost:*'],
+ imgSrc: ["'self'", 'raw.githubusercontent.com'],
+ scriptSrc: [
+ "'self'",
+ `'nonce-${String(res.locals.cspNonce)}'`,
+ IS_DEV ? "'unsafe-eval'" : ''
+ ]
+ }
+ },
+ crossOriginEmbedderPolicy: { policy: 'credentialless' },
+ noSniff: false,
+ originAgentCluster: false
+ })
+
+ return middleware(req, res, next)
+}
+
+export { nonce, csp }
diff --git a/_webpack/src/server/middlewares/hotReload.ts b/_webpack/src/server/middlewares/hotReload.ts
new file mode 100644
index 0000000..12eabd4
--- /dev/null
+++ b/_webpack/src/server/middlewares/hotReload.ts
@@ -0,0 +1,21 @@
+import webpack from 'webpack'
+import { RequestHandler } from 'express'
+import devMiddleware from 'webpack-dev-middleware'
+import hotMiddleware from 'webpack-hot-middleware'
+
+import { clientConfig as config } from '_webpack/client.config'
+
+const compiler = webpack({ ...config, mode: 'development' })
+
+export const devMiddlewareInstance = devMiddleware(compiler, {
+ serverSideRender: true,
+ writeToDisk: true,
+ publicPath:
+ config.output?.publicPath != null ? String(config.output.publicPath) : '/'
+})
+
+export function hotReload (): RequestHandler[] {
+ return [devMiddlewareInstance, hotMiddleware(compiler)]
+}
+
+export default hotReload
diff --git a/_webpack/src/server/server.ts b/_webpack/src/server/server.ts
new file mode 100644
index 0000000..c24ced3
--- /dev/null
+++ b/_webpack/src/server/server.ts
@@ -0,0 +1,60 @@
+import path from 'path'
+import express, { RequestHandler } from 'express'
+import compression from 'compression'
+import cookieParser from 'cookie-parser'
+import { ChunkExtractor } from '@loadable/server'
+
+import { csp, serverRenderer, nonce } from 'server/middlewares'
+import { IS_RENDER_TO_STREAM, SERVER_PORT } from 'server/constants'
+import { DIST_DIR, IS_DEV, SRC_DIR } from '_webpack/constants'
+
+const { PORT = SERVER_PORT } = process.env
+
+const runServer = (hotReload?: () => RequestHandler[]): void => {
+ const app = express()
+ const statsFile = path.resolve('./dist/stats.json')
+ const chunkExtractor = new ChunkExtractor({ statsFile })
+
+ app
+ .use(nonce)
+ .use(csp)
+ .use(express.json())
+ .use(compression())
+ .use(express.static(path.resolve(DIST_DIR)))
+ .use(cookieParser())
+
+ if (IS_DEV) {
+ if (hotReload != null) {
+ app.get('/*', [...hotReload()])
+ }
+ } else {
+ app.get('/sw.js', (_req, res) => {
+ res.sendFile(path.join(SRC_DIR, 'sw.js'))
+ })
+ }
+
+ app.get('/*', serverRenderer(chunkExtractor))
+
+ app.listen(PORT, () => {
+ console.log(
+ `App listening on port ${PORT}! (render to ${
+ IS_RENDER_TO_STREAM ? 'stream' : 'string'
+ })`
+ )
+ })
+}
+
+if (IS_DEV) {
+ ;(async () => {
+ const { hotReload, devMiddlewareInstance } = await import(
+ './middlewares/hotReload'
+ )
+ devMiddlewareInstance.waitUntilValid(() => {
+ runServer(hotReload)
+ })
+ })()
+ .then(() => {})
+ .catch((er) => console.log(er))
+} else {
+ runServer()
+}
diff --git a/_webpack/tsconfig.json b/_webpack/tsconfig.json
new file mode 100644
index 0000000..5010849
--- /dev/null
+++ b/_webpack/tsconfig.json
@@ -0,0 +1,41 @@
+{
+ "compilerOptions": {
+ "lib": ["dom", "es2022"],
+ "types": ["node", "jest", "webpack-env"],
+ "module": "esnext",
+ "target": "es2022",
+ "moduleResolution": "node",
+ "jsx": "react-jsx",
+ "importHelpers": true,
+ "resolveJsonModule": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "esModuleInterop": true,
+ "strict": true,
+ "allowSyntheticDefaultImports": true,
+ "experimentalDecorators": true,
+ "strictPropertyInitialization": false,
+ "emitDecoratorMetadata": true,
+ "skipLibCheck": true,
+ "declaration": false,
+ "sourceMap": true,
+ "baseUrl": ".",
+ "removeComments": true,
+ "forceConsistentCasingInFileNames": true,
+ "outDir": "./dist",
+ "paths": {
+ "*": ["./src/*", "./*"],
+ "_webpack/*": ["webpack/*"]
+ },
+ "plugins": [
+ {
+ "name": "typescript-plugin-css-modules"
+ }
+ ]
+ },
+ "ts-node": {
+ "compilerOptions": { "module": "commonjs" }
+ },
+ "include": ["src", "webpack", "webpack.config.ts", "jest.config.ts"],
+ "exclude": ["node_modules", "**/*.js"],
+}
diff --git a/webpack.config.ts b/_webpack/webpack.config.ts
similarity index 100%
rename from webpack.config.ts
rename to _webpack/webpack.config.ts
diff --git a/webpack/client.config.ts b/_webpack/webpack/client.config.ts
similarity index 100%
rename from webpack/client.config.ts
rename to _webpack/webpack/client.config.ts
diff --git a/webpack/constants.ts b/_webpack/webpack/constants.ts
similarity index 100%
rename from webpack/constants.ts
rename to _webpack/webpack/constants.ts
diff --git a/webpack/loaders/font.ts b/_webpack/webpack/loaders/font.ts
similarity index 100%
rename from webpack/loaders/font.ts
rename to _webpack/webpack/loaders/font.ts
diff --git a/webpack/loaders/image.ts b/_webpack/webpack/loaders/image.ts
similarity index 100%
rename from webpack/loaders/image.ts
rename to _webpack/webpack/loaders/image.ts
diff --git a/webpack/loaders/index.ts b/_webpack/webpack/loaders/index.ts
similarity index 100%
rename from webpack/loaders/index.ts
rename to _webpack/webpack/loaders/index.ts
diff --git a/webpack/loaders/scss.ts b/_webpack/webpack/loaders/scss.ts
similarity index 100%
rename from webpack/loaders/scss.ts
rename to _webpack/webpack/loaders/scss.ts
diff --git a/webpack/loaders/svg.ts b/_webpack/webpack/loaders/svg.ts
similarity index 100%
rename from webpack/loaders/svg.ts
rename to _webpack/webpack/loaders/svg.ts
diff --git a/webpack/loaders/ts.ts b/_webpack/webpack/loaders/ts.ts
similarity index 100%
rename from webpack/loaders/ts.ts
rename to _webpack/webpack/loaders/ts.ts
diff --git a/webpack/server.config.ts b/_webpack/webpack/server.config.ts
similarity index 100%
rename from webpack/server.config.ts
rename to _webpack/webpack/server.config.ts
diff --git a/webpack/types.d.ts b/_webpack/webpack/types.d.ts
similarity index 100%
rename from webpack/types.d.ts
rename to _webpack/webpack/types.d.ts
diff --git a/package-lock.json b/package-lock.json
index 898b830..4c91c78 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "react-proto",
- "version": "1.6.2",
+ "version": "2.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "react-proto",
- "version": "1.6.2",
+ "version": "2.0.0",
"license": "ISC",
"dependencies": {
"@apollo/react-ssr": "4.0.0",
@@ -24,13 +24,15 @@
"react-dom": "18.3.1",
"react-helmet-async": "2.0.5",
"react-redux": "9.1.2",
- "react-router-dom": "6.26.2",
+ "react-router-dom": "6.27.0",
"serialize-javascript": "6.0.2"
},
"devDependencies": {
- "@pmmmwh/react-refresh-webpack-plugin": "0.5.15",
+ "@rspack/cli": "1.0.10",
+ "@rspack/core": "1.0.10",
+ "@rspack/plugin-react-refresh": "1.0.0",
"@svgr/webpack": "8.1.0",
- "@swc/core": "1.7.26",
+ "@swc/core": "1.7.35",
"@testing-library/jest-dom": "6.5.0",
"@testing-library/preact": "3.2.4",
"@testing-library/react": "16.0.1",
@@ -43,7 +45,7 @@
"@types/loadable__server": "5.12.11",
"@types/node": "22.7.5",
"@types/react": "18.3.11",
- "@types/react-dom": "18.3.0",
+ "@types/react-dom": "18.3.1",
"@types/react-helmet": "6.1.11",
"@types/react-router-dom": "5.3.3",
"@types/serialize-javascript": "5.0.4",
@@ -69,10 +71,11 @@
"postcss": "8.4.47",
"postcss-scss": "4.0.9",
"prettier": "3.3.3",
+ "react-refresh": "0.14.2",
"rimraf": "6.0.1",
- "sass": "1.79.4",
+ "sass": "1.79.5",
"sass-loader": "16.0.2",
- "stylelint": "16.9.0",
+ "stylelint": "16.10.0",
"stylelint-config-clean-order": "6.1.0",
"stylelint-config-standard-scss": "13.1.0",
"swc-loader": "0.2.6",
@@ -80,14 +83,11 @@
"ts-loader": "9.5.1",
"ts-node": "10.9.2",
"ts-standard": "12.0.2",
- "typescript": "5.6.2",
+ "typescript": "5.6.3",
"typescript-plugin-css-modules": "5.1.0",
"wait-on": "8.0.1",
- "webpack": "5.95.0",
"webpack-bundle-analyzer": "4.10.2",
- "webpack-cli": "5.1.4",
"webpack-dev-middleware": "7.4.2",
- "webpack-dev-server": "5.1.0",
"webpack-hot-middleware": "2.26.1",
"webpack-node-externals": "3.0.0"
}
@@ -3328,6 +3328,41 @@
"webpack": ">=4.6.0"
}
},
+ "node_modules/@module-federation/runtime": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.5.1.tgz",
+ "integrity": "sha512-xgiMUWwGLWDrvZc9JibuEbXIbhXg6z2oUkemogSvQ4LKvrl/n0kbqP1Blk669mXzyWbqtSp6PpvNdwaE1aN5xQ==",
+ "dev": true,
+ "dependencies": {
+ "@module-federation/sdk": "0.5.1"
+ }
+ },
+ "node_modules/@module-federation/runtime-tools": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.5.1.tgz",
+ "integrity": "sha512-nfBedkoZ3/SWyO0hnmaxuz0R0iGPSikHZOAZ0N/dVSQaIzlffUo35B5nlC2wgWIc0JdMZfkwkjZRrnuuDIJbzg==",
+ "dev": true,
+ "dependencies": {
+ "@module-federation/runtime": "0.5.1",
+ "@module-federation/webpack-bundler-runtime": "0.5.1"
+ }
+ },
+ "node_modules/@module-federation/sdk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.5.1.tgz",
+ "integrity": "sha512-exvchtjNURJJkpqjQ3/opdbfeT2wPKvrbnGnyRkrwW5o3FH1LaST1tkiNviT6OXTexGaVc2DahbdniQHVtQ7pA==",
+ "dev": true
+ },
+ "node_modules/@module-federation/webpack-bundler-runtime": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.5.1.tgz",
+ "integrity": "sha512-mMhRFH0k2VjwHt3Jol9JkUsmI/4XlrAoBG3E0o7HoyoPYv1UFOWyqAflfANcUPgbYpvqmyLzDcO+3IT36LXnrA==",
+ "dev": true,
+ "dependencies": {
+ "@module-federation/runtime": "0.5.1",
+ "@module-federation/sdk": "0.5.1"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -3363,98 +3398,287 @@
"node": ">= 8"
}
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "node_modules/@parcel/watcher": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz",
+ "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==",
+ "dev": true,
+ "dependencies": {
+ "detect-libc": "^1.0.3",
+ "is-glob": "^4.0.3",
+ "micromatch": "^4.0.5",
+ "node-addon-api": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher-android-arm64": "2.4.1",
+ "@parcel/watcher-darwin-arm64": "2.4.1",
+ "@parcel/watcher-darwin-x64": "2.4.1",
+ "@parcel/watcher-freebsd-x64": "2.4.1",
+ "@parcel/watcher-linux-arm-glibc": "2.4.1",
+ "@parcel/watcher-linux-arm64-glibc": "2.4.1",
+ "@parcel/watcher-linux-arm64-musl": "2.4.1",
+ "@parcel/watcher-linux-x64-glibc": "2.4.1",
+ "@parcel/watcher-linux-x64-musl": "2.4.1",
+ "@parcel/watcher-win32-arm64": "2.4.1",
+ "@parcel/watcher-win32-ia32": "2.4.1",
+ "@parcel/watcher-win32-x64": "2.4.1"
+ }
+ },
+ "node_modules/@parcel/watcher-android-arm64": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz",
+ "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
"optional": true,
+ "os": [
+ "android"
+ ],
"engines": {
- "node": ">=14"
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@pmmmwh/react-refresh-webpack-plugin": {
- "version": "0.5.15",
- "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz",
- "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==",
+ "node_modules/@parcel/watcher-darwin-arm64": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz",
+ "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "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"
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-x64": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz",
+ "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">= 10.13"
+ "node": ">= 10.0.0"
},
- "peerDependencies": {
- "@types/webpack": "4.x || 5.x",
- "react-refresh": ">=0.10.0 <1.0.0",
- "sockjs-client": "^1.4.0",
- "type-fest": ">=0.17.0 <5.0.0",
- "webpack": ">=4.43.0 <6.0.0",
- "webpack-dev-server": "3.x || 4.x || 5.x",
- "webpack-hot-middleware": "2.x",
- "webpack-plugin-serve": "0.x || 1.x"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-freebsd-x64": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz",
+ "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
},
- "peerDependenciesMeta": {
- "@types/webpack": {
- "optional": true
- },
- "sockjs-client": {
- "optional": true
- },
- "type-fest": {
- "optional": true
- },
- "webpack-dev-server": {
- "optional": true
- },
- "webpack-hot-middleware": {
- "optional": true
- },
- "webpack-plugin-serve": {
- "optional": true
- }
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "node_modules/@parcel/watcher-linux-arm-glibc": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz",
+ "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
- "dependencies": {
- "ajv": "^8.0.0"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
},
- "peerDependencies": {
- "ajv": "^8.0.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz",
+ "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
},
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
}
},
- "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
+ "node_modules/@parcel/watcher-linux-arm64-musl": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz",
+ "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-glibc": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz",
+ "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-musl": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz",
+ "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">= 12.13.0"
+ "node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-arm64": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz",
+ "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-ia32": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz",
+ "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-x64": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz",
+ "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=14"
}
},
"node_modules/@polka/url": {
@@ -3487,21 +3711,715 @@
}
},
"node_modules/@remix-run/router": {
- "version": "1.19.2",
- "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz",
- "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==",
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz",
+ "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==",
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/@sideway/address": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
- "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
+ "node_modules/@rspack/binding": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.0.10.tgz",
+ "integrity": "sha512-ILWPqLl0fS3a76OwQH6SlVIJBST39sc55yp0zwt484sb77khm0JGvJRElCdPuwgaR7JRDdqK23EvW0XIQAvY7A==",
"dev": true,
- "dependencies": {
- "@hapi/hoek": "^9.0.0"
- }
+ "optionalDependencies": {
+ "@rspack/binding-darwin-arm64": "1.0.10",
+ "@rspack/binding-darwin-x64": "1.0.10",
+ "@rspack/binding-linux-arm64-gnu": "1.0.10",
+ "@rspack/binding-linux-arm64-musl": "1.0.10",
+ "@rspack/binding-linux-x64-gnu": "1.0.10",
+ "@rspack/binding-linux-x64-musl": "1.0.10",
+ "@rspack/binding-win32-arm64-msvc": "1.0.10",
+ "@rspack/binding-win32-ia32-msvc": "1.0.10",
+ "@rspack/binding-win32-x64-msvc": "1.0.10"
+ }
+ },
+ "node_modules/@rspack/binding-darwin-arm64": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.0.10.tgz",
+ "integrity": "sha512-byQuC3VSEHJxjcjdgOvEPPkteA7d/kKYGUTZjsAMsIriioCVkB+4OYfnQmnav8M0An9vBM34H2+IKqO1ge1+Aw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rspack/binding-darwin-x64": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.0.10.tgz",
+ "integrity": "sha512-L5dGmELiDDXAW3+yN11fwDbl8S9i7dwOvzygN/Iw+Md2WAODrFnTI/g++hOfdZzjUPtefyQUqoAcFOgpdxWSCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rspack/binding-linux-arm64-gnu": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.10.tgz",
+ "integrity": "sha512-s+0AIGQQ2Npz3RcDQAFOLc4KYAZZ1g4oWxm2Ug7RSecwy7edK1uUDYE+boofEMgZ9+O3G5O+sXQr+SAyidS5EA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rspack/binding-linux-arm64-musl": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.10.tgz",
+ "integrity": "sha512-KSPLOHcUC+8zA134RTCqo5bDqmX4ZwFz4LL+n/5i9yugHoiQVplEzh2TkFCVoAH85Xc40qPhxqGLJlhHh5qGEA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rspack/binding-linux-x64-gnu": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.10.tgz",
+ "integrity": "sha512-hiMIowGEUODn0LxV/Kc/oxHDXXSgu9BgPVZNprRTEZs3E7hHP4FX+YlzKafZ9G6qSY51GkiEDyEOb5X4Pq/eTw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rspack/binding-linux-x64-musl": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.10.tgz",
+ "integrity": "sha512-OKb1PLOIulkg83zFyeFPowIzF7WdYVO6yRK7l+Kkick/cvALOj5XzRHyxrsb8VfJMpzHrPwsLV0RcGRT18BPMw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rspack/binding-win32-arm64-msvc": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.10.tgz",
+ "integrity": "sha512-J2fCPYgiPyLo4pGZMHT72lGHK05puBYJzpCR8CmVCk+ktkhVcao9cA2BUT3Gr3UG2PPxfBFsDDmjA/FsUEdxrg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rspack/binding-win32-ia32-msvc": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.0.10.tgz",
+ "integrity": "sha512-DQeGQgFS3jv+krfvp9dAKubGbY98nmsmf3ZeobyAnvq+AFDoVyOKImGp/GvZoCTr6jToFoz9+pPYbQyf15lw+g==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rspack/binding-win32-x64-msvc": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.10.tgz",
+ "integrity": "sha512-1ad9SONsqp6XXxrCHsClnThW7BOrK5PWWslY+J3G0sHsXztSz/s9/CDRXUyJ8vuolpIy10E1Kyk1aV9y+IMs+g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rspack/cli": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/cli/-/cli-1.0.10.tgz",
+ "integrity": "sha512-vlDIB8DAJDXUgqwinmWzH3S++FVcHX10hXhLj5JsjY0NWWQ7sj3e6spAlh0WxNmLAFHqhvOk5e5Mpo8Alf5waQ==",
+ "dev": true,
+ "dependencies": {
+ "@discoveryjs/json-ext": "^0.5.7",
+ "@rspack/dev-server": "1.0.5",
+ "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"
+ },
+ "bin": {
+ "rspack": "bin/rspack"
+ },
+ "peerDependencies": {
+ "@rspack/core": "^1.0.0-alpha || ^1.x"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@rspack/cli/node_modules/colorette": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
+ "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
+ "dev": true
+ },
+ "node_modules/@rspack/cli/node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/sirv": {
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz",
+ "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==",
+ "dev": true,
+ "dependencies": {
+ "@polka/url": "^1.0.0-next.20",
+ "mrmime": "^1.0.0",
+ "totalist": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/totalist": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz",
+ "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/webpack-bundle-analyzer": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.6.1.tgz",
+ "integrity": "sha512-oKz9Oz9j3rUciLNfpGFjOb49/jEpXNmWdVH8Ls//zNcnLlQdTGXQQMsBbb/gR7Zl8WNLxVCq+0Hqbx3zv6twBw==",
+ "dev": true,
+ "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"
+ },
+ "bin": {
+ "webpack-bundle-analyzer": "lib/bin/analyzer.js"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/ws": {
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.3.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": "^5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rspack/cli/node_modules/yargs": {
+ "version": "17.6.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz",
+ "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@rspack/core": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.0.10.tgz",
+ "integrity": "sha512-Jvj6mzf/aFN3c2E+Lu+3dSz6df2pd79/XOLN9ElA7PIjVua4lVt+dUtrTXqVgoAjaKhZJrIt2WXALYdmv4kkVA==",
+ "dev": true,
+ "dependencies": {
+ "@module-federation/runtime-tools": "0.5.1",
+ "@rspack/binding": "1.0.10",
+ "@rspack/lite-tapable": "1.0.1",
+ "caniuse-lite": "^1.0.30001616"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "peerDependencies": {
+ "@swc/helpers": ">=0.5.1"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rspack/dev-server": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.0.5.tgz",
+ "integrity": "sha512-S1o1j9adjqNCiSWrIv1vmVHQPXFvcBa9JvPWIGxGjei72ejz0zvO6Fd948UkRlDgCPIoY4Cy+g1GLmBkJT5MKA==",
+ "dev": true,
+ "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",
+ "p-retry": "4.6.2",
+ "webpack-dev-middleware": "^7.4.2",
+ "webpack-dev-server": "5.0.4",
+ "ws": "^8.16.0"
+ },
+ "peerDependencies": {
+ "@rspack/core": "*"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/@types/express": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
+ "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.33",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/@types/express-serve-static-core": {
+ "version": "4.19.6",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
+ "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/@types/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
+ "dev": true
+ },
+ "node_modules/@rspack/dev-server/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/http-proxy-middleware": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+ "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
+ "dev": true,
+ "dependencies": {
+ "@types/http-proxy": "^1.17.8",
+ "http-proxy": "^1.18.1",
+ "is-glob": "^4.0.1",
+ "is-plain-obj": "^3.0.0",
+ "micromatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "@types/express": "^4.17.13"
+ },
+ "peerDependenciesMeta": {
+ "@types/express": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/ipaddr.js": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz",
+ "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/is-plain-obj": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
+ "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
+ "node_modules/@rspack/dev-server/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/p-retry": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz",
+ "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/retry": "0.12.0",
+ "retry": "^0.13.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/rimraf": {
+ "version": "5.0.10",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
+ "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^10.3.7"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/schema-utils": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
+ "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/webpack-dev-server": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz",
+ "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==",
+ "dev": true,
+ "dependencies": {
+ "@types/bonjour": "^3.5.13",
+ "@types/connect-history-api-fallback": "^1.5.4",
+ "@types/express": "^4.17.21",
+ "@types/serve-index": "^1.9.4",
+ "@types/serve-static": "^1.15.5",
+ "@types/sockjs": "^0.3.36",
+ "@types/ws": "^8.5.10",
+ "ansi-html-community": "^0.0.8",
+ "bonjour-service": "^1.2.1",
+ "chokidar": "^3.6.0",
+ "colorette": "^2.0.10",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^2.0.0",
+ "default-gateway": "^6.0.3",
+ "express": "^4.17.3",
+ "graceful-fs": "^4.2.6",
+ "html-entities": "^2.4.0",
+ "http-proxy-middleware": "^2.0.3",
+ "ipaddr.js": "^2.1.0",
+ "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"
+ },
+ "bin": {
+ "webpack-dev-server": "bin/webpack-dev-server.js"
+ },
+ "engines": {
+ "node": ">= 18.12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "webpack": {
+ "optional": true
+ },
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rspack/dev-server/node_modules/webpack-dev-server/node_modules/@types/retry": {
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz",
+ "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==",
+ "dev": true
+ },
+ "node_modules/@rspack/dev-server/node_modules/webpack-dev-server/node_modules/p-retry": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz",
+ "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==",
+ "dev": true,
+ "dependencies": {
+ "@types/retry": "0.12.2",
+ "is-network-error": "^1.0.0",
+ "retry": "^0.13.1"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@rspack/lite-tapable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz",
+ "integrity": "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==",
+ "dev": true,
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@rspack/plugin-react-refresh": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@rspack/plugin-react-refresh/-/plugin-react-refresh-1.0.0.tgz",
+ "integrity": "sha512-WvXkLewW5G0Mlo5H1b251yDh5FFiH4NDAbYlFpvFjcuXX2AchZRf9zdw57BDE/ADyWsJgA8kixN/zZWBTN3iYA==",
+ "dev": true,
+ "dependencies": {
+ "error-stack-parser": "^2.0.6",
+ "html-entities": "^2.1.0"
+ },
+ "peerDependencies": {
+ "react-refresh": ">=0.10.0 <1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react-refresh": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@sideway/address": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
+ "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==",
+ "dev": true,
+ "dependencies": {
+ "@hapi/hoek": "^9.0.0"
+ }
},
"node_modules/@sideway/formula": {
"version": "3.0.1",
@@ -3809,14 +4727,14 @@
}
},
"node_modules/@swc/core": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.26.tgz",
- "integrity": "sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.35.tgz",
+ "integrity": "sha512-3cUteCTbr2r5jqfgx0r091sfq5Mgh6F1SQh8XAOnSvtKzwv2bC31mvBHVAieD1uPa2kHJhLav20DQgXOhpEitw==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
"@swc/counter": "^0.1.3",
- "@swc/types": "^0.1.12"
+ "@swc/types": "^0.1.13"
},
"engines": {
"node": ">=10"
@@ -3826,16 +4744,16 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
- "@swc/core-darwin-arm64": "1.7.26",
- "@swc/core-darwin-x64": "1.7.26",
- "@swc/core-linux-arm-gnueabihf": "1.7.26",
- "@swc/core-linux-arm64-gnu": "1.7.26",
- "@swc/core-linux-arm64-musl": "1.7.26",
- "@swc/core-linux-x64-gnu": "1.7.26",
- "@swc/core-linux-x64-musl": "1.7.26",
- "@swc/core-win32-arm64-msvc": "1.7.26",
- "@swc/core-win32-ia32-msvc": "1.7.26",
- "@swc/core-win32-x64-msvc": "1.7.26"
+ "@swc/core-darwin-arm64": "1.7.35",
+ "@swc/core-darwin-x64": "1.7.35",
+ "@swc/core-linux-arm-gnueabihf": "1.7.35",
+ "@swc/core-linux-arm64-gnu": "1.7.35",
+ "@swc/core-linux-arm64-musl": "1.7.35",
+ "@swc/core-linux-x64-gnu": "1.7.35",
+ "@swc/core-linux-x64-musl": "1.7.35",
+ "@swc/core-win32-arm64-msvc": "1.7.35",
+ "@swc/core-win32-ia32-msvc": "1.7.35",
+ "@swc/core-win32-x64-msvc": "1.7.35"
},
"peerDependencies": {
"@swc/helpers": "*"
@@ -3847,9 +4765,9 @@
}
},
"node_modules/@swc/core-darwin-arm64": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz",
- "integrity": "sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.35.tgz",
+ "integrity": "sha512-BQSSozVxjxS+SVQz6e3GC/+OBWGIK3jfe52pWdANmycdjF3ch7lrCKTHTU7eHwyoJ96mofszPf5AsiVJF34Fwg==",
"cpu": [
"arm64"
],
@@ -3863,9 +4781,9 @@
}
},
"node_modules/@swc/core-darwin-x64": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz",
- "integrity": "sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.35.tgz",
+ "integrity": "sha512-44TYdKN/EWtkU88foXR7IGki9JzhEJzaFOoPevfi9Xe7hjAD/x2+AJOWWqQNzDPMz9+QewLdUVLyR6s5okRgtg==",
"cpu": [
"x64"
],
@@ -3879,9 +4797,9 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz",
- "integrity": "sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.35.tgz",
+ "integrity": "sha512-ccfA5h3zxwioD+/z/AmYtkwtKz9m4rWTV7RoHq6Jfsb0cXHrd6tbcvgqRWXra1kASlE+cDWsMtEZygs9dJRtUQ==",
"cpu": [
"arm"
],
@@ -3895,9 +4813,9 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz",
- "integrity": "sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.35.tgz",
+ "integrity": "sha512-hx65Qz+G4iG/IVtxJKewC5SJdki8PAPFGl6gC/57Jb0+jA4BIoGLD/J3Q3rCPeoHfdqpkCYpahtyUq8CKx41Jg==",
"cpu": [
"arm64"
],
@@ -3911,9 +4829,9 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz",
- "integrity": "sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.35.tgz",
+ "integrity": "sha512-kL6tQL9No7UEoEvDRuPxzPTpxrvbwYteNRbdChSSP74j13/55G2/2hLmult5yFFaWuyoyU/2lvzjRL/i8OLZxg==",
"cpu": [
"arm64"
],
@@ -3927,9 +4845,9 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz",
- "integrity": "sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.35.tgz",
+ "integrity": "sha512-Ke4rcLQSwCQ2LHdJX1FtnqmYNQ3IX6BddKlUtS7mcK13IHkQzZWp0Dcu6MgNA3twzb/dBpKX5GLy07XdGgfmyw==",
"cpu": [
"x64"
],
@@ -3943,9 +4861,9 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz",
- "integrity": "sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.35.tgz",
+ "integrity": "sha512-T30tlLnz0kYyDFyO5RQF5EQ4ENjW9+b56hEGgFUYmfhFhGA4E4V67iEx7KIG4u0whdPG7oy3qjyyIeTb7nElEw==",
"cpu": [
"x64"
],
@@ -3959,9 +4877,9 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz",
- "integrity": "sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.35.tgz",
+ "integrity": "sha512-CfM/k8mvtuMyX+okRhemfLt784PLS0KF7Q9djA8/Dtavk0L5Ghnq+XsGltO3d8B8+XZ7YOITsB14CrjehzeHsg==",
"cpu": [
"arm64"
],
@@ -3975,9 +4893,9 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz",
- "integrity": "sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.35.tgz",
+ "integrity": "sha512-ATB3uuH8j/RmS64EXQZJSbo2WXfRNpTnQszHME/sGaexsuxeijrp3DTYSFAA3R2Bu6HbIIX6jempe1Au8I3j+A==",
"cpu": [
"ia32"
],
@@ -3991,9 +4909,9 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.7.26",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.26.tgz",
- "integrity": "sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==",
+ "version": "1.7.35",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.35.tgz",
+ "integrity": "sha512-iDGfQO1571NqWUXtLYDhwIELA/wadH42ioGn+J9R336nWx40YICzy9UQyslWRhqzhQ5kT+QXAW/MoCWc058N6Q==",
"cpu": [
"x64"
],
@@ -4013,9 +4931,9 @@
"dev": true
},
"node_modules/@swc/types": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz",
- "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==",
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.13.tgz",
+ "integrity": "sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==",
"dev": true,
"dependencies": {
"@swc/counter": "^0.1.3"
@@ -4758,9 +5676,9 @@
}
},
"node_modules/@types/react-dom": {
- "version": "18.3.0",
- "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
- "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==",
"dev": true,
"dependencies": {
"@types/react": "*"
@@ -4796,12 +5714,6 @@
"@types/react-router": "*"
}
},
- "node_modules/@types/retry": {
- "version": "0.12.2",
- "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz",
- "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==",
- "dev": true
- },
"node_modules/@types/semver": {
"version": "7.5.6",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
@@ -5428,62 +6340,18 @@
"@webassemblyjs/ast": "1.12.1",
"@webassemblyjs/helper-api-error": "1.11.6",
"@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
- }
- },
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
- "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
- "dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webpack-cli/configtest": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
- "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
- "dev": true,
- "engines": {
- "node": ">=14.15.0"
- },
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
- }
- },
- "node_modules/@webpack-cli/info": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
- "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
- "dev": true,
- "engines": {
- "node": ">=14.15.0"
- },
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
}
},
- "node_modules/@webpack-cli/serve": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
- "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
- "dev": true,
- "engines": {
- "node": ">=14.15.0"
- },
- "peerDependencies": {
- "webpack": "5.x.x",
- "webpack-cli": "5.x.x"
- },
- "peerDependenciesMeta": {
- "webpack-dev-server": {
- "optional": true
- }
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
+ "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
+ "dependencies": {
+ "@webassemblyjs/ast": "1.12.1",
+ "@xtuc/long": "4.2.2"
}
},
"node_modules/@wry/caches": {
@@ -5640,6 +6508,23 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependencies": {
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
"node_modules/ajv-keywords": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
@@ -5679,18 +6564,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/ansi-html": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz",
- "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==",
- "dev": true,
- "engines": [
- "node >= 0.8.0"
- ],
- "bin": {
- "ansi-html": "bin/ansi-html"
- }
- },
"node_modules/ansi-html-community": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
@@ -6460,9 +7333,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001566",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz",
- "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==",
+ "version": "1.0.30001667",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz",
+ "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==",
"funding": [
{
"type": "opencollective",
@@ -6607,32 +7480,6 @@
"node": ">=12"
}
},
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/clone-deep/node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -6861,23 +7708,6 @@
"webpack": "^5.1.0"
}
},
- "node_modules/copy-webpack-plugin/node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dev": true,
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
"node_modules/copy-webpack-plugin/node_modules/schema-utils": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
@@ -6921,17 +7751,6 @@
"url": "https://opencollective.com/core-js"
}
},
- "node_modules/core-js-pure": {
- "version": "3.38.1",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz",
- "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==",
- "dev": true,
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -7102,9 +7921,9 @@
}
},
"node_modules/css-functions-list": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz",
- "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
+ "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
"dev": true,
"engines": {
"node": ">=12 || >=16"
@@ -7355,6 +8174,31 @@
"node": ">=12"
}
},
+ "node_modules/data-urls/node_modules/tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/data-urls/node_modules/whatwg-url": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
@@ -7362,12 +8206,12 @@
"dev": true
},
"node_modules/debug": {
- "version": "4.3.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
- "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
"dev": true,
"dependencies": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@@ -7473,6 +8317,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/default-gateway": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
+ "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^5.0.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
"node_modules/define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -7557,6 +8413,18 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
+ "node_modules/detect-libc": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+ "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+ "dev": true,
+ "bin": {
+ "detect-libc": "bin/detect-libc.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -7847,18 +8715,6 @@
"node": ">=6"
}
},
- "node_modules/envinfo": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
- "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
- "dev": true,
- "bin": {
- "envinfo": "dist/cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/errno": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
@@ -8829,6 +9685,18 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/exit-hook": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-3.2.0.tgz",
+ "integrity": "sha512-aIQN7Q04HGAV/I5BszisuHTZHXNoC23WtLkxdCLuYZMdWviRD0TMIt2bnUBi9MrHaF/hH8b3gwG9iaAUHKnJGA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/expect": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
@@ -9130,15 +9998,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
- },
"node_modules/flat-cache": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
@@ -10806,15 +11665,6 @@
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true
},
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/istanbul-lib-coverage": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
@@ -13111,6 +13961,31 @@
}
}
},
+ "node_modules/jsdom/node_modules/tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/jsdom/node_modules/whatwg-url": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -13740,23 +14615,6 @@
"webpack": "^5.0.0"
}
},
- "node_modules/mini-css-extract-plugin/node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dev": true,
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
"node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
@@ -13822,9 +14680,9 @@
}
},
"node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
"node_modules/multicast-dns": {
@@ -13935,6 +14793,12 @@
"integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
"dev": true
},
+ "node_modules/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "dev": true
+ },
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
@@ -13954,6 +14818,25 @@
}
}
},
+ "node_modules/node-fetch/node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/node-fetch/node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/node-fetch/node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
"node_modules/node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
@@ -14515,23 +15398,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-retry": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz",
- "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==",
- "dev": true,
- "dependencies": {
- "@types/retry": "0.12.2",
- "is-network-error": "^1.0.0",
- "retry": "^0.13.1"
- },
- "engines": {
- "node": ">=16.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -15049,9 +15915,9 @@
"dev": true
},
"node_modules/postcss-safe-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz",
- "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
+ "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
"dev": true,
"funding": [
{
@@ -15477,17 +16343,16 @@
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
"integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
"dev": true,
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-router": {
- "version": "6.26.2",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz",
- "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==",
+ "version": "6.27.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz",
+ "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==",
"dependencies": {
- "@remix-run/router": "1.19.2"
+ "@remix-run/router": "1.20.0"
},
"engines": {
"node": ">=14.0.0"
@@ -15497,12 +16362,12 @@
}
},
"node_modules/react-router-dom": {
- "version": "6.26.2",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz",
- "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==",
+ "version": "6.27.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz",
+ "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==",
"dependencies": {
- "@remix-run/router": "1.19.2",
- "react-router": "6.26.2"
+ "@remix-run/router": "1.20.0",
+ "react-router": "6.27.0"
},
"engines": {
"node": ">=14.0.0"
@@ -16015,11 +16880,12 @@
"dev": true
},
"node_modules/sass": {
- "version": "1.79.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.4.tgz",
- "integrity": "sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==",
+ "version": "1.79.5",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.5.tgz",
+ "integrity": "sha512-W1h5kp6bdhqFh2tk3DsI771MoEJjvrSY/2ihJRJS4pjIyfJCw0nTsxqhnrUzaLMOJjFchj8rOvraI/YUVjtx5g==",
"dev": true,
"dependencies": {
+ "@parcel/watcher": "^2.4.1",
"chokidar": "^4.0.0",
"immutable": "^4.0.0",
"source-map-js": ">=0.6.2 <2.0.0"
@@ -16245,12 +17111,6 @@
"node": ">= 0.8"
}
},
- "node_modules/send/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
"node_modules/serialize-javascript": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
@@ -16389,18 +17249,6 @@
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"dev": true
},
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/shallowequal": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
@@ -17167,9 +18015,9 @@
}
},
"node_modules/stylelint": {
- "version": "16.9.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.9.0.tgz",
- "integrity": "sha512-31Nm3WjxGOBGpQqF43o3wO9L5AC36TPIe6030Lnm13H3vDMTcS21DrLh69bMX+DBilKqMMVLian4iG6ybBoNRQ==",
+ "version": "16.10.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.10.0.tgz",
+ "integrity": "sha512-z/8X2rZ52dt2c0stVwI9QL2AFJhLhbPkyfpDFcizs200V/g7v+UYY6SNcB9hKOLcDDX/yGLDsY/pX08sLkz9xQ==",
"dev": true,
"funding": [
{
@@ -17190,17 +18038,17 @@
"balanced-match": "^2.0.0",
"colord": "^2.9.3",
"cosmiconfig": "^9.0.0",
- "css-functions-list": "^3.2.2",
- "css-tree": "^2.3.1",
- "debug": "^4.3.6",
+ "css-functions-list": "^3.2.3",
+ "css-tree": "^3.0.0",
+ "debug": "^4.3.7",
"fast-glob": "^3.3.2",
"fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^9.0.0",
+ "file-entry-cache": "^9.1.0",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.3.1",
- "ignore": "^5.3.2",
+ "ignore": "^6.0.2",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
"known-css-properties": "^0.34.0",
@@ -17209,14 +18057,13 @@
"micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
"picocolors": "^1.0.1",
- "postcss": "^8.4.41",
+ "postcss": "^8.4.47",
"postcss-resolve-nested-selector": "^0.1.6",
- "postcss-safe-parser": "^7.0.0",
+ "postcss-safe-parser": "^7.0.1",
"postcss-selector-parser": "^6.1.2",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
"string-width": "^4.2.3",
- "strip-ansi": "^7.1.0",
"supports-hyperlinks": "^3.1.0",
"svg-tags": "^1.0.0",
"table": "^6.8.2",
@@ -17366,18 +18213,6 @@
"postcss": "^8.4.20"
}
},
- "node_modules/stylelint/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
"node_modules/stylelint/node_modules/balanced-match": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
@@ -17411,12 +18246,12 @@
}
},
"node_modules/stylelint/node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.0.0.tgz",
+ "integrity": "sha512-o88DVQ6GzsABn1+6+zo2ct801dBO5OASVyxbbvA2W20ue2puSh/VOuqUj90eUeMSX/xqGqBmOKiRQN7tJOuBXw==",
"dev": true,
"dependencies": {
- "mdn-data": "2.0.30",
+ "mdn-data": "2.10.0",
"source-map-js": "^1.0.1"
},
"engines": {
@@ -17424,9 +18259,9 @@
}
},
"node_modules/stylelint/node_modules/file-entry-cache": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz",
- "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz",
+ "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==",
"dev": true,
"dependencies": {
"flat-cache": "^5.0.0"
@@ -17462,10 +18297,28 @@
"slash": "^3.0.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stylelint/node_modules/globby/node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/stylelint/node_modules/ignore": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
+ "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
}
},
"node_modules/stylelint/node_modules/known-css-properties": {
@@ -17475,9 +18328,9 @@
"dev": true
},
"node_modules/stylelint/node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.10.0.tgz",
+ "integrity": "sha512-qq7C3EtK3yJXMwz1zAab65pjl+UhohqMOctTgcqjLOWABqmwj+me02LSsCuEUxnst9X1lCBpoE0WArGKgdGDzw==",
"dev": true
},
"node_modules/stylelint/node_modules/resolve-from": {
@@ -17510,21 +18363,6 @@
"node": ">=8"
}
},
- "node_modules/stylelint/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
"node_modules/stylelint/node_modules/write-file-atomic": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
@@ -18061,17 +18899,6 @@
"node": ">= 4.0.0"
}
},
- "node_modules/tr46": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
- "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
- "dependencies": {
- "punycode": "^2.3.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/ts-invariant": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz",
@@ -18143,15 +18970,6 @@
"node": ">=10"
}
},
- "node_modules/ts-jest/node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/ts-loader": {
"version": "9.5.1",
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz",
@@ -18506,9 +19324,9 @@
}
},
"node_modules/typescript": {
- "version": "5.6.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
- "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -18852,6 +19670,7 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "dev": true,
"engines": {
"node": ">=12"
}
@@ -18969,60 +19788,6 @@
}
}
},
- "node_modules/webpack-cli": {
- "version": "5.1.4",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
- "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
- "dev": true,
- "dependencies": {
- "@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^2.1.1",
- "@webpack-cli/info": "^2.0.2",
- "@webpack-cli/serve": "^2.0.5",
- "colorette": "^2.0.14",
- "commander": "^10.0.1",
- "cross-spawn": "^7.0.3",
- "envinfo": "^7.7.3",
- "fastest-levenshtein": "^1.0.12",
- "import-local": "^3.0.2",
- "interpret": "^3.1.1",
- "rechoir": "^0.8.0",
- "webpack-merge": "^5.7.3"
- },
- "bin": {
- "webpack-cli": "bin/cli.js"
- },
- "engines": {
- "node": ">=14.15.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "5.x.x"
- },
- "peerDependenciesMeta": {
- "@webpack-cli/generators": {
- "optional": true
- },
- "webpack-bundle-analyzer": {
- "optional": true
- },
- "webpack-dev-server": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-cli/node_modules/commander": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
- "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
- "dev": true,
- "engines": {
- "node": ">=14"
- }
- },
"node_modules/webpack-dev-middleware": {
"version": "7.4.2",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz",
@@ -19052,23 +19817,6 @@
}
}
},
- "node_modules/webpack-dev-middleware/node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dev": true,
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
"node_modules/webpack-dev-middleware/node_modules/memfs": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/memfs/-/memfs-4.6.0.tgz",
@@ -19108,168 +19856,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/webpack-dev-server": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.1.0.tgz",
- "integrity": "sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==",
- "dev": true,
- "dependencies": {
- "@types/bonjour": "^3.5.13",
- "@types/connect-history-api-fallback": "^1.5.4",
- "@types/express": "^4.17.21",
- "@types/serve-index": "^1.9.4",
- "@types/serve-static": "^1.15.5",
- "@types/sockjs": "^0.3.36",
- "@types/ws": "^8.5.10",
- "ansi-html-community": "^0.0.8",
- "bonjour-service": "^1.2.1",
- "chokidar": "^3.6.0",
- "colorette": "^2.0.10",
- "compression": "^1.7.4",
- "connect-history-api-fallback": "^2.0.0",
- "express": "^4.19.2",
- "graceful-fs": "^4.2.6",
- "html-entities": "^2.4.0",
- "http-proxy-middleware": "^2.0.3",
- "ipaddr.js": "^2.1.0",
- "launch-editor": "^2.6.1",
- "open": "^10.0.3",
- "p-retry": "^6.2.0",
- "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.4.2",
- "ws": "^8.18.0"
- },
- "bin": {
- "webpack-dev-server": "bin/webpack-dev-server.js"
- },
- "engines": {
- "node": ">= 18.12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^5.0.0"
- },
- "peerDependenciesMeta": {
- "webpack": {
- "optional": true
- },
- "webpack-cli": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-dev-server/node_modules/@types/express": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
- "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
- "dev": true,
- "dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^4.17.33",
- "@types/qs": "*",
- "@types/serve-static": "*"
- }
- },
- "node_modules/webpack-dev-server/node_modules/@types/express-serve-static-core": {
- "version": "4.19.6",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz",
- "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
- }
- },
- "node_modules/webpack-dev-server/node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dev": true,
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
- "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
- "dev": true,
- "dependencies": {
- "@types/http-proxy": "^1.17.8",
- "http-proxy": "^1.18.1",
- "is-glob": "^4.0.1",
- "is-plain-obj": "^3.0.0",
- "micromatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "@types/express": "^4.17.13"
- },
- "peerDependenciesMeta": {
- "@types/express": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-dev-server/node_modules/ipaddr.js": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz",
- "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==",
- "dev": true,
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/webpack-dev-server/node_modules/is-plain-obj": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
- "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/webpack-dev-server/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/webpack-hot-middleware": {
"version": "2.26.1",
"resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz",
@@ -19281,20 +19867,6 @@
"strip-ansi": "^6.0.0"
}
},
- "node_modules/webpack-merge": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
- "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
- "dev": true,
- "dependencies": {
- "clone-deep": "^4.0.1",
- "flat": "^5.0.2",
- "wildcard": "^2.0.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
"node_modules/webpack-node-externals": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz",
@@ -19387,18 +19959,6 @@
"node": ">=12"
}
},
- "node_modules/whatwg-url": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
- "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
- "dependencies": {
- "tr46": "^5.0.0",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -19490,12 +20050,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/wildcard": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
- "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
- "dev": true
- },
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -19703,7 +20257,7 @@
"node": ">=12"
}
},
- "node_modules/yargs/node_modules/yargs-parser": {
+ "node_modules/yargs-parser": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
diff --git a/package.json b/package.json
index 5fee981..c525acb 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "react-proto",
- "version": "1.6.2",
+ "version": "2.0.0",
"description": "React TypeScript Boilerplate",
"author": "Max L Stop&Go",
"license": "ISC",
@@ -10,15 +10,15 @@
],
"scripts": {
"clean": "rimraf dist",
- "start:webpack": "cross-env NODE_ENV=development webpack --mode=development",
+ "start:rspack": "cross-env NODE_ENV=development rspack --mode=development",
"start:server": "wait-on dist/server.js && node dist/server.js",
- "dev": "npm run clean && npm-run-all --print-label --parallel start:webpack start:server",
+ "dev": "npm run clean && npm-run-all --print-label --parallel start:rspack start:server",
"start": "nodemon --exec npm run dev --watch src/server --ext ts,tsx,json ",
- "build": "npm run clean && cross-env NODE_ENV=production webpack --mode production",
+ "build": "npm run clean && cross-env NODE_ENV=production rspack --mode=production",
"build:report": "npm run build --withReport",
"run": "node dist/server.js",
- "start:static": "npm run clean && cross-env NODE_ENV=development NO_SSR=true webpack serve --mode development --open",
- "build:static": "npm run clean && cross-env NODE_ENV=production NO_SSR=true webpack --mode production",
+ "start:static": "npm run clean && cross-env NODE_ENV=development NO_SSR=true rspack serve --mode=development",
+ "build:static": "npm run clean && cross-env NODE_ENV=production NO_SSR=true rspack --mode=production",
"build:static:report": "npm run build:static --withReport",
"prettier": "prettier \"src/**/*\" --write --single-quote --no-semi --ignore-unknown --trailing-comma none --jsx-single-quote",
"lint": "ts-standard . && stylelint **/*.{css,scss}",
@@ -27,9 +27,11 @@
"add-comp": "node scripts/add-comp.js"
},
"devDependencies": {
- "@pmmmwh/react-refresh-webpack-plugin": "0.5.15",
+ "@rspack/cli": "1.0.10",
+ "@rspack/core": "1.0.10",
+ "@rspack/plugin-react-refresh": "1.0.0",
"@svgr/webpack": "8.1.0",
- "@swc/core": "1.7.26",
+ "@swc/core": "1.7.35",
"@testing-library/jest-dom": "6.5.0",
"@testing-library/preact": "3.2.4",
"@testing-library/react": "16.0.1",
@@ -42,7 +44,7 @@
"@types/loadable__server": "5.12.11",
"@types/node": "22.7.5",
"@types/react": "18.3.11",
- "@types/react-dom": "18.3.0",
+ "@types/react-dom": "18.3.1",
"@types/react-helmet": "6.1.11",
"@types/react-router-dom": "5.3.3",
"@types/serialize-javascript": "5.0.4",
@@ -68,10 +70,11 @@
"postcss": "8.4.47",
"postcss-scss": "4.0.9",
"prettier": "3.3.3",
+ "react-refresh": "0.14.2",
"rimraf": "6.0.1",
- "sass": "1.79.4",
+ "sass": "1.79.5",
"sass-loader": "16.0.2",
- "stylelint": "16.9.0",
+ "stylelint": "16.10.0",
"stylelint-config-clean-order": "6.1.0",
"stylelint-config-standard-scss": "13.1.0",
"swc-loader": "0.2.6",
@@ -79,14 +82,11 @@
"ts-loader": "9.5.1",
"ts-node": "10.9.2",
"ts-standard": "12.0.2",
- "typescript": "5.6.2",
+ "typescript": "5.6.3",
"typescript-plugin-css-modules": "5.1.0",
"wait-on": "8.0.1",
- "webpack": "5.95.0",
"webpack-bundle-analyzer": "4.10.2",
- "webpack-cli": "5.1.4",
"webpack-dev-middleware": "7.4.2",
- "webpack-dev-server": "5.1.0",
"webpack-hot-middleware": "2.26.1",
"webpack-node-externals": "3.0.0"
},
@@ -106,10 +106,7 @@
"react-dom": "18.3.1",
"react-helmet-async": "2.0.5",
"react-redux": "9.1.2",
- "react-router-dom": "6.26.2",
+ "react-router-dom": "6.27.0",
"serialize-javascript": "6.0.2"
- },
- "overrides": {
- "whatwg-url": "14.0.0"
}
}
diff --git a/rspack.config.ts b/rspack.config.ts
new file mode 100644
index 0000000..854a660
--- /dev/null
+++ b/rspack.config.ts
@@ -0,0 +1,18 @@
+import { IS_DEV } from './rspack/constants'
+
+import { clientConfig } from './rspack/client.config'
+import { serverConfig } from './rspack/server.config'
+
+const configs = []
+
+if (process.env.NO_SSR === 'true') {
+ configs.push(clientConfig)
+} else {
+ configs.push(serverConfig)
+
+ if (!IS_DEV) {
+ configs.push(clientConfig)
+ }
+}
+
+module.exports = configs
diff --git a/rspack/client.config.ts b/rspack/client.config.ts
new file mode 100644
index 0000000..337ca88
--- /dev/null
+++ b/rspack/client.config.ts
@@ -0,0 +1,121 @@
+import path from 'path'
+
+import {
+ Configuration,
+ WebpackPluginInstance,
+ HotModuleReplacementPlugin,
+ CopyRspackPlugin,
+ CssExtractRspackPlugin,
+ HtmlRspackPlugin,
+ DefinePlugin
+} from '@rspack/core'
+
+import ReactRefreshPlugin from '@rspack/plugin-react-refresh'
+import CssoWebpackPlugin from 'csso-webpack-plugin'
+import LoadablePlugin from '@loadable/webpack-plugin'
+import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'
+import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'
+
+import { ALIAS, DEV_SERVER_PORT, DIST_DIR, IS_DEV, IS_LAZY_COMPILATION, SRC_DIR } from './constants'
+import * as Loaders from './loaders'
+
+const withReport = Boolean(process.env.npm_config_withReport)
+
+const entry: string[] = [
+ path.resolve(SRC_DIR, 'index.tsx'),
+ ...(IS_DEV
+ ? [
+ ...(process.env.NO_SSR === 'true'
+ ? []
+ : ['webpack-hot-middleware/client']),
+ 'css-hot-loader/hotModuleReplacement'
+ ]
+ : [])
+]
+
+const filename = (ext: string): string =>
+ IS_DEV ? `[name].${ext}` : `[name].[chunkhash].${ext}`
+
+const plugins: WebpackPluginInstance[] = [
+ new DefinePlugin({
+ NO_SSR: process.env.NO_SSR === 'true'
+ }),
+ ...(process.env.NO_SSR === 'true'
+ ? [
+ new HtmlRspackPlugin({
+ title: 'My App',
+ template: './src/assets/index.html'
+ })
+ ]
+ : []),
+ new ForkTsCheckerWebpackPlugin(),
+ new CssExtractRspackPlugin({
+ filename: IS_DEV ? '[name].css' : '[name].[contenthash].css'
+ }),
+ new LoadablePlugin({
+ filename: 'stats.json',
+ writeToDisk: true
+ }) as { apply: () => void },
+ ...(IS_DEV
+ ? [new HotModuleReplacementPlugin(), new ReactRefreshPlugin()]
+ : [
+ new CssoWebpackPlugin(),
+ new BundleAnalyzerPlugin({
+ analyzerMode: withReport ? 'server' : 'disabled'
+ })
+ ]),
+ new CopyRspackPlugin({
+ patterns: [
+ { from: `${SRC_DIR}/i18n/translations`, to: 'lang' },
+ ...(process.env.NO_SSR === 'true'
+ ? [{ from: `${SRC_DIR}/sw.js`, to: 'sw.js' }]
+ : [])
+ ]
+ })
+]
+
+const clientConfig: Configuration = {
+ name: 'client',
+ target: 'web',
+ entry,
+ plugins,
+ output: {
+ path: DIST_DIR,
+ filename: filename('js'),
+ publicPath: '/'
+ },
+ devtool: IS_DEV ? 'source-map' : false,
+ resolve: {
+ alias: ALIAS,
+ extensions: ['.tsx', '.ts', '.js', '.scss', '.css'],
+ fallback: {
+ url: false,
+ path: false
+ }
+ },
+ module: {
+ rules: Object.values(Loaders).map((el) => el.client)
+ },
+ ...(process.env.NO_SSR === 'true' && {
+ devServer: {
+ historyApiFallback: true,
+ port: DEV_SERVER_PORT
+ }
+ }),
+ optimization: {
+ splitChunks: {
+ cacheGroups: {
+ vendor: {
+ name: 'vendors',
+ test: /[\\/]node_modules[\\/]/,
+ chunks: 'all'
+ }
+ }
+ }
+ },
+ experiments: {
+ lazyCompilation: IS_LAZY_COMPILATION
+ }
+}
+
+export { clientConfig }
diff --git a/rspack/constants.ts b/rspack/constants.ts
new file mode 100644
index 0000000..9c38cfb
--- /dev/null
+++ b/rspack/constants.ts
@@ -0,0 +1,58 @@
+import path from 'path'
+
+const IS_DEV: boolean = String(process.env.NODE_ENV).trim() === 'development'
+
+/*
+Hot Preact reload is not working with rspack here (needs additional complex configuration),
+so it is possible to develop with React and then, if you need, to build with Preact
+*/
+const IS_PREACT: boolean = false
+const IS_LAZY_COMPILATION = false
+const DEV_SERVER_PORT: number = 8080
+
+const SRC_DIR: string = path.join(__dirname, '../src')
+const DIST_DIR: string = path.join(__dirname, '../dist')
+const SERVER_SRC_DIR: string = path.join(__dirname, '../src/server')
+
+const SERVER_BUNDLE_NAME: string = 'server'
+
+const ALIAS: Record = {
+ api: `${SRC_DIR}/api`,
+ assets: `${SRC_DIR}/assets`,
+ components: `${SRC_DIR}/components`,
+ constants: `${SRC_DIR}/constants`,
+ images: `${SRC_DIR}/assets/images`,
+ hocs: `${SRC_DIR}/hocs`,
+ hooks: `${SRC_DIR}/hooks`,
+ pages: `${SRC_DIR}/pages`,
+ router: `${SRC_DIR}/router`,
+ i18n: `${SRC_DIR}/i18n`,
+ server: `${SRC_DIR}/server`,
+ src: `${SRC_DIR}`,
+ style: `${SRC_DIR}/style`,
+ store: `${SRC_DIR}/store`,
+ types: `${SRC_DIR}/types`,
+ utils: `${SRC_DIR}/utils`,
+ rspack: path.join(__dirname, '../rspack')
+}
+
+if (IS_PREACT) {
+ Object.assign(ALIAS, {
+ react: 'preact/compat',
+ 'react-dom': 'preact/compat',
+ 'react-dom/test-utils': 'preact/test-utils',
+ '@testing-library/react': '@testing-library/preact'
+ })
+}
+
+export {
+ ALIAS,
+ DEV_SERVER_PORT,
+ DIST_DIR,
+ IS_DEV,
+ IS_PREACT,
+ IS_LAZY_COMPILATION,
+ SERVER_BUNDLE_NAME,
+ SERVER_SRC_DIR,
+ SRC_DIR
+}
diff --git a/rspack/loaders/font.ts b/rspack/loaders/font.ts
new file mode 100644
index 0000000..f5887cd
--- /dev/null
+++ b/rspack/loaders/font.ts
@@ -0,0 +1,20 @@
+import { IS_DEV } from '../constants'
+import { TLoader } from '../types'
+
+const fontRegex: RegExp = /\.(woff|woff2|ttf|otf|eot)$/
+
+export const fontLoader: TLoader = {
+ client: {
+ test: fontRegex,
+ type: 'asset/resource',
+ generator: {
+ filename: `fonts/${
+ IS_DEV ? '[name][ext]' : '[name]-[contenthash][ext][query]'
+ }`
+ }
+ },
+ server: {
+ test: fontRegex,
+ loader: 'null-loader'
+ }
+}
diff --git a/rspack/loaders/image.ts b/rspack/loaders/image.ts
new file mode 100644
index 0000000..245e72b
--- /dev/null
+++ b/rspack/loaders/image.ts
@@ -0,0 +1,19 @@
+import { RuleSetRule } from '@rspack/core'
+
+import { IS_DEV } from '../constants'
+import { TLoader } from '../types'
+
+const imageRegex: RegExp = /\.(png|jpg|jpeg|gif)$/
+
+const universalLoader: RuleSetRule = {
+ test: imageRegex,
+ type: 'asset/resource',
+ generator: {
+ filename: `images/${IS_DEV ? '[name][ext]' : '[name]-[hash][ext]'}`
+ }
+}
+
+export const imageLoader: TLoader = {
+ client: universalLoader,
+ server: universalLoader
+}
diff --git a/rspack/loaders/index.ts b/rspack/loaders/index.ts
new file mode 100644
index 0000000..0bf77d8
--- /dev/null
+++ b/rspack/loaders/index.ts
@@ -0,0 +1,6 @@
+export { fontLoader } from './font'
+export { imageLoader } from './image'
+export { scssLoader } from './scss'
+export { svgLoader } from './svg'
+export { svgrLoader } from './svgr'
+export { tsLoader } from './ts'
diff --git a/rspack/loaders/scss.ts b/rspack/loaders/scss.ts
new file mode 100644
index 0000000..9aa9135
--- /dev/null
+++ b/rspack/loaders/scss.ts
@@ -0,0 +1,58 @@
+import { RuleSetRule, CssExtractRspackPlugin } from '@rspack/core'
+
+import { TLoader } from '../types'
+
+const scssRegex: RegExp = /\.s?[ac]?ss$/
+const scssModuleRegex: RegExp = /\.module\.s?[ac]?ss$/
+
+const universalLoader = (isServer: boolean = false): RuleSetRule => ({
+ test: scssRegex,
+ oneOf: [
+ {
+ test: scssModuleRegex,
+ use: [
+ {
+ loader: CssExtractRspackPlugin.loader,
+ options: {
+ emit: !isServer
+ }
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ modules: {
+ mode: 'local',
+ /*
+ This type of naming variant is better for gzip compression -
+ https://github.com/webpack-contrib/css-loader/issues/406
+ */
+ localIdentName: '[folder]__[local]--[hash:base64:5]',
+ namedExport: false,
+ exportLocalsConvention: 'as-is'
+ }
+ }
+ },
+ {
+ loader: 'sass-loader'
+ }
+ ]
+ },
+ {
+ use: [
+ {
+ loader: CssExtractRspackPlugin.loader,
+ options: {
+ emit: !isServer
+ }
+ },
+ 'css-loader',
+ 'sass-loader'
+ ]
+ }
+ ]
+})
+
+export const scssLoader: TLoader = {
+ client: universalLoader(),
+ server: universalLoader(true)
+}
diff --git a/rspack/loaders/svg.ts b/rspack/loaders/svg.ts
new file mode 100644
index 0000000..3558baa
--- /dev/null
+++ b/rspack/loaders/svg.ts
@@ -0,0 +1,20 @@
+import { RuleSetRule } from '@rspack/core'
+
+import { IS_DEV } from '../constants'
+import { TLoader } from '../types'
+
+const svgRegex: RegExp = /\.svg$/i
+
+const universalLoader: RuleSetRule = {
+ test: svgRegex,
+ type: 'asset/resource',
+ resourceQuery: /url/,
+ generator: {
+ filename: `images/${IS_DEV ? '[name][ext]' : '[name]-[hash][ext]'}`
+ }
+}
+
+export const svgLoader: TLoader = {
+ client: universalLoader,
+ server: universalLoader
+}
diff --git a/rspack/loaders/svg64.ts b/rspack/loaders/svg64.ts
new file mode 100644
index 0000000..b940c28
--- /dev/null
+++ b/rspack/loaders/svg64.ts
@@ -0,0 +1,20 @@
+import { RuleSetRule } from '@rspack/core'
+
+import { IS_DEV } from '../constants'
+import { TLoader } from '../types'
+
+const svgRegex: RegExp = /\.svg$/i
+
+const universalLoader: RuleSetRule = {
+ test: svgRegex,
+ type: 'asset/inline',
+ resourceQuery: /base64/,
+ generator: {
+ filename: `images/${IS_DEV ? '[name][ext]' : '[name]-[hash][ext]'}`
+ }
+}
+
+export const svgLoader: TLoader = {
+ client: universalLoader,
+ server: universalLoader
+}
diff --git a/rspack/loaders/svgr.ts b/rspack/loaders/svgr.ts
new file mode 100644
index 0000000..a5e42e7
--- /dev/null
+++ b/rspack/loaders/svgr.ts
@@ -0,0 +1,21 @@
+import { RuleSetRule } from '@rspack/core'
+
+import { IS_DEV } from '../constants'
+import { TLoader } from '../types'
+
+const svgRegex: RegExp = /\.svg$/
+
+const universalLoader: RuleSetRule = {
+ test: svgRegex,
+ issuer: /\.[jt]sx?$/,
+ use: ['@svgr/webpack'],
+ resourceQuery: { not: [/url/, /base64/] },
+ generator: {
+ filename: `images/${IS_DEV ? '[name][ext]' : '[name]-[hash][ext]'}`
+ }
+}
+
+export const svgrLoader: TLoader = {
+ client: universalLoader,
+ server: universalLoader
+}
diff --git a/rspack/loaders/ts.ts b/rspack/loaders/ts.ts
new file mode 100644
index 0000000..abdc881
--- /dev/null
+++ b/rspack/loaders/ts.ts
@@ -0,0 +1,43 @@
+import { RuleSetRule } from '@rspack/core'
+import { TLoader } from '../types'
+
+import { IS_DEV } from '../constants'
+
+const tsRegex: RegExp = /\.tsx?$/
+
+const clientLoader: RuleSetRule = {
+ test: tsRegex,
+ use: {
+ loader: 'builtin:swc-loader',
+ options: {
+ jsc: {
+ parser: {
+ syntax: 'typescript',
+ tsx: true
+ },
+ transform: {
+ react: {
+ runtime: 'automatic',
+ development: IS_DEV,
+ refresh: IS_DEV
+ }
+ }
+ }
+ }
+ },
+ type: 'javascript/auto'
+}
+
+const serverLoader: RuleSetRule = structuredClone(clientLoader)
+if (typeof serverLoader.use === 'object' && !Array.isArray(serverLoader.use)) {
+ const options = serverLoader.use.options
+
+ if (typeof options === 'object' && options !== null) {
+ options.jsc.transform.react.refresh = false
+ }
+}
+
+export const tsLoader: TLoader = {
+ client: clientLoader,
+ server: serverLoader
+}
diff --git a/rspack/server.config.ts b/rspack/server.config.ts
new file mode 100644
index 0000000..019d090
--- /dev/null
+++ b/rspack/server.config.ts
@@ -0,0 +1,38 @@
+import path from 'path'
+
+import { Configuration, CssExtractRspackPlugin } from '@rspack/core'
+import nodeExternals from 'webpack-node-externals'
+import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'
+
+import {
+ ALIAS,
+ DIST_DIR,
+ IS_DEV,
+ SERVER_BUNDLE_NAME,
+ SERVER_SRC_DIR
+} from './constants'
+import * as Loaders from './loaders'
+
+const serverConfig: Configuration = {
+ name: 'server',
+ target: 'node',
+ node: { __dirname: false },
+ entry: path.join(SERVER_SRC_DIR, '/server'),
+ plugins: [new ForkTsCheckerWebpackPlugin(), new CssExtractRspackPlugin()],
+ module: {
+ rules: Object.values(Loaders).map((el) => el.server)
+ },
+ output: {
+ filename: `${SERVER_BUNDLE_NAME}.js`,
+ path: DIST_DIR,
+ publicPath: '/'
+ },
+ devtool: IS_DEV ? 'source-map' : false,
+ resolve: {
+ alias: ALIAS,
+ extensions: ['.ts', '.tsx', '.js']
+ },
+ externals: [nodeExternals() as any]
+}
+
+export { serverConfig }
diff --git a/rspack/types.d.ts b/rspack/types.d.ts
new file mode 100644
index 0000000..74c5925
--- /dev/null
+++ b/rspack/types.d.ts
@@ -0,0 +1,3 @@
+import { RuleSetRule } from '@rspack/core'
+
+export type TLoader = Record<'client' | 'server', RuleSetRule>
diff --git a/src/pages/home/home.test.tsx b/src/pages/home/home.test.tsx
index fde916e..433fee2 100644
--- a/src/pages/home/home.test.tsx
+++ b/src/pages/home/home.test.tsx
@@ -1,5 +1,8 @@
import '@testing-library/jest-dom'
+// Need for fetching polyfill during testing
+import 'cross-fetch/polyfill'
+
import { screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
diff --git a/src/server/constants.ts b/src/server/constants.ts
index edd9c79..123c7b2 100644
--- a/src/server/constants.ts
+++ b/src/server/constants.ts
@@ -1,4 +1,4 @@
-import { DEV_SERVER_PORT, IS_DEV } from '_webpack/constants'
+import { DEV_SERVER_PORT, IS_DEV } from 'rspack/constants'
export const SERVER_PORT: number = IS_DEV ? DEV_SERVER_PORT : 3000
diff --git a/src/server/middlewares/csp.ts b/src/server/middlewares/csp.ts
index b25edb3..0e678f3 100644
--- a/src/server/middlewares/csp.ts
+++ b/src/server/middlewares/csp.ts
@@ -1,7 +1,7 @@
import helmet from 'helmet'
import { randomUUID } from 'crypto'
import { Response, Request, NextFunction } from 'express'
-import { IS_DEV } from '_webpack/constants'
+import { IS_DEV } from 'rspack/constants'
const nonce = (_req: Request, res: Response, next: NextFunction): void => {
res.locals.cspNonce = Buffer.from(randomUUID()).toString('base64')
diff --git a/src/server/middlewares/hotReload.ts b/src/server/middlewares/hotReload.ts
index 12eabd4..6744be9 100644
--- a/src/server/middlewares/hotReload.ts
+++ b/src/server/middlewares/hotReload.ts
@@ -1,21 +1,25 @@
-import webpack from 'webpack'
+import { rspack } from '@rspack/core'
import { RequestHandler } from 'express'
import devMiddleware from 'webpack-dev-middleware'
import hotMiddleware from 'webpack-hot-middleware'
-import { clientConfig as config } from '_webpack/client.config'
+import { clientConfig as config } from 'rspack/client.config'
-const compiler = webpack({ ...config, mode: 'development' })
+const compiler = rspack({ ...config, mode: 'development' })
-export const devMiddlewareInstance = devMiddleware(compiler, {
+export const devMiddlewareInstance = devMiddleware(compiler as any, {
serverSideRender: true,
- writeToDisk: true,
+ /*
+ Setting writeToDisk to true leads to ERR_INVALID_ARG_TYPE error ("data" is undefined)
+ with rspack, but it works ok with webpack)
+ */
+ writeToDisk: false,
publicPath:
config.output?.publicPath != null ? String(config.output.publicPath) : '/'
})
export function hotReload (): RequestHandler[] {
- return [devMiddlewareInstance, hotMiddleware(compiler)]
+ return [devMiddlewareInstance, hotMiddleware(compiler as any)]
}
export default hotReload
diff --git a/src/server/server.ts b/src/server/server.ts
index c24ced3..f820a5e 100644
--- a/src/server/server.ts
+++ b/src/server/server.ts
@@ -6,7 +6,7 @@ import { ChunkExtractor } from '@loadable/server'
import { csp, serverRenderer, nonce } from 'server/middlewares'
import { IS_RENDER_TO_STREAM, SERVER_PORT } from 'server/constants'
-import { DIST_DIR, IS_DEV, SRC_DIR } from '_webpack/constants'
+import { DIST_DIR, IS_DEV, SRC_DIR } from 'rspack/constants'
const { PORT = SERVER_PORT } = process.env
diff --git a/tsconfig.json b/tsconfig.json
index 5010849..9870bf6 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,7 @@
{
"compilerOptions": {
"lib": ["dom", "es2022"],
- "types": ["node", "jest", "webpack-env"],
+ "types": ["node", "jest", "@rspack/core/module"],
"module": "esnext",
"target": "es2022",
"moduleResolution": "node",
@@ -24,8 +24,7 @@
"forceConsistentCasingInFileNames": true,
"outDir": "./dist",
"paths": {
- "*": ["./src/*", "./*"],
- "_webpack/*": ["webpack/*"]
+ "*": ["./src/*", "./*"]
},
"plugins": [
{
@@ -36,6 +35,6 @@
"ts-node": {
"compilerOptions": { "module": "commonjs" }
},
- "include": ["src", "webpack", "webpack.config.ts", "jest.config.ts"],
- "exclude": ["node_modules", "**/*.js"],
+ "include": ["src", "rspack", "rspack.config.ts", "jest.config.ts"],
+ "exclude": ["node_modules", "**/*.js"]
}