From 89ace29b9aeadbbe83cfa71dd137b9f1a115c283 Mon Sep 17 00:00:00 2001 From: Patrick Lafrance Date: Tue, 30 Apr 2024 20:50:02 -0400 Subject: [PATCH] chore: migrate to module federation 2.0 (#168) * chore: Update the packages and samples to MF enhanced * More stuff * Fixed all tests * Added tests for sharedDependenciesResolutionPlugin * Clean up * More stuff * More docs * More docs * More stuff * More stuff * More doc fixes * Rename @squide/firefly-configs to @squide/firefly-webpack-configs * docs about shared dependencies * Added a changeset file * Updated CI script --- .changeset/funny-chairs-joke.md | 111 + .github/workflows/ci.yml | 1 + CONTRIBUTING.md | 4 +- README.md | 6 +- docs/getting-started/create-host.md | 106 +- docs/getting-started/create-local-module.md | 37 +- docs/getting-started/create-remote-module.md | 15 +- docs/getting-started/default.md | 8 +- docs/getting-started/deploy.md | 2 +- docs/guides/add-a-shared-dependency.md | 72 +- docs/guides/add-authentication.md | 23 +- docs/guides/develop-a-module-in-isolation.md | 35 +- docs/guides/fetch-initial-data.md | 14 +- docs/guides/fetch-page-data.md | 16 +- docs/guides/isolate-module-failures.md | 2 +- docs/guides/manage-shared-state.md | 2 +- docs/guides/override-a-react-context.md | 8 +- docs/guides/setup-i18next.md | 37 +- docs/guides/setup-msw.md | 43 +- docs/guides/use-feature-flags.md | 8 +- docs/reference/packages.md | 4 +- .../completeLocalModuleRegistrations.md | 22 +- .../completeModuleRegistrations.md | 32 +- .../completeRemoteModuleRegistrations.md | 33 +- .../mergeDeferredRegistrations.md | 7 +- .../registration/registerLocalModules.md | 37 +- .../registration/registerRemoteModules.md | 96 +- .../registration/useAreModulesReady.md | 2 +- .../registration/useAreModulesRegistered.md | 2 +- docs/reference/routing/appRouter.md | 11 +- docs/reference/routing/useIsRouteProtected.md | 2 +- docs/reference/runtime/runtime-class.md | 18 +- .../webpack/defineBuildHostConfig.md | 133 +- .../webpack/defineBuildRemoteModuleConfig.md | 44 +- docs/reference/webpack/defineDevHostConfig.md | 144 +- .../webpack/defineDevRemoteModuleConfig.md | 44 +- docs/troubleshooting.md | 6 +- package.json | 10 +- packages/core/package.json | 8 +- packages/fakes/package.json | 2 +- packages/firefly-configs/CHANGELOG.md | 66 - .../__snapshots__/defineConfig.test.ts.snap | 177 - .../tests/defineConfig.test.ts | 58 - .../.eslintrc.json | 0 .../README.md | 2 +- .../jest.config.ts | 0 .../package.json | 7 +- .../src/index.ts | 10 +- .../swc.jest.ts | 0 .../__snapshots__/defineConfig.test.ts.snap | 179 + .../tests/defineConfig.test.ts | 67 + .../tsconfig.json | 0 .../tsup.build.ts | 0 .../tsup.dev.ts | 0 packages/firefly/package.json | 22 +- packages/firefly/src/AppRouter.tsx | 2 +- packages/firefly/src/fireflyRuntime.tsx | 49 +- packages/firefly/src/index.ts | 2 +- packages/firefly/tests/AppRouter.test.tsx | 2 +- packages/firefly/tsconfig.json | 2 +- packages/i18next/package.json | 16 +- .../.eslintrc.json | 0 .../README.md | 2 +- .../jest.config.ts | 0 .../package.json | 25 +- .../src/completeModuleRegistrations.ts | 0 .../src/index.ts | 1 - .../src/registerRemoteModules.ts | 62 +- .../module-federation/src/remoteDefinition.ts | 5 + .../src/useAreModulesReady.ts | 3 +- .../src/useAreModulesRegistered.ts | 3 +- .../swc.jest.ts | 0 .../tests/areModulesReady.test.tsx | 54 +- .../tests/areModulesRegistered.test.tsx | 36 +- .../completeRemoteModuleRegistrations.test.ts | 44 +- .../tests/registerRemoteModules.test.ts | 30 +- .../tsconfig.json | 0 .../tsup.build.ts | 0 .../tsup.dev.ts | 0 packages/msw/package.json | 12 +- packages/react-router/package.json | 20 +- packages/webpack-configs/package.json | 9 +- packages/webpack-configs/src/defineConfig.ts | 140 +- packages/webpack-configs/src/index.ts | 2 +- .../src/nonCacheableRemoteEntryPlugin.ts | 20 + .../src/sharedDependenciesResolutionPlugin.ts | 164 + packages/webpack-configs/swc.jest.ts | 10 + .../__snapshots__/defineConfig.test.ts.snap | 2258 ++++---- .../tests/defineConfig.test.ts | 267 +- ...sharedDependenciesResolutionPlugin.test.ts | 108 + packages/webpack-configs/tsup.build.ts | 6 +- packages/webpack-configs/tsup.dev.ts | 6 +- .../webpack-module-federation/CHANGELOG.md | 185 - .../src/loadRemote.ts | 97 - .../src/remoteDefinition.ts | 12 - pnpm-lock.yaml | 4614 +++++++++-------- .../basic/another-remote-module/package.json | 17 +- .../another-remote-module/src/register.tsx | 6 + .../basic/another-remote-module/tsconfig.json | 2 +- .../another-remote-module/webpack.build.js | 2 +- .../another-remote-module/webpack.common.js | 4 + .../another-remote-module/webpack.dev.js | 9 +- samples/basic/host/package.json | 17 +- samples/basic/host/remotes.js | 17 + samples/basic/host/src/bootstrap.tsx | 20 +- samples/basic/host/tsconfig.json | 2 +- samples/basic/host/webpack.build.js | 16 +- samples/basic/host/webpack.common.js | 14 + samples/basic/host/webpack.dev.js | 16 +- samples/basic/local-module/package.json | 16 +- samples/basic/local-module/tsconfig.json | 2 +- samples/basic/local-module/webpack.config.js | 7 +- samples/basic/remote-module/package.json | 17 +- samples/basic/remote-module/src/register.tsx | 6 + samples/basic/remote-module/tsconfig.json | 2 +- samples/basic/remote-module/webpack.build.js | 2 +- samples/basic/remote-module/webpack.common.js | 4 + samples/basic/remote-module/webpack.dev.js | 9 +- samples/basic/shared/package.json | 4 +- samples/basic/shared/tsconfig.json | 2 +- samples/basic/shell/package.json | 4 +- samples/basic/shell/tsconfig.json | 2 +- samples/endpoints/host/package.json | 24 +- samples/endpoints/host/remotes.js | 13 + samples/endpoints/host/src/App.tsx | 2 +- samples/endpoints/host/src/bootstrap.tsx | 14 +- samples/endpoints/host/src/i18next.ts | 4 +- samples/endpoints/host/src/register.tsx | 2 +- samples/endpoints/host/tsconfig.json | 2 +- samples/endpoints/host/webpack.build.js | 10 +- samples/endpoints/host/webpack.common.js | 10 +- samples/endpoints/host/webpack.dev.js | 10 +- .../i18next/src/createI18nextInstance.ts | 2 +- samples/endpoints/i18next/tsconfig.json | 2 +- samples/endpoints/layouts/package.json | 9 +- samples/endpoints/layouts/src/i18next.ts | 4 +- .../endpoints/layouts/src/registerLayouts.tsx | 4 +- samples/endpoints/layouts/tsconfig.json | 2 +- samples/endpoints/local-module/package.json | 30 +- .../endpoints/local-module/src/dev/App.tsx | 2 +- .../endpoints/local-module/src/dev/index.tsx | 3 +- samples/endpoints/local-module/src/i18next.ts | 4 +- .../endpoints/local-module/src/register.tsx | 4 +- samples/endpoints/local-module/tsconfig.json | 2 +- .../endpoints/local-module/webpack.build.js | 4 +- samples/endpoints/local-module/webpack.dev.js | 4 +- samples/endpoints/remote-module/package.json | 30 +- .../endpoints/remote-module/src/dev/App.tsx | 2 +- .../endpoints/remote-module/src/dev/index.tsx | 3 +- .../endpoints/remote-module/src/i18next.ts | 4 +- .../endpoints/remote-module/src/register.tsx | 4 +- samples/endpoints/remote-module/tsconfig.json | 2 +- .../endpoints/remote-module/webpack.build.js | 4 +- .../endpoints/remote-module/webpack.dev.js | 4 +- samples/endpoints/shared/package.json | 4 +- samples/endpoints/shared/tsconfig.json | 2 +- samples/endpoints/shell/package.json | 9 +- samples/endpoints/shell/src/i18next.ts | 4 +- samples/endpoints/shell/src/register.tsx | 7 +- samples/endpoints/shell/tsconfig.json | 2 +- 160 files changed, 5665 insertions(+), 4865 deletions(-) create mode 100644 .changeset/funny-chairs-joke.md delete mode 100644 packages/firefly-configs/CHANGELOG.md delete mode 100644 packages/firefly-configs/tests/__snapshots__/defineConfig.test.ts.snap delete mode 100644 packages/firefly-configs/tests/defineConfig.test.ts rename packages/{firefly-configs => firefly-webpack-configs}/.eslintrc.json (100%) rename packages/{webpack-module-federation => firefly-webpack-configs}/README.md (91%) rename packages/{firefly-configs => firefly-webpack-configs}/jest.config.ts (100%) rename packages/{firefly-configs => firefly-webpack-configs}/package.json (93%) rename packages/{firefly-configs => firefly-webpack-configs}/src/index.ts (89%) rename packages/{firefly-configs => firefly-webpack-configs}/swc.jest.ts (100%) create mode 100644 packages/firefly-webpack-configs/tests/__snapshots__/defineConfig.test.ts.snap create mode 100644 packages/firefly-webpack-configs/tests/defineConfig.test.ts rename packages/{firefly-configs => firefly-webpack-configs}/tsconfig.json (100%) rename packages/{firefly-configs => firefly-webpack-configs}/tsup.build.ts (100%) rename packages/{firefly-configs => firefly-webpack-configs}/tsup.dev.ts (100%) rename packages/{webpack-module-federation => module-federation}/.eslintrc.json (100%) rename packages/{firefly-configs => module-federation}/README.md (93%) rename packages/{webpack-module-federation => module-federation}/jest.config.ts (100%) rename packages/{webpack-module-federation => module-federation}/package.json (77%) rename packages/{webpack-module-federation => module-federation}/src/completeModuleRegistrations.ts (100%) rename packages/{webpack-module-federation => module-federation}/src/index.ts (89%) rename packages/{webpack-module-federation => module-federation}/src/registerRemoteModules.ts (76%) create mode 100644 packages/module-federation/src/remoteDefinition.ts rename packages/{webpack-module-federation => module-federation}/src/useAreModulesReady.ts (99%) rename packages/{webpack-module-federation => module-federation}/src/useAreModulesRegistered.ts (99%) rename packages/{webpack-module-federation => module-federation}/swc.jest.ts (100%) rename packages/{webpack-module-federation => module-federation}/tests/areModulesReady.test.tsx (85%) rename packages/{webpack-module-federation => module-federation}/tests/areModulesRegistered.test.tsx (84%) rename packages/{webpack-module-federation => module-federation}/tests/completeRemoteModuleRegistrations.test.ts (83%) rename packages/{webpack-module-federation => module-federation}/tests/registerRemoteModules.test.ts (78%) rename packages/{webpack-module-federation => module-federation}/tsconfig.json (100%) rename packages/{webpack-module-federation => module-federation}/tsup.build.ts (100%) rename packages/{webpack-module-federation => module-federation}/tsup.dev.ts (100%) create mode 100644 packages/webpack-configs/src/nonCacheableRemoteEntryPlugin.ts create mode 100644 packages/webpack-configs/src/sharedDependenciesResolutionPlugin.ts create mode 100644 packages/webpack-configs/tests/sharedDependenciesResolutionPlugin.test.ts delete mode 100644 packages/webpack-module-federation/CHANGELOG.md delete mode 100644 packages/webpack-module-federation/src/loadRemote.ts delete mode 100644 packages/webpack-module-federation/src/remoteDefinition.ts create mode 100644 samples/basic/host/remotes.js create mode 100644 samples/basic/host/webpack.common.js create mode 100644 samples/endpoints/host/remotes.js diff --git a/.changeset/funny-chairs-joke.md b/.changeset/funny-chairs-joke.md new file mode 100644 index 000000000..d94fa4290 --- /dev/null +++ b/.changeset/funny-chairs-joke.md @@ -0,0 +1,111 @@ +--- +"@squide/firefly-webpack-configs": major +"@squide/module-federation": major +"@squide/webpack-configs": major +"@squide/react-router": major +"@squide/firefly": major +"@squide/core": major +--- + +This release Migrates Squide from Webpack Module Federation to [Module Federation 2.0](https://module-federation.io/guide/start/quick-start.html). + +This release deprecates the following packages: + +- `@squide/webpack-module-federation`, use `@squide/module-federation` instead. +- `@squide/firefly-configs`, use `@squide/firefly-webpack-configs` instead. + +And introduce a few changes to existing API: + +- The `FireflyRuntime` nows accept a `useMsw` option and expose a new `isMswEnabled` getter: + +```ts +// bootstrap.tsx + +import { FireflyRuntime } from "@squide/firefly"; + +const runtime = new FireflyRuntime({ + useMsw: true +}); + +// Use the runtime to determine if MSW handlers should be registered. +if (runtime.isMswEnabled) { + // ... +} +``` + +- The `registerRemoteModules` function doesn't accept the remotes URL anymore. The remotes URL should be configured in the webpack configuration files. + +Previously: + +```ts +// bootstrap.tsx + +import { registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; + +const Remotes: RemoteDefinition = [ + { + name: "remote1", + url: "http://localhost:8081" + } +]; + +await registerRemoteModules(Remotes, runtime); +``` + +```js +// webpack.dev.js + +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; +import { swcConfig } from "./swc.dev.js"; + +export default defineDevHostConfig(swcConfig, "host", 8080, { + overlay: false +}); +``` + +Now: + +```ts +// bootstrap.tsx + +import { registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; + +const Remotes: RemoteDefinition = [ + { + name: "remote1" + } +]; + +await registerRemoteModules(Remotes, runtime); +``` + +```js +// webpack.dev.js + +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; +import { swcConfig } from "./swc.dev.js"; + +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +export const Remotes = [ + { + name: "remote1", + url: "http://localhost:8081" + } +]; + +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes, { + overlay: false +}); +``` + +To migrate: + +1. Replace the `@squide/webpack-module-federation` dependency by `@squide/module-federation`. + +2. Replace the `@squide/firefly-configs` dependency by `@squide/firefly-webpack-configs`. + +3. Move the remotes URL from the `bootstrap.tsx` file to the `webpack.*.js` files. + +4. Integrate the new `useMsw` and `isMswEnabled` props. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 297057e1b..42d7d109d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v4 with: + node-version: ">=20.0.0" check-latest: true - uses: pnpm/action-setup@v3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9a41fb205..9df6dd4f9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -331,7 +331,7 @@ If you are having issue with the Retype license, make sure the `RETYPE_API_KEY` There are a few steps to add new packages to the monorepo. -Before you add a new package, please read the [GSoft GitHub guidelines](https://github.com/gsoft-inc/github-guidelines#npm-package-name). +Before you add a new package, please read the [Workleap GitHub guidelines](https://github.com/gsoft-inc/github-guidelines#npm-package-name). ### Create the package @@ -345,7 +345,7 @@ pnpm init Answer the CLI questions. -Once the `package.json` file is generated, please read again the [GSoft GitHub guidelines](https://github.com/gsoft-inc/github-guidelines#npm-package-name) and make sure the package name, author and license are valid. +Once the `package.json` file is generated, please read again the [Workleap GitHub guidelines](https://github.com/gsoft-inc/github-guidelines#npm-package-name) and make sure the package name, author and license are valid. Don't forget to add the [npm scope](https://docs.npmjs.com/about-scopes) `"@squide"` before the package name. For example, if the project name is "foo", your package name should be `@squide/foo`. diff --git a/README.md b/README.md index 393015483..0d6d42e82 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # wl-squide -A federated web application shell built on top of [Module Federation](https://webpack.js.org/concepts/module-federation/) and [React Router](https://reactrouter.com/en/main). +A federated web application shell built on top of [Module Federation](https://module-federation.io/) and [React Router](https://reactrouter.com/en/main). [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](./LICENSE) [![CI](https://github.com/gsoft-inc/wl-squide/actions/workflows/ci.yml/badge.svg)](https://github.com/gsoft-inc/wl-squide/actions/workflows/ci.yml) @@ -9,12 +9,12 @@ A federated web application shell built on top of [Module Federation](https://we | --- | --- | | [@squide/core](packages/core/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/core)](https://www.npmjs.com/package/@squide/core) | | [@squide/react-router](packages/react-router/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/react-router)](https://www.npmjs.com/package/@squide/react-router) | -| [@squide/webpack-module-federation](packages/webpack-module-federation/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/webpack-module-federation)](https://www.npmjs.com/package/@squide/webpack-module-federation) | +| [@squide/module-federation](packages/module-federation/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/module-federation)](https://www.npmjs.com/package/@squide/module-federation) | | [@squide/webpack-configs](packages/webpack-configs/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/webpack-configs)](https://www.npmjs.com/package/@squide/webpack-configs) | | [@squide/msw](packages/msw/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/msw)](https://www.npmjs.com/package/@squide/msw) | | [@squide/i18next](packages/i18next/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/i18next)](https://www.npmjs.com/package/@squide/i18next) | | [@squide/firefly](packages/firefly/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/firefly)](https://www.npmjs.com/package/@squide/firefly) | -| [@squide/firefly-configs](packages/firefly-configs/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/firefly-configs)](https://www.npmjs.com/package/@squide/firefly-configs) | +| [@squide/firefly-webpack-configs](packages/firefly-webpack0configs/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/firefly-webpack-configs)](https://www.npmjs.com/package/@squide/firefly-webpack-configs) | | [@squide/fakes](packages/fakes/README.md) | [![npm version](https://img.shields.io/npm/v/@squide/fakes)](https://www.npmjs.com/package/@squide/fakes) | ## Have a question or found an issue? diff --git a/docs/getting-started/create-host.md b/docs/getting-started/create-host.md index 3c8cf3679..0679b2e35 100644 --- a/docs/getting-started/create-host.md +++ b/docs/getting-started/create-host.md @@ -13,17 +13,17 @@ Create a new application (we'll refer to ours as `host`), then open a terminal a +++ pnpm ```bash -pnpm add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss typescript +pnpm add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-webpack-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss typescript @types/react @types/react-dom pnpm add @squide/firefly react react-dom react-router-dom react-error-boundary ``` +++ yarn ```bash -yarn add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss typescript +yarn add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-webpack-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss typescript @types/react @types/react-dom yarn add @squide/firefly react react-dom react-router-dom react-error-boundary ``` +++ npm ```bash -npm install -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss typescript +npm install -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-webpack-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss typescript @types/react @types/react-dom npm install @squide/firefly react react-dom react-router-dom react-error-boundary ``` +++ @@ -44,6 +44,7 @@ host ├──── App.tsx ├──── RootLayout.tsx ├──── HomePage.tsx +├──── NotFoundPage.tsx ├──── bootstrap.tsx ├──── index.ts ├──── register.tsx @@ -81,15 +82,14 @@ export {}; Next, to register the modules, instanciate a shell [FireflyRuntime](/reference/runtime/runtime-class.md) instance and register the remote module with the [registerRemoteModules](/reference/registration/registerRemoteModules.md) function (the configuration of the remote module will be covered in the [next section](create-remote-module.md)): -```tsx !#12-14,17-19,22 host/src/bootstrap.tsx +```tsx !#11-13,16 host/src/bootstrap.tsx import { createRoot } from "react-dom/client"; import { ConsoleLogger, RuntimeContext, FireflyRuntime, registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; -import type { AppContext} from "@sample/shared"; import { App } from "./App.tsx"; // Define the remote modules. const Remotes: RemoteDefinition[] = [ - { url: "http://localhost:8081", name: "remote1" } + { name: "remote1" } ]; // Create the shell runtime. @@ -97,13 +97,8 @@ const runtime = new FireflyRuntime({ loggers: [new ConsoleLogger()] }); -// Create an optional context. -const context: AppContext = { - name: "Demo application" -}; - // Register the remote module. -await registerRemoteModules(Remotes, runtime, { context }); +await registerRemoteModules(Remotes, runtime; const root = createRoot(document.getElementById("root")!); @@ -256,16 +251,15 @@ The [ManagedRoutes](../reference/routing/ManagedRoutes.md) placeholder indicates Finally, update the bootstrapping code to [register](../reference/registration/registerLocalModules.md) the newly created local module: -```tsx !#23 host/src/bootstrap.tsx +```tsx !#17 host/src/bootstrap.tsx import { createRoot } from "react-dom/client"; import { ConsoleLogger, RuntimeContext, FireflyRuntime, registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; -import type { AppContext} from "@sample/shared"; import { App } from "./App.tsx"; import { registerHost } from "./register.tsx"; // Define the remote modules. const Remotes: RemoteDefinition[] = [ - { url: "http://localhost:8081", name: "remote1" } + { name: "remote1" } ]; // Create the shell runtime. @@ -273,16 +267,11 @@ const runtime = new FireflyRuntime({ loggers: [new ConsoleLogger()] }); -// Create an optional context. -const context: AppContext = { - name: "Demo application" -}; - // Register the newly created local module. -await registerLocalModules([registerHost], runtime, { context }); +await registerLocalModules([registerHost], runtime); // Register the remote module. -await registerRemoteModules(Remotes, runtime, { context }); +await registerRemoteModules(Remotes, runtime); const root = createRoot(document.getElementById("root")!); @@ -293,6 +282,53 @@ root.render( ); ``` +### Not found page (404) + +Now, let's ensure that users who enter a wrong URL end up somewhere by registering a custom [no-match route](https://reactrouter.com/en/main/start/faq#how-do-i-add-a-no-match-404-route-in-react-router-v6). First, create the `NotFoundPage` component, which will serve as the page for handling not found routes: + +```tsx host/src/NotFoundPage.tsx +export function NotFoundPage() { + return ( +
Not found! Please try another page.
+ ); +} +``` + +Then, register the newly created component as the `*` route: + +```tsx !#19-24 host/src/register.tsx +import { ManagedRoutes, type ModuleRegisterFunction, type FireflyRuntime } from "@squide/firefly"; +import { HomePage } from "./HomePage.tsx"; +import { NotFoundPage } from "./NotFoundPage.tsx"; +import { RootLayout } from "./RootLayout.tsx"; + +export const registerHost: ModuleRegisterFunction = runtime => { + runtime.registerRoute({ + // Pathless route to declare a root layout. + element: , + children: [ + // Placeholder to indicate where managed routes (routes that are not hoisted or nested) + // will be rendered. + ManagedRoutes + ] + }, { + hoist: true + }); + + runtime.registerRoute({ + path: "*", + element: + }, { + hoist: true + }); + + runtime.registerRoute({ + index: true, + element: + }); +}; +``` + ## Configure webpack !!!info @@ -334,13 +370,20 @@ export const swcConfig = defineDevConfig(targets); Then, open the `webpack.dev.js` file and use the [defineDevHostConfig](/reference/webpack/defineDevHostConfig.md) function to configure webpack: -```js !#6-13 host/webpack.dev.js +```js !#13-20 host/webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes: RemoteDefinition[] = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes, { sharedDependencies: { "@sample/shared": { singleton: true, @@ -368,13 +411,20 @@ export const swcConfig = defineBuildConfig(targets); Then, open the `webpack.build.js` file and use the [defineBuildHostConfig](/reference/webpack/defineBuildHostConfig.md) function to configure webpack: -```js !#6-13 host/webpack.build.js +```js !#13-20 host/webpack.build.js // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; -export default defineBuildHostConfig(swcConfig, "host", { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineBuildHostConfig(swcConfig, "host", Remotes, { sharedDependencies: { "@sample/shared": { singleton: true, diff --git a/docs/getting-started/create-local-module.md b/docs/getting-started/create-local-module.md index e05cbb5b5..0326d1488 100644 --- a/docs/getting-started/create-local-module.md +++ b/docs/getting-started/create-local-module.md @@ -10,11 +10,11 @@ Local modules have many uses but are especially useful when **migrating** from a Let's add a local module to demonstrate how it's done! -> Loading remote modules at runtime with [Module Federation](https://webpack.js.org/concepts/module-federation/) is the primary focus of this shell and our recommended approach. It empowers teams to be **fully autonomous** by **deploying** their modules **independently** from the other parts of the application. +> Loading remote modules at runtime with [Module Federation](https://module-federation.io/) is the primary focus of this shell and our recommended approach. It empowers teams to be **fully autonomous** by **deploying** their modules **independently** from the other parts of the application. > -> However, we recognize that teams working on mature products may prefer to **gradually migrate** to a distributed architecture by first extracting subdomains into independent modules within their current monolithic setup before fully committing to remote modules loaded at runtime. +> However, we recognize that some teams might prefer to first extract their subdomains into independent modules within a monolithic setup before fully committing to remote modules loaded at runtime. > -> To facilitate this transition, this shell also supports local modules that are loaded at **build time**. +> To facilitate this style of architecture, Squide also supports local modules that are loaded at **build time**. > > Both remote and local modules can be used within same application as this shell supports dual bootstrapping. For example, an application can be configured to load a few remote modules at runtime while also loading a few local modules. @@ -24,17 +24,17 @@ Create a new application (we'll refer to ours as `local-module`), then open a te +++ pnpm ```bash -pnpm add -D @workleap/tsup-configs tsup typescript +pnpm add -D @workleap/tsup-configs tsup typescript @types/react @types/react-dom pnpm add @squide/firefly react react-dom react-router-dom react-error-boundary ``` +++ yarn ```bash -yarn add -D @workleap/tsup-configs tsup typescript +yarn add -D @workleap/tsup-configs tsup typescript @types/react @types/react-dom yarn add @squide/firefly react @squide/firefly react-dom react-router-dom react-error-boundary ``` +++ npm ```bash -npm add -D @workleap/tsup-configs tsup typescript +npm add -D @workleap/tsup-configs tsup typescript @types/react @types/react-dom npm install @squide/firefly react react-dom react-router-dom react-error-boundary ``` +++ @@ -73,8 +73,8 @@ Finally, configure the package to be shareable by adding the `name`, `version`, "version": "0.0.1", "exports": { ".": { - "import": "./dist/register.js", "types": "./dist/register.d.ts", + "import": "./dist/register.js", "default": "./dist/register.js" } } @@ -85,12 +85,11 @@ Finally, configure the package to be shareable by adding the `name`, `version`, Next, register the local module routes and navigation items with [registerRoute](/reference/runtime/runtime-class.md#register-routes) and [registerNavigationItem](/reference/runtime/runtime-class.md#register-navigation-items) functions: -```tsx !#6-9,11-14 local-module/src/register.tsx +```tsx !#5-8,10-13 local-module/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; -import type { AppContext } from "@sample/shared"; import { Page } from "./Page.tsx"; -export const register: ModuleRegisterFunction = (runtime, context) => { +export const register: ModuleRegisterFunction = runtime => { runtime.registerRoute({ path: "/local/page", element: @@ -125,18 +124,17 @@ Go back to the `host` application and add a dependency to the `@sample/local-mod } ``` -Then, register the local module with the [registerLocalModule](/reference/registration/registerLocalModules.md) function: +Then, register the local module with the [registerLocalModules](/reference/registration/registerLocalModules.md) function: -```tsx !#4,26 host/src/bootstrap.tsx +```tsx !#3,20 host/src/bootstrap.tsx import { createRoot } from "react-dom/client"; -import { ConsoleLogger, RuntimeContext, FireflyRuntime, registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; -import type { AppContext } from "@sample/shared"; +import { ConsoleLogger, RuntimeContext, FireflyRuntime, registerRemoteModules, registerLocalModules, type RemoteDefinition } from "@squide/firefly"; import { register as registerMyLocalModule } from "@sample/local-module"; import { App } from "./App.tsx"; // Define the remote modules. const Remotes: RemoteDefinition[] = [ - { url: "http://localhost:8081", name: "remote1" } + { name: "remote1" } ]; // Create the shell runtime. @@ -144,16 +142,11 @@ const runtime = new FireflyRuntime({ loggers: [new ConsoleLogger()] }); -// Create an optional context. -const context: AppContext = { - name: "Demo application" -}; - // Register the remote module. -await registerRemoteModules(Remotes, runtime, context); +await registerRemoteModules(Remotes, runtime); // Register the local module. -registerLocalModule([registerMyLocalModule], runtime, context); +registerLocalModules([registerMyLocalModule], runtime); const root = createRoot(document.getElementById("root")); diff --git a/docs/getting-started/create-remote-module.md b/docs/getting-started/create-remote-module.md index 20060db5b..9ca06b58f 100644 --- a/docs/getting-started/create-remote-module.md +++ b/docs/getting-started/create-remote-module.md @@ -14,17 +14,17 @@ Create a new application (we'll refer to ours as `remote-module`), then open a t +++ pnpm ```bash -pnpm add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss +pnpm add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-webpack-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss @types/react @types/react-dom pnpm add @squide/firefly react react-dom react-router-dom react-error-boundary ``` +++ yarn ```bash -yarn add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss +yarn add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-webpack-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss @types/react @types/react-dom yarn add @squide/firefly react react-dom react-router-dom react-error-boundary ``` +++ npm ```bash -npm install -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss +npm install -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-webpack-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss @types/react @types/react-dom npm install @squide/firefly react react-dom react-router-dom react-error-boundary ``` +++ @@ -62,12 +62,11 @@ Then, ensure that you are developing your module using [ESM syntax](https://deve Next, register the remote module routes and navigation items with the [registerRoute](/reference/runtime/runtime-class.md#register-routes) and [registerNavigationItem](/reference/runtime/runtime-class.md#register-navigation-items) functions: -```tsx !#6-9,11-14 remote-module/src/register.tsx +```tsx !#5-8,10-13 remote-module/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; -import type { AppContext } from "@sample/shared"; import { Page } from "./Page.tsx"; -export const register: ModuleRegisterFunction = (runtime, context) => { +export const register: ModuleRegisterFunction = runtime => { runtime.registerRoute({ path: "/remote/page", element: @@ -115,7 +114,7 @@ Then, open the `webpack.dev.js` file and use the [defineDevRemoteModuleConfig](/ ```js !#6-12 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8081, { @@ -148,7 +147,7 @@ Then, open the `webpack.build.js` file and use the [defineBuildRemoteModuleConfi ```js !#6-12 remote-module/webpack.build.js // @ts-check -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; export default defineBuildRemoteModuleConfig(swcConfig, "remote1", { diff --git a/docs/getting-started/default.md b/docs/getting-started/default.md index 96f4d2a76..96a56a3a8 100644 --- a/docs/getting-started/default.md +++ b/docs/getting-started/default.md @@ -30,7 +30,7 @@ npm create @workleap/project@latest We have built this shell to facilitate the adoption of federated applications at Workleap by **enforcing patterns** that we believe will help feature teams successfully implement a distributed architecture. -The shell itself is a lightweight [API layer](/reference) built on top of [Module Federation](https://webpack.js.org/concepts/module-federation/) and [React Router](https://reactrouter.com), with the goal of maximizing the strength of both libraries while interfering as little as possible with their functionality. +The shell itself is a lightweight [API layer](/reference) built on top of [Module Federation](https://module-federation.io/) and [React Router](https://reactrouter.com), with the goal of maximizing the strength of both libraries while interfering as little as possible with their functionality. ### Module Federation @@ -78,11 +78,9 @@ While developing the [API](/reference) of Squide, we kept a few guiding principl Module Federation comes with a few manageable limitations that are important to consider when architecting your distributed application: -- A [shared dependency](https://webpack.js.org/plugins/module-federation-plugin/#sharing-hints) cannot be tree-shaken. Since remote modules are loaded at runtime, [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin) cannot infer which parts of a shared dependency will be used by the application modules. Therefore, tree-shaking is disabled for shared dependencies. +- A [shared dependency](https://module-federation.io/configure/shared.html) cannot be tree-shaken. Since remote modules are loaded at runtime, module federation cannot infer which parts of a shared dependency will be used by the application modules. Therefore, tree-shaking is disabled for shared dependencies. -- Module Federation does not support [React Fast Refresh](https://github.com/pmmmwh/react-refresh-webpack-plugin). However, it does support [Hot Module Replacement](https://webpack.js.org/concepts/hot-module-replacement/). - -> These limitations are not specific to Squide, they are specific to Module Federation. +- Updating a [shared dependency](https://module-federation.io/configure/shared.html) to a new major version is not always straightforward and may result in complex deployment processes. ## Create your project diff --git a/docs/getting-started/deploy.md b/docs/getting-started/deploy.md index 8ebd6b851..b02801213 100644 --- a/docs/getting-started/deploy.md +++ b/docs/getting-started/deploy.md @@ -36,7 +36,7 @@ Or by adding a `_redirects` file into the Netlify publish directory: Configure the remote modules production URL: ```ts -import { RemoteDefinition } from "@squide/firefly"; +import { RemoteDefinition } from "@squide/firefly-webpack-configs"; const Remotes: RemoteDefinition[] = [ { diff --git a/docs/guides/add-a-shared-dependency.md b/docs/guides/add-a-shared-dependency.md index 0d7e30140..4d52d6104 100644 --- a/docs/guides/add-a-shared-dependency.md +++ b/docs/guides/add-a-shared-dependency.md @@ -4,7 +4,7 @@ order: 760 # Add a shared dependency -[Shared dependencies](https://webpack.js.org/plugins/module-federation-plugin/#sharing-libraries) represent one of the most powerful concepts within [Module Federation](https://webpack.js.org/plugins/module-federation-plugin). However, mastering its configuration can be quite challenging. **Failure** to configure shared dependencies properly in a federated application using Module Federation can significantly **impact** both **user** and **developer experiences**. +[Shared dependencies](https://module-federation.io/configure/shared.html) represent one of the most powerful concepts of Module Federation. However, mastering its configuration can be quite challenging. **Failure** to configure shared dependencies properly in a federated application using Module Federation can significantly **impact** both **user** and **developer experiences**. Squide aims to simplify the configuration of shared dependencies by abstracting the [shared dependencies](#default-shared-dependencies) necessary for building an application with React, React Router, and optionally MSW and i18next. Nevertheless, every federated application will inevitably have to configure additional custom shared dependencies. @@ -12,7 +12,7 @@ For a more comprehensive documentation of the Module Federation APIs, their func ## Understanding singleton dependencies -A [singleton](https://webpack.js.org/plugins/module-federation-plugin/#singleton) shared dependency does exactly what its name suggests: it loads only a single instance of a dependency. This means that a dependency will be included in just one bundle file of the federated application. +A [singleton](https://module-federation.io/configure/shared.html#singleton) shared dependency does exactly what its name suggests: it loads only a single instance of a dependency. This means that a dependency will be included in just one bundle file of the federated application. ### Strict versioning @@ -21,10 +21,10 @@ Sometimes, a `singleton` shared dependency is paired with the [strictVersion](ht ```js !#10 webpack.config.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +export default defineDevHostConfig(swcConfig, "host", 8080, [], { sharedDependencies: { "@sample/shared": { singleton: true, @@ -38,19 +38,57 @@ When specified, the `strictVersion` option will generate a **runtime error** if ### Expected behaviors +!!!warning +Please note that Squide's singleton dependency version resolution algorithm **differs** from the native Module Federation behavior. By default, Squide registers a [runtime plugin](https://module-federation.io/plugin/dev/index.html) that customize the resolution of shared dependencies. +!!! + #### Minor or patch version When the version difference between a host application and a remote module is a **minor** or **patch** version, the higher version of the dependency will be loaded. For example: -- If the host application is on `10.1.0` and a remote module is on `10.3.1` -> `10.3.1` will be loaded -- If the host application is on `10.3.1` and a remote module is on `10.1.0` -> `10.3.1` will be loaded +- If the host application is on `10.1.0` and a remote module is on `10.1.1` -> `10.1.1` will be loaded +- If the host application is on `10.1.0` and a remote module is on `10.2.0` -> `10.2.0` will be loaded #### Major version -If the version difference between a host application and a remote module is a **major** version, once again, the higher version of the dependency will be loaded. However, a **warning** will also be issued. For example: +If the version difference between a host application and a remote module is a **major** version, once again, the higher version of the dependency will be loaded only if it's requested by the host application. For example: + +- If the host application is on `11.0.0` and a remote module is on `10.0.0` -> `11.0.0` will be loaded +- If the host application is on `10.0.0` and a remote module is on `11.0.0` -> `10.0.0` will be loaded + +#### Additional examples + +Let's go through a few additional examples :point_down: + +##### Example 1 + +``` +host: 2.0 +remote-1: 2.1 <----- +remote-2: 2.0 +``` + +The version requested by `remote-1` is selected because it only represents a **minor** difference from the version requested by the `host` application. + +##### Example 2 + +``` +host: 2.0 <----- +remote-1: 3.1 +remote-2: 2.0 +``` + +The version requested by the `host` application is selected because `remote-1` is requesting a version with a **major** difference from the one requested by the `host` application. + +##### Example 3 + +``` +host: 2.0 +remote-1: 3.1 +remote-2: 2.1 <----- +``` -- If the host application is on `11.0.0` and a remote module is on `10.3.1` -> `11.0.0` will be loaded -- If the host application is on `10.3.1` and a remote module is on `11.0.0` -> `11.0.0` will be loaded +The version requested by `remote-2` is selected because `remote-1` is requesting a version with a **major** difference from the one requested by the `host` application. Therefore, `remote-2` requests the next highest version, which represents only a **minor** difference from the version requested by the `host` application. ### What should be configured as a shared dependency? @@ -62,15 +100,15 @@ Libraries matching the following criterias are strong candidates to be configure ## Understanding eager dependencies -An [eager](https://webpack.js.org/plugins/module-federation-plugin/#eager) shared dependency becomes available as soon as the host application starts. In simple terms, it is included in the host application bundle rather than being loaded lazily when it is first requested. +An [eager](https://module-federation.io/configure/shared.html#eager) shared dependency becomes available as soon as the host application starts. In simple terms, it is included in the host application bundle rather than being loaded lazily when it is first requested. ```js !#10 webpack.config.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +export default defineDevHostConfig(swcConfig, "host", 8080, [], { sharedDependencies: { "@sample/shared": { singleton: true, @@ -95,9 +133,9 @@ Since Squide has dependencies on React and React Router, the [define*](../refere - [react-router-dom](https://www.npmjs.com/package/react-router-dom) - [@squide/core](https://www.npmjs.com/package/@squide/core) - [@squide/react-router](https://www.npmjs.com/package/@squide/react-router) -- [@squide/webpack-module-federation](https://www.npmjs.com/package/@squide/webpack-module-federation) +- [@squide/module-federation](https://www.npmjs.com/package/@squide/module-federation) -For the full shared dependencies configuration, have a look at the [defineConfig.ts](https://github.com/gsoft-inc/wl-squide/blob/main/packages/webpack-module-federation/src/defineConfig.ts) file on Github. +For the full shared dependencies configuration, have a look at the [defineConfig.ts](https://github.com/gsoft-inc/wl-squide/blob/main/packages/webpack-configs/src/defineConfig.ts) file on Github. > You can [extend](../reference/webpack/defineDevHostConfig.md#extend-a-default-shared-dependency) or [override](../reference/webpack/defineDevHostConfig.md#override-a-default-shared-dependency) the default shared dependencies configuration. @@ -108,10 +146,10 @@ To configure shared dependencies, use the `sharedDependencies` option of any [de ```js !#7-11 host/webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +export default defineDevHostConfig(swcConfig, "host", 8080, [], { sharedDependencies: { "@sample/shared": { singleton: true @@ -125,7 +163,7 @@ When a dependency is shared between a host application and a remote module, the ```js !#7-11 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8081, { diff --git a/docs/guides/add-authentication.md b/docs/guides/add-authentication.md index 117d6d80d..ab738c251 100644 --- a/docs/guides/add-authentication.md +++ b/docs/guides/add-authentication.md @@ -5,7 +5,7 @@ order: 920 # Add authentication !!!warning -Before going forward with this guide, make sure that you completed the [setup Mock Service Worker](./setup-msw.md) and [fetch initial data](./fetch-initial-data.md) guides. +Before going forward with this guide, make sure that you completed the [Setup Mock Service Worker](./setup-msw.md) and [Fetch initial data](./fetch-initial-data.md) guides. !!! Most of our applications (if not all) will eventually requires the user to authenticate. To facilitate this process, the Squide [FireflyRuntime](/reference/runtime/runtime-class.md) class accepts a [sessionAccessor](/reference/fakes/localStorageSessionManager.md#integrate-with-a-runtime-instance) function. Once the application registration flow is completed, the function will be made accessible to every module of the application. @@ -98,8 +98,8 @@ Next, register the request handler using the host application registration funct ```tsx host/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; -export const registerHost: ModuleRegisterFunction = runtime => { - if (process.env.USE_MSW) { +export const registerHost: ModuleRegisterFunction = async runtime => { + if (runtime.isMswEnabled) { // Files that includes an import to the "msw" package are included dynamically to prevent adding // unused MSW stuff to the application bundles. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; @@ -179,7 +179,7 @@ export function Login() { } ``` -After the user logs in, the application is reloaded. This is a requirement of the [AppRouter](../reference/routing/appRouter.md) component's [onLoadPublicData](../reference/routing/appRouter.md#load-public-data) and [onLoadProtectedData](../reference/routing/appRouter.md#load-protected-data) handlers. Nevertheless, it's not a significant concern because [Workleap](https://workleap.com/) applications utilize a third-party service for authentication which requires a full refresh of the application. +After the user logs in, the application is reloaded. This is a requirement of the [AppRouter](../reference/routing/appRouter.md) component's [onLoadPublicData](../reference/routing/appRouter.md#load-public-data) and [onLoadProtectedData](../reference/routing/appRouter.md#load-protected-data) handlers. Nevertheless, it's not a significant concern because Workleap's applications utilize a third-party service for authentication which requires a full refresh of the application. ## Create a session accessor function @@ -558,7 +558,7 @@ export function RootLayout() { Finally, assemble everything: -```tsx !#16,21,24,45-51 host/src/register.tsx +```tsx !#17,22,25,46-52 host/src/register.tsx import { ManagedRoutes, type ModuleRegisterFunction, type FireflyRuntime } from "@squide/firefly"; import { RootLayout } from "./Rootlayout.tsx"; import { RootErrorBoundary } from "./RootErrorBoundary.tsx"; @@ -566,8 +566,9 @@ import { AuthenticationBoundary } from "./AuthenticationBoundary.tsx"; import { ModuleErrorBoundary } from "./ModuleErrorBoundary.tsx"; import { LoginPage } from "./LoginPage.tsx"; import { HomePage } from "./Homepage.tsx"; +import { NotFoundPage } from "./NotFoundPage.tsx"; -export const registerHost: ModuleRegisterFunction = runtime => { +export const registerHost: ModuleRegisterFunction = async runtime => { runtime.registerRoute({ element: , children: [ @@ -611,12 +612,20 @@ export const registerHost: ModuleRegisterFunction = runtime => { parentName: "root-error-boundary" }); + runtime.registerRoute({ + $visibility: "public", + path: "*", + element: + }, { + parentName: "root-error-boundary" + }); + runtime.registerRoute({ index: true, element: }); - if (process.env.USE_MSW) { + if (runtime.isMswEnabled) { // Files that includes an import to the "msw" package are included dynamically to prevent adding // unused MSW stuff to the application bundles. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; diff --git a/docs/guides/develop-a-module-in-isolation.md b/docs/guides/develop-a-module-in-isolation.md index 536362768..2c074cf38 100644 --- a/docs/guides/develop-a-module-in-isolation.md +++ b/docs/guides/develop-a-module-in-isolation.md @@ -117,30 +117,25 @@ export function App() { And the `registerShell` function to setup the `RootLayout`, the `RootErrorBoundary` and any other shell assets: -```tsx !#21 host/src/bootstrap.tsx +```tsx !#16 host/src/bootstrap.tsx import { createRoot } from "react-dom/client"; import { ConsoleLogger, RuntimeContext, FireflyRuntime, registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; -import type { AppContext} from "@sample/shared"; import { App } from "./App.tsx"; import { registerHost } from "./register.tsx"; import { registerShell } from "@sample/shell"; const Remotes: RemoteDefinition[] = [ - { url: "http://localhost:8081", name: "remote1" } + { name: "remote1" } ]; const runtime = new FireflyRuntime({ loggers: [new ConsoleLogger()] }); -const context: AppContext = { - name: "Demo application" -}; - // Register the newly created shell module. -await registerLocalModules([registerShell, registerHost], runtime, { context }); +await registerLocalModules([registerShell, registerHost], runtime); -await registerRemoteModules(Remotes, runtime, { context }); +await registerRemoteModules(Remotes, runtime); const root = createRoot(document.getElementById("root")!); @@ -268,6 +263,10 @@ Next, add a new `dev-isolated` script to the `package.json` file to start the lo } ``` +!!!info +If your project's `package.json` file does not already include the [cross-env](https://www.npmjs.com/package/cross-env) dependency, be sure to install `cross-env` as a development dependency. +!!! + The `dev-isolated` script is similar to the `dev` script but introduces a `ISOLATED` environment variable. This new environment variable will be utilized by the `webpack.dev.js` file to conditionally setup the development server for development in **isolation** or to be consumed by a host application through the `/remoteEntry.js` entry point: ### Configure webpack @@ -302,7 +301,7 @@ To configure webpack, open the `webpack.dev.js` file and update the configuratio ```js !#8,11 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig, defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig, defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; let config; @@ -310,7 +309,7 @@ let config; if (!process.env.ISOLATED) { config = defineDevRemoteModuleConfig(swcConfig, "remote1", 8081); } else { - config = defineDevHostConfig(swcConfig, "remote1", 8080); + config = defineDevHostConfig(swcConfig, "remote1", 8080, []); } export default config; @@ -330,21 +329,21 @@ If you are experiencing issues with this section of the guide: ## Setup a local module -Similarly to remote modules, the same isolated setup can be achieved for local modules. The main difference is that the `webpack.config.js` file of a local module serves the sole purpose of starting a development server for isolated development. Typically, local modules do not rely on webpack and [Module Federation](https://webpack.js.org/concepts/module-federation/). +Similarly to remote modules, the same isolated setup can be achieved for local modules. The main difference is that the `webpack.config.js` file of a local module serves the sole purpose of starting a development server for isolated development. Typically, local modules do not rely on webpack and [Module Federation](https://module-federation.io/). -First, open a terminal at the root of the local module application and install the `@squide/firefly-configs` package and its dependencies: +First, open a terminal at the root of the local module application and install the `@squide/firefly-webpack-configs` package and its dependencies: +++ pnpm ```bash -pnpm add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss +pnpm add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-webpack-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss ``` +++ yarn ```bash -yarn add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss +yarn add -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-webpack-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss ``` +++ npm ```bash -npm install -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss +npm install -D @workleap/webpack-configs @workleap/swc-configs @workleap/browserslist-config @squide/firefly-webpack-configs webpack webpack-dev-server webpack-cli @swc/core @swc/helpers browserslist postcss ``` +++ @@ -439,10 +438,10 @@ Finally, open the `webpack.config.js` file and use the the [defineDevHostConfig] ```js local-module/webpack.config.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.config.js"; -export default defineDevHostConfig(swcConfig, "local1", 8080); +export default defineDevHostConfig(swcConfig, "local1", 8080, []); ``` ### Add a new CLI script diff --git a/docs/guides/fetch-initial-data.md b/docs/guides/fetch-initial-data.md index 8a8d181cf..14cbb2bb9 100644 --- a/docs/guides/fetch-initial-data.md +++ b/docs/guides/fetch-initial-data.md @@ -5,7 +5,7 @@ order: 980 # Fetch initial data !!!warning -Before going forward with this guide, make sure that you completed the [setup Mock Service Worker](./setup-msw.md) guide. +Before going forward with this guide, make sure that you completed the [Setup Mock Service Worker](./setup-msw.md) guide. !!! Retrieving the initial data of an application is a crucial aspect that isn't always straightforward to implement. That's why we encourage feature teams to build their initial data fetching strategy on top of the Squide [AppRouter](../reference/routing/appRouter.md) component. @@ -56,7 +56,7 @@ Then, register the request handler using the module registration function: import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; export const register: ModuleRegisterFunction = async runtime => { - if (process.env.USE_MSW) { + if (runtime.isMswEnabled) { // Files that includes an import to the "msw" package are included dynamically to prevent adding // unused MSW stuff to the application bundles. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; @@ -196,13 +196,11 @@ export const register: ModuleRegisterFunction = async runtime => to: "/initial-data" }); - if (process.env.USE_MSW) { - // Files that includes an import to the "msw" package are included dynamically to prevent adding - // unused MSW stuff to the application bundles. - const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; + // Files that includes an import to the "msw" package are included dynamically to prevent adding + // unused MSW stuff to the application bundles. + const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; - runtime.registerRequestHandlers(requestHandlers); - } + runtime.registerRequestHandlers(requestHandlers); } ``` diff --git a/docs/guides/fetch-page-data.md b/docs/guides/fetch-page-data.md index d9213bec3..1b0495980 100644 --- a/docs/guides/fetch-page-data.md +++ b/docs/guides/fetch-page-data.md @@ -5,10 +5,10 @@ order: 975 # Fetch page data !!!warning -Before going forward with this guide, make sure that you completed the [setup Mock Service Worker](./setup-msw.md) guide. +Before going forward with this guide, make sure that you completed the [Setup Mock Service Worker](./setup-msw.md) guide. !!! -There are various approaches to fetching data for pages. At [Workleap](https://workleap.com/), our preference is usually to develop a dedicated endpoint per page, returning a denormalized document specifically tailored for that page. We rely on server state as our singular source of truth and leverage [React Query](https://tanstack.com/query/latest/) to manage data fetching and ensure our data remains up-to-date. +There are various approaches to fetching data for pages. At Workleap, our preference is usually to develop a dedicated endpoint per page, returning a denormalized document specifically tailored for that page. We rely on server state as our singular source of truth and leverage [React Query](https://tanstack.com/query/latest/) to manage data fetching and ensure our data remains up-to-date. Although this approach works well, a few adjustments are necessary when transitioning from a monolithic application to a federated application. @@ -203,7 +203,7 @@ Then, register the request handler using the module registration function: import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; export const register: ModuleRegisterFunction = async runtime => { - if (process.env.USE_MSW) { + if (runtime.isMswEnabled) { // Files that includes an import to the "msw" package are included dynamically to prevent adding // unused MSW stuff to the application bundles. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; @@ -255,17 +255,15 @@ export function Page() { The previous code sample uses [useSuspenseQuery](https://tanstack.com/query/latest/docs/react/reference/useSuspenseQuery) instead of [useQuery](https://tanstack.com/query/latest/docs/react/reference/useQuery) to fetch data. This enables an application to leverage a React [Suspense](https://react.dev/reference/react/Suspense) boundary to render a fallback element in a layout component while the data is being fetched: -```tsx !#7-9 host/src/RootLayout.tsx +```tsx !#6-8 host/src/RootLayout.tsx import { Suspense } from "react"; import { Outlet } from "react-router-dom"; export function RootLayout() { return ( - <> - Loading...}> - - - + Loading...}> + + ); } ``` diff --git a/docs/guides/isolate-module-failures.md b/docs/guides/isolate-module-failures.md index c1ac3d6be..bcbee4d32 100644 --- a/docs/guides/isolate-module-failures.md +++ b/docs/guides/isolate-module-failures.md @@ -6,7 +6,7 @@ order: 940 One of the key characteristics of micro-frontends implementations like [iframes](https://martinfowler.com/articles/micro-frontends.html#Run-timeIntegrationViaIframes) and subdomains is the ability to isolate failures within individual modules, preventing them from breaking the entire application. -However, in a [Module Federation](https://webpack.js.org/concepts/module-federation/) implementation, this is not the case as all the modules share the same browsing context (e.g. the same [Document object](https://developer.mozilla.org/en-US/docs/Web/API/Document), the same [Window object](https://developer.mozilla.org/en-US/docs/Web/API/Window), and the same DOM). A failure in one module can potentially breaks the entire application. +However, in a [Module Federation](https://module-federation.io/) implementation, this is not the case as all the modules share the same browsing context (e.g. the same [Document object](https://developer.mozilla.org/en-US/docs/Web/API/Document), the same [Window object](https://developer.mozilla.org/en-US/docs/Web/API/Window), and the same DOM). A failure in one module can potentially breaks the entire application. Nevertheless, an application can get very close to iframes failure isolation by utilizing React Router's [Outlet](https://reactrouter.com/en/main/components/outlet) component and the [errorElement](https://reactrouter.com/en/main/route/error-element) property of a React Router's routes. diff --git a/docs/guides/manage-shared-state.md b/docs/guides/manage-shared-state.md index a2c125c81..72f66e3f9 100644 --- a/docs/guides/manage-shared-state.md +++ b/docs/guides/manage-shared-state.md @@ -12,7 +12,7 @@ However, at certain points in the lifecycle of a federated application, the host - To forward a user session object, a built-in [sessionAccessor](../reference/runtime/runtime-class.md#parameters) function is available. -- To forward other types of initial data, such as a user tenant subscription, as shown in the [fetch initial data](./fetch-initial-data.md#fetch-the-data-1) guide, the data can be forwarded to modules through a React context. +- To forward other types of initial data, such as a user tenant subscription, as shown in the [Fetch initial data](./fetch-initial-data.md#fetch-the-data-1) guide, the data can be forwarded to modules through a React context. ## React Query diff --git a/docs/guides/override-a-react-context.md b/docs/guides/override-a-react-context.md index b6056a08b..0c7641e1d 100644 --- a/docs/guides/override-a-react-context.md +++ b/docs/guides/override-a-react-context.md @@ -4,7 +4,7 @@ order: 780 # Override a React context -In a federated application using [Module Federation](https://webpack.js.org/concepts/module-federation/), it's typical to configure various global [React context](https://legacy.reactjs.org/docs/context.html) at the root of the host application. These contexts are usually consumed down the line by the layouts and pages of the remote modules. +In a federated application using [Module Federation](https://module-federation.io/), it's typical to configure various global [React context](https://legacy.reactjs.org/docs/context.html) at the root of the host application. These contexts are usually consumed down the line by the layouts and pages of the remote modules. Let's explore a simple example using a `BackgroundColorContext`: @@ -131,15 +131,15 @@ export function App() { } ``` -In this scenario, Hopper's components are used throughout the entire federated application, including the remote modules. Moreover, `@hopper/components` is defined as a [singleton](https://webpack.js.org/plugins/module-federation-plugin/#singleton) shared dependency: +In this scenario, Hopper's components are used throughout the entire federated application, including the remote modules. Moreover, `@hopper/components` is defined as a [singleton](https://module-federation.io/configure/shared.html#singleton) shared dependency: ```js !#8-10 host/webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +export default defineDevHostConfig(swcConfig, "host", 8080, [], { sharedDependencies: { "@hopper/components": { singleton: true diff --git a/docs/guides/setup-i18next.md b/docs/guides/setup-i18next.md index fdaa6d6a2..4340443dd 100644 --- a/docs/guides/setup-i18next.md +++ b/docs/guides/setup-i18next.md @@ -4,7 +4,7 @@ order: 820 # Setup i18next -Most of the applications that forms the [Workleap](https://workleap.com/) platform are either already bilingual or will be in the future. To help feature teams with localized resources, Squide provides a native [plugin](../reference/i18next/i18nextPlugin.md) designed to adapt the [i18next](https://www.i18next.com/) library for federated applications. +Most of the applications that forms the Workleap platform are either already bilingual or will be in the future. To help feature teams with localized resources, Squide provides a native [plugin](../reference/i18next/i18nextPlugin.md) designed to adapt the [i18next](https://www.i18next.com/) library for federated applications. !!!warning The examples in this guide load all the resources from single localized resources files. For a real Workleap application, you probably want to spread the resources into multiple files and load the files with a i18next [backend plugin](https://www.i18next.com/overview/plugins-and-utils#backends). @@ -36,17 +36,16 @@ While you can use any package manager to develop an application with Squide, it Then, update the host application boostrapping code to register an instance of the [i18nextplugin](../reference/i18next/i18nextPlugin.md) with the [FireflyRuntime](../reference/runtime/runtime-class.md) instance: -```tsx !#17,20,23 host/src/bootstrap.tsx +```tsx !#16,19,22 host/src/bootstrap.tsx import { createRoot } from "react-dom/client"; import { ConsoleLogger, RuntimeContext, FireflyRuntime, registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; -import type { AppContext} from "@sample/shared"; import { App } from "./App.tsx"; import { registerHost } from "./register.tsx"; import { registerShell } from "@sample/shell"; import { i18nextPlugin } from "@sample/i18next"; const Remotes: RemoteDefinition[] = [ - { url: "http://localhost:8081", name: "remote1" } + { url: name: "remote1" } ]; // In this example: @@ -63,13 +62,9 @@ const runtime = new FireflyRuntime({ loggers: [new ConsoleLogger()] }); -const context: AppContext = { - name: "Demo application" -}; - -await registerLocalModules([registerShell, registerHost], runtime, { context }); +await registerLocalModules([registerShell, registerHost], runtime); -await registerRemoteModules(Remotes, runtime, { context }); +await registerRemoteModules(Remotes, runtime); const root = createRoot(document.getElementById("root")!); @@ -171,10 +166,10 @@ Finally, update the webpack development and build configurations to activate the ```js !#7-9 host/webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +export default defineDevHostConfig(swcConfig, "host", 8080, [], { features: { i18next: true }, @@ -190,10 +185,10 @@ export default defineDevHostConfig(swcConfig, "host", 8080, { ```js !#7-9 host/webpack.build.js // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; -export default defineBuildHostConfig(swcConfig, "host", { +export default defineBuildHostConfig(swcConfig, "host", [], { features: { i18next: true }, @@ -256,17 +251,16 @@ Notice that this time, a standard `navigationItems` namespace has been added to Then, update the [local module](../reference/registration/registerLocalModules.md) register function to create and register an instance of `i18next` with the `i18nextPlugin` plugin instance: -```tsx !#11,13-15,17-24,27 remote-module/src/register.tsx +```tsx !#10,12-14,16-23,26 remote-module/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; import { getI18nextPlugin } from "@squide/i18next"; -import type { AppContext } from "@sample/shared"; import { Page } from "./Page.tsx"; import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import resourcesEn from "./locales/en-US/resources.json"; import resourcesFr from "./locales/fr-CA/resources.json"; -export const register: ModuleRegisterFunction = (runtime, context) => { +export const register: ModuleRegisterFunction = runtime => { const i18nextPlugin = getI18nextPlugin(runtime); const i18nextInstance = i18n @@ -303,17 +297,16 @@ export const register: ModuleRegisterFunction = (run Then, localize the navigation items labels using the [I18nextNavigationItemLabel](../reference/i18next/I18nextNavigationItemLabel.md) component. Since for this example, the resources are in the `navigationItems` namespace, there's no need to specify a `namespace` property on the components as it will be inferred: -```tsx !#38 remote-module/src/register.tsx +```tsx !#37 remote-module/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; import { getI18nextPlugin, I18nextNavigationItemLabel } from "@squide/i18next"; -import type { AppContext } from "@sample/shared"; import { Page } from "./Page.tsx"; import i18n from "i18next"; import { initReactI18next } from "react-i18next"; import resourcesEn from "./locales/en-US/resources.json"; import resourcesFr from "./locales/fr-CA/resources.json"; -export const register: ModuleRegisterFunction = (runtime, context) => { +export const register: ModuleRegisterFunction = runtime => { const i18nextPlugin = getI18nextPlugin(runtime); const i18nextInstance = i18n @@ -373,7 +366,7 @@ Finally, update the webpack development and build configurations to activate the ```js !#7-9 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8081, { @@ -391,7 +384,7 @@ export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8081, { ```js !#7-9 remote-module/webpack.build.js // @ts-check -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; export default defineBuildRemoteModuleConfig(swcConfig, "remote1", { diff --git a/docs/guides/setup-msw.md b/docs/guides/setup-msw.md index 436934200..4d9ed20de 100644 --- a/docs/guides/setup-msw.md +++ b/docs/guides/setup-msw.md @@ -12,18 +12,37 @@ First, open a terminal at the root of the host application and install the [msw] +++ pnpm ```bash +pnpm add -D cross-env pnpm add msw ``` +++ yarn ```bash +yarn add -D cross-env yarn add msw ``` +++ npm ```bash +npm install -D cross-env npm install msw ``` +++ +Then [initialize](https://mswjs.io/docs/cli/init/) MSW by executing the following command: + ++++ pnpm +```bash +pnpm dlx msw init ./public +``` ++++ yarn +```bash +yarn dlx msw init ./public +``` ++++ npm +```bash +npx msw init ./public +``` ++++ + !!!warning While you can use any package manager to develop an application with Squide, it is highly recommended that you use [PNPM](https://pnpm.io/) as the guides has been developed and tested with PNPM. !!! @@ -42,12 +61,19 @@ Then, update the `dev` PNPM script to define with [cross-env](https://www.npmjs. Then, update the development [webpack](https://webpack.js.org/) configuration file to include the `USE_MSW` environment variable into the application bundles: -```js !#7 webpack.dev.js +```js !#14 webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/webpack-module-federation"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; + +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; -export default defineDevHostConfig(swcConfig, "host", 8080, { +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes, { environmentVariables: { "USE_MSW": process.env.USE_MSW === "true" } @@ -79,17 +105,18 @@ export function startMsw(moduleRequestHandlers: RequestHandler[]) { Then, update the bootstrapping code to [start the service](https://mswjs.io/docs/integrations/browser#setup) and [mark MSW as started](../reference/msw/setMswAsStarted.md) if MSW is enabled: -```tsx !#19-29 host/src/bootstrap.tsx +```tsx !#20-30 host/src/bootstrap.tsx import { createRoot } from "react-dom/client"; import { ConsoleLogger, RuntimeContext, FireflyRuntime, registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; import { App } from "./App.tsx"; import { registerHost } from "./register.tsx"; const Remotes: RemoteDefinition[] = [ - { url: "http://localhost:8081", name: "remote1" } + { name: "remote1" } ]; const runtime = new FireflyRuntime({ + useMsw: !!process.env.USE_MSW, loggers: [new ConsoleLogger()] }); @@ -98,7 +125,7 @@ await registerLocalModules([registerHost], runtime); await registerRemoteModules(Remotes, runtime); // Once both register functions are done, we can safely assume that all the request handlers has been registered. -if (process.env.USE_MSW) { +if (runtime.isMswEnabled) { // Files that includes an import to the "msw" package are included dynamically to prevent adding // unused MSW stuff to the application bundles. const startMsw = (await import("../mocks/browser.ts")).startMsw; @@ -132,7 +159,7 @@ export function App() { Loading...} errorElement={
An error occured!
} - waitForMsw={Boolean(process.env.USE_MSW)} + waitForMsw={!!process.env.USE_MSW} > {(routes, providerProps) => ( @@ -182,7 +209,7 @@ Finally, register the request handler with the [FireflyRuntime](../reference/run import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; export const register: ModuleRegisterFunction = async runtime => { - if (process.env.USE_MSW) { + if (runtime.isMswEnabled) { // Files that includes an import to the "msw" package are included dynamically to prevent adding // unused MSW stuff to the application bundles. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; diff --git a/docs/guides/use-feature-flags.md b/docs/guides/use-feature-flags.md index 3cce24618..eed134481 100644 --- a/docs/guides/use-feature-flags.md +++ b/docs/guides/use-feature-flags.md @@ -5,10 +5,10 @@ order: 840 # Use feature flags !!!warning -Before going forward with this guide, make sure that you completed the [setup Mock Service Worker](./setup-msw.md) and [fetch initial data](./fetch-initial-data.md) guides. +Before going forward with this guide, make sure that you completed the [Setup Mock Service Worker](./setup-msw.md) and [Fetch initial data](./fetch-initial-data.md) guides. !!! -To continuously deliver value to our customers, [Workleap](https://workleap.com/) has adopted a feature flags system that allows to activate or deactivate functionalities without requiring code deployment. While "in-page" feature flags are straightforward to implement for a Squide application, feature flags that conditionally register pages or navigation items requires a more advanced [deferred registration](../reference/registration/registerRemoteModules.md#defer-the-registration-of-routes-or-navigation-items) mechanism. +To continuously deliver value to our customers, Workleap has adopted a feature flags system that allows to activate or deactivate functionalities without requiring code deployment. While "in-page" feature flags are straightforward to implement for a Squide application, feature flags that conditionally register pages or navigation items requires a more advanced [deferred registration](../reference/registration/registerRemoteModules.md#defer-the-registration-of-routes-or-navigation-items) mechanism. ## Add an endpoint @@ -44,7 +44,7 @@ export const register: ModuleRegisterFunction = async runtime => to: "/page" }); - if (process.env.USE_MSW) { + if (runtime.isMswEnabled) { // Files that includes an import to the "msw" package are included dynamically to prevent adding // unused MSW stuff to the application bundles. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; @@ -176,7 +176,7 @@ import type { DeferredRegistrationData } from "@sample/shared"; import { Page } from "./Page.tsx"; export const register: ModuleRegisterFunction = async runtime => { - if (process.env.USE_MSW) { + if (runtime.isMswEnabled) { // Files that includes an import to the "msw" package are included dynamically to prevent adding // unused MSW stuff to the application bundles. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; diff --git a/docs/reference/packages.md b/docs/reference/packages.md index 3c08d6c60..d314e922a 100644 --- a/docs/reference/packages.md +++ b/docs/reference/packages.md @@ -18,10 +18,10 @@ order: 200 | --- | --- | --- | | :icon-mark-github: [@squide/core](https://github.com/gsoft-inc/wl-squide/tree/main/packages/core) | Core functionalities of Squide. | [![npm version](https://img.shields.io/npm/v/@squide/core)](https://www.npmjs.com/package/@squide/core) | | :icon-mark-github: [@squide/react-router](https://github.com/gsoft-inc/wl-squide/tree/main/packages/react-router) | Specific implementation of the core functionalities to support [React Router](https://reactrouter.com/en/main). | [![npm version](https://img.shields.io/npm/v/@squide/react-router)](https://www.npmjs.com/package/@squide/react-router) | -| :icon-mark-github: [@squide/webpack-module-federation](https://github.com/gsoft-inc/wl-squide/tree/main/packages/webpack-module-federation) | Add support for [Module Federation](https://webpack.js.org/concepts/module-federation/). | [![npm version](https://img.shields.io/npm/v/@squide/webpack-module-federation)](https://www.npmjs.com/package/@squide/webpack-module-federation) | +| :icon-mark-github: [@squide/module-federation](https://github.com/gsoft-inc/wl-squide/tree/main/packages/module-federation) | Add support for [Module Federation](https://module-federation.io/). | [![npm version](https://img.shields.io/npm/v/@squide/module-federation)](https://www.npmjs.com/package/@squide/module-federation) | | :icon-mark-github: [@squide/webpack-configs](https://github.com/gsoft-inc/wl-squide/tree/main/packages/webpack-configs) | Utilities to configure [Webpack](https://webpack.js.org/). | [![npm version](https://img.shields.io/npm/v/@squide/webpack-configs)](https://www.npmjs.com/package/@squide/webpack-configs) | | :icon-mark-github: [@squide/msw](https://github.com/gsoft-inc/wl-squide/tree/main/packages/msw) | Add support for [MSW](https://mswjs.io/). | [![npm version](https://img.shields.io/npm/v/@squide/msw)](https://www.npmjs.com/package/@squide/msw) | | :icon-mark-github: [@squide/i18next](https://github.com/gsoft-inc/wl-squide/tree/main/packages/i18next) | Add support for [i18next](https://www.i18next.com/). | [![npm version](https://img.shields.io/npm/v/@squide/i18next)](https://www.npmjs.com/package/@squide/i18next) | | :icon-mark-github: [@squide/firefly](https://github.com/gsoft-inc/wl-squide/tree/main/packages/firefly) | Helpers to facilitate the creation of a shell package with Squide firefly technology stack. | [![npm version](https://img.shields.io/npm/v/@squide/firefly)](https://www.npmjs.com/package/@squide/firefly) | -| :icon-mark-github: [@squide/firefly-configs](https://github.com/gsoft-inc/wl-squide/tree/main/packages/firefly-configs) | Webpack configuration helpers for the Squide firefly technology stack. | [![npm version](https://img.shields.io/npm/v/@squide/firefly-configs)](https://www.npmjs.com/package/@squide/firefly-configs) | +| :icon-mark-github: [@squide/firefly-webpack-configs](https://github.com/gsoft-inc/wl-squide/tree/main/packages/firefly-webpack-configs) | Webpack configuration helpers for the Squide firefly technology stack. | [![npm version](https://img.shields.io/npm/v/@squide/firefly-webpack-configs)](https://www.npmjs.com/package/@squide/firefly-webpack-configs) | | :icon-mark-github: [@squide/fakes](https://github.com/gsoft-inc/wl-squide/tree/main/packages/fakes) | A collection of fake implementations to facilitate the development of federated modules. | [![npm version](https://img.shields.io/npm/v/@squide/fakes)](https://www.npmjs.com/package/@squide/fakes) | diff --git a/docs/reference/registration/completeLocalModuleRegistrations.md b/docs/reference/registration/completeLocalModuleRegistrations.md index 338ddd575..e61bc6692 100644 --- a/docs/reference/registration/completeLocalModuleRegistrations.md +++ b/docs/reference/registration/completeLocalModuleRegistrations.md @@ -34,18 +34,14 @@ A `Promise` object with an array of `LocalModuleRegistrationError` if any error ### Complete local module registrations -```tsx !#15,18 host/src/bootstrap.tsx +```tsx !#11,14 host/src/bootstrap.tsx import { completeLocalModuleRegistrations, registerLocalModules, FireflyRuntime } from "@squide/firefly"; import { register } from "@sample/local-module"; -import { fetchFeatureFlags, type AppContext } from "@sample/shared"; +import { fetchFeatureFlags } from "@sample/shared"; const runtime = new FireflyRuntime(); -const context: AppContext = { - name: "Test app" -}; - -await registerLocalModules([register], runtime, { context }); +await registerLocalModules([register], runtime); // Don't fetch data in the bootstrapping code for a real application. This is done here // strictly for demonstration purpose. @@ -57,11 +53,11 @@ await completeLocalModuleRegistrations(runtime, { featureFlags }); ```tsx !#19-32 local-module/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; -import type { AppContext, DeferredRegistrationData } from "@sample/shared"; +import type { DeferredRegistrationData } from "@sample/shared"; import { AboutPage } from "./AboutPage.tsx"; import { FeatureAPage } from "./FeatureAPage.tsx"; -export const register: ModuleRegisterFunction = async (runtime, context) => { +export const register: ModuleRegisterFunction = async runtime => { runtime.registerRoute({ path: "/about", element: @@ -93,17 +89,13 @@ export const register: ModuleRegisterFunction = async (runtime, context) => { +export const register: ModuleRegisterFunction = async runtime => { runtime.registerRoute({ path: "/about", element: @@ -97,23 +93,19 @@ export const register: ModuleRegisterFunction = async (runtime, context) => { +export const register: ModuleRegisterFunction = async runtime => { runtime.registerRoute({ path: "/about", element: @@ -99,21 +94,17 @@ export const register: ModuleRegisterFunction(runtime, context) { +export const register: ModuleRegisterFunction = async runtime => { return mergeDeferredRegistrations([ await registerLayouts(runtime), await registerAppShell(runtime), diff --git a/docs/reference/registration/registerLocalModules.md b/docs/reference/registration/registerLocalModules.md index 123343bbf..ca55727f3 100644 --- a/docs/reference/registration/registerLocalModules.md +++ b/docs/reference/registration/registerLocalModules.md @@ -34,26 +34,20 @@ A `Promise` object with an array of `LocalModuleRegistrationError` if any error ### Register a local module -```tsx !#11 host/src/bootstrap.tsx +```tsx !#6 host/src/bootstrap.tsx import { registerLocalModules, FireflyRuntime } from "@squide/firefly"; import { register } from "@sample/local-module"; -import type { AppContext } from "@sample/shared"; const runtime = new FireflyRuntime(); -const context: AppContext = { - name: "Test app" -}; - -await registerLocalModules([register], runtime, { context }); +await registerLocalModules([register], runtime); ``` -```tsx !#5-15 local-module/src/register.tsx +```tsx !#5-8,10-13 local-module/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; -import type { AppContext } from "@sample/shared"; import { AboutPage } from "./AboutPage.tsx"; -export function register: ModuleRegisterFunction(runtime, context) { +export const register: ModuleRegisterFunction = async runtime => { runtime.registerRoute({ path: "/about", element: @@ -76,18 +70,14 @@ Sometimes, data must be fetched to determine which routes or navigation items sh To defer a registration to the second phase, a module registration function can **return an anonymous function**. Once the modules are registered and the [completeLocalModuleRegistrations](./completeLocalModuleRegistrations.md) function is called, the deferred registration functions will be executed. -```tsx !#15,18 host/src/bootstrap.tsx +```tsx !#11,14 host/src/bootstrap.tsx import { completeLocalModuleRegistrations, registerLocalModules, FireflyRuntime } from "@squide/firefly"; import { register } from "@sample/local-module"; -import { fetchFeatureFlags, type AppContext } from "@sample/shared"; +import { fetchFeatureFlags } from "@sample/shared"; const runtime = new FireflyRuntime(); -const context: AppContext = { - name: "Test app" -}; - -await registerLocalModules([register], runtime, { context }); +await registerLocalModules([register], runtime); // Don't fetch data in the bootstrapping code for a real application. This is done here // strictly for demonstration purpose. @@ -99,11 +89,11 @@ await completeLocalModuleRegistrations(runtime, { featureFlags }); ```tsx !#19-32 local-module/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; -import type { AppContext, DeferredRegistrationData } from "@sample/shared"; +import type { DeferredRegistrationData } from "@sample/shared"; import { AboutPage } from "./AboutPage.tsx"; import { FeatureAPage } from "./FeatureAPage.tsx"; -export const register: ModuleRegisterFunction = async (runtime, context) => { +export const register: ModuleRegisterFunction = async runtime => { runtime.registerRoute({ path: "/about", element: @@ -137,18 +127,13 @@ export const register: ModuleRegisterFunction { +(await registerLocalModules([register], runtime)).forEach(x => { console.log(x); }); ``` diff --git a/docs/reference/registration/registerRemoteModules.md b/docs/reference/registration/registerRemoteModules.md index 22e91b97b..66a7756f2 100644 --- a/docs/reference/registration/registerRemoteModules.md +++ b/docs/reference/registration/registerRemoteModules.md @@ -28,8 +28,7 @@ registerRemoteModules(remotes: [], runtime, options?: { context? }) A `Promise` object with an array of `RemoteModuleRegistrationError` if any error happens during the registration. - `RemoteModuleRegistrationError`: - - `url`: The URL of the module federation remote that failed to load. - - `containerName`: The name of the [dynamic container](https://webpack.js.org/concepts/module-federation/#dynamic-remote-containers) that Squide attempted to recover. + - `remoteName`: The name of the remote module that failed to load. - `moduleName`: The name of the [module](#name) that Squide attempted to recover. - `error`: The original error object. @@ -37,29 +36,23 @@ A `Promise` object with an array of `RemoteModuleRegistrationError` if any error ### Register a remote module -```tsx !#10-12,14 host/src/bootstrap.tsx +```tsx !#5-7,9 host/src/bootstrap.tsx import { FireflyRuntime, registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; -import type { AppContext } from "@sample/shared"; const runtime = new FireflyRuntime(); -const context: AppContext = { - name: "Test app" -}; - const Remotes: RemoteDefinition = [ - { name: "remote1", url: "http://localhost:8081" } + { name: "remote1" } ]; -await registerRemoteModules(Remotes, runtime, { context }); +await registerRemoteModules(Remotes, runtime); ``` -```tsx !#5-15 remote-module/src/register.tsx +```tsx !#5-8,10-13 remote-module/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; -import type { AppContext } from "@sample/shared"; import { AboutPage } from "./AboutPage.tsx"; -export function register: ModuleRegisterFunction(runtime, context) { +export const register: ModuleRegisterFunction = async runtime => { runtime.registerRoute({ path: "/about", element: @@ -82,21 +75,17 @@ Sometimes, data must be fetched to determine which routes or navigation items sh To defer a registration to the second phase, a module registration function can **return an anonymous function**. Once the modules are registered and the [completeRemoteModuleRegistrations](./completeRemoteModuleRegistrations.md) function is called, the deferred registration functions will be executed. -```tsx !#18,21 host/src/bootstrap.tsx +```tsx !#14,17 host/src/bootstrap.tsx import { FireflyRuntime, completeRemoteModuleRegistrations, registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; -import { fetchFeatureFlags, type AppContext } from "@sample/shared"; +import { fetchFeatureFlags } from "@sample/shared"; const runtime = new FireflyRuntime(); -const context: AppContext = { - name: "Test app" -}; - const Remotes: RemoteDefinition = [ - { name: "remote1", url: "http://localhost:8081" } + { name: "remote1" } ]; -await registerRemoteModules(Remotes, runtime, { context }); +await registerRemoteModules(Remotes, runtime); // Don't fetch data in the bootstrapping code for a real application. This is done here // strictly for demonstration purpose. @@ -108,11 +97,11 @@ await completeRemoteModuleRegistrations(runtime, { featureFlags }); ```tsx !#19-32 remote-module/src/register.tsx import type { ModuleRegisterFunction, FireflyRuntime } from "@squide/firefly"; -import type { AppContext, DeferredRegistrationData } from "@sample/shared"; +import type { DeferredRegistrationData } from "@sample/shared"; import { AboutPage } from "./AboutPage.tsx"; import { FeatureAPage } from "./FeatureAPage.tsx"; -export const register: ModuleRegisterFunction = async (runtime, context) => { +export const register: ModuleRegisterFunction = async runtime => { runtime.registerRoute({ path: "/about", element: @@ -146,21 +135,16 @@ export const register: ModuleRegisterFunction { +(await registerRemoteModules(Remotes, runtime)).forEach(x => { console.log(x); }); ``` @@ -173,65 +157,29 @@ To ease the configuration of remote modules, make sure that you first import the import type { RemoteDefinition } from "@squide/firefly"; const Remotes: RemoteDefinition = [ - { name: "REMOTE_NAME", url: "REMOTE_URL" } + { name: "remote1" } ]; ``` ### `name` -The `name` property of a remote definition **must match** the `name` property defined in the remote module [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) configuration. +The `name` property of a remote definition **must match** the `name` property defined in the remote module [ModuleFederationPlugin](https://module-federation.io/configure/index.html) configuration. -If you are relying on either the Squide [defineDevRemoteModuleConfig](../webpack//defineDevRemoteModuleConfig.md) or [defineBuildRemoteModuleConfig](../webpack/defineBuildRemoteModuleConfig.md) function to add the `ModuleFederationPlugin` to the remote module webpack [configuration object](https://webpack.js.org/concepts/configuration/), then the remote module `name` is the second argument of the function. +If you are relying on either the Squide [defineDevRemoteModuleConfig](../webpack/defineDevRemoteModuleConfig.md) or [defineBuildRemoteModuleConfig](../webpack/defineBuildRemoteModuleConfig.md) functions to add the `ModuleFederationPlugin` to the remote module webpack [configuration object](https://module-federation.io/), then the remote module `name` is the second argument of the function. In the following exemple, the remote module `name` is `remote1`. ```ts !#2 host/src/bootstrap.tsx const Remotes: RemoteDefinition = [ - { name: "remote1", url: `http://localhost:${PORT}` } + { name: "remote1" } ]; ``` -```js !#6 remote-module/src/webpack.dev.js +```js !#6 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevRemoteModuleConfig(swcConfig, "remote1", PORT); -``` - -### `url` - -The `url` property of a remote definition **must match** the [publicPath](https://webpack.js.org/guides/public-path/) of the remote module webpack [configuration object](https://webpack.js.org/concepts/configuration/). - -In the following exemple, the remote module `publicPath` is `http://localhost:8081`. - -```ts !#2 host/src/bootstrap.tsx -const Remotes: RemoteDefinition = [ - { name: "REMOTE_NAME", url: "http://localhost:8081" } -]; -``` - -In development mode, the `publicPath` is built from the provided `host` and `port` values. Therefore, if the port value is `8081`, then the generated `publicPath` would be `http://localhost:8081/`: - -```js !#6-8 remote-module/webpack.dev.js -// @ts-check - -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; -import { swcConfig } from "./swc.dev.js"; - -export default defineDevRemoteModuleConfig(swcConfig, REMOTE_NAME, 8081, { - host: "localhost" // (This is the default value) -}); -``` - -In build mode, the `publicPath` is the third argument of the `defineBuildRemoteModuleConfig` function: - -```js !#6 remote-module/webpack.build.js -// @ts-check - -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; -import { swcConfig } from "./swc.build.js"; - -export default defineBuildRemoteModuleConfig(swcConfig, REMOTE_NAME, "http://localhost:8081/"); +export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8081); ``` diff --git a/docs/reference/registration/useAreModulesReady.md b/docs/reference/registration/useAreModulesReady.md index ae907b0a0..e7cedec2a 100644 --- a/docs/reference/registration/useAreModulesReady.md +++ b/docs/reference/registration/useAreModulesReady.md @@ -35,7 +35,7 @@ import { App } from "./App.tsx"; const runtime = new FireflyRuntime(); const Remotes: RemoteDefinition = [ - { name: "remote1", url: "http://localhost:8081" } + { name: "remote1" } ]; await registerRemoteModules(Remotes, runtime); diff --git a/docs/reference/registration/useAreModulesRegistered.md b/docs/reference/registration/useAreModulesRegistered.md index 351c11d8c..730546011 100644 --- a/docs/reference/registration/useAreModulesRegistered.md +++ b/docs/reference/registration/useAreModulesRegistered.md @@ -37,7 +37,7 @@ import { App } from "./App.tsx"; const runtime = new FireflyRuntime(); const Remotes: RemoteDefinition = [ - { name: "remote1", url: "http://localhost:8081" } + { name: "remote1" } ]; await registerLocalModules([register], runtime, { context }); diff --git a/docs/reference/routing/appRouter.md b/docs/reference/routing/appRouter.md index 0bdd6e6e4..cb04101bb 100644 --- a/docs/reference/routing/appRouter.md +++ b/docs/reference/routing/appRouter.md @@ -6,7 +6,7 @@ toc: # AppRouter -A component that sets up and orchestrate Squide federated primitives with a React Router instance. +A component that sets up and orchestrate Squide federated primitives with a [React Router](https://reactrouter.com/en/main) instance. ## Reference @@ -21,9 +21,9 @@ A component that sets up and orchestrate Squide federated primitives with a Reac - `fallbackElement`: A React element to render while the application is being bootstrapped. - `errorElement`: A React element to render when there's an unmanaged error during the bootstrapping of the application. - `waitForMsw`: Whether or not the application bootstrapping sequence should wait for MSW to be started before loading the data and rendering the active route. -- `onLoadPublicData`: An optional handler to load the initial public data after the **modules are registered** and **MSW is started** (if enabled). This handler is called the first time a user navigate to a [public route](../runtime/runtime-class.md#register-a-public-route). Such public data could include feature flags. +- `onLoadPublicData`: An optional handler to load the initial public data after the **modules are registered** and **MSW is started** (if enabled). This handler is called the first time a user navigate to a [public route](../runtime/runtime-class.md#register-a-public-route). - `signal`: An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal) to cancel the previous HTTP request when the `onLoadPublicData` handler is called twice due to the `AppRouter` being re-rendered. -- `onLoadProtectedData`: An optional handler to load the initial protected data after the **modules are registered** and **MSW is started** (if enabled). This handler is called the first time a user navigate to a protected route (any route that has no `$visibility: public` hint). Such protected data could include a user session. +- `onLoadProtectedData`: An optional handler to load the initial protected data after the **modules are registered** and **MSW is started** (if enabled). This handler is called the first time a user navigate to a protected route (any route that has no `$visibility: public` hint). - `signal`: An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal) to cancel the previous HTTP request when the `onLoadPublicData` handler is called twice due to the `AppRouter` being re-rendered. - `isPublicDataLoaded`: Whether or not the initial public data has been loaded. - `isProtectedDataLoaded`: Whether or not the initial protected data has been loaded. @@ -240,10 +240,9 @@ Don't forget to forward the [AbortSignal](https://developer.mozilla.org/en-US/do For more information about deferred registrations, refer to the [registerRemoteModules](../registration/registerRemoteModules.md#defer-the-registration-of-routes-or-navigation-items) and [completeModuleRegistrations](../registration/completeModuleRegistrations.md) documentation. -```tsx !#32-34,44 host/src/App.tsx +```tsx !#31-33,43 host/src/App.tsx import { useState, useCallback } from "react"; -import { AppRouter } from "@squide/firefly"; -import { completeModuleRegistrations } from "@squide/webpack-module-federation"; +import { AppRouter, completeModuleRegistrations } from "@squide/firefly"; import { Loading } from "./Loading.tsx"; import { ErrorBoundary } from "./ErrorBoundary.tsx"; import type { FeatureFlags } from "@sample/shared"; diff --git a/docs/reference/routing/useIsRouteProtected.md b/docs/reference/routing/useIsRouteProtected.md index fa6f55b86..326bb21bf 100644 --- a/docs/reference/routing/useIsRouteProtected.md +++ b/docs/reference/routing/useIsRouteProtected.md @@ -8,7 +8,7 @@ toc: Determine whether or not a route is considered as `protected`. -> To take advantage of this hook, make sure to add a [$visibility hint](../runtime/runtime-class.md#register-a-public-route) to your public pages. +> To take advantage of this hook, make sure to add a [$visibility](../runtime/runtime-class.md#register-a-public-route) hint to your public pages. ## Reference diff --git a/docs/reference/runtime/runtime-class.md b/docs/reference/runtime/runtime-class.md index 20b0361db..f92cae0e6 100644 --- a/docs/reference/runtime/runtime-class.md +++ b/docs/reference/runtime/runtime-class.md @@ -18,6 +18,7 @@ const runtime = new FireflyRuntime(options?: { loggers?: [], plugins?: [], sessi - `options`: An optional object literal of options: - `mode`: An optional mode to optimize Squide for `production`. Values are `"development"` (default) and `"production"`. + - `useMsw`: An optional boolean value indicating whether or not to create the runtime with MSW support. - `loggers`: An optional array of `Logger` instances. - `plugins`: An optional array of custom plugin instances. - `sessionAccessor`: An optional function returning the current session. @@ -43,7 +44,7 @@ const runtime = new FireflyRuntime({ ### Change the runtime mode -```ts +```ts !#4 import { FireflyRuntime } from "@squide/firefly"; const runtime = new FireflyRuntime({ @@ -51,6 +52,21 @@ const runtime = new FireflyRuntime({ }); ``` +### Use Mock Service Worker + +```ts !#4,8 +import { FireflyRuntime } from "@squide/firefly"; + +const runtime = new FireflyRuntime({ + useMsw: true +}); + +// Use the runtime to determine if MSW handlers should be registered. +if (runtime.isMswEnabled) { + // ... +} +``` + ### Register routes ```ts diff --git a/docs/reference/webpack/defineBuildHostConfig.md b/docs/reference/webpack/defineBuildHostConfig.md index c6641daaa..51119a2ae 100644 --- a/docs/reference/webpack/defineBuildHostConfig.md +++ b/docs/reference/webpack/defineBuildHostConfig.md @@ -15,20 +15,21 @@ This function is a wrapper built on top of [@workleap/web-configs](https://www.n ## Reference ```ts -const webpackConfig = defineBuildHostConfig(swcConfig: {}, applicationName, options?: {}) +const webpackConfig = defineBuildHostConfig(swcConfig: {}, applicationName, remotes: [], options?: {}) ``` ## Parameters - `swcConfig`: An SWC [configuration object](https://swc.rs/docs/configuration/swcrc). - `applicationName`: The host application name. +- `remotes`: An array of `RemoteDefinition` (view the [Remote definition](#remote-definition) section). - `options`: An optional object literal of options: - Accepts most of webpack `definedBuildConfig` [predefined options](https://gsoft-inc.github.io/wl-web-configs/webpack/configure-build/#3-set-predefined-options). - `htmlWebpackPluginOptions`: An optional object literal accepting any property of the [HtmlWebpackPlugin](https://github.com/jantimon/html-webpack-plugin#options). - `features`: An optional object literal of feature switches to define additional shared dependencies. - `i18next`: Whether or not to add `@squide/i18next` as a shared dependency. - `sharedDependencies`: An optional object literal of additional (or updated) module federation shared dependencies. - - `moduleFederationPluginOptions`: An optional object literal of [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) options. + - `moduleFederationPluginOptions`: An optional object literal of [ModuleFederationPlugin](https://module-federation.io/configure/index.html) options. ## Returns @@ -42,7 +43,7 @@ The `defineBuildHostConfig` function will add the following shared dependencies - [react-router-dom](https://www.npmjs.com/package/react-router-dom) - [@squide/core](https://www.npmjs.com/package/@squide/core) - [@squide/react-router](https://www.npmjs.com/package/@squide/react-router) -- [@squide/webpack-module-federation](https://www.npmjs.com/package/@squide/webpack-module-federation) +- [@squide/module-federation](https://www.npmjs.com/package/@squide/module-federation) - [@squide/msw](https://www.npmjs.com/package/@squide/msw) For the full shared dependencies configuration, have a look at the [defineConfig.ts](https://github.com/gsoft-inc/wl-squide/blob/main/packages/firefly/src/defineConfig.ts) file on GitHub. @@ -51,44 +52,64 @@ For the full shared dependencies configuration, have a look at the [defineConfig ### Define a webpack config -```js !#6 host/webpack.build.js +```js !#13 host/webpack.build.js // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; -export default defineBuildHostConfig(swcConfig, "host"); +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineBuildHostConfig(swcConfig, "host", Remotes); ``` ### Activate additional features -```js !#7-9 host/webpack.build.js +```js !#14-16 host/webpack.build.js // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; -export default defineBuildHostConfig(swcConfig, "host", { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineBuildHostConfig(swcConfig, "host", Remotes, { features: { i18next: true } }); ``` - !!!info Features must be activated on the host application as well as every remote module. !!! ### Specify additional shared dependencies -```js !#7-11 host/webpack.build.js +```js !#14-18 host/webpack.build.js // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; -export default defineBuildHostConfig(swcConfig, "host", { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineBuildHostConfig(swcConfig, "host", Remotes, { sharedDependencies: { "@sample/shared": { singleton: true @@ -103,13 +124,20 @@ Additional shared dependencies must be configured on the host application as wel ### Extend a default shared dependency -```js !#7-11 host/webpack.build.js +```js !#14-18 host/webpack.build.js // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; -export default defineBuildHostConfig(swcConfig, "host", { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineBuildHostConfig(swcConfig, "host", Remotes, { sharedDependencies: { "react": { requiredVersion: "18.2.0" @@ -118,7 +146,7 @@ export default defineBuildHostConfig(swcConfig, "host", { }); ``` -In the previous code sample, the `react` shared dependency will be **augmented** with the newly provided `strictVersion` option. The resulting shared dependency will be: +In the previous code sample, the `react` shared dependency will be **augmented** with the `strictVersion` option. The resulting shared dependency will be: ```js !#5 { @@ -132,13 +160,20 @@ In the previous code sample, the `react` shared dependency will be **augmented** ### Override a default shared dependency -```js !#7-11 host/webpack.build.js +```js !#14-18 host/webpack.build.js // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; -export default defineBuildHostConfig(swcConfig, "host", { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineBuildHostConfig(swcConfig, "host", Remotes, { sharedDependencies: { "react": { singleton: false @@ -160,15 +195,22 @@ In the previous code sample, the `react` shared dependency `singleton` option wi ### Customize module federation configuration -While you could customize the [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) configuration by providing your own object literal through the `moduleFederationPluginOptions` option, we recommend using the `defineHostModuleFederationPluginOptions(applicationName, options)` function as it will take care of **merging** the custom options with the default plugin options. +While you could customize the [ModuleFederationPlugin](https://module-federation.io/configure/index.html) configuration by providing your own object literal through the `moduleFederationPluginOptions` option, we recommend using the `defineHostModuleFederationPluginOptions(applicationName, options)` function as it will take care of **merging** the custom options with the default plugin options. -```js !#7-9 host/webpack.build.js +```js !#14-16 host/webpack.build.js // @ts-check -import { defineBuildHostConfig, defineHostModuleFederationPluginOptions } from "@squide/firefly-configs"; +import { defineBuildHostConfig, defineHostModuleFederationPluginOptions } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; -export default defineBuildHostConfig(swcConfig, "host", { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineBuildHostConfig(swcConfig, "host", Remotes, { moduleFederationPluginOptions: defineHostModuleFederationPluginOptions("host", { runtime: "my-runtime-name" }) @@ -176,7 +218,48 @@ export default defineBuildHostConfig(swcConfig, "host", { ``` - `applicationName`: The host application name. -- `moduleFederationPluginOptions`: An object literal of [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) options. +- `moduleFederationPluginOptions`: An object literal of [ModuleFederationPlugin](https://module-federation.io/configure/) options. + +## Remote definition + +### `name` + +The `name` property of a remote definition **must match** the `name` property defined in the remote module [ModuleFederationPlugin](https://module-federation.io/configure/index.html) configuration. + +If you are relying on the Squide [defineBuildRemoteModuleConfig](../webpack/defineBuildRemoteModuleConfig.md) function to add the `ModuleFederationPlugin` to the remote module webpack [configuration object](https://module-federation.io/), then the remote module `name` is the second argument of the function. +In the following exemple, the remote module `name` is `remote1`. +```js !#5 host/webpack.build.js +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: `http://localhost:8081` } +]; +``` + +```js !#6 remote-module/webpack.build.js +// @ts-check + +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; +import { swcConfig } from "./swc.dev.js"; + +export default defineBuildRemoteModuleConfig(swcConfig, "remote1"); +``` + +### `url` + +The `url` property of a remote definition **must match** the [publicPath](https://webpack.js.org/guides/public-path/) of the remote module webpack [configuration object](https://webpack.js.org/concepts/configuration/). + +In the following exemple, the remote module `publicPath` is `http://localhost:8081`. + +```ts !#5 host/webpack.build.js +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; +``` diff --git a/docs/reference/webpack/defineBuildRemoteModuleConfig.md b/docs/reference/webpack/defineBuildRemoteModuleConfig.md index 9c744445b..45f232754 100644 --- a/docs/reference/webpack/defineBuildRemoteModuleConfig.md +++ b/docs/reference/webpack/defineBuildRemoteModuleConfig.md @@ -27,7 +27,7 @@ const webpackConfig = defineBuildRemoteModuleConfig(swcConfig: {}, applicationNa - `features`: An optional object literal of feature switches to define additional shared dependencies. - `i18next`: Whether or not to add `@squide/i18next` as a shared dependency. - `sharedDependencies`: An optional object literal of additional (or updated) module federation shared dependencies. - - `moduleFederationPluginOptions`: An optional object literal of [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) options. + - `moduleFederationPluginOptions`: An optional object literal of [ModuleFederationPlugin](https://module-federation.io/configure/index.html) options. ## Returns @@ -35,21 +35,15 @@ A webpack [configuration object](https://webpack.js.org/concepts/configuration/) ## Conventions -To fulfill Squide remote module requirements, the `defineBuildRemoteModuleConfig` function will pre-configure the [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) with the following `filename` and `exposes` properties. +To fulfill Squide remote module requirements, the `defineBuildRemoteModuleConfig` function will pre-configure the [ModuleFederationPlugin](https://module-federation.io/configure/index.html) with the following `filename` and `exposes` properties. -```js !#6-9 -import ModuleFederationPlugin from "webpack/lib/container/ModuleFederationPlugin.js"; - -export default { - plugins: [ - ModuleFederationPlugin({ - filename: "/remoteEntry.js", - exposes: { - "register.js": "./src/register" - } - }) - ] -}; +```js +{ + filename: "/remoteEntry.js", + exposes: { + "register.js": "./src/register" + } +} ``` !!!info @@ -64,7 +58,7 @@ The `defineBuildRemoteModuleConfig` function will add the following shared depen - [react-router-dom](https://www.npmjs.com/package/react-router-dom) - [@squide/core](https://www.npmjs.com/package/@squide/core) - [@squide/react-router](https://www.npmjs.com/package/@squide/react-router) -- [@squide/webpack-module-federation](https://www.npmjs.com/package/@squide/webpack-module-federation) +- [@squide/module-federation](https://www.npmjs.com/package/@squide/module-federation) - [@squide/msw](https://www.npmjs.com/package/@squide/msw) For the full shared dependencies configuration, have a look at the [defineConfig.ts](https://github.com/gsoft-inc/wl-squide/blob/main/packages/firefly/src/defineConfig.ts) file on Github. @@ -76,7 +70,7 @@ For the full shared dependencies configuration, have a look at the [defineConfig ```js !#6 remote-module/webpack.build.js // @ts-check -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; export default defineBuildRemoteModuleConfig(swcConfig, "remote1"); @@ -87,7 +81,7 @@ export default defineBuildRemoteModuleConfig(swcConfig, "remote1"); ```js !#7-9 remote-module/webpack.build.js // @ts-check -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; export default defineBuildRemoteModuleConfig(swcConfig, "remote1", { @@ -106,7 +100,7 @@ Features must be activated on the host application as well as every remote modul ```js !#7-11 remote-module/webpack.build.js // @ts-check -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; export default defineBuildRemoteModuleConfig(swcConfig, "remote1", { @@ -127,7 +121,7 @@ Additional shared dependencies must be configured on the host application as wel ```js !#7-11 remote-module/webpack.build.js // @ts-check -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; export default defineBuildRemoteModuleConfig(swcConfig, "remote1", { @@ -156,7 +150,7 @@ In the previous code sample, the `react` shared dependency will be **augmented** ```js !#7-11 remote-module/webpack.build.js // @ts-check -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; export default defineBuildRemoteModuleConfig(swcConfig, "remote1", { @@ -181,12 +175,12 @@ In the previous code sample, the `react` shared dependency `singleton` option wi ### Customize module federation configuration -While you could customize the [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) configuration by providing your own object literal through the `moduleFederationPluginOptions` option, we recommend using the `defineRemoteModuleFederationPluginOptions(applicationName, options)` function as it will take care of **merging** the custom options with the default plugin options. +While you could customize the [ModuleFederationPlugin](https://module-federation.io/configure/index.html) configuration by providing your own object literal through the `moduleFederationPluginOptions` option, we recommend using the `defineRemoteModuleFederationPluginOptions(applicationName, options)` function as it will take care of **merging** the custom options with the default plugin options. ```js !#7-9 remote-module/webpack.build.js // @ts-check -import { defineBuildRemoteModuleConfig, defineRemoteModuleFederationPluginOptions } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig, defineRemoteModuleFederationPluginOptions } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; export default defineBuildRemoteModuleConfig(swcConfig, "remote1", { @@ -197,14 +191,14 @@ export default defineBuildRemoteModuleConfig(swcConfig, "remote1", { ``` - `applicationName`: The host application name. -- `moduleFederationPluginOptions`: An object literal of [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) options. +- `moduleFederationPluginOptions`: An object literal of [ModuleFederationPlugin](https://module-federation.io/configure/index.html) options. ### Expose an additional module ```js !#7-11 remote-module/webpack.build.js // @ts-check -import { defineBuildRemoteModuleConfig, defineRemoteModuleFederationPluginOptions } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig, defineRemoteModuleFederationPluginOptions } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; export default defineBuildRemoteModuleConfig(swcConfig, "remote1", { diff --git a/docs/reference/webpack/defineDevHostConfig.md b/docs/reference/webpack/defineDevHostConfig.md index 1ff98f4b5..17df8f4a7 100644 --- a/docs/reference/webpack/defineDevHostConfig.md +++ b/docs/reference/webpack/defineDevHostConfig.md @@ -15,7 +15,7 @@ This function is a wrapper built on top of [@workleap/web-configs](https://www.n ## Reference ```ts -const webpackConfig = defineDevHostConfig(swcConfig: {}, applicationName, port, options?: {}) +const webpackConfig = defineDevHostConfig(swcConfig: {}, applicationName, port, remotes: [], options?: {}) ``` ## Parameters @@ -23,13 +23,14 @@ const webpackConfig = defineDevHostConfig(swcConfig: {}, applicationName, port, - `swcConfig`: An SWC [configuration object](https://swc.rs/docs/configuration/swcrc). - `applicationName`: The host application name. - `port`: The host application port. +- `remotes`: An array of `RemoteDefinition` (view the [Remote definition](#remote-definition) section). - `options`: An optional object literal of options: - Accepts most of webpack `definedDevConfig` [predefined options](https://gsoft-inc.github.io/wl-web-configs/webpack/configure-dev/#3-set-predefined-options). - `htmlWebpackPluginOptions`: An optional object literal accepting any property of the [HtmlWebpackPlugin](https://github.com/jantimon/html-webpack-plugin#options). - `features`: An optional object literal of feature switches to define additional shared dependencies. - `i18next`: Whether or not to add `@squide/i18next` as a shared dependency. - `sharedDependencies`: An optional object literal of additional (or updated) module federation shared dependencies. - - `moduleFederationPluginOptions`: An optional object literal of [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) options. + - `moduleFederationPluginOptions`: An optional object literal of [ModuleFederationPlugin](https://module-federation.io/configure/index.html) options. ## Returns @@ -43,7 +44,7 @@ The `defineDevHostConfig` function will add the following shared dependencies as - [react-router-dom](https://www.npmjs.com/package/react-router-dom) - [@squide/core](https://www.npmjs.com/package/@squide/core) - [@squide/react-router](https://www.npmjs.com/package/@squide/react-router) -- [@squide/webpack-module-federation](https://www.npmjs.com/package/@squide/webpack-module-federation) +- [@squide/module-federation](https://www.npmjs.com/package/@squide/module-federation) - [@squide/msw](https://www.npmjs.com/package/@squide/msw) For the full shared dependencies configuration, have a look at the [defineConfig.ts](https://github.com/gsoft-inc/wl-squide/blob/main/packages/firefly/src/defineConfig.ts) file on Github. @@ -52,24 +53,38 @@ For the full shared dependencies configuration, have a look at the [defineConfig ### Define a webpack config -```js !#6 host/webpack.dev.js +```js !#13 host/webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080); +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes); ``` ### Activate optional features -```js !#7-9 host/webpack.dev.js +```js !#14-16 host/webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes, { features: { i18next: true } @@ -82,13 +97,20 @@ Features must be activated on the host application as well as every remote modul ### Specify additional shared dependencies -```js !#7-11 host/webpack.dev.js +```js !#14-18 host/webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes, { sharedDependencies: { "@sample/shared": { singleton: true @@ -103,13 +125,20 @@ Additional shared dependencies must be configured on the host application as wel ### Extend a default shared dependency -```js !#7-11 host/webpack.dev.js +```js !#14-18 host/webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes, { sharedDependencies: { "react": { requiredVersion: "18.2.0" @@ -118,7 +147,7 @@ export default defineDevHostConfig(swcConfig, "host", 8080, { }); ``` -In the previous code sample, the `react` shared dependency will be **augmented** with the newly provided `strictVersion` option. The resulting shared dependency will be: +In the previous code sample, the `react` shared dependency will be **augmented** with the `strictVersion` option. The resulting shared dependency will be: ```js !#5 { @@ -132,12 +161,19 @@ In the previous code sample, the `react` shared dependency will be **augmented** ### Override a default shared dependency -```js !#7-11 host/webpack.dev.js +```js !#14-18 host/webpack.dev.js // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + export default defineDevHostConfig(swcConfig, "host", 8080, { sharedDependencies: { "react": { @@ -160,15 +196,22 @@ In the previous code sample, the `react` shared dependency `singleton` option wi ### Customize module federation configuration -While you could customize the [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) configuration by providing your own object literal through the `moduleFederationPluginOptions` option, we recommend using the `defineHostModuleFederationPluginOptions(applicationName, options)` function as it will take care of **merging** the custom options with the default plugin options. +While you could customize the [ModuleFederationPlugin](https://module-federation.io/configure/) configuration by providing your own object literal through the `moduleFederationPluginOptions` option, we recommend using the `defineHostModuleFederationPluginOptions(applicationName, options)` function as it will take care of **merging** the custom options with the default plugin options. -```js !#7-9 host/webpack.dev.js +```js !#14-16 host/webpack.dev.js // @ts-check -import { defineDevHostConfig, defineHostModuleFederationPluginOptions } from "@squide/firefly-configs"; +import { defineDevHostConfig, defineHostModuleFederationPluginOptions } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; + +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes, { moduleFederationPluginOptions: defineHostModuleFederationPluginOptions("host", { runtime: "my-runtime-name" }) @@ -176,7 +219,62 @@ export default defineDevHostConfig(swcConfig, "host", 8080, { ``` - `applicationName`: The host application name. -- `moduleFederationPluginOptions`: An object literal of [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) options. +- `moduleFederationPluginOptions`: An object literal of [ModuleFederationPlugin](https://module-federation.io/configure/) options. + +## Remote definition + +### `name` + +The `name` property of a remote definition **must match** the `name` property defined in the remote module [ModuleFederationPlugin](https://module-federation.io/configure/index.html) configuration. + +If you are relying on the Squide [defineDevRemoteModuleConfig](../webpack/defineDevRemoteModuleConfig.md) function to add the `ModuleFederationPlugin` to the remote module webpack [configuration object](https://module-federation.io/), then the remote module `name` is the second argument of the function. +In the following exemple, the remote module `name` is `remote1`. + +```js !#5 host/webpack.dev.js +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: `http://localhost:8081` } +]; +``` + +```js !#6 remote-module/webpack.dev.js +// @ts-check + +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; +import { swcConfig } from "./swc.dev.js"; + +export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8081); +``` + +### `url` + +The `url` property of a remote definition **must match** the [publicPath](https://webpack.js.org/guides/public-path/) of the remote module webpack [configuration object](https://webpack.js.org/concepts/configuration/). + +In the following exemple, the remote module `publicPath` is `http://localhost:8081`. + +```ts !#5 host/webpack.dev.js +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +const Remotes = [ + { name: "remote1", url: "http://localhost:8081" } +]; +``` + +The `publicPath` is built from the provided `host` and `port` values. Therefore, if the port value is `8081`, then the generated `publicPath` would be `http://localhost:8081`: + +```js !#6-8 remote-module/webpack.dev.js +// @ts-check + +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; +import { swcConfig } from "./swc.dev.js"; + +export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8081, { + host: "localhost" // (This is the default value) +}); +``` diff --git a/docs/reference/webpack/defineDevRemoteModuleConfig.md b/docs/reference/webpack/defineDevRemoteModuleConfig.md index d4c4c6085..caf7ccacc 100644 --- a/docs/reference/webpack/defineDevRemoteModuleConfig.md +++ b/docs/reference/webpack/defineDevRemoteModuleConfig.md @@ -28,7 +28,7 @@ const webpackConfig = defineDevRemoteModuleConfig(swcConfig: {}, applicationName - `features`: An optional object literal of feature switches to define additional shared dependencies. - `i18next`: Whether or not to add `@squide/i18next` as a shared dependency. - `sharedDependencies`: An optional object literal of additional (or updated) module federation shared dependencies. - - `moduleFederationPluginOptions`: An optional object literal of [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) options. + - `moduleFederationPluginOptions`: An optional object literal of [ModuleFederationPlugin](https://module-federation.io/configure/index.html) options. ## Returns @@ -36,21 +36,15 @@ A webpack [configuration object](https://webpack.js.org/concepts/configuration/) ## Conventions -To fulfill Squide remote module requirements, the `defineDevRemoteModuleConfig` function will pre-configure the [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) with the following `filename` and `exposes` properties. +To fulfill Squide remote module requirements, the `defineDevRemoteModuleConfig` function will pre-configure the [ModuleFederationPlugin](https://module-federation.io/configure/index.html) with the following `filename` and `exposes` properties. -```js !#6-9 -import ModuleFederationPlugin from "webpack/lib/container/ModuleFederationPlugin.js"; - -export default { - plugins: [ - ModuleFederationPlugin({ - filename: "/remoteEntry.js", - exposes: { - "register.js": "./src/register" - } - }) - ] -}; +```js +{ + filename: "/remoteEntry.js", + exposes: { + "register.js": "./src/register" + } +} ``` !!!info @@ -65,7 +59,7 @@ The `defineDevRemoteModuleConfig` function will add the following shared depende - [react-router-dom](https://www.npmjs.com/package/react-router-dom) - [@squide/core](https://www.npmjs.com/package/@squide/core) - [@squide/react-router](https://www.npmjs.com/package/@squide/react-router) -- [@squide/webpack-module-federation](https://www.npmjs.com/package/@squide/webpack-module-federation) +- [@squide/module-federation](https://www.npmjs.com/package/@squide/module-federation) - [@squide/msw](https://www.npmjs.com/package/@squide/msw) For the full shared dependencies configuration, have a look at the [defineConfig.ts](https://github.com/gsoft-inc/wl-squide/blob/main/packages/firefly/src/defineConfig.ts) file on Github. @@ -77,7 +71,7 @@ For the full shared dependencies configuration, have a look at the [defineConfig ```js !#6 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8080); @@ -88,7 +82,7 @@ export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8080); ```js !#7-9 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8080, { @@ -107,7 +101,7 @@ Features must be activated on the host application as well as every remote modul ```js !#7-11 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8080, { @@ -128,7 +122,7 @@ Additional shared dependencies must be configured on the host application as wel ```js !#7-11 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8080, { @@ -157,7 +151,7 @@ In the previous code sample, the `react` shared dependency will be **augmented** ```js !#7-11 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8080, { @@ -182,12 +176,12 @@ In the previous code sample, the `react` shared dependency `singleton` option wi ### Customize module federation configuration -While you could customize the [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) configuration by providing your own object literal through the `moduleFederationPluginOptions` option, we recommend using the `defineRemoteModuleFederationPluginOptions(applicationName, options)` function as it will take care of **merging** the custom options with the default plugin options. +While you could customize the [ModuleFederationPlugin](https://module-federation.io/configure/index.html) configuration by providing your own object literal through the `moduleFederationPluginOptions` option, we recommend using the `defineRemoteModuleFederationPluginOptions(applicationName, options)` function as it will take care of **merging** the custom options with the default plugin options. ```js !#7-9 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig, defineRemoteModuleFederationPluginOptions } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig, defineRemoteModuleFederationPluginOptions } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8080, { @@ -198,14 +192,14 @@ export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8080, { ``` - `applicationName`: The host application name. -- `moduleFederationPluginOptions`: An object literal of [ModuleFederationPlugin](https://webpack.js.org/plugins/module-federation-plugin/) options. +- `moduleFederationPluginOptions`: An object literal of [ModuleFederationPlugin](https://module-federation.io/configure/index.html) options. ### Expose an additional module ```js !#7-11 remote-module/webpack.dev.js // @ts-check -import { defineDevRemoteModuleConfig, defineRemoteModuleFederationPluginOptions } from "@squide/firefly-configs"; +import { defineDevRemoteModuleConfig, defineRemoteModuleFederationPluginOptions } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.dev.js"; export default defineDevRemoteModuleConfig(swcConfig, "remote1", 8080, { diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index e44436ee8..e6c9bb823 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -23,11 +23,11 @@ If you are encountering undefined values when providing a React context from the To resolve this issue: -1. Ensure that the `react` and `react-dom` dependencies are shared as [singletons](https://webpack.js.org/plugins/module-federation-plugin/#singleton) between the host application and the remote modules. A React context value cannot be shared between different parts of an application that use different instances of React. +1. Ensure that the `react` and `react-dom` dependencies are shared as [singletons](https://module-federation.io/configure/shared.html#singleton) between the host application and the remote modules. A React context value cannot be shared between different parts of an application that use different instances of React. -2. Confirm that the shared React context resides in a library shared as a [singleton](https://webpack.js.org/plugins/module-federation-plugin/#singleton). +2. Confirm that the shared React context resides in a library shared as a [singleton](https://module-federation.io/configure/shared.html#singleton). -3. If you are using [eager](https://webpack.js.org/plugins/module-federation-plugin#eager) shared dependencies, ensure that ONLY the host application configures these dependencies as `eager`. +3. If you are using [eager](https://module-federation.io/configure/shared.html#eager) shared dependencies, ensure that ONLY the host application configures these dependencies as `eager`. If the issue persists, update your host application and remote module's webpack build configuration with the `optimize: false` option. Afterward, build the bundles and serve them. Open a web browser, access the DevTools, switch to the Network tab (ensure that JS files are listed), navigate to the application's homepage, and inspect the downloaded bundle files. The problematic React context definition should appear only once; otherwise, you may have multiple instances of the React context. diff --git a/package.json b/package.json index c10ce3501..5a99c0ba2 100644 --- a/package.json +++ b/package.json @@ -43,22 +43,22 @@ "deploy-endpoints-isolated": "cross-env NETLIFY=true pnpm build-endpoints-isolated && pnpm run deploy-endpoints-isolated:remote-module", "deploy-endpoints-isolated:remote-module": "netlify deploy --dir=samples/endpoints/remote-module/dist --site=1eacb274-6182-420e-b6e7-ada6f10cc487 --prod", "dev-docs": "retype start", - "list-outdated-deps": "pnpm outdated -r --format list !eslint", - "update-outdated-deps": "pnpm update -r --latest !eslint" + "list-outdated-deps": "pnpm outdated -r --format list !eslint !useless-lib", + "update-outdated-deps": "pnpm update -r --latest !eslint !useless-lib" }, "devDependencies": { "@changesets/changelog-github": "0.5.0", "@changesets/cli": "2.27.1", "@types/node": "20.12.7", - "@typescript-eslint/parser": "7.6.0", + "@typescript-eslint/parser": "7.8.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/typescript-configs": "3.0.2", "cross-env": "7.0.3", "eslint": "8.57.0", "installed-check": "9.3.0", "jest": "29.7.0", - "knip": "5.9.4", - "netlify-cli": "17.22.1", + "knip": "5.11.0", + "netlify-cli": "17.23.1", "retypeapp": "3.5.0", "ts-node": "10.9.2", "typescript": "5.4.5" diff --git a/packages/core/package.json b/packages/core/package.json index a06823bc6..7b48e02aa 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -16,8 +16,8 @@ "type": "module", "exports": { ".": { - "import": "./dist/index.js", "types": "./dist/index.d.ts", + "import": "./dist/index.js", "default": "./dist/index.js" } }, @@ -35,17 +35,17 @@ "react-dom": "*" }, "devDependencies": { - "@swc/core": "1.4.13", + "@swc/core": "1.4.17", "@swc/jest": "0.2.36", "@types/jest": "29.5.12", - "@types/react": "18.2.77", + "@types/react": "18.3.1", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", "@workleap/tsup-configs": "3.0.6", "@workleap/typescript-configs": "3.0.2", "eslint": "8.57.0", "jest": "29.7.0", - "react": "18.2.0", + "react": "18.3.1", "tsup": "8.0.2", "typescript": "5.4.5" }, diff --git a/packages/fakes/package.json b/packages/fakes/package.json index de4785fc4..374b7fa56 100644 --- a/packages/fakes/package.json +++ b/packages/fakes/package.json @@ -16,8 +16,8 @@ "type": "module", "exports": { ".": { - "import": "./dist/index.js", "types": "./dist/index.d.ts", + "import": "./dist/index.js", "default": "./dist/index.js" } }, diff --git a/packages/firefly-configs/CHANGELOG.md b/packages/firefly-configs/CHANGELOG.md deleted file mode 100644 index 74596f100..000000000 --- a/packages/firefly-configs/CHANGELOG.md +++ /dev/null @@ -1,66 +0,0 @@ -# @squide/firefly-configs - -## 1.0.6 - -### Patch Changes - -- [#165](https://github.com/gsoft-inc/wl-squide/pull/165) [`c9358e5`](https://github.com/gsoft-inc/wl-squide/commit/c9358e5a276e38d877d16a6831251c1932b8497e) Thanks [@bsokol-wl](https://github.com/bsokol-wl)! - update webpack config dependency to remove hashes from chunk filenames - -- Updated dependencies [[`c9358e5`](https://github.com/gsoft-inc/wl-squide/commit/c9358e5a276e38d877d16a6831251c1932b8497e)]: - - @squide/webpack-configs@1.2.8 - -## 1.0.5 - -### Patch Changes - -- [#162](https://github.com/gsoft-inc/wl-squide/pull/162) [`2c0840c`](https://github.com/gsoft-inc/wl-squide/commit/2c0840cb1c2c22e830e4f25f438c240c2d75d27a) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Moved @workleap/webpack-configs as a dependency. - -- Updated dependencies [[`2c0840c`](https://github.com/gsoft-inc/wl-squide/commit/2c0840cb1c2c22e830e4f25f438c240c2d75d27a)]: - - @squide/webpack-configs@1.2.7 - -## 1.0.4 - -### Patch Changes - -- [#160](https://github.com/gsoft-inc/wl-squide/pull/160) [`535b62c`](https://github.com/gsoft-inc/wl-squide/commit/535b62c9ce72bf32b69f018d9467a18186d123a8) Thanks [@bsokol-wl](https://github.com/bsokol-wl)! - Add webpack memory caching by default - -- Updated dependencies [[`535b62c`](https://github.com/gsoft-inc/wl-squide/commit/535b62c9ce72bf32b69f018d9467a18186d123a8)]: - - @squide/webpack-configs@1.2.6 - -## 1.0.3 - -### Patch Changes - -- [#154](https://github.com/gsoft-inc/wl-squide/pull/154) [`e440515`](https://github.com/gsoft-inc/wl-squide/commit/e4405150a3c364fd4029c345399891614a434176) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Updated packages. - -- Updated dependencies [[`e440515`](https://github.com/gsoft-inc/wl-squide/commit/e4405150a3c364fd4029c345399891614a434176)]: - - @squide/webpack-configs@1.2.5 - -## 1.0.2 - -### Patch Changes - -- [#152](https://github.com/gsoft-inc/wl-squide/pull/152) [`d27fe71`](https://github.com/gsoft-inc/wl-squide/commit/d27fe717f899e395c3f01af86aac3e015159d719) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Updated dependency versions. - -- Updated dependencies [[`d27fe71`](https://github.com/gsoft-inc/wl-squide/commit/d27fe717f899e395c3f01af86aac3e015159d719)]: - - @squide/webpack-configs@1.2.4 - -## 1.0.1 - -### Patch Changes - -- [#148](https://github.com/gsoft-inc/wl-squide/pull/148) [`a448347`](https://github.com/gsoft-inc/wl-squide/commit/a4483478bb8b7ef1f24513244e8c2410bdb86bc1) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Internal changes. - -- Updated dependencies [[`a448347`](https://github.com/gsoft-inc/wl-squide/commit/a4483478bb8b7ef1f24513244e8c2410bdb86bc1)]: - - @squide/webpack-configs@1.2.3 - -## 1.0.0 - -### Major Changes - -- [#144](https://github.com/gsoft-inc/wl-squide/pull/144) [`39d0bbe4`](https://github.com/gsoft-inc/wl-squide/commit/39d0bbe45902d54832e9aa8deb2c1949a2cf3c5f) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Initial release of the package. - -### Patch Changes - -- Updated dependencies []: - - @squide/webpack-configs@1.2.2 diff --git a/packages/firefly-configs/tests/__snapshots__/defineConfig.test.ts.snap b/packages/firefly-configs/tests/__snapshots__/defineConfig.test.ts.snap deleted file mode 100644 index 38301ed6a..000000000 --- a/packages/firefly-configs/tests/__snapshots__/defineConfig.test.ts.snap +++ /dev/null @@ -1,177 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`defineBuildHostConfig includes react-router and msw dependencies 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/msw": { - "eager": true, - "singleton": true, - }, - "@squide/react-router": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, - "react-router-dom": { - "eager": true, - "singleton": true, - }, - }, - }, - }, -} -`; - -exports[`defineBuildRemoteModuleConfig includes react-router and msw dependencies 1`] = ` -{ - "index": 2, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/msw": { - "eager": undefined, - "singleton": true, - }, - "@squide/react-router": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, - "react-router-dom": { - "eager": undefined, - "singleton": true, - }, - }, - }, - }, -} -`; - -exports[`defineDevHostConfig includes react-router and msw dependencies 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/msw": { - "eager": true, - "singleton": true, - }, - "@squide/react-router": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, - "react-router-dom": { - "eager": true, - "singleton": true, - }, - }, - }, - }, -} -`; - -exports[`defineDevRemoteModuleConfig includes react-router and msw dependencies 1`] = ` -{ - "index": 1, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/msw": { - "eager": undefined, - "singleton": true, - }, - "@squide/react-router": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, - "react-router-dom": { - "eager": undefined, - "singleton": true, - }, - }, - }, - }, -} -`; diff --git a/packages/firefly-configs/tests/defineConfig.test.ts b/packages/firefly-configs/tests/defineConfig.test.ts deleted file mode 100644 index cbe8b2d9a..000000000 --- a/packages/firefly-configs/tests/defineConfig.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { defineBuildConfig as defineSwcBuildConfig, defineDevConfig as defineSwcDevConfig } from "@workleap/swc-configs"; -import { findPlugin, matchConstructorName } from "@workleap/webpack-configs"; -import webpack from "webpack"; -import { defineBuildHostConfig, defineBuildRemoteModuleConfig, defineDevHostConfig, defineDevRemoteModuleConfig } from "../src/index.ts"; - -describe("defineDevHostConfig", () => { - const SwcConfig = defineSwcDevConfig({ - chrome: "116" - }); - - test("includes react-router and msw dependencies", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); - - expect(result).toMatchSnapshot(); - }); -}); - -describe("defineBuildHostConfig", () => { - const SwcConfig = defineSwcBuildConfig({ - chrome: "116" - }); - - test("includes react-router and msw dependencies", () => { - const config = defineBuildHostConfig(SwcConfig, "host"); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); - - expect(result).toMatchSnapshot(); - }); -}); - -describe("defineDevRemoteModuleConfig", () => { - const SwcConfig = defineSwcDevConfig({ - chrome: "116" - }); - - test("includes react-router and msw dependencies", () => { - const config = defineDevRemoteModuleConfig(SwcConfig, "remote1", 8081); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); - - expect(result).toMatchSnapshot(); - }); -}); - -describe("defineBuildRemoteModuleConfig", () => { - const SwcConfig = defineSwcBuildConfig({ - chrome: "116" - }); - - test("includes react-router and msw dependencies", () => { - const config = defineBuildRemoteModuleConfig(SwcConfig, "remote1"); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); - - expect(result).toMatchSnapshot(); - }); -}); - - diff --git a/packages/firefly-configs/.eslintrc.json b/packages/firefly-webpack-configs/.eslintrc.json similarity index 100% rename from packages/firefly-configs/.eslintrc.json rename to packages/firefly-webpack-configs/.eslintrc.json diff --git a/packages/webpack-module-federation/README.md b/packages/firefly-webpack-configs/README.md similarity index 91% rename from packages/webpack-module-federation/README.md rename to packages/firefly-webpack-configs/README.md index 9c25ac938..f01afdc93 100644 --- a/packages/webpack-module-federation/README.md +++ b/packages/firefly-webpack-configs/README.md @@ -1,4 +1,4 @@ -# @squide/webpack-module-federation +# @squide/firefly-webpack-configs ## Usage diff --git a/packages/firefly-configs/jest.config.ts b/packages/firefly-webpack-configs/jest.config.ts similarity index 100% rename from packages/firefly-configs/jest.config.ts rename to packages/firefly-webpack-configs/jest.config.ts diff --git a/packages/firefly-configs/package.json b/packages/firefly-webpack-configs/package.json similarity index 93% rename from packages/firefly-configs/package.json rename to packages/firefly-webpack-configs/package.json index aed7b5e57..6045a1595 100644 --- a/packages/firefly-configs/package.json +++ b/packages/firefly-webpack-configs/package.json @@ -1,5 +1,5 @@ { - "name": "@squide/firefly-configs", + "name": "@squide/firefly-webpack-configs", "author": "Workleap", "version": "1.0.6", "description": "Webpack configuration helpers for the Squide firefly technology stack.", @@ -16,8 +16,8 @@ "type": "module", "exports": { ".": { - "import": "./dist/index.js", "types": "./dist/index.d.ts", + "import": "./dist/index.js", "default": "./dist/index.js" } }, @@ -40,7 +40,8 @@ "webpack-dev-server": ">=5.0.0" }, "devDependencies": { - "@swc/core": "1.4.13", + "@module-federation/enhanced": "0.1.11", + "@swc/core": "1.4.17", "@swc/jest": "0.2.36", "@types/jest": "29.5.12", "@workleap/eslint-plugin": "3.2.2", diff --git a/packages/firefly-configs/src/index.ts b/packages/firefly-webpack-configs/src/index.ts similarity index 89% rename from packages/firefly-configs/src/index.ts rename to packages/firefly-webpack-configs/src/index.ts index c07502532..2e97f4bfc 100644 --- a/packages/firefly-configs/src/index.ts +++ b/packages/firefly-webpack-configs/src/index.ts @@ -12,6 +12,7 @@ import { type DefineRemoteModuleFederationPluginOptions, type Features, type ModuleFederationPluginOptions, + type RemoteDefinition, type Router } from "@squide/webpack-configs"; import type { SwcConfig } from "@workleap/swc-configs"; @@ -23,6 +24,7 @@ export { DefineHostModuleFederationPluginOptions, DefineRemoteModuleFederationPluginOptions, ModuleFederationPluginOptions, + RemoteDefinition, Router, defineRemoteModuleFederationPluginOptions }; @@ -34,8 +36,8 @@ export interface FireflyDefineDevHostConfigOptions extends DefineDevHostConfigOp } // The function return type is mandatory, otherwise we get an error TS4058. -export function defineDevHostConfig(swcConfig: SwcConfig, applicationName: string, port: number, { features = {}, ...options }: FireflyDefineDevHostConfigOptions = {}): webpack.Configuration { - return baseDefineDevHostConfig(swcConfig, applicationName, port, { +export function defineDevHostConfig(swcConfig: SwcConfig, applicationName: string, port: number, remotes: RemoteDefinition[], { features = {}, ...options }: FireflyDefineDevHostConfigOptions = {}): webpack.Configuration { + return baseDefineDevHostConfig(swcConfig, applicationName, port, remotes, { ...options, features: { router: "react-router", @@ -50,8 +52,8 @@ export interface FireflyDefineBuildHostConfigOptions extends DefineBuildHostConf } // The function return type is mandatory, otherwise we get an error TS4058. -export function defineBuildHostConfig(swcConfig: SwcConfig, applicationName: string, { features = {}, ...options }: FireflyDefineBuildHostConfigOptions = {}): webpack.Configuration { - return baseDefineBuildHostConfig(swcConfig, applicationName, { +export function defineBuildHostConfig(swcConfig: SwcConfig, applicationName: string, remotes: RemoteDefinition[], { features = {}, ...options }: FireflyDefineBuildHostConfigOptions = {}): webpack.Configuration { + return baseDefineBuildHostConfig(swcConfig, applicationName, remotes, { ...options, features: { router: "react-router", diff --git a/packages/firefly-configs/swc.jest.ts b/packages/firefly-webpack-configs/swc.jest.ts similarity index 100% rename from packages/firefly-configs/swc.jest.ts rename to packages/firefly-webpack-configs/swc.jest.ts diff --git a/packages/firefly-webpack-configs/tests/__snapshots__/defineConfig.test.ts.snap b/packages/firefly-webpack-configs/tests/__snapshots__/defineConfig.test.ts.snap new file mode 100644 index 000000000..a4f4aff0f --- /dev/null +++ b/packages/firefly-webpack-configs/tests/__snapshots__/defineConfig.test.ts.snap @@ -0,0 +1,179 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`defineBuildHostConfig includes react-router and msw dependencies 1`] = ` +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "@squide/msw": { + "eager": true, + "singleton": true, + }, + "@squide/react-router": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, + "react-router-dom": { + "eager": true, + "singleton": true, + }, + }, + }, + "name": "ModuleFederationPlugin", +} +`; + +exports[`defineBuildRemoteModuleConfig includes react-router and msw dependencies 1`] = ` +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "@squide/msw": { + "eager": undefined, + "singleton": true, + }, + "@squide/react-router": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, + }, + "react-router-dom": { + "eager": undefined, + "singleton": true, + }, + }, + }, + "name": "ModuleFederationPlugin", +} +`; + +exports[`defineDevHostConfig includes react-router and msw dependencies 1`] = ` +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "@squide/msw": { + "eager": true, + "singleton": true, + }, + "@squide/react-router": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, + "react-router-dom": { + "eager": true, + "singleton": true, + }, + }, + }, + "name": "ModuleFederationPlugin", +} +`; + +exports[`defineDevRemoteModuleConfig includes react-router and msw dependencies 1`] = ` +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "@squide/msw": { + "eager": undefined, + "singleton": true, + }, + "@squide/react-router": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, + }, + "react-router-dom": { + "eager": undefined, + "singleton": true, + }, + }, + }, + "name": "ModuleFederationPlugin", +} +`; diff --git a/packages/firefly-webpack-configs/tests/defineConfig.test.ts b/packages/firefly-webpack-configs/tests/defineConfig.test.ts new file mode 100644 index 000000000..87f994428 --- /dev/null +++ b/packages/firefly-webpack-configs/tests/defineConfig.test.ts @@ -0,0 +1,67 @@ +import { ModuleFederationPlugin } from "@module-federation/enhanced/webpack"; +import type { ModuleFederationPluginOptions } from "@squide/webpack-configs"; +import { defineBuildConfig as defineSwcBuildConfig, defineDevConfig as defineSwcDevConfig } from "@workleap/swc-configs"; +import { findPlugin, matchConstructorName } from "@workleap/webpack-configs"; +import type { WebpackPluginInstance } from "webpack"; +import { defineBuildHostConfig, defineBuildRemoteModuleConfig, defineDevHostConfig, defineDevRemoteModuleConfig } from "../src/index.ts"; + +// The following options are relative to the environment running the test and breaks on CI. +function prepareModuleFederationPluginForSnapshot(plugin: WebpackPluginInstance) { + delete (plugin._options as ModuleFederationPluginOptions)["runtimePlugins"]; + + return plugin; +} + +describe("defineDevHostConfig", () => { + const SwcConfig = defineSwcDevConfig({ + chrome: "116" + }); + + test("includes react-router and msw dependencies", () => { + const config = defineDevHostConfig(SwcConfig, "host", 8080, []); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); + + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); + }); +}); + +describe("defineBuildHostConfig", () => { + const SwcConfig = defineSwcBuildConfig({ + chrome: "116" + }); + + test("includes react-router and msw dependencies", () => { + const config = defineBuildHostConfig(SwcConfig, "host", []); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); + + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); + }); +}); + +describe("defineDevRemoteModuleConfig", () => { + const SwcConfig = defineSwcDevConfig({ + chrome: "116" + }); + + test("includes react-router and msw dependencies", () => { + const config = defineDevRemoteModuleConfig(SwcConfig, "remote1", 8081); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); + + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); + }); +}); + +describe("defineBuildRemoteModuleConfig", () => { + const SwcConfig = defineSwcBuildConfig({ + chrome: "116" + }); + + test("includes react-router and msw dependencies", () => { + const config = defineBuildRemoteModuleConfig(SwcConfig, "remote1"); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); + + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); + }); +}); + + diff --git a/packages/firefly-configs/tsconfig.json b/packages/firefly-webpack-configs/tsconfig.json similarity index 100% rename from packages/firefly-configs/tsconfig.json rename to packages/firefly-webpack-configs/tsconfig.json diff --git a/packages/firefly-configs/tsup.build.ts b/packages/firefly-webpack-configs/tsup.build.ts similarity index 100% rename from packages/firefly-configs/tsup.build.ts rename to packages/firefly-webpack-configs/tsup.build.ts diff --git a/packages/firefly-configs/tsup.dev.ts b/packages/firefly-webpack-configs/tsup.dev.ts similarity index 100% rename from packages/firefly-configs/tsup.dev.ts rename to packages/firefly-webpack-configs/tsup.dev.ts diff --git a/packages/firefly/package.json b/packages/firefly/package.json index 036a781f7..669b54110 100644 --- a/packages/firefly/package.json +++ b/packages/firefly/package.json @@ -16,8 +16,8 @@ "type": "module", "exports": { ".": { - "import": "./dist/index.js", "types": "./dist/index.d.ts", + "import": "./dist/index.js", "default": "./dist/index.js" } }, @@ -38,13 +38,13 @@ "react-router-dom": "*" }, "devDependencies": { - "@swc/core": "1.4.13", + "@swc/core": "1.4.17", "@swc/jest": "0.2.36", "@testing-library/jest-dom": "6.4.2", - "@testing-library/react": "15.0.1", + "@testing-library/react": "15.0.5", "@types/jest": "29.5.12", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", "@workleap/tsup-configs": "3.0.6", @@ -52,20 +52,20 @@ "eslint": "8.57.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", - "msw": "2.2.13", - "react": "18.2.0", - "react-dom": "18.2.0", + "msw": "2.2.14", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-router-dom": "6.22.3", + "react-router-dom": "6.23.0", "ts-jest": "29.1.2", "tsup": "8.0.2", "typescript": "5.4.5" }, "dependencies": { "@squide/core": "workspace:*", + "@squide/module-federation": "workspace:*", "@squide/msw": "workspace:*", - "@squide/react-router": "workspace:*", - "@squide/webpack-module-federation": "workspace:*" + "@squide/react-router": "workspace:*" }, "sideEffects": false, "engines": { diff --git a/packages/firefly/src/AppRouter.tsx b/packages/firefly/src/AppRouter.tsx index dfb082f17..1e93efb4a 100644 --- a/packages/firefly/src/AppRouter.tsx +++ b/packages/firefly/src/AppRouter.tsx @@ -1,7 +1,7 @@ import { isNil, useLogOnceLogger } from "@squide/core"; +import { useAreModulesReady, useAreModulesRegistered } from "@squide/module-federation"; import { useIsMswStarted } from "@squide/msw"; import { findRouteByPath, useIsRouteProtected, useRouteMatch, useRoutes, type Route } from "@squide/react-router"; -import { useAreModulesReady, useAreModulesRegistered } from "@squide/webpack-module-federation"; import { cloneElement, useCallback, useEffect, useMemo, type ReactElement } from "react"; import { ErrorBoundary, useErrorBoundary } from "react-error-boundary"; import { Outlet, useLocation, type RouterProviderProps } from "react-router-dom"; diff --git a/packages/firefly/src/fireflyRuntime.tsx b/packages/firefly/src/fireflyRuntime.tsx index 46edf9b46..6274ebaaf 100644 --- a/packages/firefly/src/fireflyRuntime.tsx +++ b/packages/firefly/src/fireflyRuntime.tsx @@ -3,30 +3,55 @@ import { MswPlugin } from "@squide/msw"; import { ReactRouterRuntime } from "@squide/react-router"; import type { RequestHandler } from "msw"; -export type FireflyRuntimeOptions = RuntimeOptions; +export interface FireflyRuntimeOptions extends RuntimeOptions { + useMsw?: boolean; +} export class FireflyRuntime extends ReactRouterRuntime { - readonly #mswPlugin: MswPlugin; + readonly #mswPlugin?: MswPlugin; + readonly #useMsw: boolean; + + constructor({ plugins, useMsw, ...options }: FireflyRuntimeOptions = {}) { + if (useMsw) { + const mswPlugin = new MswPlugin(); - constructor({ plugins, ...options }: FireflyRuntimeOptions = {}) { - const mswPlugin = new MswPlugin(); + super({ + plugins: [ + ...(plugins ?? []), + mswPlugin + ], + ...options + }); - super({ - plugins: [ - ...(plugins ?? []), - mswPlugin - ], - ...options - }); + this.#mswPlugin = mswPlugin; + this.#useMsw = true; + } else { + super({ + plugins, + ...options + }); - this.#mswPlugin = mswPlugin; + this.#useMsw = false; + } } registerRequestHandlers(handlers: RequestHandler[]) { + if (!this.#mswPlugin) { + throw new Error("[squide] Cannot register the provided MSW request handlers because the runtime hasn't been initialized with MSW. Did you instanciate the FireflyRuntime with the \"useMsw\" option?"); + } + this.#mswPlugin.registerRequestHandlers(handlers); } get requestHandlers(): RequestHandler[] { + if (!this.#mswPlugin) { + throw new Error("[squide] Cannot retrieve MSW request handlers because the runtime hasn't been initialized with MSW. Did you instanciate the FireflyRuntime with the \"useMsw\" option?"); + } + return this.#mswPlugin.requestHandlers; } + + get isMswEnabled() { + return this.#useMsw; + } } diff --git a/packages/firefly/src/index.ts b/packages/firefly/src/index.ts index ae0d9da33..f272bfb0a 100644 --- a/packages/firefly/src/index.ts +++ b/packages/firefly/src/index.ts @@ -1,7 +1,7 @@ export * from "@squide/core"; +export * from "@squide/module-federation"; export * from "@squide/msw"; export * from "@squide/react-router"; -export * from "@squide/webpack-module-federation"; export * from "./AppRouter.tsx"; export * from "./fireflyRuntime.tsx"; diff --git a/packages/firefly/tests/AppRouter.test.tsx b/packages/firefly/tests/AppRouter.test.tsx index 9a0b9551f..9257a29a8 100644 --- a/packages/firefly/tests/AppRouter.test.tsx +++ b/packages/firefly/tests/AppRouter.test.tsx @@ -2,8 +2,8 @@ // has been handled and additional tests will be added once bugs are discovered. import { RuntimeContext, __resetLocalModuleRegistrations, registerLocalModules } from "@squide/core"; +import { completeModuleRegistrations } from "@squide/module-federation"; import { __resetMswStatus, setMswAsStarted } from "@squide/msw"; -import { completeModuleRegistrations } from "@squide/webpack-module-federation"; import { render, screen } from "@testing-library/react"; import type { ReactElement, ReactNode } from "react"; import { RouterProvider, createBrowserRouter } from "react-router-dom"; diff --git a/packages/firefly/tsconfig.json b/packages/firefly/tsconfig.json index 7a4ba538f..431a2cd10 100644 --- a/packages/firefly/tsconfig.json +++ b/packages/firefly/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../core/src/index.ts"], "@squide/react-router": ["../react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../module-federation/src/index.ts"], "@squide/msw": ["../msw/src/index.ts"] } }, diff --git a/packages/i18next/package.json b/packages/i18next/package.json index 24ac11554..65be83b29 100644 --- a/packages/i18next/package.json +++ b/packages/i18next/package.json @@ -16,8 +16,8 @@ "type": "module", "exports": { ".": { - "import": "./dist/index.js", "types": "./dist/index.d.ts", + "import": "./dist/index.js", "default": "./dist/index.js" } }, @@ -38,23 +38,23 @@ "react-i18next": "*" }, "devDependencies": { - "@swc/core": "1.4.13", + "@swc/core": "1.4.17", "@swc/jest": "0.2.36", "@types/jest": "29.5.12", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", "@workleap/tsup-configs": "3.0.6", "@workleap/typescript-configs": "3.0.2", "eslint": "8.57.0", - "i18next": "23.11.1", + "i18next": "23.11.3", "i18next-browser-languagedetector": "7.2.1", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", - "react": "18.2.0", - "react-dom": "18.2.0", - "react-i18next": "14.1.0", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-i18next": "14.1.1", "ts-jest": "29.1.2", "tsup": "8.0.2", "typescript": "5.4.5" diff --git a/packages/webpack-module-federation/.eslintrc.json b/packages/module-federation/.eslintrc.json similarity index 100% rename from packages/webpack-module-federation/.eslintrc.json rename to packages/module-federation/.eslintrc.json diff --git a/packages/firefly-configs/README.md b/packages/module-federation/README.md similarity index 93% rename from packages/firefly-configs/README.md rename to packages/module-federation/README.md index a238675fe..7a9d6e896 100644 --- a/packages/firefly-configs/README.md +++ b/packages/module-federation/README.md @@ -1,4 +1,4 @@ -# @squide/firefly-configs +# @squide/module-federation ## Usage diff --git a/packages/webpack-module-federation/jest.config.ts b/packages/module-federation/jest.config.ts similarity index 100% rename from packages/webpack-module-federation/jest.config.ts rename to packages/module-federation/jest.config.ts diff --git a/packages/webpack-module-federation/package.json b/packages/module-federation/package.json similarity index 77% rename from packages/webpack-module-federation/package.json rename to packages/module-federation/package.json index 7a4d12fcb..8704ed1a1 100644 --- a/packages/webpack-module-federation/package.json +++ b/packages/module-federation/package.json @@ -1,5 +1,5 @@ { - "name": "@squide/webpack-module-federation", + "name": "@squide/module-federation", "author": "Workleap", "version": "4.0.0", "description": "Add support for Module Federation to @squide federated application shell.", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/gsoft-inc/wl-squide.git", - "directory": "packages/webpack-module-federation" + "directory": "packages/module-federation" }, "publishConfig": { "access": "public", @@ -16,8 +16,8 @@ "type": "module", "exports": { ".": { - "import": "./dist/index.js", "types": "./dist/index.d.ts", + "import": "./dist/index.js", "default": "./dist/index.js" } }, @@ -32,21 +32,15 @@ }, "peerDependencies": { "react": "*", - "react-dom": "*", - "webpack": ">=5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } + "react-dom": "*" }, "devDependencies": { - "@swc/core": "1.4.13", + "@swc/core": "1.4.17", "@swc/jest": "0.2.36", "@types/jest": "29.5.12", "@types/node": "20.12.7", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", "@workleap/tsup-configs": "3.0.6", @@ -54,13 +48,14 @@ "eslint": "8.57.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", "ts-jest": "29.1.2", "tsup": "8.0.2", "typescript": "5.4.5" }, "dependencies": { + "@module-federation/enhanced": "0.1.11", "@squide/core": "workspace:*" }, "sideEffects": false, diff --git a/packages/webpack-module-federation/src/completeModuleRegistrations.ts b/packages/module-federation/src/completeModuleRegistrations.ts similarity index 100% rename from packages/webpack-module-federation/src/completeModuleRegistrations.ts rename to packages/module-federation/src/completeModuleRegistrations.ts diff --git a/packages/webpack-module-federation/src/index.ts b/packages/module-federation/src/index.ts similarity index 89% rename from packages/webpack-module-federation/src/index.ts rename to packages/module-federation/src/index.ts index 3d81bc488..4c8e6d8ad 100644 --- a/packages/webpack-module-federation/src/index.ts +++ b/packages/module-federation/src/index.ts @@ -1,5 +1,4 @@ export * from "./completeModuleRegistrations.ts"; -export * from "./loadRemote.ts"; export * from "./registerRemoteModules.ts"; export * from "./remoteDefinition.ts"; export { useAreModulesReady } from "./useAreModulesReady.ts"; diff --git a/packages/webpack-module-federation/src/registerRemoteModules.ts b/packages/module-federation/src/registerRemoteModules.ts similarity index 76% rename from packages/webpack-module-federation/src/registerRemoteModules.ts rename to packages/module-federation/src/registerRemoteModules.ts index 05786b21d..7d9cc011b 100644 --- a/packages/webpack-module-federation/src/registerRemoteModules.ts +++ b/packages/module-federation/src/registerRemoteModules.ts @@ -1,10 +1,14 @@ +import { loadRemote as loadModuleFederationRemote } from "@module-federation/enhanced/runtime"; import { isFunction, isNil, registerModule, type DeferredRegistrationFunction, type Logger, type ModuleRegistrationStatus, type Runtime } from "@squide/core"; -import { loadRemote as loadModuleFederationRemote, type LoadRemoteFunction } from "./loadRemote.ts"; -import { RemoteEntryPoint, RemoteModuleName, type RemoteDefinition } from "./remoteDefinition.ts"; +import type { RemoteDefinition } from "./remoteDefinition.ts"; + +const RemoteRegisterModuleName = "register"; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type LoadRemoteFunction = (remoteName: string, moduleName: string) => Promise; interface DeferredRegistration { - url: string; - containerName: string; + remoteName: string; index: string; fct: DeferredRegistrationFunction; } @@ -16,11 +20,9 @@ export interface RegisterRemoteModulesOptions { export type RemoteModuleRegistrationStatusChangedListener = () => void; export interface RemoteModuleRegistrationError { - // The remote base URL. - url: string; - // The remote container name. - containerName: string; - // The remote resource module name. + // The name of the remote module. + remoteName: string; + // The name of the remote module resource. moduleName: string; // The registration error. error: unknown; @@ -62,46 +64,39 @@ export class RemoteModuleRegistry { this.#setRegistrationStatus("in-progress"); await Promise.allSettled(remotes.map(async (x, index) => { - let remoteUrl; - - const containerName = x.name; + const remoteName = x.name; try { - // Is included in the try/catch becase the URL could be invalid and cause an error. - remoteUrl = new URL(RemoteEntryPoint, x.url).toString(); - - runtime.logger.debug(`[squide] ${index + 1}/${remotes.length} Loading module "${RemoteModuleName}" from container "${containerName}" of remote "${remoteUrl}".`); + runtime.logger.debug(`[squide] ${index + 1}/${remotes.length} Loading module "${RemoteRegisterModuleName}" of remote "${remoteName}".`); - const module = await this.#loadRemote(remoteUrl, containerName, RemoteModuleName); + const module = await this.#loadRemote(remoteName, RemoteRegisterModuleName); if (isNil(module.register)) { - throw new Error(`[squide] A "register" function is not available for module "${RemoteModuleName}" of container "${containerName}" from remote "${remoteUrl}". Make sure your remote "./register.js" file export a function named "register".`); + throw new Error(`[squide] A "register" function is not available for module "${RemoteRegisterModuleName}" of remote "${remoteName}". Make sure your remote "./register.[js,jsx,ts.tsx]" file export a function named "register".`); } - runtime.logger.debug(`[squide] ${index + 1}/${remotes.length} Registering module "${RemoteModuleName}" from container "${containerName}" of remote "${remoteUrl}".`); + runtime.logger.debug(`[squide] ${index + 1}/${remotes.length} Registering module "${RemoteRegisterModuleName}" of remote "${remoteName}".`); const optionalDeferredRegistration = await registerModule(module.register, runtime, context); if (isFunction(optionalDeferredRegistration)) { this.#deferredRegistrations.push({ - url: remoteUrl, - containerName: x.name, + remoteName: x.name, index: `${index + 1}/${remotes.length}`, fct: optionalDeferredRegistration as DeferredRegistrationFunction }); } - runtime.logger.debug(`[squide] ${index + 1}/${remotes.length} Container "${containerName}" of remote "${remoteUrl}" registration completed.`); + runtime.logger.debug(`[squide] ${index + 1}/${remotes.length} The registration of the remote "${remoteName}" is completed.`); } catch (error: unknown) { runtime.logger.error( - `[squide] ${index + 1}/${remotes.length} An error occured while registering module "${RemoteModuleName}" from container "${containerName}" of remote "${remoteUrl}".`, + `[squide] ${index + 1}/${remotes.length} An error occured while registering module "${RemoteRegisterModuleName}" of remote "${remoteName}".`, error ); errors.push({ - url: remoteUrl ?? `Partial URL is: "${x.url}"`, - containerName, - moduleName: RemoteModuleName, + remoteName, + moduleName: RemoteRegisterModuleName, error }); } @@ -138,26 +133,25 @@ export class RemoteModuleRegistry { this.#setRegistrationStatus("in-completion"); - await Promise.allSettled(this.#deferredRegistrations.map(async ({ url, containerName, index, fct: deferredRegister }) => { - runtime.logger.debug(`[squide] ${index} Completing registration for module "${RemoteModuleName}" from container "${containerName}" of remote "${url}".`); + await Promise.allSettled(this.#deferredRegistrations.map(async ({ remoteName, index, fct: deferredRegister }) => { + runtime.logger.debug(`[squide] ${index} Completing registration for module "${RemoteRegisterModuleName}" of remote "${remoteName}".`); try { await deferredRegister(data); } catch (error: unknown) { runtime.logger.error( - `[squide] ${index} An error occured while completing the registration for module "${RemoteModuleName}" from container "${containerName}" of remote "${url}".`, + `[squide] ${index} An error occured while completing the registration for module "${RemoteRegisterModuleName}" of remote "${remoteName}".`, error ); errors.push({ - url, - containerName, - moduleName: RemoteModuleName, + remoteName, + moduleName: RemoteRegisterModuleName, error }); } - runtime.logger.debug(`[squide] ${index} Completed registration for module "${RemoteModuleName}" from container "${containerName}" of remote "${url}".`); + runtime.logger.debug(`[squide] ${index} Completed registration for module "${RemoteRegisterModuleName}" of remote "${remoteName}".`); })); this.#setRegistrationStatus("ready"); @@ -193,7 +187,7 @@ export class RemoteModuleRegistry { } } -const remoteModuleRegistry = new RemoteModuleRegistry(loadModuleFederationRemote); +const remoteModuleRegistry = new RemoteModuleRegistry((remoteName, moduleName) => loadModuleFederationRemote(`${remoteName}/${moduleName}`)); export function registerRemoteModules(remotes: RemoteDefinition[], runtime: TRuntime, options?: RegisterRemoteModulesOptions) { return remoteModuleRegistry.registerModules(remotes, runtime, options); diff --git a/packages/module-federation/src/remoteDefinition.ts b/packages/module-federation/src/remoteDefinition.ts new file mode 100644 index 000000000..2f71b1b6f --- /dev/null +++ b/packages/module-federation/src/remoteDefinition.ts @@ -0,0 +1,5 @@ +export interface RemoteDefinition { + // The name of the remote module. + name: string; +} + diff --git a/packages/webpack-module-federation/src/useAreModulesReady.ts b/packages/module-federation/src/useAreModulesReady.ts similarity index 99% rename from packages/webpack-module-federation/src/useAreModulesReady.ts rename to packages/module-federation/src/useAreModulesReady.ts index 4ba68d4a8..38e2a0e62 100644 --- a/packages/webpack-module-federation/src/useAreModulesReady.ts +++ b/packages/module-federation/src/useAreModulesReady.ts @@ -1,6 +1,5 @@ -import { useEffect, useMemo, useSyncExternalStore } from "react"; - import { addLocalModuleRegistrationStatusChangedListener, getLocalModuleRegistrationStatus, removeLocalModuleRegistrationStatusChangedListener, useRuntime, type ModuleRegistrationStatus } from "@squide/core"; +import { useEffect, useMemo, useSyncExternalStore } from "react"; import { addRemoteModuleRegistrationStatusChangedListener, getRemoteModuleRegistrationStatus, removeRemoteModuleRegistrationStatusChangedListener } from "./registerRemoteModules.ts"; export function areModulesReady(localModuleRegistrationStatus: ModuleRegistrationStatus, remoteModuleRegistrationStatus: ModuleRegistrationStatus) { diff --git a/packages/webpack-module-federation/src/useAreModulesRegistered.ts b/packages/module-federation/src/useAreModulesRegistered.ts similarity index 99% rename from packages/webpack-module-federation/src/useAreModulesRegistered.ts rename to packages/module-federation/src/useAreModulesRegistered.ts index e66a4cecb..db2202a00 100644 --- a/packages/webpack-module-federation/src/useAreModulesRegistered.ts +++ b/packages/module-federation/src/useAreModulesRegistered.ts @@ -1,6 +1,5 @@ -import { useMemo, useSyncExternalStore } from "react"; - import { addLocalModuleRegistrationStatusChangedListener, getLocalModuleRegistrationStatus, removeLocalModuleRegistrationStatusChangedListener, type ModuleRegistrationStatus } from "@squide/core"; +import { useMemo, useSyncExternalStore } from "react"; import { addRemoteModuleRegistrationStatusChangedListener, getRemoteModuleRegistrationStatus, removeRemoteModuleRegistrationStatusChangedListener } from "./registerRemoteModules.ts"; export function areModulesRegistered(localModuleRegistrationStatus: ModuleRegistrationStatus, remoteModuleRegistrationStatus: ModuleRegistrationStatus) { diff --git a/packages/webpack-module-federation/swc.jest.ts b/packages/module-federation/swc.jest.ts similarity index 100% rename from packages/webpack-module-federation/swc.jest.ts rename to packages/module-federation/swc.jest.ts diff --git a/packages/webpack-module-federation/tests/areModulesReady.test.tsx b/packages/module-federation/tests/areModulesReady.test.tsx similarity index 85% rename from packages/webpack-module-federation/tests/areModulesReady.test.tsx rename to packages/module-federation/tests/areModulesReady.test.tsx index 65dd4de3d..79a542184 100644 --- a/packages/webpack-module-federation/tests/areModulesReady.test.tsx +++ b/packages/module-federation/tests/areModulesReady.test.tsx @@ -62,9 +62,9 @@ test("when only remote modules are registered and they are ready, return true", })); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); await remoteModuleRegistry.completeModuleRegistrations(runtime, {}); @@ -98,9 +98,9 @@ test("when only remote module deferred registrations are registered and they are })); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); @@ -123,9 +123,9 @@ test("when local module deferred registrations and remote module deferred regist ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); await localModuleRegistry.completeModuleRegistrations(runtime, {}); @@ -148,9 +148,9 @@ test("when local module deferred registrations and remote modules are registered ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); await localModuleRegistry.completeModuleRegistrations(runtime, {}); @@ -173,9 +173,9 @@ test("when local modules and remote module deferred registrations are registered ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); await localModuleRegistry.completeModuleRegistrations(runtime, {}); @@ -208,9 +208,9 @@ test("when only remote module deferred registrations are registered and they are })); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(areModulesReady(localModuleRegistry.registrationStatus, remoteModuleRegistry.registrationStatus)).toBeFalsy(); @@ -230,9 +230,9 @@ test("when local module deferred registrations and remote module deferred regist ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(areModulesReady(localModuleRegistry.registrationStatus, remoteModuleRegistry.registrationStatus)).toBeFalsy(); @@ -252,9 +252,9 @@ test("when local module deferred registrations and remote module deferred regist ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); await localModuleRegistry.completeModuleRegistrations(runtime, {}); @@ -276,9 +276,9 @@ test("when local module deferred registrations and remote module deferred regist ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); await remoteModuleRegistry.completeModuleRegistrations(runtime, {}); diff --git a/packages/webpack-module-federation/tests/areModulesRegistered.test.tsx b/packages/module-federation/tests/areModulesRegistered.test.tsx similarity index 84% rename from packages/webpack-module-federation/tests/areModulesRegistered.test.tsx rename to packages/module-federation/tests/areModulesRegistered.test.tsx index 9f7c17a22..f59ba515e 100644 --- a/packages/webpack-module-federation/tests/areModulesRegistered.test.tsx +++ b/packages/module-federation/tests/areModulesRegistered.test.tsx @@ -60,9 +60,9 @@ test("when only remote modules are registered, return true", async () => { })); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(areModulesRegistered(localModuleRegistry.registrationStatus, remoteModuleRegistry.registrationStatus)).toBeTruthy(); @@ -82,9 +82,9 @@ test("when local modules and remote modules are registered, return true", async ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(areModulesRegistered(localModuleRegistry.registrationStatus, remoteModuleRegistry.registrationStatus)).toBeTruthy(); @@ -114,9 +114,9 @@ test("when only remote module deferred registrations are registered, return true })); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(areModulesRegistered(localModuleRegistry.registrationStatus, remoteModuleRegistry.registrationStatus)).toBeTruthy(); @@ -136,9 +136,9 @@ test("when local module deferred registrations and remote module deferred regist ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(areModulesRegistered(localModuleRegistry.registrationStatus, remoteModuleRegistry.registrationStatus)).toBeTruthy(); @@ -158,9 +158,9 @@ test("when local module deferred registrations and remote modules are registered ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(areModulesRegistered(localModuleRegistry.registrationStatus, remoteModuleRegistry.registrationStatus)).toBeTruthy(); @@ -180,9 +180,9 @@ test("when local modules and remote module deferred registrations are registered ], runtime); await remoteModuleRegistry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(areModulesRegistered(localModuleRegistry.registrationStatus, remoteModuleRegistry.registrationStatus)).toBeTruthy(); diff --git a/packages/webpack-module-federation/tests/completeRemoteModuleRegistrations.test.ts b/packages/module-federation/tests/completeRemoteModuleRegistrations.test.ts similarity index 83% rename from packages/webpack-module-federation/tests/completeRemoteModuleRegistrations.test.ts rename to packages/module-federation/tests/completeRemoteModuleRegistrations.test.ts index 7f61f9254..b570ee379 100644 --- a/packages/webpack-module-federation/tests/completeRemoteModuleRegistrations.test.ts +++ b/packages/module-federation/tests/completeRemoteModuleRegistrations.test.ts @@ -43,8 +43,8 @@ test("when called twice, throw an error", async () => { const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" } ], runtime); await registry.completeModuleRegistrations(runtime, {}); @@ -61,8 +61,8 @@ test("when called for the first time but the registration status is already \"re const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" } ], runtime); expect(registry.registrationStatus).toBe("ready"); @@ -93,9 +93,9 @@ test("can complete all the deferred registrations", async () => { const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); await registry.completeModuleRegistrations(runtime, {}); @@ -113,9 +113,9 @@ test("when all the deferred registrations are completed, set the status to \"rea const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(registry.registrationStatus).toBe("registered"); @@ -148,9 +148,9 @@ test("when a deferred registration is asynchronous, the function can be awaited" let hasBeenCompleted = false; await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); await registry.completeModuleRegistrations(runtime, {}); @@ -178,9 +178,9 @@ test("when a deferred registration fail, complete the remaining deferred registr const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); await registry.completeModuleRegistrations(runtime, {}); @@ -206,9 +206,9 @@ test("when a deferred registration fail, return the error", async () => { const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); const errors = await registry.completeModuleRegistrations(runtime, {}); @@ -238,9 +238,9 @@ test("when data is provided, all the deferred registrations receive the data obj const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); const data = { diff --git a/packages/webpack-module-federation/tests/registerRemoteModules.test.ts b/packages/module-federation/tests/registerRemoteModules.test.ts similarity index 78% rename from packages/webpack-module-federation/tests/registerRemoteModules.test.ts rename to packages/module-federation/tests/registerRemoteModules.test.ts index 73e3de949..a4f706799 100644 --- a/packages/webpack-module-federation/tests/registerRemoteModules.test.ts +++ b/packages/module-federation/tests/registerRemoteModules.test.ts @@ -42,9 +42,9 @@ test("can register all the modules", async () => { const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(register1).toHaveBeenCalled(); @@ -59,9 +59,9 @@ test("when called twice, throw an error", async () => { const registry = new RemoteModuleRegistry(loadRemote); - await registry.registerModules([{ name: "Dummy-1", url: "http://anything1.com" }], runtime); + await registry.registerModules([{ name: "Dummy-1" }], runtime); - await expect(async () => registry.registerModules([{ name: "Dummy-1", url: "http://anything1.com" }], runtime)).rejects.toThrow(/The registerRemoteModules function can only be called once/); + await expect(async () => registry.registerModules([{ name: "Dummy-1" }], runtime)).rejects.toThrow(/The registerRemoteModules function can only be called once/); }); test("when there are no deferred registrations, once all the modules are registered, set the status to \"ready\"", async () => { @@ -72,8 +72,8 @@ test("when there are no deferred registrations, once all the modules are registe const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" } ], runtime); expect(registry.registrationStatus).toBe("ready"); @@ -87,8 +87,8 @@ test("when there are deferred registrations, once all the modules are registered const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" } ], runtime); expect(registry.registrationStatus).toBe("registered"); @@ -114,9 +114,9 @@ test("when a module registration fail, register the remaining modules", async () const registry = new RemoteModuleRegistry(loadRemote); await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(register1).toHaveBeenCalled(); @@ -140,9 +140,9 @@ test("when a module registration fail, return the error", async () => { const registry = new RemoteModuleRegistry(loadRemote); const errors = await registry.registerModules([ - { name: "Dummy-1", url: "http://anything1.com" }, - { name: "Dummy-2", url: "http://anything2.com" }, - { name: "Dummy-3", url: "http://anything3.com" } + { name: "Dummy-1" }, + { name: "Dummy-2" }, + { name: "Dummy-3" } ], runtime); expect(errors.length).toBe(1); diff --git a/packages/webpack-module-federation/tsconfig.json b/packages/module-federation/tsconfig.json similarity index 100% rename from packages/webpack-module-federation/tsconfig.json rename to packages/module-federation/tsconfig.json diff --git a/packages/webpack-module-federation/tsup.build.ts b/packages/module-federation/tsup.build.ts similarity index 100% rename from packages/webpack-module-federation/tsup.build.ts rename to packages/module-federation/tsup.build.ts diff --git a/packages/webpack-module-federation/tsup.dev.ts b/packages/module-federation/tsup.dev.ts similarity index 100% rename from packages/webpack-module-federation/tsup.dev.ts rename to packages/module-federation/tsup.dev.ts diff --git a/packages/msw/package.json b/packages/msw/package.json index 919b86967..9e26bd3d4 100644 --- a/packages/msw/package.json +++ b/packages/msw/package.json @@ -16,8 +16,8 @@ "type": "module", "exports": { ".": { - "import": "./dist/index.js", "types": "./dist/index.d.ts", + "import": "./dist/index.js", "default": "./dist/index.js" } }, @@ -41,15 +41,15 @@ } }, "devDependencies": { - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/tsup-configs": "3.0.6", "@workleap/typescript-configs": "3.0.2", "eslint": "8.57.0", - "msw": "2.2.13", - "react": "18.2.0", - "react-dom": "18.2.0", + "msw": "2.2.14", + "react": "18.3.1", + "react-dom": "18.3.1", "tsup": "8.0.2", "typescript": "5.4.5" }, diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 091cde3f5..4497d6e0f 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -16,8 +16,8 @@ "type": "module", "exports": { ".": { - "import": "./dist/index.js", "types": "./dist/index.d.ts", + "import": "./dist/index.js", "default": "./dist/index.js" } }, @@ -36,13 +36,13 @@ "react-router-dom": "*" }, "devDependencies": { - "@swc/core": "1.4.13", + "@swc/core": "1.4.17", "@swc/jest": "0.2.36", - "@testing-library/react": "15.0.1", + "@testing-library/react": "15.0.5", "@types/jest": "29.5.12", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", - "@types/react-test-renderer": "18.0.7", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", + "@types/react-test-renderer": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", "@workleap/tsup-configs": "3.0.6", @@ -50,10 +50,10 @@ "eslint": "8.57.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", - "react": "18.2.0", - "react-dom": "18.2.0", - "react-router-dom": "6.22.3", - "react-test-renderer": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-router-dom": "6.23.0", + "react-test-renderer": "18.3.1", "ts-jest": "29.1.2", "tsup": "8.0.2", "typescript": "5.4.5" diff --git a/packages/webpack-configs/package.json b/packages/webpack-configs/package.json index b59cf8e3d..1f36822a1 100644 --- a/packages/webpack-configs/package.json +++ b/packages/webpack-configs/package.json @@ -16,8 +16,8 @@ "type": "module", "exports": { ".": { - "import": "./dist/index.js", "types": "./dist/index.d.ts", + "import": "./dist/index.js", "default": "./dist/index.js" } }, @@ -40,10 +40,11 @@ "webpack-dev-server": ">=5.0.0" }, "devDependencies": { - "@swc/core": "1.4.13", + "@swc/core": "1.4.17", "@swc/jest": "0.2.36", "@types/jest": "29.5.12", "@types/node": "20.12.7", + "@types/semver": "7.5.8", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", "@workleap/tsup-configs": "3.0.6", @@ -56,9 +57,11 @@ "webpack": "5.91.0" }, "dependencies": { + "@module-federation/enhanced": "0.1.11", "@workleap/webpack-configs": "1.5.1", "deepmerge": "4.3.1", - "html-webpack-plugin": "5.6.0" + "html-webpack-plugin": "5.6.0", + "semver": "7.6.0" }, "engines": { "node": ">=20.0.0" diff --git a/packages/webpack-configs/src/defineConfig.ts b/packages/webpack-configs/src/defineConfig.ts index 8ae25ad1d..aed9e1fe8 100644 --- a/packages/webpack-configs/src/defineConfig.ts +++ b/packages/webpack-configs/src/defineConfig.ts @@ -1,17 +1,28 @@ +import { ModuleFederationPlugin } from "@module-federation/enhanced/webpack"; import type { SwcConfig } from "@workleap/swc-configs"; import { defineBuildConfig, defineBuildHtmlWebpackPluginConfig, defineDevConfig, defineDevHtmlWebpackPluginConfig, type DefineBuildConfigOptions, type DefineDevConfigOptions, type WebpackConfig, type WebpackConfigTransformer } from "@workleap/webpack-configs"; import merge from "deepmerge"; import type HtmlWebpackPlugin from "html-webpack-plugin"; import path from "node:path"; -import webpack from "webpack"; +import url from "node:url"; +import type webpack from "webpack"; + +const directoryName = url.fileURLToPath(new URL(".", import.meta.url)); + +// Must be similar to the module name defined in @workleap/module-federation. +const RemoteRegisterModuleName = "./register"; +const RemoteEntryPoint = "remoteEntry.js"; // Webpack doesn't export ModuleFederationPlugin typings. -export type ModuleFederationPluginOptions = ConstructorParameters[0]; -export type ModuleFederationSharedOption = ModuleFederationPluginOptions["shared"]; +export type ModuleFederationPluginOptions = ConstructorParameters[0]; +export type ModuleFederationRemotesOption = ModuleFederationPluginOptions["remotes"]; + +export type ModuleFederationRuntimePlugins = NonNullable; +export type ModuleFederationShared = NonNullable; // Generally, only the host application should have eager dependencies. // For more informations about shared dependencies refer to: https://github.com/patricklafrance/wmf-versioning -function getDefaultSharedDependencies(features: Features, isHost: boolean): ModuleFederationSharedOption { +function getDefaultSharedDependencies(features: Features, isHost: boolean): ModuleFederationShared { return { "react": { singleton: true, @@ -28,7 +39,7 @@ function getDefaultSharedDependencies(features: Features, isHost: boolean): Modu singleton: true, eager: isHost ? true : undefined }, - "@squide/webpack-module-federation": { + "@squide/module-federation": { singleton: true, eager: isHost ? true : undefined } @@ -45,7 +56,7 @@ export interface Features { // Generally, only the host application should have eager dependencies. // For more informations about shared dependencies refer to: https://github.com/patricklafrance/wmf-versioning -function getReactRouterSharedDependencies(isHost: boolean): ModuleFederationSharedOption { +function getReactRouterSharedDependencies(isHost: boolean): ModuleFederationShared { return { "react-router-dom": { singleton: true, @@ -58,7 +69,7 @@ function getReactRouterSharedDependencies(isHost: boolean): ModuleFederationShar }; } -function getMswSharedDependency(isHost: boolean): ModuleFederationSharedOption { +function getMswSharedDependency(isHost: boolean): ModuleFederationShared { return { "@squide/msw": { singleton: true, @@ -67,7 +78,7 @@ function getMswSharedDependency(isHost: boolean): ModuleFederationSharedOption { }; } -function getI18nextSharedDependency(isHost: boolean): ModuleFederationSharedOption { +function getI18nextSharedDependency(isHost: boolean): ModuleFederationShared { return { "i18next": { singleton: true, @@ -117,17 +128,40 @@ const forceNamedChunkIdsTransformer: WebpackConfigTransformer = (config: Webpack return config; }; +function createSetUniqueNameTransformer(uniqueName: string) { + const transformer: WebpackConfigTransformer = (config: WebpackConfig) => { + config.output = { + ...(config.output ?? {}), + // Every host and remotes must have a "uniqueName" for React Refresh to work + // with Module Federation. + uniqueName + }; + + return config; + }; + + return transformer; +} + //////////////////////////// Host ///////////////////////////// +export interface RemoteDefinition { + // The name of the remote module. + name: string; + // The URL of the remote, ex: http://localhost:8081. + url: string; +} + export interface DefineHostModuleFederationPluginOptions extends ModuleFederationPluginOptions { features?: Features; } // The function return type is mandatory, otherwise we got an error TS4058. -export function defineHostModuleFederationPluginOptions(applicationName: string, options: DefineHostModuleFederationPluginOptions): ModuleFederationPluginOptions { +export function defineHostModuleFederationPluginOptions(applicationName: string, remotes: RemoteDefinition[], options: DefineHostModuleFederationPluginOptions): ModuleFederationPluginOptions { const { features = {}, shared = {}, + runtimePlugins = [], ...rest } = options; @@ -135,13 +169,31 @@ export function defineHostModuleFederationPluginOptions(applicationName: string, return { name: applicationName, + // Since Squide modules are only exporting a register function with a standardized API + // it doesn't requires any typing. + dts: false, + // Currently only supporting .js remotes. + manifest: false, + remotes: remotes.reduce((acc, x) => { + // Object reduce are always a mess for typings. + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + acc[x.name] = `${x.name}@${x.url}/${RemoteEntryPoint}`; + + return acc; + }, {}) as ModuleFederationRemotesOption, // Deep merging the default shared dependencies with the provided shared dependencies // to allow the consumer to easily override a default option of a shared dependency // without extending the whole default shared dependencies object. shared: merge.all([ defaultSharedDependencies, shared - ]) as ModuleFederationPluginOptions["shared"], + ]) as ModuleFederationShared, + runtimePlugins: [ + path.resolve(directoryName, "./sharedDependenciesResolutionPlugin.js"), + path.resolve(directoryName, "./nonCacheableRemoteEntryPlugin.js"), + ...runtimePlugins + ], ...rest }; } @@ -156,24 +208,27 @@ function trySetHtmlWebpackPluginPublicPath(options: HtmlWebpackPlugin.Options) { return options; } -export interface DefineDevHostConfigOptions extends Omit { +export interface DefineDevHostConfigOptions extends Omit { htmlWebpackPluginOptions?: HtmlWebpackPlugin.Options; features?: Features; - sharedDependencies?: ModuleFederationPluginOptions["shared"]; + sharedDependencies?: ModuleFederationShared; + runtimePlugins?: ModuleFederationRuntimePlugins; moduleFederationPluginOptions?: ModuleFederationPluginOptions; } // The function return type is mandatory, otherwise we got an error TS4058. -export function defineDevHostConfig(swcConfig: SwcConfig, applicationName: string, port: number, options: DefineDevHostConfigOptions = {}): webpack.Configuration { +export function defineDevHostConfig(swcConfig: SwcConfig, applicationName: string, port: number, remotes: RemoteDefinition[], options: DefineDevHostConfigOptions = {}): webpack.Configuration { const { entry = path.resolve("./src/index.ts"), publicPath = "auto", cache, plugins = [], htmlWebpackPluginOptions, + transformers = [], features, sharedDependencies, - moduleFederationPluginOptions = defineHostModuleFederationPluginOptions(applicationName, { features, shared: sharedDependencies }), + runtimePlugins, + moduleFederationPluginOptions = defineHostModuleFederationPluginOptions(applicationName, remotes, { features, shared: sharedDependencies, runtimePlugins }), ...webpackOptions } = options; @@ -185,21 +240,26 @@ export function defineDevHostConfig(swcConfig: SwcConfig, applicationName: strin htmlWebpackPlugin: trySetHtmlWebpackPluginPublicPath(htmlWebpackPluginOptions ?? defineBuildHtmlWebpackPluginConfig()), plugins: [ ...plugins, - new webpack.container.ModuleFederationPlugin(moduleFederationPluginOptions) + new ModuleFederationPlugin(moduleFederationPluginOptions) ], - ...webpackOptions + ...webpackOptions, + transformers: [ + createSetUniqueNameTransformer(applicationName), + ...transformers + ] }); } export interface DefineBuildHostConfigOptions extends Omit { htmlWebpackPluginOptions?: HtmlWebpackPlugin.Options; features?: Features; - sharedDependencies?: ModuleFederationPluginOptions["shared"]; + sharedDependencies?: ModuleFederationShared; + runtimePlugins?: ModuleFederationRuntimePlugins; moduleFederationPluginOptions?: ModuleFederationPluginOptions; } // The function return type is mandatory, otherwise we got an error TS4058. -export function defineBuildHostConfig(swcConfig: SwcConfig, applicationName: string, options: DefineBuildHostConfigOptions = {}): webpack.Configuration { +export function defineBuildHostConfig(swcConfig: SwcConfig, applicationName: string, remotes: RemoteDefinition[], options: DefineBuildHostConfigOptions = {}): webpack.Configuration { const { entry = path.resolve("./src/index.ts"), publicPath = "auto", @@ -208,7 +268,8 @@ export function defineBuildHostConfig(swcConfig: SwcConfig, applicationName: str transformers = [], features, sharedDependencies, - moduleFederationPluginOptions = defineHostModuleFederationPluginOptions(applicationName, { features, shared: sharedDependencies }), + runtimePlugins, + moduleFederationPluginOptions = defineHostModuleFederationPluginOptions(applicationName, remotes, { features, shared: sharedDependencies, runtimePlugins }), ...webpackOptions } = options; @@ -218,10 +279,11 @@ export function defineBuildHostConfig(swcConfig: SwcConfig, applicationName: str htmlWebpackPlugin: trySetHtmlWebpackPluginPublicPath(htmlWebpackPluginOptions ?? defineDevHtmlWebpackPluginConfig()), plugins: [ ...plugins, - new webpack.container.ModuleFederationPlugin(moduleFederationPluginOptions) + new ModuleFederationPlugin(moduleFederationPluginOptions) ], transformers: [ forceNamedChunkIdsTransformer, + createSetUniqueNameTransformer(applicationName), ...transformers ], ...webpackOptions @@ -240,6 +302,7 @@ export function defineRemoteModuleFederationPluginOptions(applicationName: strin features = {}, exposes = {}, shared = {}, + runtimePlugins = [], ...rest } = options; @@ -247,9 +310,14 @@ export function defineRemoteModuleFederationPluginOptions(applicationName: strin return { name: applicationName, - filename: "remoteEntry.js", + // Since Squide modules are only exporting a register function with a standardized API + // it doesn't requires any typing. + dts: false, + // Currently only supporting .js remotes. + manifest: false, + filename: RemoteEntryPoint, exposes: { - "./register": "./src/register", + [RemoteRegisterModuleName]: "./src/register", ...exposes }, // Deep merging the default shared dependencies with the provided shared dependencies @@ -258,7 +326,12 @@ export function defineRemoteModuleFederationPluginOptions(applicationName: strin shared: merge.all([ defaultSharedDependencies, shared - ]) as ModuleFederationPluginOptions["shared"], + ]) as ModuleFederationShared, + runtimePlugins: [ + path.resolve(directoryName, "./sharedDependenciesResolutionPlugin.js"), + path.resolve(directoryName, "./nonCacheableRemoteEntryPlugin.js"), + ...runtimePlugins + ], ...rest }; } @@ -279,9 +352,10 @@ const devRemoteModuleTransformer: WebpackConfigTransformer = (config: WebpackCon return config; }; -export interface DefineDevRemoteModuleConfigOptions extends Omit { +export interface DefineDevRemoteModuleConfigOptions extends Omit { features?: Features; - sharedDependencies?: ModuleFederationPluginOptions["shared"]; + sharedDependencies?: ModuleFederationShared; + runtimePlugins?: ModuleFederationRuntimePlugins; moduleFederationPluginOptions?: ModuleFederationPluginOptions; } @@ -296,7 +370,8 @@ export function defineDevRemoteModuleConfig(swcConfig: SwcConfig, applicationNam transformers = [], features, sharedDependencies, - moduleFederationPluginOptions = defineRemoteModuleFederationPluginOptions(applicationName, { features, shared: sharedDependencies }), + runtimePlugins, + moduleFederationPluginOptions = defineRemoteModuleFederationPluginOptions(applicationName, { features, shared: sharedDependencies, runtimePlugins }), ...webpackOptions } = options; @@ -305,17 +380,17 @@ export function defineDevRemoteModuleConfig(swcConfig: SwcConfig, applicationNam port, publicPath, cache, - fastRefresh: false, htmlWebpackPlugin, // Disable the error overlay by default for remotes as otherwise every remote module's error overlay will be // stack on top of the host application's error overlay. overlay: false, plugins: [ ...plugins, - new webpack.container.ModuleFederationPlugin(moduleFederationPluginOptions) + new ModuleFederationPlugin(moduleFederationPluginOptions) ], transformers: [ devRemoteModuleTransformer, + createSetUniqueNameTransformer(applicationName), ...transformers ], ...webpackOptions @@ -324,7 +399,8 @@ export function defineDevRemoteModuleConfig(swcConfig: SwcConfig, applicationNam export interface DefineBuildRemoteModuleConfigOptions extends DefineBuildConfigOptions { features?: Features; - sharedDependencies?: ModuleFederationPluginOptions["shared"]; + sharedDependencies?: ModuleFederationShared; + runtimePlugins?: ModuleFederationRuntimePlugins; moduleFederationPluginOptions?: ModuleFederationPluginOptions; } @@ -338,7 +414,8 @@ export function defineBuildRemoteModuleConfig(swcConfig: SwcConfig, applicationN transformers = [], features, sharedDependencies, - moduleFederationPluginOptions = defineRemoteModuleFederationPluginOptions(applicationName, { features, shared: sharedDependencies }), + runtimePlugins, + moduleFederationPluginOptions = defineRemoteModuleFederationPluginOptions(applicationName, { features, shared: sharedDependencies, runtimePlugins }), ...webpackOptions } = options; @@ -348,10 +425,11 @@ export function defineBuildRemoteModuleConfig(swcConfig: SwcConfig, applicationN htmlWebpackPlugin, plugins: [ ...plugins, - new webpack.container.ModuleFederationPlugin(moduleFederationPluginOptions) + new ModuleFederationPlugin(moduleFederationPluginOptions) ], transformers: [ forceNamedChunkIdsTransformer, + createSetUniqueNameTransformer(applicationName), ...transformers ], ...webpackOptions diff --git a/packages/webpack-configs/src/index.ts b/packages/webpack-configs/src/index.ts index 208c7a889..10075443f 100644 --- a/packages/webpack-configs/src/index.ts +++ b/packages/webpack-configs/src/index.ts @@ -1,3 +1,3 @@ export * from "@workleap/webpack-configs"; - export * from "./defineConfig.ts"; + diff --git a/packages/webpack-configs/src/nonCacheableRemoteEntryPlugin.ts b/packages/webpack-configs/src/nonCacheableRemoteEntryPlugin.ts new file mode 100644 index 000000000..195600fb3 --- /dev/null +++ b/packages/webpack-configs/src/nonCacheableRemoteEntryPlugin.ts @@ -0,0 +1,20 @@ +import type { FederationRuntimePlugin } from "@module-federation/enhanced/runtime"; + +const plugin: () => FederationRuntimePlugin = () => { + return { + name: "non-cacheable-remote-entry-plugin", + createScript: function({ url }) { + const element = document.createElement("script"); + + // Adding a timestamp to make sure the remote entry points are never cached. + // View: https://github.com/module-federation/module-federation-examples/issues/566. + element.src = `${url}?t=${Date.now()}`; + element.type = "text/javascript"; + element.async = true; + + return element; + } + }; +}; + +export default plugin; diff --git a/packages/webpack-configs/src/sharedDependenciesResolutionPlugin.ts b/packages/webpack-configs/src/sharedDependenciesResolutionPlugin.ts new file mode 100644 index 000000000..036a987a5 --- /dev/null +++ b/packages/webpack-configs/src/sharedDependenciesResolutionPlugin.ts @@ -0,0 +1,164 @@ +/* +This custom share dependency resolution strategy ensure that only the host app can ask for a new major version of a library. +Otherwise, any remote can request for an higher non-major version. + +Examples: + +host: 2.0 +remote-1: 2.1 <----- +remote-2: 2.0 + +host: 2.0 <----- +remote-1: 3.1 +remote-2: 2.0 + +host: 2.0 +remote-1: 3.1 +remote-2: 2.1 <----- + +host: >2.0 +remote-1: 3.1 +remote-2: 2.1 <----- +*/ + +import type { FederationHost, FederationRuntimePlugin } from "@module-federation/enhanced/runtime"; +import { minVersion, parse, rcompare, type SemVer } from "semver"; + +type Shared = FederationHost["shareScopeMap"][string][string][string]; + +// Toggle to "true" to facilitate the debugging of this plugin. +const isDebug = false; + +function log(...args: unknown[]) { + if (isDebug) { + console.log(...args); + } +} + +function findHighestVersionForMajor(entries: Shared[], major: number) { + return entries.find(x => { + return parse(x.version)!.major === major; + }) as Shared; +} + +interface ResolveSharedDependencyResult { + resolvedEntry: Shared; + highestVersionEntry: Shared; +} + +// The return type is required otherwise we get the following error: error TS2742: The inferred type of 'resolveSharedDependency' cannot be named without a reference to. +export function resolveSharedDependency(pkgName: string, entries: Shared[], logFct: (...rest: unknown[]) => void = () => {}): ResolveSharedDependencyResult { + const cleanedEntries = entries.map(x => ({ + ...x, + // Removing any special characters like >,>=,^,~ etc... + version: minVersion(x.version)!.version + })); + + // From higher to lower versions. + const sortedEntries = cleanedEntries.sort((x, y) => rcompare(x.version, y.version)); + + logFct("[squide] Sorted the entries by version from higher to lower", sortedEntries); + + const highestVersionEntry = sortedEntries[0]; + + logFct(`[squide] ${pkgName} highest requested version is`, highestVersionEntry.version, highestVersionEntry); + + // The host is always right! + if (highestVersionEntry.from === "host") { + logFct("[squide] %cThis is the host version%c, great, resolving to:", "color: black; background-color: pink;", "", highestVersionEntry.version, highestVersionEntry); + + return { + resolvedEntry: highestVersionEntry, + highestVersionEntry: highestVersionEntry + }; + } + + logFct(`[squide] ${pkgName} Highest requested version is not from the host.`); + + const hostEntry = sortedEntries.find(x => x.from === "host"); + + // Found nothing, that's odd but let's not break the app for this. + if (!hostEntry) { + logFct(`[squide] The host is not requesting any version of ${pkgName}, %caborting%c.`, "color: black; background-color: pink;", ""); + + return { + resolvedEntry: highestVersionEntry, + highestVersionEntry: highestVersionEntry + }; + } + + logFct(`[squide] ${pkgName} version requested by the host is:`, hostEntry.version, hostEntry); + + const parsedHighestVersion = parse(highestVersionEntry.version) as SemVer; + const parsedHostVersion = parse(hostEntry.version) as SemVer; + + // Major versions should always be introduced by the host application. + if (parsedHighestVersion.major === parsedHostVersion.major) { + logFct(`[squide] Resolving to %c${parsedHighestVersion.major}%c.`, "color: black; background-color: pink;", ""); + + return { + resolvedEntry: highestVersionEntry, + highestVersionEntry: highestVersionEntry + }; + } + + logFct("[squide] The major number of the highest requested version is higher than the major number of the version requested by the host, looking for another version to resolve to."); + + // Start at the second entry since the first entry is the current higher version entry. + // The result could either be the actual host entry or any other entry that is higher than the version requested + // by the host, but match the host entry major version number. + const fallbackEntry = findHighestVersionForMajor(sortedEntries.splice(1), parsedHostVersion.major); + + logFct(`[squide] The %chighest requested version%c for ${pkgName} that is in-range with the requested host major version number is:`, "color: black; background-color: pink;", "", fallbackEntry.version, fallbackEntry); + + return { + resolvedEntry: fallbackEntry, + highestVersionEntry: highestVersionEntry + }; +} + +const plugin: () => FederationRuntimePlugin = () => { + return { + name: "shared-dependencies-resolution-plugin", + resolveShare: function(args) { + const { shareScopeMap, scope, pkgName } = args; + + log(`[squide] Resolving ${pkgName}:`, args); + + // This custom strategy only applies to singleton shared dependencies. + const entries = Object.values(shareScopeMap[scope][pkgName]).filter(x => x.shareConfig.singleton); + + // Not a singleton dependency. + if (entries.length === 0) { + log(`[squide] ${pkgName} is not a singleton dependency, aborting.`); + + return args; + } + + // If there's only one version entry, then it means that everyone is requesting the same version + // of the dependency. + if (entries.length <= 1) { + log(`[squide] There's only one version requested for ${pkgName}, resolving to:`, entries[0].version, entries[0]); + + return args; + } + + args.resolver = () => { + log(`[squide] There's %cmore than one requested version%c for ${pkgName}:`, "color: black; background-color: pink;", "", entries.length, shareScopeMap[scope][pkgName]); + + const { resolvedEntry, highestVersionEntry } = resolveSharedDependency(pkgName, entries, log); + + if (resolvedEntry.version !== highestVersionEntry.version) { + // eslint-disable-next-line max-len + console.log(`%c[squide] "${highestVersionEntry.from}" requested version "${highestVersionEntry.version}" of "${pkgName}". This version is higher than the major number of the version requested by the host for this dependency (${resolvedEntry.version}). The version for "${pkgName}" has been forced to "${resolvedEntry.version}".`, "color: white; background-color: red;"); + } + + return resolvedEntry; + }; + + return args; + } + }; +}; + +export default plugin; diff --git a/packages/webpack-configs/swc.jest.ts b/packages/webpack-configs/swc.jest.ts index 2e6bdb4ce..f58241822 100644 --- a/packages/webpack-configs/swc.jest.ts +++ b/packages/webpack-configs/swc.jest.ts @@ -1,3 +1,13 @@ import { defineJestConfig } from "@workleap/swc-configs"; +// const commonJsTransformer: SwcConfigTransformer = config => { +// return { +// ...config, +// module: { +// // The output module resolution system that the code will be compiled for. +// type: "commonjs" +// } +// }; +// }; + export const swcConfig = defineJestConfig(); diff --git a/packages/webpack-configs/tests/__snapshots__/defineConfig.test.ts.snap b/packages/webpack-configs/tests/__snapshots__/defineConfig.test.ts.snap index 66d739d25..9e8b464a5 100644 --- a/packages/webpack-configs/tests/__snapshots__/defineConfig.test.ts.snap +++ b/packages/webpack-configs/tests/__snapshots__/defineConfig.test.ts.snap @@ -1,1353 +1,1419 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`defineBuildHostConfig the application name is set as the federation plugin application name 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildHostConfig the module federation plugin configuration includes the default shared dependencies 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; -exports[`defineBuildHostConfig when a public path option is provided for the html webpack plugin, do not alter the provided public path option 1`] = ` -{ - "index": 0, - "plugin": HtmlWebpackPlugin { - "options": { - "base": false, - "cache": true, - "chunks": "all", - "chunksSortMode": "auto", - "compile": true, - "excludeChunks": [], - "favicon": false, - "filename": "index.html", - "hash": false, - "inject": "head", - "meta": {}, - "minify": "auto", - "publicPath": "/toto", - "scriptLoading": "defer", - "showErrors": true, - "template": "auto", - "templateContent": false, - "templateParameters": [Function], - "title": "Webpack App", - "xhtml": false, +exports[`defineBuildHostConfig the module federation plugin configuration includes the remotes 1`] = ` +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": { + "remote1": "remote1@http://localhost/remote1/remoteEntry.js", + "remote2": "remote2@http://localhost/remote2/remoteEntry.js", }, - "userOptions": { - "publicPath": "/toto", + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, }, - "version": 5, }, + "name": "ModuleFederationPlugin", +} +`; + +exports[`defineBuildHostConfig when a public path option is provided for the html webpack plugin, do not alter the provided public path option 1`] = ` +HtmlWebpackPlugin { + "options": { + "base": false, + "cache": true, + "chunks": "all", + "chunksSortMode": "auto", + "compile": true, + "excludeChunks": [], + "favicon": false, + "filename": "index.html", + "hash": false, + "inject": "head", + "meta": {}, + "minify": "auto", + "publicPath": "/toto", + "scriptLoading": "defer", + "showErrors": true, + "template": "auto", + "templateContent": false, + "templateParameters": [Function], + "title": "Webpack App", + "xhtml": false, + }, + "userOptions": { + "publicPath": "/toto", + }, + "version": 5, } `; exports[`defineBuildHostConfig when additional options are provided for an existing default shared dependency, add the consumer options to the default options 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": "1.2.3", - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": "1.2.3", + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildHostConfig when additional shared dependencies are provided, add the dependencies to the module federation plugin configuration 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "first": { - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, - "second": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "first": { + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, + "second": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildHostConfig when i18next is activated, add i18next shared dependency and requiredVersion: false to the react shared dependency definition 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/i18next": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "i18next": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": false, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, - "react-i18next": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/i18next": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "i18next": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": false, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, + "react-i18next": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildHostConfig when msw is activated, add msw shared dependency 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/msw": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "@squide/msw": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildHostConfig when no options are provided for the html webpack plugin, add a public path option 1`] = ` -{ - "index": 0, - "plugin": HtmlWebpackPlugin { - "options": { - "base": false, - "cache": true, - "chunks": "all", - "chunksSortMode": "auto", - "compile": true, - "excludeChunks": [], - "favicon": false, - "filename": "index.html", - "hash": false, - "inject": "head", - "meta": {}, - "minify": "auto", - "publicPath": "/", - "scriptLoading": "defer", - "showErrors": true, - "templateContent": false, - "templateParameters": [Function], - "title": "Webpack App", - "xhtml": false, - }, - "userOptions": { - "publicPath": "/", - }, - "version": 5, +HtmlWebpackPlugin { + "options": { + "base": false, + "cache": true, + "chunks": "all", + "chunksSortMode": "auto", + "compile": true, + "excludeChunks": [], + "favicon": false, + "filename": "index.html", + "hash": false, + "inject": "head", + "meta": {}, + "minify": "auto", + "publicPath": "/", + "scriptLoading": "defer", + "showErrors": true, + "templateContent": false, + "templateParameters": [Function], + "title": "Webpack App", + "xhtml": false, }, + "userOptions": { + "publicPath": "/", + }, + "version": 5, } `; exports[`defineBuildHostConfig when options others than the public path option are provided for the html webpack plugin, add a public path option 1`] = ` -{ - "index": 0, - "plugin": HtmlWebpackPlugin { - "options": { - "base": false, - "cache": true, - "chunks": "all", - "chunksSortMode": "auto", - "compile": true, - "excludeChunks": [], - "favicon": "toto.png", - "filename": "index.html", - "hash": false, - "inject": "head", - "meta": {}, - "minify": "auto", - "publicPath": "/", - "scriptLoading": "defer", - "showErrors": true, - "template": "auto", - "templateContent": false, - "templateParameters": [Function], - "title": "Webpack App", - "xhtml": false, - }, - "userOptions": { - "favicon": "toto.png", - "publicPath": "/", - }, - "version": 5, +HtmlWebpackPlugin { + "options": { + "base": false, + "cache": true, + "chunks": "all", + "chunksSortMode": "auto", + "compile": true, + "excludeChunks": [], + "favicon": "toto.png", + "filename": "index.html", + "hash": false, + "inject": "head", + "meta": {}, + "minify": "auto", + "publicPath": "/", + "scriptLoading": "defer", + "showErrors": true, + "template": "auto", + "templateContent": false, + "templateParameters": [Function], + "title": "Webpack App", + "xhtml": false, }, + "userOptions": { + "favicon": "toto.png", + "publicPath": "/", + }, + "version": 5, } `; exports[`defineBuildHostConfig when overriding options are provided for a default shared dependency, use the consumer option 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": false, - "requiredVersion": undefined, - "singleton": false, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": false, + "requiredVersion": undefined, + "singleton": false, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildHostConfig when the router is react-router, add react-router shared dependencies 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/react-router": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, - "react-router-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "@squide/react-router": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, + "react-router-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildRemoteModuleConfig the application name is set as the federation plugin application name 1`] = ` -{ - "index": 2, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildRemoteModuleConfig the module federation plugin configuration includes the default shared dependencies 1`] = ` -{ - "index": 2, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildRemoteModuleConfig when additional options are provided for an existing default shared dependency, add the consumer options to the default options 1`] = ` -{ - "index": 2, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": "1.2.3", - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": "1.2.3", + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildRemoteModuleConfig when additional shared dependencies are provided, add the dependencies to the module federation plugin configuration 1`] = ` -{ - "index": 2, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "first": { - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, - "second": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "first": { + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, + }, + "second": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildRemoteModuleConfig when i18next is activated, add i18next shared dependency and requiredVersion: false to the react shared dependency definition 1`] = ` -{ - "index": 2, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/i18next": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "i18next": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": false, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, - "react-i18next": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/i18next": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "i18next": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": false, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, + }, + "react-i18next": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildRemoteModuleConfig when msw is activated, add msw shared dependency 1`] = ` -{ - "index": 2, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/msw": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "@squide/msw": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildRemoteModuleConfig when overriding options are provided for a default shared dependency, use the consumer option 1`] = ` -{ - "index": 2, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": false, - "requiredVersion": undefined, - "singleton": false, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": false, + "requiredVersion": undefined, + "singleton": false, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineBuildRemoteModuleConfig when the router is react-router, add react-router shared dependencies 1`] = ` -{ - "index": 2, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/react-router": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, - "react-router-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "@squide/react-router": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, + }, + "react-router-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevHostConfig the application name is set as the federation plugin application name 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevHostConfig the module federation plugin configuration includes the default shared dependencies 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; -exports[`defineDevHostConfig when a public path option is provided for the html webpack plugin, do not alter the provided public path option 1`] = ` -{ - "index": 0, - "plugin": HtmlWebpackPlugin { - "options": { - "base": false, - "cache": true, - "chunks": "all", - "chunksSortMode": "auto", - "compile": true, - "excludeChunks": [], - "favicon": false, - "filename": "index.html", - "hash": false, - "inject": "head", - "meta": {}, - "minify": "auto", - "publicPath": "/toto", - "scriptLoading": "defer", - "showErrors": true, - "template": "auto", - "templateContent": false, - "templateParameters": [Function], - "title": "Webpack App", - "xhtml": false, +exports[`defineDevHostConfig the module federation plugin configuration includes the remotes 1`] = ` +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": { + "remote1": "remote1@http://localhost/remote1/remoteEntry.js", + "remote2": "remote2@http://localhost/remote2/remoteEntry.js", }, - "userOptions": { - "publicPath": "/toto", + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, }, - "version": 5, }, + "name": "ModuleFederationPlugin", +} +`; + +exports[`defineDevHostConfig when a public path option is provided for the html webpack plugin, do not alter the provided public path option 1`] = ` +HtmlWebpackPlugin { + "options": { + "base": false, + "cache": true, + "chunks": "all", + "chunksSortMode": "auto", + "compile": true, + "excludeChunks": [], + "favicon": false, + "filename": "index.html", + "hash": false, + "inject": "head", + "meta": {}, + "minify": "auto", + "publicPath": "/toto", + "scriptLoading": "defer", + "showErrors": true, + "template": "auto", + "templateContent": false, + "templateParameters": [Function], + "title": "Webpack App", + "xhtml": false, + }, + "userOptions": { + "publicPath": "/toto", + }, + "version": 5, } `; exports[`defineDevHostConfig when additional options are provided for an existing default shared dependency, add the consumer options to the default options 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": "1.2.3", - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": "1.2.3", + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevHostConfig when additional shared dependencies are provided, add the dependencies to the module federation plugin configuration 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "first": { - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, - "second": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "first": { + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, + "second": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevHostConfig when i18next is activated, add i18next shared dependency and requiredVersion: false to the react shared dependency definition 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/i18next": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "i18next": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": false, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, - "react-i18next": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/i18next": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "i18next": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": false, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, + "react-i18next": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevHostConfig when msw is activated, add msw shared dependency 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/msw": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "@squide/msw": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevHostConfig when no options are provided for the html webpack plugin, add a public path option 1`] = ` -{ - "index": 0, - "plugin": HtmlWebpackPlugin { - "options": { - "base": false, - "cache": true, - "chunks": "all", - "chunksSortMode": "auto", - "compile": true, - "excludeChunks": [], - "favicon": false, - "filename": "index.html", - "hash": false, - "inject": "head", - "meta": {}, - "minify": "auto", - "publicPath": "/", - "scriptLoading": "defer", - "showErrors": true, - "templateContent": false, - "templateParameters": [Function], - "title": "Webpack App", - "xhtml": false, - }, - "userOptions": { - "publicPath": "/", - }, - "version": 5, +HtmlWebpackPlugin { + "options": { + "base": false, + "cache": true, + "chunks": "all", + "chunksSortMode": "auto", + "compile": true, + "excludeChunks": [], + "favicon": false, + "filename": "index.html", + "hash": false, + "inject": "head", + "meta": {}, + "minify": "auto", + "publicPath": "/", + "scriptLoading": "defer", + "showErrors": true, + "templateContent": false, + "templateParameters": [Function], + "title": "Webpack App", + "xhtml": false, }, + "userOptions": { + "publicPath": "/", + }, + "version": 5, } `; exports[`defineDevHostConfig when options others than the public path option are provided for the html webpack plugin, add a public path option 1`] = ` -{ - "index": 0, - "plugin": HtmlWebpackPlugin { - "options": { - "base": false, - "cache": true, - "chunks": "all", - "chunksSortMode": "auto", - "compile": true, - "excludeChunks": [], - "favicon": "toto.png", - "filename": "index.html", - "hash": false, - "inject": "head", - "meta": {}, - "minify": "auto", - "publicPath": "/", - "scriptLoading": "defer", - "showErrors": true, - "template": "auto", - "templateContent": false, - "templateParameters": [Function], - "title": "Webpack App", - "xhtml": false, - }, - "userOptions": { - "favicon": "toto.png", - "publicPath": "/", - }, - "version": 5, +HtmlWebpackPlugin { + "options": { + "base": false, + "cache": true, + "chunks": "all", + "chunksSortMode": "auto", + "compile": true, + "excludeChunks": [], + "favicon": "toto.png", + "filename": "index.html", + "hash": false, + "inject": "head", + "meta": {}, + "minify": "auto", + "publicPath": "/", + "scriptLoading": "defer", + "showErrors": true, + "template": "auto", + "templateContent": false, + "templateParameters": [Function], + "title": "Webpack App", + "xhtml": false, }, + "userOptions": { + "favicon": "toto.png", + "publicPath": "/", + }, + "version": 5, } `; exports[`defineDevHostConfig when overriding options are provided for a default shared dependency, use the consumer option 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": false, - "requiredVersion": undefined, - "singleton": false, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": false, + "requiredVersion": undefined, + "singleton": false, + }, + "react-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevHostConfig when the router is react-router, add react-router shared dependencies 1`] = ` -{ - "index": 3, - "plugin": ModuleFederationPlugin { - "_options": { - "name": "host", - "shared": { - "@squide/core": { - "eager": true, - "singleton": true, - }, - "@squide/react-router": { - "eager": true, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": true, - "singleton": true, - }, - "react": { - "eager": true, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": true, - "singleton": true, - }, - "react-router-dom": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "manifest": false, + "name": "host", + "remotes": {}, + "shared": { + "@squide/core": { + "eager": true, + "singleton": true, + }, + "@squide/module-federation": { + "eager": true, + "singleton": true, + }, + "@squide/react-router": { + "eager": true, + "singleton": true, + }, + "react": { + "eager": true, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": true, + "singleton": true, + }, + "react-router-dom": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevRemoteModuleConfig the application name is set as the federation plugin application name 1`] = ` -{ - "index": 1, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevRemoteModuleConfig the module federation plugin configuration includes the default shared dependencies 1`] = ` -{ - "index": 1, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevRemoteModuleConfig when additional options are provided for an existing default shared dependency, add the consumer options to the default options 1`] = ` -{ - "index": 1, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": "1.2.3", - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": "1.2.3", + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevRemoteModuleConfig when additional shared dependencies are provided, add the dependencies to the module federation plugin configuration 1`] = ` -{ - "index": 1, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "first": { - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, - "second": { - "eager": true, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "first": { + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, + }, + "second": { + "eager": true, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevRemoteModuleConfig when i18next is activated, add i18next shared dependency and requiredVersion: false to the react shared dependency definition 1`] = ` -{ - "index": 1, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/i18next": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "i18next": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": false, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, - "react-i18next": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/i18next": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "i18next": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": false, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, + }, + "react-i18next": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevRemoteModuleConfig when msw is activated, add msw shared dependency 1`] = ` -{ - "index": 1, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/msw": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "@squide/msw": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevRemoteModuleConfig when overriding options are provided for a default shared dependency, use the consumer option 1`] = ` -{ - "index": 1, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": false, - "requiredVersion": undefined, - "singleton": false, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": false, + "requiredVersion": undefined, + "singleton": false, + }, + "react-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; exports[`defineDevRemoteModuleConfig when the router is react-router, add react-router shared dependencies 1`] = ` -{ - "index": 1, - "plugin": ModuleFederationPlugin { - "_options": { - "exposes": { - "./register": "./src/register", - }, - "filename": "remoteEntry.js", - "name": "remote1", - "shared": { - "@squide/core": { - "eager": undefined, - "singleton": true, - }, - "@squide/react-router": { - "eager": undefined, - "singleton": true, - }, - "@squide/webpack-module-federation": { - "eager": undefined, - "singleton": true, - }, - "react": { - "eager": undefined, - "requiredVersion": undefined, - "singleton": true, - }, - "react-dom": { - "eager": undefined, - "singleton": true, - }, - "react-router-dom": { - "eager": undefined, - "singleton": true, - }, +ModuleFederationPlugin { + "_options": { + "dts": false, + "exposes": { + "./register": "./src/register", + }, + "filename": "remoteEntry.js", + "manifest": false, + "name": "remote1", + "shared": { + "@squide/core": { + "eager": undefined, + "singleton": true, + }, + "@squide/module-federation": { + "eager": undefined, + "singleton": true, + }, + "@squide/react-router": { + "eager": undefined, + "singleton": true, + }, + "react": { + "eager": undefined, + "requiredVersion": undefined, + "singleton": true, + }, + "react-dom": { + "eager": undefined, + "singleton": true, + }, + "react-router-dom": { + "eager": undefined, + "singleton": true, }, }, }, + "name": "ModuleFederationPlugin", } `; diff --git a/packages/webpack-configs/tests/defineConfig.test.ts b/packages/webpack-configs/tests/defineConfig.test.ts index 81a77e685..3bdff19a3 100644 --- a/packages/webpack-configs/tests/defineConfig.test.ts +++ b/packages/webpack-configs/tests/defineConfig.test.ts @@ -1,8 +1,9 @@ +import { ModuleFederationPlugin } from "@module-federation/enhanced/webpack"; import { defineBuildConfig as defineSwcBuildConfig, defineDevConfig as defineSwcDevConfig } from "@workleap/swc-configs"; import { findPlugin, matchConstructorName, type WebpackConfig } from "@workleap/webpack-configs"; import HtmlWebpackPlugin from "html-webpack-plugin"; -import webpack from "webpack"; -import { defineBuildHostConfig, defineBuildRemoteModuleConfig, defineDevHostConfig, defineDevRemoteModuleConfig, defineHostModuleFederationPluginOptions, defineRemoteModuleFederationPluginOptions } from "../src/defineConfig.ts"; +import type { WebpackPluginInstance } from "webpack"; +import { defineBuildHostConfig, defineBuildRemoteModuleConfig, defineDevHostConfig, defineDevRemoteModuleConfig, defineHostModuleFederationPluginOptions, defineRemoteModuleFederationPluginOptions, type ModuleFederationPluginOptions } from "../src/defineConfig.ts"; class DummyPlugin { _options: unknown; @@ -16,20 +17,33 @@ class DummyPlugin { } } +// The following options are relative to the environment running the test and breaks on CI. +function prepareModuleFederationPluginForSnapshot(plugin: WebpackPluginInstance) { + delete (plugin._options as ModuleFederationPluginOptions)["runtimePlugins"]; + + return plugin; +} + describe("defineDevHostConfig", () => { const SwcConfig = defineSwcDevConfig({ chrome: "116" }); test("the application name is set as the federation plugin application name", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const config = defineDevHostConfig(SwcConfig, "host", 8080, []); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); + }); + + test("the application name is set as the output unique name", () => { + const result = defineDevHostConfig(SwcConfig, "host", 8080, []); + + expect(result.output?.uniqueName).toBe("host"); }); test("the port number is set as the dev server port and the public path port", () => { - const result = defineDevHostConfig(SwcConfig, "host", 8080); + const result = defineDevHostConfig(SwcConfig, "host", 8080, []); // "devServer" does exist but webpack types are a messed. // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -38,28 +52,39 @@ describe("defineDevHostConfig", () => { }); test("when no public path is provided, the default public path is \"auto\"", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080); + const config = defineDevHostConfig(SwcConfig, "host", 8080, []); expect(config.output?.publicPath).toBe("auto"); }); test("when a public path is provided, use the provided public path", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { publicPath: "http://localhost:8080/" }); expect(config.output?.publicPath).toBe("http://localhost:8080/"); }); + test("the module federation plugin configuration includes the remotes", () => { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [ + { name: "remote1", url: "http://localhost/remote1" }, + { name: "remote2", url: "http://localhost/remote2" } + ]); + + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); + + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); + }); + test("the module federation plugin configuration includes the default shared dependencies", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const config = defineDevHostConfig(SwcConfig, "host", 8080, []); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional shared dependencies are provided, add the dependencies to the module federation plugin configuration", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { sharedDependencies: { "first": { singleton: true @@ -71,13 +96,13 @@ describe("defineDevHostConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional options are provided for an existing default shared dependency, add the consumer options to the default options", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { sharedDependencies: { "react": { requiredVersion: "1.2.3" @@ -85,13 +110,13 @@ describe("defineDevHostConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when overriding options are provided for a default shared dependency, use the consumer option", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { sharedDependencies: { "react": { eager: false, @@ -100,49 +125,49 @@ describe("defineDevHostConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when the router is react-router, add react-router shared dependencies", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { features: { router: "react-router" } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when msw is activated, add msw shared dependency", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { features: { msw: true } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when i18next is activated, add i18next shared dependency and requiredVersion: false to the react shared dependency definition", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { features: { i18next: true } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional plugins are provided, the plugins are added to the configuration", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { plugins: [new DummyPlugin({})] }); @@ -152,7 +177,7 @@ describe("defineDevHostConfig", () => { }); test("when configuration transformers are provided, the transformers are applied to the configuration", () => { - const result = defineDevHostConfig(SwcConfig, "host", 8080, { + const result = defineDevHostConfig(SwcConfig, "host", 8080, [], { transformers: [(config: WebpackConfig) => { config.entry = "updated by the dummy transformer"; @@ -164,7 +189,7 @@ describe("defineDevHostConfig", () => { }); test("when no options are provided for the html webpack plugin, add a public path option", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080); + const config = defineDevHostConfig(SwcConfig, "host", 8080, []); const result = findPlugin(config, matchConstructorName(HtmlWebpackPlugin.name)); @@ -177,11 +202,11 @@ describe("defineDevHostConfig", () => { // @ts-ignore delete (result.plugin.options as HtmlWebpackPlugin.Options)["template"]; - expect(result).toMatchSnapshot(); + expect(result.plugin).toMatchSnapshot(); }); test("when options others than the public path option are provided for the html webpack plugin, add a public path option", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { htmlWebpackPluginOptions: { favicon: "toto.png" } @@ -189,11 +214,11 @@ describe("defineDevHostConfig", () => { const result = findPlugin(config, matchConstructorName(HtmlWebpackPlugin.name)); - expect(result).toMatchSnapshot(); + expect(result.plugin).toMatchSnapshot(); }); test("when a public path option is provided for the html webpack plugin, do not alter the provided public path option", () => { - const config = defineDevHostConfig(SwcConfig, "host", 8080, { + const config = defineDevHostConfig(SwcConfig, "host", 8080, [], { htmlWebpackPluginOptions: { publicPath: "/toto" } @@ -201,7 +226,7 @@ describe("defineDevHostConfig", () => { const result = findPlugin(config, matchConstructorName(HtmlWebpackPlugin.name)); - expect(result).toMatchSnapshot(); + expect(result.plugin).toMatchSnapshot(); }); }); @@ -212,35 +237,46 @@ describe("defineBuildHostConfig", () => { }); test("the application name is set as the federation plugin application name", () => { - const config = defineBuildHostConfig(SwcConfig, "host"); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const config = defineBuildHostConfig(SwcConfig, "host", []); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when no public path is provided, the default public path is \"auto\"", () => { - const config = defineBuildHostConfig(SwcConfig, "host"); + const config = defineBuildHostConfig(SwcConfig, "host", []); expect(config.output?.publicPath).toBe("auto"); }); test("when a public path is provided, use the provided public path", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { publicPath: "http://localhost:8080/" }); expect(config.output?.publicPath).toBe("http://localhost:8080/"); }); + test("the module federation plugin configuration includes the remotes", () => { + const config = defineBuildHostConfig(SwcConfig, "host", [ + { name: "remote1", url: "http://localhost/remote1" }, + { name: "remote2", url: "http://localhost/remote2" } + ]); + + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); + + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); + }); + test("the module federation plugin configuration includes the default shared dependencies", () => { - const config = defineBuildHostConfig(SwcConfig, "host"); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const config = defineBuildHostConfig(SwcConfig, "host", []); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional shared dependencies are provided, add the dependencies to the module federation plugin configuration", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { sharedDependencies: { "first": { singleton: true @@ -252,13 +288,13 @@ describe("defineBuildHostConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional options are provided for an existing default shared dependency, add the consumer options to the default options", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { sharedDependencies: { "react": { requiredVersion: "1.2.3" @@ -266,13 +302,13 @@ describe("defineBuildHostConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when overriding options are provided for a default shared dependency, use the consumer option", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { sharedDependencies: { "react": { eager: false, @@ -281,49 +317,49 @@ describe("defineBuildHostConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when the router is react-router, add react-router shared dependencies", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { features: { router: "react-router" } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when msw is activated, add msw shared dependency", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { features: { msw: true } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when i18next is activated, add i18next shared dependency and requiredVersion: false to the react shared dependency definition", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { features: { i18next: true } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional plugins are provided, the plugins are added to the configuration", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { plugins: [new DummyPlugin({})] }); @@ -333,7 +369,7 @@ describe("defineBuildHostConfig", () => { }); test("when configuration transformers are provided, the transformers are applied to the configuration", () => { - const result = defineBuildHostConfig(SwcConfig, "host", { + const result = defineBuildHostConfig(SwcConfig, "host", [], { transformers: [(config: WebpackConfig) => { config.entry = "updated by the dummy transformer"; @@ -345,24 +381,20 @@ describe("defineBuildHostConfig", () => { }); test("when no options are provided for the html webpack plugin, add a public path option", () => { - const config = defineBuildHostConfig(SwcConfig, "host"); + const config = defineBuildHostConfig(SwcConfig, "host", []); const result = findPlugin(config, matchConstructorName(HtmlWebpackPlugin.name)); // This is an option that is relative to the environment running the test and breaks on CI. - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - delete (result.plugin.userOptions as HtmlWebpackPlugin.Options)["template"]; + delete ((result.plugin as WebpackPluginInstance).userOptions as HtmlWebpackPlugin.Options)["template"]; // This is an option that is relative to the environment running the test and breaks on CI. - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - delete (result.plugin.options as HtmlWebpackPlugin.Options)["template"]; + delete ((result.plugin as WebpackPluginInstance).options as HtmlWebpackPlugin.Options)["template"]; - expect(result).toMatchSnapshot(); + expect(result.plugin).toMatchSnapshot(); }); test("when options others than the public path option are provided for the html webpack plugin, add a public path option", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { htmlWebpackPluginOptions: { favicon: "toto.png" } @@ -370,11 +402,11 @@ describe("defineBuildHostConfig", () => { const result = findPlugin(config, matchConstructorName(HtmlWebpackPlugin.name)); - expect(result).toMatchSnapshot(); + expect(result.plugin).toMatchSnapshot(); }); test("when a public path option is provided for the html webpack plugin, do not alter the provided public path option", () => { - const config = defineBuildHostConfig(SwcConfig, "host", { + const config = defineBuildHostConfig(SwcConfig, "host", [], { htmlWebpackPluginOptions: { publicPath: "/toto" } @@ -382,7 +414,7 @@ describe("defineBuildHostConfig", () => { const result = findPlugin(config, matchConstructorName(HtmlWebpackPlugin.name)); - expect(result).toMatchSnapshot(); + expect(result.plugin).toMatchSnapshot(); }); }); @@ -394,9 +426,15 @@ describe("defineDevRemoteModuleConfig", () => { test("the application name is set as the federation plugin application name", () => { const config = defineDevRemoteModuleConfig(SwcConfig, "remote1", 8081); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); + + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); + }); + + test("the application name is set as the output unique name", () => { + const config = defineDevRemoteModuleConfig(SwcConfig, "remote1", 8081); - expect(result).toMatchSnapshot(); + expect(config.output?.uniqueName).toBe("remote1"); }); test("the port number is set as the dev server port", () => { @@ -422,18 +460,11 @@ describe("defineDevRemoteModuleConfig", () => { expect(config.output?.publicPath).toBe("http://localhost:8081/"); }); - test("fast refresh is disabled", () => { - const config = defineDevRemoteModuleConfig(SwcConfig, "remote1", 8081); - const result = findPlugin(config, matchConstructorName("ReactRefreshWebpackPlugin")); - - expect(result).toBeUndefined(); - }); - test("the module federation plugin configuration includes the default shared dependencies", () => { const config = defineDevRemoteModuleConfig(SwcConfig, "remote1", 8081); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional shared dependencies are provided, add the dependencies to the module federation plugin configuration", () => { @@ -449,9 +480,9 @@ describe("defineDevRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional options are provided for an existing default shared dependency, add the consumer options to the default options", () => { @@ -463,9 +494,9 @@ describe("defineDevRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when overriding options are provided for a default shared dependency, use the consumer option", () => { @@ -478,9 +509,9 @@ describe("defineDevRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when the router is react-router, add react-router shared dependencies", () => { @@ -490,9 +521,9 @@ describe("defineDevRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when msw is activated, add msw shared dependency", () => { @@ -502,9 +533,9 @@ describe("defineDevRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when i18next is activated, add i18next shared dependency and requiredVersion: false to the react shared dependency definition", () => { @@ -514,9 +545,9 @@ describe("defineDevRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("access control headers are added to the dev server configuration", () => { @@ -560,9 +591,9 @@ describe("defineBuildRemoteModuleConfig", () => { test("the application name is set as the federation plugin application name", () => { const config = defineBuildRemoteModuleConfig(SwcConfig, "remote1"); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when no public path is provided, the default public path is \"auto\"", () => { @@ -581,9 +612,9 @@ describe("defineBuildRemoteModuleConfig", () => { test("the module federation plugin configuration includes the default shared dependencies", () => { const config = defineBuildRemoteModuleConfig(SwcConfig, "remote1"); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional shared dependencies are provided, add the dependencies to the module federation plugin configuration", () => { @@ -599,9 +630,9 @@ describe("defineBuildRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional options are provided for an existing default shared dependency, add the consumer options to the default options", () => { @@ -613,9 +644,9 @@ describe("defineBuildRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when overriding options are provided for a default shared dependency, use the consumer option", () => { @@ -628,9 +659,9 @@ describe("defineBuildRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when the router is react-router, add react-router shared dependencies", () => { @@ -640,9 +671,9 @@ describe("defineBuildRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when msw is activated, add msw shared dependency", () => { @@ -652,9 +683,9 @@ describe("defineBuildRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when i18next is activated, add i18next shared dependency and requiredVersion: false to the react shared dependency definition", () => { @@ -664,9 +695,9 @@ describe("defineBuildRemoteModuleConfig", () => { } }); - const result = findPlugin(config, matchConstructorName(webpack.container.ModuleFederationPlugin.name)); + const result = findPlugin(config, matchConstructorName(ModuleFederationPlugin.name)); - expect(result).toMatchSnapshot(); + expect(prepareModuleFederationPluginForSnapshot(result.plugin as WebpackPluginInstance)).toMatchSnapshot(); }); test("when additional plugins are provided, the plugins are added to the configuration", () => { @@ -696,7 +727,7 @@ describe("defineBuildRemoteModuleConfig", () => { describe("defineHostModuleFederationPluginOptions", () => { test("merge the default options with the provided options", () => { - const result = defineHostModuleFederationPluginOptions("host", { + const result = defineHostModuleFederationPluginOptions("host", [], { runtime: "a-custom-runtime-name" }); @@ -704,7 +735,7 @@ describe("defineHostModuleFederationPluginOptions", () => { }); test("merge the shared dependencies with the default shared dependencies", () => { - const result = defineHostModuleFederationPluginOptions("host", { + const result = defineHostModuleFederationPluginOptions("host", [], { shared: { "react": { singleton: false, diff --git a/packages/webpack-configs/tests/sharedDependenciesResolutionPlugin.test.ts b/packages/webpack-configs/tests/sharedDependenciesResolutionPlugin.test.ts new file mode 100644 index 000000000..89dc2b8fc --- /dev/null +++ b/packages/webpack-configs/tests/sharedDependenciesResolutionPlugin.test.ts @@ -0,0 +1,108 @@ +import type { FederationHost } from "@module-federation/enhanced/runtime"; +import { resolveSharedDependency } from "../src/sharedDependenciesResolutionPlugin.ts"; + +type Shared = FederationHost["shareScopeMap"][string][string][string]; + +function createSharedEntry(from: string, version: string, singleton?: boolean): Shared { + return { + from, + version, + shareConfig: { + singleton, + requiredVersion: false + }, + deps: [], + get: () => () => {}, + scope: ["default"], + strategy: "version-first", + useIn: [from] + }; +} + +test("when a remote request a version with the same major version as the host requested version, but with an higher minor version, resolve to the remote requested version", () => { + const { resolvedEntry, highestVersionEntry } = resolveSharedDependency("my-lib", [ + createSharedEntry("host", "2.0.0", true), + createSharedEntry("remote-1", "2.1.0", true), + createSharedEntry("remote-2", "2.0.0", true) + ]); + + expect(resolvedEntry.version).toBe("2.1.0"); + expect(highestVersionEntry.version).toBe("2.1.0"); +}); + +test("when a remote request a version with the same major version as the host requested version, but with an higher patch version, resolve to the remote requested version", () => { + const { resolvedEntry, highestVersionEntry } = resolveSharedDependency("my-lib", [ + createSharedEntry("host", "2.0.0", true), + createSharedEntry("remote-1", "2.0.1", true), + createSharedEntry("remote-2", "2.0.0", true) + ]); + + expect(resolvedEntry.version).toBe("2.0.1"); + expect(highestVersionEntry.version).toBe("2.0.1"); +}); + +test("when a remote request a version with an higher major version than the host requested version, fallback to the highest requested version sharing the same major version as the host requested version", () => { + const { resolvedEntry, highestVersionEntry } = resolveSharedDependency("my-lib", [ + createSharedEntry("host", "2.0.0", true), + createSharedEntry("remote-1", "3.1.0", true), + createSharedEntry("remote-2", "2.1.0", true) + ]); + + expect(resolvedEntry.version).toBe("2.1.0"); + expect(highestVersionEntry.version).toBe("3.1.0"); +}); + +test("supports \">\" range", () => { + const { resolvedEntry, highestVersionEntry } = resolveSharedDependency("my-lib", [ + createSharedEntry("host", ">2.0.0", true), + createSharedEntry("remote-1", "3.1.0", true), + createSharedEntry("remote-2", "2.1.0", true) + ]); + + expect(resolvedEntry.version).toBe("2.1.0"); + expect(highestVersionEntry.version).toBe("3.1.0"); +}); + +test("supports \">=\" range", () => { + const { resolvedEntry, highestVersionEntry } = resolveSharedDependency("my-lib", [ + createSharedEntry("host", ">=2.0.0", true), + createSharedEntry("remote-1", "3.1.0", true), + createSharedEntry("remote-2", "2.1.0", true) + ]); + + expect(resolvedEntry.version).toBe("2.1.0"); + expect(highestVersionEntry.version).toBe("3.1.0"); +}); + +test("supports \"> <\" range", () => { + const { resolvedEntry, highestVersionEntry } = resolveSharedDependency("my-lib", [ + createSharedEntry("host", ">2.0.0 <2.1.0", true), + createSharedEntry("remote-1", "3.1.0", true), + createSharedEntry("remote-2", "2.1.0", true) + ]); + + expect(resolvedEntry.version).toBe("2.1.0"); + expect(highestVersionEntry.version).toBe("3.1.0"); +}); + +test("supports \"> <=\" range", () => { + const { resolvedEntry, highestVersionEntry } = resolveSharedDependency("my-lib", [ + createSharedEntry("host", ">2.0.0 <=2.1.0", true), + createSharedEntry("remote-1", "3.1.0", true), + createSharedEntry("remote-2", "2.1.0", true) + ]); + + expect(resolvedEntry.version).toBe("2.1.0"); + expect(highestVersionEntry.version).toBe("3.1.0"); +}); + +test("supports \"^\" range", () => { + const { resolvedEntry, highestVersionEntry } = resolveSharedDependency("my-lib", [ + createSharedEntry("host", "^2.0.0", true), + createSharedEntry("remote-1", "3.1.0", true), + createSharedEntry("remote-2", "2.1.0", true) + ]); + + expect(resolvedEntry.version).toBe("2.1.0"); + expect(highestVersionEntry.version).toBe("3.1.0"); +}); diff --git a/packages/webpack-configs/tsup.build.ts b/packages/webpack-configs/tsup.build.ts index b2e93a8e0..0cf229c86 100644 --- a/packages/webpack-configs/tsup.build.ts +++ b/packages/webpack-configs/tsup.build.ts @@ -3,5 +3,9 @@ import { defineBuildConfig } from "@workleap/tsup-configs"; export default defineBuildConfig({ // Temporary fix to support using "node:path". platform: undefined, - entry: ["./src/index.ts"] + entry: [ + "./src/index.ts", + "./src/sharedDependenciesResolutionPlugin.ts", + "./src/nonCacheableRemoteEntryPlugin.ts" + ] }); diff --git a/packages/webpack-configs/tsup.dev.ts b/packages/webpack-configs/tsup.dev.ts index d934692e3..ce9176877 100644 --- a/packages/webpack-configs/tsup.dev.ts +++ b/packages/webpack-configs/tsup.dev.ts @@ -3,5 +3,9 @@ import { defineDevConfig } from "@workleap/tsup-configs"; export default defineDevConfig({ // Temporary fix to support using "node:path". platform: undefined, - entry: ["./src/index.ts"] + entry: [ + "./src/index.ts", + "./src/sharedDependenciesResolutionPlugin.ts", + "./src/nonCacheableRemoteEntryPlugin.ts" + ] }); diff --git a/packages/webpack-module-federation/CHANGELOG.md b/packages/webpack-module-federation/CHANGELOG.md deleted file mode 100644 index 1536f7c50..000000000 --- a/packages/webpack-module-federation/CHANGELOG.md +++ /dev/null @@ -1,185 +0,0 @@ -# @squide/webpack-module-federation - -## 4.0.0 - -### Major Changes - -- [#158](https://github.com/gsoft-inc/wl-squide/pull/158) [`b8d5ea4`](https://github.com/gsoft-inc/wl-squide/commit/b8d5ea42c23c3291e428c9ff907a7cff2f3211eb) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Cleaned up dependencies. - -## 3.0.8 - -### Patch Changes - -- [#154](https://github.com/gsoft-inc/wl-squide/pull/154) [`e440515`](https://github.com/gsoft-inc/wl-squide/commit/e4405150a3c364fd4029c345399891614a434176) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Updated packages. - -- Updated dependencies [[`e440515`](https://github.com/gsoft-inc/wl-squide/commit/e4405150a3c364fd4029c345399891614a434176)]: - - @squide/core@3.4.0 - -## 3.0.7 - -### Patch Changes - -- [#152](https://github.com/gsoft-inc/wl-squide/pull/152) [`d27fe71`](https://github.com/gsoft-inc/wl-squide/commit/d27fe717f899e395c3f01af86aac3e015159d719) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Updated dependency versions. - -- Updated dependencies [[`d27fe71`](https://github.com/gsoft-inc/wl-squide/commit/d27fe717f899e395c3f01af86aac3e015159d719)]: - - @squide/core@3.3.2 - -## 3.0.6 - -### Patch Changes - -- Updated dependencies [[`d091846`](https://github.com/gsoft-inc/wl-squide/commit/d091846502bed6b783b69ab8eff7ae36d8e25449)]: - - @squide/core@3.3.1 - -## 3.0.5 - -### Patch Changes - -- Updated dependencies [[`39d0bbe4`](https://github.com/gsoft-inc/wl-squide/commit/39d0bbe45902d54832e9aa8deb2c1949a2cf3c5f)]: - - @squide/core@3.3.0 - -## 3.0.4 - -### Patch Changes - -- [#133](https://github.com/gsoft-inc/wl-squide/pull/133) [`1cda1be`](https://github.com/gsoft-inc/wl-squide/commit/1cda1be30779d1a1d5d2e21eac043baff20c0f7e) Thanks [@patricklafrance](https://github.com/patricklafrance)! - The completeDeferredRegistrations function data was required instead of optionnal. It has been fixed. - -- Updated dependencies [[`1cda1be`](https://github.com/gsoft-inc/wl-squide/commit/1cda1be30779d1a1d5d2e21eac043baff20c0f7e)]: - - @squide/core@3.2.1 - -## 3.0.3 - -### Patch Changes - -- Updated dependencies [[`7caa44b`](https://github.com/gsoft-inc/wl-squide/commit/7caa44ba81a97d0705caf2f56e6536ae285c920d)]: - - @squide/core@3.2.0 - -## 3.0.2 - -### Patch Changes - -- [#128](https://github.com/gsoft-inc/wl-squide/pull/128) [`4c3b6f1`](https://github.com/gsoft-inc/wl-squide/commit/4c3b6f1929364844dda6c1190fc45c3b037e8df9) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Internally changed the usage of `setInterval` for `useSyncExternalStore`. - -- Updated dependencies [[`4c3b6f1`](https://github.com/gsoft-inc/wl-squide/commit/4c3b6f1929364844dda6c1190fc45c3b037e8df9)]: - - @squide/core@3.1.1 - -## 3.0.1 - -### Patch Changes - -- Updated dependencies [[`568255a`](https://github.com/gsoft-inc/wl-squide/commit/568255a50a519e7d19c8c2b03909559686cd24c4)]: - - @squide/core@3.1.0 - -## 3.0.0 - -### Major Changes - -- [#112](https://github.com/gsoft-inc/wl-squide/pull/112) [`a9dda1c`](https://github.com/gsoft-inc/wl-squide/commit/a9dda1c3b010f616556fc3313c1934e20a26bc11) Thanks [@patricklafrance](https://github.com/patricklafrance)! - - The define functions has been moved to the new `@squide/webpack-configs` package. - -### Patch Changes - -- Updated dependencies [[`a9dda1c`](https://github.com/gsoft-inc/wl-squide/commit/a9dda1c3b010f616556fc3313c1934e20a26bc11)]: - - @squide/core@3.0.0 - -## 2.2.0 - -### Minor Changes - -- [#103](https://github.com/gsoft-inc/wl-squide/pull/103) [`b72fca3`](https://github.com/gsoft-inc/wl-squide/commit/b72fca38385ddacbcd80376c9afd0c9485658d90) Thanks [@patricklafrance](https://github.com/patricklafrance)! - - `defineBuildHostConfig`, `defineDevHostConfig`, `defineBuildRemoteModuleConfig` and `defineDevRemoteModuleConfig` `publicPath` prop is not mandatory anymore. It's default value is now `auto`. - - `defineBuildHostConfig` and `defineBuildRemoteModuleConfig` set the `HtmlWebpackPlugin` `publicPath` prop to `/` by default. - - `completeRemoteModuleRegistrations` `data` argument is now required. - -### Patch Changes - -- Updated dependencies [[`b72fca3`](https://github.com/gsoft-inc/wl-squide/commit/b72fca38385ddacbcd80376c9afd0c9485658d90)]: - - @squide/core@2.2.0 - -## 2.1.0 - -### Minor Changes - -- [#101](https://github.com/gsoft-inc/wl-squide/pull/101) [`1e77dca`](https://github.com/gsoft-inc/wl-squide/commit/1e77dcaf26660e42f2d5054b3fa1cd018c2ec009) Thanks [@patricklafrance](https://github.com/patricklafrance)! - This release introduces new APIs to support deferred routes registration with the ultimate goal of conditionally adding routes based on feature flags. - - - Added a `completeRemoteModuleRegistrations` function to complete the second phase of the registration process for local remote modules. - - Added a `completeModuleRegistrations` function to execute `completeLocalModuleRegistrations` and `completeRemoteModuleRegistrations` in a single call. - - Added the `useAreModulesRegistered` hook to re-render the application once all the modules are registered (but not ready). - - Reworked the `useAreModulesReady` hook to be complimentary to the `useAreModulesRegistered` hook when deferred registrations are registered. The hook is backward compatible and includes no breaking changes. - - Added a `features` section to the defineConfig functions options. - -### Patch Changes - -- Updated dependencies [[`1e77dca`](https://github.com/gsoft-inc/wl-squide/commit/1e77dcaf26660e42f2d5054b3fa1cd018c2ec009)]: - - @squide/core@2.1.0 - -## 2.0.0 - -### Major Changes - -- [#93](https://github.com/gsoft-inc/wl-squide/pull/93) [`d66a196`](https://github.com/gsoft-inc/wl-squide/commit/d66a196db9346803e1c996ef64089eda9aeff180) Thanks [@patricklafrance](https://github.com/patricklafrance)! - - The devserver error overlay is now disabled by default for the remote modules to prevent them from stacking on top of the host application error overlay. - - Remote modules `register` functions can now be `async`. - -### Patch Changes - -- Updated dependencies [[`d66a196`](https://github.com/gsoft-inc/wl-squide/commit/d66a196db9346803e1c996ef64089eda9aeff180)]: - - @squide/core@2.0.0 - -## 1.0.5 - -### Patch Changes - -- [#83](https://github.com/gsoft-inc/wl-squide/pull/83) [`b29c492`](https://github.com/gsoft-inc/wl-squide/commit/b29c492ab34af978c2c5d34a67234bb9a6949651) Thanks [@patricklafrance](https://github.com/patricklafrance)! - - `eager` was defined for the common shared dependencies of the host application and the modules. This was causing every dependencies to be loaded twice, fixed it. - - `useAreRemotesReady` was never being ready if there was no local modules configured, fixed it. - -## 1.0.4 - -### Patch Changes - -- [#77](https://github.com/gsoft-inc/wl-squide/pull/77) [`5d3295c`](https://github.com/gsoft-inc/wl-squide/commit/5d3295cfdb98ce56b8878dcb1bb58fb3f6fac975) Thanks [@patricklafrance](https://github.com/patricklafrance)! - TBD - -- Updated dependencies [[`5d3295c`](https://github.com/gsoft-inc/wl-squide/commit/5d3295cfdb98ce56b8878dcb1bb58fb3f6fac975)]: - - @squide/core@1.1.1 - -## 1.0.3 - -### Patch Changes - -- Updated dependencies [[`5407086`](https://github.com/gsoft-inc/wl-squide/commit/5407086a98587901abe341360729f8fe972d8174)]: - - @squide/core@1.1.0 - -## 1.0.2 - -### Patch Changes - -- [#66](https://github.com/gsoft-inc/wl-squide/pull/66) [`1a419de`](https://github.com/gsoft-inc/wl-squide/commit/1a419de33e22af7af990984068ab864e5be8fd4b) Thanks [@patricklafrance](https://github.com/patricklafrance)! - New release - -- Updated dependencies [[`1a419de`](https://github.com/gsoft-inc/wl-squide/commit/1a419de33e22af7af990984068ab864e5be8fd4b)]: - - @squide/core@1.0.2 - -## 1.0.1 - -### Patch Changes - -- [#54](https://github.com/gsoft-inc/wl-squide/pull/54) [`1f0e967`](https://github.com/gsoft-inc/wl-squide/commit/1f0e96781513b262122fb8e47e10379caae0b731) Thanks [@ofrogon](https://github.com/ofrogon)! - Migrate project from GitHub organization - -- Updated dependencies [[`1f0e967`](https://github.com/gsoft-inc/wl-squide/commit/1f0e96781513b262122fb8e47e10379caae0b731)]: - - @squide/core@1.0.1 - -## 1.0.0 - -### Major Changes - -- [#30](https://github.com/gsoft-inc/wl-squide/pull/30) [`edcd948`](https://github.com/gsoft-inc/wl-squide/commit/edcd948fa942a36fa77b05459722e91fa2f80f11) Thanks [@patricklafrance](https://github.com/patricklafrance)! - First stable release of @squide - -### Patch Changes - -- Updated dependencies [[`edcd948`](https://github.com/gsoft-inc/wl-squide/commit/edcd948fa942a36fa77b05459722e91fa2f80f11)]: - - @squide/core@1.0.0 - -## 0.0.1 - -### Patch Changes - -- [#20](https://github.com/gsoft-inc/wl-squide/pull/20) [`1c3e332`](https://github.com/gsoft-inc/wl-squide/commit/1c3e3321ba2f54558f8b10b934d0defa8156ae29) Thanks [@patricklafrance](https://github.com/patricklafrance)! - Testing changeset configuration - -- Updated dependencies [[`1c3e332`](https://github.com/gsoft-inc/wl-squide/commit/1c3e3321ba2f54558f8b10b934d0defa8156ae29)]: - - @squide/core@0.0.1 diff --git a/packages/webpack-module-federation/src/loadRemote.ts b/packages/webpack-module-federation/src/loadRemote.ts deleted file mode 100644 index d3819c26b..000000000 --- a/packages/webpack-module-federation/src/loadRemote.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { isNil } from "@squide/core"; - -// Webpack globals we need to access when loading Federated Modules dynamically -// See: https://webpack.js.org/concepts/module-federation/#dynamic-remote-containers. -declare let __webpack_init_sharing__: (scope: string) => Promise; -declare let __webpack_share_scopes__: { default: unknown }; - -export interface LoadRemoteScriptOptions { - timeoutDelay?: number; -} - -function loadRemoteScript(url: string, { timeoutDelay = 2000 }: LoadRemoteScriptOptions = {}) { - return new Promise((resolve, reject) => { - const element = document.createElement("script"); - - // Adding a timestamp to make sure the remote entry points are never cached. - // View: https://github.com/module-federation/module-federation-examples/issues/566. - element.src = `${url}?t=${Date.now()}`; - element.type = "text/javascript"; - element.async = true; - - let timeoutId: number | undefined = undefined; - let hasCanceled = false; - - function cancel(error: Error) { - hasCanceled = true; - - element?.parentElement?.removeChild(element); - - reject({ - error, - hasCanceled: true - }); - } - - element.onload = () => { - window.clearTimeout(timeoutId); - - element?.parentElement?.removeChild(element); - resolve({}); - }; - - element.onerror = (error: unknown) => { - if (!hasCanceled) { - window.clearTimeout(timeoutId); - - element?.parentElement?.removeChild(element); - - reject({ - error, - hasCanceled: false - }); - } - }; - - document.head.appendChild(element); - - // Eagerly reject the loading of a script, it's too long when a remote is unavailable. - timeoutId = window.setTimeout(() => { - cancel(new Error(`[squide] Remote script "${url}" time-outed.`)); - }, timeoutDelay); - }); -} - -export type LoadRemoteOptions = LoadRemoteScriptOptions; - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export type LoadRemoteFunction = (url: string, containerName: string, moduleName: string, options?: LoadRemoteOptions) => Promise; - -// Implementation of https://webpack.js.org/concepts/module-federation/#dynamic-remote-containers. -// It's done this way rather than using the managed mechanism provided with ModuleFederationPlugin config because it's doesn't throw an error if a module is not available. -export const loadRemote: LoadRemoteFunction = async (url: string, containerName: string, moduleName: string, options: LoadRemoteOptions = {}) => { - await loadRemoteScript(url, options); - - // Initializes the share scope. It fills the scope with known provided modules from this build and all remotes. - await __webpack_init_sharing__("default"); - - // Retrieve the module federation container. - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const container = (window as any)[containerName]; - - if (isNil(container)) { - throw new Error(`[squide] Container "${containerName}" is not available for remote "${url}".`); - } - - // Initialize the container, it may provide shared modules. - await container.init(__webpack_share_scopes__.default); - - // Retrieve the module factory. - const factory = await container.get(moduleName); - - if (isNil(factory)) { - throw new Error(`[squide] Module "${moduleName}" is not available for container "${containerName}" of remote "${url}".`); - } - - return factory(); -}; diff --git a/packages/webpack-module-federation/src/remoteDefinition.ts b/packages/webpack-module-federation/src/remoteDefinition.ts deleted file mode 100644 index 9c4b87f2d..000000000 --- a/packages/webpack-module-federation/src/remoteDefinition.ts +++ /dev/null @@ -1,12 +0,0 @@ -// By conventions: -// - The remote entry point must be "/remoteEntry.js" -// - The module name must be "register" -export interface RemoteDefinition { - // The base URL of the remote - url: string; - // The container name of the remote - name: string; -} - -export const RemoteEntryPoint = "remoteEntry.js"; -export const RemoteModuleName = "./register"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb0500c0f..e071d7c81 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,11 +18,11 @@ importers: specifier: 20.12.7 version: 20.12.7 '@typescript-eslint/parser': - specifier: 7.6.0 - version: 7.6.0(eslint@8.57.0)(typescript@5.4.5) + specifier: 7.8.0 + version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/typescript-configs': specifier: 3.0.2 version: 3.0.2(typescript@5.4.5) @@ -39,11 +39,11 @@ importers: specifier: 29.7.0 version: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2) knip: - specifier: 5.9.4 - version: 5.9.4(@types/node@20.12.7)(typescript@5.4.5) + specifier: 5.11.0 + version: 5.11.0(@types/node@20.12.7)(typescript@5.4.5) netlify-cli: - specifier: 17.22.1 - version: 17.22.1(@types/node@20.12.7) + specifier: 17.23.1 + version: 17.23.1(@types/node@20.12.7) retypeapp: specifier: 3.5.0 version: 3.5.0 @@ -61,26 +61,26 @@ importers: version: 5.0.1 react-dom: specifier: '*' - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) devDependencies: '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/jest': specifier: 0.2.36 - version: 0.2.36(@swc/core@1.4.13) + version: 0.2.36(@swc/core@1.4.17) '@types/jest': specifier: 29.5.12 version: 29.5.12 '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -94,11 +94,11 @@ importers: specifier: 29.7.0 version: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2) react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -111,7 +111,7 @@ importers: devDependencies: '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -123,7 +123,7 @@ importers: version: 8.57.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -133,43 +133,43 @@ importers: '@squide/core': specifier: workspace:* version: link:../core + '@squide/module-federation': + specifier: workspace:* + version: link:../module-federation '@squide/msw': specifier: workspace:* version: link:../msw '@squide/react-router': specifier: workspace:* version: link:../react-router - '@squide/webpack-module-federation': - specifier: workspace:* - version: link:../webpack-module-federation devDependencies: '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/jest': specifier: 0.2.36 - version: 0.2.36(@swc/core@1.4.13) + version: 0.2.36(@swc/core@1.4.17) '@testing-library/jest-dom': specifier: 6.4.2 version: 6.4.2(@types/jest@29.5.12)(jest@29.7.0) '@testing-library/react': - specifier: 15.0.1 - version: 15.0.1(react-dom@18.2.0)(react@18.2.0) + specifier: 15.0.5 + version: 15.0.5(react-dom@18.3.1)(react@18.3.1) '@types/jest': specifier: 29.5.12 version: 29.5.12 '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -186,41 +186,41 @@ importers: specifier: 29.7.0 version: 29.7.0 msw: - specifier: 2.2.13 - version: 2.2.13(typescript@5.4.5) + specifier: 2.2.14 + version: 2.2.14(typescript@5.4.5) react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-router-dom: - specifier: 6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + specifier: 6.23.0 + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.5)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 - packages/firefly-configs: + packages/firefly-webpack-configs: dependencies: '@squide/webpack-configs': specifier: workspace:* version: link:../webpack-configs '@swc/helpers': specifier: '*' - version: 0.5.9 + version: 0.5.11 '@workleap/webpack-configs': specifier: 1.5.1 - version: 1.5.1(@swc/core@1.4.13)(@swc/helpers@0.5.9)(browserslist@4.23.0)(esbuild@0.19.12)(postcss@8.4.38)(typescript@5.4.5)(webpack-dev-server@5.0.4)(webpack@5.91.0) + version: 1.5.1(@swc/core@1.4.17)(@swc/helpers@0.5.11)(browserslist@4.23.0)(esbuild@0.19.12)(postcss@8.4.38)(typescript@5.4.5)(webpack-dev-server@5.0.4)(webpack@5.91.0) browserslist: specifier: '*' version: 4.23.0 @@ -231,21 +231,24 @@ importers: specifier: '>=5.0.0' version: 5.0.4(webpack@5.91.0) devDependencies: + '@module-federation/enhanced': + specifier: 0.1.11 + version: 0.1.11(typescript@5.4.5)(vue-tsc@1.8.27)(webpack@5.91.0) '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/jest': specifier: 0.2.36 - version: 0.2.36(@swc/core@1.4.13) + version: 0.2.36(@swc/core@1.4.17) '@types/jest': specifier: 29.5.12 version: 29.5.12 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -263,16 +266,16 @@ importers: version: 29.7.0 ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.5)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 webpack: specifier: 5.91.0 - version: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) packages/i18next: dependencies: @@ -284,26 +287,26 @@ importers: version: link:../core devDependencies: '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/jest': specifier: 0.2.36 - version: 0.2.36(@swc/core@1.4.13) + version: 0.2.36(@swc/core@1.4.17) '@types/jest': specifier: 29.5.12 version: 29.5.12 '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -314,8 +317,8 @@ importers: specifier: 8.57.0 version: 8.57.0 i18next: - specifier: 23.11.1 - version: 23.11.1 + specifier: 23.11.3 + version: 23.11.3 i18next-browser-languagedetector: specifier: 7.2.1 version: 7.2.1 @@ -326,20 +329,84 @@ importers: specifier: 29.7.0 version: 29.7.0 react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-i18next: - specifier: 14.1.0 - version: 14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.1 + version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1) ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.5)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + typescript: + specifier: 5.4.5 + version: 5.4.5 + + packages/module-federation: + dependencies: + '@module-federation/enhanced': + specifier: 0.1.11 + version: 0.1.11(typescript@5.4.5)(vue-tsc@1.8.27)(webpack@5.91.0) + '@squide/core': + specifier: workspace:* + version: link:../core + devDependencies: + '@swc/core': + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) + '@swc/jest': + specifier: 0.2.36 + version: 0.2.36(@swc/core@1.4.17) + '@types/jest': + specifier: 29.5.12 + version: 29.5.12 + '@types/node': + specifier: 20.12.7 + version: 20.12.7 + '@types/react': + specifier: 18.3.1 + version: 18.3.1 + '@types/react-dom': + specifier: 18.3.0 + version: 18.3.0 + '@workleap/eslint-plugin': + specifier: 3.2.2 + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + '@workleap/swc-configs': + specifier: 2.2.3 + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) + '@workleap/tsup-configs': + specifier: 3.0.6 + version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) + '@workleap/typescript-configs': + specifier: 3.0.2 + version: 3.0.2(typescript@5.4.5) + eslint: + specifier: 8.57.0 + version: 8.57.0 + jest: + specifier: 29.7.0 + version: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2) + jest-environment-jsdom: + specifier: 29.7.0 + version: 29.7.0 + react: + specifier: 18.3.1 + version: 18.3.1 + react-dom: + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) + ts-jest: + specifier: 29.1.2 + version: 29.1.2(@babel/core@7.24.5)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) + tsup: + specifier: 8.0.2 + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -351,14 +418,14 @@ importers: version: link:../core devDependencies: '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -369,17 +436,17 @@ importers: specifier: 8.57.0 version: 8.57.0 msw: - specifier: 2.2.13 - version: 2.2.13(typescript@5.4.5) + specifier: 2.2.14 + version: 2.2.14(typescript@5.4.5) react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -391,32 +458,32 @@ importers: version: link:../core devDependencies: '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/jest': specifier: 0.2.36 - version: 0.2.36(@swc/core@1.4.13) + version: 0.2.36(@swc/core@1.4.17) '@testing-library/react': - specifier: 15.0.1 - version: 15.0.1(react-dom@18.2.0)(react@18.2.0) + specifier: 15.0.5 + version: 15.0.5(react-dom@18.3.1)(react@18.3.1) '@types/jest': specifier: 29.5.12 version: 29.5.12 '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@types/react-test-renderer': - specifier: 18.0.7 - version: 18.0.7 + specifier: 18.3.0 + version: 18.3.0 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -433,35 +500,38 @@ importers: specifier: 29.7.0 version: 29.7.0 react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-router-dom: - specifier: 6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + specifier: 6.23.0 + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) react-test-renderer: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) ts-jest: specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.24.5)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 packages/webpack-configs: dependencies: + '@module-federation/enhanced': + specifier: 0.1.11 + version: 0.1.11(typescript@5.4.5)(vue-tsc@1.8.27)(webpack@5.91.0) '@swc/helpers': specifier: '*' - version: 0.5.9 + version: 0.5.11 '@workleap/webpack-configs': specifier: 1.5.1 - version: 1.5.1(@swc/core@1.4.13)(@swc/helpers@0.5.9)(browserslist@4.23.0)(esbuild@0.19.12)(postcss@8.4.38)(typescript@5.4.5)(webpack-dev-server@5.0.4)(webpack@5.91.0) + version: 1.5.1(@swc/core@1.4.17)(@swc/helpers@0.5.11)(browserslist@4.23.0)(esbuild@0.19.12)(postcss@8.4.38)(typescript@5.4.5)(webpack-dev-server@5.0.4)(webpack@5.91.0) browserslist: specifier: '*' version: 4.23.0 @@ -474,28 +544,34 @@ importers: postcss: specifier: '*' version: 8.4.38 + semver: + specifier: 7.6.0 + version: 7.6.0 webpack-dev-server: specifier: '>=5.0.0' version: 5.0.4(webpack@5.91.0) devDependencies: '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/jest': specifier: 0.2.36 - version: 0.2.36(@swc/core@1.4.13) + version: 0.2.36(@swc/core@1.4.17) '@types/jest': specifier: 29.5.12 version: 29.5.12 '@types/node': specifier: 20.12.7 version: 20.12.7 + '@types/semver': + specifier: 7.5.8 + version: 7.5.8 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -513,77 +589,13 @@ importers: version: 29.7.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 webpack: specifier: 5.91.0 - version: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) - - packages/webpack-module-federation: - dependencies: - '@squide/core': - specifier: workspace:* - version: link:../core - webpack: - specifier: '>=5.0.0' - version: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) - devDependencies: - '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) - '@swc/jest': - specifier: 0.2.36 - version: 0.2.36(@swc/core@1.4.13) - '@types/jest': - specifier: 29.5.12 - version: 29.5.12 - '@types/node': - specifier: 20.12.7 - version: 20.12.7 - '@types/react': - specifier: 18.2.77 - version: 18.2.77 - '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 - '@workleap/eslint-plugin': - specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) - '@workleap/swc-configs': - specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) - '@workleap/tsup-configs': - specifier: 3.0.6 - version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) - '@workleap/typescript-configs': - specifier: 3.0.2 - version: 3.0.2(typescript@5.4.5) - eslint: - specifier: 8.57.0 - version: 8.57.0 - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2) - jest-environment-jsdom: - specifier: 29.7.0 - version: 29.7.0 - react: - specifier: 18.2.0 - version: 18.2.0 - react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) - ts-jest: - specifier: 29.1.2 - version: 29.1.2(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5) - tsup: - specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) - typescript: - specifier: 5.4.5 - version: 5.4.5 + version: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) samples/basic/another-remote-module: dependencies: @@ -595,10 +607,10 @@ importers: version: link:../shell '@react-aria/toast': specifier: 3.0.0-beta.10 - version: 3.0.0-beta.10(react@18.2.0) + version: 3.0.0-beta.10(react@18.3.1) '@react-stately/toast': specifier: 3.0.0-beta.2 - version: 3.0.0-beta.2(react@18.2.0) + version: 3.0.0-beta.2(react@18.3.1) '@squide/fakes': specifier: workspace:* version: link:../../../packages/fakes @@ -606,42 +618,45 @@ importers: specifier: workspace:* version: link:../../../packages/firefly react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-router-dom: - specifier: 6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + specifier: 6.23.0 + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) + useless-lib: + specifier: 3.0.0 + version: 3.0.0 devDependencies: - '@squide/firefly-configs': + '@squide/firefly-webpack-configs': specifier: workspace:* - version: link:../../../packages/firefly-configs + version: link:../../../packages/firefly-webpack-configs '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/helpers': - specifier: 0.5.9 - version: 0.5.9 + specifier: 0.5.11 + version: 0.5.11 '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/browserslist-config': specifier: 2.0.1 version: 2.0.1 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/typescript-configs': specifier: 3.0.2 version: 3.0.2(typescript@5.4.5) @@ -665,7 +680,7 @@ importers: version: 5.4.5 webpack: specifier: 5.91.0 - version: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 version: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) @@ -686,10 +701,10 @@ importers: version: link:../shell '@react-aria/toast': specifier: 3.0.0-beta.10 - version: 3.0.0-beta.10(react@18.2.0) + version: 3.0.0-beta.10(react@18.3.1) '@react-stately/toast': specifier: 3.0.0-beta.2 - version: 3.0.0-beta.2(react@18.2.0) + version: 3.0.0-beta.2(react@18.3.1) '@squide/fakes': specifier: workspace:* version: link:../../../packages/fakes @@ -697,42 +712,45 @@ importers: specifier: workspace:* version: link:../../../packages/firefly react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-router-dom: - specifier: 6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + specifier: 6.23.0 + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) + useless-lib: + specifier: ^2.0.0 + version: 2.1.0 devDependencies: - '@squide/firefly-configs': + '@squide/firefly-webpack-configs': specifier: workspace:* - version: link:../../../packages/firefly-configs + version: link:../../../packages/firefly-webpack-configs '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/helpers': - specifier: 0.5.9 - version: 0.5.9 + specifier: 0.5.11 + version: 0.5.11 '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/browserslist-config': specifier: 2.0.1 version: 2.0.1 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/typescript-configs': specifier: 3.0.2 version: 3.0.2(typescript@5.4.5) @@ -756,7 +774,7 @@ importers: version: 5.4.5 webpack: specifier: 5.91.0 - version: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 version: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) @@ -779,48 +797,48 @@ importers: specifier: workspace:* version: link:../../../packages/firefly react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-router-dom: - specifier: 6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + specifier: 6.23.0 + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) devDependencies: '@react-aria/toast': specifier: 3.0.0-beta.10 - version: 3.0.0-beta.10(react@18.2.0) + version: 3.0.0-beta.10(react@18.3.1) '@react-stately/toast': specifier: 3.0.0-beta.2 - version: 3.0.0-beta.2(react@18.2.0) - '@squide/firefly-configs': + version: 3.0.0-beta.2(react@18.3.1) + '@squide/firefly-webpack-configs': specifier: workspace:* - version: link:../../../packages/firefly-configs + version: link:../../../packages/firefly-webpack-configs '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/helpers': - specifier: 0.5.9 - version: 0.5.9 + specifier: 0.5.11 + version: 0.5.11 '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/browserslist-config': specifier: 2.0.1 version: 2.0.1 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -838,13 +856,13 @@ importers: version: 3.1.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 webpack: specifier: 5.91.0 - version: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 version: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) @@ -862,10 +880,10 @@ importers: version: link:../shell '@react-aria/toast': specifier: 3.0.0-beta.10 - version: 3.0.0-beta.10(react@18.2.0) + version: 3.0.0-beta.10(react@18.3.1) '@react-stately/toast': specifier: 3.0.0-beta.2 - version: 3.0.0-beta.2(react@18.2.0) + version: 3.0.0-beta.2(react@18.3.1) '@squide/fakes': specifier: workspace:* version: link:../../../packages/fakes @@ -873,42 +891,45 @@ importers: specifier: workspace:* version: link:../../../packages/firefly react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-router-dom: - specifier: 6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + specifier: 6.23.0 + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) + useless-lib: + specifier: ^2.1.0 + version: 2.1.0 devDependencies: - '@squide/firefly-configs': + '@squide/firefly-webpack-configs': specifier: workspace:* - version: link:../../../packages/firefly-configs + version: link:../../../packages/firefly-webpack-configs '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/helpers': - specifier: 0.5.9 - version: 0.5.9 + specifier: 0.5.11 + version: 0.5.11 '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/browserslist-config': specifier: 2.0.1 version: 2.0.1 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/typescript-configs': specifier: 3.0.2 version: 3.0.2(typescript@5.4.5) @@ -932,7 +953,7 @@ importers: version: 5.4.5 webpack: specifier: 5.91.0 - version: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 version: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) @@ -944,29 +965,29 @@ importers: dependencies: react: specifier: '*' - version: 18.2.0 + version: 18.3.1 react-dom: specifier: '*' - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: '*' - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-router-dom: specifier: '*' - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) devDependencies: '@squide/firefly': specifier: workspace:* version: link:../../../packages/firefly '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -981,7 +1002,7 @@ importers: version: 3.1.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -990,22 +1011,22 @@ importers: dependencies: '@react-aria/toast': specifier: '*' - version: 3.0.0-beta.10(react@18.2.0) + version: 3.0.0-beta.10(react@18.3.1) '@react-stately/toast': specifier: '*' - version: 3.0.0-beta.2(react@18.2.0) + version: 3.0.0-beta.2(react@18.3.1) react: specifier: '*' - version: 18.2.0 + version: 18.3.1 react-dom: specifier: '*' - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: '*' - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-router-dom: specifier: '*' - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) devDependencies: '@basic/shared': specifier: workspace:* @@ -1014,14 +1035,14 @@ importers: specifier: workspace:* version: link:../../../packages/firefly '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -1036,7 +1057,7 @@ importers: version: 3.1.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -1068,57 +1089,57 @@ importers: specifier: workspace:* version: link:../../../packages/i18next i18next: - specifier: 23.11.1 - version: 23.11.1 + specifier: 23.11.3 + version: 23.11.3 i18next-browser-languagedetector: specifier: 7.2.1 version: 7.2.1 msw: - specifier: 2.2.13 - version: 2.2.13(typescript@5.4.5) + specifier: 2.2.14 + version: 2.2.14(typescript@5.4.5) react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-i18next: - specifier: 14.1.0 - version: 14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.1 + version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1) react-router-dom: - specifier: 6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + specifier: 6.23.0 + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) devDependencies: - '@squide/firefly-configs': + '@squide/firefly-webpack-configs': specifier: workspace:* - version: link:../../../packages/firefly-configs + version: link:../../../packages/firefly-webpack-configs '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/helpers': - specifier: 0.5.9 - version: 0.5.9 + specifier: 0.5.11 + version: 0.5.11 '@tanstack/react-query': - specifier: 5.29.2 - version: 5.29.2(react@18.2.0) + specifier: 5.32.0 + version: 5.32.0(react@18.3.1) '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/browserslist-config': specifier: 2.0.1 version: 2.0.1 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/typescript-configs': specifier: 3.0.2 version: 3.0.2(typescript@5.4.5) @@ -1145,7 +1166,7 @@ importers: version: 5.4.5 webpack: specifier: 5.91.0 - version: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 version: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) @@ -1157,19 +1178,19 @@ importers: dependencies: i18next: specifier: '*' - version: 23.11.1 + version: 23.11.3 i18next-browser-languagedetector: specifier: '*' version: 7.2.1 react: specifier: '*' - version: 18.2.0 + version: 18.3.1 react-dom: specifier: '*' - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) react-i18next: specifier: '*' - version: 14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0) + version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1) devDependencies: '@endpoints/shared': specifier: workspace:* @@ -1179,7 +1200,7 @@ importers: version: link:../../../packages/i18next '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -1194,7 +1215,7 @@ importers: version: 3.1.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -1203,25 +1224,25 @@ importers: dependencies: i18next: specifier: '*' - version: 23.11.1 + version: 23.11.3 i18next-browser-languagedetector: specifier: '*' version: 7.2.1 react: specifier: '*' - version: 18.2.0 + version: 18.3.1 react-dom: specifier: '*' - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: '*' - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-i18next: specifier: '*' - version: 14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0) + version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1) react-router-dom: specifier: '*' - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) devDependencies: '@endpoints/i18next': specifier: workspace:* @@ -1236,23 +1257,20 @@ importers: specifier: workspace:* version: link:../../../packages/i18next '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) '@workleap/typescript-configs': specifier: 3.0.2 version: 3.0.2(typescript@5.4.5) - cross-env: - specifier: 7.0.3 - version: 7.0.3 eslint: specifier: 8.57.0 version: 8.57.0 @@ -1261,7 +1279,7 @@ importers: version: 3.1.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -1290,60 +1308,60 @@ importers: specifier: workspace:* version: link:../../../packages/i18next '@tanstack/react-query': - specifier: 5.29.2 - version: 5.29.2(react@18.2.0) + specifier: 5.32.0 + version: 5.32.0(react@18.3.1) i18next: - specifier: 23.11.1 - version: 23.11.1 + specifier: 23.11.3 + version: 23.11.3 i18next-browser-languagedetector: specifier: 7.2.1 version: 7.2.1 msw: - specifier: 2.2.13 - version: 2.2.13(typescript@5.4.5) + specifier: 2.2.14 + version: 2.2.14(typescript@5.4.5) react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-i18next: - specifier: 14.1.0 - version: 14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.1 + version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1) react-router-dom: - specifier: 6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + specifier: 6.23.0 + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) devDependencies: - '@squide/firefly-configs': + '@squide/firefly-webpack-configs': specifier: workspace:* - version: link:../../../packages/firefly-configs + version: link:../../../packages/firefly-webpack-configs '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/helpers': - specifier: 0.5.9 - version: 0.5.9 + specifier: 0.5.11 + version: 0.5.11 '@tanstack/react-query-devtools': - specifier: 5.29.2 - version: 5.29.2(@tanstack/react-query@5.29.2)(react@18.2.0) + specifier: 5.32.0 + version: 5.32.0(@tanstack/react-query@5.32.0)(react@18.3.1) '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/browserslist-config': specifier: 2.0.1 version: 2.0.1 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -1367,13 +1385,13 @@ importers: version: 3.1.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 webpack: specifier: 5.91.0 - version: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 version: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) @@ -1405,60 +1423,60 @@ importers: specifier: workspace:* version: link:../../../packages/i18next '@tanstack/react-query': - specifier: 5.29.2 - version: 5.29.2(react@18.2.0) + specifier: 5.32.0 + version: 5.32.0(react@18.3.1) i18next: - specifier: 23.11.1 - version: 23.11.1 + specifier: 23.11.3 + version: 23.11.3 i18next-browser-languagedetector: specifier: 7.2.1 version: 7.2.1 msw: - specifier: 2.2.13 - version: 2.2.13(typescript@5.4.5) + specifier: 2.2.14 + version: 2.2.14(typescript@5.4.5) react: - specifier: 18.2.0 - version: 18.2.0 + specifier: 18.3.1 + version: 18.3.1 react-dom: - specifier: 18.2.0 - version: 18.2.0(react@18.2.0) + specifier: 18.3.1 + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-i18next: - specifier: 14.1.0 - version: 14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.1 + version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1) react-router-dom: - specifier: 6.22.3 - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + specifier: 6.23.0 + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) devDependencies: - '@squide/firefly-configs': + '@squide/firefly-webpack-configs': specifier: workspace:* - version: link:../../../packages/firefly-configs + version: link:../../../packages/firefly-webpack-configs '@swc/core': - specifier: 1.4.13 - version: 1.4.13(@swc/helpers@0.5.9) + specifier: 1.4.17 + version: 1.4.17(@swc/helpers@0.5.11) '@swc/helpers': - specifier: 0.5.9 - version: 0.5.9 + specifier: 0.5.11 + version: 0.5.11 '@tanstack/react-query-devtools': - specifier: 5.29.2 - version: 5.29.2(@tanstack/react-query@5.29.2)(react@18.2.0) + specifier: 5.32.0 + version: 5.32.0(@tanstack/react-query@5.32.0)(react@18.3.1) '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/browserslist-config': specifier: 2.0.1 version: 2.0.1 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/swc-configs': specifier: 2.2.3 - version: 2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0) + version: 2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0) '@workleap/typescript-configs': specifier: 3.0.2 version: 3.0.2(typescript@5.4.5) @@ -1485,7 +1503,7 @@ importers: version: 5.4.5 webpack: specifier: 5.91.0 - version: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + version: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-cli: specifier: 5.1.4 version: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) @@ -1497,23 +1515,23 @@ importers: dependencies: react: specifier: '*' - version: 18.2.0 + version: 18.3.1 react-dom: specifier: '*' - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) devDependencies: '@squide/firefly': specifier: workspace:* version: link:../../../packages/firefly '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) @@ -1528,7 +1546,7 @@ importers: version: 3.1.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -1537,28 +1555,28 @@ importers: dependencies: i18next: specifier: '*' - version: 23.11.1 + version: 23.11.3 i18next-browser-languagedetector: specifier: '*' version: 7.2.1 msw: specifier: '*' - version: 2.2.13(typescript@5.4.5) + version: 2.2.14(typescript@5.4.5) react: specifier: '*' - version: 18.2.0 + version: 18.3.1 react-dom: specifier: '*' - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) react-error-boundary: specifier: '*' - version: 4.0.13(react@18.2.0) + version: 4.0.13(react@18.3.1) react-i18next: specifier: '*' - version: 14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0) + version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1) react-router-dom: specifier: '*' - version: 6.22.3(react-dom@18.2.0)(react@18.2.0) + version: 6.23.0(react-dom@18.3.1)(react@18.3.1) devDependencies: '@endpoints/i18next': specifier: workspace:* @@ -1582,23 +1600,20 @@ importers: specifier: 20.12.7 version: 20.12.7 '@types/react': - specifier: 18.2.77 - version: 18.2.77 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: 18.2.25 - version: 18.2.25 + specifier: 18.3.0 + version: 18.3.0 '@workleap/eslint-plugin': specifier: 3.2.2 - version: 3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + version: 3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) '@workleap/tsup-configs': specifier: 3.0.6 version: 3.0.6(tsup@8.0.2)(typescript@5.4.5) '@workleap/typescript-configs': specifier: 3.0.2 version: 3.0.2(typescript@5.4.5) - cross-env: - specifier: 7.0.3 - version: 7.0.3 eslint: specifier: 8.57.0 version: 8.57.0 @@ -1607,18 +1622,13 @@ importers: version: 3.1.0 tsup: specifier: 8.0.2 - version: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + version: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - /@adobe/css-tools@4.3.3: resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} dev: true @@ -1634,27 +1644,27 @@ packages: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.24.2 + '@babel/highlight': 7.24.5 picocolors: 1.0.0 /@babel/compat-data@7.24.4: resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} - /@babel/core@7.24.4: - resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} + /@babel/core@7.24.5: + resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helpers': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helpers': 7.24.5 + '@babel/parser': 7.24.5 '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/traverse': 7.24.5 + '@babel/types': 7.24.5 convert-source-map: 2.0.0 debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 @@ -1663,11 +1673,11 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator@7.24.4: - resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} + /@babel/generator@7.24.5: + resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 @@ -1676,14 +1686,14 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: false /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: false /@babel/helper-compilation-targets@7.23.6: @@ -1696,44 +1706,44 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} + /@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.24.5 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-split-export-declaration': 7.24.5 semver: 6.3.1 dev: false - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.5): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: false - /@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4): - resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} + /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.5): + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 debug: 4.3.4(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -1750,1116 +1760,1116 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + /@babel/helper-member-expression-to-functions@7.24.5: + resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: false /@babel/helper-module-imports@7.24.3: resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 - /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-simple-access': 7.24.5 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-validator-identifier': 7.24.5 /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: false - /@babel/helper-plugin-utils@7.24.0: - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + /@babel/helper-plugin-utils@7.24.5: + resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} engines: {node: '>=6.9.0'} - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.5): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 + '@babel/helper-wrap-function': 7.24.5 dev: false - /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4): + /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.24.5 '@babel/helper-optimise-call-expression': 7.22.5 dev: false - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + /@babel/helper-simple-access@7.24.5: + resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: false - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@babel/helper-split-export-declaration@7.24.5: + resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 /@babel/helper-string-parser@7.24.1: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-validator-identifier@7.24.5: + resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} - /@babel/helper-wrap-function@7.22.20: - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + /@babel/helper-wrap-function@7.24.5: + resolution: {integrity: sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: false - /@babel/helpers@7.24.4: - resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} + /@babel/helpers@7.24.5: + resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/traverse': 7.24.5 + '@babel/types': 7.24.5 transitivePeerDependencies: - supports-color - /@babel/highlight@7.24.2: - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + /@babel/highlight@7.24.5: + resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - /@babel/parser@7.24.4: - resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + /@babel/parser@7.24.5: + resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.23.6 - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4): + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4): + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) dev: false - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: false - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4): + /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.5): resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} + /@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4): + /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.5): resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} + /@babel/plugin-transform-classes@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) + '@babel/helper-split-export-declaration': 7.24.5 globals: 11.12.0 dev: false - /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/template': 7.24.0 dev: false - /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} + /@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false - /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-simple-access': 7.22.5 + '@babel/core': 7.24.5 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-simple-access': 7.24.5 dev: false - /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-validator-identifier': 7.24.5 dev: false - /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.5): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} + /@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} + /@babel/plugin-transform-optional-chaining@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} + /@babel/plugin-transform-parameters@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} + /@babel/plugin-transform-private-property-in-object@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-react-constant-elements@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-react-constant-elements@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.4): + /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.5): resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.4): + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.5): resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/types': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) + '@babel/types': 7.24.5 dev: false - /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 regenerator-transform: 0.15.2 dev: false - /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false - /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4): - resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} + /@babel/plugin-transform-typeof-symbol@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==} + /@babel/plugin-transform-typescript@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) dev: false - /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4): + /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.5 dev: false - /@babel/preset-env@7.24.4(@babel/core@7.24.4): - resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==} + /@babel/preset-env@7.24.5(@babel/core@7.24.5): + resolution: {integrity: sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) - '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) - babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.4) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) - babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.4) - core-js-compat: 3.36.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.5) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.5) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-block-scoping': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) + '@babel/plugin-transform-classes': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-destructuring': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.5) + '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-object-rest-spread': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-private-property-in-object': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-typeof-symbol': 7.24.5(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.5) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.5) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) + core-js-compat: 3.37.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/types': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 + '@babel/types': 7.24.5 esutils: 2.0.3 dev: false - /@babel/preset-react@7.24.1(@babel/core@7.24.4): + /@babel/preset-react@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.4) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.4) - '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.5) + '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.5) dev: false - /@babel/preset-typescript@7.24.1(@babel/core@7.24.4): + /@babel/preset-typescript@7.24.1(@babel/core@7.24.5): resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.24.5 + '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.5) dev: false /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: false - /@babel/runtime@7.24.4: - resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} + /@babel/runtime@7.24.5: + resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -2869,21 +2879,21 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 - /@babel/traverse@7.24.1: - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + /@babel/traverse@7.24.5: + resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.4 + '@babel/generator': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/helper-split-export-declaration': 7.24.5 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: @@ -2894,52 +2904,52 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 - /@babel/types@7.24.0: - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + /@babel/types@7.24.5: + resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@bugsnag/browser@7.22.4: - resolution: {integrity: sha512-h2o9RZhAEIgJAUsECd7a00IkLnvQvLT7dUyUYx/s8VLvcq89gKa8E59rlM7f15wtkJ5MPfozhErXDpsdOvF4Rg==} + /@bugsnag/browser@7.22.7: + resolution: {integrity: sha512-70jFkWKscK2osm7bnFbPLevrzHClrygM3UcKetKs/l81Xuzlxnu1SS3onN5OUl9kd9RN4XMFr46Pv5jSqWqImQ==} dependencies: - '@bugsnag/core': 7.19.0 + '@bugsnag/core': 7.22.7 dev: true - /@bugsnag/core@7.19.0: - resolution: {integrity: sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==} + /@bugsnag/core@7.22.7: + resolution: {integrity: sha512-9DPWBkkBjhFJc5dCFy/wVC3HE0Aw3ZiLJKjyAxgywSKbILgtpD+qT1Xe8sacWyxU92znamlZ8H8ziQOe7jhhbA==} dependencies: - '@bugsnag/cuid': 3.0.2 + '@bugsnag/cuid': 3.1.1 '@bugsnag/safe-json-stringify': 6.0.0 error-stack-parser: 2.1.4 iserror: 0.0.2 stack-generator: 2.0.10 dev: true - /@bugsnag/cuid@3.0.2: - resolution: {integrity: sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==} + /@bugsnag/cuid@3.1.1: + resolution: {integrity: sha512-d2z4b0rEo3chI07FNN1Xds8v25CNeekecU6FC/2Fs9MxY2EipkZTThVcV2YinMn8dvRUlViKOyC50evoUxg8tw==} dev: true - /@bugsnag/js@7.20.2: - resolution: {integrity: sha512-Q08k0h0h6NFwFGkFmib39Uln2WpvJdqT1EGF1JlyYiGW03Y+VopVb9r37pZrRrN9IY08mxaIEO8la5xeaWAs6A==} + /@bugsnag/js@7.22.7: + resolution: {integrity: sha512-Qq8l06rSDTZtxgNIDpTeXHrin9C30INNbPfnR2CNcEsCmfqyVQb4USPEuRb0xg5wiaLKU9r4IAatMqiCgdzG6A==} dependencies: - '@bugsnag/browser': 7.22.4 - '@bugsnag/node': 7.22.3 + '@bugsnag/browser': 7.22.7 + '@bugsnag/node': 7.22.7 dev: true - /@bugsnag/node@7.22.3: - resolution: {integrity: sha512-vDXu0mrduonyCjUkTp+zKSh1WHAtA2VjB49xK5s1f/HnTASiJvzUOQBRXrkqaj37sndYHUSMxUCPvLawyc75nA==} + /@bugsnag/node@7.22.7: + resolution: {integrity: sha512-Ud8vpX9UkGxoWAk7OigyR7w1eycbsE5uv5KZx0aWiqDPXylvICd42V5ZiWstpkdm9IVFo9AQ4+gmerHPe4Lwrg==} dependencies: - '@bugsnag/core': 7.19.0 + '@bugsnag/core': 7.22.7 byline: 5.0.0 error-stack-parser: 2.1.4 iserror: 0.0.2 @@ -2964,7 +2974,7 @@ packages: /@changesets/apply-release-plan@7.0.0: resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@changesets/config': 3.0.0 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.0 @@ -2982,7 +2992,7 @@ packages: /@changesets/assemble-release-plan@6.0.0: resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.0.0 '@changesets/types': 6.0.0 @@ -3010,7 +3020,7 @@ packages: resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} hasBin: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@changesets/apply-release-plan': 7.0.0 '@changesets/assemble-release-plan': 6.0.0 '@changesets/changelog-git': 0.2.0 @@ -3084,7 +3094,7 @@ packages: /@changesets/get-release-plan@4.0.0: resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@changesets/assemble-release-plan': 6.0.0 '@changesets/config': 3.0.0 '@changesets/pre': 2.0.0 @@ -3100,7 +3110,7 @@ packages: /@changesets/git@3.0.0: resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -3125,7 +3135,7 @@ packages: /@changesets/pre@2.0.0: resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -3135,7 +3145,7 @@ packages: /@changesets/read@0.6.0: resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@changesets/git': 3.0.0 '@changesets/logger': 0.1.0 '@changesets/parse': 0.4.0 @@ -3156,7 +3166,7 @@ packages: /@changesets/write@0.3.0: resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 @@ -3237,8 +3247,8 @@ packages: requiresBuild: true optional: true - /@esbuild/aix-ppc64@0.20.0: - resolution: {integrity: sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==} + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} cpu: [ppc64] os: [aix] @@ -3263,8 +3273,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm64@0.20.0: - resolution: {integrity: sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==} + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -3289,8 +3299,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-arm@0.20.0: - resolution: {integrity: sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==} + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -3315,8 +3325,8 @@ packages: requiresBuild: true optional: true - /@esbuild/android-x64@0.20.0: - resolution: {integrity: sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==} + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -3341,8 +3351,8 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-arm64@0.20.0: - resolution: {integrity: sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==} + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -3367,8 +3377,8 @@ packages: requiresBuild: true optional: true - /@esbuild/darwin-x64@0.20.0: - resolution: {integrity: sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==} + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -3393,8 +3403,8 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-arm64@0.20.0: - resolution: {integrity: sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==} + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -3419,8 +3429,8 @@ packages: requiresBuild: true optional: true - /@esbuild/freebsd-x64@0.20.0: - resolution: {integrity: sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==} + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -3445,8 +3455,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm64@0.20.0: - resolution: {integrity: sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==} + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -3471,8 +3481,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-arm@0.20.0: - resolution: {integrity: sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==} + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -3497,8 +3507,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ia32@0.20.0: - resolution: {integrity: sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==} + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -3523,8 +3533,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-loong64@0.20.0: - resolution: {integrity: sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==} + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -3549,8 +3559,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-mips64el@0.20.0: - resolution: {integrity: sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==} + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -3575,8 +3585,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-ppc64@0.20.0: - resolution: {integrity: sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==} + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -3601,8 +3611,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-riscv64@0.20.0: - resolution: {integrity: sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==} + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -3627,8 +3637,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-s390x@0.20.0: - resolution: {integrity: sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==} + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -3653,8 +3663,8 @@ packages: requiresBuild: true optional: true - /@esbuild/linux-x64@0.20.0: - resolution: {integrity: sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==} + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -3679,8 +3689,8 @@ packages: requiresBuild: true optional: true - /@esbuild/netbsd-x64@0.20.0: - resolution: {integrity: sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==} + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -3705,8 +3715,8 @@ packages: requiresBuild: true optional: true - /@esbuild/openbsd-x64@0.20.0: - resolution: {integrity: sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==} + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -3731,8 +3741,8 @@ packages: requiresBuild: true optional: true - /@esbuild/sunos-x64@0.20.0: - resolution: {integrity: sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==} + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -3757,8 +3767,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-arm64@0.20.0: - resolution: {integrity: sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==} + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -3783,8 +3793,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-ia32@0.20.0: - resolution: {integrity: sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==} + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -3809,8 +3819,8 @@ packages: requiresBuild: true optional: true - /@esbuild/win32-x64@0.20.0: - resolution: {integrity: sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==} + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -3863,8 +3873,8 @@ packages: /@fastify/ajv-compiler@3.5.0: resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) + ajv: 8.13.0 + ajv-formats: 2.1.1(ajv@8.13.0) fast-uri: 2.3.0 dev: true @@ -3875,7 +3885,7 @@ packages: /@fastify/fast-json-stringify-compiler@4.3.0: resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} dependencies: - fast-json-stringify: 5.14.1 + fast-json-stringify: 5.15.0 dev: true /@fastify/merge-json-schemas@0.1.1: @@ -3894,8 +3904,8 @@ packages: mime: 3.0.0 dev: true - /@fastify/static@6.10.2: - resolution: {integrity: sha512-UoaMvIHSBLCZBYOVZwFRYqX2ufUhd7FFMYGDeSf0Z+D8jhYtwljjmuQGuanUP8kS4y/ZEV1a8mfLha3zNwsnnQ==} + /@fastify/static@6.12.0: + resolution: {integrity: sha512-KK1B84E6QD/FcQWxDI2aiUCwHxMJBI1KeCUzm1BwYpPY1b742+jeKruGHP2uOluuM6OkBPI8CIANrXcCRtC2oQ==} dependencies: '@fastify/accept-negotiator': 1.1.0 '@fastify/send': 2.1.0 @@ -3903,7 +3913,6 @@ packages: fastify-plugin: 4.5.1 glob: 8.1.0 p-limit: 3.1.0 - readable-stream: 4.5.2 dev: true /@formatjs/ecma402-abstract@1.18.2: @@ -3968,19 +3977,19 @@ packages: resolution: {integrity: sha512-tWZNBIS1CoekcwlMuyG2mr0a1Wo5lb5lEHwwWvZo+5GLgr3e9LLDTtmgtCWEwBpXMkxn9D+2W9j2FY6eZQq0tA==} dev: true - /@inquirer/confirm@3.1.4: - resolution: {integrity: sha512-2z2RC0JyQCmggQfRxFnQitGp8YZgdM/AqcOuLaUtL0dZHFByk5jgtzxECX4z5MsH8aq2WzdLPI2AHmHOkh8eRA==} + /@inquirer/confirm@3.1.6: + resolution: {integrity: sha512-Mj4TU29g6Uy+37UtpA8UpEOI2icBfpCwSW1QDtfx60wRhUy90s/kHPif2OXSSvuwDQT1lhAYRWUfkNf9Tecxvg==} engines: {node: '>=18'} dependencies: - '@inquirer/core': 8.0.0 - '@inquirer/type': 1.3.0 + '@inquirer/core': 8.1.0 + '@inquirer/type': 1.3.1 - /@inquirer/core@8.0.0: - resolution: {integrity: sha512-RAszmjXj+grbT9yQ9B+me40LskytwBYPhyl6yHI8h+J5BmL0gNI3pdvBBFD6S9LV0lzhzfCRMBMH5UvuUPYzZQ==} + /@inquirer/core@8.1.0: + resolution: {integrity: sha512-kfx0SU9nWgGe1f03ao/uXc85SFH1v2w3vQVH7QDGjKxdtJz+7vPitFtG++BTyJMYyYgH8MpXigutcXJeiQwVRw==} engines: {node: '>=18'} dependencies: - '@inquirer/figures': 1.0.0 - '@inquirer/type': 1.3.0 + '@inquirer/figures': 1.0.1 + '@inquirer/type': 1.3.1 '@types/mute-stream': 0.0.4 '@types/node': 20.12.7 '@types/wrap-ansi': 3.0.0 @@ -3993,34 +4002,34 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - /@inquirer/figures@1.0.0: - resolution: {integrity: sha512-3fw+7+77/duTnMJTeSS44wneszghI4tkr0m0xdIJabbYRe36ElzmsqyboMZ1nFRon6sT+ckVvYDVjwapKv+2sw==} + /@inquirer/figures@1.0.1: + resolution: {integrity: sha512-mtup3wVKia3ZwULPHcbs4Mor8Voi+iIXEWD7wCNbIO6lYR62oPCTQyrddi5OMYVXHzeCSoneZwJuS8sBvlEwDw==} engines: {node: '>=18'} - /@inquirer/type@1.3.0: - resolution: {integrity: sha512-RW4Zf6RCTnInRaOZuRHTqAUl+v6VJuQGglir7nW2BkT3OXOphMhkIFhvFRjorBx2l0VwtC/M4No8vYR65TdN9Q==} + /@inquirer/type@1.3.1: + resolution: {integrity: sha512-Pe3PFccjPVJV1vtlfVvm9OnlbxqdnP5QcscFEFEnK5quChf1ufZtM0r8mR5ToWHMxZOh0s8o/qp9ANGRTo/DAw==} engines: {node: '>=18'} /@internationalized/date@3.5.2: resolution: {integrity: sha512-vo1yOMUt2hzp63IutEaTUxROdvQg1qlMRsbCvbay2AK2Gai7wIgCyK5weEX3nHkiLgo4qCXHijFNC/ILhlRpOQ==} dependencies: - '@swc/helpers': 0.5.9 + '@swc/helpers': 0.5.11 /@internationalized/message@3.1.2: resolution: {integrity: sha512-MHAWsZWz8jf6jFPZqpTudcCM361YMtPIRu9CXkYmKjJ/0R3pQRScV5C0zS+Qi50O5UAm8ecKhkXx6mWDDcF6/g==} dependencies: - '@swc/helpers': 0.5.9 + '@swc/helpers': 0.5.11 intl-messageformat: 10.5.11 /@internationalized/number@3.5.1: resolution: {integrity: sha512-N0fPU/nz15SwR9IbfJ5xaS9Ss/O5h1sVXMZf43vc9mxEG48ovglvvzBjF53aHlq20uoR6c+88CrIXipU/LSzwg==} dependencies: - '@swc/helpers': 0.5.9 + '@swc/helpers': 0.5.11 /@internationalized/string@3.2.1: resolution: {integrity: sha512-vWQOvRIauvFMzOO+h7QrdsJmtN1AXAFVcaLWP9AseRN2o7iHceZ6bIXhBD4teZl8i91A3gxKnWBlGgjCwU6MFQ==} dependencies: - '@swc/helpers': 0.5.9 + '@swc/helpers': 0.5.11 /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -4239,7 +4248,7 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -4319,6 +4328,35 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@jsonjoy.com/base64@1.1.1(tslib@2.6.2): + resolution: {integrity: sha512-LnFjVChaGY8cZVMwAIMjvA1XwQjZ/zIXHyh28IyJkyNkzof4Dkm1+KN9UIm3lHhREH4vs7XwZ0NpkZKnwOtEfg==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + dependencies: + tslib: 2.6.2 + + /@jsonjoy.com/json-pack@1.0.2(tslib@2.6.2): + resolution: {integrity: sha512-4KMApTgb1Hvjz9Ue7unziJ1xNy3k6d2erp0hz1iXryXsf6LEM3KwN6YrfbqT0vqkUO8Tu+CSnvMia9cWX6YGVw==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + dependencies: + '@jsonjoy.com/base64': 1.1.1(tslib@2.6.2) + '@jsonjoy.com/util': 1.1.0(tslib@2.6.2) + hyperdyperid: 1.2.0 + thingies: 1.21.0(tslib@2.6.2) + tslib: 2.6.2 + + /@jsonjoy.com/util@1.1.0(tslib@2.6.2): + resolution: {integrity: sha512-Yz+xITJ3Y/w0DBISwPkBETP5/cITHXscjgQNZIkfrVz1V7/ahJY8vw+T+LZy/KtXgKuUWqu4GALAQ3bhGt9J8A==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + dependencies: + hyperdyperid: 1.2.0 + tslib: 2.6.2 + /@leichtgewicht/ip-codec@2.0.5: resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -4330,7 +4368,7 @@ packages: /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -4339,7 +4377,7 @@ packages: /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -4358,7 +4396,7 @@ packages: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.5.4 + semver: 7.6.0 tar: 6.2.1 transitivePeerDependencies: - encoding @@ -4376,13 +4414,132 @@ packages: nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.5.4 + semver: 7.6.0 tar: 6.2.1 transitivePeerDependencies: - encoding - supports-color dev: true + /@module-federation/dts-plugin@0.1.11(typescript@5.4.5)(vue-tsc@1.8.27): + resolution: {integrity: sha512-Lv8oTNOFx4MEXBCOYtpecWzQGsUXG8QxHXMUGQwAPNeYvdtnR+l38m04Jc9bM/jlvVt+ScM7mV5EybnvmcS3cw==} + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: ^1.0.24 + dependencies: + '@module-federation/managers': 0.1.11 + '@module-federation/sdk': 0.1.11 + '@module-federation/third-party-dts-extractor': 0.1.11 + adm-zip: 0.5.12 + ansi-colors: 4.1.3 + axios: 1.6.8 + chalk: 3.0.0 + fs-extra: 9.1.0 + isomorphic-ws: 5.0.0(ws@8.5.0) + koa: 2.11.0 + lodash.clonedeepwith: 4.5.0 + log4js: 6.9.1 + node-schedule: 2.1.1 + rambda: 9.2.0 + typescript: 5.4.5 + vue-tsc: 1.8.27(typescript@5.4.5) + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + /@module-federation/enhanced@0.1.11(typescript@5.4.5)(vue-tsc@1.8.27)(webpack@5.91.0): + resolution: {integrity: sha512-wVeovWMgHsu5uBZI3u7G/lBlA3JWjDy7hyLGeT38/jcD2WPx8U66W9jIqiVI0sn+4Yznznb2K+rNFeD7hTYBGQ==} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + dependencies: + '@module-federation/dts-plugin': 0.1.11(typescript@5.4.5)(vue-tsc@1.8.27) + '@module-federation/managers': 0.1.11 + '@module-federation/manifest': 0.1.11(typescript@5.4.5)(vue-tsc@1.8.27) + '@module-federation/rspack': 0.1.11(typescript@5.4.5)(vue-tsc@1.8.27) + '@module-federation/runtime-tools': 0.1.11 + '@module-federation/sdk': 0.1.11 + upath: 2.0.1 + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - typescript + - utf-8-validate + - vue-tsc + + /@module-federation/managers@0.1.11: + resolution: {integrity: sha512-29mP2rZVFMu10CAiljZiD19r1ynHreF4fBaXWSrLRCRRZSgRv4XMJV5s9RJ8OetygI6j9OuZmPG1RTUsSZLTmw==} + dependencies: + '@module-federation/sdk': 0.1.11 + find-pkg: 2.0.0 + fs-extra: 9.1.0 + + /@module-federation/manifest@0.1.11(typescript@5.4.5)(vue-tsc@1.8.27): + resolution: {integrity: sha512-RM4ef0Za0DD7QCGp9eR6gy1B5VX3DxkjRgJpZ04Kh/Xaa1ewnKkSejzYpEvD+bLCir8QViv0lrnH55ln7pLn/Q==} + dependencies: + '@module-federation/dts-plugin': 0.1.11(typescript@5.4.5)(vue-tsc@1.8.27) + '@module-federation/managers': 0.1.11 + '@module-federation/sdk': 0.1.11 + chalk: 3.0.0 + find-pkg: 2.0.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - typescript + - utf-8-validate + - vue-tsc + + /@module-federation/rspack@0.1.11(typescript@5.4.5)(vue-tsc@1.8.27): + resolution: {integrity: sha512-+2uYviFL8mib8iBYd9kNBPmkOUxmH66XjZyN9ZZMtIo6znqfkIQrWZ1H0VRULTUp/EQilzYZ4bf33NU+V5DS7Q==} + dependencies: + '@module-federation/dts-plugin': 0.1.11(typescript@5.4.5)(vue-tsc@1.8.27) + '@module-federation/managers': 0.1.11 + '@module-federation/manifest': 0.1.11(typescript@5.4.5)(vue-tsc@1.8.27) + '@module-federation/runtime-tools': 0.1.11 + '@module-federation/sdk': 0.1.11 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - typescript + - utf-8-validate + - vue-tsc + + /@module-federation/runtime-tools@0.1.11: + resolution: {integrity: sha512-CvEF35WF5mmadH2qXdgDYa1M+AWNh3Tu+krVTegngixmEYX8OIaB0x4U+9QNA3Bs4GHsR86f7VrT29TY4elUCA==} + dependencies: + '@module-federation/runtime': 0.1.11 + '@module-federation/webpack-bundler-runtime': 0.1.11 + + /@module-federation/runtime@0.1.11: + resolution: {integrity: sha512-oHsPHAzIKM2arTZZaa22Xn0A189q/bxxX93YJjIawyms/NMaIhEvs7PDz5loOgEuAWP4q1h960hG/aRwFuxwAA==} + dependencies: + '@module-federation/sdk': 0.1.11 + + /@module-federation/sdk@0.1.11: + resolution: {integrity: sha512-IdJmRX+WGmKDrXq3jEOvjB11YrVmysjSnostY5u5tBz7cSO1nTZz+oEBqQdkXvNyPY2R8FErtD7G5gdtQH1k7Q==} + + /@module-federation/third-party-dts-extractor@0.1.11: + resolution: {integrity: sha512-Sly7k9qBaoexFG66N57ppHzuWYaYABqydMzzgmSg8OlHYhfckC7ug949xpw1oq0gj+i6WE+8Ork4wtyzDXJTiw==} + dependencies: + find-pkg: 2.0.0 + fs-extra: 9.1.0 + resolve: 1.22.8 + + /@module-federation/webpack-bundler-runtime@0.1.11: + resolution: {integrity: sha512-xgQoCCwv+5Vjv7pKtQh9LTBZOvyVdhs7D80oOdJbN1YXL0PRoNE20RjOH7CwGcu8/Yc99PVCAKS25rai+DzEGw==} + dependencies: + '@module-federation/runtime': 0.1.11 + '@module-federation/sdk': 0.1.11 + /@mswjs/cookies@1.1.0: resolution: {integrity: sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==} engines: {node: '>=18'} @@ -4398,6 +4555,18 @@ packages: outvariant: 1.4.2 strict-event-emitter: 0.5.1 + /@mswjs/interceptors@0.27.2: + resolution: {integrity: sha512-mE6PhwcoW70EX8+h+Y/4dLfHk33GFt/y5PzDJz56ktMyaVGFXMJ5BYLbUjdmGEABfE0x5GgAGyKbrbkYww2s3A==} + engines: {node: '>=18'} + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.2 + strict-event-emitter: 0.5.1 + dev: true + /@netlify/binary-info@1.0.0: resolution: {integrity: sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==} dev: true @@ -4412,19 +4581,19 @@ packages: engines: {node: ^14.16.0 || >=16.0.0} hasBin: true dependencies: - '@bugsnag/js': 7.20.2 + '@bugsnag/js': 7.22.7 '@iarna/toml': 2.2.5 dot-prop: 7.2.0 find-up: 6.3.0 minimatch: 9.0.4 read-pkg: 7.1.0 - semver: 7.5.4 - yaml: 2.4.1 + semver: 7.6.0 + yaml: 2.4.2 yargs: 17.7.2 dev: true - /@netlify/build@29.39.1(@opentelemetry/api@1.8.0)(@types/node@20.12.7): - resolution: {integrity: sha512-Pl6xb7CecEJEkUszylscT1f7FF+37xaIk+wz5ZL99TIhZ2D/3f0w+wm0knASTB90dvmDaL4IAfPTDMORzgMBIA==} + /@netlify/build@29.41.2(@opentelemetry/api@1.8.0)(@types/node@20.12.7): + resolution: {integrity: sha512-txcYS00PXfmfw9hIxc4Q5c8p4DLkaGqgX3yjGUH2y/2NXxJQxpZiZBBVYeVW5q0rwb+17trE2gQJ/xnOXo3O5Q==} engines: {node: ^14.16.0 || >=16.0.0} hasBin: true peerDependencies: @@ -4434,18 +4603,18 @@ packages: '@netlify/opentelemetry-sdk-setup': optional: true dependencies: - '@bugsnag/js': 7.20.2 + '@bugsnag/js': 7.22.7 '@netlify/blobs': 7.3.0 '@netlify/cache-utils': 5.1.5 - '@netlify/config': 20.12.1 - '@netlify/edge-bundler': 11.3.0(supports-color@9.4.0) + '@netlify/config': 20.12.3 + '@netlify/edge-bundler': 12.0.0(supports-color@9.4.0) '@netlify/framework-info': 9.8.11 - '@netlify/functions-utils': 5.2.54(supports-color@9.4.0) + '@netlify/functions-utils': 5.2.55(@opentelemetry/api@1.8.0)(supports-color@9.4.0) '@netlify/git-utils': 5.1.1 - '@netlify/opentelemetry-utils': 1.1.0(@opentelemetry/api@1.8.0) + '@netlify/opentelemetry-utils': 1.2.0(@opentelemetry/api@1.8.0) '@netlify/plugins-list': 6.77.0 '@netlify/run-utils': 5.1.1 - '@netlify/zip-it-and-ship-it': 9.31.3(supports-color@9.4.0) + '@netlify/zip-it-and-ship-it': 9.32.1(@opentelemetry/api@1.8.0)(supports-color@9.4.0) '@opentelemetry/api': 1.8.0 '@sindresorhus/slugify': 2.2.1 ansi-escapes: 6.2.1 @@ -4465,6 +4634,7 @@ packages: log-process-errors: 8.0.0 map-obj: 5.0.2 memoize-one: 6.0.0 + minimatch: 9.0.4 node-fetch: 3.3.2 os-name: 5.1.0 p-event: 5.0.1 @@ -4483,14 +4653,14 @@ packages: resolve: 2.0.0-next.5 rfdc: 1.3.1 safe-json-stringify: 1.2.0 - semver: 7.5.4 + semver: 7.6.0 string-width: 5.1.2 strip-ansi: 7.1.0 supports-color: 9.4.0 terminal-link: 3.0.0 ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) typescript: 5.4.5 - uuid: 9.0.0 + uuid: 9.0.1 yargs: 17.7.2 transitivePeerDependencies: - '@swc/core' @@ -4514,8 +4684,8 @@ packages: readdirp: 3.6.0 dev: true - /@netlify/config@20.12.1: - resolution: {integrity: sha512-sziuaOA9XfeQjQf6Yru7S9k9xTMy9GAJSPJL02WFld0cFDA5dgDyAFLN34jedIbgl7jVV+g7Vb2nOJocfgibbg==} + /@netlify/config@20.12.3: + resolution: {integrity: sha512-E+oiGEm6zIvyFJ2kQC1IV5Ipiv7Ar84RuP2K+aVMSgu/raOn7ZfN9lM5TC43qboF3bDrJd6EuYDxVIAuxVkMCA==} engines: {node: ^14.16.0 || >=16.0.0} hasBin: true dependencies: @@ -4533,7 +4703,7 @@ packages: is-plain-obj: 4.1.0 js-yaml: 4.1.0 map-obj: 5.0.2 - netlify: 13.1.14 + netlify: 13.1.15 netlify-headers-parser: 7.1.4 netlify-redirect-parser: 14.2.2 node-fetch: 3.3.2 @@ -4545,18 +4715,18 @@ packages: yargs: 17.7.2 dev: true - /@netlify/edge-bundler@11.3.0: - resolution: {integrity: sha512-ROyjrrOCe4TYdBf9Eky8EFrSFENcKdsHHqGe0nSwbyLKDfbe9gPNwN9LoXt9QhxmPyJCOGwxz12kDX2rqFc+Mw==} + /@netlify/edge-bundler@12.0.0: + resolution: {integrity: sha512-whAeq2gQxWz8Bt85XN8VJRBwhHpGlbmu7LRX4bFBgXPNWVi1a9UrQ+F51gHj9p+B01tsztVrKlxqA555Sg0dgg==} engines: {node: ^14.16.0 || >=16.0.0} dependencies: '@import-maps/resolve': 1.0.1 '@vercel/nft': 0.26.4 - ajv: 8.12.0 - ajv-errors: 3.0.0(ajv@8.12.0) - better-ajv-errors: 1.2.0(ajv@8.12.0) + ajv: 8.13.0 + ajv-errors: 3.0.0(ajv@8.13.0) + better-ajv-errors: 1.2.0(ajv@8.13.0) common-path-prefix: 3.0.0 env-paths: 3.0.0 - esbuild: 0.20.0 + esbuild: 0.20.2 execa: 6.1.0 find-up: 6.3.0 get-package-name: 2.2.0 @@ -4568,27 +4738,27 @@ packages: p-retry: 5.1.2 p-wait-for: 4.1.0 path-key: 4.0.0 - semver: 7.5.4 + semver: 7.6.0 tmp-promise: 3.0.3 urlpattern-polyfill: 8.0.2 - uuid: 9.0.0 + uuid: 9.0.1 transitivePeerDependencies: - encoding - supports-color dev: true - /@netlify/edge-bundler@11.3.0(supports-color@9.4.0): - resolution: {integrity: sha512-ROyjrrOCe4TYdBf9Eky8EFrSFENcKdsHHqGe0nSwbyLKDfbe9gPNwN9LoXt9QhxmPyJCOGwxz12kDX2rqFc+Mw==} + /@netlify/edge-bundler@12.0.0(supports-color@9.4.0): + resolution: {integrity: sha512-whAeq2gQxWz8Bt85XN8VJRBwhHpGlbmu7LRX4bFBgXPNWVi1a9UrQ+F51gHj9p+B01tsztVrKlxqA555Sg0dgg==} engines: {node: ^14.16.0 || >=16.0.0} dependencies: '@import-maps/resolve': 1.0.1 '@vercel/nft': 0.26.4(supports-color@9.4.0) - ajv: 8.12.0 - ajv-errors: 3.0.0(ajv@8.12.0) - better-ajv-errors: 1.2.0(ajv@8.12.0) + ajv: 8.13.0 + ajv-errors: 3.0.0(ajv@8.13.0) + better-ajv-errors: 1.2.0(ajv@8.13.0) common-path-prefix: 3.0.0 env-paths: 3.0.0 - esbuild: 0.20.0 + esbuild: 0.20.2 execa: 6.1.0 find-up: 6.3.0 get-package-name: 2.2.0 @@ -4600,10 +4770,10 @@ packages: p-retry: 5.1.2 p-wait-for: 4.1.0 path-key: 4.0.0 - semver: 7.5.4 + semver: 7.6.0 tmp-promise: 3.0.3 urlpattern-polyfill: 8.0.2 - uuid: 9.0.0 + uuid: 9.0.1 transitivePeerDependencies: - encoding - supports-color @@ -4617,7 +4787,7 @@ packages: resolution: {integrity: sha512-8NuvzQQVeU36PRilWqijiIWmjy6JZcqbKooGQ4bNgH/26YNdS+tN5gOWGWVYnRHgdmBUCycyYrM5h1Srwnq3hQ==} engines: {node: ^14.14.0 || >=16.0.0} dependencies: - ajv: 8.12.0 + ajv: 8.13.0 filter-obj: 5.1.0 find-up: 6.3.0 is-plain-obj: 4.1.0 @@ -4626,17 +4796,18 @@ packages: p-locate: 6.0.0 process: 0.11.10 read-pkg-up: 9.1.0 - semver: 7.5.4 + semver: 7.6.0 dev: true - /@netlify/functions-utils@5.2.54(supports-color@9.4.0): - resolution: {integrity: sha512-QdYmIPC6NBp90MfuHWeNGqf1XdsRUcIIbcWnT2AK1g2By8ur8m28qGM99GlReRmprzC7ZT7YmwcHjUjaq24sRA==} + /@netlify/functions-utils@5.2.55(@opentelemetry/api@1.8.0)(supports-color@9.4.0): + resolution: {integrity: sha512-4xTb/zuUT5SFpZH+RGKUV6pwrYyGS3L4emcrVi5u/nbJ/8yU8v8MdUdTGxoUhyeFw1kIp5C6vsru1fpU0ti0XA==} engines: {node: ^14.16.0 || >=16.0.0} dependencies: - '@netlify/zip-it-and-ship-it': 9.31.3(supports-color@9.4.0) + '@netlify/zip-it-and-ship-it': 9.32.1(@opentelemetry/api@1.8.0)(supports-color@9.4.0) cpy: 9.0.1 path-exists: 5.0.0 transitivePeerDependencies: + - '@opentelemetry/api' - encoding - supports-color dev: true @@ -4787,8 +4958,8 @@ packages: engines: {node: '>=14'} dev: true - /@netlify/opentelemetry-utils@1.1.0(@opentelemetry/api@1.8.0): - resolution: {integrity: sha512-VpjyInWRdreD0lPqTmWlxROfjF5mFHo99y9r21v/TvRmPniUbvEeFrtPgbA1VsiXt0YcHXZ9jUi/PrsLjQ5vPg==} + /@netlify/opentelemetry-utils@1.2.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-sdeYmvUHXzs7bfoh7f32WVh2wLMOdF3d2Xdcg2FG1lCySXOJ4V6F3n8vPoPXwO7S5iSzJbfO2RPJsTtZCmbIcg==} engines: {node: '>=18.0.0'} peerDependencies: '@opentelemetry/api': ~1.8.0 @@ -4808,28 +4979,36 @@ packages: execa: 6.1.0 dev: true - /@netlify/serverless-functions-api@1.16.2: - resolution: {integrity: sha512-v28g91/bnvvFw+LO/ro/n766RhbWqB5UG2H73kwEUuSqlnLuO/tMgPh13vOeeIgjZcXZoulGn13g7eUs4j6Qpg==} - engines: {node: ^14.18.0 || >=16.0.0} + /@netlify/serverless-functions-api@1.18.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-VCU5btoGZ8M6iI7HSwpfZXCpBLKWFmRtq5xYt0K7dY96BZWVBmaZY6Tn+w4L2DrGXwAsIeOFNp8CHjVXfuCAkg==} + engines: {node: '>=18.0.0'} dependencies: + '@mswjs/interceptors': 0.27.2 '@netlify/node-cookies': 0.1.0 + '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.50.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.0 urlpattern-polyfill: 8.0.2 + transitivePeerDependencies: + - '@opentelemetry/api' dev: true - /@netlify/zip-it-and-ship-it@9.31.3: - resolution: {integrity: sha512-cB8DE0pV90IYShytLcKyxZFy6aolKqSuFDMOKVL/svJ6hMQOVlngz5ZKcNRX4rQ2uHWHTe75tgTn6OqmelQYrw==} + /@netlify/zip-it-and-ship-it@9.32.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-zLsWEJYCoWbQ7ZM0WcPdXzXtIRp9Y2KvbGpL7iWYmTaLBDrmZtYDnUkoyG0E3b9zmuQp9EAiE6evBdRr6usiRg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true dependencies: - '@babel/parser': 7.24.4 + '@babel/parser': 7.24.5 '@babel/types': 7.23.6 '@netlify/binary-info': 1.0.0 - '@netlify/serverless-functions-api': 1.16.2 + '@netlify/serverless-functions-api': 1.18.0(@opentelemetry/api@1.8.0) '@vercel/nft': 0.23.1 archiver: 6.0.2 common-path-prefix: 3.0.0 cp-file: 10.0.0 - es-module-lexer: 1.5.0 + es-module-lexer: 1.5.2 esbuild: 0.19.11 execa: 6.1.0 fast-glob: 3.3.2 @@ -4848,31 +5027,32 @@ packages: precinct: 11.0.5 require-package-name: 2.0.1 resolve: 2.0.0-next.5 - semver: 7.5.4 + semver: 7.6.0 tmp-promise: 3.0.3 toml: 3.0.0 unixify: 1.0.0 urlpattern-polyfill: 8.0.2 yargs: 17.7.2 transitivePeerDependencies: + - '@opentelemetry/api' - encoding - supports-color dev: true - /@netlify/zip-it-and-ship-it@9.31.3(supports-color@9.4.0): - resolution: {integrity: sha512-cB8DE0pV90IYShytLcKyxZFy6aolKqSuFDMOKVL/svJ6hMQOVlngz5ZKcNRX4rQ2uHWHTe75tgTn6OqmelQYrw==} + /@netlify/zip-it-and-ship-it@9.32.1(@opentelemetry/api@1.8.0)(supports-color@9.4.0): + resolution: {integrity: sha512-zLsWEJYCoWbQ7ZM0WcPdXzXtIRp9Y2KvbGpL7iWYmTaLBDrmZtYDnUkoyG0E3b9zmuQp9EAiE6evBdRr6usiRg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true dependencies: - '@babel/parser': 7.24.4 + '@babel/parser': 7.24.5 '@babel/types': 7.23.6 '@netlify/binary-info': 1.0.0 - '@netlify/serverless-functions-api': 1.16.2 + '@netlify/serverless-functions-api': 1.18.0(@opentelemetry/api@1.8.0) '@vercel/nft': 0.23.1(supports-color@9.4.0) archiver: 6.0.2 common-path-prefix: 3.0.0 cp-file: 10.0.0 - es-module-lexer: 1.5.0 + es-module-lexer: 1.5.2 esbuild: 0.19.11 execa: 6.1.0 fast-glob: 3.3.2 @@ -4891,13 +5071,14 @@ packages: precinct: 11.0.5(supports-color@9.4.0) require-package-name: 2.0.1 resolve: 2.0.0-next.5 - semver: 7.5.4 + semver: 7.6.0 tmp-promise: 3.0.3 toml: 3.0.0 unixify: 1.0.0 urlpattern-polyfill: 8.0.2 yargs: 17.7.2 transitivePeerDependencies: + - '@opentelemetry/api' - encoding - supports-color dev: true @@ -4944,36 +5125,20 @@ packages: fastq: 1.17.1 dev: true - /@npmcli/config@8.2.2: - resolution: {integrity: sha512-VvMHPIzcsKHCaNh9h4kCbn7NyDtcNJFMOUZ8Wu9SWhds5Egr1gMGU2fv+M50P1V5iAUZWZcv2Iguo5HTckpzww==} + /@npmcli/config@8.3.0: + resolution: {integrity: sha512-wQ0byz/w7jQZ+koT5tJtDFDVC16ye82P6frhGklu9KesZEiEqHoq1IQLhS2TPzvrkuWq/i3Id9oFreLT7KHlVQ==} engines: {node: ^16.14.0 || >=18.0.0} dependencies: '@npmcli/map-workspaces': 3.0.6 ci-info: 4.0.0 ini: 4.1.2 nopt: 7.2.0 - proc-log: 3.0.0 + proc-log: 4.2.0 read-package-json-fast: 3.0.2 semver: 7.6.0 walk-up-path: 3.0.1 dev: true - /@npmcli/git@5.0.6: - resolution: {integrity: sha512-4x/182sKXmQkf0EtXxT26GEsaOATpD7WVtza5hrYivWZeo6QefC6xq9KAXrnjtFKBZ4rZwR7aX/zClYYXgtwLw==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - '@npmcli/promise-spawn': 7.0.1 - lru-cache: 10.2.0 - npm-pick-manifest: 9.0.0 - proc-log: 4.0.0 - promise-inflight: 1.0.1 - promise-retry: 2.0.1 - semver: 7.6.0 - which: 4.0.0 - transitivePeerDependencies: - - bluebird - dev: true - /@npmcli/map-workspaces@3.0.6: resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4989,28 +5154,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /@npmcli/package-json@5.0.3: - resolution: {integrity: sha512-cgsjCvld2wMqkUqvY+SZI+1ZJ7umGBYc9IAKfqJRKJCcs7hCQYxScUgdsyrRINk3VmdCYf9TXiLBHQ6ECTxhtg==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - '@npmcli/git': 5.0.6 - glob: 10.3.12 - hosted-git-info: 7.0.1 - json-parse-even-better-errors: 3.0.1 - normalize-package-data: 6.0.0 - proc-log: 4.0.0 - semver: 7.6.0 - transitivePeerDependencies: - - bluebird - dev: true - - /@npmcli/promise-spawn@7.0.1: - resolution: {integrity: sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - which: 4.0.0 - dev: true - /@octokit/auth-token@3.0.4: resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} engines: {node: '>= 14'} @@ -5147,11 +5290,134 @@ packages: /@open-draft/until@2.1.0: resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + /@opentelemetry/api-logs@0.50.0: + resolution: {integrity: sha512-JdZuKrhOYggqOpUljAq4WWNi5nB10PmgoF0y2CvedLGXd0kSawb/UBnWT8gg1ND3bHCNHStAIVT0ELlxJJRqrA==} + engines: {node: '>=14'} + dependencies: + '@opentelemetry/api': 1.8.0 + dev: true + /@opentelemetry/api@1.8.0: resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} engines: {node: '>=8.0.0'} dev: true + /@opentelemetry/core@1.23.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/semantic-conventions': 1.23.0 + dev: true + + /@opentelemetry/core@1.24.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-FP2oN7mVPqcdxJDTTnKExj4mi91EH+DNuArKfHTjPuJWe2K1JfMIVXNfahw1h3onJxQnxS8K0stKkogX05s+Aw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/semantic-conventions': 1.24.0 + dev: true + + /@opentelemetry/otlp-transformer@0.50.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-s0sl1Yfqd5q1Kjrf6DqXPWzErL+XHhrXOfejh4Vc/SMTNqC902xDsC8JQxbjuramWt/+hibfguIvi7Ns8VLolA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.50.0 + '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-logs': 0.50.0(@opentelemetry/api-logs@0.50.0)(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) + dev: true + + /@opentelemetry/resources@1.23.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.23.0 + dev: true + + /@opentelemetry/resources@1.24.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-mxC7E7ocUS1tLzepnA7O9/G8G6ZTdjCH2pXme1DDDuCuk6n2/53GADX+GWBuyX0dfIxeMInIbJAdjlfN9GNr6A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.0 + dev: true + + /@opentelemetry/sdk-logs@0.50.0(@opentelemetry/api-logs@0.50.0)(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-PeUEupBB29p9nlPNqXoa1PUWNLsZnxG0DCDj3sHqzae+8y76B/A5hvZjg03ulWdnvBLYpnJslqzylG9E0IL87g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.9.0' + '@opentelemetry/api-logs': '>=0.39.1' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.50.0 + '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) + dev: true + + /@opentelemetry/sdk-metrics@1.23.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-4OkvW6+wST4h6LFG23rXSTf6nmTf201h9dzq7bE0z5R9ESEVLERZz6WXwE7PSgg1gdjlaznm1jLJf8GttypFDg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) + lodash.merge: 4.6.2 + dev: true + + /@opentelemetry/sdk-trace-base@1.23.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.23.0 + dev: true + + /@opentelemetry/sdk-trace-base@1.24.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-H9sLETZ4jw9UJ3totV8oM5R0m4CW0ZIOLfp4NV3g0CM8HD5zGZcaW88xqzWDgiYRpctFxd+WmHtGX/Upoa2vRg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.9.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.24.0(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.24.0 + dev: true + + /@opentelemetry/semantic-conventions@1.23.0: + resolution: {integrity: sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==} + engines: {node: '>=14'} + dev: true + + /@opentelemetry/semantic-conventions@1.24.0: + resolution: {integrity: sha512-yL0jI6Ltuz8R+Opj7jClGrul6pOoYrdfVmzQS4SITXRPH7I5IRZbrwe/6/v8v4WYMa6MYZG480S1+uc/IGfqsA==} + engines: {node: '>=14'} + dev: true + /@parcel/watcher-android-arm64@2.4.1: resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} engines: {node: '>= 10.0.0'} @@ -5304,8 +5570,8 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true - /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(webpack-dev-server@5.0.4)(webpack@5.91.0): - resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==} + /@pmmmwh/react-refresh-webpack-plugin@0.5.13(react-refresh@0.14.2)(webpack-dev-server@5.0.4)(webpack@5.91.0): + resolution: {integrity: sha512-odZVYXly+JwzYri9rKqqUAk0cY6zLpv4dxoKinhoJNShV36Gpxf+CyDIILJ4tYsJ1ZxIWs233Y39iVnynvDA/g==} engines: {node: '>= 10.13'} peerDependencies: '@types/webpack': 4.x || 5.x @@ -5313,7 +5579,7 @@ packages: sockjs-client: ^1.4.0 type-fest: '>=0.17.0 <5.0.0' webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x + webpack-dev-server: 3.x || 4.x || 5.x webpack-hot-middleware: 2.x webpack-plugin-serve: 0.x || 1.x peerDependenciesMeta: @@ -5331,16 +5597,14 @@ packages: optional: true dependencies: ansi-html-community: 0.0.8 - common-path-prefix: 3.0.0 - core-js-pure: 3.36.1 + core-js-pure: 3.37.0 error-stack-parser: 2.1.4 - find-up: 5.0.0 html-entities: 2.5.2 loader-utils: 2.0.4 - react-refresh: 0.14.0 + react-refresh: 0.14.2 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-dev-server: 5.0.4(webpack@5.91.0) dev: false @@ -5354,23 +5618,6 @@ packages: engines: {node: '>=16.14'} dev: true - /@pnpm/core-loggers@9.0.6(@pnpm/logger@5.0.0): - resolution: {integrity: sha512-iK67SGbp+06bA/elpg51wygPFjNA7JKHtKkpLxqXXHw+AjFFBC3f2OznJsCIuDK6HdGi5UhHLYqo5QxJ2gMqJQ==} - engines: {node: '>=16.14'} - peerDependencies: - '@pnpm/logger': ^5.0.0 - dependencies: - '@pnpm/logger': 5.0.0 - '@pnpm/types': 9.4.2 - dev: true - - /@pnpm/error@5.0.2: - resolution: {integrity: sha512-0TEm+tWNYm+9uh6DSKyRbv8pv/6b4NL0PastLvMxIoqZbBZ5Zj1cYi332R9xsSUi31ZOsu2wpgn/bC7DA9hrjg==} - engines: {node: '>=16.14'} - dependencies: - '@pnpm/constants': 7.1.1 - dev: true - /@pnpm/error@5.0.3: resolution: {integrity: sha512-ONJU5cUeoeJSy50qOYsMZQHTA/9QKmGgh1ATfEpCLgtbdwqUiwD9MxHNeXUYYI/pocBCz6r1ZCFqiQvO+8SUKA==} engines: {node: '>=16.14'} @@ -5378,31 +5625,6 @@ packages: '@pnpm/constants': 7.1.1 dev: true - /@pnpm/fetching-types@5.0.0: - resolution: {integrity: sha512-o9gdO1v8Uc5P2fBBuW6GSpfTqIivQmQlqjQJdFiQX0m+tgxlrMRneIg392jZuc6fk7kFqjLheInlslgJfwY+4Q==} - engines: {node: '>=16.14'} - dependencies: - '@zkochan/retry': 0.2.0 - node-fetch: 3.0.0-beta.9 - transitivePeerDependencies: - - domexception - dev: true - - /@pnpm/graceful-fs@3.2.0: - resolution: {integrity: sha512-vRoXJxscDpHak7YE9SqCkzfrayn+Lw+YueOeHIPEqkgokrHeYgYeONoc2kGh0ObHaRtNSsonozVfJ456kxLNvA==} - engines: {node: '>=16.14'} - dependencies: - graceful-fs: 4.2.11 - dev: true - - /@pnpm/logger@5.0.0: - resolution: {integrity: sha512-YfcB2QrX+Wx1o6LD1G2Y2fhDhOix/bAY/oAnMpHoNLsKkWIRbt1oKLkIFvxBMzLwAEPqnYWguJrYC+J6i4ywbw==} - engines: {node: '>=12.17'} - dependencies: - bole: 5.0.11 - ndjson: 2.0.0 - dev: true - /@pnpm/network.ca-file@1.0.2: resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} engines: {node: '>=12.22.0'} @@ -5419,83 +5641,6 @@ packages: config-chain: 1.1.13 dev: true - /@pnpm/npm-package-arg@1.0.0: - resolution: {integrity: sha512-oQYP08exi6mOPdAZZWcNIGS+KKPsnNwUBzSuAEGWuCcqwMAt3k/WVCqVIXzBxhO5sP2b43og69VHmPj6IroKqw==} - engines: {node: '>=14.6'} - dependencies: - hosted-git-info: 4.1.0 - semver: 7.6.0 - validate-npm-package-name: 4.0.0 - dev: true - - /@pnpm/npm-resolver@18.1.0(@pnpm/logger@5.0.0): - resolution: {integrity: sha512-fUYKX/iHiHldL0VRVvkQI35YK2jWhZEkPO6rrGke8309+LKAo12v833nBttMDpQrtHefmqhB4mhCzQq6L2Xqmg==} - engines: {node: '>=16.14'} - peerDependencies: - '@pnpm/logger': ^5.0.0 - dependencies: - '@pnpm/core-loggers': 9.0.6(@pnpm/logger@5.0.0) - '@pnpm/error': 5.0.2 - '@pnpm/fetching-types': 5.0.0 - '@pnpm/graceful-fs': 3.2.0 - '@pnpm/logger': 5.0.0 - '@pnpm/resolve-workspace-range': 5.0.1 - '@pnpm/resolver-base': 11.1.0 - '@pnpm/types': 9.4.2 - '@zkochan/retry': 0.2.0 - encode-registry: 3.0.1 - load-json-file: 6.2.0 - lru-cache: 10.2.0 - normalize-path: 3.0.0 - p-limit: 3.1.0 - p-memoize: 4.0.1 - parse-npm-tarball-url: 3.0.0 - path-temp: 2.1.0 - ramda: /@pnpm/ramda@0.28.1 - rename-overwrite: 5.0.0 - semver: 7.6.0 - ssri: 10.0.5 - version-selector-type: 3.0.0 - transitivePeerDependencies: - - domexception - dev: true - - /@pnpm/ramda@0.28.1: - resolution: {integrity: sha512-zcAG+lvU0fMziNeGXpPyCyCJYp5ZVrPElEE4t14jAmViaihohocZ+dDkcRIyAomox8pQsuZnv1EyHR+pOhmUWw==} - dev: true - - /@pnpm/resolve-workspace-range@5.0.1: - resolution: {integrity: sha512-yQ0pMthlw8rTgS/C9hrjne+NEnnSNevCjtdodd7i15I59jMBYciHifZ/vjg0NY+Jl+USTc3dBE+0h/4tdYjMKg==} - engines: {node: '>=16.14'} - dependencies: - semver: 7.6.0 - dev: true - - /@pnpm/resolver-base@11.1.0: - resolution: {integrity: sha512-y2qKaj18pwe1VWc3YXEitdYFo+WqOOt60aqTUuOVkJAirUzz0DzuYh3Ifct4znYWPdgUXHaN5DMphNF5iL85rA==} - engines: {node: '>=16.14'} - dependencies: - '@pnpm/types': 9.4.2 - dev: true - - /@pnpm/types@9.4.2: - resolution: {integrity: sha512-g1hcF8Nv4gd76POilz9gD4LITAPXOe5nX4ijgr8ixCbLQZfcpYiMfJ+C1RlMNRUDo8vhlNB4O3bUlxmT6EAQXA==} - engines: {node: '>=16.14'} - dev: true - - /@pnpm/workspace.pkgs-graph@2.0.14(@pnpm/logger@5.0.0): - resolution: {integrity: sha512-SBXXyWDkPEoaLTjLRyQzRHoBYH+P0NLcIjX1yPUxuJiMTvGOMzjpLWTuxYNVe/P0V0VQMrjpJFaJPjlViNLhzg==} - engines: {node: '>=16.14'} - dependencies: - '@pnpm/npm-package-arg': 1.0.0 - '@pnpm/npm-resolver': 18.1.0(@pnpm/logger@5.0.0) - '@pnpm/resolve-workspace-range': 5.0.1 - ramda: /@pnpm/ramda@0.28.1 - transitivePeerDependencies: - - '@pnpm/logger' - - domexception - dev: true - /@pnpm/workspace.read-manifest@1.0.3: resolution: {integrity: sha512-AC83sfZze5MzsaZjMzAgOOncOfDx8Edo1Pz5GTAFH7Pjqu1a/wFqgL+1ulyLADH5mfYQnF5olXTp7+EPXpZ4sQ==} engines: {node: '>=16.14'} @@ -5505,7 +5650,7 @@ packages: read-yaml-file: 2.1.0 dev: true - /@react-aria/i18n@3.10.2(react@18.2.0): + /@react-aria/i18n@3.10.2(react@18.3.1): resolution: {integrity: sha512-Z1ormoIvMOI4mEdcFLYsoJy9w/EzBdBmgfLP+S/Ah+1xwQOXpgwZxiKOhYHpWa0lf6hkKJL34N9MHJvCJ5Crvw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 @@ -5514,104 +5659,104 @@ packages: '@internationalized/message': 3.1.2 '@internationalized/number': 3.5.1 '@internationalized/string': 3.2.1 - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.9 - react: 18.2.0 + '@react-aria/ssr': 3.9.2(react@18.3.1) + '@react-aria/utils': 3.23.2(react@18.3.1) + '@react-types/shared': 3.22.1(react@18.3.1) + '@swc/helpers': 0.5.11 + react: 18.3.1 - /@react-aria/interactions@3.21.1(react@18.2.0): + /@react-aria/interactions@3.21.1(react@18.3.1): resolution: {integrity: sha512-AlHf5SOzsShkHfV8GLLk3v9lEmYqYHURKcXWue0JdYbmquMRkUsf/+Tjl1+zHVAQ8lKqRnPYbTmc4AcZbqxltw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.9 - react: 18.2.0 + '@react-aria/ssr': 3.9.2(react@18.3.1) + '@react-aria/utils': 3.23.2(react@18.3.1) + '@react-types/shared': 3.22.1(react@18.3.1) + '@swc/helpers': 0.5.11 + react: 18.3.1 - /@react-aria/landmark@3.0.0-beta.10(react@18.2.0): + /@react-aria/landmark@3.0.0-beta.10(react@18.3.1): resolution: {integrity: sha512-qFfAVgCUP/d+sFXCYVJHOMA8fD9VGBWcbJIbfz14X0sdyJ1gj5SL/m4o7cX3OsD9tgPz2A33c1FfmO2gN/qOVg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.9 - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) + '@react-aria/utils': 3.23.2(react@18.3.1) + '@react-types/shared': 3.22.1(react@18.3.1) + '@swc/helpers': 0.5.11 + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) - /@react-aria/ssr@3.9.2(react@18.2.0): + /@react-aria/ssr@3.9.2(react@18.3.1): resolution: {integrity: sha512-0gKkgDYdnq1w+ey8KzG9l+H5Z821qh9vVjztk55rUg71vTk/Eaebeir+WtzcLLwTjw3m/asIjx8Y59y1lJZhBw==} engines: {node: '>= 12'} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@swc/helpers': 0.5.9 - react: 18.2.0 + '@swc/helpers': 0.5.11 + react: 18.3.1 - /@react-aria/toast@3.0.0-beta.10(react@18.2.0): + /@react-aria/toast@3.0.0-beta.10(react@18.3.1): resolution: {integrity: sha512-b4PZaCZBc8oiiZ4xxWA0pusPj0VBiNbGJsmyQSe9L0OS7/wL+Z+70xpUMzL+RzhtRuP/lNx7G9a92HwcxFfrog==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/i18n': 3.10.2(react@18.2.0) - '@react-aria/interactions': 3.21.1(react@18.2.0) - '@react-aria/landmark': 3.0.0-beta.10(react@18.2.0) - '@react-aria/utils': 3.23.2(react@18.2.0) - '@react-stately/toast': 3.0.0-beta.2(react@18.2.0) - '@react-types/button': 3.9.2(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.9 - react: 18.2.0 - - /@react-aria/utils@3.23.2(react@18.2.0): + '@react-aria/i18n': 3.10.2(react@18.3.1) + '@react-aria/interactions': 3.21.1(react@18.3.1) + '@react-aria/landmark': 3.0.0-beta.10(react@18.3.1) + '@react-aria/utils': 3.23.2(react@18.3.1) + '@react-stately/toast': 3.0.0-beta.2(react@18.3.1) + '@react-types/button': 3.9.2(react@18.3.1) + '@react-types/shared': 3.22.1(react@18.3.1) + '@swc/helpers': 0.5.11 + react: 18.3.1 + + /@react-aria/utils@3.23.2(react@18.3.1): resolution: {integrity: sha512-yznR9jJ0GG+YJvTMZxijQwVp+ahP66DY0apZf7X+dllyN+ByEDW+yaL1ewYPIpugxVzH5P8jhnBXsIyHKN411g==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-aria/ssr': 3.9.2(react@18.2.0) - '@react-stately/utils': 3.9.1(react@18.2.0) - '@react-types/shared': 3.22.1(react@18.2.0) - '@swc/helpers': 0.5.9 - clsx: 2.1.0 - react: 18.2.0 + '@react-aria/ssr': 3.9.2(react@18.3.1) + '@react-stately/utils': 3.9.1(react@18.3.1) + '@react-types/shared': 3.22.1(react@18.3.1) + '@swc/helpers': 0.5.11 + clsx: 2.1.1 + react: 18.3.1 - /@react-stately/toast@3.0.0-beta.2(react@18.2.0): + /@react-stately/toast@3.0.0-beta.2(react@18.3.1): resolution: {integrity: sha512-LJT3VJ01VeQHTDt+6NwmRn4ma0plZWcWByAeJ24dLYJ0gUpHhHyCCIBB/C1BwZ3/eaNKn7/Crp5FONA6bBzDaA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@swc/helpers': 0.5.9 - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) + '@swc/helpers': 0.5.11 + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) - /@react-stately/utils@3.9.1(react@18.2.0): + /@react-stately/utils@3.9.1(react@18.3.1): resolution: {integrity: sha512-yzw75GE0iUWiyps02BOAPTrybcsMIxEJlzXqtvllAb01O9uX5n0i3X+u2eCpj2UoDF4zS08Ps0jPgWxg8xEYtA==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@swc/helpers': 0.5.9 - react: 18.2.0 + '@swc/helpers': 0.5.11 + react: 18.3.1 - /@react-types/button@3.9.2(react@18.2.0): + /@react-types/button@3.9.2(react@18.3.1): resolution: {integrity: sha512-EnPTkGHZRtiwAoJy5q9lDjoG30bEzA/qnvKG29VVXKYAGeqY2IlFs1ypmU+z1X/CpJgPcG3I5cakM7yTVm3pSg==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - '@react-types/shared': 3.22.1(react@18.2.0) - react: 18.2.0 + '@react-types/shared': 3.22.1(react@18.3.1) + react: 18.3.1 - /@react-types/shared@3.22.1(react@18.2.0): + /@react-types/shared@3.22.1(react@18.3.1): resolution: {integrity: sha512-PCpa+Vo6BKnRMuOEzy5zAZ3/H5tnQg1e80khMhK2xys0j6ZqzkgQC+fHMNZ7VDFNLqqNMj/o0eVeSBDh2POjkw==} peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.1 - /@remix-run/router@1.15.3: - resolution: {integrity: sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==} + /@remix-run/router@1.16.0: + resolution: {integrity: sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==} engines: {node: '>=14.0.0'} /@rollup/pluginutils@4.2.1: @@ -5622,120 +5767,128 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.14.2: - resolution: {integrity: sha512-ahxSgCkAEk+P/AVO0vYr7DxOD3CwAQrT0Go9BJyGQ9Ef0QxVOfjDZMiF4Y2s3mLyPrjonchIMH/tbWHucJMykQ==} + /@rollup/rollup-android-arm-eabi@4.17.2: + resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.14.2: - resolution: {integrity: sha512-lAarIdxZWbFSHFSDao9+I/F5jDaKyCqAPMq5HqnfpBw8dKDiCaaqM0lq5h1pQTLeIqueeay4PieGR5jGZMWprw==} + /@rollup/rollup-android-arm64@4.17.2: + resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.14.2: - resolution: {integrity: sha512-SWsr8zEUk82KSqquIMgZEg2GE5mCSfr9sE/thDROkX6pb3QQWPp8Vw8zOq2GyxZ2t0XoSIUlvHDkrf5Gmf7x3Q==} + /@rollup/rollup-darwin-arm64@4.17.2: + resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.14.2: - resolution: {integrity: sha512-o/HAIrQq0jIxJAhgtIvV5FWviYK4WB0WwV91SLUnsliw1lSAoLsmgEEgRWzDguAFeUEUUoIWXiJrPqU7vGiVkA==} + /@rollup/rollup-darwin-x64@4.17.2: + resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.14.2: - resolution: {integrity: sha512-nwlJ65UY9eGq91cBi6VyDfArUJSKOYt5dJQBq8xyLhvS23qO+4Nr/RreibFHjP6t+5ap2ohZrUJcHv5zk5ju/g==} + /@rollup/rollup-linux-arm-gnueabihf@4.17.2: + resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-musleabihf@4.17.2: + resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.14.2: - resolution: {integrity: sha512-Pg5TxxO2IVlMj79+c/9G0LREC9SY3HM+pfAwX7zj5/cAuwrbfj2Wv9JbMHIdPCfQpYsI4g9mE+2Bw/3aeSs2rQ==} + /@rollup/rollup-linux-arm64-gnu@4.17.2: + resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.14.2: - resolution: {integrity: sha512-cAOTjGNm84gc6tS02D1EXtG7tDRsVSDTBVXOLbj31DkwfZwgTPYZ6aafSU7rD/4R2a34JOwlF9fQayuTSkoclA==} + /@rollup/rollup-linux-arm64-musl@4.17.2: + resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.14.2: - resolution: {integrity: sha512-4RyT6v1kXb7C0fn6zV33rvaX05P0zHoNzaXI/5oFHklfKm602j+N4mn2YvoezQViRLPnxP8M1NaY4s/5kXO5cw==} + /@rollup/rollup-linux-powerpc64le-gnu@4.17.2: + resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.14.2: - resolution: {integrity: sha512-KNUH6jC/vRGAKSorySTyc/yRYlCwN/5pnMjXylfBniwtJx5O7X17KG/0efj8XM3TZU7raYRXJFFReOzNmL1n1w==} + /@rollup/rollup-linux-riscv64-gnu@4.17.2: + resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-s390x-gnu@4.14.2: - resolution: {integrity: sha512-xPV4y73IBEXToNPa3h5lbgXOi/v0NcvKxU0xejiFw6DtIYQqOTMhZ2DN18/HrrP0PmiL3rGtRG9gz1QE8vFKXQ==} + /@rollup/rollup-linux-s390x-gnu@4.17.2: + resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} cpu: [s390x] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.14.2: - resolution: {integrity: sha512-QBhtr07iFGmF9egrPOWyO5wciwgtzKkYPNLVCFZTmr4TWmY0oY2Dm/bmhHjKRwZoGiaKdNcKhFtUMBKvlchH+Q==} + /@rollup/rollup-linux-x64-gnu@4.17.2: + resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.14.2: - resolution: {integrity: sha512-8zfsQRQGH23O6qazZSFY5jP5gt4cFvRuKTpuBsC1ZnSWxV8ZKQpPqOZIUtdfMOugCcBvFGRa1pDC/tkf19EgBw==} + /@rollup/rollup-linux-x64-musl@4.17.2: + resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.14.2: - resolution: {integrity: sha512-H4s8UjgkPnlChl6JF5empNvFHp77Jx+Wfy2EtmYPe9G22XV+PMuCinZVHurNe8ggtwoaohxARJZbaH/3xjB/FA==} + /@rollup/rollup-win32-arm64-msvc@4.17.2: + resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.14.2: - resolution: {integrity: sha512-djqpAjm/i8erWYF0K6UY4kRO3X5+T4TypIqw60Q8MTqSBaQNpNXDhxdjpZ3ikgb+wn99svA7jxcXpiyg9MUsdw==} + /@rollup/rollup-win32-ia32-msvc@4.17.2: + resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.14.2: - resolution: {integrity: sha512-teAqzLT0yTYZa8ZP7zhFKEx4cotS8Tkk5XiqNMJhD4CpaWB1BHARE4Qy+RzwnXvSAYv+Q3jAqCVBS+PS+Yee8Q==} + /@rollup/rollup-win32-x64-msvc@4.17.2: + resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} cpu: [x64] os: [win32] requiresBuild: true @@ -5794,101 +5947,101 @@ packages: lodash: 4.17.21 dev: true - /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.4): + /@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.5): resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: false - /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.4): + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.5): resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: false - /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.4): + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.5): resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: false - /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.4): + /@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.5): resolution: {integrity: sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: false - /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.4): + /@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.5): resolution: {integrity: sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: false - /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.4): + /@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.5): resolution: {integrity: sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: false - /@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.4): + /@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.5): resolution: {integrity: sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: false - /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.4): + /@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.5): resolution: {integrity: sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==} engines: {node: '>=12'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 dev: false - /@svgr/babel-preset@8.1.0(@babel/core@7.24.4): + /@svgr/babel-preset@8.1.0(@babel/core@7.24.5): resolution: {integrity: sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==} engines: {node: '>=14'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.24.4 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.4) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.4) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.4) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.4) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.4) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.4) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.4) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.5) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.5) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.5) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.5) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.5) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.5) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.5) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.5) dev: false /@svgr/core@8.1.0(typescript@5.4.5): resolution: {integrity: sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==} engines: {node: '>=14'} dependencies: - '@babel/core': 7.24.4 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@svgr/babel-preset': 8.1.0(@babel/core@7.24.5) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@5.4.5) snake-case: 3.0.4 @@ -5901,7 +6054,7 @@ packages: resolution: {integrity: sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==} engines: {node: '>=14'} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 entities: 4.5.0 dev: false @@ -5911,8 +6064,8 @@ packages: peerDependencies: '@svgr/core': '*' dependencies: - '@babel/core': 7.24.4 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@svgr/babel-preset': 8.1.0(@babel/core@7.24.5) '@svgr/core': 8.1.0(typescript@5.4.5) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -5938,11 +6091,11 @@ packages: resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} engines: {node: '>=14'} dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-transform-react-constant-elements': 7.24.1(@babel/core@7.24.4) - '@babel/preset-env': 7.24.4(@babel/core@7.24.4) - '@babel/preset-react': 7.24.1(@babel/core@7.24.4) - '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/plugin-transform-react-constant-elements': 7.24.1(@babel/core@7.24.5) + '@babel/preset-env': 7.24.5(@babel/core@7.24.5) + '@babel/preset-react': 7.24.1(@babel/core@7.24.5) + '@babel/preset-typescript': 7.24.1(@babel/core@7.24.5) '@svgr/core': 8.1.0(typescript@5.4.5) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0)(typescript@5.4.5) @@ -5951,88 +6104,88 @@ packages: - typescript dev: false - /@swc/core-darwin-arm64@1.4.13: - resolution: {integrity: sha512-36P72FLpm5iq85IvoEjBvi22DiqkkEIanJ1M0E8bkxcFHUbjBrYfPY9T6cpPyK5oQqkaTBvNAc3j1BlVD6IH6w==} + /@swc/core-darwin-arm64@1.4.17: + resolution: {integrity: sha512-HVl+W4LezoqHBAYg2JCqR+s9ife9yPfgWSj37iIawLWzOmuuJ7jVdIB7Ee2B75bEisSEKyxRlTl6Y1Oq3owBgw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.4.13: - resolution: {integrity: sha512-ye7OgKpDdyA8AMIVVdmD1ICDaFXgoEXORnVO8bBHyul0WN71yUBZMX+YxEx2lpWtiftA2vY/1MAuOR80vHkBCw==} + /@swc/core-darwin-x64@1.4.17: + resolution: {integrity: sha512-WYRO9Fdzq4S/he8zjW5I95G1zcvyd9yyD3Tgi4/ic84P5XDlSMpBDpBLbr/dCPjmSg7aUXxNQqKqGkl6dQxYlA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.4.13: - resolution: {integrity: sha512-+x593Jlmu4c3lJtZUKRejWpV2MAij1Js5nmQLLdjo6ChR2D4B2rzj3iMiKn5gITew7fraF9t3fvXALdWh7HmUg==} + /@swc/core-linux-arm-gnueabihf@1.4.17: + resolution: {integrity: sha512-cgbvpWOvtMH0XFjvwppUCR+Y+nf6QPaGu6AQ5hqCP+5Lv2zO5PG0RfasC4zBIjF53xgwEaaWmGP5/361P30X8Q==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.4.13: - resolution: {integrity: sha512-0x8OVw4dfyNerrs/9eZX9wNnmvwbwXSMCi+LbE6Xt1pXOIwvoLtFIXcV3NsrlkFboO3sr5UAQIwDxKqbIZA9pQ==} + /@swc/core-linux-arm64-gnu@1.4.17: + resolution: {integrity: sha512-l7zHgaIY24cF9dyQ/FOWbmZDsEj2a9gRFbmgx2u19e3FzOPuOnaopFj0fRYXXKCmtdx+anD750iBIYnTR+pq/Q==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.4.13: - resolution: {integrity: sha512-Z9c4JiequtZvngPcxbCuAOkmWBxi2vInZbjjhD5I+Q9oiJdXUz1t2USGwsGPS41Xvk1BOA3ecK2Sn1ilY3titg==} + /@swc/core-linux-arm64-musl@1.4.17: + resolution: {integrity: sha512-qhH4gr9gAlVk8MBtzXbzTP3BJyqbAfUOATGkyUtohh85fPXQYuzVlbExix3FZXTwFHNidGHY8C+ocscI7uDaYw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.4.13: - resolution: {integrity: sha512-ChatHtk+vX0Ke5QG+jO+rIapw/KwZsi9MedCBHFXHH6iWF4z8d51cJeN68ykcn+vAXzjNeFNdlNy5Vbkd1zAqg==} + /@swc/core-linux-x64-gnu@1.4.17: + resolution: {integrity: sha512-vRDFATL1oN5oZMImkwbgSHEkp8xG1ofEASBypze01W1Tqto8t+yo6gsp69wzCZBlxldsvPpvFZW55Jq0Rn+UnA==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.4.13: - resolution: {integrity: sha512-0Pz39YR530mXpsztwQkmEKdkkZy4fY4Smdh4pkm6Ly8Nndyo0te/l4bcAGqN24Jp7aVwF/QSy14SAtw4HRjU9g==} + /@swc/core-linux-x64-musl@1.4.17: + resolution: {integrity: sha512-zQNPXAXn3nmPqv54JVEN8k2JMEcMTQ6veVuU0p5O+A7KscJq+AGle/7ZQXzpXSfUCXlLMX4wvd+rwfGhh3J4cw==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.4.13: - resolution: {integrity: sha512-LVZfhlD+jHcAbz5NN+gAJ1BEasB0WpcvUzcsJt0nQSRsojgzPzFjJ+fzEBnvT7SMtqKkrnVJ0OmDYeh88bDRpw==} + /@swc/core-win32-arm64-msvc@1.4.17: + resolution: {integrity: sha512-z86n7EhOwyzxwm+DLE5NoLkxCTme2lq7QZlDjbQyfCxOt6isWz8rkW5QowTX8w9Rdmk34ncrjSLvnHOeLY17+w==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.4.13: - resolution: {integrity: sha512-78hxHWUvUZtWsnhcf8DKwhBcNFJw+j4y4fN2B9ioXmBWX2tIyw+BqUHOrismOtjPihaZmwe/Ok2e4qmkawE2fw==} + /@swc/core-win32-ia32-msvc@1.4.17: + resolution: {integrity: sha512-JBwuSTJIgiJJX6wtr4wmXbfvOswHFj223AumUrK544QV69k60FJ9q2adPW9Csk+a8wm1hLxq4HKa2K334UHJ/g==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.4.13: - resolution: {integrity: sha512-WSfy1u2Xde6jU7UpHIInCUMW98Zw9iZglddKUAvmr1obkZji5U6EX0Oca3asEJdZPFb+2lMLjt0Mh5a1YisROg==} + /@swc/core-win32-x64-msvc@1.4.17: + resolution: {integrity: sha512-jFkOnGQamtVDBm3MF5Kq1lgW8vx4Rm1UvJWRUfg+0gx7Uc3Jp3QMFeMNw/rDNQYRDYPG3yunCC+2463ycd5+dg==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.4.13(@swc/helpers@0.5.9): - resolution: {integrity: sha512-rOtusBE+2gaeRkAJn5E4zp5yzZekZOypzSOz5ZG6P1hFbd+Cc26fWEdK6sUSnrkkvTd0Oj33KXLB/4UkbK/UHA==} + /@swc/core@1.4.17(@swc/helpers@0.5.11): + resolution: {integrity: sha512-tq+mdWvodMBNBBZbwFIMTVGYHe9N7zvEaycVVjfvAx20k1XozHbHhRv+9pEVFJjwRxLdXmtvFZd3QZHRAOpoNQ==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -6042,36 +6195,36 @@ packages: optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.9 + '@swc/helpers': 0.5.11 '@swc/types': 0.1.6 optionalDependencies: - '@swc/core-darwin-arm64': 1.4.13 - '@swc/core-darwin-x64': 1.4.13 - '@swc/core-linux-arm-gnueabihf': 1.4.13 - '@swc/core-linux-arm64-gnu': 1.4.13 - '@swc/core-linux-arm64-musl': 1.4.13 - '@swc/core-linux-x64-gnu': 1.4.13 - '@swc/core-linux-x64-musl': 1.4.13 - '@swc/core-win32-arm64-msvc': 1.4.13 - '@swc/core-win32-ia32-msvc': 1.4.13 - '@swc/core-win32-x64-msvc': 1.4.13 + '@swc/core-darwin-arm64': 1.4.17 + '@swc/core-darwin-x64': 1.4.17 + '@swc/core-linux-arm-gnueabihf': 1.4.17 + '@swc/core-linux-arm64-gnu': 1.4.17 + '@swc/core-linux-arm64-musl': 1.4.17 + '@swc/core-linux-x64-gnu': 1.4.17 + '@swc/core-linux-x64-musl': 1.4.17 + '@swc/core-win32-arm64-msvc': 1.4.17 + '@swc/core-win32-ia32-msvc': 1.4.17 + '@swc/core-win32-x64-msvc': 1.4.17 /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - /@swc/helpers@0.5.9: - resolution: {integrity: sha512-XI76sLwMJoLjJTOK5RblBZkouOJG3X3hjxLCzLnyN1ifAiKQc6Hck3uvnU4Z/dV/Dyk36Ffj8FLvDLV2oWvKTw==} + /@swc/helpers@0.5.11: + resolution: {integrity: sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==} dependencies: tslib: 2.6.2 - /@swc/jest@0.2.36(@swc/core@1.4.13): + /@swc/jest@0.2.36(@swc/core@1.4.17): resolution: {integrity: sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==} engines: {npm: '>= 7.0.0'} peerDependencies: '@swc/core': '*' dependencies: '@jest/create-cache-key-function': 29.7.0 - '@swc/core': 1.4.13(@swc/helpers@0.5.9) + '@swc/core': 1.4.17(@swc/helpers@0.5.11) '@swc/counter': 0.1.3 jsonc-parser: 3.2.1 dev: true @@ -6088,38 +6241,38 @@ packages: defer-to-connect: 2.0.1 dev: true - /@tanstack/query-core@5.29.0: - resolution: {integrity: sha512-WgPTRs58hm9CMzEr5jpISe8HXa3qKQ8CxewdYZeVnA54JrPY9B1CZiwsCoLpLkf0dGRZq+LcX5OiJb0bEsOFww==} + /@tanstack/query-core@5.32.0: + resolution: {integrity: sha512-Z3flEgCat55DRXU5UMwYU1U+DgFZKA3iufyOKs+II7iRAo0uXkeU7PH5e6sOH1CGEag0IpKmZxlUFpCg6roSKw==} /@tanstack/query-devtools@5.28.10: resolution: {integrity: sha512-5UN629fKa5/1K/2Pd26gaU7epxRrYiT1gy+V+pW5K6hnf1DeUKK3pANSb2eHKlecjIKIhTwyF7k9XdyE2gREvQ==} dev: true - /@tanstack/react-query-devtools@5.29.2(@tanstack/react-query@5.29.2)(react@18.2.0): - resolution: {integrity: sha512-EmsaLNa8iFtReAW+5ftom0/TW78fIosVor517ak/+JFaoTBw8Yub3ao937JFE6AM3K/HXhteqvObetgt1ndLcw==} + /@tanstack/react-query-devtools@5.32.0(@tanstack/react-query@5.32.0)(react@18.3.1): + resolution: {integrity: sha512-KWrzLoUjs9JtDSH3H2qbm5MjjykyAT8DkvP8tukw3gBG4ziu5WaWHciBjMsYSe1JB79AOxxGovzjW/Cd9+ofVw==} peerDependencies: - '@tanstack/react-query': ^5.29.2 + '@tanstack/react-query': ^5.32.0 react: ^18.0.0 dependencies: '@tanstack/query-devtools': 5.28.10 - '@tanstack/react-query': 5.29.2(react@18.2.0) - react: 18.2.0 + '@tanstack/react-query': 5.32.0(react@18.3.1) + react: 18.3.1 dev: true - /@tanstack/react-query@5.29.2(react@18.2.0): - resolution: {integrity: sha512-nyuWILR4u7H5moLGSiifLh8kIqQDLNOHGuSz0rcp+J75fNc8aQLyr5+I2JCHU3n+nJrTTW1ssgAD8HiKD7IFBQ==} + /@tanstack/react-query@5.32.0(react@18.3.1): + resolution: {integrity: sha512-+E3UudQtarnx9A6xhpgMZapyF+aJfNBGFMgI459FnduEZqT/9KhOWnMOneZahLRt52yzskSA0AuOyLkXHK0yBA==} peerDependencies: react: ^18.0.0 dependencies: - '@tanstack/query-core': 5.29.0 - react: 18.2.0 + '@tanstack/query-core': 5.32.0 + react: 18.3.1 - /@testing-library/dom@10.0.0: - resolution: {integrity: sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g==} + /@testing-library/dom@10.1.0: + resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} engines: {node: '>=18'} dependencies: '@babel/code-frame': 7.24.2 - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -6150,7 +6303,7 @@ packages: optional: true dependencies: '@adobe/css-tools': 4.3.3 - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 '@types/jest': 29.5.12 aria-query: 5.3.0 chalk: 3.0.0 @@ -6161,18 +6314,18 @@ packages: redent: 3.0.0 dev: true - /@testing-library/react@15.0.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-I8u4qqGAuBg7C1/kRB9n7Oz9Pc/UHEkmiQRbJziSG8B13eZfAcAUn8TSP26ZIvfSeb68CngmtZbKKcRqcQKa3g==} + /@testing-library/react@15.0.5(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-ttodVWYA2i2w4hRa6krKrmS1vKxAEkwDz34y+CwbcrbZUxFzUYN3a5xZyFKo+K6LBseCRCUkwcjATpaNn/UsIA==} engines: {node: '>=18'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.24.4 - '@testing-library/dom': 10.0.0 - '@types/react-dom': 18.2.25 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@babel/runtime': 7.24.5 + '@testing-library/dom': 10.1.0 + '@types/react-dom': 18.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) dev: true /@tokenizer/token@0.3.0: @@ -6217,8 +6370,8 @@ packages: /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 @@ -6227,20 +6380,20 @@ packages: /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.24.4 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.5 + '@babel/types': 7.24.5 dev: true /@types/babel__traverse@7.20.5: resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 dev: true /@types/body-parser@1.19.5: @@ -6283,11 +6436,11 @@ packages: /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.56.9 + '@types/eslint': 8.56.10 '@types/estree': 1.0.5 - /@types/eslint@8.56.9: - resolution: {integrity: sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==} + /@types/eslint@8.56.10: + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -6305,7 +6458,7 @@ packages: resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} dependencies: '@types/node': 20.12.7 - '@types/qs': 6.9.14 + '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -6314,7 +6467,7 @@ packages: dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.0 - '@types/qs': 6.9.14 + '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 /@types/glob@7.2.0: @@ -6444,34 +6597,30 @@ packages: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true - /@types/picomatch@2.3.3: - resolution: {integrity: sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==} - dev: true - /@types/prop-types@15.7.12: resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} dev: true - /@types/qs@6.9.14: - resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} /@types/range-parser@1.2.7: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - /@types/react-dom@18.2.25: - resolution: {integrity: sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA==} + /@types/react-dom@18.3.0: + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} dependencies: - '@types/react': 18.2.77 + '@types/react': 18.3.1 dev: true - /@types/react-test-renderer@18.0.7: - resolution: {integrity: sha512-1+ANPOWc6rB3IkSnElhjv6VLlKg2dSv/OWClUyZimbLsQyBn8Js9Vtdsi3UICJ2rIQ3k2la06dkB+C92QfhKmg==} + /@types/react-test-renderer@18.3.0: + resolution: {integrity: sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw==} dependencies: - '@types/react': 18.2.77 + '@types/react': 18.3.1 dev: true - /@types/react@18.2.77: - resolution: {integrity: sha512-CUT9KUUF+HytDM7WiXKLF9qUSg4tGImwy4FXTlfEDPEkkNUzJ7rVFolYweJ9fS1ljoIaP7M7Rdjc5eUm/Yu5AA==} + /@types/react@18.3.1: + resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -6570,8 +6719,8 @@ packages: dev: true optional: true - /@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} + /@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 @@ -6582,11 +6731,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.6.0 - '@typescript-eslint/type-utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.6.0 + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 graphemer: 1.4.0 @@ -6599,8 +6748,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} + /@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -6609,10 +6758,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 7.6.0 - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.6.0 + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 typescript: 5.4.5 @@ -6628,16 +6777,16 @@ packages: '@typescript-eslint/visitor-keys': 5.62.0 dev: true - /@typescript-eslint/scope-manager@7.6.0: - resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} + /@typescript-eslint/scope-manager@7.8.0: + resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/visitor-keys': 7.6.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 dev: true - /@typescript-eslint/type-utils@7.6.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} + /@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -6646,8 +6795,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) @@ -6661,8 +6810,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types@7.6.0: - resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} + /@typescript-eslint/types@7.8.0: + resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} engines: {node: ^18.18.0 || >=20.0.0} dev: true @@ -6708,8 +6857,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.5): - resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} + /@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5): + resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -6717,8 +6866,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/visitor-keys': 7.6.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/visitor-keys': 7.8.0 debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 @@ -6750,8 +6899,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.6.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} + /@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -6759,9 +6908,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 7.6.0 - '@typescript-eslint/types': 7.6.0 - '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 7.8.0 + '@typescript-eslint/types': 7.8.0 + '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -6777,11 +6926,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@7.6.0: - resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} + /@typescript-eslint/visitor-keys@7.8.0: + resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/types': 7.8.0 eslint-visitor-keys: 3.4.3 dev: true @@ -6875,6 +7024,22 @@ packages: - supports-color dev: true + /@volar/language-core@1.11.1: + resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} + dependencies: + '@volar/source-map': 1.11.1 + + /@volar/source-map@1.11.1: + resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} + dependencies: + muggle-string: 0.3.1 + + /@volar/typescript@1.11.1: + resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} + dependencies: + '@volar/language-core': 1.11.1 + path-browserify: 1.0.1 + /@voxpelli/semver-set@5.0.2: resolution: {integrity: sha512-9FzdmgUi1yFTEdilUsg95wvZCN0dtqdslhWHZDCfX74ISs7vd1Gb3QgXcYPs7EqY5SEy18iZkDVoZ02HOrHkcQ==} engines: {node: '>=16.0.0'} @@ -6887,13 +7052,50 @@ packages: engines: {node: '>=18.0.0'} dev: true - /@voxpelli/typed-utils@1.7.0: - resolution: {integrity: sha512-PdXqqKySZFV9lRAQ++9R2noCEHB5RGvOYD+Dl2LvcIGXO+AYPStTIdRb1peHf26UIyEjdo6gG0xp5OZ1vDTrAQ==} + /@voxpelli/typed-utils@1.10.1: + resolution: {integrity: sha512-HNRZ+rTbjS9MphabJR44JKd+tI+aCQljkdUANHnk6gwE3EJ4w2D3Dodzwjy4x+bndw43JoGqOfUHC+1CRNOHaw==} engines: {node: '>=18.0.0'} dependencies: '@voxpelli/type-helpers': 3.4.0 dev: true + /@vue/compiler-core@3.4.26: + resolution: {integrity: sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==} + dependencies: + '@babel/parser': 7.24.5 + '@vue/shared': 3.4.26 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + + /@vue/compiler-dom@3.4.26: + resolution: {integrity: sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==} + dependencies: + '@vue/compiler-core': 3.4.26 + '@vue/shared': 3.4.26 + + /@vue/language-core@1.8.27(typescript@5.4.5): + resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@volar/language-core': 1.11.1 + '@volar/source-map': 1.11.1 + '@vue/compiler-dom': 3.4.26 + '@vue/shared': 3.4.26 + computeds: 0.0.1 + minimatch: 9.0.4 + muggle-string: 0.3.1 + path-browserify: 1.0.1 + typescript: 5.4.5 + vue-template-compiler: 2.7.16 + + /@vue/shared@3.4.26: + resolution: {integrity: sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==} + /@webassemblyjs/ast@1.12.1: resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} dependencies: @@ -6992,7 +7194,7 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.91.0): @@ -7002,7 +7204,7 @@ packages: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.0.4)(webpack@5.91.0): @@ -7016,7 +7218,7 @@ packages: webpack-dev-server: optional: true dependencies: - webpack: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.91.0) @@ -7024,7 +7226,7 @@ packages: resolution: {integrity: sha512-9WEv0G4vRgFh2Wc7+PC+4pM1LCwdEKob5OD/7k708lYklLGwxGfu/S7UQZJzlAX5EepJyK/Xmm3VSkTR/Ue0Lg==} dev: true - /@workleap/eslint-plugin@3.2.2(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5): + /@workleap/eslint-plugin@3.2.2(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5): resolution: {integrity: sha512-yI58Fb5EX/eIuHaUKwxAEXo4ssNbUcIDD6JX6DbFXPEZiA4nnYTiDxRgaAGR+h5EnHMuas4tpPx0bg6S2B4x9g==} peerDependencies: '@typescript-eslint/parser': '*' @@ -7038,18 +7240,18 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-mdx: 3.1.5(eslint@8.57.0) eslint-plugin-package-json: 0.10.4(eslint@8.57.0)(jsonc-eslint-parser@2.4.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) eslint-plugin-storybook: 0.8.0(eslint@8.57.0)(typescript@5.4.5) - eslint-plugin-testing-library: 6.2.1(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-yml: 1.14.0(eslint@8.57.0) jsonc-eslint-parser: 2.4.0 typescript: 5.4.5 @@ -7061,7 +7263,7 @@ packages: - supports-color dev: true - /@workleap/swc-configs@2.2.3(@swc/core@1.4.13)(@swc/helpers@0.5.9)(@swc/jest@0.2.36)(browserslist@4.23.0): + /@workleap/swc-configs@2.2.3(@swc/core@1.4.17)(@swc/helpers@0.5.11)(@swc/jest@0.2.36)(browserslist@4.23.0): resolution: {integrity: sha512-zrDsorHKxZY4/DlahkWucNm7kH9xAWxsq0WAWAKcCeFiYUX2TqZT+FNKn3Rl2a//MJgEQJlcYD0VaUIZP3J17A==} peerDependencies: '@swc/core': '*' @@ -7074,9 +7276,9 @@ packages: browserslist: optional: true dependencies: - '@swc/core': 1.4.13(@swc/helpers@0.5.9) - '@swc/helpers': 0.5.9 - '@swc/jest': 0.2.36(@swc/core@1.4.13) + '@swc/core': 1.4.17(@swc/helpers@0.5.11) + '@swc/helpers': 0.5.11 + '@swc/jest': 0.2.36(@swc/core@1.4.17) browserslist: 4.23.0 dev: true @@ -7086,7 +7288,7 @@ packages: tsup: '*' typescript: '*' dependencies: - tsup: 8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) + tsup: 8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5) typescript: 5.4.5 dev: true @@ -7098,7 +7300,7 @@ packages: typescript: 5.4.5 dev: true - /@workleap/webpack-configs@1.5.1(@swc/core@1.4.13)(@swc/helpers@0.5.9)(browserslist@4.23.0)(esbuild@0.19.12)(postcss@8.4.38)(typescript@5.4.5)(webpack-dev-server@5.0.4)(webpack@5.91.0): + /@workleap/webpack-configs@1.5.1(@swc/core@1.4.17)(@swc/helpers@0.5.11)(browserslist@4.23.0)(esbuild@0.19.12)(postcss@8.4.38)(typescript@5.4.5)(webpack-dev-server@5.0.4)(webpack@5.91.0): resolution: {integrity: sha512-o7jRK3O5yAFGtp2qgT96B/XuWY58P5AG8EKZy533I13dXN9ibS3eoQOV57v04y8TyYzQJe1nC6mJofToJ1s57g==} peerDependencies: '@swc/core': '*' @@ -7111,21 +7313,21 @@ packages: webpack-dev-server: optional: true dependencies: - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack-dev-server@5.0.4)(webpack@5.91.0) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.13(react-refresh@0.14.2)(webpack-dev-server@5.0.4)(webpack@5.91.0) '@svgr/webpack': 8.1.0(typescript@5.4.5) - '@swc/core': 1.4.13(@swc/helpers@0.5.9) - '@swc/helpers': 0.5.9 + '@swc/core': 1.4.17(@swc/helpers@0.5.11) + '@swc/helpers': 0.5.11 browserslist: 4.23.0 css-loader: 6.11.0(webpack@5.91.0) html-webpack-plugin: 5.6.0(webpack@5.91.0) - mini-css-extract-plugin: 2.8.1(webpack@5.91.0) + mini-css-extract-plugin: 2.9.0(webpack@5.91.0) postcss: 8.4.38 postcss-loader: 8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0) - react-refresh: 0.14.0 + react-refresh: 0.14.2 style-loader: 3.3.4(webpack@5.91.0) - swc-loader: 0.2.6(@swc/core@1.4.13)(webpack@5.91.0) - terser-webpack-plugin: 5.3.10(@swc/core@1.4.13)(esbuild@0.19.12)(webpack@5.91.0) - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + swc-loader: 0.2.6(@swc/core@1.4.17)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.17)(esbuild@0.19.12)(webpack@5.91.0) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-dev-server: 5.0.4(webpack@5.91.0) transitivePeerDependencies: - '@rspack/core' @@ -7220,18 +7422,6 @@ packages: /@xtuc/long@4.2.2: resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - /@zkochan/retry@0.2.0: - resolution: {integrity: sha512-WhB+2B/ZPlW2Xy/kMJBrMbqecWXcbDDgn0K0wKBAgO2OlBTz1iLJrRWduo+DGGn0Akvz1Lu4Xvls7dJojximWw==} - engines: {node: '>=10'} - dev: true - - /@zkochan/rimraf@2.1.3: - resolution: {integrity: sha512-mCfR3gylCzPC+iqdxEA6z5SxJeOgzgbwmyxanKriIne5qZLswDe/M43aD3p5MNzwzXRhbZg/OX+MpES6Zk1a6A==} - engines: {node: '>=12.10'} - dependencies: - rimraf: 3.0.2 - dev: true - /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead @@ -7304,6 +7494,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /adm-zip@0.5.12: + resolution: {integrity: sha512-6TVU49mK6KZb4qG6xWaaM4C7sA/sgUMLy/JYMOzkcp3BvVLpW0fXDFQiIzAuxFCt/2+xD7fNIiPFAoLZPhVNLQ==} + engines: {node: '>=6.0'} + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -7322,6 +7516,15 @@ packages: - supports-color dev: true + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev: true + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -7338,15 +7541,15 @@ packages: indent-string: 5.0.0 dev: true - /ajv-errors@3.0.0(ajv@8.12.0): + /ajv-errors@3.0.0(ajv@8.13.0): resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} peerDependencies: ajv: ^8.0.1 dependencies: - ajv: 8.12.0 + ajv: 8.13.0 dev: true - /ajv-formats@2.1.1(ajv@8.12.0): + /ajv-formats@2.1.1(ajv@8.13.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 @@ -7354,9 +7557,9 @@ packages: ajv: optional: true dependencies: - ajv: 8.12.0 + ajv: 8.13.0 - /ajv-formats@3.0.1(ajv@8.12.0): + /ajv-formats@3.0.1(ajv@8.13.0): resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: ajv: ^8.0.0 @@ -7364,7 +7567,7 @@ packages: ajv: optional: true dependencies: - ajv: 8.12.0 + ajv: 8.13.0 dev: true /ajv-keywords@3.5.2(ajv@6.12.6): @@ -7374,12 +7577,12 @@ packages: dependencies: ajv: 6.12.6 - /ajv-keywords@5.1.0(ajv@8.12.0): + /ajv-keywords@5.1.0(ajv@8.13.0): resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 dependencies: - ajv: 8.12.0 + ajv: 8.13.0 fast-deep-equal: 3.1.3 /ajv@6.12.6: @@ -7390,8 +7593,8 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + /ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -7408,7 +7611,7 @@ packages: global-cache-dir: 4.4.0 is-plain-obj: 4.1.0 path-exists: 5.0.0 - semver: 7.5.4 + semver: 7.6.0 write-file-atomic: 4.0.2 dev: true @@ -7421,7 +7624,6 @@ packages: /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - dev: true /ansi-escapes@3.2.0: resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} @@ -7500,7 +7702,6 @@ packages: /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -7757,7 +7958,10 @@ packages: /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} /atob@2.1.2: resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} @@ -7793,6 +7997,15 @@ packages: engines: {node: '>=4'} dev: true + /axios@1.6.8: + resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==} + dependencies: + follow-redirects: 1.15.6(debug@4.3.4) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: @@ -7803,17 +8016,17 @@ packages: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} dev: true - /babel-jest@29.7.0(@babel/core@7.24.4): + /babel-jest@29.7.0(@babel/core@7.24.5): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.4) + babel-preset-jest: 29.6.3(@babel/core@7.24.5) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -7825,7 +8038,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.24.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -7839,76 +8052,76 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/types': 7.24.5 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 dev: true - /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4): - resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} + /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.5): resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) - core-js-compat: 3.36.1 + '@babel/core': 7.24.5 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + core-js-compat: 3.37.0 transitivePeerDependencies: - supports-color dev: false - /babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.4): - resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.5): + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + '@babel/core': 7.24.5 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) transitivePeerDependencies: - supports-color dev: false - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.5): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.24.4): + '@babel/core': 7.24.5 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.24.5): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) dev: true /babylon@6.18.0: @@ -7936,27 +8149,35 @@ packages: dev: true optional: true - /bare-fs@2.2.3: - resolution: {integrity: sha512-amG72llr9pstfXOBOHve1WjiuKKAMnebcmMbPWDZ7BCevAoJLpugjuAPRsDINEyjT0a6tbaVx3DctkXIRbLuJw==} + /bare-fs@2.3.0: + resolution: {integrity: sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw==} requiresBuild: true dependencies: bare-events: 2.2.2 - bare-path: 2.1.1 - streamx: 2.16.1 + bare-path: 2.1.2 + bare-stream: 1.0.0 + dev: true + optional: true + + /bare-os@2.3.0: + resolution: {integrity: sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg==} + requiresBuild: true dev: true optional: true - /bare-os@2.2.1: - resolution: {integrity: sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==} + /bare-path@2.1.2: + resolution: {integrity: sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig==} requiresBuild: true + dependencies: + bare-os: 2.3.0 dev: true optional: true - /bare-path@2.1.1: - resolution: {integrity: sha512-OHM+iwRDRMDBsSW7kl3dO62JyHdBKO3B25FB9vNQBPcGHMo4+eA8Yj41Lfbk3pS/seDY+siNge0LdRTulAau/A==} + /bare-stream@1.0.0: + resolution: {integrity: sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ==} requiresBuild: true dependencies: - bare-os: 2.2.1 + streamx: 2.16.1 dev: true optional: true @@ -7991,7 +8212,7 @@ packages: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} dev: true - /better-ajv-errors@1.2.0(ajv@8.12.0): + /better-ajv-errors@1.2.0(ajv@8.13.0): resolution: {integrity: sha512-UW+IsFycygIo7bclP9h5ugkNH8EjCSgqyFB/yQ4Hqqa1OEYDtb0uFIkYE0b6+CjkgJYVM5UKI/pJPxjYe9EZlA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -7999,7 +8220,7 @@ packages: dependencies: '@babel/code-frame': 7.24.2 '@humanwhocodes/momoa': 2.0.4 - ajv: 8.12.0 + ajv: 8.13.0 chalk: 4.1.2 jsonpointer: 5.0.1 leven: 3.1.0 @@ -8072,13 +8293,6 @@ packages: transitivePeerDependencies: - supports-color - /bole@5.0.11: - resolution: {integrity: sha512-KB0Ye0iMAW5BnNbnLfMSQcnI186hKUzE2fpkZWqcxsoTR7eqzlTidSOMYPHJOn/yR7VGH7uSZp37qH9q2Et0zQ==} - dependencies: - fast-safe-stringify: 2.1.1 - individual: 3.0.0 - dev: true - /bonjour-service@1.2.1: resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} dependencies: @@ -8149,8 +8363,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001609 - electron-to-chromium: 1.4.736 + caniuse-lite: 1.0.30001614 + electron-to-chromium: 1.4.752 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) @@ -8214,8 +8428,8 @@ packages: dependencies: run-applescript: 7.0.0 - /bundle-require@4.0.2(esbuild@0.19.12): - resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} + /bundle-require@4.0.3(esbuild@0.19.12): + resolution: {integrity: sha512-2iscZ3fcthP2vka4Y7j277YJevwmsby/FpFDwjgw34Nl7dtCpt7zz/4TexmHMzY6KZEih7En9ImlbbgUNNQGtA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.17' @@ -8257,6 +8471,13 @@ packages: unset-value: 1.0.0 dev: true + /cache-content-type@1.0.1: + resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} + engines: {node: '>= 6.0.0'} + dependencies: + mime-types: 2.1.35 + ylru: 1.4.0 + /cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -8328,8 +8549,8 @@ packages: engines: {node: '>=14.16'} dev: true - /caniuse-lite@1.0.30001609: - resolution: {integrity: sha512-JFPQs34lHKx1B5t1EpQpWH4c+29zIyn/haGsbpfq3suuV9v56enjFt23zqijxGTMwy1p/4H2tjnQMY+p1WoAyA==} + /caniuse-lite@1.0.30001614: + resolution: {integrity: sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==} /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -8349,7 +8570,6 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -8468,8 +8688,8 @@ packages: consola: 3.2.3 dev: true - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + /cjs-module-lexer@1.3.1: + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} dev: true /class-utils@0.3.6: @@ -8602,14 +8822,13 @@ packages: engines: {node: '>=0.8'} dev: true - /clsx@2.1.0: - resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} + /clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true /collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} @@ -8705,7 +8924,6 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 - dev: true /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} @@ -8746,6 +8964,7 @@ packages: /common-path-prefix@3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: true /component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} @@ -8787,6 +9006,9 @@ packages: transitivePeerDependencies: - supports-color + /computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -8811,10 +9033,14 @@ packages: js-string-escape: 1.0.1 lodash: 4.17.21 md5-hex: 3.0.1 - semver: 7.5.4 + semver: 7.6.0 well-known-symbols: 2.0.0 dev: true + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + dev: true + /config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: @@ -8874,6 +9100,13 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + /cookies@0.8.0: + resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + keygrip: 1.1.0 + /copy-descriptor@0.1.1: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} @@ -8908,14 +9141,14 @@ packages: yargs: 16.2.0 dev: true - /core-js-compat@3.36.1: - resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} + /core-js-compat@3.37.0: + resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} dependencies: browserslist: 4.23.0 dev: false - /core-js-pure@3.36.1: - resolution: {integrity: sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==} + /core-js-pure@3.37.0: + resolution: {integrity: sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==} requiresBuild: true dev: false @@ -9036,6 +9269,12 @@ packages: luxon: 3.4.4 dev: true + /cron-parser@4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + dependencies: + luxon: 3.4.4 + /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -9069,11 +9308,6 @@ packages: optional: true dev: true - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - /crypto-random-string@4.0.0: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} @@ -9101,7 +9335,7 @@ packages: postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 semver: 7.6.0 - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: false /css-select@4.3.0: @@ -9210,11 +9444,6 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true - /data-uri-to-buffer@3.0.1: - resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} - engines: {node: '>= 6'} - dev: true - /data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -9260,6 +9489,10 @@ packages: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} dev: true + /date-format@4.0.14: + resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} + engines: {node: '>=4.0'} + /date-time@3.1.0: resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} engines: {node: '>=6'} @@ -9267,6 +9500,9 @@ packages: time-zone: 1.0.0 dev: true + /de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -9277,6 +9513,16 @@ packages: dependencies: ms: 2.0.0 + /debug@3.1.0: + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -9363,6 +9609,9 @@ packages: optional: true dev: true + /deep-equal@1.0.1: + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -9463,11 +9712,9 @@ packages: /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: true /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} @@ -9770,8 +10017,8 @@ packages: /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - /electron-to-chromium@1.4.736: - resolution: {integrity: sha512-Rer6wc3ynLelKNM4lOCg7/zPQj8tPOCB2hzD32PX9wd3hgRRi9MxEbmkFCokzcEhRVMiOVLjnL9ig9cefJ+6+Q==} + /electron-to-chromium@1.4.752: + resolution: {integrity: sha512-P3QJreYI/AUTcfBVrC4zy9KvnZWekViThgQMX/VpJ+IsOBbcX5JFpORM4qWapwWQ+agb2nYAOyn/4PMXOk0m2Q==} /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -9797,13 +10044,6 @@ packages: resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} dev: true - /encode-registry@3.0.1: - resolution: {integrity: sha512-6qOwkl1g0fv0DN3Y3ggr2EaZXN71aoAqPp3p/pVaWSBSIo+YjLOWN61Fva43oVyQNPf7kgm8lkudzlzojwE2jw==} - engines: {node: '>=10'} - dependencies: - mem: 8.1.1 - dev: true - /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -9846,8 +10086,8 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /envinfo@7.12.0: - resolution: {integrity: sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==} + /envinfo@7.13.0: + resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==} engines: {node: '>=4'} hasBin: true @@ -9857,15 +10097,14 @@ packages: hasBin: true dev: true - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - dev: true - /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + /error-inject@1.0.0: + resolution: {integrity: sha512-JM8N6PytDbmIYm1IhPWlo8vr3NtfjhDY/1MhD/a5b/aad/USE8a0+NsqE9d5n+GVGmuNkPQWm4bFQWv18d8tMg==} + /error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} dependencies: @@ -9890,7 +10129,7 @@ packages: function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 get-symbol-description: 1.0.2 - globalthis: 1.0.3 + globalthis: 1.0.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 @@ -9933,8 +10172,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - /es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + /es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -9944,7 +10183,7 @@ packages: es-set-tostringtag: 2.0.3 function-bind: 1.1.2 get-intrinsic: 1.2.4 - globalthis: 1.0.3 + globalthis: 1.0.4 has-property-descriptors: 1.0.2 has-proto: 1.0.3 has-symbols: 1.0.3 @@ -9953,8 +10192,8 @@ packages: safe-array-concat: 1.1.2 dev: true - /es-module-lexer@1.5.0: - resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} + /es-module-lexer@1.5.2: + resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==} /es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} @@ -10052,35 +10291,35 @@ packages: '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - /esbuild@0.20.0: - resolution: {integrity: sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==} + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.20.0 - '@esbuild/android-arm': 0.20.0 - '@esbuild/android-arm64': 0.20.0 - '@esbuild/android-x64': 0.20.0 - '@esbuild/darwin-arm64': 0.20.0 - '@esbuild/darwin-x64': 0.20.0 - '@esbuild/freebsd-arm64': 0.20.0 - '@esbuild/freebsd-x64': 0.20.0 - '@esbuild/linux-arm': 0.20.0 - '@esbuild/linux-arm64': 0.20.0 - '@esbuild/linux-ia32': 0.20.0 - '@esbuild/linux-loong64': 0.20.0 - '@esbuild/linux-mips64el': 0.20.0 - '@esbuild/linux-ppc64': 0.20.0 - '@esbuild/linux-riscv64': 0.20.0 - '@esbuild/linux-s390x': 0.20.0 - '@esbuild/linux-x64': 0.20.0 - '@esbuild/netbsd-x64': 0.20.0 - '@esbuild/openbsd-x64': 0.20.0 - '@esbuild/sunos-x64': 0.20.0 - '@esbuild/win32-arm64': 0.20.0 - '@esbuild/win32-ia32': 0.20.0 - '@esbuild/win32-x64': 0.20.0 + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 dev: true /escalade@3.1.2: @@ -10163,7 +10402,7 @@ packages: synckit: 0.9.0 tslib: 2.6.2 unified: 11.0.4 - unified-engine: 11.2.0 + unified-engine: 11.2.1 unist-util-visit: 5.0.0 uvu: 0.5.6 vfile: 6.0.1 @@ -10171,7 +10410,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: @@ -10192,7 +10431,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -10200,7 +10439,7 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0)(eslint@8.57.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -10210,7 +10449,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -10219,7 +10458,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -10235,7 +10474,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.6.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.8.0)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -10248,7 +10487,7 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 jest: 29.7.0(@types/node@20.12.7)(ts-node@10.9.2) @@ -10263,7 +10502,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -10272,7 +10511,7 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.0.19 eslint: 8.57.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -10328,8 +10567,8 @@ packages: validate-npm-package-name: 5.0.0 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 @@ -10349,7 +10588,7 @@ packages: array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.0.19 eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -10380,8 +10619,8 @@ packages: - typescript dev: true - /eslint-plugin-testing-library@6.2.1(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-CP2YV/AxtgyrXgizM4648UkuVrFGDcCA8uDmrLytGqtsa7wgC6MTuIQqEAT1Qm4/zCxnC8xRtiGgfEwEt6hmdw==} + /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 @@ -10469,7 +10708,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: @@ -10525,7 +10764,6 @@ packages: /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -10619,6 +10857,12 @@ packages: engines: {node: '>=6'} dev: true + /expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + dependencies: + homedir-polyfill: 1.0.3 + /expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -10789,12 +11033,12 @@ packages: /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - /fast-json-stringify@5.14.1: - resolution: {integrity: sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw==} + /fast-json-stringify@5.15.0: + resolution: {integrity: sha512-BUEAAyDKb64u+kmkINYfXUUiKjBKerSmVu/dzotfaWSHBxR44JFrOZgkhMO6VxDhDfiuAoi8mx4drd5nvNdA4Q==} dependencies: '@fastify/merge-json-schemas': 0.1.1 - ajv: 8.12.0 - ajv-formats: 3.0.1(ajv@8.12.0) + ajv: 8.13.0 + ajv-formats: 3.0.1(ajv@8.13.0) fast-deep-equal: 3.1.3 fast-uri: 2.3.0 json-schema-ref-resolver: 1.0.1 @@ -10841,16 +11085,16 @@ packages: abstract-logging: 2.0.1 avvio: 8.3.0 fast-content-type-parse: 1.1.0 - fast-json-stringify: 5.14.1 + fast-json-stringify: 5.15.0 find-my-way: 7.7.0 light-my-request: 5.13.0 - pino: 8.20.0 + pino: 8.21.0 process-warning: 2.3.2 proxy-addr: 2.0.7 rfdc: 1.3.1 secure-json-parse: 2.7.0 - semver: 7.5.4 - tiny-lru: 11.2.5 + semver: 7.6.0 + tiny-lru: 11.2.6 transitivePeerDependencies: - supports-color dev: true @@ -10892,16 +11136,6 @@ packages: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} dev: true - /fetch-blob@2.1.2: - resolution: {integrity: sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==} - engines: {node: ^10.17.0 || >=12.3.0} - peerDependencies: - domexception: '*' - peerDependenciesMeta: - domexception: - optional: true - dev: true - /fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -10958,6 +11192,13 @@ packages: flat-cache: 3.2.0 dev: true + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + dependencies: + flat-cache: 4.0.1 + dev: true + /file-type@18.7.0: resolution: {integrity: sha512-ihHtXRzXEziMrQ56VSgU7wkxh55iNchFkosu7Y9/S+tXHdKyrGjVK0ujbqNnsxzea+78MaLhN6PGmfYSAv1ACw==} engines: {node: '>=14.16'} @@ -11034,6 +11275,12 @@ packages: transitivePeerDependencies: - supports-color + /find-file-up@2.0.1: + resolution: {integrity: sha512-qVdaUhYO39zmh28/JLQM5CoYN9byEOKEH4qfa8K1eNV17W0UUMJ9WgbR/hHFH+t5rcl+6RTb5UC7ck/I+uRkpQ==} + engines: {node: '>=8'} + dependencies: + resolve-dir: 1.0.1 + /find-my-way@7.7.0: resolution: {integrity: sha512-+SrHpvQ52Q6W9f3wJoJBbAQULJuNEEQwBvlvYwACDhBTLOTMiQ0HYWh4+vC3OivGP2ENcTI1oKlFA2OepJNjhQ==} engines: {node: '>=14'} @@ -11043,6 +11290,12 @@ packages: safe-regex2: 2.0.0 dev: true + /find-pkg@2.0.0: + resolution: {integrity: sha512-WgZ+nKbELDa6N3i/9nrHeNznm+lY3z4YfhDDWgW+5P0pdmMj26bxaxU11ookgY3NyP9GC7HvZ9etp0jRFqGEeQ==} + engines: {node: '>=8'} + dependencies: + find-file-up: 2.0.1 + /find-up-simple@1.0.0: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} @@ -11061,6 +11314,7 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + dev: true /find-up@6.3.0: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} @@ -11086,13 +11340,20 @@ packages: rimraf: 3.0.2 dev: true + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + dev: true + /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true /flush-write-stream@2.0.0: resolution: {integrity: sha512-uXClqPxT4xW0lcdSBheb2ObVU+kuqUk3Jk64EwieirEXZx9XUrVwp/JuBfKAWaM4T5Td/VL7QLDWPXp/MvGm/g==} @@ -11152,7 +11413,6 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true /formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} @@ -11193,15 +11453,6 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: true - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -11218,7 +11469,15 @@ packages: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true + + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} @@ -11361,7 +11620,7 @@ packages: dependencies: '@xhmikosr/downloader': 13.0.1 node-fetch: 3.3.2 - semver: 7.5.4 + semver: 7.6.0 dev: true /git-hooks-list@1.0.3: @@ -11447,6 +11706,24 @@ packages: ini: 2.0.0 dev: true + /global-modules@1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + + /global-prefix@1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -11458,11 +11735,12 @@ packages: type-fest: 0.20.2 dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 dev: true /globby@10.0.0: @@ -11558,7 +11836,7 @@ packages: crossws: 0.2.4 defu: 6.1.4 destr: 2.0.3 - iron-webcrypto: 1.1.0 + iron-webcrypto: 1.1.1 ohash: 1.1.3 radix3: 1.1.2 ufo: 1.5.3 @@ -11615,7 +11893,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true /has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} @@ -11685,6 +11962,12 @@ packages: /headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + /homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + dependencies: + parse-passwd: 1.0.0 + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -11700,7 +11983,7 @@ packages: resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} engines: {node: ^16.14.0 || >=18.0.0} dependencies: - lru-cache: 10.2.0 + lru-cache: 10.2.2 dev: true /hot-shots@10.0.0: @@ -11743,7 +12026,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.30.3 + terser: 5.31.0 dev: false /html-parse-stringify@3.0.1: @@ -11768,7 +12051,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: false /htmlparser2@6.1.0: @@ -11780,6 +12063,13 @@ packages: entities: 2.2.0 dev: false + /http-assert@1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + dependencies: + deep-equal: 1.0.1 + http-errors: 1.8.1 + /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true @@ -11805,7 +12095,6 @@ packages: setprototypeof: 1.2.0 statuses: 1.5.0 toidentifier: 1.0.1 - dev: true /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -11933,6 +12222,16 @@ packages: - supports-color dev: true + /https-proxy-agent@7.0.4: + resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.1 + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev: true + /human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true @@ -11951,15 +12250,19 @@ packages: engines: {node: '>=16.17.0'} dev: true + /hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + /i18next-browser-languagedetector@7.2.1: resolution: {integrity: sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 - /i18next@23.11.1: - resolution: {integrity: sha512-mXw4A24BiPZKRsbb9ewgSvjYd6fxFCNwJyfK6nYfSTIAX2GkCWcb598m3DFkDZmqADatvuASrKo6qwORz3VwTQ==} + /i18next@23.11.3: + resolution: {integrity: sha512-Pq/aSKowir7JM0rj+Wa23Kb6KKDUGno/HjG+wRQu0PxoTbpQ4N89MAT0rFGvXmLkRLNMb1BbBOKGozl01dabzg==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} @@ -12024,8 +12327,8 @@ packages: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - /import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + /import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} dev: true /imurmurhash@0.1.4: @@ -12048,10 +12351,6 @@ packages: engines: {node: '>=18'} dev: true - /individual@3.0.0: - resolution: {integrity: sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==} - dev: true - /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -12067,7 +12366,6 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true /ini@2.0.0: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} @@ -12123,7 +12421,7 @@ packages: engines: {node: '>=18.6.0'} dependencies: '@voxpelli/semver-set': 5.0.2 - '@voxpelli/typed-utils': 1.7.0 + '@voxpelli/typed-utils': 1.10.1 is-glob: 4.0.3 list-installed: 5.3.0 picomatch: 4.0.2 @@ -12138,7 +12436,7 @@ packages: chalk: 5.3.0 installed-check-core: 8.3.0 meow: 12.1.1 - pony-cause: 2.1.10 + pony-cause: 2.1.11 version-guard: 1.1.2 dev: true @@ -12167,8 +12465,8 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - /ipaddr.js@2.1.0: - resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + /ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} /ipx@2.1.0(@netlify/blobs@7.3.0): @@ -12208,8 +12506,8 @@ packages: - uWebSockets.js dev: true - /iron-webcrypto@1.1.0: - resolution: {integrity: sha512-5vgYsCakNlaQub1orZK5QmNYhwYtcllTkZBp5sfIaCqY93Cf6l+v2rtE+E4TMbcfjxDMCdrO8wmp7+ZvhDECLA==} + /iron-webcrypto@1.1.1: + resolution: {integrity: sha512-5xGwQUWHQSy039rFr+5q/zOmj7GP0Ypzvo34Ep+61bPIhaLduEDp/PvLGlU3awD2mzWUR0weN2vJ1mILydFPEg==} dev: true /is-accessor-descriptor@1.0.1: @@ -12417,7 +12715,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 - dev: true /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -12649,7 +12946,6 @@ packages: /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - dev: true /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} @@ -12692,12 +12988,7 @@ packages: dev: true /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - dev: true + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} /isobject@2.1.0: resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} @@ -12710,6 +13001,13 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + /isomorphic-ws@5.0.0(ws@8.5.0): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.5.0 + /istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -12719,8 +13017,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/core': 7.24.5 + '@babel/parser': 7.24.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -12732,8 +13030,8 @@ packages: resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.4 - '@babel/parser': 7.24.4 + '@babel/core': 7.24.5 + '@babel/parser': 7.24.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.0 @@ -12870,11 +13168,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 '@types/node': 20.12.7 - babel-jest: 29.7.0(@babel/core@7.24.4) + babel-jest: 29.7.0(@babel/core@7.24.5) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -13117,7 +13415,7 @@ packages: '@jest/types': 29.6.3 '@types/node': 20.12.7 chalk: 4.1.2 - cjs-module-lexer: 1.2.3 + cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -13138,15 +13436,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.4 - '@babel/generator': 7.24.4 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) - '@babel/types': 7.24.0 + '@babel/core': 7.24.5 + '@babel/generator': 7.24.5 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) + '@babel/types': 7.24.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.5) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -13305,17 +13603,17 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.9 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.3 + tough-cookie: 4.1.4 w3c-xmlserializer: 4.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.16.0 + ws: 8.17.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -13361,10 +13659,6 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true - /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -13395,7 +13689,6 @@ packages: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 - dev: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -13403,7 +13696,6 @@ packages: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true /jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} @@ -13423,7 +13715,7 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.5.4 + semver: 7.6.0 dev: true /jsx-ast-utils@3.3.5: @@ -13467,6 +13759,12 @@ packages: mimic-fn: 4.0.0 dev: true + /keygrip@1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + dependencies: + tsscmp: 1.0.6 + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -13501,8 +13799,8 @@ packages: engines: {node: '>=6'} dev: true - /knip@5.9.4(@types/node@20.12.7)(typescript@5.4.5): - resolution: {integrity: sha512-33TM8bSHxMMoj+wP9lzjUkIIEfpXaZsLWMYRCoHdbmYnl2HKPMNijcYTxwi1omRROobXrR/VJyH2ZsYOKM1jtg==} + /knip@5.11.0(@types/node@20.12.7)(typescript@5.4.5): + resolution: {integrity: sha512-7TBBpLYYAqZI+FM+qHsmT0jfYNOwwZAMBvuJXq3gFJCCpDvGrYcLMu2j6yvURJNh1UlpQ4jaNgPoHw7ylGDWMA==} engines: {node: '>=18.6.0'} hasBin: true peerDependencies: @@ -13511,18 +13809,13 @@ packages: dependencies: '@ericcornelissen/bash-parser': 0.5.2 '@nodelib/fs.walk': 2.0.0 - '@npmcli/map-workspaces': 3.0.6 - '@npmcli/package-json': 5.0.3 - '@pnpm/logger': 5.0.0 - '@pnpm/workspace.pkgs-graph': 2.0.14(@pnpm/logger@5.0.0) '@snyk/github-codeowners': 1.1.0 '@types/node': 20.12.7 - '@types/picomatch': 2.3.3 easy-table: 1.2.0 fast-glob: 3.3.2 + file-entry-cache: 8.0.0 jiti: 1.21.0 js-yaml: 4.1.0 - micromatch: 4.0.5 minimist: 1.2.8 picocolors: 1.0.0 picomatch: 4.0.2 @@ -13532,13 +13825,56 @@ packages: strip-json-comments: 5.0.1 summary: 2.1.0 typescript: 5.4.5 - zod: 3.22.4 - zod-validation-error: 3.1.0(zod@3.22.4) - transitivePeerDependencies: - - bluebird - - domexception + zod: 3.23.5 + zod-validation-error: 3.2.0(zod@3.23.5) dev: true + /koa-compose@3.2.1: + resolution: {integrity: sha512-8gen2cvKHIZ35eDEik5WOo8zbVp9t4cP8p4hW4uE55waxolLRexKKrqfCpwhGVppnB40jWeF8bZeTVg99eZgPw==} + dependencies: + any-promise: 1.3.0 + + /koa-compose@4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + + /koa-convert@1.2.0: + resolution: {integrity: sha512-K9XqjmEDStGX09v3oxR7t5uPRy0jqJdvodHa6wxWTHrTfDq0WUNnYTOOUZN6g8OM8oZQXprQASbiIXG2Ez8ehA==} + engines: {node: '>= 4'} + dependencies: + co: 4.6.0 + koa-compose: 3.2.1 + + /koa@2.11.0: + resolution: {integrity: sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA==} + engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + dependencies: + accepts: 1.3.8 + cache-content-type: 1.0.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookies: 0.8.0 + debug: 3.1.0 + delegates: 1.0.0 + depd: 1.1.2 + destroy: 1.2.0 + encodeurl: 1.0.2 + error-inject: 1.0.0 + escape-html: 1.0.3 + fresh: 0.5.2 + http-assert: 1.5.0 + http-errors: 1.8.1 + is-generator-function: 1.0.10 + koa-compose: 4.1.0 + koa-convert: 1.2.0 + on-finished: 2.4.1 + only: 0.0.2 + parseurl: 1.3.3 + statuses: 1.5.0 + type-is: 1.6.18 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + /kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} dev: true @@ -13623,7 +13959,7 @@ packages: engines: {node: '>=18.6.0'} dependencies: buffered-async-iterable: 0.3.0 - pony-cause: 2.1.10 + pony-cause: 2.1.11 read-pkg: 9.0.1 read-workspaces: 1.2.0 dev: true @@ -13666,21 +14002,11 @@ packages: wrap-ansi: 8.1.0 dev: true - /load-json-file@6.2.0: - resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} - engines: {node: '>=8'} - dependencies: - graceful-fs: 4.2.11 - parse-json: 5.2.0 - strip-bom: 4.0.0 - type-fest: 0.6.0 - dev: true - - /load-plugin@6.0.2: - resolution: {integrity: sha512-3KRkTvCOsyNrx4zvBl/+ZMqPdVyp26TIf6xkmfEGuGwCfNQ/HzhktwbJCxd1KJpzPbK42t/WVOL3cX+TDaMRuQ==} + /load-plugin@6.0.3: + resolution: {integrity: sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w==} dependencies: - '@npmcli/config': 8.2.2 - import-meta-resolve: 4.0.0 + '@npmcli/config': 8.3.0 + import-meta-resolve: 4.1.0 dev: true /load-tsconfig@0.2.5: @@ -13722,6 +14048,7 @@ packages: engines: {node: '>=10'} dependencies: p-locate: 5.0.0 + dev: true /locate-path@7.2.0: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} @@ -13734,6 +14061,9 @@ packages: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: true + /lodash.clonedeepwith@4.5.0: + resolution: {integrity: sha512-QRBRSxhbtsX1nc0baxSkkK5WlVTTm/s48DSukcGcWZwIyI8Zz+lB+kFiELJXtzfH4Aj6kMWQ1VWW4U5uUDgZMA==} + /lodash.curry@4.1.1: resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==} dev: true @@ -13807,7 +14137,7 @@ packages: jest-validate: 27.5.1 map-obj: 5.0.2 moize: 6.1.6 - semver: 7.5.4 + semver: 7.6.0 dev: true /log-symbols@5.1.0: @@ -13829,6 +14159,18 @@ packages: wrap-ansi: 8.1.0 dev: true + /log4js@6.9.1: + resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} + engines: {node: '>=8.0'} + dependencies: + date-format: 4.0.14 + debug: 4.3.4(supports-color@5.5.0) + flatted: 3.3.1 + rfdc: 1.3.1 + streamroller: 3.1.5 + transitivePeerDependencies: + - supports-color + /logform@2.6.0: resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} engines: {node: '>= 12.0.0'} @@ -13841,6 +14183,9 @@ packages: triple-beam: 1.4.1 dev: true + /long-timeout@0.1.1: + resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==} + /longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} dev: true @@ -13862,8 +14207,8 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + /lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} /lru-cache@4.1.5: @@ -13887,7 +14232,6 @@ packages: /luxon@3.4.4: resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==} engines: {node: '>=12'} - dev: true /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -13929,13 +14273,6 @@ packages: tmpl: 1.0.5 dev: true - /map-age-cleaner@0.1.3: - resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} - engines: {node: '>=6'} - dependencies: - p-defer: 1.0.0 - dev: true - /map-cache@0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} @@ -14117,26 +14454,13 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} - /mem@6.1.1: - resolution: {integrity: sha512-Ci6bIfq/UgcxPTYa8dQQ5FY3BzKkT894bwXWXxC/zqs0XgMO2cT20CGkOqda7gZNkmK5VP4x89IGZ6K7hfbn3Q==} - engines: {node: '>=8'} - dependencies: - map-age-cleaner: 0.1.3 - mimic-fn: 3.1.0 - dev: true - - /mem@8.1.1: - resolution: {integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==} - engines: {node: '>=10'} - dependencies: - map-age-cleaner: 0.1.3 - mimic-fn: 3.1.0 - dev: true - - /memfs@4.8.1: - resolution: {integrity: sha512-7q/AdPzf2WpwPlPL4v1kE2KsJsHl7EF4+hAeVzlyanr2+YnR21NVn9mDqo+7DEaKDRsQy8nvxPlKH4WqMtiO0w==} + /memfs@4.9.1: + resolution: {integrity: sha512-36cVYFMaa9HNEYyvkyKCwker8DBmOdjWLrfekE/cHEKJ806fCfKNVhOJNvoyV/CrGSZDtfQPbhn0Zid0gbH0Hw==} engines: {node: '>= 4.0.0'} dependencies: + '@jsonjoy.com/json-pack': 1.0.2(tslib@2.6.2) + '@jsonjoy.com/util': 1.1.0(tslib@2.6.2) + sonic-forest: 1.0.1(tslib@2.6.2) tslib: 2.6.2 /memoize-one@6.0.0: @@ -14195,8 +14519,8 @@ packages: resolution: {integrity: sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g==} dev: true - /micromark-core-commonmark@2.0.0: - resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + /micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 @@ -14211,7 +14535,7 @@ packages: micromark-util-html-tag-name: 2.0.0 micromark-util-normalize-identifier: 2.0.0 micromark-util-resolve-all: 2.0.0 - micromark-util-subtokenize: 2.0.0 + micromark-util-subtokenize: 2.0.1 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 dev: true @@ -14255,7 +14579,7 @@ packages: dependencies: '@types/estree': 1.0.5 devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 + micromark-core-commonmark: 2.0.1 micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 micromark-util-symbol: 2.0.0 @@ -14416,8 +14740,8 @@ packages: micromark-util-symbol: 2.0.0 dev: true - /micromark-util-subtokenize@2.0.0: - resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + /micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.0 @@ -14449,7 +14773,7 @@ packages: debug: 4.3.4(supports-color@5.5.0) decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 + micromark-core-commonmark: 2.0.1 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-chunked: 2.0.0 @@ -14459,7 +14783,7 @@ packages: micromark-util-normalize-identifier: 2.0.0 micromark-util-resolve-all: 2.0.0 micromark-util-sanitize-uri: 2.0.0 - micromark-util-subtokenize: 2.0.0 + micromark-util-subtokenize: 2.0.1 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 transitivePeerDependencies: @@ -14524,11 +14848,6 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - /mimic-fn@3.1.0: - resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} - engines: {node: '>=8'} - dev: true - /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -14549,15 +14868,15 @@ packages: engines: {node: '>=4'} dev: true - /mini-css-extract-plugin@2.8.1(webpack@5.91.0): - resolution: {integrity: sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==} + /mini-css-extract-plugin@2.9.0(webpack@5.91.0): + resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: false /minimalistic-assert@1.0.1: @@ -14658,7 +14977,7 @@ packages: dependencies: acorn: 8.11.3 pathe: 1.1.2 - pkg-types: 1.0.3 + pkg-types: 1.1.0 ufo: 1.5.3 dev: true @@ -14699,8 +15018,8 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /msw@2.2.13(typescript@5.4.5): - resolution: {integrity: sha512-ljFf1xZsU0b4zv1l7xzEmC6OZA6yD06hcx0H+dc8V0VypaP3HGYJa1rMLjQbBWl32ptGhcfwcPCWDB1wjmsftw==} + /msw@2.2.14(typescript@5.4.5): + resolution: {integrity: sha512-64i8rNCa1xzDK8ZYsTrVMli05D687jty8+Th+PU5VTbJ2/4P7fkQFVyDQ6ZFT5FrNR8z2BHhbY47fKNvfHrumA==} engines: {node: '>=18'} hasBin: true requiresBuild: true @@ -14712,7 +15031,7 @@ packages: dependencies: '@bundled-es-modules/cookie': 2.0.0 '@bundled-es-modules/statuses': 1.0.1 - '@inquirer/confirm': 3.1.4 + '@inquirer/confirm': 3.1.6 '@mswjs/cookies': 1.1.0 '@mswjs/interceptors': 0.26.15 '@open-draft/until': 2.1.0 @@ -14725,10 +15044,13 @@ packages: outvariant: 1.4.2 path-to-regexp: 6.2.2 strict-event-emitter: 0.5.1 - type-fest: 4.15.0 + type-fest: 4.18.0 typescript: 5.4.5 yargs: 17.7.2 + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + /multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true @@ -14799,18 +15121,6 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /ndjson@2.0.0: - resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - json-stringify-safe: 5.0.1 - minimist: 1.2.8 - readable-stream: 3.6.2 - split2: 3.2.2 - through2: 4.0.2 - dev: true - /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -14822,22 +15132,22 @@ packages: resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==} dev: true - /netlify-cli@17.22.1(@types/node@20.12.7): - resolution: {integrity: sha512-76ZvarNs85vNW/s6sJnMmwU39tx1rGkozMBUsx3of752gUAgr3T+BzAVB+/2DeDSbqQPlCKXfo2PuqqrhdeKew==} + /netlify-cli@17.23.1(@types/node@20.12.7): + resolution: {integrity: sha512-MISg7qb1wVP0umvB0Tn6KhZUIB/HPph0w1OzzV4DP+Mm0MS+/t0wqzcYx0WJeLdJsLzywq2lfL2smttQz/6lwQ==} engines: {node: '>=18.14.0'} hasBin: true requiresBuild: true dependencies: - '@bugsnag/js': 7.20.2 - '@fastify/static': 6.10.2 + '@bugsnag/js': 7.22.7 + '@fastify/static': 6.12.0 '@netlify/blobs': 7.3.0 - '@netlify/build': 29.39.1(@opentelemetry/api@1.8.0)(@types/node@20.12.7) + '@netlify/build': 29.41.2(@opentelemetry/api@1.8.0)(@types/node@20.12.7) '@netlify/build-info': 7.13.2 - '@netlify/config': 20.12.1 - '@netlify/edge-bundler': 11.3.0 + '@netlify/config': 20.12.3 + '@netlify/edge-bundler': 12.0.0 '@netlify/edge-functions': 2.5.1 '@netlify/local-functions-proxy': 1.1.1 - '@netlify/zip-it-and-ship-it': 9.31.3 + '@netlify/zip-it-and-ship-it': 9.32.1(@opentelemetry/api@1.8.0) '@octokit/rest': 19.0.13 '@opentelemetry/api': 1.8.0 ansi-escapes: 6.2.1 @@ -14885,7 +15195,7 @@ packages: hasha: 5.2.2 http-proxy: 1.18.1(debug@4.3.4) http-proxy-middleware: 2.0.6(debug@4.3.4) - https-proxy-agent: 5.0.1 + https-proxy-agent: 7.0.4 inquirer: 6.5.2 inquirer-autocomplete-prompt: 1.4.0(inquirer@6.5.2) ipx: 2.1.0(@netlify/blobs@7.3.0) @@ -14903,7 +15213,7 @@ packages: log-symbols: 5.1.0 log-update: 5.0.1 multiparty: 4.2.3 - netlify: 13.1.14 + netlify: 13.1.15 netlify-headers-parser: 7.1.4 netlify-redirect-parser: 14.2.2 netlify-redirector: 0.5.0 @@ -14921,7 +15231,7 @@ packages: pump: 3.0.0 raw-body: 2.5.2 read-package-up: 11.0.0 - semver: 7.5.4 + semver: 7.6.0 source-map-support: 0.5.21 strip-ansi-control-characters: 2.0.0 tabtab: 3.0.2 @@ -14935,7 +15245,7 @@ packages: ulid: 2.3.0 unixify: 1.0.0 update-notifier: 6.0.2 - uuid: 9.0.0 + uuid: 9.0.1 wait-port: 1.0.4 write-file-atomic: 5.0.1 ws: 8.14.2 @@ -14993,8 +15303,8 @@ packages: resolution: {integrity: sha512-4zdzIP+6muqPCuE8avnrgDJ6KW/2+UpHTRcTbMXCIRxiRmyrX+IZ4WSJGZdHPWF3WmQpXpy603XxecZ9iygN7w==} dev: true - /netlify@13.1.14: - resolution: {integrity: sha512-7vSq6so7lPjr3HEpjbtLyde0F3IXOzD0ocJs3s2wnJR+nX+8pWOAVGe+KN6S98odsClJBJxCkWG2rLjTBzW9pw==} + /netlify@13.1.15: + resolution: {integrity: sha512-6gZ2lMcjqiXqirwbxeXoNyQn1LcW18s8zdR9eTS8Dtuqg/h4JxI7y9ahV9fypfp0bdaTt8hkBoopBJXLQPsJmA==} engines: {node: ^14.16.0 || >=16.0.0} dependencies: '@netlify/open-api': 2.30.0 @@ -15013,11 +15323,11 @@ packages: tslib: 2.6.2 dev: false - /node-abi@3.57.0: - resolution: {integrity: sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==} + /node-abi@3.62.0: + resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /node-addon-api@6.1.0: @@ -15062,16 +15372,6 @@ packages: whatwg-url: 5.0.0 dev: true - /node-fetch@3.0.0-beta.9: - resolution: {integrity: sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==} - engines: {node: ^10.17 || >=12.3} - dependencies: - data-uri-to-buffer: 3.0.1 - fetch-blob: 2.1.2 - transitivePeerDependencies: - - domexception - dev: true - /node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -15097,11 +15397,19 @@ packages: /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /node-schedule@2.1.1: + resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==} + engines: {node: '>=6'} + dependencies: + cron-parser: 4.9.0 + long-timeout: 0.1.1 + sorted-array-functions: 1.3.0 + /node-source-walk@6.0.2: resolution: {integrity: sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag==} engines: {node: '>=14'} dependencies: - '@babel/parser': 7.24.4 + '@babel/parser': 7.24.5 dev: true /node-stream-zip@1.15.0: @@ -15118,7 +15426,7 @@ packages: is-plain-obj: 4.1.0 normalize-node-version: 12.4.0 path-exists: 5.0.0 - semver: 7.5.4 + semver: 7.6.0 dev: true /nodemon@3.1.0: @@ -15178,7 +15486,7 @@ packages: dependencies: all-node-versions: 11.3.0 filter-obj: 5.1.0 - semver: 7.5.4 + semver: 7.6.0 dev: true /normalize-package-data@2.5.0: @@ -15196,7 +15504,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.1 - semver: 7.5.4 + semver: 7.6.0 validate-npm-package-license: 3.0.4 dev: true @@ -15226,38 +15534,11 @@ packages: engines: {node: '>=14.16'} dev: true - /npm-install-checks@6.3.0: - resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - semver: 7.6.0 - dev: true - /npm-normalize-package-bin@3.0.1: resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true - /npm-package-arg@11.0.2: - resolution: {integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - hosted-git-info: 7.0.1 - proc-log: 4.0.0 - semver: 7.6.0 - validate-npm-package-name: 5.0.0 - dev: true - - /npm-pick-manifest@9.0.0: - resolution: {integrity: sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - npm-install-checks: 6.3.0 - npm-normalize-package-bin: 3.0.1 - npm-package-arg: 11.0.2 - semver: 7.6.0 - dev: true - /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -15285,8 +15566,8 @@ packages: dependencies: boolbase: 1.0.0 - /nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + /nwsapi@2.2.9: + resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} dev: true /object-assign@4.1.1: @@ -15456,6 +15737,9 @@ packages: mimic-fn: 4.0.0 dev: true + /only@0.0.2: + resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + /open@10.1.0: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} @@ -15486,16 +15770,16 @@ packages: wordwrap: 0.0.3 dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 dev: true /ora@6.3.1: @@ -15538,11 +15822,6 @@ packages: engines: {node: '>=12.20'} dev: true - /p-defer@1.0.0: - resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} - engines: {node: '>=4'} - dev: true - /p-event@4.2.0: resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} engines: {node: '>=8'} @@ -15594,6 +15873,7 @@ packages: engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true /p-limit@4.0.0: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} @@ -15613,6 +15893,7 @@ packages: engines: {node: '>=10'} dependencies: p-limit: 3.1.0 + dev: true /p-locate@6.0.0: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} @@ -15645,14 +15926,6 @@ packages: engines: {node: '>=16'} dev: true - /p-memoize@4.0.1: - resolution: {integrity: sha512-km0sP12uE0dOZ5qP+s7kGVf07QngxyG0gS8sYFvFWhqlgzOsSy+m71aUejf/0akxj5W7gE//2G74qTv6b4iMog==} - engines: {node: '>=10'} - dependencies: - mem: 6.1.1 - mimic-fn: 3.1.0 - dev: true - /p-reduce@3.0.0: resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} engines: {node: '>=12'} @@ -15723,7 +15996,7 @@ packages: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.5.4 + semver: 7.6.0 dev: true /parallel-transform@1.2.0: @@ -15808,7 +16081,7 @@ packages: dependencies: '@babel/code-frame': 7.24.2 index-to-position: 0.1.2 - type-fest: 4.15.0 + type-fest: 4.18.0 dev: true /parse-ms@3.0.0: @@ -15821,12 +16094,9 @@ packages: engines: {node: '>=18'} dev: true - /parse-npm-tarball-url@3.0.0: - resolution: {integrity: sha512-InpdgIdNe5xWMEUcrVQUniQKwnggBtJ7+SCwh7zQAZwbbIYZV9XdgJyhtmDSSvykFyQXoe4BINnzKTfCwWLs5g==} - engines: {node: '>=8.15'} - dependencies: - semver: 6.3.1 - dev: true + /parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} @@ -15850,6 +16120,9 @@ packages: engines: {node: '>=0.10.0'} dev: true + /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'} @@ -15880,16 +16153,9 @@ packages: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.2.0 + lru-cache: 10.2.2 minipass: 7.0.4 - /path-temp@2.1.0: - resolution: {integrity: sha512-cMMJTAZlion/RWRRC48UbrDymEIt+/YSD/l8NqjneyDw2rDOBQcP5yRkMB4CYGn47KMhZvbblBP7Z79OsMw72w==} - engines: {node: '>=8.15'} - dependencies: - unique-string: 2.0.0 - dev: true - /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -15935,8 +16201,8 @@ packages: engines: {node: '>=6'} dev: true - /pino-abstract-transport@1.1.0: - resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} + /pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} dependencies: readable-stream: 4.5.2 split2: 4.2.0 @@ -15946,21 +16212,21 @@ packages: resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} dev: true - /pino@8.20.0: - resolution: {integrity: sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==} + /pino@8.21.0: + resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} hasBin: true dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 - pino-abstract-transport: 1.1.0 + pino-abstract-transport: 1.2.0 pino-std-serializers: 6.2.2 process-warning: 3.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.3 sonic-boom: 3.8.1 - thread-stream: 2.4.1 + thread-stream: 2.7.0 dev: true /pirates@4.0.6: @@ -15981,16 +16247,16 @@ packages: find-up: 6.3.0 dev: true - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + /pkg-types@1.1.0: + resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==} dependencies: - jsonc-parser: 3.2.1 + confbox: 0.1.7 mlly: 1.6.1 pathe: 1.1.2 dev: true - /pony-cause@2.1.10: - resolution: {integrity: sha512-3IKLNXclQgkU++2fSi93sQ6BznFuxSLB11HdvZQ6JW/spahf/P1pAHBQEahr20rs0htZW0UDkM1HmA+nZkXKsw==} + /pony-cause@2.1.11: + resolution: {integrity: sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==} engines: {node: '>=12.0.0'} dev: true @@ -16030,7 +16296,7 @@ packages: lilconfig: 3.1.1 postcss: 8.4.38 ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) - yaml: 2.4.1 + yaml: 2.4.2 dev: true /postcss-loader@8.1.1(postcss@8.4.38)(typescript@5.4.5)(webpack@5.91.0): @@ -16050,7 +16316,7 @@ packages: jiti: 1.21.0 postcss: 8.4.38 semver: 7.6.0 - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) transitivePeerDependencies: - typescript dev: false @@ -16139,7 +16405,7 @@ packages: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.57.0 + node-abi: 3.62.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -16237,7 +16503,7 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 dev: true /pretty-ms@8.0.0: @@ -16262,13 +16528,8 @@ packages: minimist: 1.2.8 dev: true - /proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true - - /proc-log@4.0.0: - resolution: {integrity: sha512-v1lzmYxGDs2+OZnmYtYZK3DG8zogt+CbQ+o/iqqtTfpyCmGWulCTEQu5GIbivf7OjgIkH2Nr8SH8UxAGugZNbg==} + /proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true @@ -16288,23 +16549,6 @@ packages: engines: {node: '>= 0.6.0'} dev: true - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: true - - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - dev: true - /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -16332,6 +16576,9 @@ packages: forwarded: 0.2.0 ipaddr.js: 1.9.1 + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + /ps-list@8.1.1: resolution: {integrity: sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -16425,6 +16672,9 @@ packages: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} dev: true + /rambda@9.2.0: + resolution: {integrity: sha512-RjM8TBNPR+iSvWLqbBpFveDfEf2RPRKHuwBHjQdXsYFDwn3MIvgmJiqVVC1CIQKnOwzeDQd44zqDFgSKQ7RT1Q==} + /random-bytes@1.0.0: resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} engines: {node: '>= 0.8'} @@ -16458,25 +16708,25 @@ packages: strip-json-comments: 2.0.1 dev: true - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + /react-dom@18.3.1(react@18.3.1): + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: - react: ^18.2.0 + react: ^18.3.1 dependencies: loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 + react: 18.3.1 + scheduler: 0.23.2 - /react-error-boundary@4.0.13(react@18.2.0): + /react-error-boundary@4.0.13(react@18.3.1): resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} peerDependencies: react: '>=16.13.1' dependencies: - '@babel/runtime': 7.24.4 - react: 18.2.0 + '@babel/runtime': 7.24.5 + react: 18.3.1 - /react-i18next@14.1.0(i18next@23.11.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-3KwX6LHpbvGQ+sBEntjV4sYW3Zovjjl3fpoHbUwSgFHf0uRBcbeCBLR5al6ikncI5+W0EFb71QXZmfop+J6NrQ==} + /react-i18next@14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-QSiKw+ihzJ/CIeIYWrarCmXJUySHDwQr5y8uaNIkbxoGRm/5DukkxZs+RPla79IKyyDPzC/DRlgQCABHtrQuQQ==} peerDependencies: i18next: '>= 23.2.3' react: '>= 16.8.0' @@ -16488,11 +16738,11 @@ packages: react-native: optional: true dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 html-parse-stringify: 3.0.1 - i18next: 23.11.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + i18next: 23.11.3 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -16502,59 +16752,59 @@ packages: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} dev: true - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + /react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} dev: false - /react-router-dom@6.22.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==} + /react-router-dom@6.23.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.15.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router: 6.22.3(react@18.2.0) + '@remix-run/router': 1.16.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.23.0(react@18.3.1) - /react-router@6.22.3(react@18.2.0): - resolution: {integrity: sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==} + /react-router@6.23.0(react@18.3.1): + resolution: {integrity: sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': 1.15.3 - react: 18.2.0 + '@remix-run/router': 1.16.0 + react: 18.3.1 - /react-shallow-renderer@16.15.0(react@18.2.0): + /react-shallow-renderer@16.15.0(react@18.3.1): resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: object-assign: 4.1.1 - react: 18.2.0 - react-is: 18.2.0 + react: 18.3.1 + react-is: 18.3.1 dev: true - /react-test-renderer@18.2.0(react@18.2.0): - resolution: {integrity: sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==} + /react-test-renderer@18.3.1(react@18.3.1): + resolution: {integrity: sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==} peerDependencies: - react: ^18.2.0 + react: ^18.3.1 dependencies: - react: 18.2.0 - react-is: 18.2.0 - react-shallow-renderer: 16.15.0(react@18.2.0) - scheduler: 0.23.0 + react: 18.3.1 + react-is: 18.3.1 + react-shallow-renderer: 16.15.0(react@18.3.1) + scheduler: 0.23.2 dev: true - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + /react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 @@ -16573,7 +16823,7 @@ packages: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.15.0 + type-fest: 4.18.0 dev: true /read-pkg-up@7.0.1: @@ -16621,7 +16871,7 @@ packages: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 parse-json: 8.1.0 - type-fest: 4.15.0 + type-fest: 4.18.0 unicorn-magic: 0.1.0 dev: true @@ -16749,7 +16999,7 @@ packages: es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 - globalthis: 1.0.3 + globalthis: 1.0.4 which-builtin-type: 1.1.3 dev: true @@ -16770,7 +17020,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.24.4 + '@babel/runtime': 7.24.5 dev: false /regex-not@1.0.2: @@ -16861,14 +17111,6 @@ packages: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} dev: true - /rename-overwrite@5.0.0: - resolution: {integrity: sha512-vSxE5Ww7Jnyotvaxi3Dj0vOMoojH8KMkBfs9xYeW/qNfJiLTcC1fmwTjrbGUq3mQSOCxkG0DbdcvwTUrpvBN4w==} - engines: {node: '>=12.10'} - dependencies: - '@zkochan/rimraf': 2.1.3 - fs-extra: 10.1.0 - dev: true - /renderkid@3.0.0: resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} dependencies: @@ -16923,6 +17165,13 @@ packages: dependencies: resolve-from: 5.0.0 + /resolve-dir@1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -16991,11 +17240,6 @@ packages: engines: {node: '>=4'} dev: true - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - dev: true - /retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -17016,7 +17260,6 @@ packages: /rfdc@1.3.1: resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -17032,28 +17275,29 @@ packages: dependencies: glob: 10.3.12 - /rollup@4.14.2: - resolution: {integrity: sha512-WkeoTWvuBoFjFAhsEOHKRoZ3r9GfTyhh7Vff1zwebEFLEFjT1lG3784xEgKiTa7E+e70vsC81roVL2MP4tgEEQ==} + /rollup@4.17.2: + resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.14.2 - '@rollup/rollup-android-arm64': 4.14.2 - '@rollup/rollup-darwin-arm64': 4.14.2 - '@rollup/rollup-darwin-x64': 4.14.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.14.2 - '@rollup/rollup-linux-arm64-gnu': 4.14.2 - '@rollup/rollup-linux-arm64-musl': 4.14.2 - '@rollup/rollup-linux-powerpc64le-gnu': 4.14.2 - '@rollup/rollup-linux-riscv64-gnu': 4.14.2 - '@rollup/rollup-linux-s390x-gnu': 4.14.2 - '@rollup/rollup-linux-x64-gnu': 4.14.2 - '@rollup/rollup-linux-x64-musl': 4.14.2 - '@rollup/rollup-win32-arm64-msvc': 4.14.2 - '@rollup/rollup-win32-ia32-msvc': 4.14.2 - '@rollup/rollup-win32-x64-msvc': 4.14.2 + '@rollup/rollup-android-arm-eabi': 4.17.2 + '@rollup/rollup-android-arm64': 4.17.2 + '@rollup/rollup-darwin-arm64': 4.17.2 + '@rollup/rollup-darwin-x64': 4.17.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 + '@rollup/rollup-linux-arm-musleabihf': 4.17.2 + '@rollup/rollup-linux-arm64-gnu': 4.17.2 + '@rollup/rollup-linux-arm64-musl': 4.17.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 + '@rollup/rollup-linux-riscv64-gnu': 4.17.2 + '@rollup/rollup-linux-s390x-gnu': 4.17.2 + '@rollup/rollup-linux-x64-gnu': 4.17.2 + '@rollup/rollup-linux-x64-musl': 4.17.2 + '@rollup/rollup-win32-arm64-msvc': 4.17.2 + '@rollup/rollup-win32-ia32-msvc': 4.17.2 + '@rollup/rollup-win32-x64-msvc': 4.17.2 fsevents: 2.3.3 dev: true @@ -17142,8 +17386,8 @@ packages: xmlchars: 2.2.0 dev: true - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + /scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} dependencies: loose-envify: 1.4.0 @@ -17160,9 +17404,9 @@ packages: engines: {node: '>= 12.13.0'} dependencies: '@types/json-schema': 7.0.15 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - ajv-keywords: 5.1.0(ajv@8.12.0) + ajv: 8.13.0 + ajv-formats: 2.1.1(ajv@8.13.0) + ajv-keywords: 5.1.0(ajv@8.13.0) /secure-compare@3.0.1: resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} @@ -17193,7 +17437,7 @@ packages: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /semver@5.7.2: @@ -17205,14 +17449,6 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} @@ -17330,9 +17566,9 @@ packages: detect-libc: 2.0.3 node-addon-api: 6.1.0 prebuild-install: 7.1.2 - semver: 7.5.4 + semver: 7.6.0 simple-get: 4.0.1 - tar-fs: 3.0.5 + tar-fs: 3.0.6 tunnel-agent: 0.6.0 dev: true @@ -17498,6 +17734,14 @@ packages: atomic-sleep: 1.0.0 dev: true + /sonic-forest@1.0.1(tslib@2.6.2): + resolution: {integrity: sha512-YWIS40U3Y7N2e5gxkQiz40eisSsi7s+plZpqU6CSOehjybSDGkhFIMXmr5dmM7GaqqE+VZDihfTrxxdb0of/wA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + dependencies: + tslib: 2.6.2 + /sort-keys-length@1.0.1: resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} engines: {node: '>=0.10.0'} @@ -17528,6 +17772,9 @@ packages: sort-object-keys: 1.1.3 dev: true + /sorted-array-functions@1.3.0: + resolution: {integrity: sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==} + /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} @@ -17648,12 +17895,6 @@ packages: through2: 2.0.5 dev: true - /split2@3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} - dependencies: - readable-stream: 3.6.2 - dev: true - /split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -17663,13 +17904,6 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /ssri@10.0.5: - resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dependencies: - minipass: 7.0.4 - dev: true - /stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} dependencies: @@ -17723,6 +17957,16 @@ packages: mixme: 0.5.10 dev: true + /streamroller@3.1.5: + resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} + engines: {node: '>=8.0'} + dependencies: + date-format: 4.0.14 + debug: 4.3.4(supports-color@5.5.0) + fs-extra: 8.1.0 + transitivePeerDependencies: + - supports-color + /streamx@2.16.1: resolution: {integrity: sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==} dependencies: @@ -17943,7 +18187,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: false /sucrase@3.35.0: @@ -18016,15 +18260,15 @@ packages: csso: 5.0.5 picocolors: 1.0.0 - /swc-loader@0.2.6(@swc/core@1.4.13)(webpack@5.91.0): + /swc-loader@0.2.6(@swc/core@1.4.17)(webpack@5.91.0): resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' dependencies: - '@swc/core': 1.4.13(@swc/helpers@0.5.9) + '@swc/core': 1.4.17(@swc/helpers@0.5.11) '@swc/counter': 0.1.3 - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) dev: false /symbol-tree@3.2.4: @@ -18070,14 +18314,14 @@ packages: tar-stream: 2.2.0 dev: true - /tar-fs@3.0.5: - resolution: {integrity: sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==} + /tar-fs@3.0.6: + resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} dependencies: pump: 3.0.0 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.2.3 - bare-path: 2.1.1 + bare-fs: 2.3.0 + bare-path: 2.1.2 dev: true /tar-stream@2.2.0: @@ -18139,7 +18383,7 @@ packages: supports-hyperlinks: 2.3.0 dev: true - /terser-webpack-plugin@5.3.10(@swc/core@1.4.13)(esbuild@0.19.12)(webpack@5.91.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.4.17)(esbuild@0.19.12)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -18156,15 +18400,15 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.4.13(@swc/helpers@0.5.9) + '@swc/core': 1.4.17(@swc/helpers@0.5.11) esbuild: 0.19.12 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.30.3 - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + terser: 5.31.0 + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) - /terser-webpack-plugin@5.3.10(@swc/core@1.4.13)(webpack@5.91.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.4.17)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -18181,15 +18425,15 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.4.13(@swc/helpers@0.5.9) + '@swc/core': 1.4.17(@swc/helpers@0.5.11) jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.30.3 - webpack: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + terser: 5.31.0 + webpack: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) - /terser@5.30.3: - resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==} + /terser@5.31.0: + resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} engines: {node: '>=10'} hasBin: true dependencies: @@ -18228,8 +18472,16 @@ packages: any-promise: 1.3.0 dev: true - /thread-stream@2.4.1: - resolution: {integrity: sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==} + /thingies@1.21.0(tslib@2.6.2): + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + dependencies: + tslib: 2.6.2 + + /thread-stream@2.7.0: + resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} dependencies: real-require: 0.2.0 dev: true @@ -18255,12 +18507,6 @@ packages: xtend: 4.0.2 dev: true - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - dependencies: - readable-stream: 3.6.2 - dev: true - /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true @@ -18273,8 +18519,8 @@ packages: engines: {node: '>=4'} dev: true - /tiny-lru@11.2.5: - resolution: {integrity: sha512-JpqM0K33lG6iQGKiigcwuURAKZlq6rHXfrgeL4/I8/REoyJTGU+tEMszvT/oTRVHG2OiylhGDjqPp1jWMlr3bw==} + /tiny-lru@11.2.6: + resolution: {integrity: sha512-0PU3c9PjMnltZaFo2sGYv/nnJsMjG0Cxx8X6FXHPPGjFyoo1SJDxvUXW1207rdiSxYizf31roo+GrkIByQeZoA==} engines: {node: '>=12'} dev: true @@ -18383,8 +18629,8 @@ packages: nopt: 1.0.10 dev: true - /tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + /tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -18454,7 +18700,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@29.1.2(@babel/core@7.24.4)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.1.2(@babel/core@7.24.5)(esbuild@0.19.12)(jest@29.7.0)(typescript@5.4.5): resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -18475,7 +18721,7 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.24.4 + '@babel/core': 7.24.5 bs-logger: 0.2.6 esbuild: 0.19.12 fast-json-stable-stringify: 2.1.0 @@ -18536,7 +18782,11 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsup@8.0.2(@swc/core@1.4.13)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5): + /tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + + /tsup@8.0.2(@swc/core@1.4.17)(postcss@8.4.38)(ts-node@10.9.2)(typescript@5.4.5): resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} engines: {node: '>=18'} hasBin: true @@ -18555,8 +18805,8 @@ packages: typescript: optional: true dependencies: - '@swc/core': 1.4.13(@swc/helpers@0.5.9) - bundle-require: 4.0.2(esbuild@0.19.12) + '@swc/core': 1.4.17(@swc/helpers@0.5.11) + bundle-require: 4.0.3(esbuild@0.19.12) cac: 6.7.14 chokidar: 3.6.0 debug: 4.3.4(supports-color@5.5.0) @@ -18567,7 +18817,7 @@ packages: postcss: 8.4.38 postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2) resolve-from: 5.0.0 - rollup: 4.14.2 + rollup: 4.17.2 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 @@ -18658,8 +18908,8 @@ packages: engines: {node: '>=14.16'} dev: true - /type-fest@4.15.0: - resolution: {integrity: sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==} + /type-fest@4.18.0: + resolution: {integrity: sha512-+dbmiyliDY/2TTcjCS7NpI9yV2iEFlUDk5TKnsbkN7ZoRu5s7bT+zvYtNFhFXC2oLwURGT2frACAZvbbyNBI+w==} engines: {node: '>=16'} /type-is@1.6.18: @@ -18815,22 +19065,22 @@ packages: engines: {node: '>=18'} dev: true - /unified-engine@11.2.0: - resolution: {integrity: sha512-H9wEDpBSM0cpEUuuYAOIiPzLCVN0pjASZZ6FFNzgzYS/HHzl9tArk/ereOMGtcF8m8vgjzw+HrU3YN7oenT7Ww==} + /unified-engine@11.2.1: + resolution: {integrity: sha512-xBAdZ8UY2X4R9Hm6X6kMne4Nz0PlpOc1oE6DPeqJnewr5Imkb8uT5Eyvy1h7xNekPL3PSWh3ZJyNrMW6jnNQBg==} dependencies: '@types/concat-stream': 2.0.3 '@types/debug': 4.1.12 '@types/is-empty': 1.2.3 '@types/node': 20.12.7 '@types/unist': 3.0.2 - '@ungap/structured-clone': 1.2.0 concat-stream: 2.0.0 debug: 4.3.4(supports-color@5.5.0) + extend: 3.0.2 glob: 10.3.12 ignore: 5.3.1 is-empty: 1.2.0 is-plain-obj: 4.1.0 - load-plugin: 6.0.2 + load-plugin: 6.0.3 parse-json: 7.1.1 trough: 2.2.0 unist-util-inspect: 8.0.0 @@ -18838,7 +19088,7 @@ packages: vfile-message: 4.0.2 vfile-reporter: 8.1.1 vfile-statistics: 3.0.0 - yaml: 2.4.1 + yaml: 2.4.2 transitivePeerDependencies: - supports-color dev: true @@ -18872,13 +19122,6 @@ packages: qs: 6.12.1 dev: true - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - /unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -18945,7 +19188,6 @@ packages: /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - dev: true /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} @@ -18955,7 +19197,6 @@ packages: /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - dev: true /unix-dgram@2.0.6: resolution: {integrity: sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==} @@ -19036,7 +19277,7 @@ packages: destr: 2.0.3 h3: 1.11.1 listhen: 1.7.2 - lru-cache: 10.2.0 + lru-cache: 10.2.2 mri: 1.2.0 node-fetch-native: 1.6.4 ofetch: 1.3.4 @@ -19064,6 +19305,10 @@ packages: pathe: 1.1.2 dev: true + /upath@2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true @@ -19089,7 +19334,7 @@ packages: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.5.4 + semver: 7.6.0 semver-diff: 4.0.0 xdg-basedir: 5.1.0 dev: true @@ -19123,18 +19368,26 @@ packages: resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} dev: true - /use-sync-external-store@1.2.0(react@18.2.0): - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + /use-sync-external-store@1.2.2(react@18.3.1): + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 18.2.0 + react: 18.3.1 /use@3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} dev: true + /useless-lib@2.1.0: + resolution: {integrity: sha512-HxMJ/lOLgSDcQNkI0niuCKzft4IfFy/jyF0ovmEpZvI35zSu+cytwUvj5yRfEM94ABFcpIk96BGojv0QwXFm6A==} + dev: false + + /useless-lib@3.0.0: + resolution: {integrity: sha512-rmy0U5jF1Nsq3NQWVSjB/hM7NSvdwlKbxk39cIyTp+4yoE1gychkMMOb1A4+IaEakczwWWeRNSfatDfH6tTAeg==} + dev: false + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -19150,8 +19403,8 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - /uuid@9.0.0: - resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true dev: true @@ -19209,13 +19462,6 @@ packages: engines: {node: '>=0.10.48'} dev: true - /version-selector-type@3.0.0: - resolution: {integrity: sha512-PSvMIZS7C1MuVNBXl/CDG2pZq8EXy/NW2dHIdm3bVP5N0PC8utDK8ttXLXj44Gn3J0lQE3U7Mpm1estAOd+eiA==} - engines: {node: '>=10.13'} - dependencies: - semver: 7.6.0 - dev: true - /vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: @@ -19266,6 +19512,23 @@ packages: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} + /vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + /vue-tsc@1.8.27(typescript@5.4.5): + resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@volar/typescript': 1.11.1 + '@vue/language-core': 1.8.27(typescript@5.4.5) + semver: 7.6.0 + typescript: 5.4.5 + /w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} @@ -19355,12 +19618,12 @@ packages: colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 - envinfo: 7.12.0 + envinfo: 7.13.0 fastest-levenshtein: 1.0.16 import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.91.0) webpack-merge: 5.10.0 @@ -19374,12 +19637,12 @@ packages: optional: true dependencies: colorette: 2.0.20 - memfs: 4.8.1 + memfs: 4.9.1 mime-types: 2.1.35 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) /webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.91.0): resolution: {integrity: sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==} @@ -19412,7 +19675,7 @@ packages: graceful-fs: 4.2.11 html-entities: 2.5.2 http-proxy-middleware: 2.0.6(@types/express@4.17.21) - ipaddr.js: 2.1.0 + ipaddr.js: 2.2.0 launch-editor: 2.6.1 open: 10.1.0 p-retry: 6.2.0 @@ -19422,10 +19685,10 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-dev-middleware: 7.2.1(webpack@5.91.0) - ws: 8.16.0 + ws: 8.17.0 transitivePeerDependencies: - bufferutil - debug @@ -19463,7 +19726,7 @@ packages: graceful-fs: 4.2.11 html-entities: 2.5.2 http-proxy-middleware: 2.0.6(@types/express@4.17.21) - ipaddr.js: 2.1.0 + ipaddr.js: 2.2.0 launch-editor: 2.6.1 open: 10.1.0 p-retry: 6.2.0 @@ -19473,9 +19736,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4) + webpack: 5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4) webpack-dev-middleware: 7.2.1(webpack@5.91.0) - ws: 8.16.0 + ws: 8.17.0 transitivePeerDependencies: - bufferutil - debug @@ -19495,7 +19758,7 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - /webpack@5.91.0(@swc/core@1.4.13)(esbuild@0.19.12)(webpack-cli@5.1.4): + /webpack@5.91.0(@swc/core@1.4.17)(esbuild@0.19.12)(webpack-cli@5.1.4): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -19515,7 +19778,7 @@ packages: browserslist: 4.23.0 chrome-trace-event: 1.0.3 enhanced-resolve: 5.16.0 - es-module-lexer: 1.5.0 + es-module-lexer: 1.5.2 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -19526,7 +19789,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.4.13)(esbuild@0.19.12)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.17)(esbuild@0.19.12)(webpack@5.91.0) watchpack: 2.4.1 webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-sources: 3.2.3 @@ -19535,7 +19798,7 @@ packages: - esbuild - uglify-js - /webpack@5.91.0(@swc/core@1.4.13)(webpack-cli@5.1.4): + /webpack@5.91.0(@swc/core@1.4.17)(webpack-cli@5.1.4): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -19555,7 +19818,7 @@ packages: browserslist: 4.23.0 chrome-trace-event: 1.0.3 enhanced-resolve: 5.16.0 - es-module-lexer: 1.5.0 + es-module-lexer: 1.5.2 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -19566,7 +19829,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.4.13)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.17)(webpack@5.91.0) watchpack: 2.4.1 webpack-cli: 5.1.4(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-sources: 3.2.3 @@ -19693,7 +19956,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -19702,14 +19964,6 @@ packages: dependencies: isexe: 2.0.0 - /which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - isexe: 3.1.1 - dev: true - /wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: @@ -19759,6 +20013,11 @@ packages: winston-transport: 4.7.0 dev: true + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + /wordwrap@0.0.3: resolution: {integrity: sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==} engines: {node: '>=0.4.0'} @@ -19830,8 +20089,8 @@ packages: optional: true dev: true - /ws@8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + /ws@8.17.0: + resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -19842,6 +20101,18 @@ packages: utf-8-validate: optional: true + /ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + /xdg-basedir@5.1.0: resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} engines: {node: '>=12'} @@ -19894,11 +20165,11 @@ packages: dependencies: eslint-visitor-keys: 3.4.3 lodash: 4.17.21 - yaml: 2.4.1 + yaml: 2.4.2 dev: true - /yaml@2.4.1: - resolution: {integrity: sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==} + /yaml@2.4.2: + resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} engines: {node: '>= 14'} hasBin: true dev: true @@ -19969,6 +20240,10 @@ packages: fd-slicer: 1.1.0 dev: true + /ylru@1.4.0: + resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} + engines: {node: '>= 4.0.0'} + /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -19977,6 +20252,7 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + dev: true /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} @@ -19992,19 +20268,23 @@ packages: readable-stream: 3.6.2 dev: true - /zod-validation-error@3.1.0(zod@3.22.4): - resolution: {integrity: sha512-zujS6HqJjMZCsvjfbnRs7WI3PXN39ovTcY1n8a+KTm4kOH0ZXYsNiJkH1odZf4xZKMkBDL7M2rmQ913FCS1p9w==} + /zod-validation-error@3.2.0(zod@3.23.5): + resolution: {integrity: sha512-cYlPR6zuyrgmu2wRTdumEAJGuwI7eHVHGT+VyneAQxmRAKtGRL1/7pjz4wfLhz4J05f5qoSZc3rGacswgyTjjw==} engines: {node: '>=18.0.0'} peerDependencies: zod: ^3.18.0 dependencies: - zod: 3.22.4 + zod: 3.23.5 dev: true /zod@3.22.4: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: true + /zod@3.23.5: + resolution: {integrity: sha512-fkwiq0VIQTksNNA131rDOsVJcns0pfVUjHzLrNBiF/O/Xxb5lQyEXkhZWcJ7npWsYlvs+h0jFWXXy4X46Em1JA==} + dev: true + /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: true diff --git a/samples/basic/another-remote-module/package.json b/samples/basic/another-remote-module/package.json index 3586536a1..f20031165 100644 --- a/samples/basic/another-remote-module/package.json +++ b/samples/basic/another-remote-module/package.json @@ -13,11 +13,11 @@ "serve-build": "pnpm build && pnpm http-server dist -p 8082 -P http://localhost:8082? -c-1" }, "devDependencies": { - "@squide/firefly-configs": "workspace:*", - "@swc/core": "1.4.13", - "@swc/helpers": "0.5.9", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@squide/firefly-webpack-configs": "workspace:*", + "@swc/core": "1.4.17", + "@swc/helpers": "0.5.11", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/browserslist-config": "2.0.1", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", @@ -39,9 +39,10 @@ "@react-stately/toast": "3.0.0-beta.2", "@squide/fakes": "workspace:*", "@squide/firefly": "workspace:*", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-router-dom": "6.22.3" + "react-router-dom": "6.23.0", + "useless-lib": "3.0.0" } } diff --git a/samples/basic/another-remote-module/src/register.tsx b/samples/basic/another-remote-module/src/register.tsx index 7dec3881e..b426f96b8 100644 --- a/samples/basic/another-remote-module/src/register.tsx +++ b/samples/basic/another-remote-module/src/register.tsx @@ -1,5 +1,11 @@ import type { FireflyRuntime, ModuleRegisterFunction } from "@squide/firefly"; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { version } from "useless-lib"; + +console.log("[basic-sample] another-remote-module:", version); + function registerRoutes(runtime: FireflyRuntime) { runtime.registerRoute({ path: "/federated-tabs/officevibe", diff --git a/samples/basic/another-remote-module/tsconfig.json b/samples/basic/another-remote-module/tsconfig.json index 843f0c9b5..e0accb146 100644 --- a/samples/basic/another-remote-module/tsconfig.json +++ b/samples/basic/another-remote-module/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/fakes": ["../../../packages/fakes/src/index.ts"], "@basic/shell": ["../shell/src/index.ts"], diff --git a/samples/basic/another-remote-module/webpack.build.js b/samples/basic/another-remote-module/webpack.build.js index d2811fb37..c0129a059 100644 --- a/samples/basic/another-remote-module/webpack.build.js +++ b/samples/basic/another-remote-module/webpack.build.js @@ -1,6 +1,6 @@ // @ts-check -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; import { getSharedDependencies } from "./webpack.common.js"; diff --git a/samples/basic/another-remote-module/webpack.common.js b/samples/basic/another-remote-module/webpack.common.js index 93b0ef2e5..6fb07aef8 100644 --- a/samples/basic/another-remote-module/webpack.common.js +++ b/samples/basic/another-remote-module/webpack.common.js @@ -9,6 +9,10 @@ export function getSharedDependencies(isHost) { "@basic/shared": { singleton: true, eager: isHost ? true : undefined + }, + "useless-lib": { + singleton: true, + eager: isHost ? true : undefined } }; } diff --git a/samples/basic/another-remote-module/webpack.dev.js b/samples/basic/another-remote-module/webpack.dev.js index 70caa4d07..a5c9c6da7 100644 --- a/samples/basic/another-remote-module/webpack.dev.js +++ b/samples/basic/another-remote-module/webpack.dev.js @@ -1,6 +1,7 @@ // @ts-check -import { defineDevHostConfig, defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { isNetlify } from "@basic/shared"; +import { defineDevHostConfig, defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import path from "node:path"; import { swcConfig } from "./swc.dev.js"; import { getSharedDependencies } from "./webpack.common.js"; @@ -11,16 +12,16 @@ if (!process.env.ISOLATED) { config = defineDevRemoteModuleConfig(swcConfig, "remote2", 8082, { sharedDependencies: getSharedDependencies(false), environmentVariables: { - "NETLIFY": process.env.NETLIFY === "true" + "NETLIFY": isNetlify } }); } else { - config = defineDevHostConfig(swcConfig, "remote2", 8080, { + config = defineDevHostConfig(swcConfig, "remote2", 8080, [], { entry: path.resolve("./src/dev/index.tsx"), overlay: false, sharedDependencies: getSharedDependencies(true), environmentVariables: { - "NETLIFY": process.env.NETLIFY === "true" + "NETLIFY": isNetlify } }); } diff --git a/samples/basic/host/package.json b/samples/basic/host/package.json index 4e327051e..51df120d3 100644 --- a/samples/basic/host/package.json +++ b/samples/basic/host/package.json @@ -15,11 +15,11 @@ "serve-build": "pnpm build && pnpm http-server dist -p 8080 -P http://localhost:8080? -c-1" }, "devDependencies": { - "@squide/firefly-configs": "workspace:*", - "@swc/core": "1.4.13", - "@swc/helpers": "0.5.9", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@squide/firefly-webpack-configs": "workspace:*", + "@swc/core": "1.4.17", + "@swc/helpers": "0.5.11", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/browserslist-config": "2.0.1", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", @@ -42,9 +42,10 @@ "@react-stately/toast": "3.0.0-beta.2", "@squide/fakes": "workspace:*", "@squide/firefly": "workspace:*", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-router-dom": "6.22.3" + "react-router-dom": "6.23.0", + "useless-lib": "^2.0.0" } } diff --git a/samples/basic/host/remotes.js b/samples/basic/host/remotes.js new file mode 100644 index 000000000..2c93a96df --- /dev/null +++ b/samples/basic/host/remotes.js @@ -0,0 +1,17 @@ +// @ts-check + +import { isNetlify } from "@basic/shared"; + +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +export const Remotes = [ + { + name: "remote1", + url: isNetlify ? "https://squide-basic-remote-module.netlify.app" : "http://localhost:8081" + }, + { + name: "remote2", + url: isNetlify ? "https://squide-basic-another-remote-module.netlify.app" : "http://localhost:8082" + } +]; diff --git a/samples/basic/host/src/bootstrap.tsx b/samples/basic/host/src/bootstrap.tsx index d3337ca6b..ac78b9172 100644 --- a/samples/basic/host/src/bootstrap.tsx +++ b/samples/basic/host/src/bootstrap.tsx @@ -1,23 +1,19 @@ import { registerLocalModule } from "@basic/local-module"; -import { isNetlify, registerLayouts, type AppContext } from "@basic/shared"; +import { registerLayouts, type AppContext } from "@basic/shared"; import { registerShell } from "@basic/shell"; -import { ConsoleLogger, FireflyRuntime, RuntimeContext, registerLocalModules, registerRemoteModules, type RemoteDefinition } from "@squide/firefly"; +import { ConsoleLogger, FireflyRuntime, RuntimeContext, registerLocalModules, registerRemoteModules } from "@squide/firefly"; import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; +import { Remotes } from "../remotes.js"; import { App } from "./App.tsx"; import { registerHost } from "./register.tsx"; import { sessionAccessor, sessionManager } from "./session.ts"; -const Remotes: RemoteDefinition[] = [ - { - name: "remote1", - url: isNetlify ? "https://squide-basic-remote-module.netlify.app" : "http://localhost:8081" - }, - { - name: "remote2", - url: isNetlify ? "https://squide-basic-another-remote-module.netlify.app" : "http://localhost:8082" - } -]; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { version } from "useless-lib"; + +console.log("[basic-sample] host:", version); const runtime = new FireflyRuntime({ loggers: [new ConsoleLogger()], diff --git a/samples/basic/host/tsconfig.json b/samples/basic/host/tsconfig.json index 1bf6ec29a..a20c22dca 100644 --- a/samples/basic/host/tsconfig.json +++ b/samples/basic/host/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/fakes": ["../../../packages/fakes/src/index.ts"], "@basic/shell": ["../shell/src/index.ts"], diff --git a/samples/basic/host/webpack.build.js b/samples/basic/host/webpack.build.js index 272854cb2..d896ff228 100644 --- a/samples/basic/host/webpack.build.js +++ b/samples/basic/host/webpack.build.js @@ -1,17 +1,15 @@ // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { isNetlify } from "@basic/shared"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; +import { Remotes } from "./remotes.js"; import { swcConfig } from "./swc.build.js"; +import { getSharedDependencies } from "./webpack.common.js"; -export default defineBuildHostConfig(swcConfig, "host", { - sharedDependencies: { - "@basic/shared": { - singleton: true, - eager: true - } - }, +export default defineBuildHostConfig(swcConfig, "host", Remotes, { + sharedDependencies: getSharedDependencies(), environmentVariables: { - "NETLIFY": process.env.NETLIFY === "true" + "NETLIFY": isNetlify } }); diff --git a/samples/basic/host/webpack.common.js b/samples/basic/host/webpack.common.js new file mode 100644 index 000000000..8b7962a0e --- /dev/null +++ b/samples/basic/host/webpack.common.js @@ -0,0 +1,14 @@ +// @ts-check + +export function getSharedDependencies() { + return { + "@basic/shared": { + singleton: true, + eager: true + }, + "useless-lib": { + singleton: true, + eager: true + } + }; +} diff --git a/samples/basic/host/webpack.dev.js b/samples/basic/host/webpack.dev.js index 403192c30..294baf17c 100644 --- a/samples/basic/host/webpack.dev.js +++ b/samples/basic/host/webpack.dev.js @@ -1,17 +1,15 @@ // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { isNetlify } from "@basic/shared"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; +import { Remotes } from "./remotes.js"; import { swcConfig } from "./swc.dev.js"; +import { getSharedDependencies } from "./webpack.common.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes, { overlay: false, - sharedDependencies: { - "@basic/shared": { - singleton: true, - eager: true - } - }, + sharedDependencies: getSharedDependencies(), environmentVariables: { - "NETLIFY": process.env.NETLIFY === "true" + "NETLIFY": isNetlify } }); diff --git a/samples/basic/local-module/package.json b/samples/basic/local-module/package.json index 1db52e305..f8d9a08cc 100644 --- a/samples/basic/local-module/package.json +++ b/samples/basic/local-module/package.json @@ -33,11 +33,11 @@ "devDependencies": { "@react-aria/toast": "3.0.0-beta.10", "@react-stately/toast": "3.0.0-beta.2", - "@squide/firefly-configs": "workspace:*", - "@swc/core": "1.4.13", - "@swc/helpers": "0.5.9", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@squide/firefly-webpack-configs": "workspace:*", + "@swc/core": "1.4.17", + "@swc/helpers": "0.5.11", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/browserslist-config": "2.0.1", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", @@ -57,9 +57,9 @@ "@basic/shell": "workspace:*", "@squide/fakes": "workspace:*", "@squide/firefly": "workspace:*", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-router-dom": "6.22.3" + "react-router-dom": "6.23.0" } } diff --git a/samples/basic/local-module/tsconfig.json b/samples/basic/local-module/tsconfig.json index 2cd1ac01b..41863e2f7 100644 --- a/samples/basic/local-module/tsconfig.json +++ b/samples/basic/local-module/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/fakes": ["../../../packages/fakes/src/index.ts"], "@basic/shell": ["../shell/src/index.ts"], diff --git a/samples/basic/local-module/webpack.config.js b/samples/basic/local-module/webpack.config.js index 79f373994..21e2f2a7a 100644 --- a/samples/basic/local-module/webpack.config.js +++ b/samples/basic/local-module/webpack.config.js @@ -1,10 +1,11 @@ // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { isNetlify } from "@basic/shared"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import path from "node:path"; import { swcConfig } from "./swc.config.js"; -export default defineDevHostConfig(swcConfig, "local1", 8080, { +export default defineDevHostConfig(swcConfig, "local1", 8080, [], { entry: path.resolve("./src/dev/index.tsx"), overlay: false, sharedDependencies: { @@ -14,7 +15,7 @@ export default defineDevHostConfig(swcConfig, "local1", 8080, { } }, environmentVariables: { - "NETLIFY": process.env.NETLIFY === "true" + "NETLIFY": isNetlify } }); diff --git a/samples/basic/remote-module/package.json b/samples/basic/remote-module/package.json index f4864b1df..be8754a04 100644 --- a/samples/basic/remote-module/package.json +++ b/samples/basic/remote-module/package.json @@ -13,11 +13,11 @@ "serve-build": "pnpm build && pnpm http-server dist -p 8081 -P http://localhost:8081? -c-1" }, "devDependencies": { - "@squide/firefly-configs": "workspace:*", - "@swc/core": "1.4.13", - "@swc/helpers": "0.5.9", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@squide/firefly-webpack-configs": "workspace:*", + "@swc/core": "1.4.17", + "@swc/helpers": "0.5.11", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/browserslist-config": "2.0.1", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", @@ -39,9 +39,10 @@ "@react-stately/toast": "3.0.0-beta.2", "@squide/fakes": "workspace:*", "@squide/firefly": "workspace:*", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-router-dom": "6.22.3" + "react-router-dom": "6.23.0", + "useless-lib": "^2.1.0" } } diff --git a/samples/basic/remote-module/src/register.tsx b/samples/basic/remote-module/src/register.tsx index efaf05076..b9475d02f 100644 --- a/samples/basic/remote-module/src/register.tsx +++ b/samples/basic/remote-module/src/register.tsx @@ -1,6 +1,12 @@ import { BackgroundColorContext } from "@basic/shared"; import type { FireflyRuntime, ModuleRegisterFunction } from "@squide/firefly"; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { version } from "useless-lib"; + +console.log("[basic-sample] remote-module:", version); + function registerRoutes(runtime: FireflyRuntime) { runtime.registerRoute({ path: "/hoisted", diff --git a/samples/basic/remote-module/tsconfig.json b/samples/basic/remote-module/tsconfig.json index 843f0c9b5..e0accb146 100644 --- a/samples/basic/remote-module/tsconfig.json +++ b/samples/basic/remote-module/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/fakes": ["../../../packages/fakes/src/index.ts"], "@basic/shell": ["../shell/src/index.ts"], diff --git a/samples/basic/remote-module/webpack.build.js b/samples/basic/remote-module/webpack.build.js index ecf9c7e85..c27575fb8 100644 --- a/samples/basic/remote-module/webpack.build.js +++ b/samples/basic/remote-module/webpack.build.js @@ -1,6 +1,6 @@ // @ts-check -import { defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import { swcConfig } from "./swc.build.js"; import { getSharedDependencies } from "./webpack.common.js"; diff --git a/samples/basic/remote-module/webpack.common.js b/samples/basic/remote-module/webpack.common.js index 93b0ef2e5..6fb07aef8 100644 --- a/samples/basic/remote-module/webpack.common.js +++ b/samples/basic/remote-module/webpack.common.js @@ -9,6 +9,10 @@ export function getSharedDependencies(isHost) { "@basic/shared": { singleton: true, eager: isHost ? true : undefined + }, + "useless-lib": { + singleton: true, + eager: isHost ? true : undefined } }; } diff --git a/samples/basic/remote-module/webpack.dev.js b/samples/basic/remote-module/webpack.dev.js index a2728f2cb..5685ab24e 100644 --- a/samples/basic/remote-module/webpack.dev.js +++ b/samples/basic/remote-module/webpack.dev.js @@ -1,6 +1,7 @@ // @ts-check -import { defineDevHostConfig, defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { isNetlify } from "@basic/shared"; +import { defineDevHostConfig, defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import path from "node:path"; import { swcConfig } from "./swc.dev.js"; import { getSharedDependencies } from "./webpack.common.js"; @@ -11,16 +12,16 @@ if (!process.env.ISOLATED) { config = defineDevRemoteModuleConfig(swcConfig, "remote1", 8081, { sharedDependencies: getSharedDependencies(false), environmentVariables: { - "NETLIFY": process.env.NETLIFY === "true" + "NETLIFY": isNetlify } }); } else { - config = defineDevHostConfig(swcConfig, "remote1", 8080, { + config = defineDevHostConfig(swcConfig, "remote1", 8080, [], { entry: path.resolve("./src/dev/index.tsx"), overlay: false, sharedDependencies: getSharedDependencies(true), environmentVariables: { - "NETLIFY": process.env.NETLIFY === "true" + "NETLIFY": isNetlify } }); } diff --git a/samples/basic/shared/package.json b/samples/basic/shared/package.json index 34eacfabc..e58042645 100644 --- a/samples/basic/shared/package.json +++ b/samples/basic/shared/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@squide/firefly": "workspace:*", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/tsup-configs": "3.0.6", "@workleap/typescript-configs": "3.0.2", diff --git a/samples/basic/shared/tsconfig.json b/samples/basic/shared/tsconfig.json index 9fbc9f546..06cdc6494 100644 --- a/samples/basic/shared/tsconfig.json +++ b/samples/basic/shared/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/fakes": ["../../../packages/fakes/src/index.ts"] } diff --git a/samples/basic/shell/package.json b/samples/basic/shell/package.json index 6197b770f..85515edf0 100644 --- a/samples/basic/shell/package.json +++ b/samples/basic/shell/package.json @@ -31,8 +31,8 @@ "devDependencies": { "@basic/shared": "workspace:*", "@squide/firefly": "workspace:*", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/tsup-configs": "3.0.6", "@workleap/typescript-configs": "3.0.2", diff --git a/samples/basic/shell/tsconfig.json b/samples/basic/shell/tsconfig.json index 1a6dae7bc..2d4940b6a 100644 --- a/samples/basic/shell/tsconfig.json +++ b/samples/basic/shell/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/fakes": ["../../../packages/fakes/src/index.ts"], "@basic/shared": ["../shared/src/index.ts"] diff --git a/samples/endpoints/host/package.json b/samples/endpoints/host/package.json index a9bafb466..90fe5218c 100644 --- a/samples/endpoints/host/package.json +++ b/samples/endpoints/host/package.json @@ -16,12 +16,12 @@ }, "devDependencies": { "@squide/fakes": "workspace:*", - "@squide/firefly-configs": "workspace:*", - "@swc/core": "1.4.13", - "@swc/helpers": "0.5.9", - "@tanstack/react-query": "5.29.2", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@squide/firefly-webpack-configs": "workspace:*", + "@swc/core": "1.4.17", + "@swc/helpers": "0.5.11", + "@tanstack/react-query": "5.32.0", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/browserslist-config": "2.0.1", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", @@ -46,14 +46,14 @@ "@squide/fakes": "workspace:*", "@squide/firefly": "workspace:*", "@squide/i18next": "workspace:*", - "i18next": "23.11.1", + "i18next": "23.11.3", "i18next-browser-languagedetector": "7.2.1", - "msw": "2.2.13", - "react": "18.2.0", - "react-dom": "18.2.0", + "msw": "2.2.14", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-i18next": "14.1.0", - "react-router-dom": "6.22.3" + "react-i18next": "14.1.1", + "react-router-dom": "6.23.0" }, "msw": { "workerDirectory": "public" diff --git a/samples/endpoints/host/remotes.js b/samples/endpoints/host/remotes.js new file mode 100644 index 000000000..3dd8e7c43 --- /dev/null +++ b/samples/endpoints/host/remotes.js @@ -0,0 +1,13 @@ +// @ts-check + +import { isNetlify } from "@endpoints/shared"; + +/** + * @typedef {import("@squide/firefly-webpack-configs").RemoteDefinition}[] + */ +export const Remotes = [ + { + name: "remote1", + url: isNetlify ? "https://squide-endpoints-remote-module.netlify.app" : "http://localhost:8081" + } +]; diff --git a/samples/endpoints/host/src/App.tsx b/samples/endpoints/host/src/App.tsx index 8d4a872ea..5a50fafe6 100644 --- a/samples/endpoints/host/src/App.tsx +++ b/samples/endpoints/host/src/App.tsx @@ -10,7 +10,7 @@ export function App() { return ( diff --git a/samples/endpoints/host/src/bootstrap.tsx b/samples/endpoints/host/src/bootstrap.tsx index 8e0cbb126..9119c2572 100644 --- a/samples/endpoints/host/src/bootstrap.tsx +++ b/samples/endpoints/host/src/bootstrap.tsx @@ -1,24 +1,18 @@ import { createI18NextPlugin } from "@endpoints/i18next"; import { registerLocalModule } from "@endpoints/local-module"; -import { isNetlify } from "@endpoints/shared"; import { registerShell } from "@endpoints/shell"; -import { ConsoleLogger, FireflyRuntime, RuntimeContext, registerLocalModules, registerRemoteModules, setMswAsStarted, type RemoteDefinition } from "@squide/firefly"; +import { ConsoleLogger, FireflyRuntime, RuntimeContext, registerLocalModules, registerRemoteModules, setMswAsStarted } from "@squide/firefly"; import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; +import { Remotes } from "../remotes.js"; import { App } from "./App.tsx"; import { registerHost } from "./register.tsx"; import { sessionAccessor, sessionManager } from "./session.ts"; -const Remotes: RemoteDefinition[] = [ - { - name: "remote1", - url: isNetlify ? "https://squide-endpoints-remote-module.netlify.app" : "http://localhost:8081" - } -]; - const consoleLogger = new ConsoleLogger(); const runtime = new FireflyRuntime({ + useMsw: !!process.env.USE_MSW, plugins: [createI18NextPlugin()], loggers: [consoleLogger], sessionAccessor @@ -28,7 +22,7 @@ await registerLocalModules([registerShell(sessionManager, { host: "@endpoints/ho await registerRemoteModules(Remotes, runtime); -if (process.env.USE_MSW) { +if (runtime.isMswEnabled) { // Files that includes an import to the "msw" package are included dynamically to prevent adding // unused MSW stuff to the code bundles. const startMsw = (await import("../mocks/browser.ts")).startMsw; diff --git a/samples/endpoints/host/src/i18next.ts b/samples/endpoints/host/src/i18next.ts index 38b5dad04..a7a90b972 100644 --- a/samples/endpoints/host/src/i18next.ts +++ b/samples/endpoints/host/src/i18next.ts @@ -7,10 +7,10 @@ import resourcesFr from "./locales/fr-CA/resources.json"; export const i18NextInstanceKey = "host"; -export async function initI18next(runtime: FireflyRuntime) { +export function initI18next(runtime: FireflyRuntime) { const i18nextPlugin = getI18nextPlugin(runtime) as i18nextPlugin; - const instance = await createInstance(i18nextPlugin.currentLanguage, { + const instance = createInstance(i18nextPlugin.currentLanguage, { resources: { "en-US": resourcesEn, "fr-CA": resourcesFr diff --git a/samples/endpoints/host/src/register.tsx b/samples/endpoints/host/src/register.tsx index 1c44b8fb3..c2ee37533 100644 --- a/samples/endpoints/host/src/register.tsx +++ b/samples/endpoints/host/src/register.tsx @@ -58,7 +58,7 @@ async function registerMsw(runtime: FireflyRuntime) { } export const registerHost: ModuleRegisterFunction = async runtime => { - const i18nextInstance = await initI18next(runtime); + const i18nextInstance = initI18next(runtime); await registerMsw(runtime); diff --git a/samples/endpoints/host/tsconfig.json b/samples/endpoints/host/tsconfig.json index 4e2ae1107..8ee2416ad 100644 --- a/samples/endpoints/host/tsconfig.json +++ b/samples/endpoints/host/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/msw": ["../../../packages/msw/src/index.ts"], "@squide/i18next": ["../../../packages/i18next/src/index.ts"], diff --git a/samples/endpoints/host/webpack.build.js b/samples/endpoints/host/webpack.build.js index 65b9f442d..7d807705a 100644 --- a/samples/endpoints/host/webpack.build.js +++ b/samples/endpoints/host/webpack.build.js @@ -1,14 +1,16 @@ // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { isNetlify } from "@endpoints/shared"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; +import { Remotes } from "./remotes.js"; import { swcConfig } from "./swc.build.js"; import { features, getSharedDependencies } from "./webpack.common.js"; -export default defineBuildHostConfig(swcConfig, "host", { +export default defineBuildHostConfig(swcConfig, "host", Remotes, { features, - sharedDependencies: getSharedDependencies(true), + sharedDependencies: getSharedDependencies(), environmentVariables: { - "NETLIFY": process.env.NETLIFY === "true", + "NETLIFY": isNetlify, "USE_MSW": process.env.USE_MSW === "true" } }); diff --git a/samples/endpoints/host/webpack.common.js b/samples/endpoints/host/webpack.common.js index af0372c7f..9a4d05225 100644 --- a/samples/endpoints/host/webpack.common.js +++ b/samples/endpoints/host/webpack.common.js @@ -1,18 +1,14 @@ // @ts-check -/** - * @param {boolean} isHost - * @returns {Record} - */ -export function getSharedDependencies(isHost) { +export function getSharedDependencies() { return { "@endpoints/layouts": { singleton: true, - eager: isHost ? true : undefined + eager: true }, "@endpoints/shared": { singleton: true, - eager: isHost ? true : undefined + eager: true } }; } diff --git a/samples/endpoints/host/webpack.dev.js b/samples/endpoints/host/webpack.dev.js index ec218f7ec..36cb33535 100644 --- a/samples/endpoints/host/webpack.dev.js +++ b/samples/endpoints/host/webpack.dev.js @@ -1,15 +1,17 @@ // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { isNetlify } from "@endpoints/shared"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; +import { Remotes } from "./remotes.js"; import { swcConfig } from "./swc.dev.js"; import { features, getSharedDependencies } from "./webpack.common.js"; -export default defineDevHostConfig(swcConfig, "host", 8080, { +export default defineDevHostConfig(swcConfig, "host", 8080, Remotes, { overlay: false, features, - sharedDependencies: getSharedDependencies(true), + sharedDependencies: getSharedDependencies(), environmentVariables: { - "NETLIFY": process.env.NETLIFY === "true", + "NETLIFY": isNetlify, "USE_MSW": process.env.USE_MSW === "true" } }); diff --git a/samples/endpoints/i18next/src/createI18nextInstance.ts b/samples/endpoints/i18next/src/createI18nextInstance.ts index 94c2c9f5c..465caf48c 100644 --- a/samples/endpoints/i18next/src/createI18nextInstance.ts +++ b/samples/endpoints/i18next/src/createI18nextInstance.ts @@ -3,7 +3,7 @@ import type { InitOptions } from "i18next"; import i18n from "i18next"; import { initReactI18next } from "react-i18next"; -export async function createI18nextInstance(language: LanguageKey, options: InitOptions = {}) { +export function createI18nextInstance(language: LanguageKey, options: InitOptions = {}) { const instance = i18n.createInstance() .use(initReactI18next); diff --git a/samples/endpoints/i18next/tsconfig.json b/samples/endpoints/i18next/tsconfig.json index bed013b3b..cc912ef6f 100644 --- a/samples/endpoints/i18next/tsconfig.json +++ b/samples/endpoints/i18next/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/msw": ["../../../packages/msw/src/index.ts"], "@squide/i18next": ["../../../packages/i18next/src/index.ts"], diff --git a/samples/endpoints/layouts/package.json b/samples/endpoints/layouts/package.json index 4a035ccc4..b2de9d5f2 100644 --- a/samples/endpoints/layouts/package.json +++ b/samples/endpoints/layouts/package.json @@ -14,8 +14,8 @@ } }, "scripts": { - "dev": "cross-env USE_MSW=true nodemon", - "build": "cross-env USE_MSW=true tsup --config ./tsup.build.ts", + "dev": "nodemon", + "build": "tsup --config ./tsup.build.ts", "serve-build": "pnpm build" }, "peerDependencies": { @@ -36,12 +36,11 @@ "@endpoints/shared": "workspace:*", "@squide/firefly": "workspace:*", "@squide/i18next": "workspace:*", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/tsup-configs": "3.0.6", "@workleap/typescript-configs": "3.0.2", - "cross-env": "7.0.3", "eslint": "8.57.0", "nodemon": "3.1.0", "tsup": "8.0.2", diff --git a/samples/endpoints/layouts/src/i18next.ts b/samples/endpoints/layouts/src/i18next.ts index 441474dfc..fd7172cd0 100644 --- a/samples/endpoints/layouts/src/i18next.ts +++ b/samples/endpoints/layouts/src/i18next.ts @@ -7,10 +7,10 @@ import resourcesFr from "./locales/fr-CA/resources.json"; export const i18NextInstanceKey = "layouts"; -export async function initI18next(runtime: FireflyRuntime) { +export function initI18next(runtime: FireflyRuntime) { const i18nextPlugin = getI18nextPlugin(runtime) as i18nextPlugin; - const instance = await createInstance(i18nextPlugin.currentLanguage, { + const instance = createInstance(i18nextPlugin.currentLanguage, { resources: { "en-US": resourcesEn, "fr-CA": resourcesFr diff --git a/samples/endpoints/layouts/src/registerLayouts.tsx b/samples/endpoints/layouts/src/registerLayouts.tsx index f7e83aa4e..01c5895ba 100644 --- a/samples/endpoints/layouts/src/registerLayouts.tsx +++ b/samples/endpoints/layouts/src/registerLayouts.tsx @@ -25,8 +25,8 @@ function registerRoutes(runtime: FireflyRuntime, i18nextInstance: i18n, host?: s }); } -export async function registerLayouts(runtime: FireflyRuntime, { host }: RegisterLayoutsOptions = {}) { - const i18nextInstance = await initI18next(runtime); +export function registerLayouts(runtime: FireflyRuntime, { host }: RegisterLayoutsOptions = {}) { + const i18nextInstance = initI18next(runtime); return registerRoutes(runtime, i18nextInstance, host); } diff --git a/samples/endpoints/layouts/tsconfig.json b/samples/endpoints/layouts/tsconfig.json index 1316b2518..b9a454564 100644 --- a/samples/endpoints/layouts/tsconfig.json +++ b/samples/endpoints/layouts/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/msw": ["../../../packages/msw/src/index.ts"], "@squide/i18next": ["../../../packages/i18next/src/index.ts"], diff --git a/samples/endpoints/local-module/package.json b/samples/endpoints/local-module/package.json index 3db0be418..b588a393d 100644 --- a/samples/endpoints/local-module/package.json +++ b/samples/endpoints/local-module/package.json @@ -14,9 +14,9 @@ } }, "scripts": { - "dev": "cross-env USE_MSW=true nodemon", + "dev": "nodemon", "dev-isolated": "cross-env USE_MSW=true ISOLATED=true nodemon --config nodemon.isolated.json", - "build": "cross-env USE_MSW=true tsup --config ./tsup.build.ts", + "build": "tsup --config ./tsup.build.ts", "serve-build": "pnpm build", "build-isolated": "cross-env USE_MSW=true ISOLATED=true webpack --config webpack.build.js", "serve-build-isolated": "pnpm build-isolated && pnpm http-server dist -p 8080 -P http://localhost:8080? -c-1" @@ -34,12 +34,12 @@ "react-router-dom": "*" }, "devDependencies": { - "@squide/firefly-configs": "workspace:*", - "@swc/core": "1.4.13", - "@swc/helpers": "0.5.9", - "@tanstack/react-query-devtools": "5.29.2", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@squide/firefly-webpack-configs": "workspace:*", + "@swc/core": "1.4.17", + "@swc/helpers": "0.5.11", + "@tanstack/react-query-devtools": "5.32.0", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/browserslist-config": "2.0.1", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", @@ -64,15 +64,15 @@ "@squide/fakes": "workspace:*", "@squide/firefly": "workspace:*", "@squide/i18next": "workspace:*", - "@tanstack/react-query": "5.29.2", - "i18next": "23.11.1", + "@tanstack/react-query": "5.32.0", + "i18next": "23.11.3", "i18next-browser-languagedetector": "7.2.1", - "msw": "2.2.13", - "react": "18.2.0", - "react-dom": "18.2.0", + "msw": "2.2.14", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-i18next": "14.1.0", - "react-router-dom": "6.22.3" + "react-i18next": "14.1.1", + "react-router-dom": "6.23.0" }, "msw": { "workerDirectory": "public" diff --git a/samples/endpoints/local-module/src/dev/App.tsx b/samples/endpoints/local-module/src/dev/App.tsx index 8d4a872ea..5a50fafe6 100644 --- a/samples/endpoints/local-module/src/dev/App.tsx +++ b/samples/endpoints/local-module/src/dev/App.tsx @@ -10,7 +10,7 @@ export function App() { return ( diff --git a/samples/endpoints/local-module/src/dev/index.tsx b/samples/endpoints/local-module/src/dev/index.tsx index 1f357254e..1dfd6cc92 100644 --- a/samples/endpoints/local-module/src/dev/index.tsx +++ b/samples/endpoints/local-module/src/dev/index.tsx @@ -13,6 +13,7 @@ const consoleLogger = new ConsoleLogger(); // Create the shell runtime. // Services, loggers and sessionAccessor could be reuse through a shared packages or faked when in isolation. const runtime = new FireflyRuntime({ + useMsw: !!process.env.USE_MSW, plugins: [createI18NextPlugin()], loggers: [consoleLogger], sessionAccessor @@ -22,7 +23,7 @@ await registerLocalModules([registerShell(sessionManager), registerDev, register // Register MSW after the local modules has been registered since the request handlers // will be registered by the modules. -if (process.env.USE_MSW) { +if (runtime.isMswEnabled) { // Files including an import to the "msw" package are included dynamically to prevent adding // MSW stuff to the bundled when it's not used. const startMsw = (await import("../../mocks/browser.ts")).startMsw; diff --git a/samples/endpoints/local-module/src/i18next.ts b/samples/endpoints/local-module/src/i18next.ts index 53269d71e..b0c623869 100644 --- a/samples/endpoints/local-module/src/i18next.ts +++ b/samples/endpoints/local-module/src/i18next.ts @@ -7,10 +7,10 @@ import resourcesFr from "./locales/fr-CA/resources.json"; export const i18NextInstanceKey = "local-module"; -export async function initI18next(runtime: FireflyRuntime) { +export function initI18next(runtime: FireflyRuntime) { const i18nextPlugin = getI18nextPlugin(runtime) as i18nextPlugin; - const instance = await createInstance(i18nextPlugin.currentLanguage, { + const instance = createInstance(i18nextPlugin.currentLanguage, { resources: { "en-US": resourcesEn, "fr-CA": resourcesFr diff --git a/samples/endpoints/local-module/src/register.tsx b/samples/endpoints/local-module/src/register.tsx index 5dae8a83e..d267c45a9 100644 --- a/samples/endpoints/local-module/src/register.tsx +++ b/samples/endpoints/local-module/src/register.tsx @@ -90,7 +90,7 @@ function registerRoutes(runtime: FireflyRuntime, i18nextInstance: i18n): Deferre } async function registerMsw(runtime: FireflyRuntime) { - if (process.env.USE_MSW) { + if (runtime.isMswEnabled) { // Files including an import to the "msw" package are included dynamically to prevent adding // MSW stuff to the bundled when it's not used. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; @@ -100,7 +100,7 @@ async function registerMsw(runtime: FireflyRuntime) { } export const registerLocalModule: ModuleRegisterFunction = async runtime => { - const i18nextInstance = await initI18next(runtime); + const i18nextInstance = initI18next(runtime); await registerMsw(runtime); diff --git a/samples/endpoints/local-module/tsconfig.json b/samples/endpoints/local-module/tsconfig.json index 8caab1b00..7eb39a3f5 100644 --- a/samples/endpoints/local-module/tsconfig.json +++ b/samples/endpoints/local-module/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/msw": ["../../../packages/msw/src/index.ts"], "@squide/i18next": ["../../../packages/i18next/src/index.ts"], diff --git a/samples/endpoints/local-module/webpack.build.js b/samples/endpoints/local-module/webpack.build.js index e896a35a5..1ad041ae4 100644 --- a/samples/endpoints/local-module/webpack.build.js +++ b/samples/endpoints/local-module/webpack.build.js @@ -1,11 +1,11 @@ // @ts-check -import { defineBuildHostConfig } from "@squide/firefly-configs"; +import { defineBuildHostConfig } from "@squide/firefly-webpack-configs"; import path from "node:path"; import { swcConfig } from "./swc.build.js"; import { features, getSharedDependencies } from "./webpack.common.js"; -export default defineBuildHostConfig(swcConfig, "local1", { +export default defineBuildHostConfig(swcConfig, "local1", [], { entry: path.resolve("./src/dev/index.tsx"), features, sharedDependencies: getSharedDependencies(true), diff --git a/samples/endpoints/local-module/webpack.dev.js b/samples/endpoints/local-module/webpack.dev.js index 8f2eb77a9..ddc536aae 100644 --- a/samples/endpoints/local-module/webpack.dev.js +++ b/samples/endpoints/local-module/webpack.dev.js @@ -1,11 +1,11 @@ // @ts-check -import { defineDevHostConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig } from "@squide/firefly-webpack-configs"; import path from "node:path"; import { swcConfig } from "./swc.dev.js"; import { features, getSharedDependencies } from "./webpack.common.js"; -export default defineDevHostConfig(swcConfig, "local1", 8080, { +export default defineDevHostConfig(swcConfig, "local1", 8080, [], { overlay: false, entry: path.resolve("./src/dev/index.tsx"), features, diff --git a/samples/endpoints/remote-module/package.json b/samples/endpoints/remote-module/package.json index 8b911f177..7f8cb61f0 100644 --- a/samples/endpoints/remote-module/package.json +++ b/samples/endpoints/remote-module/package.json @@ -7,9 +7,9 @@ "license": "Apache-2.0", "type": "module", "scripts": { - "dev": "cross-env USE_MSW=true nodemon", + "dev": "nodemon", "dev-isolated": "cross-env USE_MSW=true ISOLATED=true pnpm dev", - "build": "cross-env USE_MSW=true webpack --config webpack.build.js", + "build": "webpack --config webpack.build.js", "serve-build": "pnpm build && pnpm http-server dist -p 8081 -P http://localhost:8081? -c-1", "build-isolated": "cross-env USE_MSW=true ISOLATED=true pnpm build-isolated:webpack && pnpm build-isolated:copy-redirects && pnpm build-isolated:copy-public-files", "build-isolated:webpack": "webpack --config webpack.build.js", @@ -18,12 +18,12 @@ "serve-build-isolated": "pnpm build-isolated && pnpm http-server dist -p 8080 -P http://localhost:8080? -c-1" }, "devDependencies": { - "@squide/firefly-configs": "workspace:*", - "@swc/core": "1.4.13", - "@swc/helpers": "0.5.9", - "@tanstack/react-query-devtools": "5.29.2", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@squide/firefly-webpack-configs": "workspace:*", + "@swc/core": "1.4.17", + "@swc/helpers": "0.5.11", + "@tanstack/react-query-devtools": "5.32.0", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/browserslist-config": "2.0.1", "@workleap/eslint-plugin": "3.2.2", "@workleap/swc-configs": "2.2.3", @@ -47,15 +47,15 @@ "@squide/fakes": "workspace:*", "@squide/firefly": "workspace:*", "@squide/i18next": "workspace:*", - "@tanstack/react-query": "5.29.2", - "i18next": "23.11.1", + "@tanstack/react-query": "5.32.0", + "i18next": "23.11.3", "i18next-browser-languagedetector": "7.2.1", - "msw": "2.2.13", - "react": "18.2.0", - "react-dom": "18.2.0", + "msw": "2.2.14", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "4.0.13", - "react-i18next": "14.1.0", - "react-router-dom": "6.22.3" + "react-i18next": "14.1.1", + "react-router-dom": "6.23.0" }, "msw": { "workerDirectory": "public" diff --git a/samples/endpoints/remote-module/src/dev/App.tsx b/samples/endpoints/remote-module/src/dev/App.tsx index 2b6bef3ab..6a2d6e934 100644 --- a/samples/endpoints/remote-module/src/dev/App.tsx +++ b/samples/endpoints/remote-module/src/dev/App.tsx @@ -10,7 +10,7 @@ export function App() { return ( diff --git a/samples/endpoints/remote-module/src/dev/index.tsx b/samples/endpoints/remote-module/src/dev/index.tsx index 8d2b99506..8d541f6b2 100644 --- a/samples/endpoints/remote-module/src/dev/index.tsx +++ b/samples/endpoints/remote-module/src/dev/index.tsx @@ -13,6 +13,7 @@ const consoleLogger = new ConsoleLogger(); // Create the shell runtime. // Services, loggers and sessionAccessor could be reuse through a shared packages or faked when in isolation. const runtime = new FireflyRuntime({ + useMsw: !!process.env.USE_MSW, plugins: [createI18NextPlugin()], loggers: [consoleLogger], sessionAccessor @@ -24,7 +25,7 @@ await registerLocalModules([registerShell(sessionManager), registerDev, register // Register MSW after the local modules has been registered since the request handlers // will be registered by the modules. -if (process.env.USE_MSW) { +if (runtime.isMswEnabled) { // Files including an import to the "msw" package are included dynamically to prevent adding // MSW stuff to the bundled when it's not used. const startMsw = (await import("../../mocks/browser.ts")).startMsw; diff --git a/samples/endpoints/remote-module/src/i18next.ts b/samples/endpoints/remote-module/src/i18next.ts index 6adb38703..00438443b 100644 --- a/samples/endpoints/remote-module/src/i18next.ts +++ b/samples/endpoints/remote-module/src/i18next.ts @@ -7,10 +7,10 @@ import resourcesFr from "./locales/fr-CA/resources.json"; export const i18NextInstanceKey = "remote-module"; -export async function initI18next(runtime: FireflyRuntime) { +export function initI18next(runtime: FireflyRuntime) { const i18nextPlugin = getI18nextPlugin(runtime) as i18nextPlugin; - const instance = await createInstance(i18nextPlugin.currentLanguage, { + const instance = createInstance(i18nextPlugin.currentLanguage, { resources: { "en-US": resourcesEn, "fr-CA": resourcesFr diff --git a/samples/endpoints/remote-module/src/register.tsx b/samples/endpoints/remote-module/src/register.tsx index 8ead2d573..e89c4ba50 100644 --- a/samples/endpoints/remote-module/src/register.tsx +++ b/samples/endpoints/remote-module/src/register.tsx @@ -140,7 +140,7 @@ function registerRoutes(runtime: FireflyRuntime, i18nextInstance: i18n): Deferre } async function registerMsw(runtime: FireflyRuntime) { - if (process.env.USE_MSW) { + if (runtime.isMswEnabled) { // Files including an import to the "msw" package are included dynamically to prevent adding // MSW stuff to the bundled when it's not used. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; @@ -150,7 +150,7 @@ async function registerMsw(runtime: FireflyRuntime) { } export const register: ModuleRegisterFunction = async runtime => { - const i18nextInstance = await initI18next(runtime); + const i18nextInstance = initI18next(runtime); await registerMsw(runtime); diff --git a/samples/endpoints/remote-module/tsconfig.json b/samples/endpoints/remote-module/tsconfig.json index 1595077f4..cd7939573 100644 --- a/samples/endpoints/remote-module/tsconfig.json +++ b/samples/endpoints/remote-module/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/msw": ["../../../packages/msw/src/index.ts"], "@squide/i18next": ["../../../packages/i18next/src/index.ts"], diff --git a/samples/endpoints/remote-module/webpack.build.js b/samples/endpoints/remote-module/webpack.build.js index d4d8c9d1f..dd302a79e 100644 --- a/samples/endpoints/remote-module/webpack.build.js +++ b/samples/endpoints/remote-module/webpack.build.js @@ -1,6 +1,6 @@ // @ts-check -import { defineBuildHostConfig, defineBuildRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineBuildHostConfig, defineBuildRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import path from "node:path"; import { swcConfig } from "./swc.build.js"; import { features, getSharedDependencies } from "./webpack.common.js"; @@ -17,7 +17,7 @@ if (!process.env.ISOLATED) { } }); } else { - config = defineBuildHostConfig(swcConfig, "remote1", { + config = defineBuildHostConfig(swcConfig, "remote1", [], { entry: path.resolve("./src/dev/index.tsx"), features, sharedDependencies: getSharedDependencies(true), diff --git a/samples/endpoints/remote-module/webpack.dev.js b/samples/endpoints/remote-module/webpack.dev.js index 8f76f00a6..4af05adca 100644 --- a/samples/endpoints/remote-module/webpack.dev.js +++ b/samples/endpoints/remote-module/webpack.dev.js @@ -1,6 +1,6 @@ // @ts-check -import { defineDevHostConfig, defineDevRemoteModuleConfig } from "@squide/firefly-configs"; +import { defineDevHostConfig, defineDevRemoteModuleConfig } from "@squide/firefly-webpack-configs"; import path from "node:path"; import { swcConfig } from "./swc.dev.js"; import { features, getSharedDependencies } from "./webpack.common.js"; @@ -18,7 +18,7 @@ if (!process.env.ISOLATED) { } }); } else { - config = defineDevHostConfig(swcConfig, "remote1", 8080, { + config = defineDevHostConfig(swcConfig, "remote1", 8080, [], { overlay: false, entry: path.resolve("./src/dev/index.tsx"), features, diff --git a/samples/endpoints/shared/package.json b/samples/endpoints/shared/package.json index f2deb3304..9bbcef94e 100644 --- a/samples/endpoints/shared/package.json +++ b/samples/endpoints/shared/package.json @@ -26,8 +26,8 @@ }, "devDependencies": { "@squide/firefly": "workspace:*", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/tsup-configs": "3.0.6", "@workleap/typescript-configs": "3.0.2", diff --git a/samples/endpoints/shared/tsconfig.json b/samples/endpoints/shared/tsconfig.json index 10b0dc5e1..e92b3a81f 100644 --- a/samples/endpoints/shared/tsconfig.json +++ b/samples/endpoints/shared/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/msw": ["../../../packages/msw/src/index.ts"], "@squide/i18next": ["../../../packages/i18next/src/index.ts"], diff --git a/samples/endpoints/shell/package.json b/samples/endpoints/shell/package.json index 68c6d4d5c..ca80f6a8f 100644 --- a/samples/endpoints/shell/package.json +++ b/samples/endpoints/shell/package.json @@ -14,8 +14,8 @@ } }, "scripts": { - "dev": "cross-env USE_MSW=true nodemon", - "build": "cross-env USE_MSW=true tsup --config ./tsup.build.ts", + "dev": "nodemon", + "build": "tsup --config ./tsup.build.ts", "serve-build": "pnpm build" }, "peerDependencies": { @@ -42,12 +42,11 @@ "@squide/firefly": "workspace:*", "@squide/i18next": "workspace:*", "@types/node": "20.12.7", - "@types/react": "18.2.77", - "@types/react-dom": "18.2.25", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "@workleap/eslint-plugin": "3.2.2", "@workleap/tsup-configs": "3.0.6", "@workleap/typescript-configs": "3.0.2", - "cross-env": "7.0.3", "eslint": "8.57.0", "nodemon": "3.1.0", "tsup": "8.0.2", diff --git a/samples/endpoints/shell/src/i18next.ts b/samples/endpoints/shell/src/i18next.ts index f7fbb0def..f11f7f6bb 100644 --- a/samples/endpoints/shell/src/i18next.ts +++ b/samples/endpoints/shell/src/i18next.ts @@ -7,10 +7,10 @@ import resourcesFr from "./locales/fr-CA/resources.json"; export const i18NextInstanceKey = "shell"; -export async function initI18next(runtime: FireflyRuntime) { +export function initI18next(runtime: FireflyRuntime) { const i18nextPlugin = getI18nextPlugin(runtime) as i18nextPlugin; - const instance = await createInstance(i18nextPlugin.currentLanguage, { + const instance = createInstance(i18nextPlugin.currentLanguage, { resources: { "en-US": resourcesEn, "fr-CA": resourcesFr diff --git a/samples/endpoints/shell/src/register.tsx b/samples/endpoints/shell/src/register.tsx index 67d03f038..cce4bcc19 100644 --- a/samples/endpoints/shell/src/register.tsx +++ b/samples/endpoints/shell/src/register.tsx @@ -105,7 +105,7 @@ function registerRoutes(runtime: FireflyRuntime, sessionManager: SessionManager, } async function registerMsw(runtime: FireflyRuntime) { - if (process.env.USE_MSW) { + if (runtime.isMswEnabled) { // Files including an import to the "msw" package are included dynamically to prevent adding // MSW stuff to the bundled when it's not used. const requestHandlers = (await import("../mocks/handlers.ts")).requestHandlers; @@ -116,11 +116,12 @@ async function registerMsw(runtime: FireflyRuntime) { export function registerShell(sessionManager: SessionManager, { host }: RegisterShellOptions = {}) { const register: ModuleRegisterFunction = async runtime => { - await initI18next(runtime); + initI18next(runtime); + await registerMsw(runtime); return mergeDeferredRegistrations([ - await registerLayouts(runtime, { host }), + registerLayouts(runtime, { host }), registerRoutes(runtime, sessionManager, host) ]); }; diff --git a/samples/endpoints/shell/tsconfig.json b/samples/endpoints/shell/tsconfig.json index f1ba8a021..daadde78a 100644 --- a/samples/endpoints/shell/tsconfig.json +++ b/samples/endpoints/shell/tsconfig.json @@ -4,7 +4,7 @@ "paths": { "@squide/core": ["../../../packages/core/src/index.ts"], "@squide/react-router": ["../../../packages/react-router/src/index.ts"], - "@squide/webpack-module-federation": ["../../../packages/webpack-module-federation/src/index.ts"], + "@squide/module-federation": ["../../../packages/module-federation/src/index.ts"], "@squide/webpack-configs": ["../../../packages/webpack-configs/src/index.ts"], "@squide/msw": ["../../../packages/msw/src/index.ts"], "@squide/i18next": ["../../../packages/i18next/src/index.ts"],