diff --git a/.changeset/config.json b/.changeset/config.json index 927fda69..f6184d33 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -10,7 +10,7 @@ "access": "restricted", "baseBranch": "main", "updateInternalDependencies": "patch", - "ignore": ["@sample/*"], + "ignore": ["@webpack-sample/*", "@rsbuild-sample/*", "@storybook-sample/*"], "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": { "onlyUpdatePeerDependentsWhenOutOfRange": true } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 67146661..d32a45a5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,8 +54,8 @@ jobs: - name: Build packages run: pnpm build-pkg - - name: Build sample - run: pnpm build-sample + - name: Build webpack sample + run: pnpm build-webpack - name: Test packages run: pnpm test diff --git a/.gitignore b/.gitignore index 3b7fb980..542e4676 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules dist +storybook-static .pnpm-debug.log* .netlify .turbo diff --git a/README.md b/README.md index 93f98388..f0b8d715 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Common configurations for building web apps at [Workleap](https://workleap.com/) | [@workleap/tsup-configs](packages/tsup-configs/README.md) | [![npm version](https://img.shields.io/npm/v/@workleap/tsup-configs)](https://www.npmjs.com/package/@workleap/tsup-configs) | | [@workleap/swc-configs](packages/swc-configs/README.md) | [![npm version](https://img.shields.io/npm/v/@workleap/swc-configs)](https://www.npmjs.com/package/@workleap/swc-configs) | | [@workleap/webpack-configs](packages/webpack-configs/README.md) | [![npm version](https://img.shields.io/npm/v/@workleap/webpack-configs)](https://www.npmjs.com/package/@workleap/webpack-configs) | +| [@workleap/rsbuild-configs](packages/rsbuild-configs/README.md) | [![npm version](https://img.shields.io/npm/v/@workleap/rsbuild-configs)](https://www.npmjs.com/package/@workleap/rsbuild-configs) | ## Have a question or found an issue? diff --git a/docs/default.md b/docs/default.md index 95a14395..bc3297a9 100644 --- a/docs/default.md +++ b/docs/default.md @@ -61,12 +61,13 @@ The majority of the shared tooling configurations targets [ESM](https://develope | --- | --- | --- | | ![](./static/browserslist.svg){ class="h-5 w-5 mr-2 -mt-1" }[Browserslist](https://browsersl.ist/) | [![npm version](https://img.shields.io/npm/v/@workleap/browserslist-config)](https://www.npmjs.com/package/@workleap/browserslist-config) | [Getting started](browserslist/default.md) | | ![](./static/eslint.svg){ class="h-5 w-5 mr-2 -mt-1" }[ESLint](https://eslint.org/) | [![npm version](https://img.shields.io/npm/v/@workleap/eslint-plugin)](https://www.npmjs.com/package/@workleap/eslint-plugin) | [Getting started](eslint/default.md) | -| ![](./static/postcss.svg){ class="h-5 w-5 mr-2 -mt-1" }[PostCSS](https://postcss.org/) | [![npm version](https://img.shields.io/npm/v/@workleap/postcss-configs)](https://www.npmjs.com/package/@workleap/postcss-configs) | [Getting started](postcss/default.md) | | ![](./static/stylelint.svg){ class="h-5 w-5 mr-2 -mt-1" }[Stylelint](https://stylelint.io/) | [![npm version](https://img.shields.io/npm/v/@workleap/stylelint-configs)](https://www.npmjs.com/package/@workleap/stylelint-configs) | [Getting started](stylelint/default.md) | +| ![](./static/typescript.svg){ class="h-5 w-5 mr-2 -mt-1" }[Typescript](https://www.typescriptlang.org/) | [![npm version](https://img.shields.io/npm/v/@workleap/typescript-configs)](https://www.npmjs.com/package/@workleap/typescript-configs) | [Getting started](typescript/default.md) | | ![](./static/swc.svg){ class="h-5 w-5 mr-2 -mt-1" }[SWC](https://swc.rs/) | [![npm version](https://img.shields.io/npm/v/@workleap/swc-configs)](https://www.npmjs.com/package/@workleap/swc-configs) | [Getting started](swc/default.md) | +| ![](./static/rsbuild.svg){ class="h-5 w-5 mr-2 -mt-1" }[Rsbuild](https://rsbuild.dev/) | [![npm version](https://img.shields.io/npm/v/@workleap/rsbuild-configs)](https://www.npmjs.com/package/@workleap/rsbuild-configs) | [Getting started](rsbuild/default.md) | | ![](./static/tsup.svg){ class="h-5 w-5 mr-2 -mt-1" }[tsup](https://tsup.egoist.dev/) | [![npm version](https://img.shields.io/npm/v/@workleap/tsup-configs)](https://www.npmjs.com/package/@workleap/tsup-configs) | [Getting started](tsup/default.md) | -| ![](./static/typescript.svg){ class="h-5 w-5 mr-2 -mt-1" }[Typescript](https://www.typescriptlang.org/) | [![npm version](https://img.shields.io/npm/v/@workleap/typescript-configs)](https://www.npmjs.com/package/@workleap/typescript-configs) | [Getting started](typescript/default.md) | -| ![](./static/webpack.svg){ class="h-5 w-5 mr-2 -mt-1" }[webpack](https://webpack.js.org/) | [![npm version](https://img.shields.io/npm/v/@workleap/webpack-configs)](https://www.npmjs.com/package/@workleap/webpack-configs) | [Getting started](webpack/default.md) | +| ![](./static/postcss.svg){ class="h-5 w-5 mr-2 -mt-1" }[PostCSS](https://postcss.org/) [!badge variant="secondary" size="s" text="in maintenance"] | [![npm version](https://img.shields.io/npm/v/@workleap/postcss-configs)](https://www.npmjs.com/package/@workleap/postcss-configs) | [Getting started](postcss/default.md) | +| ![](./static/webpack.svg){ class="h-5 w-5 mr-2 -mt-1" }[webpack](https://webpack.js.org/) [!badge variant="secondary" size="s" text="in maintenance"] | [![npm version](https://img.shields.io/npm/v/@workleap/webpack-configs)](https://www.npmjs.com/package/@workleap/webpack-configs) | [Getting started](webpack/default.md) | diff --git a/docs/eslint/setup-monorepo.md b/docs/eslint/setup-monorepo.md index 304cdf41..21cc3212 100644 --- a/docs/eslint/setup-monorepo.md +++ b/docs/eslint/setup-monorepo.md @@ -13,7 +13,7 @@ toc: This monorepo setup has been tested with [PNPM workspaces](https://pnpm.io/workspaces). You may need a different setup for [NPM workspaces](https://docs.npmjs.com/cli/v7/using-npm/workspaces) or [Yarn workspaces](https://classic.yarnpkg.com/lang/en/docs/workspaces/) because by default, those package managers **hoist dependencies** rather than installing them in isolation like PNPM. !!! -To lint a monorepo solution (**multiple projects** per repository), [ESLint](https://eslint.org/) must be setuped to lint the files at the root of the solution (the monorepo **workspace**) and the files of every project of the monorepo. Execute the following steps to setup ESLint for a monorepo solution. +To lint a monorepo solution (**multiple projects** per repository), [ESLint](https://eslint.org/) must be setuped to lint the files at the root of the solution (the monorepo **workspace**) and the files of every project of the monorepo. Execute the following steps to setup ESLint for a monorepo solution :point_down: ## Setup the workspace diff --git a/docs/eslint/setup-polyrepo.md b/docs/eslint/setup-polyrepo.md index 90d242d6..e7c2cb73 100644 --- a/docs/eslint/setup-polyrepo.md +++ b/docs/eslint/setup-polyrepo.md @@ -9,7 +9,7 @@ toc: # Setup a polyrepo -Execute the following steps to setup [ESLint](https://eslint.org/) for a polyrepo solution (**single project** per repository). +Execute the following steps to setup [ESLint](https://eslint.org/) for a polyrepo solution (**single project** per repository) :point_down: ## Install the packages diff --git a/docs/postcss/configure-project.md b/docs/postcss/configure-project.md index bb8b4177..40fe6a1e 100644 --- a/docs/postcss/configure-project.md +++ b/docs/postcss/configure-project.md @@ -8,7 +8,11 @@ toc: # Configure a project -Execute the following steps to setup [PostCSS](https://postcss.org/) for a single project. +!!!warning +`@workleap/postcss-configs` is now in maintenance mode. If you're starting a new project, consider using [@workleap/rsbuild-configs](../rsbuild/default.md) instead of [@workleap/webpack-configs](../webpack/default.md), which eliminates the need for PostCSS. +!!! + +Execute the following steps to setup [PostCSS](https://postcss.org/) for a single project :point_down: ## Install the packages @@ -158,7 +162,7 @@ export default defineConfig({ ## Configure webpack !!!info -If your project is using `@workleap/wepack-config`, you don't have to configure `postcss-loader` as the [defineDevConfig](../webpack/configure-dev.md#definedevconfig) and [defineBuildConfig](../webpack/configure-build.md#definebuildconfig) functions already takes care of configuring PostCSS. +If your project is using `@workleap/wepack-config`, you don't have to configure `postcss-loader` as the [defineDevConfig](../webpack/configure-dev.md#webpackdevjs) and [defineBuildConfig](../webpack/configure-build.md#webpackbuildjs) functions already takes care of configuring PostCSS. !!! To integrate with webpack, update your configuration file to include a [postcss-loader](https://www.npmjs.com/package/postcss-loader): diff --git a/docs/postcss/default.md b/docs/postcss/default.md index 26f1b3d2..2b87cb33 100644 --- a/docs/postcss/default.md +++ b/docs/postcss/default.md @@ -1,5 +1,5 @@ --- -order: 160 +order: 100 icon: /static/postcss.svg label: PostCSS expanded: true @@ -9,6 +9,10 @@ toc: # PostCSS +!!!warning +`@workleap/postcss-configs` is now in maintenance mode. If you're starting a new project, consider using [@workleap/rsbuild-configs](../rsbuild/default.md) instead of [@workleap/webpack-configs](../webpack/default.md), which eliminates the need for PostCSS. +!!! + + +[Rsbuild](https://lib.rsbuild.dev/index) is a high-performance build tool powered by [Rspack](https://rspack.dev/), a Rust-based port of [webpack](https://webpack.js.org/) designed for efficiency and speed. Those new Rsbuild shared configurations are a modern replacement for previous Workleap's shared [webpack configurations](../webpack//default.md). + +## Main features + +The shared configurations offered by `@workleap/rsbuild-configs` includes the following features :point_down: + +### Language support + +- JavaScript +- TypeScript +- CSS (with CSS modules and LightningCSS) + +### Framework support + +- React + +### Asset support + +- SVG as React components +- PNG +- JPEG +- GIF + +### Development features + +- Development server +- Fast Refresh or Hot Module Reload +- Sourcemap + +### Production features + +- Minification +- Output to `/dist` + +### Target environment + +As per the [Browserlist](../browserslist/default.md) configuration. + +## Getting started + +To get started, follow the quick start guide to configure Rsbuild for either a [development environment](./configure-dev.md), a [production environment](./configure-build.md) or [storybook](./configure-storybook.md). + +If your project is already using `@workleap/webpack-configs`, follow the [migration guide](./migrate-from-webpack.md). diff --git a/docs/rsbuild/migrate-from-webpack.md b/docs/rsbuild/migrate-from-webpack.md new file mode 100644 index 00000000..c0aaae92 --- /dev/null +++ b/docs/rsbuild/migrate-from-webpack.md @@ -0,0 +1,214 @@ +--- +order: 70 +label: Migrate from Webpack +meta: + title: Migrate from Webpack - Rsbuild +toc: + depth: 2-3 +--- + +# Migrate from Webpack + +To migrate from [@squide/firefly-webpack-configs](https://www.npmjs.com/package/@squide/firefly-webpack-configs) to `@squide/firefly-rsbuild-configs`, execute the following steps :point_down: + +## Update packages + +Open a terminal at the root of the web application project and install the following packages: + ++++ pnpm +```bash +pnpm add -D @workleap/rsbuild-configs @rsbuild/core @rspack/core +``` ++++ yarn +```bash +yarn add -D @workleap/rsbuild-configs @rsbuild/core @rspack/core +``` ++++ npm +```bash +npm install -D @workleap/rsbuild-configs @rsbuild/core @rspack/core +``` ++++ + +Then, in the same terminal, remove the following packages: + ++++ pnpm +```bash +pnpm remove @workleap/webpack-configs @swc/core @swc/helpers @workleap/swc-configs webpack webpack-cli webpack-dev-server @workleap/postcss-configs postcss +``` ++++ yarn +```bash +yarn remove @workleap/webpack-configs @swc/core @swc/helpers @workleap/swc-configs webpack webpack-cli webpack-dev-server @workleap/postcss-configs postcss +``` ++++ npm +```bash +npm uninstall @workleap/webpack-configs @swc/core @swc/helpers @workleap/swc-configs webpack webpack-cli webpack-dev-server @workleap/postcss-configs postcss +``` ++++ + +!!!warning +If your web application project uses SWC for tests, you may want to keep the `@swc/core` and `@workleap/swc-configs` packages. +!!! + +## Update files + +``` +web-app +├── public +├──── index.html --> U +├── webpack.dev.js --> rsbuild.dev.ts +├── webpack.build.js --> rsbuild.build.ts +├── postcss.config.ts --> X +├── swc.build.js --> X +├── swc.dev.js --> X +├── package.json +``` + +### `webpack.build.js` + +Rename the file from `webpack.build.js` to `rsbuild.build.ts`. + +Then, open the `rsbuild.build.ts` file and apply the following changes: + +- Replace `"@workleap/webpack-configs"` for `"@workleap/rsbuild-configs"`. +- Remove `import { swcConfig } from "./swc.build.js"`. +- Remove the first argument of the `defineBuildHostConfig` function. +- Remove `// @ts-check`. + +Before: + +```js webpack.build.js +// @ts-check + +import { defineBuildHostConfig } from "@workleap/webpack-configs"; +import { swcConfig } from "./swc.build.js"; + +export default defineBuildHostConfig(swcConfig); +``` + +After: + +```ts rsbuild.build.ts +import { defineBuildHostConfig } from "@workleap/rsbuild-configs"; + +export default defineBuildHostConfig(); +``` + +### `webpack.dev.js` + +Rename the file from `webpack.dev.js` to `rsbuild.dev.ts`. + +Then, open the `rsbuild.build.ts` file and and apply the following changes: + +- Replace `"@workleap/webpack-configs"` for `"@workleap/rsbuild-configs"`. +- Remove `import { swcConfig } from "./swc.build.js"`. +- Remove the first argument of the `defineDevHostConfig` function. +- Remove `// @ts-check`. + +Before: + +```js webpack.dev.js +// @ts-check + +import { defineDevHostConfig } from "@workleap/webpack-configs"; +import { swcConfig } from "./swc.dev.js"; + +export default defineDevHostConfig(swcConfig); +``` + +After: + +```ts rsbuild.dev.ts +import { defineDevHostConfig } from "@workleap/rsbuild-configs"; + +export default defineDevHostConfig(8080); +``` + +### `postcss.config.ts` + +Delete the `postcss.config.ts` file. + +### `swc.build.js` + +Delete the `swc.build.js` file. + +### `swc.dev.js` + +Delete the `swc.dev.js` file. + +### `index.html` + +Replace `<%=webpackConfig.output.publicPath%>` by `<%=assetPrefix%>/` (the `/` is important). + +Before: + +```html public/index.html + + + + + + +
+ + +``` + +After: + +```html public/index.html + + + + + + +
+ + +``` + +## Update scripts + +### `dev` + +Update the `dev` script to run Rsbuild instead of webpack. + +Before: + +```json package.json +"scripts": { + "dev": "webpack serve --config webpack.dev.js" +} +``` + +After: + +```json package.json +"scripts": { + "dev": "rsbuild dev --config rsbuild.dev.ts" +} +``` + +### `build` + +Update the `build` script to run Rsbuild instead of webpack. + +Before: + +```json package.json +"scripts": { + "build": "webpack --config webpack.build.js" +} +``` + +After: + +```json package.json +"scripts": { + "build": "rsbuild build --config rsbuild.build.ts" +} +``` + +### Try it :rocket: + +Start the application in a development environment using the `dev` and `build` script. Everything should run smoothly without any warnings or errors outputted in the terminal. diff --git a/docs/samples.md b/docs/samples.md index 98c6ae21..726998f2 100644 --- a/docs/samples.md +++ b/docs/samples.md @@ -5,13 +5,17 @@ icon: command-palette # Samples -## Web configs sample +## Rsbuild sample -- :icon-mark-github: [Web application](https://github.com/gsoft-inc/wl-web-configs/tree/main/sample/app) -- :icon-mark-github: [Components library](https://github.com/gsoft-inc/wl-web-configs/tree/main/sample/components) -- :icon-mark-github: [TypeScript library](https://github.com/gsoft-inc/wl-web-configs/tree/main/sample/utils) -- :icon-mark-github: [Monorepo workspace](https://github.com/gsoft-inc/wl-web-configs/blob/main/tsconfig.json) +- :icon-mark-github: [Web application](https://github.com/gsoft-inc/wl-web-configs/tree/main/samples/rsbuild/app) +- :icon-mark-github: [Components library](https://github.com/gsoft-inc/wl-web-configs/tree/main/samples/rsbuild/components) -## Foundy CLI templates +## Webpack sample -- :icon-mark-github: [Web application](https://github.com/gsoft-inc/wl-foundry-cli/tree/main/templates/web-application) +- :icon-mark-github: [Web application](https://github.com/gsoft-inc/wl-web-configs/tree/main/samples/webpack/app) +- :icon-mark-github: [Components library](https://github.com/gsoft-inc/wl-web-configs/tree/main/samples/webpack/components) +- :icon-mark-github: [TypeScript library](https://github.com/gsoft-inc/wl-web-configs/tree/main/samples//webpack/tsup-lib) + +## Storybook sample + +- :icon-mark-github: [Storybook](https://github.com/gsoft-inc/wl-web-configs/tree/main/samples/storybook) diff --git a/docs/static/rsbuild.svg b/docs/static/rsbuild.svg new file mode 100644 index 00000000..2f1889bd --- /dev/null +++ b/docs/static/rsbuild.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/stylelint/default.md b/docs/stylelint/default.md index a5f2d1f7..3e1059b9 100644 --- a/docs/stylelint/default.md +++ b/docs/stylelint/default.md @@ -1,5 +1,5 @@ --- -order: 150 +order: 160 icon: /static/stylelint.svg label: Stylelint expanded: true diff --git a/docs/stylelint/setup-polyrepo.md b/docs/stylelint/setup-polyrepo.md index 126c3f44..1bca19c9 100644 --- a/docs/stylelint/setup-polyrepo.md +++ b/docs/stylelint/setup-polyrepo.md @@ -9,7 +9,7 @@ toc: # Setup a polyrepo -Execute the following steps to setup [Stylelint](https://stylelint.io/) for a polyrepo solution (**single project** per repository). +Execute the following steps to setup [Stylelint](https://stylelint.io/) for a polyrepo solution (**single project** per repository) :point_down: ## Install the packages diff --git a/docs/swc/configure-build.md b/docs/swc/configure-build.md index db8521ac..e23a3d30 100644 --- a/docs/swc/configure-build.md +++ b/docs/swc/configure-build.md @@ -9,7 +9,7 @@ toc: # Configure for build -To configure [SWC](https://swc.rs/) for a production environment, execute the following steps. +To configure [SWC](https://swc.rs/) for a production environment, execute the following steps :point_down: ## Install the packages diff --git a/docs/swc/configure-dev.md b/docs/swc/configure-dev.md index 77a17ee5..ee4f4d32 100644 --- a/docs/swc/configure-dev.md +++ b/docs/swc/configure-dev.md @@ -9,7 +9,7 @@ toc: # Configure for development -To configure [SWC](https://swc.rs/) for a development environment, execute the following steps. +To configure [SWC](https://swc.rs/) for a development environment, execute the following steps :point_down: ## Install the packages diff --git a/docs/swc/configure-jest.md b/docs/swc/configure-jest.md index 8797105f..d446ec4d 100644 --- a/docs/swc/configure-jest.md +++ b/docs/swc/configure-jest.md @@ -9,7 +9,7 @@ toc: # Configure for Jest -To configure [SWC](https://swc.rs/) for a [Jest](https://jestjs.io/) environment, execute the following steps. +To configure [SWC](https://swc.rs/) for a [Jest](https://jestjs.io/) environment, execute the following steps :point_down: ## Install the packages diff --git a/docs/tsup/configure-build.md b/docs/tsup/configure-build.md index 187006bf..2b629caa 100644 --- a/docs/tsup/configure-build.md +++ b/docs/tsup/configure-build.md @@ -9,7 +9,7 @@ toc: # Configure for build -To configure [tsup](https://tsup.egoist.dev/) for a build environment, execute the following steps. +To configure [tsup](https://tsup.egoist.dev/) for a build environment, execute the following steps :point_down: ## Install the packages diff --git a/docs/tsup/configure-dev.md b/docs/tsup/configure-dev.md index 21851f79..0af3ff62 100644 --- a/docs/tsup/configure-dev.md +++ b/docs/tsup/configure-dev.md @@ -9,7 +9,7 @@ toc: # Configure for development -To configure [tsup](https://tsup.egoist.dev/) for a development environment, execute the following steps. +To configure [tsup](https://tsup.egoist.dev/) for a development environment, execute the following steps :point_down: ## Install the packages diff --git a/docs/tsup/default.md b/docs/tsup/default.md index 27cb6b7e..3767017d 100644 --- a/docs/tsup/default.md +++ b/docs/tsup/default.md @@ -1,5 +1,5 @@ --- -order: 130 +order: 110 icon: /static/tsup.svg label: tsup expanded: true diff --git a/docs/typescript/default.md b/docs/typescript/default.md index 3e6fe726..93488635 100644 --- a/docs/typescript/default.md +++ b/docs/typescript/default.md @@ -1,5 +1,5 @@ --- -order: 120 +order: 150 icon: /static/typescript.svg label: Typescript expanded: true diff --git a/docs/typescript/setup-polyrepo.md b/docs/typescript/setup-polyrepo.md index 9f47d9c8..f2fd5fc5 100644 --- a/docs/typescript/setup-polyrepo.md +++ b/docs/typescript/setup-polyrepo.md @@ -9,7 +9,7 @@ toc: # Setup a polyrepo -Execute the following steps to setup [TypeScript](https://www.typescriptlang.org/) for a polyrepo solution (**single project** per repository). +Execute the following steps to setup [TypeScript](https://www.typescriptlang.org/) for a polyrepo solution (**single project** per repository) :point_down: ## Install the packages diff --git a/docs/webpack/configure-build.md b/docs/webpack/configure-build.md index 5ae719ea..9a2835ea 100644 --- a/docs/webpack/configure-build.md +++ b/docs/webpack/configure-build.md @@ -9,7 +9,11 @@ toc: # Configure for build -To configure [webpack](https://webpack.js.org/) for a production environment, execute the following steps. +!!!warning +`@workleap/webpack-configs` is now in maintenance mode. If you're starting a new project, consider using [@workleap/rsbuild-configs](../rsbuild/default.md) instead for better performance and modern tooling. +!!! + +To configure [webpack](https://webpack.js.org/) for a production environment, execute the following steps :point_down: ## Install the packages @@ -94,7 +98,7 @@ Then, add the assets to the `index.html` file: If `output.publicPath` is set to `auto`, use `href="favicon.png"` instead. !!! -### `defineBuildConfig` +### `webpack.build.js` Next, create a configuration file named `webpack.build.js` at the root of the project: @@ -117,7 +121,7 @@ import { swcConfig } from "./swc.build.js"; export default defineBuildConfig(swcConfig); ``` -### `swcConfig` +### `swc.build.js` In the previous code sample, the `defineBuildConfig(swcConfig, options)` function receive an SWC [configuration object](https://swc.rs/docs/configuration/swcrc) through the `swcConfig` parameter. @@ -491,7 +495,7 @@ To deal with environment variables, the webpack documentation suggests using the ### cross-env -We recommend instead to define environment variables using [cross-env](https://github.com/kentcdodds/cross-env). With `cross-env`, the environment variables will be made available to any Node.js files that are executed by the script process (`dev` in the example below :point_down:): +We recommend instead to define environment variables using [cross-env](https://github.com/kentcdodds/cross-env). With `cross-env`, the environment variables will be made available to any Node.js files that are executed by the script process (`build` in the example below :point_down:): ```json package.json { @@ -538,7 +542,7 @@ export default defineBuildConfig(swcConfig, { Then, use the variables in any application files: -```tsx !#2 src/app.tsx +```tsx !#2 src/App.tsx export function App() { if (process.env.DEBUG) { console.log("The application has been bootstrapped in debug!"); diff --git a/docs/webpack/configure-dev.md b/docs/webpack/configure-dev.md index 7d91a40c..4ebec050 100644 --- a/docs/webpack/configure-dev.md +++ b/docs/webpack/configure-dev.md @@ -9,7 +9,11 @@ toc: # Configure for development -To configure [webpack](https://webpack.js.org/) for a development environment, execute the following steps. +!!!warning +`@workleap/webpack-configs` is now in maintenance mode. If you're starting a new project, consider using [@workleap/rsbuild-configs](../rsbuild/default.md) instead for better performance and modern tooling. +!!! + +To configure [webpack](https://webpack.js.org/) for a development environment, execute the following steps :point_down: ## Install the packages @@ -61,7 +65,7 @@ The content of the `public/index.html` file is the default template that will be #### Reference local assets -To reference local assets such as a `favicon.png` in the default HTML template, it is recommended to preprend the **relative** path of every asset with the `publicPath` of the webpack config. +To reference local assets such as a `favicon.png` in the default HTML template, it is recommended to preprend the **relative** path of every asset with the `publicPath` option of the webpack config. First, add the asset to the `public` folder at the root of the project: @@ -93,7 +97,7 @@ Then, add the assets to the `index.html` file: If `output.publicPath` is set to `auto`, use `href="favicon.png"` instead. !!! -### `defineDevConfig` +### `webpack.dev.js` Next, create a configuration file named `webpack.dev.js` at the root of the project: @@ -118,7 +122,7 @@ import { swcConfig } from "./swc.dev.js"; export default defineDevConfig(swcConfig); ``` -### `swcConfig` +### `swc.dev.js` In the previous code sample, the `defineDevConfig(swcConfig, options)` function receive an SWC [configuration object](https://swc.rs/docs/configuration/swcrc) through the `swcConfig` parameter. @@ -204,7 +208,7 @@ export default defineDevConfig(swcConfig, { ### `publicPath` -- **Type**: `boolean` +- **Type**: `string` - **Default**: `${https ? "https" : "http"}://${host}:${port}/` Set webpack [public path](https://webpack.js.org/configuration/output/#outputpublicpath). @@ -413,7 +417,7 @@ export default defineDevConfig(swcConfig, { - **Type**: `boolean` or an object literal accepting any `@svgr/webpack` [option](https://react-svgr.com/docs/options/) - **Default**: `true` -Whether or not to handle `.svg` files with `@svgr/webpack`. If `@svgr/webpack` is desactived, the `.svg` files will are handled by the `asset/resource` rule. +Whether or not to handle `.svg` files with `@svgr/webpack`. If `@svgr/webpack` is desactived, the `.svg` files will be handled by the `asset/resource` rule. ```js !#7 webpack.dev.js // @ts-check @@ -503,7 +507,7 @@ export default defineDevConfig(swcConfig, { ### Execution context -Generic transformers can use the `context` parameter to gather additional information about their execution context, like the `environment` they are operating in: +Generic transformers can use the `context` parameter to gather additional information about their execution context, like the `environment` they are operating in. ```ts !#7 transformer.js // @ts-check @@ -622,7 +626,7 @@ export default defineDevConfig(swcConfig, { Then, use the variables in any application files: -```tsx !#2 src/app.tsx +```tsx !#2 src/App.tsx export function App() { if (process.env.DEBUG) { console.log("The application has been bootstrapped in debug!"); diff --git a/docs/webpack/default.md b/docs/webpack/default.md index dd4656f9..4e080dc5 100644 --- a/docs/webpack/default.md +++ b/docs/webpack/default.md @@ -1,5 +1,5 @@ --- -order: 110 +order: 90 icon: /static/webpack.svg label: webpack expanded: true @@ -9,6 +9,10 @@ toc: # Webpack +!!!warning +`@workleap/webpack-configs` is now in maintenance mode. If you're starting a new project, consider using [@workleap/rsbuild-configs](../rsbuild/default.md) instead for better performance and modern tooling. +!!! + -## A word about Rspack - -[Rspack](https://www.rspack.dev/) is a partial rewrite of [webpack](https://webpack.js.org/) in Rust and will most likely be its successor once it's features complete and stable. Our goal is to migrate to Rspack somewhere in 2024 or 2025 when a `1.0` version is released and [Module Federation](https://module-federation.io/) support is available. - -Meanwhile, you can **confidently start a new project with webpack** as the **migration** process to Rspack is expected to be **seamless**; Rspack is committed to support the full webpack API and its massive plugin ecosystem. - ## Main features The shared configurations offered by `@workleap/webpack-configs` includes the following features :point_down: diff --git a/docs/webpack/transformer-utilities.md b/docs/webpack/transformer-utilities.md index 8a3893fa..b8e3eb2e 100644 --- a/docs/webpack/transformer-utilities.md +++ b/docs/webpack/transformer-utilities.md @@ -9,6 +9,10 @@ toc: # Transformer utilities +!!!warning +`@workleap/webpack-configs` is now in maintenance mode. If you're starting a new project, consider using [@workleap/rsbuild-configs](../rsbuild/default.md) instead for better performance and modern tooling. +!!! + !!!warning We do not guarantee that your configuration transformers won't break after an update. It's your responsibility to keep them up to date with new releases. !!! diff --git a/knip.ts b/knip.ts index ccf3ecba..91589705 100644 --- a/knip.ts +++ b/knip.ts @@ -27,7 +27,8 @@ const ignoreBrowserslist: KnipTransformer = ({ ignoreDependencies, ...config }) ignoreDependencies: [ ...(ignoreDependencies as string[] ?? []), // Browserlist isn't supported by plugins. - "@workleap/browserslist-config" + "@workleap/browserslist-config", + "browserslist" ] }; }; @@ -75,32 +76,28 @@ const configureWebpack: KnipTransformer = ({ ignoreDependencies, ...config }) => }; }; -const configureTsup: KnipTransformer = config => { +const configureRsbuild: KnipTransformer = config => { return { ...config, - tsup: { - config: ["tsup.*.ts"] + rsbuild: { + config: ["rsbuild.*.ts"] } }; }; -const configurePackage: KnipTransformer = config => { +const configureTsup: KnipTransformer = config => { return { ...config, - eslint: true + tsup: { + config: ["tsup.*.ts"] + } }; }; -const configureSample: KnipTransformer = ({ entry, ...config }) => { +const configurePackage: KnipTransformer = config => { return { ...config, - entry: [ - ...(entry as string[] ?? []), - "src/index.ts", - "src/index.tsx" - ], - eslint: true, - stylelint: true + eslint: true }; }; @@ -142,33 +139,78 @@ const webpackConfig: KnipWorkspaceConfig = defineWorkspace({ configureTsup ]); -const sampleAppConfig = defineWorkspace({}, [ - configureSample, +const configureWebpackSample: KnipTransformer = ({ entry, ...config }) => { + return { + ...config, + entry: [ + ...(entry as string[] ?? []), + "src/index.ts", + "src/index.tsx" + ], + eslint: true, + stylelint: true + }; +}; + +const webpackSampleAppConfig = defineWorkspace({}, [ + configureWebpackSample, ignoreBrowserslist, configurePostcss, configureWebpack, configureMsw ]); -const sampleComponentsConfig = defineWorkspace({}, [ - configureSample, +const webpackSampleComponentsConfig = defineWorkspace({}, [ + configureWebpackSample, configureTsup ]); -const sampleUtilsConfig = defineWorkspace({}, [ - configureSample, +const webpackSampleTsupLibConfig = defineWorkspace({}, [ + configureWebpackSample, configureTsup ]); +const configureRsbuildSample: KnipTransformer = ({ entry, ...config }) => { + return { + ...config, + entry: [ + ...(entry as string[] ?? []), + "src/index.ts", + "src/index.tsx" + ], + eslint: true, + stylelint: true + }; +}; + +const rsbuildSampleAppConfig = defineWorkspace({}, [ + configureRsbuildSample, + ignoreBrowserslist, + configureRsbuild, + configureMsw +]); + +const rsbuildSampleComponentsConfig = defineWorkspace({}, [ + configureRsbuildSample, + configureTsup +]); + +const storybookSample = defineWorkspace({}, [ + ignoreBrowserslist +]); + const config: KnipConfig = { workspaces: { ".": rootConfig, "packages/*": packagesConfig, "packages/swc-configs": swcConfig, "packages/webpack-configs": webpackConfig, - "sample/app": sampleAppConfig, - "sample/components": sampleComponentsConfig, - "sample/utils": sampleUtilsConfig + "samples/webpack/app": webpackSampleAppConfig, + "samples/webpack/components": webpackSampleComponentsConfig, + "samples/webpack/tsup-lib": webpackSampleTsupLibConfig, + "samples/rsbuild/app": rsbuildSampleAppConfig, + "samples/rsbuild/components": rsbuildSampleComponentsConfig, + "samples/storybook": storybookSample }, ignoreWorkspaces: [ // Until it's migrated to ESLint 9. diff --git a/package.json b/package.json index 624ee13a..20a09d6e 100644 --- a/package.json +++ b/package.json @@ -10,15 +10,22 @@ "url": "git+https://github.com/gsoft-inc/wl-web-configs.git" }, "scripts": { - "dev-sample": "turbo run dev --filter=./sample/*", - "dev-sample-msw": "turbo run dev-msw --filter=./sample/*", + "dev-webpack": "turbo run dev --filter=./samples/webpack/*", + "dev-webpack-msw": "turbo run dev-msw --filter=./samples/webpack/*", + "dev-rsbuild": "turbo run dev --filter=./samples/rsbuild/*", + "dev-rsbuild-msw": "turbo run dev-msw --filter=./samples/rsbuild/*", + "dev-storybook": "turbo run dev --filter=./samples/storybook", "dev-docs": "retype start", "build-pkg": "turbo run build --filter=./packages/*", - "build-sample": "turbo run build --filter=./sample/*", - "serve-sample": "turbo run serve-build --filter=./sample/*", + "build-webpack": "turbo run build --filter=./samples/webpack/*", + "build-rsbuild": "turbo run build --filter=./samples/rsbuild/*", + "build-storybook": "turbo run build --filter=./samples/storybook", + "serve-webpack": "turbo run serve-build --filter=./samples/webpack/*", + "serve-rsbuild": "turbo run serve-build --filter=./samples/rsbuild/*", + "serve-storybook": "turbo run serve-build --filter=./samples/storybook", "prelint": "turbo run build --filter=./packages/*", "lint": "turbo run lint --continue", - "eslint": "eslint . --ignore-pattern packages --ignore-pattern sample --max-warnings=-0 --cache --cache-location node_modules/.cache/eslint", + "eslint": "eslint . --ignore-pattern packages --ignore-pattern samples --max-warnings=-0 --cache --cache-location node_modules/.cache/eslint", "typecheck": "tsc", "syncpack": "syncpack lint", "knip": "knip --cache --cache-location ./node_modules/.cache/knip", @@ -38,7 +45,7 @@ "@workleap/eslint-plugin": "workspace:*", "@workleap/typescript-configs": "workspace:*", "eslint": "8.57.0", - "knip": "5.39.2", + "knip": "5.39.4", "pkg-pr-new": "0.0.35", "prettier": "3.4.2", "retypeapp": "3.6.0", @@ -46,11 +53,6 @@ "turbo": "2.3.3", "typescript": "5.5.4" }, - "pnpm": { - "overrides": { - "minimist": "^0.2.4" - } - }, "engines": { "node": ">=22.0.0", "pnpm": ">=9" diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index cab56bd3..b18797a8 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -49,7 +49,7 @@ } }, "dependencies": { - "@stylistic/eslint-plugin-ts": "^2.12.0", + "@stylistic/eslint-plugin-ts": "^2.12.1", "@typescript-eslint/eslint-plugin": "^8.18.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.9.0", @@ -71,7 +71,7 @@ "@types/eslint": "8.56.10", "@types/estree": "1.0.6", "@types/jest": "29.5.14", - "@types/node": "22.10.1", + "@types/node": "22.10.2", "@workleap/typescript-configs": "workspace:*", "eslint": "8.57.0", "jest": "29.7.0", diff --git a/packages/postcss-configs/package.json b/packages/postcss-configs/package.json index 9a021e37..77196583 100644 --- a/packages/postcss-configs/package.json +++ b/packages/postcss-configs/package.json @@ -43,7 +43,7 @@ "@swc/core": "1.10.1", "@swc/jest": "0.2.37", "@types/jest": "29.5.14", - "@types/node": "22.10.1", + "@types/node": "22.10.2", "@typescript-eslint/parser": "8.18.0", "@workleap/eslint-plugin": "workspace:*", "@workleap/swc-configs": "workspace:*", diff --git a/sample/app/.eslintignore b/packages/rsbuild-configs/.eslintignore similarity index 100% rename from sample/app/.eslintignore rename to packages/rsbuild-configs/.eslintignore diff --git a/sample/tsup-lib/.eslintrc.json b/packages/rsbuild-configs/.eslintrc.json similarity index 100% rename from sample/tsup-lib/.eslintrc.json rename to packages/rsbuild-configs/.eslintrc.json diff --git a/packages/rsbuild-configs/README.md b/packages/rsbuild-configs/README.md new file mode 100644 index 00000000..002bf5ce --- /dev/null +++ b/packages/rsbuild-configs/README.md @@ -0,0 +1,16 @@ +# rsbuild-configs + +[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](../../LICENSE) +[![npm version](https://img.shields.io/npm/v/@workleap/rsbuild-configs)](https://www.npmjs.com/package/@workleap/rsbuild-configs) + +## Usage + +View the [user's documentation](https://gsoft-inc.github.io/wl-web-configs/). + +## 🤝 Contributing + +View the [contributor's documentation](../../CONTRIBUTING.md). + +## License + +Copyright © 2023, Workleap. This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license at https://github.com/gsoft-inc/workleap-license/blob/master/LICENSE. diff --git a/packages/rsbuild-configs/jest.config.ts b/packages/rsbuild-configs/jest.config.ts new file mode 100644 index 00000000..1142ff96 --- /dev/null +++ b/packages/rsbuild-configs/jest.config.ts @@ -0,0 +1,15 @@ +import type { Config } from "jest"; +import { swcConfig } from "./swc.jest.ts"; + +const config: Config = { + testRegex: "/tests/*/.*\\.test\\.(ts|tsx)$", + testPathIgnorePatterns: ["/node_modules/", "/dist/"], + transform: { + "^.+\\.ts$": ["@swc/jest", swcConfig as Record] + }, + cacheDirectory: "./node_modules/.cache/jest", + clearMocks: true, + verbose: true +}; + +export default config; diff --git a/packages/rsbuild-configs/package.json b/packages/rsbuild-configs/package.json new file mode 100644 index 00000000..f757d330 --- /dev/null +++ b/packages/rsbuild-configs/package.json @@ -0,0 +1,63 @@ +{ + "name": "@workleap/rsbuild-configs", + "author": "Workleap", + "description": "Workleap recommended Rsbuild config.", + "version": "0.0.1", + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "git+https://github.com/gsoft-inc/wl-web-configs.git", + "directory": "packages/rsbuild-configs" + }, + "type": "module", + "publishConfig": { + "access": "public", + "provenance": true + }, + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "files": [ + "dist", + "CHANGELOG.md", + "README.md" + ], + "scripts": { + "build": "tsup", + "eslint": "eslint . --max-warnings=-0 --cache --cache-location node_modules/.cache/eslint", + "typecheck": "tsc", + "test": "jest" + }, + "peerDependencies": { + "@rsbuild/core": "*", + "@rspack/core": "*" + }, + "dependencies": { + "@rsbuild/plugin-basic-ssl": "^1.1.1", + "@rsbuild/plugin-image-compress": "^1.1.0", + "@rsbuild/plugin-react": "^1.1.0", + "@rsbuild/plugin-svgr": "^1.0.6" + }, + "devDependencies": { + "@rsbuild/core": "1.1.9", + "@rspack/core": "1.1.6", + "@swc/core": "1.10.1", + "@swc/jest": "0.2.37", + "@types/jest": "29.5.14", + "@types/node": "22.10.2", + "@typescript-eslint/parser": "8.18.0", + "@workleap/eslint-plugin": "workspace:*", + "@workleap/swc-configs": "workspace:*", + "@workleap/tsup-configs": "workspace:*", + "@workleap/typescript-configs": "workspace:*", + "eslint": "8.57.0", + "jest": "29.7.0", + "ts-node": "10.9.2", + "tsup": "8.3.5", + "typescript": "5.5.4" + } +} diff --git a/packages/rsbuild-configs/src/applyTransformers.ts b/packages/rsbuild-configs/src/applyTransformers.ts new file mode 100644 index 00000000..26cf980c --- /dev/null +++ b/packages/rsbuild-configs/src/applyTransformers.ts @@ -0,0 +1,12 @@ +import type { RsbuildConfig } from "@rsbuild/core"; + +export interface RsbuildConfigTransformerContext { + environment: "dev" | "build" | "storybook"; + verbose: boolean; +} + +export type RsbuildConfigTransformer = (config: RsbuildConfig, context: RsbuildConfigTransformerContext) => RsbuildConfig; + +export function applyTransformers(config: RsbuildConfig, transformers: RsbuildConfigTransformer[], context: RsbuildConfigTransformerContext) { + return transformers.reduce((acc, transformer) => transformer(acc, context), config); +} diff --git a/packages/rsbuild-configs/src/build.ts b/packages/rsbuild-configs/src/build.ts new file mode 100644 index 00000000..969fea21 --- /dev/null +++ b/packages/rsbuild-configs/src/build.ts @@ -0,0 +1,181 @@ +import { defineConfig, type DistPathConfig, type HtmlConfig, type Minify, type RsbuildConfig, type RsbuildEntry, type RsbuildPlugins, type SourceMap } from "@rsbuild/core"; +import { pluginImageCompress, type PluginImageCompressOptions } from "@rsbuild/plugin-image-compress"; +import { pluginReact, type PluginReactOptions } from "@rsbuild/plugin-react"; +import { pluginSvgr, type PluginSvgrOptions } from "@rsbuild/plugin-svgr"; +import { SwcJsMinimizerRspackPlugin, type Optimization } from "@rspack/core"; +import path from "node:path"; +import { applyTransformers, type RsbuildConfigTransformer } from "./applyTransformers.ts"; + +export type OptimizeOption = boolean | "readable"; + +export type DefineBuildHtmlPluginConfigFunction = (defaultOptions: HtmlConfig) => HtmlConfig; +export type DefineBuildDefineReactPluginConfigFunction = (defaultOptions: PluginReactOptions) => PluginReactOptions; +export type DefineBuildSvgrPluginConfigFunction = (defaultOptions: PluginSvgrOptions) => PluginSvgrOptions; +export type DefineBuildImageCompressPluginConfigFunction = (defaultOptions: PluginImageCompressOptions) => PluginImageCompressOptions; + +export interface DefineBuildConfigOptions { + entry?: RsbuildEntry; + // Similar to webpack.output.path. + distPath?: DistPathConfig; + // Similar to webpack.publicPath. + assetPrefix?: string; + plugins?: RsbuildPlugins; + html?: false | DefineBuildHtmlPluginConfigFunction; + minify?: Minify; + optimize?: OptimizeOption; + sourceMap?: boolean | SourceMap; + react?: false | DefineBuildDefineReactPluginConfigFunction; + svgr? : false | DefineBuildSvgrPluginConfigFunction; + compressImage?: false | DefineBuildImageCompressPluginConfigFunction; + environmentVariables?: Record; + transformers?: RsbuildConfigTransformer[]; + verbose?: boolean; +} + +function defaultDefineHtmlPluginConfig(options: HtmlConfig) { + return options; +} + +function defaultDefineReactPluginConfig(options: PluginReactOptions) { + return options; +} + +function defineSvgrPluginConfig(options: PluginSvgrOptions) { + return options; +} + +function defineImageCompressPluginConfig(options: PluginImageCompressOptions) { + return options; +} + +export function getOptimizationConfig(optimize: OptimizeOption): Optimization { + if (optimize === true) { + return { + minimize: true + }; + } else if (optimize === "readable") { + return { + minimize: true, + minimizer: [ + new SwcJsMinimizerRspackPlugin({ + minimizerOptions: { + mangle: false, + compress: { + toplevel: true, + hoist_props: false + } + } + }) + ], + chunkIds: "named", + moduleIds: "named", + mangleExports: false + }; + } + + // Doesn't turnoff everything but is good enough to help with debugging scenarios. + return { + minimize: false, + chunkIds: "named", + moduleIds: "named", + concatenateModules: false, + mangleExports: false, + removeAvailableModules: false, + usedExports: false + }; +} + +export function defineBuildConfig(options: DefineBuildConfigOptions = {}) { + const { + entry = { + index: path.resolve("./src/index.tsx") + }, + distPath = { + root: path.resolve("./dist") + }, + assetPrefix = "http://localhost:8080", + plugins = [], + html = defaultDefineHtmlPluginConfig, + minify = true, + optimize = true, + sourceMap = { + js: "source-map", + css: true + }, + react = defaultDefineReactPluginConfig, + svgr = defineSvgrPluginConfig, + compressImage = defineImageCompressPluginConfig, + // Using an empty object literal as the default value to ensure + // "process.env" is always available. + environmentVariables = {}, + transformers = [], + verbose = false + } = options; + + const config: RsbuildConfig = { + mode: "production", + source: { + entry, + // Stringify the environment variables because the plugin does a direct text replacement. Otherwise, "production" would become production + // after replacement and cause an undefined var error because the production var doesn't exist. + // For more information, view: https://rsbuild.dev/guide/advanced/env-vars#using-define. + define: { + "process.env": Object.keys(environmentVariables).reduce((acc, key) => { + acc[key] = JSON.stringify(environmentVariables[key]); + + return acc; + }, {} as Record) + } + }, + output: { + target: "web", + distPath, + cleanDistPath: true, + assetPrefix, + filename: { + html: "[name].html", + js: "[name].js", + css: "[name].css", + svg: "[name].[contenthash:8].svg", + font: "[name].[contenthash:8][ext]", + image: "[name].[contenthash:8][ext]", + media: "[name].[contenthash:8][ext]", + assets: "[name].[contenthash:8][ext]" + }, + minify, + sourceMap + }, + html: html + ? html({ template: path.resolve("./public/index.html") }) + : undefined, + plugins: [ + react && pluginReact(react({ + fastRefresh: false + })), + svgr && pluginSvgr(svgr({ + svgrOptions: { + exportType: "named" + } + })), + compressImage && pluginImageCompress(compressImage(["jpeg", "png", "ico", "svg"])), + ...plugins + ].filter(Boolean), + tools: { + rspack: { + optimization: getOptimizationConfig(optimize), + infrastructureLogging: verbose ? { + appendOnly: true, + level: "verbose", + debug: /PackFileCache/ + } : undefined + } + } + }; + + const transformedConfig = applyTransformers(config, transformers, { + environment: "build", + verbose + }); + + return defineConfig(transformedConfig); +} diff --git a/packages/rsbuild-configs/src/dev.ts b/packages/rsbuild-configs/src/dev.ts new file mode 100644 index 00000000..b6ab9fd4 --- /dev/null +++ b/packages/rsbuild-configs/src/dev.ts @@ -0,0 +1,143 @@ +import { defineConfig, type HtmlConfig, type RsbuildConfig, type RsbuildEntry, type RsbuildPlugins, type ServerConfig, type SourceMap } from "@rsbuild/core"; +import { pluginBasicSsl } from "@rsbuild/plugin-basic-ssl"; +import { pluginReact, type PluginReactOptions } from "@rsbuild/plugin-react"; +import { pluginSvgr, type PluginSvgrOptions } from "@rsbuild/plugin-svgr"; +import path from "node:path"; +import { applyTransformers, type RsbuildConfigTransformer } from "./applyTransformers.ts"; + +export type DefineDevHtmlPluginConfigFunction = (defaultOptions: HtmlConfig) => HtmlConfig; +export type DefineDevDefineReactPluginConfigFunction = (defaultOptions: PluginReactOptions) => PluginReactOptions; +export type DefineDevSvgrPluginConfigFunction = (defaultOptions: PluginSvgrOptions) => PluginSvgrOptions; + +export interface DefineDevConfigOptions { + entry?: RsbuildEntry; + https?: boolean | ServerConfig["https"]; + host?: string; + port?: number; + // Similar to webpack.publicPath. + assetPrefix?: string; + plugins?: RsbuildPlugins; + html?: false | DefineDevHtmlPluginConfigFunction; + lazyCompilation?: boolean; + hmr?: boolean; + fastRefresh?: boolean; + sourceMap?: false | SourceMap; + overlay?: false; + react?: false | DefineDevDefineReactPluginConfigFunction; + svgr? : false | DefineDevSvgrPluginConfigFunction; + environmentVariables?: Record; + transformers?: RsbuildConfigTransformer[]; + verbose?: boolean; +} + +function defaultDefineHtmlPluginConfig(options: HtmlConfig) { + return options; +} + +function defaultDefineReactPluginConfig(options: PluginReactOptions) { + return options; +} + +function defineSvgrPluginConfig(options: PluginSvgrOptions) { + return options; +} + +export function defineDevConfig(options: DefineDevConfigOptions = {}) { + const { + entry = { + index: path.resolve("./src/index.tsx") + }, + https = false, + host = "localhost", + port = 8080, + assetPrefix, + plugins = [], + html = defaultDefineHtmlPluginConfig, + lazyCompilation = true, + hmr = true, + fastRefresh = true, + sourceMap = { + js: "cheap-module-source-map", + css: true + }, + overlay, + react = defaultDefineReactPluginConfig, + svgr = defineSvgrPluginConfig, + // Using an empty object literal as the default value to ensure + // "process.env" is always available. + environmentVariables = {}, + transformers = [], + verbose = false + } = options; + + const config: RsbuildConfig = { + mode: "development", + dev: { + assetPrefix: assetPrefix ?? `${https ? "https" : "http"}://${host}:${port}`, + lazyCompilation, + hmr: hmr || fastRefresh, + client: (overlay === false || fastRefresh) ? { + overlay: false + } : undefined + }, + server: { + https: typeof https === "boolean" ? undefined : https, + host, + port, + historyApiFallback: true + }, + source: { + entry, + // Stringify the environment variables because the plugin does a direct text replacement. Otherwise, "production" would become production + // after replacement and cause an undefined var error because the production var doesn't exist. + // For more information, view: https://rsbuild.dev/guide/advanced/env-vars#using-define. + define: { + "process.env": Object.keys(environmentVariables).reduce((acc, key) => { + acc[key] = JSON.stringify(environmentVariables[key]); + + return acc; + }, {} as Record) + } + }, + output: { + target: "web", + minify: false, + sourceMap + }, + html: html + ? html({ template: path.resolve("./public/index.html") }) + : undefined, + plugins: [ + typeof https === "boolean" && https && pluginBasicSsl(), + react && pluginReact(react({ + fastRefresh, + reactRefreshOptions: { + overlay: overlay !== false + } + })), + svgr && pluginSvgr(svgr({ + svgrOptions: { + exportType: "named" + } + })), + ...plugins + ].filter(Boolean), + tools: { + rspack: { + infrastructureLogging: verbose ? { + appendOnly: true, + level: "verbose", + debug: /PackFileCache/ + } : undefined + } + } + }; + + const transformedConfig = applyTransformers(config, transformers, { + environment: "dev", + verbose + }); + + return defineConfig(transformedConfig); +} + diff --git a/packages/rsbuild-configs/src/index.ts b/packages/rsbuild-configs/src/index.ts new file mode 100644 index 00000000..de0cc2b5 --- /dev/null +++ b/packages/rsbuild-configs/src/index.ts @@ -0,0 +1,4 @@ +export * from "./build.ts"; +export * from "./dev.ts"; +export * from "./storybook.ts"; + diff --git a/packages/rsbuild-configs/src/storybook.ts b/packages/rsbuild-configs/src/storybook.ts new file mode 100644 index 00000000..e5935cf6 --- /dev/null +++ b/packages/rsbuild-configs/src/storybook.ts @@ -0,0 +1,86 @@ +import { defineConfig, type RsbuildConfig, type RsbuildPlugins, type SourceMap } from "@rsbuild/core"; +import { pluginReact, type PluginReactOptions } from "@rsbuild/plugin-react"; +import { pluginSvgr, type PluginSvgrOptions } from "@rsbuild/plugin-svgr"; +import { applyTransformers, type RsbuildConfigTransformer } from "./applyTransformers.ts"; + +export type DefineStorybookDefineReactPluginConfigFunction = (defaultOptions: PluginReactOptions) => PluginReactOptions; +export type DefineStorybookSvgrPluginConfigFunction = (defaultOptions: PluginSvgrOptions) => PluginSvgrOptions; + +export interface DefineStorybookConfigOptions { + plugins?: RsbuildPlugins; + sourceMap?: boolean | SourceMap; + react?: false | DefineStorybookDefineReactPluginConfigFunction; + svgr? : false | DefineStorybookSvgrPluginConfigFunction; + environmentVariables?: Record; + transformers?: RsbuildConfigTransformer[]; + verbose?: boolean; +} + +function defaultDefineReactPluginConfig(options: PluginReactOptions) { + return options; +} + +function defineSvgrPluginConfig(options: PluginSvgrOptions) { + return options; +} + +export function defineStorybookConfig(options: DefineStorybookConfigOptions = {}) { + const { + plugins = [], + sourceMap = { + js: "cheap-module-source-map", + css: true + }, + react = defaultDefineReactPluginConfig, + svgr = defineSvgrPluginConfig, + // Using an empty object literal as the default value to ensure + // "process.env" is always available. + environmentVariables = {}, + transformers = [], + verbose = false + } = options; + + const config: RsbuildConfig = { + source: { + // Stringify the environment variables because the plugin does a direct text replacement. Otherwise, "production" would become production + // after replacement and cause an undefined var error because the production var doesn't exist. + // For more information, view: https://rsbuild.dev/guide/advanced/env-vars#using-define. + define: { + "process.env": Object.keys(environmentVariables).reduce((acc, key) => { + acc[key] = JSON.stringify(environmentVariables[key]); + + return acc; + }, {} as Record) + } + }, + output: { + target: "web", + sourceMap + }, + plugins: [ + react && pluginReact(react({})), + svgr && pluginSvgr(svgr({ + svgrOptions: { + exportType: "named" + } + })), + ...plugins + ].filter(Boolean), + tools: { + rspack: { + infrastructureLogging: verbose ? { + appendOnly: true, + level: "verbose", + debug: /PackFileCache/ + } : undefined + } + } + }; + + const transformedConfig = applyTransformers(config, transformers, { + environment: "storybook", + verbose + }); + + return defineConfig(transformedConfig); +} diff --git a/packages/rsbuild-configs/swc.jest.ts b/packages/rsbuild-configs/swc.jest.ts new file mode 100644 index 00000000..2e6bdb4c --- /dev/null +++ b/packages/rsbuild-configs/swc.jest.ts @@ -0,0 +1,3 @@ +import { defineJestConfig } from "@workleap/swc-configs"; + +export const swcConfig = defineJestConfig(); diff --git a/packages/rsbuild-configs/tests/build.test.ts b/packages/rsbuild-configs/tests/build.test.ts new file mode 100644 index 00000000..a226f8a8 --- /dev/null +++ b/packages/rsbuild-configs/tests/build.test.ts @@ -0,0 +1,298 @@ +import type { RsbuildConfig, RsbuildPlugin, SourceMap } from "@rsbuild/core"; +import type { RsbuildConfigTransformer } from "../src/applyTransformers.ts"; +import { defineBuildConfig, getOptimizationConfig } from "../src/build.ts"; + +test("when an entry prop is provided, the source.entry option is the provided value", () => { + const result = defineBuildConfig({ + entry: { + index: "./a-new-entry.ts" + } + }); + + expect(result!.source!.entry!.index).toBe("./a-new-entry.ts"); +}); + +test("when a dist path is provided, the output.distpath option is the provided value", () => { + const result = defineBuildConfig({ + distPath: { + root: "./a-new-output-path" + } + }); + + expect(result.output!.distPath!.root).toBe("./a-new-output-path"); +}); + +test("when an asset prefix is provided, the output.assetPrefix option is the provided value", () => { + const result = defineBuildConfig({ + assetPrefix: "a-valid-public-path-ending-with-a-trailing-slash/" + }); + + expect(result.output!.assetPrefix).toBe("a-valid-public-path-ending-with-a-trailing-slash/"); +}); + +test("when additional plugins are provided, append the provided plugins at the end of the plugins array", () => { + const plugin1: RsbuildPlugin = { + name: "plugin-1", + setup: () => {} + }; + + const plugin2: RsbuildPlugin = { + name: "plugin-2", + setup: () => {} + }; + + const result = defineBuildConfig({ + plugins: [ + plugin1, + plugin2 + ] + }); + + const pluginsCount = result.plugins!.length; + + expect(result.plugins![pluginsCount - 2]).toBe(plugin1); + expect(result.plugins![pluginsCount - 1]).toBe(plugin2); +}); + +test("when html is false, the html option is undefined", () => { + const result = defineBuildConfig({ + html: false + }); + + expect(result.html).toBeUndefined(); +}); + +test("when html is a function, the html option match the function return value", () => { + const html = { + title: "foo" + }; + + const result = defineBuildConfig({ + html: () => { + return html; + } + }); + + expect(result.html).toBe(html); +}); + +test("when sourceMap is false, the output.sourceMap option is false", () => { + const result = defineBuildConfig({ + sourceMap: false + }); + + expect(result.output?.sourceMap).toBeFalsy(); +}); + +test("when sourceMap is an object, the output.sourceMap option is the object", () => { + const sourceMap: SourceMap = { + js: false, + css: false + }; + + const result = defineBuildConfig({ + sourceMap + }); + + expect(result.output?.sourceMap).toBe(sourceMap); +}); + +test("when react is false, the react plugin is not included", () => { + const result = defineBuildConfig({ + react: false + }); + + const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:react"); + + expect(plugin).toBeUndefined(); +}); + +test("when react is a function, the function is executed", () => { + const fct = jest.fn(); + + defineBuildConfig({ + react: fct + }); + + expect(fct).toHaveBeenCalledTimes(1); +}); + +test("when svgr is false, the svgr plugin is not included", () => { + const result = defineBuildConfig({ + svgr: false + }); + + const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:svgr"); + + expect(plugin).toBeUndefined(); +}); + +test("when svgr is a function, the function is executed", () => { + const fct = jest.fn(); + + defineBuildConfig({ + svgr: fct + }); + + expect(fct).toHaveBeenCalledTimes(1); +}); + +test("when compressImage is false, the image compress plugin is not included", () => { + const result = defineBuildConfig({ + compressImage: false + }); + + const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:image-compress"); + + expect(plugin).toBeUndefined(); +}); + +test("when compressImage is a function, the function is executed", () => { + const fct = jest.fn(); + + defineBuildConfig({ + compressImage: fct + }); + + expect(fct).toHaveBeenCalledTimes(1); +}); + +test("when a transformer is provided, and the transformer update the existing configuration object, the transformer is applied on the Rsbuild config", () => { + const entryTransformer: RsbuildConfigTransformer = (config: RsbuildConfig) => { + config.source = config.source ?? {}; + config.source.entry = { + index: "a-custom-value-in-a-transformer" + }; + + return config; + }; + + const result = defineBuildConfig({ + transformers: [entryTransformer] + }); + + expect(result.source!.entry!.index).toBe("a-custom-value-in-a-transformer"); +}); + +test("when a transformer is provided, and the transformer returns a new configuration object, the transformer is applied on the Rsbuild config", () => { + const entryTransformer: RsbuildConfigTransformer = () => { + return { + source: { + entry: { + index: "a-custom-value-in-a-transformer" + } + } + }; + }; + + const result = defineBuildConfig({ + transformers: [entryTransformer] + }); + + expect(result.source!.entry!.index).toBe("a-custom-value-in-a-transformer"); +}); + +test("when multiple transformers are provided, all the transformers are applied on the webpack config", () => { + const entryTransformer: RsbuildConfigTransformer = (config: RsbuildConfig) => { + config.source = config.source ?? {}; + config.source.entry = { + index: "a-custom-value-in-a-transformer" + }; + + return config; + }; + + const distPathTransformer: RsbuildConfigTransformer = (config: RsbuildConfig) => { + config.output = config.output ?? {}; + config.output.distPath = config.output.distPath ?? {}; + config.output.distPath.js = "a-custom-dist-path-in-a-tranformer"; + + return config; + }; + + const result = defineBuildConfig({ + transformers: [entryTransformer, distPathTransformer] + }); + + expect(result.source!.entry!.index).toBe("a-custom-value-in-a-transformer"); + expect(result.output!.distPath!.js).toBe("a-custom-dist-path-in-a-tranformer"); +}); + +test("transformers context environment is \"dev\"", () => { + const mockTransformer = jest.fn(); + + defineBuildConfig({ + transformers: [mockTransformer] + }); + + expect(mockTransformer).toHaveBeenCalledWith(expect.anything(), { environment: "build", verbose: false }); +}); + +test("when the verbose option is true, the transformers context verbose value is \"true\"", () => { + const mockTransformer = jest.fn(); + + defineBuildConfig({ + verbose: true, + transformers: [mockTransformer] + }); + + expect(mockTransformer).toHaveBeenCalledWith(expect.anything(), { environment: "build", verbose: true }); +}); + +describe("getOptimizationConfig", () => { + test("when optimize is true, minimize is set to true", () => { + const result = getOptimizationConfig(true); + + expect(result.minimize).toBeTruthy(); + }); + + test("when optimize is false, minimize is set to false", () => { + const result = getOptimizationConfig(false); + + expect(result.minimize).toBeFalsy(); + }); + + test("when optimize is \"readable\", minimize is set to true", () => { + const result = getOptimizationConfig("readable"); + + expect(result.minimize).toBeTruthy(); + }); + + test("when optimize is false, chunkIds is set to \"named\"", () => { + const result = getOptimizationConfig(false); + + expect(result.chunkIds).toBe("named"); + }); + + test("when optimize is false, moduleIds is set to \"named\"", () => { + const result = getOptimizationConfig(false); + + expect(result.chunkIds).toBe("named"); + }); + + test("when optimize is \"readable\", chunkIds is set to \"named\"", () => { + const result = getOptimizationConfig("readable"); + + expect(result.chunkIds).toBe("named"); + }); + + test("when optimize is \"readable\", moduleIds is set to \"named\"", () => { + const result = getOptimizationConfig("readable"); + + expect(result.chunkIds).toBe("named"); + }); + + test("when optimize is false, do not include minimizer configuration", () => { + const result = getOptimizationConfig(false); + + expect(result.minimizer).toBeUndefined(); + }); + + test("when optimize is \"readable\", include minify configuration", () => { + const result = getOptimizationConfig("readable"); + + expect(result.minimizer).toBeDefined(); + }); +}); + + diff --git a/packages/rsbuild-configs/tests/dev.test.ts b/packages/rsbuild-configs/tests/dev.test.ts new file mode 100644 index 00000000..9fb51d9c --- /dev/null +++ b/packages/rsbuild-configs/tests/dev.test.ts @@ -0,0 +1,398 @@ +import type { RsbuildConfig, RsbuildPlugin, SourceMap } from "@rsbuild/core"; +import type { RsbuildConfigTransformer } from "../src/applyTransformers.ts"; +import { defineDevConfig } from "../src/dev.ts"; + +test("when an entry prop is provided, the source.entry option is the provided value", () => { + const result = defineDevConfig({ + entry: { + index: "./a-new-entry.ts" + } + }); + + expect(result.source?.entry!.index).toBe("./a-new-entry.ts"); +}); + +test("when https is true, the server option is configured with a self signed certificate", () => { + const result = defineDevConfig({ + https: true + }); + + expect(result.server?.https).toBeUndefined(); + expect(result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:basic-ssl")).toBeDefined(); +}); + +test("when https is true, the asset prefix option include \"https\"", () => { + const result = defineDevConfig({ + https: true + }); + + expect(result.dev?.assetPrefix).toMatch(/(https)/i); +}); + +test("when https is a certificate, the server option is configured with the provided certificate", () => { + const cert = { + key: "foo", + cert: "bar" + }; + + const result = defineDevConfig({ + https: cert + }); + + expect(result.server?.https).toBe(cert); +}); + +test("when https is a certificate, the dev.assetPrefix option include \"https\"", () => { + const result = defineDevConfig({ + https: { + key: "foo", + cert: "bar" + } + }); + + expect(result.dev?.assetPrefix).toMatch(/(https)/i); +}); + +test("when https is false, the dev.assetPrefix option doesn't include \"https\"", () => { + const result = defineDevConfig({ + https: false + }); + + expect(result.dev?.assetPrefix).not.toMatch(/(https)/i); +}); + +test("when https is false, the basic-ssl plugin is not included", () => { + const result = defineDevConfig({ + https: false + }); + + expect(result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:basic-ssl")).toBeUndefined(); +}); + +test("when https is false, the server.https option is undefined", () => { + const result = defineDevConfig({ + https: true + }); + + expect(result.server?.https).toBeUndefined(); +}); + +test("when an host is provided, the server.host option is the provided host value", () => { + const result = defineDevConfig({ + host: "a-custom-host" + }); + + expect(result.server!.host).toBe("a-custom-host"); +}); + +test("when an host is provided, the dev.assetPrefix option include the provided host value", () => { + const result = defineDevConfig({ + host: "a-custom-host" + }); + + expect(result.dev?.assetPrefix).toMatch(/a-custom-host/); +}); + +test("when a port is provided, the server.port option is the provided port value", () => { + const result = defineDevConfig({ + port: 1234 + }); + + expect(result.server?.port).toBe(1234); +}); + +test("when a port is provided, the dev.assetPrefix option include the provided port", () => { + const result = defineDevConfig({ + port: 1234 + }); + + expect(result.dev?.assetPrefix).toMatch(/1234/); +}); + +test("when an asset prefix is provided, the dev.assetPrefix option is the provided value", () => { + const result = defineDevConfig({ + assetPrefix: "http://my-dev-host.com/" + }); + + expect(result.dev?.assetPrefix).toBe("http://my-dev-host.com/"); +}); + +test("when additional plugins are provided, append the provided plugins at the end of the plugins array", () => { + const plugin1: RsbuildPlugin = { + name: "plugin-1", + setup: () => {} + }; + + const plugin2: RsbuildPlugin = { + name: "plugin-2", + setup: () => {} + }; + + const result = defineDevConfig({ + plugins: [ + plugin1, + plugin2 + ] + }); + + const pluginsCount = result.plugins!.length; + + expect(result.plugins![pluginsCount - 2]).toBe(plugin1); + expect(result.plugins![pluginsCount - 1]).toBe(plugin2); +}); + +test("when html is false, the html option is undefined", () => { + const result = defineDevConfig({ + html: false + }); + + expect(result.html).toBeUndefined(); +}); + +test("when html is a function, the html option match the function return value", () => { + const html = { + title: "foo" + }; + + const result = defineDevConfig({ + html: () => { + return html; + } + }); + + expect(result.html).toBe(html); +}); + +test("when lazyCompilation is true, the dev.lazyCompilation option is true", () => { + const result = defineDevConfig({ + lazyCompilation: true + }); + + expect(result.dev?.lazyCompilation).toBeTruthy(); +}); + +test("when lazyCompilation is false, the dev.lazyCompilation option is false", () => { + const result = defineDevConfig({ + lazyCompilation: false + }); + + expect(result.dev?.lazyCompilation).toBeFalsy(); +}); + +test("when hmr is true, the dev.hmr option is true", () => { + const result = defineDevConfig({ + hmr: true + }); + + expect(result.dev?.hmr).toBeTruthy(); +}); + +test("when hmr amd fastRefresh are false, the dev.hmr option is false", () => { + const result = defineDevConfig({ + hmr: false, + fastRefresh: false + }); + + expect(result.dev?.hmr).toBeFalsy(); +}); + +test("when hmr is false and fastRefresh is true, the dev.hmr option is true", () => { + const result = defineDevConfig({ + hmr: false, + fastRefresh: true + }); + + expect(result.dev?.hmr).toBeTruthy(); +}); + +test("when fastRefresh is true, the react plugin enable fast refresh", () => { + let isEnabled = false; + + const result = defineDevConfig({ + fastRefresh: true, + react: defaultOptions => { + isEnabled = defaultOptions.fastRefresh === true; + + return defaultOptions; + } + }); + + const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:react"); + + expect(plugin).toBeDefined(); + expect(isEnabled).toBeTruthy(); +}); + +test("when fastRefresh is true and the overlay is disable, disable the fast refresh overlay", () => { + let isOverlayDisabled = false; + + const result = defineDevConfig({ + fastRefresh: true, + overlay: false, + react: defaultOptions => { + isOverlayDisabled = defaultOptions.reactRefreshOptions?.overlay === false; + + return defaultOptions; + } + }); + + const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:react"); + + expect(plugin).toBeDefined(); + expect(isOverlayDisabled).toBeTruthy(); +}); + +test("when fastRefresh is true, disable the client overlay", () => { + const result = defineDevConfig({ + fastRefresh: true + }); + + expect(result.dev?.client?.overlay).toBeFalsy(); +}); + +test("when sourceMap is false, the output.sourceMap option is false", () => { + const result = defineDevConfig({ + sourceMap: false + }); + + expect(result.output?.sourceMap).toBeFalsy(); +}); + +test("when sourceMap is an object, the output.sourceMap option is the object", () => { + const sourceMap: SourceMap = { + js: false, + css: false + }; + + const result = defineDevConfig({ + sourceMap + }); + + expect(result.output?.sourceMap).toBe(sourceMap); +}); + +test("when overlay is false, the dev.client.overlay option is false", () => { + const result = defineDevConfig({ + overlay: false + }); + + expect(result.dev?.client?.overlay).toBeFalsy(); +}); + +test("when overlay is false, react plugin fast refresh overlay is disabled", () => { + let isOverlayDisabled = false; + + defineDevConfig({ + overlay: false, + react: defaultOptions => { + isOverlayDisabled = defaultOptions.reactRefreshOptions?.overlay === false; + + return defaultOptions; + } + }); + + expect(isOverlayDisabled).toBeTruthy(); +}); + +test("when react is false, the react plugin is not included", () => { + const result = defineDevConfig({ + react: false + }); + + const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:react"); + + expect(plugin).toBeUndefined(); +}); + +test("when svgr is false, the svgr plugin is not included", () => { + const result = defineDevConfig({ + svgr: false + }); + + const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:svgr"); + + expect(plugin).toBeUndefined(); +}); + +test("when a transformer is provided, and the transformer update the existing configuration object, the transformer is applied on the Rsbuild config", () => { + const entryTransformer: RsbuildConfigTransformer = (config: RsbuildConfig) => { + config.source = config.source ?? {}; + config.source.entry = { + index: "a-custom-value-in-a-transformer" + }; + + return config; + }; + + const result = defineDevConfig({ + transformers: [entryTransformer] + }); + + expect(result.source!.entry!.index).toBe("a-custom-value-in-a-transformer"); +}); + +test("when a transformer is provided, and the transformer returns a new configuration object, the transformer is applied on the Rsbuild config", () => { + const entryTransformer: RsbuildConfigTransformer = () => { + return { + source: { + entry: { + index: "a-custom-value-in-a-transformer" + } + } + }; + }; + + const result = defineDevConfig({ + transformers: [entryTransformer] + }); + + expect(result.source!.entry!.index).toBe("a-custom-value-in-a-transformer"); +}); + +test("when multiple transformers are provided, all the transformers are applied on the webpack config", () => { + const entryTransformer: RsbuildConfigTransformer = (config: RsbuildConfig) => { + config.source = config.source ?? {}; + config.source.entry = { + index: "a-custom-value-in-a-transformer" + }; + + return config; + }; + + const distPathTransformer: RsbuildConfigTransformer = (config: RsbuildConfig) => { + config.output = config.output ?? {}; + config.output.distPath = config.output.distPath ?? {}; + config.output.distPath.js = "a-custom-dist-path-in-a-tranformer"; + + return config; + }; + + const result = defineDevConfig({ + transformers: [entryTransformer, distPathTransformer] + }); + + expect(result.source!.entry!.index).toBe("a-custom-value-in-a-transformer"); + expect(result.output!.distPath!.js).toBe("a-custom-dist-path-in-a-tranformer"); +}); + +test("transformers context environment is \"dev\"", () => { + const mockTransformer = jest.fn(); + + defineDevConfig({ + transformers: [mockTransformer] + }); + + expect(mockTransformer).toHaveBeenCalledWith(expect.anything(), { environment: "dev", verbose: false }); +}); + +test("when the verbose option is true, the transformers context verbose value is \"true\"", () => { + const mockTransformer = jest.fn(); + + defineDevConfig({ + verbose: true, + transformers: [mockTransformer] + }); + + expect(mockTransformer).toHaveBeenCalledWith(expect.anything(), { environment: "dev", verbose: true }); +}); + diff --git a/packages/rsbuild-configs/tests/storybook.test.ts b/packages/rsbuild-configs/tests/storybook.test.ts new file mode 100644 index 00000000..d14baa70 --- /dev/null +++ b/packages/rsbuild-configs/tests/storybook.test.ts @@ -0,0 +1,170 @@ +import type { RsbuildConfig, RsbuildPlugin, SourceMap } from "@rsbuild/core"; +import type { RsbuildConfigTransformer } from "../src/applyTransformers.ts"; +import { defineStorybookConfig } from "../src/storybook.ts"; + +test("when additional plugins are provided, append the provided plugins at the end of the plugins array", () => { + const plugin1: RsbuildPlugin = { + name: "plugin-1", + setup: () => {} + }; + + const plugin2: RsbuildPlugin = { + name: "plugin-2", + setup: () => {} + }; + + const result = defineStorybookConfig({ + plugins: [ + plugin1, + plugin2 + ] + }); + + const pluginsCount = result.plugins!.length; + + expect(result.plugins![pluginsCount - 2]).toBe(plugin1); + expect(result.plugins![pluginsCount - 1]).toBe(plugin2); +}); + +test("when sourceMap is false, the output.sourceMap option is false", () => { + const result = defineStorybookConfig({ + sourceMap: false + }); + + expect(result.output?.sourceMap).toBeFalsy(); +}); + +test("when sourceMap is an object, the output.sourceMap option is the object", () => { + const sourceMap: SourceMap = { + js: false, + css: false + }; + + const result = defineStorybookConfig({ + sourceMap + }); + + expect(result.output?.sourceMap).toBe(sourceMap); +}); + +test("when react is false, the react plugin is not included", () => { + const result = defineStorybookConfig({ + react: false + }); + + const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:react"); + + expect(plugin).toBeUndefined(); +}); + +test("when react is a function, the function is executed", () => { + const fct = jest.fn(); + + defineStorybookConfig({ + react: fct + }); + + expect(fct).toHaveBeenCalledTimes(1); +}); + +test("when svgr is false, the svgr plugin is not included", () => { + const result = defineStorybookConfig({ + svgr: false + }); + + const plugin = result.plugins?.find(x => (x as RsbuildPlugin).name === "rsbuild:svgr"); + + expect(plugin).toBeUndefined(); +}); + +test("when svgr is a function, the function is executed", () => { + const fct = jest.fn(); + + defineStorybookConfig({ + svgr: fct + }); + + expect(fct).toHaveBeenCalledTimes(1); +}); + +test("when a transformer is provided, and the transformer update the existing configuration object, the transformer is applied on the Rsbuild config", () => { + const entryTransformer: RsbuildConfigTransformer = (config: RsbuildConfig) => { + config.source = config.source ?? {}; + config.source.entry = { + index: "a-custom-value-in-a-transformer" + }; + + return config; + }; + + const result = defineStorybookConfig({ + transformers: [entryTransformer] + }); + + expect(result.source!.entry!.index).toBe("a-custom-value-in-a-transformer"); +}); + +test("when a transformer is provided, and the transformer returns a new configuration object, the transformer is applied on the Rsbuild config", () => { + const entryTransformer: RsbuildConfigTransformer = () => { + return { + source: { + entry: { + index: "a-custom-value-in-a-transformer" + } + } + }; + }; + + const result = defineStorybookConfig({ + transformers: [entryTransformer] + }); + + expect(result.source!.entry!.index).toBe("a-custom-value-in-a-transformer"); +}); + +test("when multiple transformers are provided, all the transformers are applied on the webpack config", () => { + const entryTransformer: RsbuildConfigTransformer = (config: RsbuildConfig) => { + config.source = config.source ?? {}; + config.source.entry = { + index: "a-custom-value-in-a-transformer" + }; + + return config; + }; + + const distPathTransformer: RsbuildConfigTransformer = (config: RsbuildConfig) => { + config.output = config.output ?? {}; + config.output.distPath = config.output.distPath ?? {}; + config.output.distPath.js = "a-custom-dist-path-in-a-tranformer"; + + return config; + }; + + const result = defineStorybookConfig({ + transformers: [entryTransformer, distPathTransformer] + }); + + expect(result.source!.entry!.index).toBe("a-custom-value-in-a-transformer"); + expect(result.output!.distPath!.js).toBe("a-custom-dist-path-in-a-tranformer"); +}); + +test("transformers context environment is \"dev\"", () => { + const mockTransformer = jest.fn(); + + defineStorybookConfig({ + transformers: [mockTransformer] + }); + + expect(mockTransformer).toHaveBeenCalledWith(expect.anything(), { environment: "storybook", verbose: false }); +}); + +test("when the verbose option is true, the transformers context verbose value is \"true\"", () => { + const mockTransformer = jest.fn(); + + defineStorybookConfig({ + verbose: true, + transformers: [mockTransformer] + }); + + expect(mockTransformer).toHaveBeenCalledWith(expect.anything(), { environment: "storybook", verbose: true }); +}); diff --git a/sample/components/tsconfig.json b/packages/rsbuild-configs/tsconfig.json similarity index 100% rename from sample/components/tsconfig.json rename to packages/rsbuild-configs/tsconfig.json diff --git a/packages/rsbuild-configs/tsup.config.ts b/packages/rsbuild-configs/tsup.config.ts new file mode 100644 index 00000000..fbbc7e07 --- /dev/null +++ b/packages/rsbuild-configs/tsup.config.ts @@ -0,0 +1,5 @@ +import { defineBuildConfig } from "@workleap/tsup-configs"; + +export default defineBuildConfig({ + platform: "node" +}); diff --git a/packages/stylelint-configs/package.json b/packages/stylelint-configs/package.json index 03506fad..292f4e9b 100644 --- a/packages/stylelint-configs/package.json +++ b/packages/stylelint-configs/package.json @@ -48,7 +48,7 @@ "stylelint-prettier": "^5.0.2" }, "devDependencies": { - "@types/node": "22.10.1", + "@types/node": "22.10.2", "@typescript-eslint/parser": "8.18.0", "@workleap/eslint-plugin": "workspace:*", "@workleap/tsup-configs": "workspace:*", diff --git a/packages/webpack-configs/package.json b/packages/webpack-configs/package.json index 56660540..c09b7535 100644 --- a/packages/webpack-configs/package.json +++ b/packages/webpack-configs/package.json @@ -45,13 +45,25 @@ "optional": true } }, + "dependencies": { + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", + "@svgr/webpack": "^8.1.0", + "css-loader": "^7.1.2", + "html-webpack-plugin": "^5.6.3", + "mini-css-extract-plugin": "^2.9.2", + "postcss-loader": "^8.1.1", + "react-refresh": "^0.16.0", + "style-loader": "^4.0.0", + "swc-loader": "^0.2.6", + "terser-webpack-plugin": "^5.3.10" + }, "devDependencies": { "@svgr/core": "8.1.0", "@swc/core": "1.10.1", "@swc/helpers": "0.5.15", "@swc/jest": "0.2.37", "@types/jest": "29.5.14", - "@types/node": "22.10.1", + "@types/node": "22.10.2", "@typescript-eslint/parser": "8.18.0", "@workleap/eslint-plugin": "workspace:*", "@workleap/swc-configs": "workspace:*", @@ -62,17 +74,5 @@ "ts-node": "10.9.2", "tsup": "8.3.5", "typescript": "5.5.4" - }, - "dependencies": { - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.15", - "@svgr/webpack": "^8.1.0", - "css-loader": "^7.1.2", - "html-webpack-plugin": "^5.6.3", - "mini-css-extract-plugin": "^2.9.2", - "postcss-loader": "^8.1.1", - "react-refresh": "^0.16.0", - "style-loader": "^4.0.0", - "swc-loader": "^0.2.6", - "terser-webpack-plugin": "^5.3.10" } } diff --git a/packages/webpack-configs/tests/build.test.ts b/packages/webpack-configs/tests/build.test.ts index 4928f72c..b6b34108 100644 --- a/packages/webpack-configs/tests/build.test.ts +++ b/packages/webpack-configs/tests/build.test.ts @@ -6,12 +6,12 @@ import type { WebpackConfigTransformer } from "../src/transformers/applyTransfor import { findModuleRule, matchAssetModuleType, matchLoaderName } from "../src/transformers/moduleRules.ts"; import { findPlugin, matchConstructorName } from "../src/transformers/plugins.ts"; -const SwcConfig = defineSwcConfig({ +const DefaultSwcConfig = defineSwcConfig({ chrome: "116" }); test("when an entry prop is provided, use the provided entry value", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { entry: "./a-new-entry.ts" }); @@ -19,23 +19,23 @@ test("when an entry prop is provided, use the provided entry value", () => { }); test("when an output path is provided, use the provided ouput path value", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { outputPath: "./a-new-output-path" }); - expect(result.output?.path).toBe("./a-new-output-path"); + expect(result.output!.path).toBe("./a-new-output-path"); }); test("when a public path is set to \"auto\", should not throw an error", () => { - expect(() => defineBuildConfig(SwcConfig, { publicPath: "auto" })).not.toThrow(); + expect(() => defineBuildConfig(DefaultSwcConfig, { publicPath: "auto" })).not.toThrow(); }); test("when a valid public path is provided, use the provided public path value", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { publicPath: "a-valid-public-path-ending-with-a-trailing-slash/" }); - expect(result.output?.publicPath).toBe("a-valid-public-path-ending-with-a-trailing-slash/"); + expect(result.output!.publicPath).toBe("a-valid-public-path-ending-with-a-trailing-slash/"); }); test("when additional module rules are provided, append the provided rules at the end of the module rules array", () => { @@ -49,7 +49,7 @@ test("when additional module rules are provided, append the provided rules at th type: "asset/inline" }; - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { moduleRules: [ newModuleRule1, newModuleRule2 @@ -58,8 +58,8 @@ test("when additional module rules are provided, append the provided rules at th const rulesCount = result.module!.rules!.length; - expect(result.module?.rules![rulesCount - 2]).toBe(newModuleRule1); - expect(result.module?.rules![rulesCount - 1]).toBe(newModuleRule2); + expect(result.module!.rules![rulesCount - 2]).toBe(newModuleRule1); + expect(result.module!.rules![rulesCount - 1]).toBe(newModuleRule2); }); test("when additional plugins are provided, append the provided plugins at the end of the plugins array", () => { @@ -78,7 +78,7 @@ test("when additional plugins are provided, append the provided plugins at the e const newPlugin1 = new Plugin1(); const newPlugin2 = new Plugin2(); - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { plugins: [ newPlugin1, newPlugin2 @@ -92,23 +92,23 @@ test("when additional plugins are provided, append the provided plugins at the e }); test("when optimize is true, minimize is set to true", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: true }); - expect(result.optimization?.minimize).toBeTruthy(); + expect(result.optimization!.minimize).toBeTruthy(); }); test("when optimize is false, minimize is set to false", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: false }); - expect(result.optimization?.minimize).toBeFalsy(); + expect(result.optimization!.minimize).toBeFalsy(); }); test("when optimize is \"readable\", minimize is set to true", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: "readable" }); @@ -116,7 +116,7 @@ test("when optimize is \"readable\", minimize is set to true", () => { }); test("when optimize is false, chunkIds is set to \"named\"", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: false }); @@ -124,23 +124,23 @@ test("when optimize is false, chunkIds is set to \"named\"", () => { }); test("when optimize is false, moduleIds is set to \"named\"", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: false }); - expect(result.optimization?.chunkIds).toBe("named"); + expect(result.optimization!.chunkIds).toBe("named"); }); test("when optimize is \"readable\", chunkIds is set to \"named\"", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: "readable" }); - expect(result.optimization?.chunkIds).toBe("named"); + expect(result.optimization!.chunkIds).toBe("named"); }); test("when optimize is \"readable\", moduleIds is set to \"named\"", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: "readable" }); @@ -148,31 +148,31 @@ test("when optimize is \"readable\", moduleIds is set to \"named\"", () => { }); test("when optimize is true, include minify configuration", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: true }); - expect(result.optimization?.minimizer).toBeDefined(); + expect(result.optimization!.minimizer).toBeDefined(); }); test("when optimize is false, do not include minify configuration", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: false }); - expect(result.optimization?.minimizer).toBeUndefined(); + expect(result.optimization!.minimizer).toBeUndefined(); }); test("when optimize is \"readable\", include minify configuration", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { optimize: "readable" }); - expect(result.optimization?.minimizer).toBeDefined(); + expect(result.optimization!.minimizer).toBeDefined(); }); test("when htmlWebpackPlugin is \"false\", no html-webpack-plugin instance is added to the plugin array", () => { - const config = defineBuildConfig(SwcConfig, { + const config = defineBuildConfig(DefaultSwcConfig, { htmlWebpackPlugin: false }); @@ -182,7 +182,7 @@ test("when htmlWebpackPlugin is \"false\", no html-webpack-plugin instance is ad }); test("when htmlWebpackPlugin is \"true\", an html-webpack-plugin instance is added to the plugin array", () => { - const config = defineBuildConfig(SwcConfig, { + const config = defineBuildConfig(DefaultSwcConfig, { htmlWebpackPlugin: true }); @@ -192,7 +192,7 @@ test("when htmlWebpackPlugin is \"true\", an html-webpack-plugin instance is add }); test("when css modules is enabled, include css modules configuration", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { cssModules: true }); @@ -200,30 +200,30 @@ test("when css modules is enabled, include css modules configuration", () => { // css-loader doesn't provide typings. // eslint-disable-next-line @typescript-eslint/no-explicit-any - expect(((cssLoader?.moduleRule as RuleSetRule).options as any).modules).toBeTruthy(); + expect(((cssLoader!.moduleRule as RuleSetRule).options as any).modules).toBeTruthy(); // css-loader doesn't provide typings. // eslint-disable-next-line @typescript-eslint/no-explicit-any - expect(((cssLoader?.moduleRule as RuleSetRule).options as any).importLoaders).toBe(1); + expect(((cssLoader!.moduleRule as RuleSetRule).options as any).importLoaders).toBe(1); }); test("when css modules is disabled, do not include css modules configuration", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { cssModules: false }); const cssLoader = findModuleRule(result, matchLoaderName("css-loader")); - expect((cssLoader?.moduleRule as RuleSetRule).options).toBeUndefined(); + expect((cssLoader!.moduleRule as RuleSetRule).options).toBeUndefined(); }); test("the provided swc config object is set as the swc-loader options", () => { - const swcConfig = SwcConfig; + const swcConfig = DefaultSwcConfig; const result = defineBuildConfig(swcConfig); const swcLoader = findModuleRule(result, matchLoaderName("swc-loader")); - expect((swcLoader?.moduleRule as RuleSetRule).options).toBe(swcConfig); + expect((swcLoader!.moduleRule as RuleSetRule).options).toBe(swcConfig); }); test("when a transformer is provided, and the transformer update the existing configuration object, the transformer is applied on the webpack config", () => { @@ -233,7 +233,7 @@ test("when a transformer is provided, and the transformer update the existing co return config; }; - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { transformers: [entryTransformer] }); @@ -247,7 +247,7 @@ test("when a transformer is provided, and the transformer returns a new configur }; }; - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { transformers: [entryTransformer] }); @@ -267,7 +267,7 @@ test("when multiple transformers are provided, all the transformers are applied return config; }; - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { transformers: [entryTransformer, devToolTransformer] }); @@ -278,7 +278,7 @@ test("when multiple transformers are provided, all the transformers are applied test("transformers context environment is \"build\"", () => { const mockTransformer = jest.fn(); - defineBuildConfig(SwcConfig, { + defineBuildConfig(DefaultSwcConfig, { transformers: [mockTransformer] }); @@ -288,7 +288,7 @@ test("transformers context environment is \"build\"", () => { test("when the verbose option is true, the transformers context verbose value is \"true\"", () => { const mockTransformer = jest.fn(); - defineBuildConfig(SwcConfig, { + defineBuildConfig(DefaultSwcConfig, { verbose: true, transformers: [mockTransformer] }); @@ -309,7 +309,7 @@ test("when the verbose option is true, the transformers context verbose value is // }); test("when the svgr option is false, do not add the svgr rule", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { svgr: false }); @@ -319,13 +319,13 @@ test("when the svgr option is false, do not add the svgr rule", () => { }); test("when the svgr option is false, add .svg to the default assets rule", () => { - const result = defineBuildConfig(SwcConfig, { + const result = defineBuildConfig(DefaultSwcConfig, { svgr: false }); const assetsRule = findModuleRule(result, matchAssetModuleType("asset/resource")); - expect((assetsRule?.moduleRule as RuleSetRule).test).toEqual(/\.(png|jpe?g|gif|svg)$/i); + expect((assetsRule!.moduleRule as RuleSetRule).test).toEqual(/\.(png|jpe?g|gif|svg)$/i); }); describe("defineBuildHtmlWebpackPluginConfig", () => { diff --git a/packages/webpack-configs/tests/dev.test.ts b/packages/webpack-configs/tests/dev.test.ts index 4ec23b9a..f9d7fdf4 100644 --- a/packages/webpack-configs/tests/dev.test.ts +++ b/packages/webpack-configs/tests/dev.test.ts @@ -9,12 +9,12 @@ import type { WebpackConfigTransformer } from "../src/transformers/applyTransfor import { findModuleRule, matchAssetModuleType, matchLoaderName } from "../src/transformers/moduleRules.ts"; import { findPlugin, matchConstructorName } from "../src/transformers/plugins.ts"; -const DefaultConfig = defineSwcConfig({ +const DefaultSwcConfig = defineSwcConfig({ chrome: "116" }); test("when an entry prop is provided, use the provided entry value", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { entry: "./a-new-entry.ts" }); @@ -22,7 +22,7 @@ test("when an entry prop is provided, use the provided entry value", () => { }); test("when https is enabled, the dev server is configured for https", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { https: true }); @@ -30,7 +30,7 @@ test("when https is enabled, the dev server is configured for https", () => { }); test("when https is disabled, the dev server is not configured for https", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { https: false }); @@ -38,7 +38,7 @@ test("when https is disabled, the dev server is not configured for https", () => }); test("when https is enabled, the public path starts with https", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { https: true }); @@ -46,7 +46,7 @@ test("when https is enabled, the public path starts with https", () => { }); test("when https is disabled, the public path starts with http", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { https: false }); @@ -54,7 +54,7 @@ test("when https is disabled, the public path starts with http", () => { }); test("when an host is provided, the dev server host is the provided host value", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { host: "a-custom-host" }); @@ -62,7 +62,7 @@ test("when an host is provided, the dev server host is the provided host value", }); test("when an host is provided, the public path include the provided host value", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { host: "a-custom-host" }); @@ -70,7 +70,7 @@ test("when an host is provided, the public path include the provided host value" }); test("when a port is provided, the dev server port is the provided port value", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { port: 1234 }); @@ -78,7 +78,7 @@ test("when a port is provided, the dev server port is the provided port value", }); test("when a port is provided, the public path include the provided port", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { port: 1234 }); @@ -86,7 +86,7 @@ test("when a port is provided, the public path include the provided port", () => }); test("when a public path is provided, use the provided public path", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { publicPath: "http://my-dev-host.com/" }); @@ -94,7 +94,7 @@ test("when a public path is provided, use the provided public path", () => { }); test("when cache is enabled, the cache configuration is included", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { cache: true }); @@ -102,7 +102,7 @@ test("when cache is enabled, the cache configuration is included", () => { }); test("when cache is disabled, the cache prop is false", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { cache: false }); @@ -120,7 +120,7 @@ test("when additional module rules are provided, append the provided rules at th type: "asset/inline" }; - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { moduleRules: [ newModuleRule1, newModuleRule2 @@ -149,7 +149,7 @@ test("when additional plugins are provided, append the provided plugins at the e const newPlugin1 = new Plugin1(); const newPlugin2 = new Plugin2(); - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { plugins: [ newPlugin1, newPlugin2 @@ -163,7 +163,7 @@ test("when additional plugins are provided, append the provided plugins at the e }); test("when htmlWebpackPlugin is \"false\", no html-webpack-plugin instance is added to the plugin array", () => { - const config = defineDevConfig(DefaultConfig, { + const config = defineDevConfig(DefaultSwcConfig, { htmlWebpackPlugin: false }); @@ -173,7 +173,7 @@ test("when htmlWebpackPlugin is \"false\", no html-webpack-plugin instance is ad }); test("when htmlWebpackPlugin is \"true\", an html-webpack-plugin instance is added to the plugin array", () => { - const config = defineDevConfig(DefaultConfig, { + const config = defineDevConfig(DefaultSwcConfig, { htmlWebpackPlugin: true }); @@ -183,7 +183,7 @@ test("when htmlWebpackPlugin is \"true\", an html-webpack-plugin instance is add }); test("when fast refresh is disabled, dev server hot module reload is enabled", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { fastRefresh: false }); @@ -191,7 +191,7 @@ test("when fast refresh is disabled, dev server hot module reload is enabled", ( }); test("when fast refresh is enabled, add the fast refresh plugin", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { fastRefresh: true }); @@ -199,7 +199,7 @@ test("when fast refresh is enabled, add the fast refresh plugin", () => { }); test("when fast refresh is disabled, do not add the fast refresh plugin", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { fastRefresh: false }); @@ -207,7 +207,7 @@ test("when fast refresh is disabled, do not add the fast refresh plugin", () => }); test("when fast refresh is enabled, enable swc fast refresh", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { fastRefresh: true }); @@ -217,7 +217,7 @@ test("when fast refresh is enabled, enable swc fast refresh", () => { }); test("when fast refresh is disabled, disable swc fast refresh", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { fastRefresh: false }); @@ -227,7 +227,7 @@ test("when fast refresh is disabled, disable swc fast refresh", () => { }); test("when css modules is enabled, include css modules configuration", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { cssModules: true }); @@ -242,7 +242,7 @@ test("when css modules is enabled, include css modules configuration", () => { }); test("when css modules is disabled, do not include css modules configuration", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { cssModules: false }); @@ -252,7 +252,7 @@ test("when css modules is disabled, do not include css modules configuration", ( }); test("when the overlay option is not provided and fast refresh is disabled, the devserver overlay option is undefined", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { fastRefresh: false }); @@ -260,7 +260,7 @@ test("when the overlay option is not provided and fast refresh is disabled, the }); test("when fast refresh is enabled, the devserver overlay option is false", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { fastRefresh: true }); @@ -268,7 +268,7 @@ test("when fast refresh is enabled, the devserver overlay option is false", () = }); test("when the overlay is disabled, the devserver overlay option is false", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { overlay: false }); @@ -276,7 +276,7 @@ test("when the overlay is disabled, the devserver overlay option is false", () = }); test("the provided swc config object is set as the swc-loader options", () => { - const config = DefaultConfig; + const config = DefaultSwcConfig; const result = defineDevConfig(config); @@ -292,7 +292,7 @@ test("when a transformer is provided, and the transformer update the existing co return config; }; - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { transformers: [entryTransformer] }); @@ -306,7 +306,7 @@ test("when a transformer is provided, and the transformer returns a new configur }; }; - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { transformers: [entryTransformer] }); @@ -326,7 +326,7 @@ test("when multiple transformers are provided, all the transformers are applied return config; }; - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { transformers: [entryTransformer, devToolTransformer] }); @@ -337,7 +337,7 @@ test("when multiple transformers are provided, all the transformers are applied test("transformers context environment is \"dev\"", () => { const mockTransformer = jest.fn(); - defineDevConfig(DefaultConfig, { + defineDevConfig(DefaultSwcConfig, { transformers: [mockTransformer] }); @@ -347,7 +347,7 @@ test("transformers context environment is \"dev\"", () => { test("when the verbose option is true, the transformers context verbose value is \"true\"", () => { const mockTransformer = jest.fn(); - defineDevConfig(DefaultConfig, { + defineDevConfig(DefaultSwcConfig, { verbose: true, transformers: [mockTransformer] }); @@ -368,7 +368,7 @@ test("when the verbose option is true, the transformers context verbose value is // }); test("when the svgr option is false, do not add the svgr rule", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { svgr: false }); @@ -378,7 +378,7 @@ test("when the svgr option is false, do not add the svgr rule", () => { }); test("when the svgr option is false, add .svg to the default assets rule", () => { - const result = defineDevConfig(DefaultConfig, { + const result = defineDevConfig(DefaultSwcConfig, { svgr: false }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 08317a55..31532235 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,9 +4,6 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -overrides: - minimist: ^0.2.4 - importers: .: @@ -30,8 +27,8 @@ importers: specifier: 8.57.0 version: 8.57.0 knip: - specifier: 5.39.2 - version: 5.39.2(@types/node@22.10.1)(typescript@5.5.4) + specifier: 5.39.4 + version: 5.39.4(@types/node@22.10.2)(typescript@5.5.4) pkg-pr-new: specifier: 0.0.35 version: 0.0.35 @@ -75,8 +72,8 @@ importers: packages/eslint-plugin: dependencies: '@stylistic/eslint-plugin-ts': - specifier: ^2.12.0 - version: 2.12.0(eslint@8.57.0)(typescript@5.7.2) + specifier: ^2.12.1 + version: 2.12.1(eslint@8.57.0)(typescript@5.7.2) '@typescript-eslint/eslint-plugin': specifier: ^8.18.0 version: 8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2) @@ -88,7 +85,7 @@ importers: version: 2.31.0(@typescript-eslint/parser@8.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0) eslint-plugin-jest: specifier: ^28.9.0 - version: 28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)))(typescript@5.7.2) + version: 28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2) eslint-plugin-jsx-a11y: specifier: ^6.10.2 version: 6.10.2(eslint@8.57.0) @@ -142,8 +139,8 @@ importers: specifier: 29.5.14 version: 29.5.14 '@types/node': - specifier: 22.10.1 - version: 22.10.1 + specifier: 22.10.2 + version: 22.10.2 '@workleap/typescript-configs': specifier: workspace:* version: link:../typescript-configs @@ -152,10 +149,10 @@ importers: version: 8.57.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)) + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2) + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.1)(jiti@2.4.1)(postcss@8.4.49)(typescript@5.7.2)(yaml@2.6.1) @@ -182,8 +179,72 @@ importers: specifier: 29.5.14 version: 29.5.14 '@types/node': - specifier: 22.10.1 - version: 22.10.1 + specifier: 22.10.2 + version: 22.10.2 + '@typescript-eslint/parser': + specifier: 8.18.0 + version: 8.18.0(eslint@8.57.0)(typescript@5.5.4) + '@workleap/eslint-plugin': + specifier: workspace:* + version: link:../eslint-plugin + '@workleap/swc-configs': + specifier: workspace:* + version: link:../swc-configs + '@workleap/tsup-configs': + specifier: workspace:* + version: link:../tsup-configs + '@workleap/typescript-configs': + specifier: workspace:* + version: link:../typescript-configs + eslint: + specifier: 8.57.0 + version: 8.57.0 + jest: + specifier: 29.7.0 + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) + tsup: + specifier: 8.3.5 + version: 8.3.5(@swc/core@1.10.1)(jiti@2.4.1)(postcss@8.4.49)(typescript@5.5.4)(yaml@2.6.1) + typescript: + specifier: 5.5.4 + version: 5.5.4 + + packages/rsbuild-configs: + dependencies: + '@rsbuild/plugin-basic-ssl': + specifier: ^1.1.1 + version: 1.1.1(@rsbuild/core@1.1.9) + '@rsbuild/plugin-image-compress': + specifier: ^1.1.0 + version: 1.1.0(@rsbuild/core@1.1.9) + '@rsbuild/plugin-react': + specifier: ^1.1.0 + version: 1.1.0(@rsbuild/core@1.1.9) + '@rsbuild/plugin-svgr': + specifier: ^1.0.6 + version: 1.0.6(@rsbuild/core@1.1.9)(typescript@5.5.4) + devDependencies: + '@rsbuild/core': + specifier: 1.1.9 + version: 1.1.9 + '@rspack/core': + specifier: 1.1.6 + version: 1.1.6(@swc/helpers@0.5.15) + '@swc/core': + specifier: 1.10.1 + version: 1.10.1(@swc/helpers@0.5.15) + '@swc/jest': + specifier: 0.2.37 + version: 0.2.37(@swc/core@1.10.1(@swc/helpers@0.5.15)) + '@types/jest': + specifier: 29.5.14 + version: 29.5.14 + '@types/node': + specifier: 22.10.2 + version: 22.10.2 '@typescript-eslint/parser': specifier: 8.18.0 version: 8.18.0(eslint@8.57.0)(typescript@5.5.4) @@ -204,10 +265,10 @@ importers: version: 8.57.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.1)(jiti@2.4.1)(postcss@8.4.49)(typescript@5.5.4)(yaml@2.6.1) @@ -231,8 +292,8 @@ importers: version: 5.0.2(prettier@3.4.2)(stylelint@16.11.0(typescript@5.5.4)) devDependencies: '@types/node': - specifier: 22.10.1 - version: 22.10.1 + specifier: 22.10.2 + version: 22.10.2 '@typescript-eslint/parser': specifier: 8.18.0 version: 8.18.0(eslint@8.57.0)(typescript@5.5.4) @@ -290,10 +351,10 @@ importers: version: 8.57.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.1)(jiti@2.4.1)(postcss@8.4.49)(typescript@5.5.4)(yaml@2.6.1) @@ -326,10 +387,10 @@ importers: version: 8.57.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.1)(jiti@2.4.1)(postcss@8.4.49)(typescript@5.5.4)(yaml@2.6.1) @@ -347,7 +408,7 @@ importers: dependencies: '@pmmmwh/react-refresh-webpack-plugin': specifier: ^0.5.15 - version: 0.5.15(react-refresh@0.16.0)(type-fest@4.30.0)(webpack-dev-server@5.1.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + version: 0.5.15(react-refresh@0.16.0)(type-fest@4.30.0)(webpack-dev-server@5.2.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) '@svgr/webpack': specifier: ^8.1.0 version: 8.1.0(typescript@5.5.4) @@ -356,10 +417,10 @@ importers: version: 4.24.2 css-loader: specifier: ^7.1.2 - version: 7.1.2(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + version: 7.1.2(@rspack/core@1.1.6(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) html-webpack-plugin: specifier: ^5.6.3 - version: 5.6.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + version: 5.6.3(@rspack/core@1.1.6(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) mini-css-extract-plugin: specifier: ^2.9.2 version: 2.9.2(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) @@ -368,7 +429,7 @@ importers: version: 8.4.49 postcss-loader: specifier: ^8.1.1 - version: 8.1.1(postcss@8.4.49)(typescript@5.5.4)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + version: 8.1.1(@rspack/core@1.1.6(@swc/helpers@0.5.15))(postcss@8.4.49)(typescript@5.5.4)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) react-refresh: specifier: ^0.16.0 version: 0.16.0 @@ -386,7 +447,7 @@ importers: version: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) webpack-dev-server: specifier: '>=5.0.0' - version: 5.1.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + version: 5.2.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) devDependencies: '@svgr/core': specifier: 8.1.0 @@ -404,8 +465,8 @@ importers: specifier: 29.5.14 version: 29.5.14 '@types/node': - specifier: 22.10.1 - version: 22.10.1 + specifier: 22.10.2 + version: 22.10.2 '@typescript-eslint/parser': specifier: 8.18.0 version: 8.18.0(eslint@8.57.0)(typescript@5.5.4) @@ -426,10 +487,10 @@ importers: version: 8.57.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) tsup: specifier: 8.3.5 version: 8.3.5(@swc/core@1.10.1)(jiti@2.4.1)(postcss@8.4.49)(typescript@5.5.4)(yaml@2.6.1) @@ -437,12 +498,245 @@ importers: specifier: 5.5.4 version: 5.5.4 - sample/app: + samples/rsbuild/app: + dependencies: + '@rsbuild-sample/components': + specifier: workspace:* + version: link:../components + react: + specifier: 19.0.0 + version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) + react-router: + specifier: 7.0.2 + version: 7.0.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + devDependencies: + '@rsbuild/core': + specifier: 1.1.9 + version: 1.1.9 + '@rspack/core': + specifier: 1.1.6 + version: 1.1.6(@swc/helpers@0.5.15) + '@swc/core': + specifier: 1.10.1 + version: 1.10.1(@swc/helpers@0.5.15) + '@swc/jest': + specifier: 0.2.37 + version: 0.2.37(@swc/core@1.10.1(@swc/helpers@0.5.15)) + '@testing-library/react': + specifier: 16.1.0 + version: 16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@types/jest': + specifier: 29.5.14 + version: 29.5.14 + '@types/node': + specifier: 22.10.2 + version: 22.10.2 + '@types/react': + specifier: 19.0.1 + version: 19.0.1 + '@types/react-dom': + specifier: 19.0.2 + version: 19.0.2(@types/react@19.0.1) + '@typescript-eslint/parser': + specifier: 8.18.0 + version: 8.18.0(eslint@8.57.0)(typescript@5.5.4) + '@workleap/browserslist-config': + specifier: workspace:* + version: link:../../../packages/browserslist-config + '@workleap/eslint-plugin': + specifier: workspace:* + version: link:../../../packages/eslint-plugin + '@workleap/rsbuild-configs': + specifier: workspace:* + version: link:../../../packages/rsbuild-configs + '@workleap/stylelint-configs': + specifier: workspace:* + version: link:../../../packages/stylelint-configs + '@workleap/swc-configs': + specifier: workspace:* + version: link:../../../packages/swc-configs + '@workleap/typescript-configs': + specifier: workspace:* + version: link:../../../packages/typescript-configs + browserslist: + specifier: 4.24.2 + version: 4.24.2 + cross-env: + specifier: 7.0.3 + version: 7.0.3 + eslint: + specifier: 8.57.0 + version: 8.57.0 + http-server: + specifier: 14.1.1 + version: 14.1.1 + identity-obj-proxy: + specifier: 3.0.0 + version: 3.0.0 + jest: + specifier: 29.7.0 + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) + jest-environment-jsdom: + specifier: 29.7.0 + version: 29.7.0 + msw: + specifier: 2.6.8 + version: 2.6.8(@types/node@22.10.2)(typescript@5.5.4) + nodemon: + specifier: 3.1.7 + version: 3.1.7 + stylelint: + specifier: 16.11.0 + version: 16.11.0(typescript@5.5.4) + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) + typescript: + specifier: 5.5.4 + version: 5.5.4 + + samples/rsbuild/components: + devDependencies: + '@rsbuild/core': + specifier: 1.1.9 + version: 1.1.9 + '@storybook/react': + specifier: 8.4.7 + version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))(typescript@5.5.4) + '@swc/core': + specifier: 1.10.1 + version: 1.10.1(@swc/helpers@0.5.15) + '@swc/jest': + specifier: 0.2.37 + version: 0.2.37(@swc/core@1.10.1(@swc/helpers@0.5.15)) + '@testing-library/react': + specifier: 16.1.0 + version: 16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@types/jest': + specifier: 29.5.14 + version: 29.5.14 + '@types/react': + specifier: 19.0.1 + version: 19.0.1 + '@types/react-dom': + specifier: 19.0.2 + version: 19.0.2(@types/react@19.0.1) + '@typescript-eslint/parser': + specifier: 8.18.0 + version: 8.18.0(eslint@8.57.0)(typescript@5.5.4) + '@workleap/eslint-plugin': + specifier: workspace:* + version: link:../../../packages/eslint-plugin + '@workleap/stylelint-configs': + specifier: workspace:* + version: link:../../../packages/stylelint-configs + '@workleap/swc-configs': + specifier: workspace:* + version: link:../../../packages/swc-configs + '@workleap/typescript-configs': + specifier: workspace:* + version: link:../../../packages/typescript-configs + eslint: + specifier: 8.57.0 + version: 8.57.0 + identity-obj-proxy: + specifier: 3.0.0 + version: 3.0.0 + jest: + specifier: 29.7.0 + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) + jest-environment-jsdom: + specifier: 29.7.0 + version: 29.7.0 + react: + specifier: 19.0.0 + version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) + ts-node: + specifier: 10.9.2 + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) + typescript: + specifier: 5.5.4 + version: 5.5.4 + + samples/storybook: + dependencies: + react: + specifier: 19.0.0 + version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) + devDependencies: + '@rsbuild/core': + specifier: 1.1.9 + version: 1.1.9 + '@rspack/core': + specifier: 1.1.6 + version: 1.1.6(@swc/helpers@0.5.15) + '@storybook/addon-a11y': + specifier: 8.4.7 + version: 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-essentials': + specifier: 8.4.7 + version: 8.4.7(@types/react@19.0.1)(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-interactions': + specifier: 8.4.7 + version: 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-links': + specifier: 8.4.7 + version: 8.4.7(react@19.0.0)(storybook@8.4.7(prettier@3.4.2)) + '@storybook/react': + specifier: 8.4.7 + version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))(typescript@5.5.4) + '@types/react': + specifier: 19.0.1 + version: 19.0.1 + '@types/react-dom': + specifier: 19.0.2 + version: 19.0.2(@types/react@19.0.1) + '@workleap/browserslist-config': + specifier: workspace:* + version: link:../../packages/browserslist-config + '@workleap/eslint-plugin': + specifier: workspace:* + version: link:../../packages/eslint-plugin + '@workleap/rsbuild-configs': + specifier: workspace:* + version: link:../../packages/rsbuild-configs + '@workleap/typescript-configs': + specifier: workspace:* + version: link:../../packages/typescript-configs + browserslist: + specifier: 4.24.2 + version: 4.24.2 + eslint: + specifier: 8.57.0 + version: 8.57.0 + http-server: + specifier: 14.1.1 + version: 14.1.1 + storybook: + specifier: 8.4.7 + version: 8.4.7(prettier@3.4.2) + storybook-react-rsbuild: + specifier: 0.1.6 + version: 0.1.6(@rsbuild/core@1.1.9)(@rspack/core@1.1.6(@swc/helpers@0.5.15))(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.28.1)(storybook@8.4.7(prettier@3.4.2))(typescript@5.5.4)(webpack@5.97.1(esbuild@0.24.0)) + typescript: + specifier: 5.5.4 + version: 5.5.4 + + samples/webpack/app: dependencies: - '@sample/components': + '@webpack-sample/components': specifier: workspace:* version: link:../components - '@sample/tsup-lib': + '@webpack-sample/tsup-lib': specifier: workspace:* version: link:../tsup-lib react: @@ -471,8 +765,8 @@ importers: specifier: 29.5.14 version: 29.5.14 '@types/node': - specifier: 22.10.1 - version: 22.10.1 + specifier: 22.10.2 + version: 22.10.2 '@types/react': specifier: 19.0.1 version: 19.0.1 @@ -484,25 +778,25 @@ importers: version: 8.18.0(eslint@8.57.0)(typescript@5.5.4) '@workleap/browserslist-config': specifier: workspace:* - version: link:../../packages/browserslist-config + version: link:../../../packages/browserslist-config '@workleap/eslint-plugin': specifier: workspace:* - version: link:../../packages/eslint-plugin + version: link:../../../packages/eslint-plugin '@workleap/postcss-configs': specifier: workspace:* - version: link:../../packages/postcss-configs + version: link:../../../packages/postcss-configs '@workleap/stylelint-configs': specifier: workspace:* - version: link:../../packages/stylelint-configs + version: link:../../../packages/stylelint-configs '@workleap/swc-configs': specifier: workspace:* - version: link:../../packages/swc-configs + version: link:../../../packages/swc-configs '@workleap/typescript-configs': specifier: workspace:* - version: link:../../packages/typescript-configs + version: link:../../../packages/typescript-configs '@workleap/webpack-configs': specifier: workspace:* - version: link:../../packages/webpack-configs + version: link:../../../packages/webpack-configs browserslist: specifier: 4.24.2 version: 4.24.2 @@ -520,13 +814,13 @@ importers: version: 3.0.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 msw: specifier: 2.6.8 - version: 2.6.8(@types/node@22.10.1)(typescript@5.5.4) + version: 2.6.8(@types/node@22.10.2)(typescript@5.5.4) nodemon: specifier: 3.1.7 version: 3.1.7 @@ -538,7 +832,7 @@ importers: version: 16.11.0(typescript@5.5.4) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 @@ -547,12 +841,12 @@ importers: version: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 - version: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1) + version: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) webpack-dev-server: - specifier: 5.1.0 - version: 5.1.0(webpack-cli@5.1.4)(webpack@5.97.1) + specifier: 5.2.0 + version: 5.2.0(webpack-cli@5.1.4)(webpack@5.97.1) - sample/components: + samples/webpack/components: devDependencies: '@swc/core': specifier: 1.10.1 @@ -577,16 +871,16 @@ importers: version: 8.18.0(eslint@8.57.0)(typescript@5.5.4) '@workleap/eslint-plugin': specifier: workspace:* - version: link:../../packages/eslint-plugin + version: link:../../../packages/eslint-plugin '@workleap/stylelint-configs': specifier: workspace:* - version: link:../../packages/stylelint-configs + version: link:../../../packages/stylelint-configs '@workleap/swc-configs': specifier: workspace:* - version: link:../../packages/swc-configs + version: link:../../../packages/swc-configs '@workleap/typescript-configs': specifier: workspace:* - version: link:../../packages/typescript-configs + version: link:../../../packages/typescript-configs eslint: specifier: 8.57.0 version: 8.57.0 @@ -595,7 +889,7 @@ importers: version: 3.0.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + version: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 @@ -607,25 +901,25 @@ importers: version: 19.0.0(react@19.0.0) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 - sample/tsup-lib: + samples/webpack/tsup-lib: devDependencies: '@typescript-eslint/parser': specifier: 8.18.0 version: 8.18.0(eslint@8.57.0)(typescript@5.5.4) '@workleap/eslint-plugin': specifier: workspace:* - version: link:../../packages/eslint-plugin + version: link:../../../packages/eslint-plugin '@workleap/tsup-configs': specifier: workspace:* - version: link:../../packages/tsup-configs + version: link:../../../packages/tsup-configs '@workleap/typescript-configs': specifier: workspace:* - version: link:../../packages/typescript-configs + version: link:../../../packages/typescript-configs eslint: specifier: 8.57.0 version: 8.57.0 @@ -642,6 +936,9 @@ packages: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} + '@adobe/css-tools@4.4.1': + resolution: {integrity: sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==} + '@altano/repository-tools@0.1.1': resolution: {integrity: sha512-5vbUs2A98CC3g1AlOBdkBE0BMukkLjLIsMHAtuxg6Pt9dQXxYWdLKOf66v6c/vIqtNcgTMv0oGtddLdMuH9X6w==} @@ -1608,6 +1905,15 @@ packages: peerDependencies: effect: ^3.6.5 + '@emnapi/core@1.3.1': + resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@esbuild/aix-ppc64@0.24.0': resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} engines: {node: '>=18'} @@ -1752,22 +2058,12 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.4.1': resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1895,8 +2191,8 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.5': - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} '@jridgewell/resolve-uri@3.1.2': @@ -1950,23 +2246,119 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@mdx-js/react@3.1.0': + resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + + '@module-federation/runtime-tools@0.5.1': + resolution: {integrity: sha512-nfBedkoZ3/SWyO0hnmaxuz0R0iGPSikHZOAZ0N/dVSQaIzlffUo35B5nlC2wgWIc0JdMZfkwkjZRrnuuDIJbzg==} + + '@module-federation/runtime@0.5.1': + resolution: {integrity: sha512-xgiMUWwGLWDrvZc9JibuEbXIbhXg6z2oUkemogSvQ4LKvrl/n0kbqP1Blk669mXzyWbqtSp6PpvNdwaE1aN5xQ==} + + '@module-federation/sdk@0.5.1': + resolution: {integrity: sha512-exvchtjNURJJkpqjQ3/opdbfeT2wPKvrbnGnyRkrwW5o3FH1LaST1tkiNviT6OXTexGaVc2DahbdniQHVtQ7pA==} + + '@module-federation/webpack-bundler-runtime@0.5.1': + resolution: {integrity: sha512-mMhRFH0k2VjwHt3Jol9JkUsmI/4XlrAoBG3E0o7HoyoPYv1UFOWyqAflfANcUPgbYpvqmyLzDcO+3IT36LXnrA==} + '@mswjs/interceptors@0.37.3': resolution: {integrity: sha512-USvgCL/uOGFtVa6SVyRrC8kIAedzRohxIXN5LISlg5C5vLZCn7dgMFVSNhSF9cuBEFrm/O2spDWEZeMnw4ZXYg==} engines: {node: '>=18'} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@napi-rs/image-android-arm64@1.9.2': + resolution: {integrity: sha512-DQNI06ukKqpF4eogz9zyxfU+GYp11TfDqSNWKmk/IRU2oiB0DEgskuj7ZzaKMPJWFRZjI86V233UrrNRh76h2Q==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@napi-rs/image-darwin-arm64@1.9.2': + resolution: {integrity: sha512-w+0X87sORbC2uDpH7NAdELOnvzhu3dB19h2oMaD+YIv/+CVXV5eK2PS3zkRgMLCinVtFOZFZK3dFbHU3kncCRw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@napi-rs/image-darwin-x64@1.9.2': + resolution: {integrity: sha512-8SnFDcgUSoL6Y38lstXi5FYECD1f4dJqQe2UCTwciED8gZnpC8Pju7JYJWcYgHHXn1JnKP9T1lPlSaX+L56EgA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] - '@npmcli/config@8.3.4': + '@napi-rs/image-freebsd-x64@1.9.2': + resolution: {integrity: sha512-oS0+iSb8AekjaHgTZdARKceqTPxSokByLzNQ9vGf2lZlTwlRFmXGq4XYutyzqzRuLT3BATLwtGMXiguMEYMuUw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/image-linux-arm-gnueabihf@1.9.2': + resolution: {integrity: sha512-bsbZSvw3wa7yaLVvz4M5VhJaB9LmgjAL3W7rnmXaX5BgpaQImNDm9MrxPG8ennr9Pbn6qDtCSioOz53ZgWUtgg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/image-linux-arm64-gnu@1.9.2': + resolution: {integrity: sha512-tiN9RMwEIcA8TodvmxdeJqsRdUGKAmxQ2aa0FkYjshdkmChG/sqUtUoL9LdmDf1tw1IACrSuT2Wj4LevxBdIJA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/image-linux-arm64-musl@1.9.2': + resolution: {integrity: sha512-w6Sx1j9PtqO2bP3Jl6nuMryzxA3zsoc1U8u1H7AZketyhxXIxqVm0oGomZGs5Bgshzau45bcWinp6GWrlSwt6A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/image-linux-x64-gnu@1.9.2': + resolution: {integrity: sha512-yB/s9wNB/9YHpQ4TwN8NWMA1tEK1gPLQwtysa68yMdHczb+7BTCKCIYIHD9rUulyT1Q/VgLIJCUMoxve0pIoeg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/image-linux-x64-musl@1.9.2': + resolution: {integrity: sha512-x9dRlo27xYXonh+gZZTqQL4lAfi/lhi8K8LE2hczbZffqmXvWU7NuHSgPVVeU/nvcMMqw1Cjzn81h7ny44SLbQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/image-wasm32-wasi@1.9.2': + resolution: {integrity: sha512-BeA1wzzIG4+tdAwXWaAjObBOC6SzIbq0IhykSQ1xCGvYwd8stsn7ktPRz5b55PDo+Doj65PCT4H/xUgFcSiLCw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@napi-rs/image-win32-ia32-msvc@1.9.2': + resolution: {integrity: sha512-JDJP04Hg9Qru5Pth4gfBkXz9hZd/otx6ymi2VTuSKDFjpJIjk4tyUr9+BIE1ghFCHDzeJGVe7CDGdF/NTA1xrg==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/image-win32-x64-msvc@1.9.2': + resolution: {integrity: sha512-baRyTED6FkTsPliSOH7x8TV/cyAST9y6L1ClSgSCVEx7+W8MKKig90fF302kEa2PwMAyrXM3Ytq9KuIC7xJ+eA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/image@1.9.2': + resolution: {integrity: sha512-CvTC3XL5/BzHaVkJOZy31xOJLNSY3rBuUIQixaE/LwEQNSUdaxWa9gUyUkC9lUekkUp26CzaLLj2w7l7bxB1ag==} + engines: {node: '>= 10'} + + '@napi-rs/wasm-runtime@0.2.5': + resolution: {integrity: sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/config@8.3.4': resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2089,6 +2481,18 @@ packages: webpack-plugin-serve: optional: true + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-android-arm-eabi@4.28.1': resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} cpu: [arm] @@ -2184,6 +2588,114 @@ packages: cpu: [x64] os: [win32] + '@rsbuild/core@1.1.9': + resolution: {integrity: sha512-mHZveEwlTtW9nxWa+T0xUm6ssm+HkDYZ0NENLfWMUmsL0LjMJrpQzRlbD+p5+9Uf+KXUo3Dbtv0ScA+p7cuGTg==} + engines: {node: '>=16.7.0'} + hasBin: true + + '@rsbuild/plugin-basic-ssl@1.1.1': + resolution: {integrity: sha512-q4u7H8yh/S/DHwxG85bWbGXFiVV9RMDJDupOBHJVPtevU9mLCB4n5Qbrxu/l8CCdmZcBlvfWGjkDA/YoY61dig==} + peerDependencies: + '@rsbuild/core': 0.x || 1.x || ^1.0.1-beta.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rsbuild/plugin-image-compress@1.1.0': + resolution: {integrity: sha512-ZyK3QlcuQmqd8h3vGCX0+iEo1lBCDJEbJjcbZkRR6bs4IR2YNPP/rRo8eCPWwRS5/GBkTkwZhznfyjraDRtJpw==} + peerDependencies: + '@rsbuild/core': 1.x + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rsbuild/plugin-react@1.1.0': + resolution: {integrity: sha512-uqdRoV2V91G1XIA14dAmxqYTlTDVf0ktpE7TgwG29oQ2j+DerF1kh29WPHK9HvGE34JTfaBrsme2Zmb6bGD0cw==} + peerDependencies: + '@rsbuild/core': 1.x + + '@rsbuild/plugin-svgr@1.0.6': + resolution: {integrity: sha512-znLFk2fumNObMntkjrpZhO3guXmaQZbqv0JjhqBVng63bNdsJAmfZGXX5He8Avp4VDlv6EJI6BC5SIEs8XspTg==} + peerDependencies: + '@rsbuild/core': 1.x + + '@rsbuild/plugin-type-check@1.1.0': + resolution: {integrity: sha512-9W/TxibRe7L6i4JnsIDRJfkvypPZQqCLO/jrAp+Liv4SCo9BVmbk/Rmpj+hfo2gjyewobk0AVi4/YQ5wOP7GSQ==} + peerDependencies: + '@rsbuild/core': 1.x + peerDependenciesMeta: + '@rsbuild/core': + optional: true + + '@rspack/binding-darwin-arm64@1.1.6': + resolution: {integrity: sha512-x9dxm2yyiMuL1FBwvWNNMs2/mEUJmRoSRgYb8pblR7HDaTRORrjBFCqhaYlGyAqtQaeUy7o2VAQlE0BavIiFYA==} + cpu: [arm64] + os: [darwin] + + '@rspack/binding-darwin-x64@1.1.6': + resolution: {integrity: sha512-o0seilveftGiDjy3VPxug20HmAgYyQbNEuagR3i93/t/PT/eWXHnik+C1jjwqcivZL1Zllqvy4tbZw393aROEQ==} + cpu: [x64] + os: [darwin] + + '@rspack/binding-linux-arm64-gnu@1.1.6': + resolution: {integrity: sha512-4atnoknJx/c3KaQElsMIxHMpPf2jcRRdWsH/SdqJIRSrkWWakMK9Yv4TFwH680I4HDTMf1XLboMVScHzW8e+Mg==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-arm64-musl@1.1.6': + resolution: {integrity: sha512-7QMtwUtgFpt3/Y3/X18fSyN+kk4H8ZnZ8tDzQskVWc/j2AQYShZq56XQYqrhClzwujcCVAHauIQ2eiuJ2ASGag==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-x64-gnu@1.1.6': + resolution: {integrity: sha512-MTjDEfPn4TwHoqs5d5Fck06kmXiTHZctGIcRVfrpg0RK0r1NLEHN+oosavRZ9c9H70f34+NmcHk+/qvV4c8lWg==} + cpu: [x64] + os: [linux] + + '@rspack/binding-linux-x64-musl@1.1.6': + resolution: {integrity: sha512-LqDw7PTVr/4ZuGA0izgDQfamfr72USFHltR1Qhy2YVC3JmDmhG/pQi13LHcOLVaGH1xoeyCmEPNJpVizzDxSjg==} + cpu: [x64] + os: [linux] + + '@rspack/binding-win32-arm64-msvc@1.1.6': + resolution: {integrity: sha512-RHApLM93YN0WdHpS35u2cm7VCqZ8Yg3CrNRL16VJtyT9e6MBqeScoe4XIgIWKPm7edFyedYAjLX0wQOApwfjkg==} + cpu: [arm64] + os: [win32] + + '@rspack/binding-win32-ia32-msvc@1.1.6': + resolution: {integrity: sha512-Y6lx4q0eJawRfMPBo/AclTJAPTZ325DSPFBQJB3TnWh9Z2X7P7pQcYc8PHDmfDuYRIdg5WRsQRvVxihSvF7v8w==} + cpu: [ia32] + os: [win32] + + '@rspack/binding-win32-x64-msvc@1.1.6': + resolution: {integrity: sha512-UuCsfhC/yNuU7xLASOxNXcmsXi2ZvBX14GkxvcdChw6q7IIGNYUKXo1zgR8C1PE/6qDSxmLxbRMS+71d0H3HQg==} + cpu: [x64] + os: [win32] + + '@rspack/binding@1.1.6': + resolution: {integrity: sha512-vfeBEgGOYVwqj5cQjGyvdfrr/BEihAHlyIsobL98FZjTF0uig+bj2yJUH5Ib5F0BpIUKVG3Pw0IjlUBqcVpZsQ==} + + '@rspack/core@1.1.6': + resolution: {integrity: sha512-q0VLphOF5VW2FEG7Vbdq3Ke4I74FbELE/8xmKghSalFtULLZ44SoSz8lyotfMim9GXIRFhDokAaH8WICmPxG+g==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@rspack/lite-tapable@1.0.1': + resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} + engines: {node: '>=16.0.0'} + + '@rspack/plugin-react-refresh@1.0.1': + resolution: {integrity: sha512-KSBc3bsr3mrAPViv7w9MpE9KEWm6q87EyRXyHlRfJ9PpQ56NbX9KZ7AXo7jPeECb0q5sfpM2PSEf+syBiMgLSw==} + peerDependencies: + react-refresh: '>=0.10.0 <1.0.0' + peerDependenciesMeta: + react-refresh: + optional: true + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -2205,11 +2717,178 @@ packages: engines: {node: '>=8.10'} hasBin: true + '@storybook/addon-a11y@8.4.7': + resolution: {integrity: sha512-GpUvXp6n25U1ZSv+hmDC+05BEqxWdlWjQTb/GaboRXZQeMBlze6zckpVb66spjmmtQAIISo0eZxX1+mGcVR7lA==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-actions@8.4.7': + resolution: {integrity: sha512-mjtD5JxcPuW74T6h7nqMxWTvDneFtokg88p6kQ5OnC1M259iAXb//yiSZgu/quunMHPCXSiqn4FNOSgASTSbsA==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-backgrounds@8.4.7': + resolution: {integrity: sha512-I4/aErqtFiazcoWyKafOAm3bLpxTj6eQuH/woSbk1Yx+EzN+Dbrgx1Updy8//bsNtKkcrXETITreqHC+a57DHQ==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-controls@8.4.7': + resolution: {integrity: sha512-377uo5IsJgXLnQLJixa47+11V+7Wn9KcDEw+96aGCBCfLbWNH8S08tJHHnSu+jXg9zoqCAC23MetntVp6LetHA==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-docs@8.4.7': + resolution: {integrity: sha512-NwWaiTDT5puCBSUOVuf6ME7Zsbwz7Y79WF5tMZBx/sLQ60vpmJVQsap6NSjvK1Ravhc21EsIXqemAcBjAWu80w==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-essentials@8.4.7': + resolution: {integrity: sha512-+BtZHCBrYtQKILtejKxh0CDRGIgTl9PumfBOKRaihYb4FX1IjSAxoV/oo/IfEjlkF5f87vouShWsRa8EUauFDw==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-highlight@8.4.7': + resolution: {integrity: sha512-whQIDBd3PfVwcUCrRXvCUHWClXe9mQ7XkTPCdPo4B/tZ6Z9c6zD8JUHT76ddyHivixFLowMnA8PxMU6kCMAiNw==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-interactions@8.4.7': + resolution: {integrity: sha512-fnufT3ym8ht3HHUIRVXAH47iOJW/QOb0VSM+j269gDuvyDcY03D1civCu1v+eZLGaXPKJ8vtjr0L8zKQ/4P0JQ==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-links@8.4.7': + resolution: {integrity: sha512-L/1h4dMeMKF+MM0DanN24v5p3faNYbbtOApMgg7SlcBT/tgo3+cAjkgmNpYA8XtKnDezm+T2mTDhB8mmIRZpIQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.4.7 + peerDependenciesMeta: + react: + optional: true + + '@storybook/addon-measure@8.4.7': + resolution: {integrity: sha512-QfvqYWDSI5F68mKvafEmZic3SMiK7zZM8VA0kTXx55hF/+vx61Mm0HccApUT96xCXIgmwQwDvn9gS4TkX81Dmw==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-outline@8.4.7': + resolution: {integrity: sha512-6LYRqUZxSodmAIl8icr585Oi8pmzbZ90aloZJIpve+dBAzo7ydYrSQxxoQEVltXbKf3VeVcrs64ouAYqjisMYA==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-toolbars@8.4.7': + resolution: {integrity: sha512-OSfdv5UZs+NdGB+nZmbafGUWimiweJ/56gShlw8Neo/4jOJl1R3rnRqqY7MYx8E4GwoX+i3GF5C3iWFNQqlDcw==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/addon-viewport@8.4.7': + resolution: {integrity: sha512-hvczh/jjuXXcOogih09a663sRDDSATXwbE866al1DXgbDFraYD/LxX/QDb38W9hdjU9+Qhx8VFIcNWoMQns5HQ==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/blocks@8.4.7': + resolution: {integrity: sha512-+QH7+JwXXXIyP3fRCxz/7E2VZepAanXJM7G8nbR3wWsqWgrRp4Wra6MvybxAYCxU7aNfJX5c+RW84SNikFpcIA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.4.7 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/components@8.4.7': + resolution: {integrity: sha512-uyJIcoyeMWKAvjrG9tJBUCKxr2WZk+PomgrgrUwejkIfXMO76i6jw9BwLa0NZjYdlthDv30r9FfbYZyeNPmF0g==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/core-webpack@8.4.7': + resolution: {integrity: sha512-Tj+CjQLpFyBJxhhMms+vbPT3+gTRAiQlrhY3L1IEVwBa3wtRMS0qjozH26d1hK4G6mUIEdwu13L54HMU/w33Sg==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/core@8.4.7': + resolution: {integrity: sha512-7Z8Z0A+1YnhrrSXoKKwFFI4gnsLbWzr8fnDCU6+6HlDukFYh8GHRcZ9zKfqmy6U3hw2h8H5DrHsxWfyaYUUOoA==} + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + + '@storybook/csf-plugin@8.4.7': + resolution: {integrity: sha512-Fgogplu4HImgC+AYDcdGm1rmL6OR1rVdNX1Be9C/NEXwOCpbbBwi0BxTf/2ZxHRk9fCeaPEcOdP5S8QHfltc1g==} + peerDependencies: + storybook: ^8.4.7 + '@storybook/csf@0.1.12': resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} - '@stylistic/eslint-plugin-ts@2.12.0': - resolution: {integrity: sha512-JqoHGQCeW0dC3LN/7+ZRwTOCs3kBum2b4k7ovx+0RXeaDIINs5F+/Mp/NvTCPqDzUlBkd1HOaviKyaEWpKA7Yw==} + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/icons@1.3.0': + resolution: {integrity: sha512-Nz/UzeYQdUZUhacrPyfkiiysSjydyjgg/p0P9HxB4p/WaJUUjMAcaoaLgy3EXx61zZJ3iD36WPuDkZs5QYrA0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + + '@storybook/instrumenter@8.4.7': + resolution: {integrity: sha512-k6NSD3jaRCCHAFtqXZ7tw8jAzD/yTEWXGya+REgZqq5RCkmJ+9S4Ytp/6OhQMPtPFX23gAuJJzTQVLcCr+gjRg==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/manager-api@8.4.7': + resolution: {integrity: sha512-ELqemTviCxAsZ5tqUz39sDmQkvhVAvAgiplYy9Uf15kO0SP2+HKsCMzlrm2ue2FfkUNyqbDayCPPCB0Cdn/mpQ==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/preview-api@8.4.7': + resolution: {integrity: sha512-0QVQwHw+OyZGHAJEXo6Knx+6/4er7n2rTDE5RYJ9F2E2Lg42E19pfdLlq2Jhoods2Xrclo3wj6GWR//Ahi39Eg==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/react-docgen-typescript-plugin@1.0.1': + resolution: {integrity: sha512-dqbHa+5gaxaklFCuV1WTvljVPTo3QIJgpW4Ln+QeME7osPZUnUhjN2/djvo+sxrWUrTTuqX5jkn291aDngu9Tw==} + peerDependencies: + typescript: '>= 3.x' + webpack: '>= 4' + + '@storybook/react-dom-shim@8.4.7': + resolution: {integrity: sha512-6bkG2jvKTmWrmVzCgwpTxwIugd7Lu+2btsLAqhQSzDyIj2/uhMNp8xIMr/NBDtLgq3nomt9gefNa9xxLwk/OMg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.4.7 + + '@storybook/react@8.4.7': + resolution: {integrity: sha512-nQ0/7i2DkaCb7dy0NaT95llRVNYWQiPIVuhNfjr1mVhEP7XD090p0g7eqUmsx8vfdHh2BzWEo6CoBFRd3+EXxw==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@storybook/test': 8.4.7 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.4.7 + typescript: '>= 4.2.x' + peerDependenciesMeta: + '@storybook/test': + optional: true + typescript: + optional: true + + '@storybook/test@8.4.7': + resolution: {integrity: sha512-AhvJsu5zl3uG40itSQVuSy5WByp3UVhS6xAnme4FWRwgSxhvZjATJ3AZkkHWOYjnnk+P2/sbz/XuPli1FVCWoQ==} + peerDependencies: + storybook: ^8.4.7 + + '@storybook/theming@8.4.7': + resolution: {integrity: sha512-99rgLEjf7iwfSEmdqlHkSG3AyLcK0sfExcr0jnc6rLiAkBhzuIsvcHjjUwkR210SOCgXqBPW0ZA6uhnuyppHLw==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@stylistic/eslint-plugin-ts@2.12.1': + resolution: {integrity: sha512-Xx1NIioeW6LLlOfq5L/dLSrUXvi6q80UXDNbn/rXjKCzFT4a8wKwtp1q25kssdr1JEXI9a6tOHwFsh4Em+MoGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' @@ -2380,6 +3059,10 @@ packages: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} + '@testing-library/jest-dom@6.5.0': + resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + '@testing-library/react@16.1.0': resolution: {integrity: sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg==} engines: {node: '>=18'} @@ -2395,6 +3078,12 @@ packages: '@types/react-dom': optional: true + '@testing-library/user-event@14.5.2': + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -2415,6 +3104,9 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} @@ -2454,12 +3146,18 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/doctrine@0.0.9': + resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==} + '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} '@types/eslint@8.56.10': resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -2484,6 +3182,9 @@ packages: '@types/html-minifier-terser@6.1.0': resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + '@types/html-minifier-terser@7.0.2': + resolution: {integrity: sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA==} + '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} @@ -2520,6 +3221,9 @@ packages: '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + '@types/mdx@2.0.13': + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} @@ -2532,8 +3236,11 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.10.1': - resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} + '@types/node@18.19.68': + resolution: {integrity: sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==} + + '@types/node@22.10.2': + resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} '@types/qs@6.9.17': resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} @@ -2549,6 +3256,9 @@ packages: '@types/react@19.0.1': resolution: {integrity: sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ==} + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} @@ -2582,6 +3292,9 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + '@types/ws@8.5.13': resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} @@ -2641,6 +3354,24 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + + '@vitest/pretty-format@2.1.8': + resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} + + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + + '@vitest/utils@2.1.8': + resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -2883,9 +3614,17 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -2974,6 +3713,10 @@ packages: before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -3005,6 +3748,9 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browser-assert@1.2.1: + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + browserslist@4.24.2: resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3042,6 +3788,10 @@ packages: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} + call-bound@1.0.2: + resolution: {integrity: sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==} + engines: {node: '>= 0.4'} + call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -3063,13 +3813,25 @@ packages: caniuse-lite@1.0.30001687: resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} + case-sensitive-paths-webpack-plugin@2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} + chalk-template@1.1.0: resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==} engines: {node: '>=14.16'} + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -3106,6 +3868,10 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -3208,6 +3974,9 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -3234,6 +4003,9 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} + constants-browserify@1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -3266,6 +4038,9 @@ packages: core-js-pure@3.39.0: resolution: {integrity: sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==} + core-js@3.39.0: + resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3304,10 +4079,6 @@ packages: engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -3368,6 +4139,9 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssdb@8.2.3: resolution: {integrity: sha512-9BDG5XmJrJQQnJ51VFxXCAtpZ5ebDlAREmO8sxMOVU0aSxN/gocbctjIG5LMh3WBUq+xTlb/jw2LoljBEqraTA==} @@ -3431,15 +4205,6 @@ packages: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -3459,6 +4224,9 @@ packages: resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==} engines: {node: '>=14.16'} + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dedent@1.5.3: resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: @@ -3467,6 +4235,10 @@ packages: babel-plugin-macros: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -3489,6 +4261,10 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -3573,6 +4349,9 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + dom-converter@0.2.0: resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} @@ -3627,8 +4406,8 @@ packages: effect@3.6.5: resolution: {integrity: sha512-NhopZTAKljaAlR0CEroOAJJngdqg7bzlnWcDrCwh4d2WNVohVbBtUS4SGqLt8tUy7IFsTWATYiUtmhDG+YELjA==} - electron-to-chromium@1.5.72: - resolution: {integrity: sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==} + electron-to-chromium@1.5.73: + resolution: {integrity: sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -3655,6 +4434,9 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + endent@2.1.0: + resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} + enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} @@ -3722,6 +4504,11 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + esbuild-register@3.6.0: + resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} + peerDependencies: + esbuild: '>=0.12 <1' + esbuild@0.24.0: resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} engines: {node: '>=18'} @@ -3918,6 +4705,12 @@ packages: estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -3973,6 +4766,9 @@ packages: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + fast-json-parse@1.0.3: + resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -4024,6 +4820,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -4044,9 +4844,6 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} @@ -4081,6 +4878,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -4119,8 +4920,8 @@ packages: resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} engines: {node: '>=18'} - get-intrinsic@1.2.5: - resolution: {integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==} + get-intrinsic@1.2.6: + resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==} engines: {node: '>= 0.4'} get-package-type@0.1.0: @@ -4159,6 +4960,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} @@ -4270,6 +5072,11 @@ packages: engines: {node: '>=12'} hasBin: true + html-minifier-terser@7.2.0: + resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} @@ -4361,10 +5168,6 @@ packages: ignore-by-default@1.0.1: resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -4395,6 +5198,7 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -4437,6 +5241,10 @@ packages: is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} @@ -4482,8 +5290,13 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true @@ -4630,6 +5443,10 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} @@ -4851,6 +5668,10 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} + jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} @@ -4865,6 +5686,11 @@ packages: engines: {node: '>=6'} hasBin: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -4903,6 +5729,9 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -4922,8 +5751,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - knip@5.39.2: - resolution: {integrity: sha512-BuvuWRllLWV/r2G4m9ggNH+DZ6gouP/dhtJPXVlMbWNF++w9/EfrF6k2g7YBKCwjzCC+PXmYtpH8S2t8RjnY4Q==} + knip@5.39.4: + resolution: {integrity: sha512-IiNFwfe8xDFwuGzBY8lKvrY3hhR1I81iCaJ8nd85cxT7LxB7cDd73WP3MrzZylE9Vec1HhC0YLFiAL7jh5OYEQ==} engines: {node: '>=18.6.0'} hasBin: true peerDependencies: @@ -5014,6 +5843,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -5027,6 +5859,13 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + magic-string@0.30.15: + resolution: {integrity: sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -5037,6 +5876,13 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + + math-intrinsics@1.0.0: + resolution: {integrity: sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==} + engines: {node: '>= 0.4'} + mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} @@ -5087,6 +5933,9 @@ packages: resolution: {integrity: sha512-q9MmZXd2rRWHS6GU3WEm3HyiXZyyoA1DqdOhEq0lxPBmKb5S7IAOwX0RgUCwJfqjelDCySa5h8ujOy24LqsWcw==} engines: {node: '>= 4.0.0'} + memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + meow@13.2.0: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} @@ -5217,6 +6066,10 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + mini-css-extract-plugin@2.9.2: resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} engines: {node: '>= 12.13.0'} @@ -5233,8 +6086,8 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@0.2.4: - resolution: {integrity: sha512-Pkrrm8NjyQ8yVt8Am9M+yUt74zE3iokhzbG1bFVNjLB92vwM71hf40RkEsryg98BujhVOncKm/C1xROxZ030LQ==} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} @@ -5251,12 +6104,13 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} + mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -5402,6 +6256,9 @@ packages: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} + objectorarray@1.0.5: + resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} + obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} @@ -5424,6 +6281,10 @@ packages: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true @@ -5527,6 +6388,9 @@ packages: pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -5563,6 +6427,10 @@ packages: pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -5593,6 +6461,10 @@ packages: pkg-types@1.2.1: resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} + polished@4.3.1: + resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} + engines: {node: '>=10'} + portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -5739,8 +6611,8 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-modules-local-by-default@4.1.0: - resolution: {integrity: sha512-rm0bdSv4jC3BDma3s9H19ZddW0aHX6EoqwDYU2IfZhRN+53QrufTRo2IdkAbRqLx4R2IYbZnbjKKxg4VN5oU9Q==} + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 @@ -5869,6 +6741,10 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -5898,6 +6774,9 @@ packages: pstree.remy@1.1.8: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -5942,6 +6821,20 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + react-docgen-typescript@2.2.2: + resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} + peerDependencies: + typescript: '>= 4.3.x' + + react-docgen@7.1.0: + resolution: {integrity: sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g==} + engines: {node: '>=16.14.0'} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + react-dom@19.0.0: resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} peerDependencies: @@ -5970,6 +6863,10 @@ packages: react-dom: optional: true + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + react@19.0.0: resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} @@ -6001,10 +6898,21 @@ packages: resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} engines: {node: '>= 14.16.0'} + recast@0.23.9: + resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} + engines: {node: '>= 4'} + rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + reduce-configs@1.1.0: + resolution: {integrity: sha512-DQxy6liNadHfrLahZR7lMdc227NYVaQZhY5FMsxLEjX8X0SCuH+ESHSLCoz2yDZFq1/CLMDOAHdsEHwOEXKtvg==} + reflect.getprototypeof@1.0.8: resolution: {integrity: sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==} engines: {node: '>= 0.4'} @@ -6110,6 +7018,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rollup@4.28.1: @@ -6117,6 +7026,14 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rsbuild-plugin-html-minifier-terser@1.1.1: + resolution: {integrity: sha512-rbDLv+XmGeSQo9JWKSwBst3Qwx1opLqtQCnQ3t9Z0F0ZTxKOC1S/ypPv5tSn/S3GMHct5Yb76mMgh6p80hjOAQ==} + peerDependencies: + '@rsbuild/core': 1.x || ^1.0.1-beta.0 + peerDependenciesMeta: + '@rsbuild/core': + optional: true + run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} @@ -6149,6 +7066,9 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} @@ -6156,9 +7076,9 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} - schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} secure-compare@3.0.1: resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} @@ -6227,8 +7147,20 @@ packages: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} - side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} signal-exit@3.0.7: @@ -6242,6 +7174,10 @@ packages: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} + sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -6344,6 +7280,38 @@ packages: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} + storybook-builder-rsbuild@0.1.6: + resolution: {integrity: sha512-q1ecTYBDPmtycZYQhGO+z24RlblTZo6hS0jz6ISkKpOTfb35bX09XaNtT5JVAOzjwi9YYZUNAjKwJzvpmRcWOA==} + peerDependencies: + '@rsbuild/core': ^1.0.1 + storybook: ^8.2.1 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + storybook-react-rsbuild@0.1.6: + resolution: {integrity: sha512-IqY4rtAbe+qll5PG4v0MiO58xmxcjrpX1UhVmknFWDd/+3Xca6N6pLoW7Pl8+jHekKRhvgMiRw+Hp1ejnn2yIQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@rsbuild/core': ^1.0.1 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.2.1 + typescript: '>= 4.2.x' + peerDependenciesMeta: + typescript: + optional: true + + storybook@8.4.7: + resolution: {integrity: sha512-RP/nMJxiWyFc8EVMH5gp20ID032Wvk+Yr3lmKidoegto5Iy+2dVQnUoElZb2zpbVXNHWakGuAkfI0dY1Hfp/vw==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -6382,12 +7350,13 @@ packages: string.prototype.repeat@1.0.0: resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} @@ -6422,6 +7391,14 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -6581,6 +7558,9 @@ packages: resolution: {integrity: sha512-Kw36UHxJEELq2VUqdaSGR2/8cAsPgMtvX8uGVU6Jk26O66PhXec0A5ZnRYs47btbtwPDpXXF66+Fo3vimCM9aQ==} engines: {node: '>=16'} + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + tinyexec@0.3.1: resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} @@ -6588,6 +7568,14 @@ packages: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -6603,6 +7591,10 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + touch@3.1.1: resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true @@ -6640,6 +7632,16 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-checker-rspack-plugin@1.0.3: + resolution: {integrity: sha512-K5BUrytoFju1Olu11T49vlYvDEGOguBF1CBCl4o2ARxDGPoJHHf7fBzLlK0YYkUqI5EFA5cMRUC6332M7hQBHw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@rspack/core': ^1.0.0 + typescript: '>=3.8.0' + peerDependenciesMeta: + '@rspack/core': + optional: true + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -6667,6 +7669,10 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -6734,6 +7740,10 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -6801,6 +7811,9 @@ packages: undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} @@ -6870,10 +7883,18 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unplugin@1.16.0: + resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==} + engines: {node: '>=14.0.0'} + update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -6893,9 +7914,16 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url@0.11.4: + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} + engines: {node: '>= 0.4'} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + utila@0.4.0: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} @@ -6907,6 +7935,10 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} @@ -7005,8 +8037,8 @@ packages: webpack: optional: true - webpack-dev-server@5.1.0: - resolution: {integrity: sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==} + webpack-dev-server@5.2.0: + resolution: {integrity: sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==} engines: {node: '>= 18.12.0'} hasBin: true peerDependencies: @@ -7026,6 +8058,9 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + webpack@5.97.1: resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} engines: {node: '>=10.13.0'} @@ -7183,8 +8218,8 @@ packages: peerDependencies: zod: ^3.18.0 - zod@3.24.0: - resolution: {integrity: sha512-Hz+wiY8yD0VLA2k/+nsg2Abez674dDGTai33SwNvMPuf9uIrBC9eFgIMQxBBbHFxVXi8W+5nX9DcAh9YNSQm/w==} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -7193,11 +8228,13 @@ snapshots: '@aashutoshrathi/word-wrap@1.2.6': {} + '@adobe/css-tools@4.4.1': {} + '@altano/repository-tools@0.1.1': {} '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@babel/code-frame@7.26.2': @@ -7232,9 +8269,9 @@ snapshots: dependencies: '@babel/parser': 7.26.3 '@babel/types': 7.26.3 - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 + jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.25.9': dependencies: @@ -8424,6 +9461,22 @@ snapshots: effect: 3.6.5 fast-check: 3.21.0 + '@emnapi/core@1.3.1': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild/aix-ppc64@0.24.0': optional: true @@ -8496,27 +9549,20 @@ snapshots: '@esbuild/win32-x64@0.24.0': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.0)': dependencies: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} - '@eslint-community/regexpp@4.12.1': {} '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.4.0(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -8529,7 +9575,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 + debug: 4.4.0(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -8538,16 +9584,16 @@ snapshots: '@humanwhocodes/object-schema@2.0.2': {} - '@inquirer/confirm@5.1.0(@types/node@22.10.1)': + '@inquirer/confirm@5.1.0(@types/node@22.10.2)': dependencies: - '@inquirer/core': 10.1.1(@types/node@22.10.1) - '@inquirer/type': 3.0.1(@types/node@22.10.1) - '@types/node': 22.10.1 + '@inquirer/core': 10.1.1(@types/node@22.10.2) + '@inquirer/type': 3.0.1(@types/node@22.10.2) + '@types/node': 22.10.2 - '@inquirer/core@10.1.1(@types/node@22.10.1)': + '@inquirer/core@10.1.1(@types/node@22.10.2)': dependencies: '@inquirer/figures': 1.0.8 - '@inquirer/type': 3.0.1(@types/node@22.10.1) + '@inquirer/type': 3.0.1(@types/node@22.10.2) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -8560,9 +9606,9 @@ snapshots: '@inquirer/figures@1.0.8': {} - '@inquirer/type@3.0.1(@types/node@22.10.1)': + '@inquirer/type@3.0.1(@types/node@22.10.2)': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@isaacs/cliui@8.0.2': dependencies: @@ -8586,27 +9632,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + jest-config: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8627,21 +9673,21 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -8670,7 +9716,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -8688,7 +9734,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.10.1 + '@types/node': 22.10.2 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -8710,7 +9756,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.10.1 + '@types/node': 22.10.2 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -8780,11 +9826,11 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.5': + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 @@ -8796,7 +9842,7 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/sourcemap-codec@1.5.0': {} @@ -8816,7 +9862,7 @@ snapshots: call-me-maybe: 1.0.2 cross-spawn: 7.0.6 string-argv: 0.3.2 - type-detect: 4.0.8 + type-detect: 4.1.0 '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: @@ -8852,6 +9898,28 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@mdx-js/react@3.1.0(@types/react@19.0.1)(react@18.3.1)': + dependencies: + '@types/mdx': 2.0.13 + '@types/react': 19.0.1 + react: 18.3.1 + + '@module-federation/runtime-tools@0.5.1': + dependencies: + '@module-federation/runtime': 0.5.1 + '@module-federation/webpack-bundler-runtime': 0.5.1 + + '@module-federation/runtime@0.5.1': + dependencies: + '@module-federation/sdk': 0.5.1 + + '@module-federation/sdk@0.5.1': {} + + '@module-federation/webpack-bundler-runtime@0.5.1': + dependencies: + '@module-federation/runtime': 0.5.1 + '@module-federation/sdk': 0.5.1 + '@mswjs/interceptors@0.37.3': dependencies: '@open-draft/deferred-promise': 2.2.0 @@ -8861,6 +9929,66 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 + '@napi-rs/image-android-arm64@1.9.2': + optional: true + + '@napi-rs/image-darwin-arm64@1.9.2': + optional: true + + '@napi-rs/image-darwin-x64@1.9.2': + optional: true + + '@napi-rs/image-freebsd-x64@1.9.2': + optional: true + + '@napi-rs/image-linux-arm-gnueabihf@1.9.2': + optional: true + + '@napi-rs/image-linux-arm64-gnu@1.9.2': + optional: true + + '@napi-rs/image-linux-arm64-musl@1.9.2': + optional: true + + '@napi-rs/image-linux-x64-gnu@1.9.2': + optional: true + + '@napi-rs/image-linux-x64-musl@1.9.2': + optional: true + + '@napi-rs/image-wasm32-wasi@1.9.2': + dependencies: + '@napi-rs/wasm-runtime': 0.2.5 + optional: true + + '@napi-rs/image-win32-ia32-msvc@1.9.2': + optional: true + + '@napi-rs/image-win32-x64-msvc@1.9.2': + optional: true + + '@napi-rs/image@1.9.2': + optionalDependencies: + '@napi-rs/image-android-arm64': 1.9.2 + '@napi-rs/image-darwin-arm64': 1.9.2 + '@napi-rs/image-darwin-x64': 1.9.2 + '@napi-rs/image-freebsd-x64': 1.9.2 + '@napi-rs/image-linux-arm-gnueabihf': 1.9.2 + '@napi-rs/image-linux-arm64-gnu': 1.9.2 + '@napi-rs/image-linux-arm64-musl': 1.9.2 + '@napi-rs/image-linux-x64-gnu': 1.9.2 + '@napi-rs/image-linux-x64-musl': 1.9.2 + '@napi-rs/image-wasm32-wasi': 1.9.2 + '@napi-rs/image-win32-ia32-msvc': 1.9.2 + '@napi-rs/image-win32-x64-msvc': 1.9.2 + + '@napi-rs/wasm-runtime@0.2.5': + dependencies: + '@emnapi/core': 1.3.1 + '@emnapi/runtime': 1.3.1 + '@tybys/wasm-util': 0.9.0 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -9011,7 +10139,7 @@ snapshots: '@pkgr/core@0.1.1': {} - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.16.0)(type-fest@4.30.0)(webpack-dev-server@5.1.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.16.0)(type-fest@4.30.0)(webpack-dev-server@5.2.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.39.0 @@ -9019,12 +10147,22 @@ snapshots: html-entities: 2.5.2 loader-utils: 2.0.4 react-refresh: 0.16.0 - schema-utils: 4.2.0 + schema-utils: 4.3.0 source-map: 0.7.4 webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) optionalDependencies: type-fest: 4.30.0 - webpack-dev-server: 5.1.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + webpack-dev-server: 5.2.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + + '@polka/url@1.0.0-next.28': {} + + '@rollup/pluginutils@5.1.3(rollup@4.28.1)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.28.1 '@rollup/rollup-android-arm-eabi@4.28.1': optional: true @@ -9083,6 +10221,114 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.28.1': optional: true + '@rsbuild/core@1.1.9': + dependencies: + '@rspack/core': 1.1.6(@swc/helpers@0.5.15) + '@rspack/lite-tapable': 1.0.1 + '@swc/helpers': 0.5.15 + core-js: 3.39.0 + + '@rsbuild/plugin-basic-ssl@1.1.1(@rsbuild/core@1.1.9)': + dependencies: + selfsigned: 2.4.1 + optionalDependencies: + '@rsbuild/core': 1.1.9 + + '@rsbuild/plugin-image-compress@1.1.0(@rsbuild/core@1.1.9)': + dependencies: + '@napi-rs/image': 1.9.2 + svgo: 3.3.2 + optionalDependencies: + '@rsbuild/core': 1.1.9 + + '@rsbuild/plugin-react@1.1.0(@rsbuild/core@1.1.9)': + dependencies: + '@rsbuild/core': 1.1.9 + '@rspack/plugin-react-refresh': 1.0.1(react-refresh@0.16.0) + react-refresh: 0.16.0 + + '@rsbuild/plugin-svgr@1.0.6(@rsbuild/core@1.1.9)(typescript@5.5.4)': + dependencies: + '@rsbuild/core': 1.1.9 + '@rsbuild/plugin-react': 1.1.0(@rsbuild/core@1.1.9) + '@svgr/core': 8.1.0(typescript@5.5.4) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.5.4)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.5.4))(typescript@5.5.4) + deepmerge: 4.3.1 + loader-utils: 2.0.4 + transitivePeerDependencies: + - supports-color + - typescript + + '@rsbuild/plugin-type-check@1.1.0(@rsbuild/core@1.1.9)(@rspack/core@1.1.6(@swc/helpers@0.5.15))(typescript@5.5.4)': + dependencies: + deepmerge: 4.3.1 + json5: 2.2.3 + reduce-configs: 1.1.0 + ts-checker-rspack-plugin: 1.0.3(@rspack/core@1.1.6(@swc/helpers@0.5.15))(typescript@5.5.4) + optionalDependencies: + '@rsbuild/core': 1.1.9 + transitivePeerDependencies: + - '@rspack/core' + - typescript + + '@rspack/binding-darwin-arm64@1.1.6': + optional: true + + '@rspack/binding-darwin-x64@1.1.6': + optional: true + + '@rspack/binding-linux-arm64-gnu@1.1.6': + optional: true + + '@rspack/binding-linux-arm64-musl@1.1.6': + optional: true + + '@rspack/binding-linux-x64-gnu@1.1.6': + optional: true + + '@rspack/binding-linux-x64-musl@1.1.6': + optional: true + + '@rspack/binding-win32-arm64-msvc@1.1.6': + optional: true + + '@rspack/binding-win32-ia32-msvc@1.1.6': + optional: true + + '@rspack/binding-win32-x64-msvc@1.1.6': + optional: true + + '@rspack/binding@1.1.6': + optionalDependencies: + '@rspack/binding-darwin-arm64': 1.1.6 + '@rspack/binding-darwin-x64': 1.1.6 + '@rspack/binding-linux-arm64-gnu': 1.1.6 + '@rspack/binding-linux-arm64-musl': 1.1.6 + '@rspack/binding-linux-x64-gnu': 1.1.6 + '@rspack/binding-linux-x64-musl': 1.1.6 + '@rspack/binding-win32-arm64-msvc': 1.1.6 + '@rspack/binding-win32-ia32-msvc': 1.1.6 + '@rspack/binding-win32-x64-msvc': 1.1.6 + + '@rspack/core@1.1.6(@swc/helpers@0.5.15)': + dependencies: + '@module-federation/runtime-tools': 0.5.1 + '@rspack/binding': 1.1.6 + '@rspack/lite-tapable': 1.0.1 + caniuse-lite: 1.0.30001687 + optionalDependencies: + '@swc/helpers': 0.5.15 + + '@rspack/lite-tapable@1.0.1': {} + + '@rspack/plugin-react-refresh@1.0.1(react-refresh@0.16.0)': + dependencies: + error-stack-parser: 2.1.4 + html-entities: 2.5.2 + optionalDependencies: + react-refresh: 0.16.0 + '@rtsao/scc@1.1.0': {} '@sinclair/typebox@0.27.8': {} @@ -9103,11 +10349,236 @@ snapshots: ignore: 5.3.2 p-map: 4.0.0 + '@storybook/addon-a11y@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/addon-highlight': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + axe-core: 4.10.2 + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/addon-actions@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + '@types/uuid': 9.0.8 + dequal: 2.0.3 + polished: 4.3.1 + storybook: 8.4.7(prettier@3.4.2) + uuid: 9.0.1 + + '@storybook/addon-backgrounds@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + + '@storybook/addon-controls@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + dequal: 2.0.3 + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + + '@storybook/addon-docs@8.4.7(@types/react@19.0.1)(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@mdx-js/react': 3.1.0(@types/react@19.0.1)(react@18.3.1) + '@storybook/blocks': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2)) + '@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2)) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-essentials@8.4.7(@types/react@19.0.1)(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/addon-actions': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-backgrounds': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-controls': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-docs': 8.4.7(@types/react@19.0.1)(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-highlight': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-measure': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-outline': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-toolbars': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/addon-viewport': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-highlight@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/addon-interactions@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/test': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + polished: 4.3.1 + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + + '@storybook/addon-links@8.4.7(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/csf': 0.1.12 + '@storybook/global': 5.0.0 + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + optionalDependencies: + react: 19.0.0 + + '@storybook/addon-measure@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.4.7(prettier@3.4.2) + tiny-invariant: 1.3.3 + + '@storybook/addon-outline@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + + '@storybook/addon-toolbars@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/addon-viewport@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + memoizerific: 1.11.3 + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/blocks@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/csf': 0.1.12 + '@storybook/icons': 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@storybook/components@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/core-webpack@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@types/node': 22.10.2 + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + + '@storybook/core@8.4.7(prettier@3.4.2)': + dependencies: + '@storybook/csf': 0.1.12 + better-opn: 3.0.2 + browser-assert: 1.2.1 + esbuild: 0.24.0 + esbuild-register: 3.6.0(esbuild@0.24.0) + jsdoc-type-pratt-parser: 4.1.0 + process: 0.11.10 + recast: 0.23.9 + semver: 7.6.3 + util: 0.12.5 + ws: 8.18.0 + optionalDependencies: + prettier: 3.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@storybook/csf-plugin@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + storybook: 8.4.7(prettier@3.4.2) + unplugin: 1.16.0 + '@storybook/csf@0.1.12': dependencies: type-fest: 2.19.0 - '@stylistic/eslint-plugin-ts@2.12.0(eslint@8.57.0)(typescript@5.7.2)': + '@storybook/global@5.0.0': {} + + '@storybook/icons@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@storybook/instrumenter@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/global': 5.0.0 + '@vitest/utils': 2.1.8 + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/manager-api@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/preview-api@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/react-docgen-typescript-plugin@1.0.1(typescript@5.5.4)(webpack@5.97.1(esbuild@0.24.0))': + dependencies: + debug: 4.4.0(supports-color@5.5.0) + endent: 2.1.0 + find-cache-dir: 3.3.2 + flat-cache: 3.2.0 + micromatch: 4.0.8 + react-docgen-typescript: 2.2.2(typescript@5.5.4) + tslib: 2.8.1 + typescript: 5.5.4 + webpack: 5.97.1(esbuild@0.24.0) + transitivePeerDependencies: + - supports-color + + '@storybook/react-dom-shim@8.4.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.7(prettier@3.4.2))': + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/react-dom-shim@8.4.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))': + dependencies: + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/react@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))(typescript@5.5.4)': + dependencies: + '@storybook/components': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/preview-api': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.4.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2)) + '@storybook/theming': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + storybook: 8.4.7(prettier@3.4.2) + optionalDependencies: + '@storybook/test': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + typescript: 5.5.4 + + '@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + '@storybook/csf': 0.1.12 + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + '@testing-library/dom': 10.4.0 + '@testing-library/jest-dom': 6.5.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/expect': 2.0.5 + '@vitest/spy': 2.0.5 + storybook: 8.4.7(prettier@3.4.2) + + '@storybook/theming@8.4.7(storybook@8.4.7(prettier@3.4.2))': + dependencies: + storybook: 8.4.7(prettier@3.4.2) + + '@stylistic/eslint-plugin-ts@2.12.1(eslint@8.57.0)(typescript@5.7.2)': dependencies: '@typescript-eslint/utils': 8.18.0(eslint@8.57.0)(typescript@5.7.2) eslint: 8.57.0 @@ -9285,6 +10756,16 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 + '@testing-library/jest-dom@6.5.0': + dependencies: + '@adobe/css-tools': 4.4.1 + aria-query: 5.3.2 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + '@testing-library/react@16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.26.0 @@ -9295,6 +10776,10 @@ snapshots: '@types/react': 19.0.1 '@types/react-dom': 19.0.2(@types/react@19.0.1) + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + '@tootallnate/once@2.0.0': {} '@trysound/sax@0.2.0': {} @@ -9307,6 +10792,11 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.6 @@ -9337,24 +10827,24 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/concat-stream@2.0.3': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.2 - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/connect@3.4.38': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/cookie@0.6.0': {} @@ -9362,9 +10852,11 @@ snapshots: dependencies: '@types/ms': 0.7.34 + '@types/doctrine@0.0.9': {} + '@types/eslint-scope@3.7.7': dependencies: - '@types/eslint': 8.56.10 + '@types/eslint': 9.6.1 '@types/estree': 1.0.6 '@types/eslint@8.56.10': @@ -9372,6 +10864,11 @@ snapshots: '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 @@ -9380,14 +10877,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express-serve-static-core@5.0.2': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/qs': 6.9.17 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -9401,7 +10898,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/hast@3.0.4': dependencies: @@ -9409,11 +10906,13 @@ snapshots: '@types/html-minifier-terser@6.1.0': {} + '@types/html-minifier-terser@7.0.2': {} + '@types/http-errors@2.0.4': {} '@types/http-proxy@1.17.15': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/is-empty@1.2.3': {} @@ -9434,7 +10933,7 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/tough-cookie': 4.0.5 parse5: 7.2.1 @@ -9450,17 +10949,23 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/mdx@2.0.13': {} + '@types/mime@1.3.5': {} '@types/ms@0.7.34': {} '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/node@12.20.55': {} - '@types/node@22.10.1': + '@types/node@18.19.68': + dependencies: + undici-types: 5.26.5 + + '@types/node@22.10.2': dependencies: undici-types: 6.20.0 @@ -9476,12 +10981,14 @@ snapshots: dependencies: csstype: 3.1.3 + '@types/resolve@1.20.6': {} + '@types/retry@0.12.2': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/serve-index@1.9.4': dependencies: @@ -9490,12 +10997,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/stack-utils@2.0.3': {} @@ -9509,9 +11016,11 @@ snapshots: '@types/unist@3.0.3': {} + '@types/uuid@9.0.8': {} + '@types/ws@8.5.13': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/yargs-parser@21.0.3': {} @@ -9624,6 +11133,38 @@ snapshots: '@ungap/structured-clone@1.2.0': {} + '@vitest/expect@2.0.5': + dependencies: + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.2 + tinyrainbow: 1.2.0 + + '@vitest/pretty-format@2.0.5': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/pretty-format@2.1.8': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/spy@2.0.5': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@2.0.5': + dependencies: + '@vitest/pretty-format': 2.0.5 + estree-walker: 3.0.3 + loupe: 3.1.2 + tinyrainbow: 1.2.0 + + '@vitest/utils@2.1.8': + dependencies: + '@vitest/pretty-format': 2.1.8 + loupe: 3.1.2 + tinyrainbow: 1.2.0 + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -9700,22 +11241,22 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4))': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4))': dependencies: webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1) + webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4))': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4))': dependencies: webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1) + webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1))(webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4))': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack-dev-server@5.2.0(webpack-cli@5.1.4)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4))': dependencies: webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1) + webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) optionalDependencies: - webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.97.1) + webpack-dev-server: 5.2.0(webpack-cli@5.1.4)(webpack@5.97.1) '@xtuc/ieee754@1.2.0': {} @@ -9845,7 +11386,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.5 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 is-string: 1.1.0 array-union@2.1.0: {} @@ -9897,12 +11438,18 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.5 es-errors: 1.3.0 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 + assertion-error@2.0.1: {} + ast-types-flow@0.0.8: {} + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + astral-regex@2.0.0: {} async@2.6.4: @@ -10022,6 +11569,10 @@ snapshots: before-after-hook@2.2.3: {} + better-opn@3.0.2: + dependencies: + open: 8.4.2 + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 @@ -10067,10 +11618,12 @@ snapshots: dependencies: fill-range: 7.1.1 + browser-assert@1.2.1: {} + browserslist@4.24.2: dependencies: caniuse-lite: 1.0.30001687 - electron-to-chromium: 1.5.72 + electron-to-chromium: 1.5.73 node-releases: 2.0.19 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -10102,9 +11655,14 @@ snapshots: dependencies: call-bind-apply-helpers: 1.0.1 es-define-property: 1.0.1 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 set-function-length: 1.2.2 + call-bound@1.0.2: + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.2.6 + call-me-maybe@1.0.2: {} callsites@3.1.0: {} @@ -10120,12 +11678,27 @@ snapshots: caniuse-lite@1.0.30001687: {} + case-sensitive-paths-webpack-plugin@2.4.0: {} + ccount@2.0.1: {} + chai@5.1.2: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 + chalk-template@1.1.0: dependencies: chalk: 5.3.0 + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -10151,6 +11724,8 @@ snapshots: chardet@0.7.0: {} + check-error@2.1.1: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -10234,6 +11809,8 @@ snapshots: commander@8.3.0: {} + commondir@1.0.1: {} + compressible@2.0.18: dependencies: mime-db: 1.53.0 @@ -10265,6 +11842,8 @@ snapshots: consola@3.2.3: {} + constants-browserify@1.0.0: {} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -10287,6 +11866,8 @@ snapshots: core-js-pure@3.39.0: {} + core-js@3.39.0: {} + core-util-is@1.0.3: {} corser@2.0.1: {} @@ -10309,13 +11890,13 @@ snapshots: optionalDependencies: typescript: 5.5.4 - create-jest@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)): + create-jest@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + jest-config: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10324,13 +11905,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)): + create-jest@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10345,12 +11926,6 @@ snapshots: dependencies: cross-spawn: 7.0.6 - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -10371,17 +11946,18 @@ snapshots: postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 - css-loader@7.1.2(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): + css-loader@7.1.2(@rspack/core@1.1.6(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) - postcss-modules-local-by-default: 4.1.0(postcss@8.4.49) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.49) postcss-modules-scope: 3.2.1(postcss@8.4.49) postcss-modules-values: 4.0.0(postcss@8.4.49) postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: + '@rspack/core': 1.1.6(@swc/helpers@0.5.15) webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) css-prefers-color-scheme@10.0.0(postcss@8.4.49): @@ -10421,6 +11997,8 @@ snapshots: css-what@6.1.0: {} + css.escape@1.5.1: {} + cssdb@8.2.3: {} cssesc@3.0.0: {} @@ -10475,10 +12053,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: - dependencies: - ms: 2.1.2 - debug@4.4.0(supports-color@5.5.0): dependencies: ms: 2.1.3 @@ -10493,8 +12067,12 @@ snapshots: decode-uri-component@0.4.1: {} + dedent@0.7.0: {} + dedent@1.5.3: {} + deep-eql@5.0.2: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -10517,6 +12095,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} define-properties@1.2.1: @@ -10575,6 +12155,8 @@ snapshots: dom-accessibility-api@0.5.16: {} + dom-accessibility-api@0.6.3: {} + dom-converter@0.2.0: dependencies: utila: 0.4.0 @@ -10642,7 +12224,7 @@ snapshots: effect@3.6.5: {} - electron-to-chromium@1.5.72: {} + electron-to-chromium@1.5.73: {} emittery@0.13.1: {} @@ -10658,6 +12240,12 @@ snapshots: encodeurl@2.0.0: {} + endent@2.1.0: + dependencies: + dedent: 0.7.0 + fast-json-parse: 1.0.3 + objectorarray: 1.0.5 + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -10701,7 +12289,7 @@ snapshots: es-set-tostringtag: 2.0.3 es-to-primitive: 1.3.0 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 get-symbol-description: 1.0.2 globalthis: 1.0.4 gopd: 1.2.0 @@ -10725,8 +12313,8 @@ snapshots: regexp.prototype.flags: 1.5.3 safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.2 typed-array-byte-length: 1.0.1 @@ -10747,7 +12335,7 @@ snapshots: es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 globalthis: 1.0.4 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -10765,7 +12353,7 @@ snapshots: es-set-tostringtag@2.0.3: dependencies: - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -10779,6 +12367,13 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.1.0 + esbuild-register@3.6.0(esbuild@0.24.0): + dependencies: + debug: 4.4.0(supports-color@5.5.0) + esbuild: 0.24.0 + transitivePeerDependencies: + - supports-color + esbuild@0.24.0: optionalDependencies: '@esbuild/aix-ppc64': 0.24.0 @@ -10886,7 +12481,7 @@ snapshots: object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 - string.prototype.trimend: 1.0.8 + string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: '@typescript-eslint/parser': 8.18.0(eslint@8.57.0)(typescript@5.7.2) @@ -10895,13 +12490,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)))(typescript@5.7.2): + eslint-plugin-jest@28.9.0(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(jest@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)))(typescript@5.7.2): dependencies: '@typescript-eslint/utils': 8.18.0(eslint@8.57.0)(typescript@5.7.2) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@8.57.0)(typescript@5.7.2))(eslint@8.57.0)(typescript@5.7.2) - jest: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)) + jest: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) transitivePeerDependencies: - supports-color - typescript @@ -11032,8 +12627,8 @@ snapshots: eslint@8.57.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) + '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -11042,8 +12637,8 @@ snapshots: '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -11057,7 +12652,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -11106,6 +12701,12 @@ snapshots: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + esutils@2.0.3: {} etag@1.8.1: {} @@ -11198,6 +12799,8 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-json-parse@1.0.3: {} + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -11248,6 +12851,12 @@ snapshots: transitivePeerDependencies: - supports-color + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -11260,7 +12869,7 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.3.1 + flatted: 3.3.2 keyv: 4.5.4 rimraf: 3.0.2 @@ -11271,8 +12880,6 @@ snapshots: flat@5.0.2: {} - flatted@3.3.1: {} - flatted@3.3.2: {} follow-redirects@1.15.9: {} @@ -11298,6 +12905,12 @@ snapshots: fresh@0.5.2: {} + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -11332,16 +12945,18 @@ snapshots: get-east-asian-width@1.3.0: {} - get-intrinsic@1.2.5: + get-intrinsic@1.2.6: dependencies: call-bind-apply-helpers: 1.0.1 dunder-proto: 1.0.0 es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.0.0 function-bind: 1.1.2 gopd: 1.2.0 has-symbols: 1.1.0 hasown: 2.0.2 + math-intrinsics: 1.0.0 get-package-type@0.1.0: {} @@ -11353,7 +12968,7 @@ snapshots: dependencies: call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 git-hooks-list@3.1.0: {} @@ -11495,9 +13110,19 @@ snapshots: relateurl: 0.2.7 terser: 5.37.0 + html-minifier-terser@7.2.0: + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 10.0.1 + entities: 4.5.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.37.0 + html-tags@3.3.1: {} - html-webpack-plugin@5.6.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): + html-webpack-plugin@5.6.3(@rspack/core@1.1.6(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -11505,6 +13130,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: + '@rspack/core': 1.1.6(@swc/helpers@0.5.15) webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) htmlparser2@6.1.0: @@ -11570,7 +13196,7 @@ snapshots: html-encoding-sniffer: 3.0.0 http-proxy: 1.18.1 mime: 1.6.0 - minimist: 0.2.4 + minimist: 1.2.8 opener: 1.5.2 portfinder: 1.0.32 secure-compare: 3.0.1 @@ -11611,8 +13237,6 @@ snapshots: ignore-by-default@1.0.1: {} - ignore@5.3.1: {} - ignore@5.3.2: {} ignore@6.0.2: {} @@ -11650,7 +13274,7 @@ snapshots: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 interpret@3.1.1: {} @@ -11672,10 +13296,15 @@ snapshots: is-alphabetical: 2.0.1 is-decimal: 2.0.1 + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.8 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 is-arrayish@0.2.1: {} @@ -11714,6 +13343,8 @@ snapshots: is-decimal@2.0.1: {} + is-docker@2.2.1: {} + is-docker@3.0.0: {} is-empty@1.2.0: {} @@ -11822,10 +13453,14 @@ snapshots: is-weakset@2.0.3: dependencies: call-bind: 1.0.8 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 is-windows@1.0.2: {} + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 @@ -11886,7 +13521,7 @@ snapshots: iterator.prototype@1.1.3: dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 has-symbols: 1.1.0 reflect.getprototypeof: 1.0.8 set-function-name: 2.0.2 @@ -11909,7 +13544,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -11929,16 +13564,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)): + jest-cli@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + create-jest: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + jest-config: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -11948,16 +13583,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)): + jest-cli@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)) + create-jest: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)) + jest-config: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -11967,7 +13602,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)): + jest-config@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -11992,13 +13627,13 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.10.1 - ts-node: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4) + '@types/node': 22.10.2 + ts-node: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)): + jest-config@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -12023,8 +13658,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.10.1 - ts-node: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2) + '@types/node': 22.10.2 + ts-node: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -12054,7 +13689,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.10.1 + '@types/node': 22.10.2 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -12068,7 +13703,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -12078,7 +13713,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.10.1 + '@types/node': 22.10.2 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -12117,7 +13752,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -12152,7 +13787,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -12180,7 +13815,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -12226,7 +13861,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12245,7 +13880,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12254,35 +13889,35 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.2 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)): + jest@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4)) + jest-cli: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)): + jest@29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.10.1)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2)) + jest-cli: 29.7.0(@types/node@22.10.2)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -12306,6 +13941,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsdoc-type-pratt-parser@4.1.0: {} + jsdom@20.0.3: dependencies: abab: 2.0.6 @@ -12341,6 +13978,8 @@ snapshots: jsesc@3.0.2: {} + jsesc@3.1.0: {} + json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -12355,7 +13994,7 @@ snapshots: json5@1.0.2: dependencies: - minimist: 0.2.4 + minimist: 1.2.8 json5@2.2.3: {} @@ -12372,6 +14011,12 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -12389,17 +14034,17 @@ snapshots: kleur@4.1.5: {} - knip@5.39.2(@types/node@22.10.1)(typescript@5.5.4): + knip@5.39.4(@types/node@22.10.2)(typescript@5.5.4): dependencies: '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 - '@types/node': 22.10.1 + '@types/node': 22.10.2 easy-table: 1.2.0 enhanced-resolve: 5.17.1 fast-glob: 3.3.2 jiti: 2.4.1 js-yaml: 4.1.0 - minimist: 0.2.4 + minimist: 1.2.8 picocolors: 1.1.1 picomatch: 4.0.2 pretty-ms: 9.2.0 @@ -12407,8 +14052,8 @@ snapshots: strip-json-comments: 5.0.1 summary: 2.1.0 typescript: 5.5.4 - zod: 3.24.0 - zod-validation-error: 3.4.0(zod@3.24.0) + zod: 3.24.1 + zod-validation-error: 3.4.0(zod@3.24.1) known-css-properties@0.35.0: {} @@ -12484,6 +14129,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + loupe@3.1.2: {} + lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -12496,6 +14143,14 @@ snapshots: lz-string@1.5.0: {} + magic-string@0.30.15: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + make-dir@4.0.0: dependencies: semver: 7.6.3 @@ -12506,6 +14161,10 @@ snapshots: dependencies: tmpl: 1.0.5 + map-or-similar@1.5.0: {} + + math-intrinsics@1.0.0: {} + mathml-tag-names@2.1.3: {} mdast-util-from-markdown@0.8.5: @@ -12622,6 +14281,10 @@ snapshots: tree-dump: 1.0.2(tslib@2.8.1) tslib: 2.8.1 + memoizerific@1.11.3: + dependencies: + map-or-similar: 1.5.0 + meow@13.2.0: {} merge-descriptors@1.0.3: {} @@ -12864,9 +14527,11 @@ snapshots: mimic-fn@2.1.0: {} + min-indent@1.0.1: {} + mini-css-extract-plugin@2.9.2(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): dependencies: - schema-utils: 4.2.0 + schema-utils: 4.3.0 tapable: 2.2.1 webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) @@ -12880,13 +14545,13 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist@0.2.4: {} + minimist@1.2.8: {} minipass@7.1.2: {} mkdirp@0.5.6: dependencies: - minimist: 0.2.4 + minimist: 1.2.8 mlly@1.7.3: dependencies: @@ -12897,18 +14562,18 @@ snapshots: mri@1.2.0: {} - ms@2.0.0: {} + mrmime@2.0.0: {} - ms@2.1.2: {} + ms@2.0.0: {} ms@2.1.3: {} - msw@2.6.8(@types/node@22.10.1)(typescript@5.5.4): + msw@2.6.8(@types/node@22.10.2)(typescript@5.5.4): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.0(@types/node@22.10.1) + '@inquirer/confirm': 5.1.0(@types/node@22.10.2) '@mswjs/interceptors': 0.37.3 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -13061,6 +14726,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + objectorarray@1.0.5: {} + obuf@1.1.2: {} on-finished@2.4.1: @@ -13084,6 +14751,12 @@ snapshots: is-inside-container: 1.0.0 is-wsl: 3.1.0 + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + opener@1.5.2: {} optionator@0.9.3: @@ -13212,6 +14885,8 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 + path-browserify@1.0.1: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -13235,6 +14910,8 @@ snapshots: pathe@1.1.2: {} + pathval@2.0.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -13265,6 +14942,10 @@ snapshots: mlly: 1.7.3 pathe: 1.1.2 + polished@4.3.1: + dependencies: + '@babel/runtime': 7.26.0 + portfinder@1.0.32: dependencies: async: 2.6.4 @@ -13384,13 +15065,14 @@ snapshots: postcss: 8.4.49 yaml: 2.6.1 - postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.5.4)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): + postcss-loader@8.1.1(@rspack/core@1.1.6(@swc/helpers@0.5.15))(postcss@8.4.49)(typescript@5.5.4)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): dependencies: cosmiconfig: 9.0.0(typescript@5.5.4) jiti: 1.21.6 postcss: 8.4.49 semver: 7.6.3 optionalDependencies: + '@rspack/core': 1.1.6(@swc/helpers@0.5.15) webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) transitivePeerDependencies: - typescript @@ -13404,7 +15086,7 @@ snapshots: dependencies: postcss: 8.4.49 - postcss-modules-local-by-default@4.1.0(postcss@8.4.49): + postcss-modules-local-by-default@4.2.0(postcss@8.4.49): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 @@ -13581,6 +15263,8 @@ snapshots: process-nextick-args@2.0.1: {} + process@0.11.10: {} + promise-inflight@1.0.1: {} promise-retry@2.0.1: @@ -13610,17 +15294,19 @@ snapshots: pstree.remy@1.1.8: {} + punycode@1.4.1: {} + punycode@2.3.1: {} pure-rand@6.1.0: {} qs@6.13.0: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 qs@6.13.1: dependencies: - side-channel: 1.0.6 + side-channel: 1.1.0 query-registry@3.0.1: dependencies: @@ -13628,7 +15314,7 @@ snapshots: quick-lru: 7.0.0 url-join: 5.0.0 validate-npm-package-name: 5.0.1 - zod: 3.24.0 + zod: 3.24.1 zod-package-json: 1.0.3 query-string@9.1.1: @@ -13656,6 +15342,31 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + react-docgen-typescript@2.2.2(typescript@5.5.4): + dependencies: + typescript: 5.5.4 + + react-docgen@7.1.0: + dependencies: + '@babel/core': 7.26.0 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + '@types/doctrine': 0.0.9 + '@types/resolve': 1.20.6 + doctrine: 3.0.0 + resolve: 1.22.8 + strip-indent: 4.0.0 + transitivePeerDependencies: + - supports-color + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + react-dom@19.0.0(react@19.0.0): dependencies: react: 19.0.0 @@ -13679,6 +15390,10 @@ snapshots: optionalDependencies: react-dom: 19.0.0(react@19.0.0) + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + react@19.0.0: {} read-package-json-fast@3.0.2: @@ -13720,10 +15435,25 @@ snapshots: readdirp@4.0.2: {} + recast@0.23.9: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + rechoir@0.8.0: dependencies: resolve: 1.22.8 + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + reduce-configs@1.1.0: {} + reflect.getprototypeof@1.0.8: dependencies: call-bind: 1.0.8 @@ -13731,7 +15461,7 @@ snapshots: dunder-proto: 1.0.0 es-abstract: 1.23.5 es-errors: 1.3.0 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 gopd: 1.2.0 which-builtin-type: 1.2.0 @@ -13871,6 +15601,13 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.28.1 fsevents: 2.3.3 + rsbuild-plugin-html-minifier-terser@1.1.1(@rsbuild/core@1.1.9): + dependencies: + '@types/html-minifier-terser': 7.0.2 + html-minifier-terser: 7.2.0 + optionalDependencies: + '@rsbuild/core': 1.1.9 + run-applescript@7.0.0: {} run-parallel@1.2.0: @@ -13884,7 +15621,7 @@ snapshots: safe-array-concat@1.1.2: dependencies: call-bind: 1.0.8 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 has-symbols: 1.1.0 isarray: 2.0.5 @@ -13904,6 +15641,10 @@ snapshots: dependencies: xmlchars: 2.2.0 + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + scheduler@0.25.0: {} schema-utils@3.3.0: @@ -13912,7 +15653,7 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.2.0: + schema-utils@4.3.0: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 @@ -13982,7 +15723,7 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -14009,13 +15750,34 @@ snapshots: shell-quote@1.8.2: {} - side-channel@1.0.6: + side-channel-list@1.0.0: dependencies: - call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.5 object-inspect: 1.13.3 + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.2 + es-errors: 1.3.0 + get-intrinsic: 1.2.6 + object-inspect: 1.13.3 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.2 + es-errors: 1.3.0 + get-intrinsic: 1.2.6 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -14024,6 +15786,12 @@ snapshots: dependencies: semver: 7.6.3 + sirv@2.0.4: + dependencies: + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 + totalist: 3.0.1 + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -14138,6 +15906,70 @@ snapshots: stdin-discarder@0.2.2: {} + storybook-builder-rsbuild@0.1.6(@rsbuild/core@1.1.9)(@rspack/core@1.1.6(@swc/helpers@0.5.15))(@types/react@19.0.1)(storybook@8.4.7(prettier@3.4.2))(typescript@5.5.4): + dependencies: + '@rsbuild/core': 1.1.9 + '@rsbuild/plugin-type-check': 1.1.0(@rsbuild/core@1.1.9)(@rspack/core@1.1.6(@swc/helpers@0.5.15))(typescript@5.5.4) + '@storybook/addon-docs': 8.4.7(@types/react@19.0.1)(storybook@8.4.7(prettier@3.4.2)) + '@storybook/core-webpack': 8.4.7(storybook@8.4.7(prettier@3.4.2)) + browser-assert: 1.2.1 + case-sensitive-paths-webpack-plugin: 2.4.0 + cjs-module-lexer: 1.4.1 + constants-browserify: 1.0.0 + es-module-lexer: 1.5.4 + fs-extra: 11.2.0 + magic-string: 0.30.15 + path-browserify: 1.0.1 + process: 0.11.10 + rsbuild-plugin-html-minifier-terser: 1.1.1(@rsbuild/core@1.1.9) + sirv: 2.0.4 + storybook: 8.4.7(prettier@3.4.2) + ts-dedent: 2.2.0 + url: 0.11.4 + util: 0.12.5 + util-deprecate: 1.0.2 + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - '@rspack/core' + - '@types/react' + + storybook-react-rsbuild@0.1.6(@rsbuild/core@1.1.9)(@rspack/core@1.1.6(@swc/helpers@0.5.15))(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.28.1)(storybook@8.4.7(prettier@3.4.2))(typescript@5.5.4)(webpack@5.97.1(esbuild@0.24.0)): + dependencies: + '@rollup/pluginutils': 5.1.3(rollup@4.28.1) + '@rsbuild/core': 1.1.9 + '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))(typescript@5.5.4) + '@storybook/react-docgen-typescript-plugin': 1.0.1(typescript@5.5.4)(webpack@5.97.1(esbuild@0.24.0)) + '@types/node': 18.19.68 + find-up: 5.0.0 + magic-string: 0.30.15 + react: 19.0.0 + react-docgen: 7.1.0 + react-dom: 19.0.0(react@19.0.0) + resolve: 1.22.8 + storybook: 8.4.7(prettier@3.4.2) + storybook-builder-rsbuild: 0.1.6(@rsbuild/core@1.1.9)(@rspack/core@1.1.6(@swc/helpers@0.5.15))(@types/react@19.0.1)(storybook@8.4.7(prettier@3.4.2))(typescript@5.5.4) + tsconfig-paths: 4.2.0 + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - '@rspack/core' + - '@storybook/test' + - '@types/react' + - rollup + - supports-color + - webpack + + storybook@8.4.7(prettier@3.4.2): + dependencies: + '@storybook/core': 8.4.7(prettier@3.4.2) + optionalDependencies: + prettier: 3.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + strict-event-emitter@0.5.1: {} string-argv@0.3.2: {} @@ -14184,29 +16016,33 @@ snapshots: es-abstract: 1.23.5 es-errors: 1.3.0 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.5 + get-intrinsic: 1.2.6 gopd: 1.2.0 has-symbols: 1.1.0 internal-slot: 1.0.7 regexp.prototype.flags: 1.5.3 set-function-name: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 es-abstract: 1.23.5 - string.prototype.trim@1.2.9: + string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 + call-bound: 1.0.2 + define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.23.5 es-object-atoms: 1.0.0 + has-property-descriptors: 1.0.2 - string.prototype.trimend@1.0.8: + string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 + call-bound: 1.0.2 define-properties: 1.2.1 es-object-atoms: 1.0.0 @@ -14243,6 +16079,14 @@ snapshots: strip-final-newline@2.0.0: {} + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-indent@4.0.0: + dependencies: + min-indent: 1.0.1 + strip-json-comments@3.1.1: {} strip-json-comments@5.0.1: {} @@ -14312,7 +16156,7 @@ snapshots: sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/gen-mapping': 0.3.8 commander: 4.1.1 glob: 10.4.5 lines-and-columns: 1.2.4 @@ -14427,6 +16271,17 @@ snapshots: optionalDependencies: '@swc/core': 1.10.1(@swc/helpers@0.5.15) + terser-webpack-plugin@5.3.10(esbuild@0.24.0)(webpack@5.97.1(esbuild@0.24.0)): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.37.0 + webpack: 5.97.1(esbuild@0.24.0) + optionalDependencies: + esbuild: 0.24.0 + terser@5.37.0: dependencies: '@jridgewell/source-map': 0.3.6 @@ -14458,6 +16313,8 @@ snapshots: tightrope@0.2.0: {} + tiny-invariant@1.3.3: {} + tinyexec@0.3.1: {} tinyglobby@0.2.10: @@ -14465,6 +16322,10 @@ snapshots: fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -14477,6 +16338,8 @@ snapshots: toidentifier@1.0.1: {} + totalist@3.0.1: {} + touch@3.1.1: {} tough-cookie@4.1.4: @@ -14512,18 +16375,30 @@ snapshots: dependencies: typescript: 5.7.2 + ts-checker-rspack-plugin@1.0.3(@rspack/core@1.1.6(@swc/helpers@0.5.15))(typescript@5.5.4): + dependencies: + '@babel/code-frame': 7.26.2 + '@rspack/lite-tapable': 1.0.1 + chokidar: 3.6.0 + memfs: 4.15.0 + minimatch: 9.0.5 + picocolors: 1.1.1 + typescript: 5.5.4 + optionalDependencies: + '@rspack/core': 1.1.6(@swc/helpers@0.5.15) + ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.5.4): + ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.10.1 + '@types/node': 22.10.2 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -14536,14 +16411,14 @@ snapshots: optionalDependencies: '@swc/core': 1.10.1(@swc/helpers@0.5.15) - ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.1)(typescript@5.7.2): + ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.10.1 + '@types/node': 22.10.2 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -14562,7 +16437,13 @@ snapshots: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 - minimist: 0.2.4 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 strip-bom: 3.0.0 tslib@2.8.1: {} @@ -14658,6 +16539,8 @@ snapshots: type-detect@4.0.8: {} + type-detect@4.1.0: {} + type-fest@0.20.2: {} type-fest@0.21.3: {} @@ -14725,6 +16608,8 @@ snapshots: undefsafe@2.0.5: {} + undici-types@5.26.5: {} + undici-types@6.20.0: {} undici@6.21.0: {} @@ -14747,7 +16632,7 @@ snapshots: '@types/concat-stream': 2.0.3 '@types/debug': 4.1.12 '@types/is-empty': 1.2.3 - '@types/node': 22.10.1 + '@types/node': 22.10.2 '@types/unist': 3.0.3 concat-stream: 2.0.0 debug: 4.4.0(supports-color@5.5.0) @@ -14820,8 +16705,15 @@ snapshots: universalify@0.2.0: {} + universalify@2.0.1: {} + unpipe@1.0.0: {} + unplugin@1.16.0: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: browserslist: 4.24.2 @@ -14841,14 +16733,29 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 + url@0.11.4: + dependencies: + punycode: 1.4.1 + qs: 6.13.1 + util-deprecate@1.0.2: {} + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.16 + utila@0.4.0: {} utils-merge@1.0.1: {} uuid@8.3.2: {} + uuid@9.0.1: {} + uvu@0.5.6: dependencies: dequal: 2.0.3 @@ -14936,12 +16843,12 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1): + webpack-cli@5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4)) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4)) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1))(webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4)) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4)) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4)) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1))(webpack-dev-server@5.2.0(webpack-cli@5.1.4)(webpack@5.97.1))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4)) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 @@ -14953,7 +16860,7 @@ snapshots: webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4) webpack-merge: 5.10.0 optionalDependencies: - webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.97.1) + webpack-dev-server: 5.2.0(webpack-cli@5.1.4)(webpack@5.97.1) webpack-dev-middleware@7.4.2(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4)): dependencies: @@ -14962,7 +16869,7 @@ snapshots: mime-types: 2.1.35 on-finished: 2.4.1 range-parser: 1.2.1 - schema-utils: 4.2.0 + schema-utils: 4.3.0 optionalDependencies: webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4) @@ -14973,11 +16880,11 @@ snapshots: mime-types: 2.1.35 on-finished: 2.4.1 range-parser: 1.2.1 - schema-utils: 4.2.0 + schema-utils: 4.3.0 optionalDependencies: webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) - webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.97.1): + webpack-dev-server@5.2.0(webpack-cli@5.1.4)(webpack@5.97.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -14994,13 +16901,12 @@ snapshots: connect-history-api-fallback: 2.0.0 express: 4.21.2 graceful-fs: 4.2.11 - html-entities: 2.5.2 http-proxy-middleware: 2.0.7(@types/express@4.17.21) ipaddr.js: 2.2.0 launch-editor: 2.9.1 open: 10.1.0 p-retry: 6.2.1 - schema-utils: 4.2.0 + schema-utils: 4.3.0 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 @@ -15009,14 +16915,14 @@ snapshots: ws: 8.18.0 optionalDependencies: webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1) + webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-dev-server@5.1.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): + webpack-dev-server@5.2.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -15033,13 +16939,12 @@ snapshots: connect-history-api-fallback: 2.0.0 express: 4.21.2 graceful-fs: 4.2.11 - html-entities: 2.5.2 http-proxy-middleware: 2.0.7(@types/express@4.17.21) ipaddr.js: 2.2.0 launch-editor: 2.9.1 open: 10.1.0 p-retry: 6.2.1 - schema-utils: 4.2.0 + schema-utils: 4.3.0 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 @@ -15062,6 +16967,8 @@ snapshots: webpack-sources@3.2.3: {} + webpack-virtual-modules@0.6.2: {} + webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)): dependencies: '@types/eslint-scope': 3.7.7 @@ -15118,7 +17025,37 @@ snapshots: watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: - webpack-cli: 5.1.4(webpack-dev-server@5.1.0)(webpack@5.97.1) + webpack-cli: 5.1.4(webpack-dev-server@5.2.0)(webpack@5.97.1) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.97.1(esbuild@0.24.0): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.0 + browserslist: 4.24.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.24.0)(webpack@5.97.1(esbuild@0.24.0)) + watchpack: 2.4.2 + webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild @@ -15275,12 +17212,12 @@ snapshots: zod-package-json@1.0.3: dependencies: - zod: 3.24.0 + zod: 3.24.1 - zod-validation-error@3.4.0(zod@3.24.0): + zod-validation-error@3.4.0(zod@3.24.1): dependencies: - zod: 3.24.0 + zod: 3.24.1 - zod@3.24.0: {} + zod@3.24.1: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f4525e8e..4145d02c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,3 @@ packages: - "packages/*" - - "sample/*" + - "samples/**" diff --git a/sample/tsup-lib/src/index.ts b/sample/tsup-lib/src/index.ts deleted file mode 100644 index eb3a5a09..00000000 --- a/sample/tsup-lib/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./helloFrom.js"; diff --git a/sample/app/.browserslistrc b/samples/rsbuild/app/.browserslistrc similarity index 100% rename from sample/app/.browserslistrc rename to samples/rsbuild/app/.browserslistrc diff --git a/sample/components/.eslintignore b/samples/rsbuild/app/.eslintignore similarity index 100% rename from sample/components/.eslintignore rename to samples/rsbuild/app/.eslintignore diff --git a/sample/app/.eslintrc.json b/samples/rsbuild/app/.eslintrc.json similarity index 100% rename from sample/app/.eslintrc.json rename to samples/rsbuild/app/.eslintrc.json diff --git a/sample/app/.stylelintrc.json b/samples/rsbuild/app/.stylelintrc.json similarity index 100% rename from sample/app/.stylelintrc.json rename to samples/rsbuild/app/.stylelintrc.json diff --git a/sample/app/jest.config.ts b/samples/rsbuild/app/jest.config.ts similarity index 100% rename from sample/app/jest.config.ts rename to samples/rsbuild/app/jest.config.ts diff --git a/samples/rsbuild/app/nodemon.json b/samples/rsbuild/app/nodemon.json new file mode 100644 index 00000000..0e44387c --- /dev/null +++ b/samples/rsbuild/app/nodemon.json @@ -0,0 +1,5 @@ +{ + "watch": ["rsbuild.dev.ts"], + "exec": "rsbuild dev --config rsbuild.dev.ts", + "verbose": true +} diff --git a/samples/rsbuild/app/package.json b/samples/rsbuild/app/package.json new file mode 100644 index 00000000..008d380a --- /dev/null +++ b/samples/rsbuild/app/package.json @@ -0,0 +1,59 @@ +{ + "name": "@rsbuild-sample/app", + "author": "Workleap", + "version": "0.0.0", + "description": "Application to try the Rsbuild configs.", + "private": true, + "license": "Apache-2.0", + "type": "module", + "scripts": { + "dev": "nodemon", + "dev-msw": "cross-env USE_MSW=true nodemon", + "dev-verbose": "cross-env VERBOSE=true nodemon", + "dev-msw-verbose": "cross-env USE_MSW=true VERBOSE=true nodemon", + "build": "rsbuild build --config rsbuild.build.ts", + "serve-build": "pnpm build && pnpm http-server dist -p 8080 -P http://localhost:8080? -c-1", + "eslint": "eslint . --max-warnings=-0 --cache --cache-location node_modules/.cache/eslint", + "typecheck": "tsc", + "test": "jest" + }, + "dependencies": { + "@rsbuild-sample/components": "workspace:*", + "react": "19.0.0", + "react-dom": "19.0.0", + "react-router": "7.0.2" + }, + "devDependencies": { + "@rsbuild/core": "1.1.9", + "@rspack/core": "1.1.6", + "@swc/core": "1.10.1", + "@swc/jest": "0.2.37", + "@testing-library/react": "16.1.0", + "@types/jest": "29.5.14", + "@types/node": "22.10.2", + "@types/react": "19.0.1", + "@types/react-dom": "19.0.2", + "@typescript-eslint/parser": "8.18.0", + "@workleap/browserslist-config": "workspace:*", + "@workleap/eslint-plugin": "workspace:*", + "@workleap/rsbuild-configs": "workspace:*", + "@workleap/stylelint-configs": "workspace:*", + "@workleap/swc-configs": "workspace:*", + "@workleap/typescript-configs": "workspace:*", + "browserslist": "4.24.2", + "cross-env": "7.0.3", + "eslint": "8.57.0", + "http-server": "14.1.1", + "identity-obj-proxy": "3.0.0", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "msw": "2.6.8", + "nodemon": "3.1.7", + "stylelint": "16.11.0", + "ts-node": "10.9.2", + "typescript": "5.5.4" + }, + "msw": { + "workerDirectory": "public" + } +} diff --git a/sample/app/public/favicon.png b/samples/rsbuild/app/public/favicon.png similarity index 100% rename from sample/app/public/favicon.png rename to samples/rsbuild/app/public/favicon.png diff --git a/samples/rsbuild/app/public/index.html b/samples/rsbuild/app/public/index.html new file mode 100644 index 00000000..d2c7c175 --- /dev/null +++ b/samples/rsbuild/app/public/index.html @@ -0,0 +1,9 @@ + + + + + + +
+ + diff --git a/sample/app/public/mockServiceWorker.js b/samples/rsbuild/app/public/mockServiceWorker.js similarity index 100% rename from sample/app/public/mockServiceWorker.js rename to samples/rsbuild/app/public/mockServiceWorker.js diff --git a/samples/rsbuild/app/rsbuild.build.ts b/samples/rsbuild/app/rsbuild.build.ts new file mode 100644 index 00000000..92b2358b --- /dev/null +++ b/samples/rsbuild/app/rsbuild.build.ts @@ -0,0 +1,8 @@ +import { defineBuildConfig } from "@workleap/rsbuild-configs"; + +export default defineBuildConfig({ + verbose: process.env.VERBOSE === "true", + environmentVariables: { + "USE_MSW": process.env.USE_MSW === "true" + } +}); diff --git a/samples/rsbuild/app/rsbuild.dev.ts b/samples/rsbuild/app/rsbuild.dev.ts new file mode 100644 index 00000000..00c89178 --- /dev/null +++ b/samples/rsbuild/app/rsbuild.dev.ts @@ -0,0 +1,10 @@ +import { defineDevConfig } from "@workleap/rsbuild-configs"; + +export default defineDevConfig({ + verbose: process.env.VERBOSE === "true", + environmentVariables: { + "USE_MSW": process.env.USE_MSW === "true", + "STRING": "STRING_VALUE", + "INT": 1 + } +}); diff --git a/samples/rsbuild/app/src/About.tsx b/samples/rsbuild/app/src/About.tsx new file mode 100644 index 00000000..af2c1c64 --- /dev/null +++ b/samples/rsbuild/app/src/About.tsx @@ -0,0 +1,12 @@ +import { Button } from "@rsbuild-sample/components"; +// import { helloFrom } from "@rsbuild-sample/tsup-lib"; + +export function About() { + return ( + <> +

About

+ {/*
{helloFrom("the about page")}
*/} + + + ); +} diff --git a/sample/app/src/App.tsx b/samples/rsbuild/app/src/App.tsx similarity index 100% rename from sample/app/src/App.tsx rename to samples/rsbuild/app/src/App.tsx diff --git a/sample/app/src/Fetch.tsx b/samples/rsbuild/app/src/Fetch.tsx similarity index 100% rename from sample/app/src/Fetch.tsx rename to samples/rsbuild/app/src/Fetch.tsx diff --git a/sample/app/src/Home.css b/samples/rsbuild/app/src/Home.css similarity index 100% rename from sample/app/src/Home.css rename to samples/rsbuild/app/src/Home.css diff --git a/samples/rsbuild/app/src/Home.tsx b/samples/rsbuild/app/src/Home.tsx new file mode 100644 index 00000000..5d5558a9 --- /dev/null +++ b/samples/rsbuild/app/src/Home.tsx @@ -0,0 +1,15 @@ +// import { helloFrom } from "@rsbuild-sample/tsup-lib"; +import "./Home.css"; +import { ReactComponent as AddIcon } from "./assets/add.svg"; + +export function Home() { + return ( +
+

Home

+ {/*

{helloFrom("the homepage")}

*/} +

+ Here's an SVG icon loaded with @svgr/webpack: +

+
+ ); +} diff --git a/sample/app/src/RootLayout.css b/samples/rsbuild/app/src/RootLayout.css similarity index 100% rename from sample/app/src/RootLayout.css rename to samples/rsbuild/app/src/RootLayout.css diff --git a/sample/app/src/RootLayout.tsx b/samples/rsbuild/app/src/RootLayout.tsx similarity index 100% rename from sample/app/src/RootLayout.tsx rename to samples/rsbuild/app/src/RootLayout.tsx diff --git a/sample/app/src/assets/add.svg b/samples/rsbuild/app/src/assets/add.svg similarity index 100% rename from sample/app/src/assets/add.svg rename to samples/rsbuild/app/src/assets/add.svg diff --git a/samples/rsbuild/app/src/env.d.ts b/samples/rsbuild/app/src/env.d.ts new file mode 100644 index 00000000..5f21dc7f --- /dev/null +++ b/samples/rsbuild/app/src/env.d.ts @@ -0,0 +1,9 @@ +declare module "*.svg" { + export const ReactComponent: React.FunctionComponent< + React.SVGProps + >; +} +declare module "*.svg?react" { + const ReactComponent: React.FunctionComponent>; + export default ReactComponent; +} diff --git a/sample/app/src/index.tsx b/samples/rsbuild/app/src/index.tsx similarity index 100% rename from sample/app/src/index.tsx rename to samples/rsbuild/app/src/index.tsx diff --git a/sample/app/src/mocks/browser.ts b/samples/rsbuild/app/src/mocks/browser.ts similarity index 100% rename from sample/app/src/mocks/browser.ts rename to samples/rsbuild/app/src/mocks/browser.ts diff --git a/sample/app/src/mocks/handlers.ts b/samples/rsbuild/app/src/mocks/handlers.ts similarity index 100% rename from sample/app/src/mocks/handlers.ts rename to samples/rsbuild/app/src/mocks/handlers.ts diff --git a/sample/app/src/types/svgr.d.ts b/samples/rsbuild/app/src/types/svgr.d.ts similarity index 100% rename from sample/app/src/types/svgr.d.ts rename to samples/rsbuild/app/src/types/svgr.d.ts diff --git a/sample/app/swc.jest.ts b/samples/rsbuild/app/swc.jest.ts similarity index 100% rename from sample/app/swc.jest.ts rename to samples/rsbuild/app/swc.jest.ts diff --git a/sample/app/tests/About.test.tsx b/samples/rsbuild/app/tests/About.test.tsx similarity index 100% rename from sample/app/tests/About.test.tsx rename to samples/rsbuild/app/tests/About.test.tsx diff --git a/samples/rsbuild/app/tsconfig.json b/samples/rsbuild/app/tsconfig.json new file mode 100644 index 00000000..b52f3b8d --- /dev/null +++ b/samples/rsbuild/app/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@workleap/typescript-configs/web-application.json", + "compilerOptions": { + "incremental": true, + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" + // "paths": { + // "@rsbuild-sample/tsup-lib": ["../tsup-lib/src/index.ts"] + // } + }, + "include": [ + ".", + "../**/src/env.d.ts" + ], + "exclude": ["public", "dist", "node_modules"] +} diff --git a/sample/tsup-lib/.eslintignore b/samples/rsbuild/components/.eslintignore similarity index 100% rename from sample/tsup-lib/.eslintignore rename to samples/rsbuild/components/.eslintignore diff --git a/sample/components/.eslintrc.json b/samples/rsbuild/components/.eslintrc.json similarity index 100% rename from sample/components/.eslintrc.json rename to samples/rsbuild/components/.eslintrc.json diff --git a/sample/components/.stylelintrc.json b/samples/rsbuild/components/.stylelintrc.json similarity index 100% rename from sample/components/.stylelintrc.json rename to samples/rsbuild/components/.stylelintrc.json diff --git a/sample/components/jest.config.ts b/samples/rsbuild/components/jest.config.ts similarity index 100% rename from sample/components/jest.config.ts rename to samples/rsbuild/components/jest.config.ts diff --git a/samples/rsbuild/components/package.json b/samples/rsbuild/components/package.json new file mode 100644 index 00000000..56e6120b --- /dev/null +++ b/samples/rsbuild/components/package.json @@ -0,0 +1,45 @@ +{ + "name": "@rsbuild-sample/components", + "author": "Workleap", + "version": "0.0.0", + "description": "React components library to try the web configs.", + "private": true, + "license": "Apache-2.0", + "type": "module", + "exports": "./src/index.ts", + "files": [ + "/dist" + ], + "scripts": { + "eslint": "eslint . --max-warnings=-0 --cache --cache-location node_modules/.cache/eslint", + "typecheck": "tsc", + "test": "jest" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + }, + "devDependencies": { + "@rsbuild/core": "1.1.9", + "@storybook/react": "8.4.7", + "@swc/core": "1.10.1", + "@swc/jest": "0.2.37", + "@testing-library/react": "16.1.0", + "@types/jest": "29.5.14", + "@types/react": "19.0.1", + "@types/react-dom": "19.0.2", + "@typescript-eslint/parser": "8.18.0", + "@workleap/eslint-plugin": "workspace:*", + "@workleap/stylelint-configs": "workspace:*", + "@workleap/swc-configs": "workspace:*", + "@workleap/typescript-configs": "workspace:*", + "eslint": "8.57.0", + "identity-obj-proxy": "3.0.0", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "react": "19.0.0", + "react-dom": "19.0.0", + "ts-node": "10.9.2", + "typescript": "5.5.4" + } +} diff --git a/samples/rsbuild/components/src/Button.css b/samples/rsbuild/components/src/Button.css new file mode 100644 index 00000000..2594a636 --- /dev/null +++ b/samples/rsbuild/components/src/Button.css @@ -0,0 +1,3 @@ +.sample-button-bg { + background-color: blue; +} diff --git a/samples/rsbuild/components/src/Button.module.css b/samples/rsbuild/components/src/Button.module.css new file mode 100644 index 00000000..cea75dd0 --- /dev/null +++ b/samples/rsbuild/components/src/Button.module.css @@ -0,0 +1,3 @@ +.sample-button-color { + color: white; +} diff --git a/samples/rsbuild/components/src/Button.stories.tsx b/samples/rsbuild/components/src/Button.stories.tsx new file mode 100644 index 00000000..3a24d900 --- /dev/null +++ b/samples/rsbuild/components/src/Button.stories.tsx @@ -0,0 +1,16 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Button } from "./Button.tsx"; + +const meta: Meta = { + component: Button +}; + +export default meta; + +type Story = StoryObj; + +export const Default: Story = { + args: { + children: "Click me!" + } +}; diff --git a/samples/rsbuild/components/src/Button.tsx b/samples/rsbuild/components/src/Button.tsx new file mode 100644 index 00000000..d3ab9f40 --- /dev/null +++ b/samples/rsbuild/components/src/Button.tsx @@ -0,0 +1,13 @@ +import type { HTMLProps, ReactNode } from "react"; +import "./Button.css"; +import styles from "./Button.module.css"; + +export interface ButtonProps extends Omit, "type" | "className"> { + children: ReactNode; +} + +export function Button({ children, ...props }: ButtonProps) { + return ( + + ); +} diff --git a/samples/rsbuild/components/src/env.d.ts b/samples/rsbuild/components/src/env.d.ts new file mode 100644 index 00000000..b0ac762b --- /dev/null +++ b/samples/rsbuild/components/src/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/sample/components/src/index.ts b/samples/rsbuild/components/src/index.ts similarity index 100% rename from sample/components/src/index.ts rename to samples/rsbuild/components/src/index.ts diff --git a/sample/components/swc.jest.ts b/samples/rsbuild/components/swc.jest.ts similarity index 100% rename from sample/components/swc.jest.ts rename to samples/rsbuild/components/swc.jest.ts diff --git a/sample/components/tests/Button.test.tsx b/samples/rsbuild/components/tests/Button.test.tsx similarity index 100% rename from sample/components/tests/Button.test.tsx rename to samples/rsbuild/components/tests/Button.test.tsx diff --git a/sample/tsup-lib/tsconfig.json b/samples/rsbuild/components/tsconfig.json similarity index 100% rename from sample/tsup-lib/tsconfig.json rename to samples/rsbuild/components/tsconfig.json diff --git a/samples/storybook/.browserslistrc b/samples/storybook/.browserslistrc new file mode 100644 index 00000000..ffa3bf6b --- /dev/null +++ b/samples/storybook/.browserslistrc @@ -0,0 +1 @@ +extends @workleap/browserslist-config \ No newline at end of file diff --git a/samples/storybook/.eslintignore b/samples/storybook/.eslintignore new file mode 100644 index 00000000..42d440b0 --- /dev/null +++ b/samples/storybook/.eslintignore @@ -0,0 +1,3 @@ +node_modules +storybook-static +!.storybook diff --git a/samples/storybook/.eslintrc.json b/samples/storybook/.eslintrc.json new file mode 100644 index 00000000..ab20e504 --- /dev/null +++ b/samples/storybook/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc", + "root": true, + "extends": "plugin:@workleap/web-application" +} diff --git a/samples/storybook/.storybook/main.ts b/samples/storybook/.storybook/main.ts new file mode 100644 index 00000000..c6c0347c --- /dev/null +++ b/samples/storybook/.storybook/main.ts @@ -0,0 +1,22 @@ +// They are installed in this nested project, but not at the root of the workspace. +/* eslint-disable storybook/no-uninstalled-addons */ + +import type { StorybookConfig } from "storybook-react-rsbuild"; + +const storybookConfig: StorybookConfig = { + framework: "storybook-react-rsbuild", + addons: [ + "@storybook/addon-links", + "@storybook/addon-essentials", + "@storybook/addon-interactions", + "@storybook/addon-a11y" + ], + stories: [ + "../../rsbuild/components/src/**/*.stories.(tsx|mdx)" + ], + docs: { + autodocs: false + } +}; + +export default storybookConfig; diff --git a/samples/storybook/.storybook/preview.tsx b/samples/storybook/.storybook/preview.tsx new file mode 100644 index 00000000..4786cd60 --- /dev/null +++ b/samples/storybook/.storybook/preview.tsx @@ -0,0 +1,5 @@ +import type { Preview } from "@storybook/react"; + +const preview: Preview = {}; + +export default preview; diff --git a/samples/storybook/package.json b/samples/storybook/package.json new file mode 100644 index 00000000..0c9103d4 --- /dev/null +++ b/samples/storybook/package.json @@ -0,0 +1,38 @@ +{ + "name": "@storybook-sample/storybook", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "storybook dev -p 6006", + "build": "storybook build", + "serve-build": "pnpm http-server storybook-static -p 8080 -P http://localhost:8080? -c-1", + "eslint": "eslint . --max-warnings=-0 --cache --cache-location node_modules/.cache/eslint", + "typecheck": "tsc" + }, + "dependencies": { + "react": "19.0.0", + "react-dom": "19.0.0" + }, + "devDependencies": { + "@rsbuild/core": "1.1.9", + "@rspack/core": "1.1.6", + "@storybook/addon-a11y": "8.4.7", + "@storybook/addon-essentials": "8.4.7", + "@storybook/addon-interactions": "8.4.7", + "@storybook/addon-links": "8.4.7", + "@storybook/react": "8.4.7", + "@types/react": "19.0.1", + "@types/react-dom": "19.0.2", + "@workleap/browserslist-config": "workspace:*", + "@workleap/eslint-plugin": "workspace:*", + "@workleap/rsbuild-configs": "workspace:*", + "@workleap/typescript-configs": "workspace:*", + "browserslist": "4.24.2", + "eslint": "8.57.0", + "http-server": "14.1.1", + "storybook": "8.4.7", + "storybook-react-rsbuild": "0.1.6", + "typescript": "5.5.4" + } +} diff --git a/samples/storybook/rsbuild.config.ts b/samples/storybook/rsbuild.config.ts new file mode 100644 index 00000000..ce709cc8 --- /dev/null +++ b/samples/storybook/rsbuild.config.ts @@ -0,0 +1,3 @@ +import { defineStorybookConfig } from "@workleap/rsbuild-configs"; + +export default defineStorybookConfig(); diff --git a/samples/storybook/tsconfig.json b/samples/storybook/tsconfig.json new file mode 100644 index 00000000..49e7a2a3 --- /dev/null +++ b/samples/storybook/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "@workleap/typescript-configs/web-application.json", + "compilerOptions": { + "incremental": true, + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", + // "paths": { + // "@rslib-poc/components-lib": ["../../libs/components-lib/src/index.ts"], + // "@rslib-poc/ext-lib": ["../../libs/ext-lib/src/index.ts"], + // "@rslib-poc/ts-lib": ["../../libs/ts-lib/src/index.ts"], + // } + }, + // "include": [ + // "**/*", + // /** + // * Since we are using module augmentation in the packages, and we use tsconfig paths to resolve the packages + // * from this repo, we need to include the types folder in the packages to make sure the types are included + // * in the build. + // */ + // "../../libs/**/types" + // ], + "exclude": ["dist", "node_modules"] +} diff --git a/samples/webpack/app/.browserslistrc b/samples/webpack/app/.browserslistrc new file mode 100644 index 00000000..f8a8f866 --- /dev/null +++ b/samples/webpack/app/.browserslistrc @@ -0,0 +1 @@ +extends @workleap/browserslist-config diff --git a/samples/webpack/app/.eslintignore b/samples/webpack/app/.eslintignore new file mode 100644 index 00000000..de4d1f00 --- /dev/null +++ b/samples/webpack/app/.eslintignore @@ -0,0 +1,2 @@ +dist +node_modules diff --git a/samples/webpack/app/.eslintrc.json b/samples/webpack/app/.eslintrc.json new file mode 100644 index 00000000..ab20e504 --- /dev/null +++ b/samples/webpack/app/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc", + "root": true, + "extends": "plugin:@workleap/web-application" +} diff --git a/samples/webpack/app/.stylelintrc.json b/samples/webpack/app/.stylelintrc.json new file mode 100644 index 00000000..8e2ab9c1 --- /dev/null +++ b/samples/webpack/app/.stylelintrc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://json.schemastore.org/stylelintrc", + "extends": "@workleap/stylelint-configs" +} diff --git a/samples/webpack/app/jest.config.ts b/samples/webpack/app/jest.config.ts new file mode 100644 index 00000000..262ac9fe --- /dev/null +++ b/samples/webpack/app/jest.config.ts @@ -0,0 +1,19 @@ +import type { Config } from "jest"; +import { swcConfig } from "./swc.jest.ts"; + +const config: Config = { + testRegex: "/tests/*/.*\\.test\\.(ts|tsx)$", + testPathIgnorePatterns: ["/node_modules/", "/dist/"], + testEnvironment: "jsdom", + transform: { + "^.+\\.(js|ts|tsx)$": ["@swc/jest", swcConfig as Record] + }, + moduleNameMapper: { + "\\.css$": "identity-obj-proxy" + }, + cacheDirectory: "./node_modules/.cache/jest", + clearMocks: true, + verbose: true +}; + +export default config; diff --git a/sample/app/nodemon.json b/samples/webpack/app/nodemon.json similarity index 100% rename from sample/app/nodemon.json rename to samples/webpack/app/nodemon.json diff --git a/sample/app/package.json b/samples/webpack/app/package.json similarity index 87% rename from sample/app/package.json rename to samples/webpack/app/package.json index e1ecb500..f33aab20 100644 --- a/sample/app/package.json +++ b/samples/webpack/app/package.json @@ -1,8 +1,8 @@ { - "name": "@sample/app", + "name": "@webpack-sample/app", "author": "Workleap", "version": "0.0.0", - "description": "Application to try the web configs.", + "description": "Application to try the webpack configs.", "private": true, "license": "Apache-2.0", "type": "module", @@ -17,13 +17,20 @@ "typecheck": "tsc", "test": "jest" }, + "dependencies": { + "@webpack-sample/components": "workspace:*", + "@webpack-sample/tsup-lib": "workspace:*", + "react": "19.0.0", + "react-dom": "19.0.0", + "react-router": "7.0.2" + }, "devDependencies": { "@swc/core": "1.10.1", "@swc/helpers": "0.5.15", "@swc/jest": "0.2.37", "@testing-library/react": "16.1.0", "@types/jest": "29.5.14", - "@types/node": "22.10.1", + "@types/node": "22.10.2", "@types/react": "19.0.1", "@types/react-dom": "19.0.2", "@typescript-eslint/parser": "8.18.0", @@ -49,14 +56,7 @@ "typescript": "5.5.4", "webpack": "5.97.1", "webpack-cli": "5.1.4", - "webpack-dev-server": "5.1.0" - }, - "dependencies": { - "@sample/components": "workspace:*", - "@sample/tsup-lib": "workspace:*", - "react": "19.0.0", - "react-dom": "19.0.0", - "react-router": "7.0.2" + "webpack-dev-server": "5.2.0" }, "msw": { "workerDirectory": "public" diff --git a/sample/app/postcss.config.ts b/samples/webpack/app/postcss.config.ts similarity index 100% rename from sample/app/postcss.config.ts rename to samples/webpack/app/postcss.config.ts diff --git a/samples/webpack/app/public/favicon.png b/samples/webpack/app/public/favicon.png new file mode 100644 index 00000000..47157f6b Binary files /dev/null and b/samples/webpack/app/public/favicon.png differ diff --git a/sample/app/public/index.html b/samples/webpack/app/public/index.html similarity index 100% rename from sample/app/public/index.html rename to samples/webpack/app/public/index.html diff --git a/samples/webpack/app/public/mockServiceWorker.js b/samples/webpack/app/public/mockServiceWorker.js new file mode 100644 index 00000000..7898a629 --- /dev/null +++ b/samples/webpack/app/public/mockServiceWorker.js @@ -0,0 +1,292 @@ +/* eslint-disable */ +/* tslint:disable */ + +/** + * Mock Service Worker (2.0.3). + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + * - Please do NOT serve this file on production. + */ + +const INTEGRITY_CHECKSUM = '0877fcdc026242810f5bfde0d7178db4' +const IS_MOCKED_RESPONSE = Symbol('isMockedResponse') +const activeClientIds = new Set() + +self.addEventListener('install', function () { + self.skipWaiting() +}) + +self.addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) + +self.addEventListener('message', async function (event) { + const clientId = event.source.id + + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + switch (event.data) { + case 'KEEPALIVE_REQUEST': { + sendToClient(client, { + type: 'KEEPALIVE_RESPONSE', + }) + break + } + + case 'INTEGRITY_CHECK_REQUEST': { + sendToClient(client, { + type: 'INTEGRITY_CHECK_RESPONSE', + payload: INTEGRITY_CHECKSUM, + }) + break + } + + case 'MOCK_ACTIVATE': { + activeClientIds.add(clientId) + + sendToClient(client, { + type: 'MOCKING_ENABLED', + payload: true, + }) + break + } + + case 'MOCK_DEACTIVATE': { + activeClientIds.delete(clientId) + break + } + + case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + + const remainingClients = allClients.filter((client) => { + return client.id !== clientId + }) + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister() + } + + break + } + } +}) + +self.addEventListener('fetch', function (event) { + const { request } = event + + // Bypass navigation requests. + if (request.mode === 'navigate') { + return + } + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + return + } + + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been deleted (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } + + // Generate unique request ID. + const requestId = crypto.randomUUID() + event.respondWith(handleRequest(event, requestId)) +}) + +async function handleRequest(event, requestId) { + const client = await resolveMainClient(event) + const response = await getResponse(event, client, requestId) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + ;(async function () { + const responseClone = response.clone() + // When performing original requests, response body will + // always be a ReadableStream, even for 204 responses. + // But when creating a new Response instance on the client, + // the body for a 204 response must be null. + const responseBody = response.status === 204 ? null : responseClone.body + + sendToClient( + client, + { + type: 'RESPONSE', + payload: { + requestId, + isMockedResponse: IS_MOCKED_RESPONSE in response, + type: responseClone.type, + status: responseClone.status, + statusText: responseClone.statusText, + body: responseBody, + headers: Object.fromEntries(responseClone.headers.entries()), + }, + }, + [responseBody], + ) + })() + } + + return response +} + +// Resolve the main client for the given event. +// Client that issues a request doesn't necessarily equal the client +// that registered the worker. It's with the latter the worker should +// communicate with during the response resolving phase. +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) + + if (client?.frameType === 'top-level') { + return client + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +async function getResponse(event, client, requestId) { + const { request } = event + + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const requestClone = request.clone() + + function passthrough() { + const headers = Object.fromEntries(requestClone.headers.entries()) + + // Remove internal MSW request header so the passthrough request + // complies with any potential CORS preflight checks on the server. + // Some servers forbid unknown request headers. + delete headers['x-msw-intention'] + + return fetch(requestClone, { headers }) + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough() + } + + // Bypass requests with the explicit bypass header. + // Such requests can be issued by "ctx.fetch()". + const mswIntention = request.headers.get('x-msw-intention') + if (['bypass', 'passthrough'].includes(mswIntention)) { + return passthrough() + } + + // Notify the client that a request has been intercepted. + const requestBuffer = await request.arrayBuffer() + const clientMessage = await sendToClient( + client, + { + type: 'REQUEST', + payload: { + id: requestId, + url: request.url, + mode: request.mode, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: requestBuffer, + keepalive: request.keepalive, + }, + }, + [requestBuffer], + ) + + switch (clientMessage.type) { + case 'MOCK_RESPONSE': { + return respondWithMock(clientMessage.data) + } + + case 'MOCK_NOT_FOUND': { + return passthrough() + } + } + + return passthrough() +} + +function sendToClient(client, message, transferrables = []) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel() + + channel.port1.onmessage = (event) => { + if (event.data && event.data.error) { + return reject(event.data.error) + } + + resolve(event.data) + } + + client.postMessage( + message, + [channel.port2].concat(transferrables.filter(Boolean)), + ) + }) +} + +async function respondWithMock(response) { + // Setting response status code to 0 is a no-op. + // However, when responding with a "Response.error()", the produced Response + // instance will have status code set to 0. Since it's not possible to create + // a Response instance with status code 0, handle that use-case separately. + if (response.status === 0) { + return Response.error() + } + + const mockedResponse = new Response(response.body, response) + + Reflect.defineProperty(mockedResponse, IS_MOCKED_RESPONSE, { + value: true, + enumerable: true, + }) + + return mockedResponse +} diff --git a/sample/app/src/About.tsx b/samples/webpack/app/src/About.tsx similarity index 69% rename from sample/app/src/About.tsx rename to samples/webpack/app/src/About.tsx index 2e8a90d7..fd873051 100644 --- a/sample/app/src/About.tsx +++ b/samples/webpack/app/src/About.tsx @@ -1,5 +1,5 @@ -import { Button } from "@sample/components"; -import { helloFrom } from "@sample/tsup-lib"; +import { Button } from "@webpack-sample/components"; +import { helloFrom } from "@webpack-sample/tsup-lib"; export function About() { return ( diff --git a/samples/webpack/app/src/App.tsx b/samples/webpack/app/src/App.tsx new file mode 100644 index 00000000..d1051464 --- /dev/null +++ b/samples/webpack/app/src/App.tsx @@ -0,0 +1,43 @@ +import { createBrowserRouter } from "react-router"; +import { RouterProvider } from "react-router/dom"; +import { About } from "./About.tsx"; +import { Fetch } from "./Fetch.tsx"; +import { Home } from "./Home.tsx"; +import { RootLayout } from "./RootLayout.tsx"; + +const router = createBrowserRouter([ + { + element: , + children: [ + { + index: true, + element: + }, + { + path: "/about", + element: + }, + { + path: "/fetch", + element: + } + ] + } +], { + future: { + v7_relativeSplatPath: false, + v7_startTransition: false, + v7_fetcherPersist: false, + v7_normalizeFormMethod: false, + v7_partialHydration: false, + v7_skipActionErrorRevalidation: false + } +}); + +export function App() { + return ( + + ); +} diff --git a/samples/webpack/app/src/Fetch.tsx b/samples/webpack/app/src/Fetch.tsx new file mode 100644 index 00000000..df27d675 --- /dev/null +++ b/samples/webpack/app/src/Fetch.tsx @@ -0,0 +1,31 @@ +import { useEffect, useState } from "react"; + +export function Fetch() { + const [pokemons, setPokemons] = useState([]); + + useEffect(() => { + fetch("/api/pokemons") + .then(res => { + if (res.ok) { + return res.json(); + } + + throw res; + }) + .then(data => { + setPokemons(data); + }) + .catch(() => { + console.error("An error occured while fetching pokemons."); + }); + }, []); + + return ( + <> +

Fetch

+
    + {pokemons.map(x =>
  • {x}
  • )} +
+ + ); +} diff --git a/samples/webpack/app/src/Home.css b/samples/webpack/app/src/Home.css new file mode 100644 index 00000000..1b38f5c8 --- /dev/null +++ b/samples/webpack/app/src/Home.css @@ -0,0 +1,3 @@ +.title { + color: blue; +} diff --git a/sample/app/src/Home.tsx b/samples/webpack/app/src/Home.tsx similarity index 86% rename from sample/app/src/Home.tsx rename to samples/webpack/app/src/Home.tsx index edd979a2..9419dd47 100644 --- a/sample/app/src/Home.tsx +++ b/samples/webpack/app/src/Home.tsx @@ -1,4 +1,4 @@ -import { helloFrom } from "@sample/tsup-lib"; +import { helloFrom } from "@webpack-sample/tsup-lib"; import "./Home.css"; import AddIcon from "./assets/add.svg"; diff --git a/samples/webpack/app/src/RootLayout.css b/samples/webpack/app/src/RootLayout.css new file mode 100644 index 00000000..f6fe8f72 --- /dev/null +++ b/samples/webpack/app/src/RootLayout.css @@ -0,0 +1,10 @@ +.nav { + display: flex; + gap: 1rem; + margin: 0; + padding: 0; +} + +.nav-item { + list-style-type: none; +} diff --git a/samples/webpack/app/src/RootLayout.tsx b/samples/webpack/app/src/RootLayout.tsx new file mode 100644 index 00000000..dbf2bf78 --- /dev/null +++ b/samples/webpack/app/src/RootLayout.tsx @@ -0,0 +1,17 @@ +import { Link, Outlet } from "react-router"; +import "./RootLayout.css"; + +export function RootLayout() { + return ( + <> + + + + ); +} diff --git a/samples/webpack/app/src/assets/add.svg b/samples/webpack/app/src/assets/add.svg new file mode 100644 index 00000000..d6111558 --- /dev/null +++ b/samples/webpack/app/src/assets/add.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/samples/webpack/app/src/index.tsx b/samples/webpack/app/src/index.tsx new file mode 100644 index 00000000..5d3b525e --- /dev/null +++ b/samples/webpack/app/src/index.tsx @@ -0,0 +1,17 @@ +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import { App } from "./App.tsx"; + +if (process.env.USE_MSW) { + import("./mocks/browser.ts").then(({ worker }) => { + worker.start(); + }); +} + +const root = createRoot(document.getElementById("root")!); + +root.render( + + + +); diff --git a/samples/webpack/app/src/mocks/browser.ts b/samples/webpack/app/src/mocks/browser.ts new file mode 100644 index 00000000..ebf793a0 --- /dev/null +++ b/samples/webpack/app/src/mocks/browser.ts @@ -0,0 +1,5 @@ +import { setupWorker, type SetupWorker } from "msw/browser"; +import { handlers } from "./handlers.ts"; + +// This configures a Service Worker with the given request handlers. +export const worker: SetupWorker = setupWorker(...handlers); diff --git a/samples/webpack/app/src/mocks/handlers.ts b/samples/webpack/app/src/mocks/handlers.ts new file mode 100644 index 00000000..68f84ef1 --- /dev/null +++ b/samples/webpack/app/src/mocks/handlers.ts @@ -0,0 +1,28 @@ +import { HttpResponse, http, type HttpHandler } from "msw"; + +export const handlers: HttpHandler[] = [ + http.get("/api/pokemons", () => { + return HttpResponse.json([ + "Bulbasaur", + "Ivysaur", + "Venusaur", + "Charmander", + "Charmeleon", + "Charizard", + "Squirtle", + "Wartortle", + "Blastoise", + "Caterpie", + "Metapod", + "Butterfree", + "Weedle", + "Kakuna", + "Beedrill", + "Pidgey", + "Pidgeotto", + "Pidgeot", + "Rattata", + "Raticate" + ]); + }) +]; diff --git a/samples/webpack/app/src/types/svgr.d.ts b/samples/webpack/app/src/types/svgr.d.ts new file mode 100644 index 00000000..7a46c1b3 --- /dev/null +++ b/samples/webpack/app/src/types/svgr.d.ts @@ -0,0 +1,4 @@ +declare module "*.svg" { + const content: React.FunctionComponent>; + export default content; +} diff --git a/sample/app/swc.build.js b/samples/webpack/app/swc.build.js similarity index 100% rename from sample/app/swc.build.js rename to samples/webpack/app/swc.build.js diff --git a/sample/app/swc.dev.js b/samples/webpack/app/swc.dev.js similarity index 100% rename from sample/app/swc.dev.js rename to samples/webpack/app/swc.dev.js diff --git a/samples/webpack/app/swc.jest.ts b/samples/webpack/app/swc.jest.ts new file mode 100644 index 00000000..dc009c5e --- /dev/null +++ b/samples/webpack/app/swc.jest.ts @@ -0,0 +1,5 @@ +import { defineJestConfig } from "@workleap/swc-configs"; + +export const swcConfig = defineJestConfig({ + react: true +}); diff --git a/samples/webpack/app/tests/About.test.tsx b/samples/webpack/app/tests/About.test.tsx new file mode 100644 index 00000000..29ea0f84 --- /dev/null +++ b/samples/webpack/app/tests/About.test.tsx @@ -0,0 +1,8 @@ +import { render, screen } from "@testing-library/react"; +import { About } from "../src/About.tsx"; + +test("About page has a h1 element", async () => { + render(); + + expect(await screen.findByRole("heading")).toBeDefined(); +}); diff --git a/sample/app/tsconfig.json b/samples/webpack/app/tsconfig.json similarity index 80% rename from sample/app/tsconfig.json rename to samples/webpack/app/tsconfig.json index b580c239..da5b2940 100644 --- a/sample/app/tsconfig.json +++ b/samples/webpack/app/tsconfig.json @@ -4,7 +4,7 @@ "incremental": true, "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", "paths": { - "@sample/tsup-lib": ["../tsup-lib/src/index.ts"] + "@webpack-sample/tsup-lib": ["../tsup-lib/src/index.ts"] } }, "exclude": ["public", "dist", "node_modules"] diff --git a/sample/app/webpack.build.js b/samples/webpack/app/webpack.build.js similarity index 100% rename from sample/app/webpack.build.js rename to samples/webpack/app/webpack.build.js diff --git a/sample/app/webpack.dev.js b/samples/webpack/app/webpack.dev.js similarity index 100% rename from sample/app/webpack.dev.js rename to samples/webpack/app/webpack.dev.js diff --git a/samples/webpack/components/.eslintignore b/samples/webpack/components/.eslintignore new file mode 100644 index 00000000..de4d1f00 --- /dev/null +++ b/samples/webpack/components/.eslintignore @@ -0,0 +1,2 @@ +dist +node_modules diff --git a/samples/webpack/components/.eslintrc.json b/samples/webpack/components/.eslintrc.json new file mode 100644 index 00000000..bf056420 --- /dev/null +++ b/samples/webpack/components/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc", + "root": true, + "extends": "plugin:@workleap/react-library" +} diff --git a/samples/webpack/components/.stylelintrc.json b/samples/webpack/components/.stylelintrc.json new file mode 100644 index 00000000..8e2ab9c1 --- /dev/null +++ b/samples/webpack/components/.stylelintrc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://json.schemastore.org/stylelintrc", + "extends": "@workleap/stylelint-configs" +} diff --git a/samples/webpack/components/jest.config.ts b/samples/webpack/components/jest.config.ts new file mode 100644 index 00000000..1e0a3fed --- /dev/null +++ b/samples/webpack/components/jest.config.ts @@ -0,0 +1,19 @@ +import type { Config } from "jest"; +import { swcConfig } from "./swc.jest.ts"; + +const config: Config = { + testRegex: "/tests/*/.*\\.test\\.(ts|tsx)$", + testPathIgnorePatterns: ["/node_modules/", "/dist/"], + testEnvironment: "jsdom", + transform: { + "^.+\\.(ts|tsx)$": ["@swc/jest", swcConfig as Record] + }, + moduleNameMapper: { + "\\.css$": "identity-obj-proxy" + }, + cacheDirectory: "./node_modules/.cache/jest", + clearMocks: true, + verbose: true +}; + +export default config; diff --git a/sample/components/package.json b/samples/webpack/components/package.json similarity index 96% rename from sample/components/package.json rename to samples/webpack/components/package.json index 84c7c65d..1f9b471c 100644 --- a/sample/components/package.json +++ b/samples/webpack/components/package.json @@ -1,5 +1,5 @@ { - "name": "@sample/components", + "name": "@webpack-sample/components", "author": "Workleap", "version": "0.0.0", "description": "React components library to try the web configs.", diff --git a/sample/components/src/Button.css b/samples/webpack/components/src/Button.css similarity index 100% rename from sample/components/src/Button.css rename to samples/webpack/components/src/Button.css diff --git a/sample/components/src/Button.tsx b/samples/webpack/components/src/Button.tsx similarity index 100% rename from sample/components/src/Button.tsx rename to samples/webpack/components/src/Button.tsx diff --git a/samples/webpack/components/src/index.ts b/samples/webpack/components/src/index.ts new file mode 100644 index 00000000..dde4b414 --- /dev/null +++ b/samples/webpack/components/src/index.ts @@ -0,0 +1 @@ +export * from "./Button.tsx"; diff --git a/samples/webpack/components/swc.jest.ts b/samples/webpack/components/swc.jest.ts new file mode 100644 index 00000000..dc009c5e --- /dev/null +++ b/samples/webpack/components/swc.jest.ts @@ -0,0 +1,5 @@ +import { defineJestConfig } from "@workleap/swc-configs"; + +export const swcConfig = defineJestConfig({ + react: true +}); diff --git a/samples/webpack/components/tests/Button.test.tsx b/samples/webpack/components/tests/Button.test.tsx new file mode 100644 index 00000000..d995c76f --- /dev/null +++ b/samples/webpack/components/tests/Button.test.tsx @@ -0,0 +1,8 @@ +import { render, screen } from "@testing-library/react"; +import { Button } from "../src/Button.tsx"; + +test("About page has a h1 element", async () => { + render(); + + expect(await screen.findByRole("button")).toBeDefined(); +}); diff --git a/samples/webpack/components/tsconfig.json b/samples/webpack/components/tsconfig.json new file mode 100644 index 00000000..596c3d1a --- /dev/null +++ b/samples/webpack/components/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@workleap/typescript-configs/library.json", + "compilerOptions": { + "incremental": true, + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", + }, + "exclude": ["dist", "node_modules"] +} diff --git a/samples/webpack/tsup-lib/.eslintignore b/samples/webpack/tsup-lib/.eslintignore new file mode 100644 index 00000000..de4d1f00 --- /dev/null +++ b/samples/webpack/tsup-lib/.eslintignore @@ -0,0 +1,2 @@ +dist +node_modules diff --git a/samples/webpack/tsup-lib/.eslintrc.json b/samples/webpack/tsup-lib/.eslintrc.json new file mode 100644 index 00000000..d9f48339 --- /dev/null +++ b/samples/webpack/tsup-lib/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc", + "root": true, + "extends": "plugin:@workleap/typescript-library" +} diff --git a/sample/tsup-lib/package.json b/samples/webpack/tsup-lib/package.json similarity index 96% rename from sample/tsup-lib/package.json rename to samples/webpack/tsup-lib/package.json index 1ef42a7a..2b442833 100644 --- a/sample/tsup-lib/package.json +++ b/samples/webpack/tsup-lib/package.json @@ -1,5 +1,5 @@ { - "name": "@sample/tsup-lib", + "name": "@webpack-sample/tsup-lib", "author": "Workleap", "version": "0.0.0", "description": "Typescript library to try the web configs.", diff --git a/sample/tsup-lib/src/helloFrom.ts b/samples/webpack/tsup-lib/src/helloFrom.ts similarity index 100% rename from sample/tsup-lib/src/helloFrom.ts rename to samples/webpack/tsup-lib/src/helloFrom.ts diff --git a/samples/webpack/tsup-lib/src/index.ts b/samples/webpack/tsup-lib/src/index.ts new file mode 100644 index 00000000..52b59088 --- /dev/null +++ b/samples/webpack/tsup-lib/src/index.ts @@ -0,0 +1 @@ +export * from "./helloFrom.ts"; diff --git a/samples/webpack/tsup-lib/tsconfig.json b/samples/webpack/tsup-lib/tsconfig.json new file mode 100644 index 00000000..596c3d1a --- /dev/null +++ b/samples/webpack/tsup-lib/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@workleap/typescript-configs/library.json", + "compilerOptions": { + "incremental": true, + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", + }, + "exclude": ["dist", "node_modules"] +} diff --git a/sample/tsup-lib/tsup.build.ts b/samples/webpack/tsup-lib/tsup.build.ts similarity index 100% rename from sample/tsup-lib/tsup.build.ts rename to samples/webpack/tsup-lib/tsup.build.ts diff --git a/sample/tsup-lib/tsup.dev.ts b/samples/webpack/tsup-lib/tsup.dev.ts similarity index 100% rename from sample/tsup-lib/tsup.dev.ts rename to samples/webpack/tsup-lib/tsup.dev.ts diff --git a/tsconfig.json b/tsconfig.json index b3eea55d..0d049a1a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,5 +4,5 @@ "incremental": true, "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", }, - "exclude": ["packages", "sample", "node_modules"] + "exclude": ["packages", "samples", "node_modules"] } diff --git a/turbo.json b/turbo.json index 5f5e52aa..9f78d527 100644 --- a/turbo.json +++ b/turbo.json @@ -15,7 +15,7 @@ }, "build": { "dependsOn": ["^build"], - "outputs": ["dist/**"] + "outputs": ["dist/**", "storybook-static/**"] }, "serve-build": { "dependsOn": ["build"],