From c99e2eef814bdd711d8d4e35adb6130d1ea1707c Mon Sep 17 00:00:00 2001 From: Aymeric Mortemousque Date: Fri, 20 Feb 2026 21:52:22 +0100 Subject: [PATCH] Improve microfrontend e2e test with real plugin setup with module fed --- LICENSE-3rdparty.csv | 1 + eslint.config.mjs | 1 + scripts/build/build-test-apps.ts | 1 + test/apps/microfrontend/.gitignore | 3 + test/apps/microfrontend/app1.ts | 3 + test/apps/microfrontend/app2.ts | 3 + test/apps/microfrontend/bootstrap.ts | 2 + test/apps/microfrontend/common.ts | 67 + test/apps/microfrontend/package.json | 15 + test/apps/microfrontend/shell.ts | 6 + test/apps/microfrontend/tsconfig.json | 10 + test/apps/microfrontend/types.d.ts | 12 + test/apps/microfrontend/webpack.app1.js | 38 + test/apps/microfrontend/webpack.app2.js | 38 + test/apps/microfrontend/webpack.shell.js | 39 + test/apps/microfrontend/yarn.lock | 2846 +++++++++++++++++++ test/e2e/lib/framework/index.ts | 10 +- test/e2e/lib/framework/pageSetups.ts | 32 + test/e2e/lib/framework/sdkBuilds.ts | 1 + test/e2e/lib/framework/serverApps/mock.ts | 7 + test/e2e/scenario/microfrontend.scenario.ts | 666 ++--- 21 files changed, 3472 insertions(+), 329 deletions(-) create mode 100644 test/apps/microfrontend/.gitignore create mode 100644 test/apps/microfrontend/app1.ts create mode 100644 test/apps/microfrontend/app2.ts create mode 100644 test/apps/microfrontend/bootstrap.ts create mode 100644 test/apps/microfrontend/common.ts create mode 100644 test/apps/microfrontend/package.json create mode 100644 test/apps/microfrontend/shell.ts create mode 100644 test/apps/microfrontend/tsconfig.json create mode 100644 test/apps/microfrontend/types.d.ts create mode 100644 test/apps/microfrontend/webpack.app1.js create mode 100644 test/apps/microfrontend/webpack.app2.js create mode 100644 test/apps/microfrontend/webpack.shell.js create mode 100644 test/apps/microfrontend/yarn.lock diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index a3ac2d3aa6..2bffe35802 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -13,6 +13,7 @@ prod,react-dom,MIT,Copyright (c) Facebook, Inc. and its affiliates. dev,typedoc,Apache-2.0,TypeStrong dev,@eslint/js,MIT,Copyright OpenJS Foundation and other contributors, dev,@jsdevtools/coverage-istanbul-loader,MIT,Copyright (c) 2015 James Messinger +dev,@module-federation/enhanced,MIT, Copyright (c) 2020 ScriptedAlchemy LLC (Zack Jackson) Zhou Shaw (zhouxiao) dev,@playwright/test,Apache-2.0,Copyright Microsoft Corporation dev,@swc/core,Apache-2.0,Copyright (c) SWC Contributors dev,@types/chrome,MIT,Copyright Microsoft Corporation diff --git a/eslint.config.mjs b/eslint.config.mjs index fe6928b3dd..2ad77cb4c3 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -27,6 +27,7 @@ export default tseslint.config( 'test/**/dist', 'test/apps/react-heavy-spa', 'test/apps/react-shopist-like', + 'test/apps/microfrontend', 'sandbox', 'coverage', 'rum-events-format', diff --git a/scripts/build/build-test-apps.ts b/scripts/build/build-test-apps.ts index 1af38f9102..3d1182dd98 100644 --- a/scripts/build/build-test-apps.ts +++ b/scripts/build/build-test-apps.ts @@ -18,6 +18,7 @@ runMain(async () => { buildApp('test/apps/react-router-v6-app') buildApp('test/apps/react-heavy-spa') buildApp('test/apps/react-shopist-like') + buildApp('test/apps/microfrontend') await buildReactRouterv7App() await buildExtensions() diff --git a/test/apps/microfrontend/.gitignore b/test/apps/microfrontend/.gitignore new file mode 100644 index 0000000000..adf366f8b0 --- /dev/null +++ b/test/apps/microfrontend/.gitignore @@ -0,0 +1,3 @@ +dist +node_modules +.yarn/* \ No newline at end of file diff --git a/test/apps/microfrontend/app1.ts b/test/apps/microfrontend/app1.ts new file mode 100644 index 0000000000..2b6d9d5636 --- /dev/null +++ b/test/apps/microfrontend/app1.ts @@ -0,0 +1,3 @@ +import { createApp } from './common' + +createApp('app1', 'App 1 (mfe-app1-service v1.0.0)', 'blue') diff --git a/test/apps/microfrontend/app2.ts b/test/apps/microfrontend/app2.ts new file mode 100644 index 0000000000..efe06aa0ff --- /dev/null +++ b/test/apps/microfrontend/app2.ts @@ -0,0 +1,3 @@ +import { createApp } from './common' + +createApp('app2', 'App 2 (mfe-app2-service v0.2.0)', 'green') diff --git a/test/apps/microfrontend/bootstrap.ts b/test/apps/microfrontend/bootstrap.ts new file mode 100644 index 0000000000..325d0ab727 --- /dev/null +++ b/test/apps/microfrontend/bootstrap.ts @@ -0,0 +1,2 @@ +// @ts-ignore The dynamic import keeps shell.ts out of the entry chunk, +void import('./shell') diff --git a/test/apps/microfrontend/common.ts b/test/apps/microfrontend/common.ts new file mode 100644 index 0000000000..89125a531d --- /dev/null +++ b/test/apps/microfrontend/common.ts @@ -0,0 +1,67 @@ +function createContainer(id: string, title: string, borderColor: string) { + const container = document.createElement('div') + container.id = id + container.style.flex = '1' + container.style.border = `2px solid ${borderColor}` + container.style.padding = '10px' + + const appTitle = document.createElement('h2') + appTitle.textContent = title + container.appendChild(appTitle) + document.body.appendChild(container) + return container +} + +function createButton(container: HTMLElement, eventType: string, clickHandler: () => void) { + const button = document.createElement('button') + button.id = `${container.id}-${eventType}` + button.textContent = `${container.id}-${eventType}` + button.onclick = clickHandler + container.appendChild(button) +} + +export function createApp(id: string, title: string, borderColor: string) { + const container = createContainer(id, title, borderColor) + + createButton(container, 'fetch', () => { + void fetch('/ok') + }) + + createButton(container, 'xhr', () => { + const xhr = new XMLHttpRequest() + xhr.open('GET', '/ok') + xhr.send() + }) + + createButton(container, 'error', () => { + window.DD_RUM.addError(new Error(`${id}-error`)) + }) + + createButton(container, 'console-error', () => { + console.error(`${id}-console-error`) + }) + + createButton(container, 'runtime-error', () => { + throw new Error(`${id}-runtime-error`) + }) + + createButton(container, 'loaf', () => { + const end = performance.now() + 55 + while (performance.now() < end) { + // block the handler for ~55ms to trigger a long task + } + }) + + createButton(container, 'custom-action', () => { + window.DD_RUM.addAction(`${id}-action`) + }) + + createButton(container, 'vital', () => { + const ref = window.DD_RUM.startDurationVital(`${id}-vital`) + window.DD_RUM.stopDurationVital(ref) + }) + + createButton(container, 'view', () => { + window.DD_RUM.startView({ name: `${id}-view` }) + }) +} diff --git a/test/apps/microfrontend/package.json b/test/apps/microfrontend/package.json new file mode 100644 index 0000000000..3bf4ec0dcf --- /dev/null +++ b/test/apps/microfrontend/package.json @@ -0,0 +1,15 @@ +{ + "name": "microfrontend-test-app", + "private": true, + "scripts": { + "build": "webpack --config webpack.app1.js && webpack --config webpack.app2.js && webpack --config webpack.shell.js" + }, + "devDependencies": { + "@datadog/webpack-plugin": "^3.1.0", + "@module-federation/enhanced": "^2.0.1", + "ts-loader": "9.5.4", + "typescript": "5.9.3", + "webpack": "5.105.2", + "webpack-cli": "^6.0.1" + } +} diff --git a/test/apps/microfrontend/shell.ts b/test/apps/microfrontend/shell.ts new file mode 100644 index 0000000000..a44edeeaf3 --- /dev/null +++ b/test/apps/microfrontend/shell.ts @@ -0,0 +1,6 @@ +async function initShell() { + // @ts-ignore Module Federation remote entries + await Promise.all([import('app1/app1'), import('app2/app2')]) +} + +void initShell() diff --git a/test/apps/microfrontend/tsconfig.json b/test/apps/microfrontend/tsconfig.json new file mode 100644 index 0000000000..1af2628fba --- /dev/null +++ b/test/apps/microfrontend/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "esnext", + "lib": ["ES2018", "DOM"], + "moduleResolution": "node", + "esModuleInterop": true, + "skipLibCheck": true + } +} diff --git a/test/apps/microfrontend/types.d.ts b/test/apps/microfrontend/types.d.ts new file mode 100644 index 0000000000..71c6956299 --- /dev/null +++ b/test/apps/microfrontend/types.d.ts @@ -0,0 +1,12 @@ +// declare module 'app1/app1' +// declare module 'app2/app2' + +interface Window { + DD_RUM: { + addError: (error: Error) => void + addAction: (name: string, context?: any) => void + startDurationVital: (name: string) => any + stopDurationVital: (ref: any) => void + startView: (options: { name: string }) => void + } +} diff --git a/test/apps/microfrontend/webpack.app1.js b/test/apps/microfrontend/webpack.app1.js new file mode 100644 index 0000000000..87c400053b --- /dev/null +++ b/test/apps/microfrontend/webpack.app1.js @@ -0,0 +1,38 @@ +const path = require('node:path') +const { datadogWebpackPlugin } = require('@datadog/webpack-plugin') +const { ModuleFederationPlugin } = require('@module-federation/enhanced/webpack') + +module.exports = { + mode: 'development', + devtool: 'source-map', + module: { + rules: [{ test: /\.ts$/, use: 'ts-loader' }], + }, + resolve: { + extensions: ['.ts', '.js'], + }, + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'app1.js', + chunkFilename: 'chunks/[name]-[contenthash]-app1.js', + publicPath: 'auto', + }, + plugins: [ + new ModuleFederationPlugin({ + name: 'app1', + filename: 'app1Entry.js', + exposes: { + './app1': './app1.ts', + }, + }), + datadogWebpackPlugin({ + rum: { + enable: true, + sourceCodeContext: { + service: 'mfe-app1-service', + version: '1.0.0', + }, + }, + }), + ], +} diff --git a/test/apps/microfrontend/webpack.app2.js b/test/apps/microfrontend/webpack.app2.js new file mode 100644 index 0000000000..c994a9b09a --- /dev/null +++ b/test/apps/microfrontend/webpack.app2.js @@ -0,0 +1,38 @@ +const path = require('node:path') +const { datadogWebpackPlugin } = require('@datadog/webpack-plugin') +const { ModuleFederationPlugin } = require('@module-federation/enhanced/webpack') + +module.exports = { + mode: 'development', + devtool: 'source-map', + module: { + rules: [{ test: /\.ts$/, use: 'ts-loader' }], + }, + resolve: { + extensions: ['.ts', '.js'], + }, + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'app2.js', + chunkFilename: 'chunks/[name]-[contenthash]-app2.js', + publicPath: 'auto', + }, + plugins: [ + new ModuleFederationPlugin({ + name: 'app2', + filename: 'app2Entry.js', + exposes: { + './app2': './app2.ts', + }, + }), + datadogWebpackPlugin({ + rum: { + enable: true, + sourceCodeContext: { + service: 'mfe-app2-service', + version: '0.2.0', + }, + }, + }), + ], +} diff --git a/test/apps/microfrontend/webpack.shell.js b/test/apps/microfrontend/webpack.shell.js new file mode 100644 index 0000000000..ba901595e0 --- /dev/null +++ b/test/apps/microfrontend/webpack.shell.js @@ -0,0 +1,39 @@ +const path = require('node:path') +const { datadogWebpackPlugin } = require('@datadog/webpack-plugin') +const { ModuleFederationPlugin } = require('@module-federation/enhanced/webpack') + +module.exports = { + mode: 'development', + entry: './bootstrap.ts', + devtool: 'source-map', + module: { + rules: [{ test: /\.ts$/, use: 'ts-loader' }], + }, + resolve: { + extensions: ['.ts', '.js'], + }, + output: { + path: path.resolve(__dirname, 'dist'), + filename: 'shell.js', + chunkFilename: 'chunks/[name]-[contenthash]-shell.js', + publicPath: 'auto', + }, + plugins: [ + new ModuleFederationPlugin({ + name: 'shell', + remotes: { + app1: 'app1@/microfrontend/app1Entry.js', + app2: 'app2@/microfrontend/app2Entry.js', + }, + }), + datadogWebpackPlugin({ + rum: { + enable: true, + sourceCodeContext: { + service: 'mf-shell-service', + version: '2.0.0', + }, + }, + }), + ], +} diff --git a/test/apps/microfrontend/yarn.lock b/test/apps/microfrontend/yarn.lock new file mode 100644 index 0000000000..a7ce3c5fbb --- /dev/null +++ b/test/apps/microfrontend/yarn.lock @@ -0,0 +1,2846 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@datadog/js-instrumentation-wasm@npm:1.0.8": + version: 1.0.8 + resolution: "@datadog/js-instrumentation-wasm@npm:1.0.8" + checksum: 10c0/60783e2a62325fc2d16f278cc243e286fd4b656da045485a4b07869d966deddc45d74626f302cb557e4901e002e48ad7894037e7098ed85d827e090003c684ef + languageName: node + linkType: hard + +"@datadog/webpack-plugin@npm:^3.1.0": + version: 3.1.0 + resolution: "@datadog/webpack-plugin@npm:3.1.0" + dependencies: + "@datadog/js-instrumentation-wasm": "npm:1.0.8" + async-retry: "npm:1.3.3" + chalk: "npm:2.3.1" + glob: "npm:11.1.0" + json-stream-stringify: "npm:3.1.6" + jszip: "npm:3.10.1" + outdent: "npm:0.8.0" + p-queue: "npm:6.6.2" + pretty-bytes: "npm:5.6.0" + simple-git: "npm:3.25.0" + unplugin: "npm:2.3.11" + peerDependencies: + webpack: ">= 5.x < 6.x" + checksum: 10c0/c920b6cfce6825dec799c500e43cf97c002ad652324d837e656259069ce1d348dacae802e8e92bdc1099c617c0497644cb56ccc57e081442b03edd9ce19f38b3 + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:^0.6.1": + version: 0.6.3 + resolution: "@discoveryjs/json-ext@npm:0.6.3" + checksum: 10c0/778a9f9d5c3696da3c1f9fa4186613db95a1090abbfb6c2601430645c0d0158cd5e4ba4f32c05904e2dd2747d57710f6aab22bd2f8aa3c4e8feab9b247c65d85 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^9.0.0": + version: 9.0.0 + resolution: "@isaacs/cliui@npm:9.0.0" + checksum: 10c0/971063b7296419f85053dacd0a0285dcadaa3dfc139228b23e016c1a9848121ad4aa5e7fcca7522062014e1eb6239a7424188b9f2cba893a79c90aae5710319c + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.13 + resolution: "@jridgewell/gen-mapping@npm:0.3.13" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/9a7d65fb13bd9aec1fbab74cda08496839b7e2ceb31f5ab922b323e94d7c481ce0fc4fd7e12e2610915ed8af51178bdc61e168e92a8c8b8303b030b03489b13b + languageName: node + linkType: hard + +"@jridgewell/remapping@npm:^2.3.5": + version: 2.3.5 + resolution: "@jridgewell/remapping@npm:2.3.5" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/3de494219ffeb2c5c38711d0d7bb128097edf91893090a2dbc8ee0b55d092bb7347b1fd0f478486c5eab010e855c73927b1666f2107516d472d24a73017d1194 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.11 + resolution: "@jridgewell/source-map@npm:0.3.11" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + checksum: 10c0/50a4fdafe0b8f655cb2877e59fe81320272eaa4ccdbe6b9b87f10614b2220399ae3e05c16137a59db1f189523b42c7f88bd097ee991dbd7bc0e01113c583e844 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9 + languageName: node + linkType: hard + +"@kwsites/file-exists@npm:^1.1.1": + version: 1.1.1 + resolution: "@kwsites/file-exists@npm:1.1.1" + dependencies: + debug: "npm:^4.1.1" + checksum: 10c0/39e693239a72ccd8408bb618a0200e4a8d61682057ca7ae2c87668d7e69196e8d7e2c9cde73db6b23b3b0230169a15e5f1bfe086539f4be43e767b2db68e8ee4 + languageName: node + linkType: hard + +"@kwsites/promise-deferred@npm:^1.1.1": + version: 1.1.1 + resolution: "@kwsites/promise-deferred@npm:1.1.1" + checksum: 10c0/ef1ad3f1f50991e3bed352b175986d8b4bc684521698514a2ed63c1d1fc9848843da4f2bc2df961c9b148c94e1c34bf33f0da8a90ba2234e452481f2cc9937b1 + languageName: node + linkType: hard + +"@module-federation/bridge-react-webpack-plugin@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/bridge-react-webpack-plugin@npm:2.0.1" + dependencies: + "@module-federation/sdk": "npm:2.0.1" + "@types/semver": "npm:7.5.8" + semver: "npm:7.6.3" + checksum: 10c0/a5079a7194a420886ad24ae1fb6f89a20e36e33e3a2fe41c21bbdfbb079e4af21ab022b99b02c4da261a7430ed8ffc9b9d6e236e29103691678e7e6bc41a23af + languageName: node + linkType: hard + +"@module-federation/cli@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/cli@npm:2.0.1" + dependencies: + "@module-federation/dts-plugin": "npm:2.0.1" + "@module-federation/sdk": "npm:2.0.1" + chalk: "npm:3.0.0" + commander: "npm:11.1.0" + jiti: "npm:2.4.2" + bin: + mf: bin/mf.js + checksum: 10c0/dc99ba5b4c683220f2426a7f468b4affe27c1c0ba3b850e0b09d7307954f8edbe8b7c2bb0b75b12f5b5472286c28e9904c8f6b82d6accd1ff47c24e6f0834a85 + languageName: node + linkType: hard + +"@module-federation/data-prefetch@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/data-prefetch@npm:2.0.1" + dependencies: + "@module-federation/runtime": "npm:2.0.1" + "@module-federation/sdk": "npm:2.0.1" + fs-extra: "npm:9.1.0" + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 10c0/a26ad77e95bb1f4c86719404354078b7b3f935219a2eb9d2ed0eb8b76c8e458c29f2f8af3154d270a0c1d7e0bc78f6f6ef7a5911b10963f21e1a4629a9606770 + languageName: node + linkType: hard + +"@module-federation/dts-plugin@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/dts-plugin@npm:2.0.1" + dependencies: + "@module-federation/error-codes": "npm:2.0.1" + "@module-federation/managers": "npm:2.0.1" + "@module-federation/sdk": "npm:2.0.1" + "@module-federation/third-party-dts-extractor": "npm:2.0.1" + adm-zip: "npm:^0.5.10" + ansi-colors: "npm:^4.1.3" + axios: "npm:^1.12.0" + chalk: "npm:3.0.0" + fs-extra: "npm:9.1.0" + isomorphic-ws: "npm:5.0.0" + koa: "npm:3.0.3" + lodash.clonedeepwith: "npm:4.5.0" + log4js: "npm:6.9.1" + node-schedule: "npm:2.1.1" + rambda: "npm:^9.1.0" + ws: "npm:8.18.0" + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: ">=1.0.24" + peerDependenciesMeta: + vue-tsc: + optional: true + checksum: 10c0/d24ca4ea8d88a445071071a9532d374c51704e5185a9eb8c7526180b48b0371d2b88258fe8c1627510209697e86b3feb3a553a825af2dbd65d77baa066339a11 + languageName: node + linkType: hard + +"@module-federation/enhanced@npm:^2.0.1": + version: 2.0.1 + resolution: "@module-federation/enhanced@npm:2.0.1" + dependencies: + "@module-federation/bridge-react-webpack-plugin": "npm:2.0.1" + "@module-federation/cli": "npm:2.0.1" + "@module-federation/data-prefetch": "npm:2.0.1" + "@module-federation/dts-plugin": "npm:2.0.1" + "@module-federation/error-codes": "npm:2.0.1" + "@module-federation/inject-external-runtime-core-plugin": "npm:2.0.1" + "@module-federation/managers": "npm:2.0.1" + "@module-federation/manifest": "npm:2.0.1" + "@module-federation/rspack": "npm:2.0.1" + "@module-federation/runtime-tools": "npm:2.0.1" + "@module-federation/sdk": "npm:2.0.1" + btoa: "npm:^1.2.1" + schema-utils: "npm:^4.3.0" + upath: "npm:2.0.1" + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: ">=1.0.24" + webpack: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + vue-tsc: + optional: true + webpack: + optional: true + bin: + mf: bin/mf.js + checksum: 10c0/59af79beb344a2890587b909c3db6e33255eac894c897e399b03d0e175ce3a9c4f80a26f04c4fd36c70247ea42e901647b40c7126c997e47ee74147fcaf66be5 + languageName: node + linkType: hard + +"@module-federation/error-codes@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/error-codes@npm:2.0.1" + checksum: 10c0/58a9be8afd0ae53676152cfee2654b1db860ecc7d1afd209be58d9c186bd632e0fc06f7669a1d9f916b7747bab0181deaf5776cf355176738796af04f5c9c006 + languageName: node + linkType: hard + +"@module-federation/inject-external-runtime-core-plugin@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/inject-external-runtime-core-plugin@npm:2.0.1" + peerDependencies: + "@module-federation/runtime-tools": 2.0.1 + checksum: 10c0/d9f4806fe06d640948521e002ddc5332a27e5fb83e550d0550beda461d87baa0c304add647306aea59d7becccbd6d5155f1a2d98ae55af67072aab19145a3e44 + languageName: node + linkType: hard + +"@module-federation/managers@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/managers@npm:2.0.1" + dependencies: + "@module-federation/sdk": "npm:2.0.1" + find-pkg: "npm:2.0.0" + fs-extra: "npm:9.1.0" + checksum: 10c0/0128c433dd6e59da2897cdabe1041f3ba1d0052eca1290a09fb1a615c1f08bdc45436db2b44ec758f80ca68f275f19ea5d06149ae7ce21252d23cf8d108024f4 + languageName: node + linkType: hard + +"@module-federation/manifest@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/manifest@npm:2.0.1" + dependencies: + "@module-federation/dts-plugin": "npm:2.0.1" + "@module-federation/managers": "npm:2.0.1" + "@module-federation/sdk": "npm:2.0.1" + chalk: "npm:3.0.0" + find-pkg: "npm:2.0.0" + checksum: 10c0/ced1080ddaac08b14c805e83bc85d0a7d53e73e7eee921a1cde94e677924bf70ca3e29176fc1d1f1762605eebbb7ad6ace4e19d14c895d2c001a62d0d709c1cf + languageName: node + linkType: hard + +"@module-federation/rspack@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/rspack@npm:2.0.1" + dependencies: + "@module-federation/bridge-react-webpack-plugin": "npm:2.0.1" + "@module-federation/dts-plugin": "npm:2.0.1" + "@module-federation/inject-external-runtime-core-plugin": "npm:2.0.1" + "@module-federation/managers": "npm:2.0.1" + "@module-federation/manifest": "npm:2.0.1" + "@module-federation/runtime-tools": "npm:2.0.1" + "@module-federation/sdk": "npm:2.0.1" + btoa: "npm:1.2.1" + peerDependencies: + "@rspack/core": ^0.7.0 || ^1.0.0 || ^2.0.0-0 + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: ">=1.0.24" + peerDependenciesMeta: + typescript: + optional: true + vue-tsc: + optional: true + checksum: 10c0/fe18a4d030465f68d9305afd74c40f8beb470704eaf0351cdf4e7089bed575de3f4ff0d2ae055e585b7ea78ba325fdaec0c802b3f7b5fe1bf7fe3a79ad02b7c1 + languageName: node + linkType: hard + +"@module-federation/runtime-core@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/runtime-core@npm:2.0.1" + dependencies: + "@module-federation/error-codes": "npm:2.0.1" + "@module-federation/sdk": "npm:2.0.1" + checksum: 10c0/ad65f5a6d7ace551ba90adeaa62c2dbea8f0241bafa59c2e38cee4127c57e6d3ead66072a2378afcbbc2bf7b16bcaf0c8c1af62dc86632952bca03c17a8b9142 + languageName: node + linkType: hard + +"@module-federation/runtime-tools@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/runtime-tools@npm:2.0.1" + dependencies: + "@module-federation/runtime": "npm:2.0.1" + "@module-federation/webpack-bundler-runtime": "npm:2.0.1" + checksum: 10c0/f570e9a53b2d91a811f29ba8ee40ffa18a7b8235443d128e7b6817ad71df51b9b2a0687864dd17888b09906364cca538142dbe0a70bed46d33bd82ae6548549d + languageName: node + linkType: hard + +"@module-federation/runtime@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/runtime@npm:2.0.1" + dependencies: + "@module-federation/error-codes": "npm:2.0.1" + "@module-federation/runtime-core": "npm:2.0.1" + "@module-federation/sdk": "npm:2.0.1" + checksum: 10c0/7f787cb0500f98ff1cceb23c7575582b2b10f0c3dd3f2e90dde3f5bbedd9e95afb7ff3b78f354c8fff88f413d33131cb464902c5653e7eadec44a030be6999a9 + languageName: node + linkType: hard + +"@module-federation/sdk@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/sdk@npm:2.0.1" + checksum: 10c0/59d630356904e1ef4eaaf9ec9d2624b4230f744adac7f1fca19648d7818732c8fecd6e4c0b0914883b71ed7cee02a61bffead34d1879202937281572b90d2c35 + languageName: node + linkType: hard + +"@module-federation/third-party-dts-extractor@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/third-party-dts-extractor@npm:2.0.1" + dependencies: + find-pkg: "npm:2.0.0" + fs-extra: "npm:9.1.0" + resolve: "npm:1.22.8" + checksum: 10c0/f58a2970e2d81bbc371ce59457584ea73165b3f9e73d8e0bf686cc298b4b00a0f6e64098a884fb7862cba7d70cb517af5a2a4a3a5d718de008c15b4e8d56b016 + languageName: node + linkType: hard + +"@module-federation/webpack-bundler-runtime@npm:2.0.1": + version: 2.0.1 + resolution: "@module-federation/webpack-bundler-runtime@npm:2.0.1" + dependencies: + "@module-federation/runtime": "npm:2.0.1" + "@module-federation/sdk": "npm:2.0.1" + checksum: 10c0/185f69babc6b1c864cdb2efe8f9fb4abef79a7e292abbda3eea2b5ef5b586ccbab5180053503036b0211be94f25497b89eb647d04aa09a8bb7103c436c3f4c93 + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.8": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 25.2.1 + resolution: "@types/node@npm:25.2.1" + dependencies: + undici-types: "npm:~7.16.0" + checksum: 10c0/ce42fa07495093c55b6398e3c4346d644a61b8c4f59d2e0c0ed152ea0e4327c60a41d5fdfa3e0fc4f4776eb925e2b783b6b942501fc044328a44980bc2de4dc6 + languageName: node + linkType: hard + +"@types/semver@npm:7.5.8": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/configtest@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10c0/edd24ecfc429298fe86446f7d7daedfe82d72e7f6236c81420605484fdadade5d59c6bcef3d76bd724e11d9727f74e75de183223ae62d3a568b2d54199688cbe + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/info@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10c0/b23b94e7dc8c93e79248f20d5f1bd0fbb7b9ba4b012803e2fdc5440b8f2ee1f3eca7f4933bbca346c8168673bf572b1858169a3cb2c17d9b8bcd833d480c2170 + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/serve@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 10c0/65245e45bfa35e11a5b30631b99cfed0c1b39b2cc8320fa2d2a4185264535618827d349ec032c58af4201d6236cbc43bec894fcb840fdd06314611537a80e210 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 + languageName: node + linkType: hard + +"accepts@npm:^1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: "npm:~2.1.34" + negotiator: "npm:0.6.3" + checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 + languageName: node + linkType: hard + +"acorn-import-phases@npm:^1.0.3": + version: 1.0.4 + resolution: "acorn-import-phases@npm:1.0.4" + peerDependencies: + acorn: ^8.14.0 + checksum: 10c0/338eb46fc1aed5544f628344cb9af189450b401d152ceadbf1f5746901a5d923016cd0e7740d5606062d374fdf6941c29bb515d2bd133c4f4242d5d4cd73a3c7 + languageName: node + linkType: hard + +"acorn@npm:^8.15.0": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec + languageName: node + linkType: hard + +"adm-zip@npm:^0.5.10": + version: 0.5.16 + resolution: "adm-zip@npm:0.5.16" + checksum: 10c0/6f10119d4570c7ba76dcf428abb8d3f69e63f92e51f700a542b43d4c0130373dd2ddfc8f85059f12d4a843703a90c3970cfd17876844b4f3f48bf042bfa6b49f + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + peerDependencies: + ajv: ^8.8.2 + checksum: 10c0/18bec51f0171b83123ba1d8883c126e60c6f420cef885250898bf77a8d3e65e3bfb9e8564f497e30bdbe762a83e0d144a36931328616a973ee669dc74d4a9590 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.9.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + +"ansi-colors@npm:^4.1.3": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.0": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 10c0/669a32c2cb7e45091330c680e92eaeb791bc1d4132d827591e499cd1f776ff5a873e77e5f92d0ce795a8d60f10761dec9ddfe7225a5de680f5d357f67b1aac73 + languageName: node + linkType: hard + +"async-generator-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-generator-function@npm:1.0.0" + checksum: 10c0/2c50ef856c543ad500d8d8777d347e3c1ba623b93e99c9263ecc5f965c1b12d2a140e2ab6e43c3d0b85366110696f28114649411cbcd10b452a92a2318394186 + languageName: node + linkType: hard + +"async-retry@npm:1.3.3": + version: 1.3.3 + resolution: "async-retry@npm:1.3.3" + dependencies: + retry: "npm:0.13.1" + checksum: 10c0/cabced4fb46f8737b95cc88dc9c0ff42656c62dc83ce0650864e891b6c155a063af08d62c446269b51256f6fbcb69a6563b80e76d0ea4a5117b0c0377b6b19d8 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef + languageName: node + linkType: hard + +"axios@npm:^1.12.0": + version: 1.13.5 + resolution: "axios@npm:1.13.5" + dependencies: + follow-redirects: "npm:^1.15.11" + form-data: "npm:^4.0.5" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/abf468c34f2d145f3dc7dbc0f1be67e520630624307bda69a41bbe8d386bd672d87b4405c4ee77f9ff54b235ab02f96a9968fb00e75b13ce64706e352a3068fd + languageName: node + linkType: hard + +"balanced-match@npm:^4.0.2": + version: 4.0.2 + resolution: "balanced-match@npm:4.0.2" + dependencies: + jackspeak: "npm:^4.2.3" + checksum: 10c0/493eee4bece3f8b270cea8d3d6d1122ce008dd6b0d5aca8a3f1e623be6897be18c926018eadc454bd719bb7cc46d939c39fa2a05fff86b30f65382f020f6926d + languageName: node + linkType: hard + +"baseline-browser-mapping@npm:^2.9.0": + version: 2.9.19 + resolution: "baseline-browser-mapping@npm:2.9.19" + bin: + baseline-browser-mapping: dist/cli.js + checksum: 10c0/569928db78bcd081953d7db79e4243a59a579a34b4ae1806b9b42d3b7f84e5bc40e6e82ae4fa06e7bef8291bf747b33b3f9ef5d3c6e1e420cb129d9295536129 + languageName: node + linkType: hard + +"brace-expansion@npm:^5.0.2": + version: 5.0.2 + resolution: "brace-expansion@npm:5.0.2" + dependencies: + balanced-match: "npm:^4.0.2" + checksum: 10c0/60c765e5df6fc0ceca3d5703202ae6779db61f28ea3bf93a04dbf0d50c22ef8e4644e09d0459c827077cd2d09ba8f199a04d92c36419fcf874601a5565013174 + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browserslist@npm:^4.28.1": + version: 4.28.1 + resolution: "browserslist@npm:4.28.1" + dependencies: + baseline-browser-mapping: "npm:^2.9.0" + caniuse-lite: "npm:^1.0.30001759" + electron-to-chromium: "npm:^1.5.263" + node-releases: "npm:^2.0.27" + update-browserslist-db: "npm:^1.2.0" + bin: + browserslist: cli.js + checksum: 10c0/545a5fa9d7234e3777a7177ec1e9134bb2ba60a69e6b95683f6982b1473aad347c77c1264ccf2ac5dea609a9731fbfbda6b85782bdca70f80f86e28a402504bd + languageName: node + linkType: hard + +"btoa@npm:1.2.1, btoa@npm:^1.2.1": + version: 1.2.1 + resolution: "btoa@npm:1.2.1" + bin: + btoa: bin/btoa.js + checksum: 10c0/557b9682e40a68ae057af1b377e28884e6ff756ba0f499fe0f8c7b725a5bfb5c0d891604ac09944dbe330c9d43fb3976fef734f9372608d0d8e78a30eda292ae + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001759": + version: 1.0.30001769 + resolution: "caniuse-lite@npm:1.0.30001769" + checksum: 10c0/161b8c30ab967371807d45d361f0d5bc06e38ef2dbf811493d70cd97c21e1522f5b91fd944c419a00047ee09c931ca64627f125a9ffa7a17a9fdff8dad9765b0 + languageName: node + linkType: hard + +"chalk@npm:2.3.1": + version: 2.3.1 + resolution: "chalk@npm:2.3.1" + dependencies: + ansi-styles: "npm:^3.2.0" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.2.0" + checksum: 10c0/8989600b29fb192d8e6d89891131422533c452560eddc14caa4028477ea369cdc841bcf5b95ebdee11c4c0cb9282cef6de75a27a9b2cfac82e6aa8b57a57443b + languageName: node + linkType: hard + +"chalk@npm:3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/ee650b0a065b3d7a6fda258e75d3a86fc8e4effa55871da730a9e42ccb035bf5fd203525e5a1ef45ec2582ecc4f65b47eb11357c526b84dd29a14fb162c414d2 + languageName: node + linkType: hard + +"chalk@npm:^4.1.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: 10c0/3058da7a5f4934b87cf6a90ef5fb68ebc5f7d06f143ed5a4650208e5d7acae47bc03ec844b29fbf5ba7e46e8daa6acecc878f7983a4f4bb7271593da91e61ff5 + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"colorette@npm:^2.0.14": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:11.1.0": + version: 11.1.0 + resolution: "commander@npm:11.1.0" + checksum: 10c0/13cc6ac875e48780250f723fb81c1c1178d35c5decb1abb1b628b3177af08a8554e76b2c0f29de72d69eef7c864d12613272a71fabef8047922bc622ab75a179 + languageName: node + linkType: hard + +"commander@npm:^12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"content-disposition@npm:~0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: "npm:5.2.1" + checksum: 10c0/bac0316ebfeacb8f381b38285dc691c9939bf0a78b0b7c2d5758acadad242d04783cee5337ba7d12a565a19075af1b3c11c728e1e4946de73c6ff7ce45f3f1bb + languageName: node + linkType: hard + +"content-type@npm:^1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af + languageName: node + linkType: hard + +"cookies@npm:~0.9.1": + version: 0.9.1 + resolution: "cookies@npm:0.9.1" + dependencies: + depd: "npm:~2.0.0" + keygrip: "npm:~1.1.0" + checksum: 10c0/3ffa1c0e992b62ee119adae4dd2ddd4a89166fa5434cd9bd9ff84ec4d2f14dfe2318a601280abfe32a4f64f884ec9345fb1912e488b002d188d2efa0d3919ba3 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 + languageName: node + linkType: hard + +"cron-parser@npm:^4.2.0": + version: 4.9.0 + resolution: "cron-parser@npm:4.9.0" + dependencies: + luxon: "npm:^3.2.1" + checksum: 10c0/348622bdcd1a15695b61fc33af8a60133e5913a85cf99f6344367579e7002896514ba3b0a9d6bb569b02667d6b06836722bf2295fcd101b3de378f71d37bed0b + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"date-format@npm:^4.0.14": + version: 4.0.14 + resolution: "date-format@npm:4.0.14" + checksum: 10c0/1c67a4d77c677bb880328c81d81f5b9ed7fbf672bdaff74e5a0f7314b21188f3a829b06acf120c70cc1df876a7724e3e5c23d511e86d64656a3035a76ac3930b + languageName: node + linkType: hard + +"debug@npm:^4.1.1, debug@npm:^4.3.4, debug@npm:^4.3.5": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 + languageName: node + linkType: hard + +"deep-equal@npm:~1.0.1": + version: 1.0.1 + resolution: "deep-equal@npm:1.0.1" + checksum: 10c0/bef838ef9824e124d10335deb9c7540bfc9f2f0eab17ad1bb870d0eee83ee4e7e6f6f892e5eebc2bd82759a76676926ad5246180097e28e57752176ff7dae888 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: 10c0/ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 + languageName: node + linkType: hard + +"depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 10c0/acb24aaf936ef9a227b6be6d495f0d2eb20108a9a6ad40585c5bda1a897031512fef6484e4fdbb80bd249fdaa82841fa1039f416ece03188e677ba11bcfda249 + languageName: node + linkType: hard + +"depd@npm:~2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"destroy@npm:^1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.263": + version: 1.5.286 + resolution: "electron-to-chromium@npm:1.5.286" + checksum: 10c0/5384510f9682d7e46f98fa48b874c3901d9639de96e9e387afce1fe010fbac31376df0534524edc15f66e9902bfacee54037a5e598004e9c6a617884e379926d + languageName: node + linkType: hard + +"encodeurl@npm:^2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.19.0": + version: 5.19.0 + resolution: "enhanced-resolve@npm:5.19.0" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.3.0" + checksum: 10c0/966b1dffb82d5f6a4d6a86e904e812104a999066aa29f9223040aaa751e7c453b462a3f5ef91f8bd4408131ff6f7f90651dd1c804bdcb7944e2099a9c2e45ee2 + languageName: node + linkType: hard + +"envinfo@npm:^7.14.0": + version: 7.21.0 + resolution: "envinfo@npm:7.21.0" + bin: + envinfo: dist/cli.js + checksum: 10c0/4170127ca72dbf85be2c114f85558bd08178e8a43b394951ba9fd72d067c6fea3374df45a7b040e39e4e7b30bdd268e5bdf8661d99ae28302c2a88dedb41b5e6 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-module-lexer@npm:^2.0.0": + version: 2.0.0 + resolution: "es-module-lexer@npm:2.0.0" + checksum: 10c0/ae78dbbd43035a4b972c46cfb6877e374ea290adfc62bc2f5a083fea242c0b2baaab25c5886af86be55f092f4a326741cb94334cd3c478c383fdc8a9ec5ff817 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-html@npm:^1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.4": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"expand-tilde@npm:^2.0.0, expand-tilde@npm:^2.0.2": + version: 2.0.2 + resolution: "expand-tilde@npm:2.0.2" + dependencies: + homedir-polyfill: "npm:^1.0.1" + checksum: 10c0/205a60497422746d1c3acbc1d65bd609b945066f239a2b785e69a7a651ac4cbeb4e08555b1ea0023abbe855e6fcb5bbf27d0b371367fdccd303d4fb2b4d66845 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.1.0 + resolution: "fast-uri@npm:3.1.0" + checksum: 10c0/44364adca566f70f40d1e9b772c923138d47efeac2ae9732a872baafd77061f26b097ba2f68f0892885ad177becd065520412b8ffeec34b16c99433c5b9e2de7 + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.12": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: 10c0/7e3d8ae812a7f4fdf8cad18e9cde436a39addf266a5986f653ea0d81e0de0900f50c0f27c6d5aff3f686bcb48acbd45be115ae2216f36a6a13a7dbbf5cad878b + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-file-up@npm:^2.0.1": + version: 2.0.1 + resolution: "find-file-up@npm:2.0.1" + dependencies: + resolve-dir: "npm:^1.0.1" + checksum: 10c0/2caaaddc2688b221d604d47c813dcf2ed1b76f51f85f78558be49fe71182f45ab169efb268540f2d7e5cb6dc4f0c77b6fdf10b86d9b29f0b0e8ea9e2fe2e08ab + languageName: node + linkType: hard + +"find-pkg@npm:2.0.0": + version: 2.0.0 + resolution: "find-pkg@npm:2.0.0" + dependencies: + find-file-up: "npm:^2.0.1" + checksum: 10c0/27a8935ad7da313fe66d4d527bbcafc05137df73253f10109fcc50ce285d93ae15f787a625e096e68fdbc32d716fd234efdb003559059978896e17a7846a70a4 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe + languageName: node + linkType: hard + +"flatted@npm:^3.2.7": + version: 3.3.3 + resolution: "flatted@npm:3.3.3" + checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.11": + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/d301f430542520a54058d4aeeb453233c564aaccac835d29d15e050beb33f339ad67d9bddbce01739c5dc46a6716dbe3d9d0d5134b1ca203effa11a7ef092343 + languageName: node + linkType: hard + +"foreground-child@npm:^3.3.1": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 + languageName: node + linkType: hard + +"form-data@npm:^4.0.5": + version: 4.0.5 + resolution: "form-data@npm:4.0.5" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + hasown: "npm:^2.0.2" + mime-types: "npm:^2.1.12" + checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b + languageName: node + linkType: hard + +"fresh@npm:~0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a + languageName: node + linkType: hard + +"fs-extra@npm:9.1.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: "npm:^1.0.0" + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 + languageName: node + linkType: hard + +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"generator-function@npm:^2.0.0": + version: 2.0.1 + resolution: "generator-function@npm:2.0.1" + checksum: 10c0/8a9f59df0f01cfefafdb3b451b80555e5cf6d76487095db91ac461a0e682e4ff7a9dbce15f4ecec191e53586d59eece01949e05a4b4492879600bbbe8e28d6b8 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.6": + version: 1.3.1 + resolution: "get-intrinsic@npm:1.3.1" + dependencies: + async-function: "npm:^1.0.0" + async-generator-function: "npm:^1.0.0" + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + generator-function: "npm:^2.0.0" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/9f4ab0cf7efe0fd2c8185f52e6f637e708f3a112610c88869f8f041bb9ecc2ce44bf285dfdbdc6f4f7c277a5b88d8e94a432374d97cca22f3de7fc63795deb5d + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + +"glob@npm:11.1.0": + version: 11.1.0 + resolution: "glob@npm:11.1.0" + dependencies: + foreground-child: "npm:^3.3.1" + jackspeak: "npm:^4.1.1" + minimatch: "npm:^10.1.1" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^2.0.0" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/1ceae07f23e316a6fa74581d9a74be6e8c2e590d2f7205034dd5c0435c53f5f7b712c2be00c3b65bf0a49294a1c6f4b98cd84c7637e29453b5aa13b79f1763a2 + languageName: node + linkType: hard + +"global-modules@npm:^1.0.0": + version: 1.0.0 + resolution: "global-modules@npm:1.0.0" + dependencies: + global-prefix: "npm:^1.0.1" + is-windows: "npm:^1.0.1" + resolve-dir: "npm:^1.0.0" + checksum: 10c0/7d91ecf78d4fcbc966b2d89c1400df273afea795bc8cadf39857ee1684e442065621fd79413ff5fcd9e90c6f1b2dc0123e644fa0b7811f987fd54c6b9afad858 + languageName: node + linkType: hard + +"global-prefix@npm:^1.0.1": + version: 1.0.2 + resolution: "global-prefix@npm:1.0.2" + dependencies: + expand-tilde: "npm:^2.0.2" + homedir-polyfill: "npm:^1.0.1" + ini: "npm:^1.3.4" + is-windows: "npm:^1.0.1" + which: "npm:^1.2.14" + checksum: 10c0/d8037e300f1dc04d5d410d16afa662e71bfad22dcceba6c9727bb55cc273b8988ca940b3402f62e5392fd261dd9924a9a73a865ef2000219461f31f3fc86be06 + languageName: node + linkType: hard + +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"homedir-polyfill@npm:^1.0.1": + version: 1.0.3 + resolution: "homedir-polyfill@npm:1.0.3" + dependencies: + parse-passwd: "npm:^1.0.0" + checksum: 10c0/3c099844f94b8b438f124bd5698bdcfef32b2d455115fb8050d7148e7f7b95fc89ba9922586c491f0e1cdebf437b1053c84ecddb8d596e109e9ac69c5b4a9e27 + languageName: node + linkType: hard + +"http-assert@npm:^1.5.0": + version: 1.5.0 + resolution: "http-assert@npm:1.5.0" + dependencies: + deep-equal: "npm:~1.0.1" + http-errors: "npm:~1.8.0" + checksum: 10c0/7b4e631114a1a77654f9ba3feb96da305ddbdeb42112fe384b7b3249c7141e460d7177970155bea6e54e655a04850415b744b452c1fe5052eba6f4186d16b095 + languageName: node + linkType: hard + +"http-errors@npm:^2.0.0": + version: 2.0.1 + resolution: "http-errors@npm:2.0.1" + dependencies: + depd: "npm:~2.0.0" + inherits: "npm:~2.0.4" + setprototypeof: "npm:~1.2.0" + statuses: "npm:~2.0.2" + toidentifier: "npm:~1.0.1" + checksum: 10c0/fb38906cef4f5c83952d97661fe14dc156cb59fe54812a42cd448fa57b5c5dfcb38a40a916957737bd6b87aab257c0648d63eb5b6a9ca9f548e105b6072712d4 + languageName: node + linkType: hard + +"http-errors@npm:~1.8.0": + version: 1.8.1 + resolution: "http-errors@npm:1.8.1" + dependencies: + depd: "npm:~1.1.2" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:>= 1.5.0 < 2" + toidentifier: "npm:1.0.1" + checksum: 10c0/f01aeecd76260a6fe7f08e192fcbe9b2f39ed20fc717b852669a69930167053b01790998275c6297d44f435cf0e30edd50c05223d1bec9bc484e6cf35b2d6f43 + languageName: node + linkType: hard + +"immediate@npm:~3.0.5": + version: 3.0.6 + resolution: "immediate@npm:3.0.6" + checksum: 10c0/f8ba7ede69bee9260241ad078d2d535848745ff5f6995c7c7cb41cfdc9ccc213f66e10fa5afb881f90298b24a3f7344b637b592beb4f54e582770cdce3f1f039 + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.2.0 + resolution: "import-local@npm:3.2.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/94cd6367a672b7e0cb026970c85b76902d2710a64896fa6de93bd5c571dd03b228c5759308959de205083e3b1c61e799f019c9e36ee8e9c523b993e1057f0433 + languageName: node + linkType: hard + +"inherits@npm:2.0.4, inherits@npm:~2.0.3, inherits@npm:~2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:^1.3.4": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 10c0/6f3c4d0aa6ec1b43a8862375588a249e3c917739895cbe67fe12f0a76260ea632af51e8e2431b50fbcd0145356dc28ca147be08dbe6a523739fd55c0f91dc2a5 + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.1": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"is-windows@npm:^1.0.1": + version: 1.0.2 + resolution: "is-windows@npm:1.0.2" + checksum: 10c0/b32f418ab3385604a66f1b7a3ce39d25e8881dee0bd30816dc8344ef6ff9df473a732bcc1ec4e84fe99b2f229ae474f7133e8e93f9241686cfcf7eebe53ba7a5 + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"isomorphic-ws@npm:5.0.0": + version: 5.0.0 + resolution: "isomorphic-ws@npm:5.0.0" + peerDependencies: + ws: "*" + checksum: 10c0/a058ac8b5e6efe9e46252cb0bc67fd325005d7216451d1a51238bc62d7da8486f828ef017df54ddf742e0fffcbe4b1bcc2a66cc115b027ed0180334cd18df252 + languageName: node + linkType: hard + +"jackspeak@npm:^4.1.1, jackspeak@npm:^4.2.3": + version: 4.2.3 + resolution: "jackspeak@npm:4.2.3" + dependencies: + "@isaacs/cliui": "npm:^9.0.0" + checksum: 10c0/b5c0c414f1607c2aa0597f4bf2c03b8443897fccd5fd3c2b3e4f77d556b2bc7c3d3413828ba91e0789f6fb40ad90242f7f89fb20aee9e9d705bc1681f7564f67 + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + +"jiti@npm:2.4.2": + version: 2.4.2 + resolution: "jiti@npm:2.4.2" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10c0/4ceac133a08c8faff7eac84aabb917e85e8257f5ad659e843004ce76e981c457c390a220881748ac67ba1b940b9b729b30fb85cbaf6e7989f04b6002c94da331 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"json-stream-stringify@npm:3.1.6": + version: 3.1.6 + resolution: "json-stream-stringify@npm:3.1.6" + checksum: 10c0/cb45e65143f4634ebb2dc0732410a942eaf86f88a7938b2f6397f4c6b96a7ba936e74d4d17db48c9221f669153996362b2ff50fe8c7fed8a7548646f98ae1f58 + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.2.0 + resolution: "jsonfile@npm:6.2.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7f4f43b08d1869ded8a6822213d13ae3b99d651151d77efd1557ced0889c466296a7d9684e397bd126acf5eb2cfcb605808c3e681d0fdccd2fe5a04b47e76c0d + languageName: node + linkType: hard + +"jszip@npm:3.10.1": + version: 3.10.1 + resolution: "jszip@npm:3.10.1" + dependencies: + lie: "npm:~3.3.0" + pako: "npm:~1.0.2" + readable-stream: "npm:~2.3.6" + setimmediate: "npm:^1.0.5" + checksum: 10c0/58e01ec9c4960383fb8b38dd5f67b83ccc1ec215bf74c8a5b32f42b6e5fb79fada5176842a11409c4051b5b94275044851814a31076bf49e1be218d3ef57c863 + languageName: node + linkType: hard + +"keygrip@npm:~1.1.0": + version: 1.1.0 + resolution: "keygrip@npm:1.1.0" + dependencies: + tsscmp: "npm:1.0.6" + checksum: 10c0/2aceec1a1e642a0caf938044056ed67b1909cfe67a93a59b32aae2863e0f35a1a53782ecc8f9cd0e3bdb60863fa0f401ccbd257cd7dfae61915f78445139edea + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"koa-compose@npm:^4.1.0": + version: 4.1.0 + resolution: "koa-compose@npm:4.1.0" + checksum: 10c0/f1f786f994a691931148e7f38f443865bf2702af4a61610d1eea04dab79c04b1232285b59d82a0cf61c830516dd92f10ab0d009b024fcecd4098e7d296ab771a + languageName: node + linkType: hard + +"koa@npm:3.0.3": + version: 3.0.3 + resolution: "koa@npm:3.0.3" + dependencies: + accepts: "npm:^1.3.8" + content-disposition: "npm:~0.5.4" + content-type: "npm:^1.0.5" + cookies: "npm:~0.9.1" + delegates: "npm:^1.0.0" + destroy: "npm:^1.2.0" + encodeurl: "npm:^2.0.0" + escape-html: "npm:^1.0.3" + fresh: "npm:~0.5.2" + http-assert: "npm:^1.5.0" + http-errors: "npm:^2.0.0" + koa-compose: "npm:^4.1.0" + mime-types: "npm:^3.0.1" + on-finished: "npm:^2.4.1" + parseurl: "npm:^1.3.3" + statuses: "npm:^2.0.1" + type-is: "npm:^2.0.1" + vary: "npm:^1.1.2" + checksum: 10c0/596472cb6dcc6c443a1917afd65e0e1e73e76ab58507e0654af0e77acaecd5cd5f2217107a65783e51b1917f2bed77aa5422c8db0da4d4fec8afcf5e75af7c02 + languageName: node + linkType: hard + +"lie@npm:~3.3.0": + version: 3.3.0 + resolution: "lie@npm:3.3.0" + dependencies: + immediate: "npm:~3.0.5" + checksum: 10c0/56dd113091978f82f9dc5081769c6f3b947852ecf9feccaf83e14a123bc630c2301439ce6182521e5fbafbde88e88ac38314327a4e0493a1bea7e0699a7af808 + languageName: node + linkType: hard + +"loader-runner@npm:^4.3.1": + version: 4.3.1 + resolution: "loader-runner@npm:4.3.1" + checksum: 10c0/a523b6329f114e0a98317158e30a7dfce044b731521be5399464010472a93a15ece44757d1eaed1d8845019869c5390218bc1c7c3110f4eeaef5157394486eac + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"lodash.clonedeepwith@npm:4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeepwith@npm:4.5.0" + checksum: 10c0/a7de84be9ad796811e8084deb79ef07f8f87122d87adffcd52ce4e6fa528fbe917f3dc6cc1d556362dc5dfadef68405e54f4b4d3ae72056e32ec5e84492a3fc2 + languageName: node + linkType: hard + +"log4js@npm:6.9.1": + version: 6.9.1 + resolution: "log4js@npm:6.9.1" + dependencies: + date-format: "npm:^4.0.14" + debug: "npm:^4.3.4" + flatted: "npm:^3.2.7" + rfdc: "npm:^1.3.0" + streamroller: "npm:^3.1.5" + checksum: 10c0/05846e48f72d662800c8189bd178c42b4aa2f0c574cfc90a1942cf90b76f621c44019e26796c8fd88da1b6f0fe8272cba607cbaad6ae6ede50a7a096b58197ea + languageName: node + linkType: hard + +"long-timeout@npm:0.1.1": + version: 0.1.1 + resolution: "long-timeout@npm:0.1.1" + checksum: 10c0/a62240cc8f449d7a00081e817ae543fb1ded4d9fc05492e9fa8d6868cb33b2c9d5d71176a6f8be4473df7ba4b208460b3073b0e05069c3ec286122f3e4b5747f + languageName: node + linkType: hard + +"lru-cache@npm:^11.0.0": + version: 11.2.5 + resolution: "lru-cache@npm:11.2.5" + checksum: 10c0/cc98958d25dddf1c8a8cbdc49588bd3b24450e8dfa78f32168fd188a20d4a0331c7406d0f3250c86a46619ee288056fd7a1195e8df56dc8a9592397f4fbd8e1d + languageName: node + linkType: hard + +"luxon@npm:^3.2.1": + version: 3.7.2 + resolution: "luxon@npm:3.7.2" + checksum: 10c0/ed8f0f637826c08c343a29dd478b00628be93bba6f068417b1d8896b61cb61c6deacbe1df1e057dbd9298334044afa150f9aaabbeb3181418ac8520acfdc2ae2 + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"media-typer@npm:^1.1.0": + version: 1.1.0 + resolution: "media-typer@npm:1.1.0" + checksum: 10c0/7b4baa40b25964bb90e2121ee489ec38642127e48d0cc2b6baa442688d3fde6262bfdca86d6bbf6ba708784afcac168c06840c71facac70e390f5f759ac121b9 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"microfrontend-test-app@workspace:.": + version: 0.0.0-use.local + resolution: "microfrontend-test-app@workspace:." + dependencies: + "@datadog/webpack-plugin": "npm:^3.1.0" + "@module-federation/enhanced": "npm:^2.0.1" + ts-loader: "npm:9.5.4" + typescript: "npm:5.9.3" + webpack: "npm:5.105.2" + webpack-cli: "npm:^6.0.1" + languageName: unknown + linkType: soft + +"micromatch@npm:^4.0.0": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-db@npm:^1.54.0": + version: 1.54.0 + resolution: "mime-db@npm:1.54.0" + checksum: 10c0/8d907917bc2a90fa2df842cdf5dfeaf509adc15fe0531e07bb2f6ab15992416479015828d6a74200041c492e42cce3ebf78e5ce714388a0a538ea9c53eece284 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mime-types@npm:^3.0.0, mime-types@npm:^3.0.1": + version: 3.0.2 + resolution: "mime-types@npm:3.0.2" + dependencies: + mime-db: "npm:^1.54.0" + checksum: 10c0/35a0dd1035d14d185664f346efcdb72e93ef7a9b6e9ae808bd1f6358227010267fab52657b37562c80fc888ff76becb2b2938deb5e730818b7983bf8bd359767 + languageName: node + linkType: hard + +"minimatch@npm:^10.1.1": + version: 10.2.1 + resolution: "minimatch@npm:10.2.1" + dependencies: + brace-expansion: "npm:^5.0.2" + checksum: 10c0/86c3ed013630e820fda00336ee786a03098723b60bfae452de6306708fc83619df40a99dc6ec59c97d14e25b3b3371669a04e5bf508b1b00339b20229c4907d2 + languageName: node + linkType: hard + +"minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"negotiator@npm:0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"node-releases@npm:^2.0.27": + version: 2.0.27 + resolution: "node-releases@npm:2.0.27" + checksum: 10c0/f1e6583b7833ea81880627748d28a3a7ff5703d5409328c216ae57befbced10ce2c991bea86434e8ec39003bd017f70481e2e5f8c1f7e0a7663241f81d6e00e2 + languageName: node + linkType: hard + +"node-schedule@npm:2.1.1": + version: 2.1.1 + resolution: "node-schedule@npm:2.1.1" + dependencies: + cron-parser: "npm:^4.2.0" + long-timeout: "npm:0.1.1" + sorted-array-functions: "npm:^1.3.0" + checksum: 10c0/6ec51b34b9e676740ac25298e4ced5ee46053379f0d3aad533e51d7e083bc24ced045df1772a95bf9d9cfdb81299340bbf551549a7c5eb6e4d2dc6468c85c70e + languageName: node + linkType: hard + +"on-finished@npm:^2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 + languageName: node + linkType: hard + +"outdent@npm:0.8.0": + version: 0.8.0 + resolution: "outdent@npm:0.8.0" + checksum: 10c0/d8a6c38b838b7ac23ebf1cc50442312f4efe286b211dbe5c71fa84d5daa2512fb94a8f2df1389313465acb0b4e5fa72270dd78f519f3d4db5bc22b2762c86827 + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 10c0/6b8552339a71fe7bd424d01d8451eea92d379a711fc62f6b2fe64cad8a472c7259a236c9a22b4733abca0b5666ad503cb497792a0478c5af31ded793d00937e7 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-queue@npm:6.6.2": + version: 6.6.2 + resolution: "p-queue@npm:6.6.2" + dependencies: + eventemitter3: "npm:^4.0.4" + p-timeout: "npm:^3.2.0" + checksum: 10c0/5739ecf5806bbeadf8e463793d5e3004d08bb3f6177bd1a44a005da8fd81bb90f80e4633e1fb6f1dfd35ee663a5c0229abe26aebb36f547ad5a858347c7b0d3e + languageName: node + linkType: hard + +"p-timeout@npm:^3.2.0": + version: 3.2.0 + resolution: "p-timeout@npm:3.2.0" + dependencies: + p-finally: "npm:^1.0.0" + checksum: 10c0/524b393711a6ba8e1d48137c5924749f29c93d70b671e6db761afa784726572ca06149c715632da8f70c090073afb2af1c05730303f915604fd38ee207b70a61 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pako@npm:~1.0.2": + version: 1.0.11 + resolution: "pako@npm:1.0.11" + checksum: 10c0/86dd99d8b34c3930345b8bbeb5e1cd8a05f608eeb40967b293f72fe469d0e9c88b783a8777e4cc7dc7c91ce54c5e93d88ff4b4f060e6ff18408fd21030d9ffbe + languageName: node + linkType: hard + +"parse-passwd@npm:^1.0.0": + version: 1.0.0 + resolution: "parse-passwd@npm:1.0.0" + checksum: 10c0/1c05c05f95f184ab9ca604841d78e4fe3294d46b8e3641d305dcc28e930da0e14e602dbda9f3811cd48df5b0e2e27dbef7357bf0d7c40e41b18c11c3a8b8d17b + languageName: node + linkType: hard + +"parseurl@npm:^1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^2.0.0": + version: 2.0.1 + resolution: "path-scurry@npm:2.0.1" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/2a16ed0e81fbc43513e245aa5763354e25e787dab0d539581a6c3f0f967461a159ed6236b2559de23aa5b88e7dc32b469b6c47568833dd142a4b24b4f5cd2620 + languageName: node + linkType: hard + +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.3": + version: 4.0.3 + resolution: "picomatch@npm:4.0.3" + checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"pretty-bytes@npm:5.6.0": + version: 5.6.0 + resolution: "pretty-bytes@npm:5.6.0" + checksum: 10c0/f69f494dcc1adda98dbe0e4a36d301e8be8ff99bfde7a637b2ee2820e7cb583b0fc0f3a63b0e3752c01501185a5cf38602c7be60da41bdf84ef5b70e89c370f3 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + +"rambda@npm:^9.1.0": + version: 9.4.2 + resolution: "rambda@npm:9.4.2" + checksum: 10c0/ee32773c7ef7a281782cf2e09cd0f2dbb67facf59924042e861ef42f166eb081c92e55ed6bd1a7c5c1a937831227bea16b9c11680bc9d57b4b8cb29ca78241ac + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa + languageName: node + linkType: hard + +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: "npm:^1.20.0" + checksum: 10c0/1a30074124a22abbd5d44d802dac26407fa72a0a95f162aa5504ba8246bc5452f8b1a027b154d9bdbabcd8764920ff9333d934c46a8f17479c8912e92332f3ff + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-dir@npm:^1.0.0, resolve-dir@npm:^1.0.1": + version: 1.0.1 + resolution: "resolve-dir@npm:1.0.1" + dependencies: + expand-tilde: "npm:^2.0.0" + global-modules: "npm:^1.0.0" + checksum: 10c0/8197ed13e4a51d9cd786ef6a09fc83450db016abe7ef3311ca39389b3e508d77c26fe0cf0483a9b407b8caa2764bb5ccc52cf6a017ded91492a416475a56066f + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve@npm:1.22.8": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + languageName: node + linkType: hard + +"resolve@npm:^1.20.0": + version: 1.22.11 + resolution: "resolve@npm:1.22.11" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/f657191507530f2cbecb5815b1ee99b20741ea6ee02a59c57028e9ec4c2c8d7681afcc35febbd554ac0ded459db6f2d8153382c53a2f266cee2575e512674409 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A1.22.8#optional!builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": + version: 1.22.11 + resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/ee5b182f2e37cb1165465e58c6abc797fec0a80b5ba3231607beb4677db0c9291ac010c47cf092b6daa2b7f518d69a0e21888e7e2b633f68d501a874212a8c63 + languageName: node + linkType: hard + +"retry@npm:0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 10c0/9ae822ee19db2163497e074ea919780b1efa00431d197c7afdb950e42bf109196774b92a49fc9821f0b8b328a98eea6017410bfc5e8a0fc19c85c6d11adb3772 + languageName: node + linkType: hard + +"rfdc@npm:^1.3.0": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.1.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.3": + version: 4.3.3 + resolution: "schema-utils@npm:4.3.3" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10c0/1c8d2c480a026d7c02ab2ecbe5919133a096d6a721a3f201fa50663e4f30f6d6ba020dfddd93cb828b66b922e76b342e103edd19a62c95c8f60e9079cc403202 + languageName: node + linkType: hard + +"semver@npm:7.6.3": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + +"semver@npm:^7.3.4": + version: 7.7.4 + resolution: "semver@npm:7.7.4" + bin: + semver: bin/semver.js + checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.2": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 10c0/2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2 + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0, setprototypeof@npm:~1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-git@npm:3.25.0": + version: 3.25.0 + resolution: "simple-git@npm:3.25.0" + dependencies: + "@kwsites/file-exists": "npm:^1.1.1" + "@kwsites/promise-deferred": "npm:^1.1.1" + debug: "npm:^4.3.5" + checksum: 10c0/2087dddac041eac6330cbb7fafea21f3e45786ea54e50ae07a49ba6a7134298e12727e5e4b6580310b679c7cb4f2a83804c04e7eab247eeabcd48d33b7885e16 + languageName: node + linkType: hard + +"sorted-array-functions@npm:^1.3.0": + version: 1.3.0 + resolution: "sorted-array-functions@npm:1.3.0" + checksum: 10c0/d94e3401a2bc1689dc913f56939621c892a3ff1288e984e85689a6c6e46b0ec16f65edc8b47d46b0f09d06857f67ca245553b462da597619102b9fad270476d9 + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"source-map@npm:^0.7.4": + version: 0.7.6 + resolution: "source-map@npm:0.7.6" + checksum: 10c0/59f6f05538539b274ba771d2e9e32f6c65451982510564438e048bc1352f019c6efcdc6dd07909b1968144941c14015c2c7d4369fb7c4d7d53ae769716dcc16c + languageName: node + linkType: hard + +"statuses@npm:>= 1.5.0 < 2": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: 10c0/e433900956357b3efd79b1c547da4d291799ac836960c016d10a98f6a810b1b5c0dcc13b5a7aa609a58239b5190e1ea176ad9221c2157d2fd1c747393e6b2940 + languageName: node + linkType: hard + +"statuses@npm:^2.0.1, statuses@npm:~2.0.2": + version: 2.0.2 + resolution: "statuses@npm:2.0.2" + checksum: 10c0/a9947d98ad60d01f6b26727570f3bcceb6c8fa789da64fe6889908fe2e294d57503b14bf2b5af7605c2d36647259e856635cd4c49eab41667658ec9d0080ec3f + languageName: node + linkType: hard + +"streamroller@npm:^3.1.5": + version: 3.1.5 + resolution: "streamroller@npm:3.1.5" + dependencies: + date-format: "npm:^4.0.14" + debug: "npm:^4.3.4" + fs-extra: "npm:^8.1.0" + checksum: 10c0/0bdeec34ad37487d959ba908f17067c938f544db88b5bb1669497a67a6b676413229ce5a6145c2812d06959ebeb8842e751076647d4b323ca06be612963b9099 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e + languageName: node + linkType: hard + +"supports-color@npm:^5.2.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"tapable@npm:^2.3.0": + version: 2.3.0 + resolution: "tapable@npm:2.3.0" + checksum: 10c0/cb9d67cc2c6a74dedc812ef3085d9d681edd2c1fa18e4aef57a3c0605fdbe44e6b8ea00bd9ef21bc74dd45314e39d31227aa031ebf2f5e38164df514136f2681 + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.3.16": + version: 5.3.16 + resolution: "terser-webpack-plugin@npm:5.3.16" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^4.3.0" + serialize-javascript: "npm:^6.0.2" + terser: "npm:^5.31.1" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/39e37c5b3015c1a5354a3633f77235677bfa06eac2608ce26d258b1d1a74070a99910319a6f2f2c437eb61dc321f66434febe01d78e73fa96b4d4393b813f4cf + languageName: node + linkType: hard + +"terser@npm:^5.31.1": + version: 5.46.0 + resolution: "terser@npm:5.46.0" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.15.0" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/93ad468f13187c4f66b609bbfc00a6aee752007779ca3157f2c1ee063697815748d6010fd449a16c30be33213748431d5f54cc0224ba6a3fbbf5acd3582a4356 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1, toidentifier@npm:~1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + +"ts-loader@npm:9.5.4": + version: 9.5.4 + resolution: "ts-loader@npm:9.5.4" + dependencies: + chalk: "npm:^4.1.0" + enhanced-resolve: "npm:^5.0.0" + micromatch: "npm:^4.0.0" + semver: "npm:^7.3.4" + source-map: "npm:^0.7.4" + peerDependencies: + typescript: "*" + webpack: ^5.0.0 + checksum: 10c0/f0982404b43628c335d3b3a60ac3f1738385da7b97c3f04cb5ad2ebad791597be39b25c8a4e158a66173f9bd9f5aa72e285b046b0573e4beed8ecd032d418e4d + languageName: node + linkType: hard + +"tsscmp@npm:1.0.6": + version: 1.0.6 + resolution: "tsscmp@npm:1.0.6" + checksum: 10c0/2f79a9455e7e3e8071995f98cdf3487ccfc91b760bec21a9abb4d90519557eafaa37246e87c92fa8bf3fef8fd30cfd0cc3c4212bb929baa9fb62494bfa4d24b2 + languageName: node + linkType: hard + +"type-is@npm:^2.0.1": + version: 2.0.1 + resolution: "type-is@npm:2.0.1" + dependencies: + content-type: "npm:^1.0.5" + media-typer: "npm:^1.1.0" + mime-types: "npm:^3.0.0" + checksum: 10c0/7f7ec0a060b16880bdad36824ab37c26019454b67d73e8a465ed5a3587440fbe158bc765f0da68344498235c877e7dbbb1600beccc94628ed05599d667951b99 + languageName: node + linkType: hard + +"typescript@npm:5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + +"undici-types@npm:~7.16.0": + version: 7.16.0 + resolution: "undici-types@npm:7.16.0" + checksum: 10c0/3033e2f2b5c9f1504bdc5934646cb54e37ecaca0f9249c983f7b1fc2e87c6d18399ebb05dc7fd5419e02b2e915f734d872a65da2e3eeed1813951c427d33cc9a + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"unplugin@npm:2.3.11": + version: 2.3.11 + resolution: "unplugin@npm:2.3.11" + dependencies: + "@jridgewell/remapping": "npm:^2.3.5" + acorn: "npm:^8.15.0" + picomatch: "npm:^4.0.3" + webpack-virtual-modules: "npm:^0.6.2" + checksum: 10c0/273c1eab0eca4470c7317428689295c31dbe8ab0b306504de9f03cd20c156debb4131bef24b27ac615862958c5dd950a3951d26c0723ea774652ab3624149cff + languageName: node + linkType: hard + +"upath@npm:2.0.1": + version: 2.0.1 + resolution: "upath@npm:2.0.1" + checksum: 10c0/79e8e1296b00e24a093b077cfd7a238712d09290c850ce59a7a01458ec78c8d26dcc2ab50b1b9d6a84dabf6511fb4969afeb8a5c9a001aa7272b9cc74c34670f + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.2.0": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/13a00355ea822388f68af57410ce3255941d5fb9b7c49342c4709a07c9f230bbef7f7499ae0ca7e0de532e79a82cc0c4edbd125f1a323a1845bf914efddf8bec + languageName: node + linkType: hard + +"util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"vary@npm:^1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f + languageName: node + linkType: hard + +"watchpack@npm:^2.5.1": + version: 2.5.1 + resolution: "watchpack@npm:2.5.1" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/dffbb483d1f61be90dc570630a1eb308581e2227d507d783b1d94a57ac7b705ecd9a1a4b73d73c15eab596d39874e5276a3d9cb88bbb698bafc3f8d08c34cf17 + languageName: node + linkType: hard + +"webpack-cli@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-cli@npm:6.0.1" + dependencies: + "@discoveryjs/json-ext": "npm:^0.6.1" + "@webpack-cli/configtest": "npm:^3.0.1" + "@webpack-cli/info": "npm:^3.0.1" + "@webpack-cli/serve": "npm:^3.0.1" + colorette: "npm:^2.0.14" + commander: "npm:^12.1.0" + cross-spawn: "npm:^7.0.3" + envinfo: "npm:^7.14.0" + fastest-levenshtein: "npm:^1.0.12" + import-local: "npm:^3.0.2" + interpret: "npm:^3.1.1" + rechoir: "npm:^0.8.0" + webpack-merge: "npm:^6.0.1" + peerDependencies: + webpack: ^5.82.0 + peerDependenciesMeta: + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: ./bin/cli.js + checksum: 10c0/2aaca78e277427f03f528602abd707d224696048fb46286ea636c7975592409c4381ca94d68bbbb3900f195ca97f256e619583e8feb34a80da531461323bf3e2 + languageName: node + linkType: hard + +"webpack-merge@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-merge@npm:6.0.1" + dependencies: + clone-deep: "npm:^4.0.1" + flat: "npm:^5.0.2" + wildcard: "npm:^2.0.1" + checksum: 10c0/bf1429567858b353641801b8a2696ca0aac270fc8c55d4de8a7b586fe07d27fdcfc83099a98ab47e6162383db8dd63bb8cc25b1beb2ec82150422eec843b0dc0 + languageName: node + linkType: hard + +"webpack-sources@npm:^3.3.3": + version: 3.3.3 + resolution: "webpack-sources@npm:3.3.3" + checksum: 10c0/ab732f6933b513ba4d505130418995ddef6df988421fccf3289e53583c6a39e205c4a0739cee98950964552d3006604912679c736031337fb4a9d78d8576ed40 + languageName: node + linkType: hard + +"webpack-virtual-modules@npm:^0.6.2": + version: 0.6.2 + resolution: "webpack-virtual-modules@npm:0.6.2" + checksum: 10c0/5ffbddf0e84bf1562ff86cf6fcf039c74edf09d78358a6904a09bbd4484e8bb6812dc385fe14330b715031892dcd8423f7a88278b57c9f5002c84c2860179add + languageName: node + linkType: hard + +"webpack@npm:5.105.2": + version: 5.105.2 + resolution: "webpack@npm:5.105.2" + dependencies: + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.8" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.15.0" + acorn-import-phases: "npm:^1.0.3" + browserslist: "npm:^4.28.1" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.19.0" + es-module-lexer: "npm:^2.0.0" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.3.1" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^4.3.3" + tapable: "npm:^2.3.0" + terser-webpack-plugin: "npm:^5.3.16" + watchpack: "npm:^2.5.1" + webpack-sources: "npm:^3.3.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/565df8072c00d72e0a22e136971862b7eac7beb8b8d39a2ae4ab00838941ea58acc5b49dd7ea268e3d839810756cb86ba5c272b3a25904f6db7807cfa8ed0b29 + languageName: node + linkType: hard + +"which@npm:^1.2.14": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + which: ./bin/which + checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"wildcard@npm:^2.0.1": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: 10c0/08f70cd97dd9a20aea280847a1fe8148e17cae7d231640e41eb26d2388697cbe65b67fd9e68715251c39b080c5ae4f76d71a9a69fa101d897273efdfb1b58bf7 + languageName: node + linkType: hard + +"ws@npm:8.18.0": + version: 8.18.0 + resolution: "ws@npm:8.18.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 + languageName: node + linkType: hard diff --git a/test/e2e/lib/framework/index.ts b/test/e2e/lib/framework/index.ts index 0c2c9c5370..82ab520e19 100644 --- a/test/e2e/lib/framework/index.ts +++ b/test/e2e/lib/framework/index.ts @@ -2,7 +2,15 @@ export { createTest } from './createTest' export { DEFAULT_RUM_CONFIGURATION, DEFAULT_LOGS_CONFIGURATION } from '../helpers/configuration' export { createExtension } from './createExtension' export { createWorker } from './createWorker' -export { bundleSetup, html, npmSetup, reactSetup, formatConfiguration, createCrossOriginScriptUrls } from './pageSetups' +export { + bundleSetup, + html, + npmSetup, + reactSetup, + formatConfiguration, + createCrossOriginScriptUrls, + microfrontendSetup, +} from './pageSetups' export { IntakeRegistry } from './intakeRegistry' export { getTestServers, waitForServersIdle } from './httpServers' export { flushEvents } from './flushEvents' diff --git a/test/e2e/lib/framework/pageSetups.ts b/test/e2e/lib/framework/pageSetups.ts index 22ec67f9b8..de0e8da2e9 100644 --- a/test/e2e/lib/framework/pageSetups.ts +++ b/test/e2e/lib/framework/pageSetups.ts @@ -245,6 +245,38 @@ export function workerSetup(options: WorkerOptions, servers: Servers) { return setup } +export function microfrontendSetup(options: SetupOptions, servers: Servers) { + let header = options.head || '' + const body = options.body || '' + + if (options.eventBridge) { + header += setupEventBridge(servers) + } + + if (options.extension) { + header += setupExtension(options, servers) + } + + const { rumScriptUrl } = createCrossOriginScriptUrls(servers, options) + + if (options.rum) { + header += html` + + + ` + } + + header += html` ` + + return basePage({ + header, + body, + }) +} + export function basePage({ header, body }: { header?: string; body?: string }) { return html` diff --git a/test/e2e/lib/framework/sdkBuilds.ts b/test/e2e/lib/framework/sdkBuilds.ts index 98358ad7c0..a4baf98ebd 100644 --- a/test/e2e/lib/framework/sdkBuilds.ts +++ b/test/e2e/lib/framework/sdkBuilds.ts @@ -11,6 +11,7 @@ export function getTestAppBundlePath(appName: string, originalUrl: string) { app: 'apps/vanilla', 'react-router-v6-app': 'apps/react-router-v6-app', 'react-router-v7-app': 'apps/react-router-v7-app', + microfrontend: 'apps/microfrontend', } const targetAppPath = appNameMapping[appName] || appName diff --git a/test/e2e/lib/framework/serverApps/mock.ts b/test/e2e/lib/framework/serverApps/mock.ts index 4a41f71deb..e339cf4fd8 100644 --- a/test/e2e/lib/framework/serverApps/mock.ts +++ b/test/e2e/lib/framework/serverApps/mock.ts @@ -201,6 +201,13 @@ export function createMockServerApp( res.sendFile(getTestAppBundlePath(params.appName, originalUrl)) }) + app.get(/^\/microfrontend\/.*/, (req, res) => { + const { originalUrl } = req + // Remove the /microfrontend prefix from the URL since getTestAppBundlePath adds the app path + const filePath = originalUrl.replace(/^\/microfrontend/, '') + res.sendFile(getTestAppBundlePath('microfrontend', filePath)) + }) + app.get('/config', (_req, res) => { res.send(JSON.stringify(remoteConfiguration)) }) diff --git a/test/e2e/scenario/microfrontend.scenario.ts b/test/e2e/scenario/microfrontend.scenario.ts index ef26f22f45..2dbde02637 100644 --- a/test/e2e/scenario/microfrontend.scenario.ts +++ b/test/e2e/scenario/microfrontend.scenario.ts @@ -1,9 +1,8 @@ import type { RumEvent, RumEventDomainContext, RumInitConfiguration } from '@datadog/browser-rum-core' import type { LogsEvent, LogsInitConfiguration, LogsEventDomainContext } from '@datadog/browser-logs' -import type { Page } from '@playwright/test' import { test, expect } from '@playwright/test' import { ExperimentalFeature } from '@datadog/browser-core' -import { createTest, html } from '../lib/framework' +import { createTest, microfrontendSetup } from '../lib/framework' const HANDLING_STACK_REGEX = /^HandlingStack: .*\n\s+at testHandlingStack @/ @@ -31,183 +30,381 @@ const LOGS_CONFIG: Partial = { }, } -// Use createBody because `page.evaluate()` runs in a different context and breaks stack traces. -function createBody(eventGenerator: string) { - return html` - - - ` -} +test.describe('microfrontend', () => { + test.describe('RUM', () => { + test.describe('with beforeSend', () => { + createTest('expose handling stack for fetch requests') + .withRum(RUM_CONFIG) + .withRumInit((configuration) => { + window.DD_RUM!.init(configuration) + + // eslint-disable-next-line @typescript-eslint/no-empty-function + const noop = () => {} + function testHandlingStack() { + fetch('/ok').then(noop, noop) + } -function setSourceCodeContext(page: Page, baseUrl: string) { - return page.evaluate((baseUrl) => { - window.DD_SOURCE_CODE_CONTEXT = { - [`Error: Test error - at testFunction (${baseUrl}:41:27)`]: { - service: 'mf-service', - version: '0.1.0', - }, - } - }, baseUrl) -} + testHandlingStack() + }) + .run(async ({ intakeRegistry, flushEvents }) => { + await flushEvents() -test.describe('microfrontend', () => { - createTest('expose handling stack for fetch requests') - .withRum(RUM_CONFIG) - .withRumInit((configuration) => { - window.DD_RUM!.init(configuration) - - // eslint-disable-next-line @typescript-eslint/no-empty-function - const noop = () => {} - function testHandlingStack() { - fetch('/ok').then(noop, noop) - } - - testHandlingStack() - }) - .run(async ({ intakeRegistry, flushEvents }) => { - await flushEvents() + const event = intakeRegistry.rumResourceEvents.find((event) => event.resource.type === 'fetch') - const event = intakeRegistry.rumResourceEvents.find((event) => event.resource.type === 'fetch') + expect(event).toBeTruthy() + expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) + }) - expect(event).toBeTruthy() - expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) - }) + createTest('expose handling stack for xhr requests') + .withRum(RUM_CONFIG) + .withRumInit((configuration) => { + window.DD_RUM!.init(configuration) + + function testHandlingStack() { + const xhr = new XMLHttpRequest() + xhr.open('GET', '/ok') + xhr.send() + } - createTest('expose handling stack for xhr requests') - .withRum(RUM_CONFIG) - .withRumInit((configuration) => { - window.DD_RUM!.init(configuration) + testHandlingStack() + }) + .run(async ({ intakeRegistry, flushEvents }) => { + await flushEvents() - function testHandlingStack() { - const xhr = new XMLHttpRequest() - xhr.open('GET', '/ok') - xhr.send() - } + const event = intakeRegistry.rumResourceEvents.find((event) => event.resource.type === 'xhr') - testHandlingStack() - }) - .run(async ({ intakeRegistry, flushEvents }) => { - await flushEvents() + expect(event).toBeTruthy() + expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) + }) - const event = intakeRegistry.rumResourceEvents.find((event) => event.resource.type === 'xhr') + createTest('expose handling stack for DD_RUM.addAction') + .withRum(RUM_CONFIG) + .withRumInit((configuration) => { + window.DD_RUM!.init(configuration) - expect(event).toBeTruthy() - expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) - }) + function testHandlingStack() { + window.DD_RUM!.addAction('foo') + } - createTest('expose handling stack for DD_RUM.addAction') - .withRum(RUM_CONFIG) - .withRumInit((configuration) => { - window.DD_RUM!.init(configuration) + testHandlingStack() + }) + .run(async ({ intakeRegistry, flushEvents }) => { + await flushEvents() - function testHandlingStack() { - window.DD_RUM!.addAction('foo') - } + const event = intakeRegistry.rumActionEvents[0] - testHandlingStack() - }) - .run(async ({ intakeRegistry, flushEvents }) => { - await flushEvents() + expect(event).toBeTruthy() + expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) + }) - const event = intakeRegistry.rumActionEvents[0] + createTest('expose handling stack for DD_RUM.addError') + .withRum(RUM_CONFIG) + .withRumInit((configuration) => { + window.DD_RUM!.init(configuration) - expect(event).toBeTruthy() - expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) - }) + function testHandlingStack() { + window.DD_RUM!.addError(new Error('foo')) + } - createTest('expose handling stack for DD_RUM.addError') - .withRum(RUM_CONFIG) - .withRumInit((configuration) => { - window.DD_RUM!.init(configuration) + testHandlingStack() + }) + .run(async ({ intakeRegistry, flushEvents }) => { + await flushEvents() - function testHandlingStack() { - window.DD_RUM!.addError(new Error('foo')) - } + const event = intakeRegistry.rumErrorEvents[0] - testHandlingStack() - }) - .run(async ({ intakeRegistry, flushEvents }) => { - await flushEvents() + expect(event).toBeTruthy() + expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) + }) - const event = intakeRegistry.rumErrorEvents[0] + createTest('expose handling stack for console errors') + .withRum(RUM_CONFIG) + .withRumInit((configuration) => { + window.DD_RUM!.init(configuration) - expect(event).toBeTruthy() - expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) - }) + function testHandlingStack() { + console.error('foo') + } - createTest('expose handling stack for console errors') - .withRum(RUM_CONFIG) - .withRumInit((configuration) => { - window.DD_RUM!.init(configuration) + testHandlingStack() + }) + .run(async ({ intakeRegistry, flushEvents, withBrowserLogs }) => { + await flushEvents() - function testHandlingStack() { - console.error('foo') - } + const event = intakeRegistry.rumErrorEvents[0] - testHandlingStack() - }) - .run(async ({ intakeRegistry, flushEvents, withBrowserLogs }) => { - await flushEvents() + withBrowserLogs((logs) => { + expect(logs).toHaveLength(1) + expect(logs[0].message).toMatch(/foo$/) + }) - const event = intakeRegistry.rumErrorEvents[0] + expect(event).toBeTruthy() + expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) + }) - withBrowserLogs((logs) => { - expect(logs).toHaveLength(1) - expect(logs[0].message).toMatch(/foo$/) - }) + createTest('expose handling stack for DD_RUM.startView') + .withRum(RUM_CONFIG) + .withRumInit((configuration) => { + window.DD_RUM!.init(configuration) - expect(event).toBeTruthy() - expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) - }) + function testHandlingStack() { + window.DD_RUM!.startView({ name: 'test-view' }) + } - createTest('expose handling stack for DD_RUM.startView') - .withRum(RUM_CONFIG) - .withRumInit((configuration) => { - window.DD_RUM!.init(configuration) + testHandlingStack() + }) + .run(async ({ intakeRegistry, flushEvents }) => { + await flushEvents() - function testHandlingStack() { - window.DD_RUM!.startView({ name: 'test-view' }) - } + const event = intakeRegistry.rumViewEvents.find((event) => event.view.name === 'test-view') - testHandlingStack() - }) - .run(async ({ intakeRegistry, flushEvents }) => { - await flushEvents() + expect(event).toBeTruthy() + expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) + }) - const event = intakeRegistry.rumViewEvents.find((event) => event.view.name === 'test-view') + createTest('expose handling stack for DD_RUM.startDurationVital') + .withRum(RUM_CONFIG) + .withRumInit((configuration) => { + window.DD_RUM!.init(configuration) - expect(event).toBeTruthy() - expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) - }) + function testHandlingStack() { + const ref = window.DD_RUM!.startDurationVital('test-vital') + window.DD_RUM!.stopDurationVital(ref) + } - createTest('expose handling stack for DD_RUM.startDurationVital') - .withRum(RUM_CONFIG) - .withRumInit((configuration) => { - window.DD_RUM!.init(configuration) + testHandlingStack() + }) + .run(async ({ intakeRegistry, flushEvents }) => { + await flushEvents() + + const event = intakeRegistry.rumVitalEvents.find((event) => event.vital.name === 'test-vital') + + expect(event).toBeTruthy() + expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) + }) + + createTest('resource: allow to modify service and version') + .withRum(RUM_CONFIG) + .withRumInit((configuration) => { + window.DD_RUM!.init({ + ...configuration, + beforeSend: (event: RumEvent) => { + if (event.type === 'resource') { + event.service = 'mfe-service' + event.version = '0.1.0' + } + + return true + }, + }) + }) + .run(async ({ intakeRegistry, flushEvents }) => { + await flushEvents() + + const viewEvent = intakeRegistry.rumViewEvents[0] + const resourceEvent = intakeRegistry.rumResourceEvents[0] + + expect(viewEvent).toBeTruthy() + expect(viewEvent.service).toBe('main-service') + expect(viewEvent.version).toBe('1.0.0') + + expect(resourceEvent).toBeTruthy() + expect(resourceEvent.service).toBe('mfe-service') + expect(resourceEvent.version).toBe('0.1.0') + }) + + createTest('view: allowed to modify service and version') + .withRum(RUM_CONFIG) + .withRumInit((configuration) => { + window.DD_RUM!.init({ + ...configuration, + beforeSend: (event: RumEvent) => { + if (event.type === 'view') { + event.service = 'mfe-service' + event.version = '0.1.0' + } + + return true + }, + }) + }) + .run(async ({ intakeRegistry, flushEvents }) => { + await flushEvents() - function testHandlingStack() { - const ref = window.DD_RUM!.startDurationVital('test-vital') - window.DD_RUM!.stopDurationVital(ref) - } + const viewEvent = intakeRegistry.rumViewEvents[0] - testHandlingStack() + expect(viewEvent).toBeTruthy() + expect(viewEvent.service).toBe('mfe-service') + expect(viewEvent.version).toBe('0.1.0') + }) }) - .run(async ({ intakeRegistry, flushEvents }) => { - await flushEvents() - const event = intakeRegistry.rumVitalEvents.find((event) => event.vital.name === 'test-vital') + test.describe('with source code bundler plugin', () => { + createTest('errors from DD_RUM.addError should have service and version from source code context') + .withRum(RUM_CONFIG) + .withSetup(microfrontendSetup) + .run(async ({ intakeRegistry, flushEvents, page }) => { + await page.click('#app1-error') + await page.click('#app2-error') + await flushEvents() + + expect(intakeRegistry.rumErrorEvents).toMatchObject([ + expect.objectContaining({ service: 'mfe-app1-service', version: '1.0.0' }), + expect.objectContaining({ service: 'mfe-app2-service', version: '0.2.0' }), + ]) + }) + + createTest('errors from console.error should have service and version from source code context') + .withRum(RUM_CONFIG) + .withSetup(microfrontendSetup) + .run(async ({ intakeRegistry, flushEvents, page, withBrowserLogs }) => { + await page.click('#app1-console-error') + await page.click('#app2-console-error') + await flushEvents() + + expect(intakeRegistry.rumErrorEvents).toMatchObject([ + expect.objectContaining({ service: 'mfe-app1-service', version: '1.0.0' }), + expect.objectContaining({ service: 'mfe-app2-service', version: '0.2.0' }), + ]) + + withBrowserLogs((browserLogs) => { + expect(browserLogs).toHaveLength(2) + }) + }) + + createTest('runtime errors should have service and version from source code context') + .withRum(RUM_CONFIG) + .withSetup(microfrontendSetup) + .run(async ({ intakeRegistry, flushEvents, page, withBrowserLogs }) => { + await page.click('#app1-runtime-error') + await page.click('#app2-runtime-error') + await flushEvents() + + expect(intakeRegistry.rumErrorEvents).toMatchObject([ + expect.objectContaining({ service: 'mfe-app1-service', version: '1.0.0' }), + expect.objectContaining({ service: 'mfe-app2-service', version: '0.2.0' }), + ]) + + withBrowserLogs((browserLogs) => { + expect(browserLogs).toHaveLength(2) + }) + }) + + createTest('fetch requests should have service and version from source code context') + .withRum(RUM_CONFIG) + .withSetup(microfrontendSetup) + .run(async ({ intakeRegistry, flushEvents, page }) => { + await page.click('#app1-fetch') + await page.click('#app2-fetch') + await flushEvents() + + const resourceEvents = intakeRegistry.rumResourceEvents.filter((event) => event.resource.type === 'fetch') + + expect(resourceEvents).toMatchObject([ + expect.objectContaining({ service: 'mfe-app1-service', version: '1.0.0' }), + expect.objectContaining({ service: 'mfe-app2-service', version: '0.2.0' }), + ]) + }) + + createTest('xhr requests should have service and version from source code context') + .withRum(RUM_CONFIG) + .withSetup(microfrontendSetup) + .run(async ({ intakeRegistry, flushEvents, page }) => { + await page.click('#app1-xhr') + await page.click('#app2-xhr') + await flushEvents() + + const resourceEvents = intakeRegistry.rumResourceEvents.filter((event) => event.resource.type === 'xhr') + + expect(resourceEvents).toMatchObject([ + expect.objectContaining({ service: 'mfe-app1-service', version: '1.0.0' }), + expect.objectContaining({ service: 'mfe-app2-service', version: '0.2.0' }), + ]) + }) + + createTest('custom actions should have service and version from source code context') + .withRum(RUM_CONFIG) + .withSetup(microfrontendSetup) + .run(async ({ intakeRegistry, flushEvents, page }) => { + await page.click('#app1-custom-action') + await page.click('#app2-custom-action') + await flushEvents() + + const rumActionEvents = intakeRegistry.rumActionEvents.filter((event) => event.action.type === 'custom') + + expect(rumActionEvents).toMatchObject([ + expect.objectContaining({ + service: 'mfe-app1-service', + version: '1.0.0', + }), + expect.objectContaining({ + service: 'mfe-app2-service', + version: '0.2.0', + }), + ]) + }) + + createTest('LOAf should have service and version from source code context') + .withRum(RUM_CONFIG) + .withSetup(microfrontendSetup) + .run(async ({ intakeRegistry, flushEvents, page, browserName }) => { + test.skip(browserName !== 'chromium', 'Non-Chromium browsers do not support long tasks') - expect(event).toBeTruthy() - expect(event?.context?.handlingStack).toMatch(HANDLING_STACK_REGEX) + await page.click('#app1-loaf') + await page.click('#app2-loaf') + await flushEvents() + + const longTaskEvents = intakeRegistry.rumLongTaskEvents.filter((event) => + event.long_task.scripts?.[0]?.invoker?.includes('onclick') + ) + + expect(longTaskEvents).toMatchObject([ + expect.objectContaining({ service: 'mfe-app1-service', version: '1.0.0' }), + expect.objectContaining({ service: 'mfe-app2-service', version: '0.2.0' }), + ]) + }) + + createTest('manual views should have service and version from source code context') + .withRum(RUM_CONFIG) + .withSetup(microfrontendSetup) + .run(async ({ intakeRegistry, flushEvents, page }) => { + await page.click('#app1-view') + await page.click('#app2-view') + await flushEvents() + + expect(intakeRegistry.rumViewEvents).toMatchObject( + expect.arrayContaining([ + expect.objectContaining({ + view: expect.objectContaining({ name: 'app1-view' }), + service: 'mfe-app1-service', + version: '1.0.0', + }), + expect.objectContaining({ + view: expect.objectContaining({ name: 'app2-view' }), + service: 'mfe-app2-service', + version: '0.2.0', + }), + ]) + ) + }) + + createTest('duration vitals should have service and version from source code context') + .withRum(RUM_CONFIG) + .withSetup(microfrontendSetup) + .run(async ({ intakeRegistry, flushEvents, page }) => { + await page.click('#app1-vital') + await page.click('#app2-vital') + await flushEvents() + + expect(intakeRegistry.rumVitalEvents).toMatchObject([ + expect.objectContaining({ service: 'mfe-app1-service', version: '1.0.0' }), + expect.objectContaining({ service: 'mfe-app2-service', version: '0.2.0' }), + ]) + }) }) + }) - test.describe('console apis', () => { + test.describe('Logs', () => { createTest('expose handling stack for console.log') .withLogs(LOGS_CONFIG) .withLogsInit((configuration) => { @@ -231,9 +428,7 @@ test.describe('microfrontend', () => { handlingStack: expect.stringMatching(HANDLING_STACK_REGEX), }) }) - }) - test.describe('logger apis', () => { createTest('expose handling stack for DD_LOGS.logger.log') .withLogs(LOGS_CONFIG) .withLogsInit((configuration) => { @@ -258,189 +453,4 @@ test.describe('microfrontend', () => { }) }) }) - - createTest('resource: allow to modify service and version') - .withRum(RUM_CONFIG) - .withRumInit((configuration) => { - window.DD_RUM!.init({ - ...configuration, - beforeSend: (event: RumEvent) => { - if (event.type === 'resource') { - event.service = 'mf-service' - event.version = '0.1.0' - } - - return true - }, - }) - }) - .run(async ({ intakeRegistry, flushEvents }) => { - await flushEvents() - - const viewEvent = intakeRegistry.rumViewEvents[0] - const resourceEvent = intakeRegistry.rumResourceEvents[0] - - expect(viewEvent).toBeTruthy() - expect(viewEvent.service).toBe('main-service') - expect(viewEvent.version).toBe('1.0.0') - - expect(resourceEvent).toBeTruthy() - expect(resourceEvent.service).toBe('mf-service') - expect(resourceEvent.version).toBe('0.1.0') - }) - - createTest('view: allowed to modify service and version') - .withRum(RUM_CONFIG) - .withRumInit((configuration) => { - window.DD_RUM!.init({ - ...configuration, - beforeSend: (event: RumEvent) => { - if (event.type === 'view') { - event.service = 'mf-service' - event.version = '0.1.0' - } - - return true - }, - }) - }) - .run(async ({ intakeRegistry, flushEvents }) => { - await flushEvents() - - const viewEvent = intakeRegistry.rumViewEvents[0] - - expect(viewEvent).toBeTruthy() - expect(viewEvent.service).toBe('mf-service') - expect(viewEvent.version).toBe('0.1.0') - }) - - test.describe('source code context', () => { - createTest('errors from DD_RUM.addError should have service and version from source code context') - .withRum(RUM_CONFIG) - .withBody(createBody('window.DD_RUM.addError(new Error("foo"))')) - .run(async ({ intakeRegistry, flushEvents, page, baseUrl }) => { - await setSourceCodeContext(page, baseUrl) - await page.locator('button').click() - await flushEvents() - - const errorEvent = intakeRegistry.rumErrorEvents[0] - expect(errorEvent).toMatchObject({ service: 'mf-service', version: '0.1.0' }) - }) - - createTest('errors from console.error should have service and version from source code context') - .withRum(RUM_CONFIG) - .withBody(createBody('console.error("foo")')) - .run(async ({ intakeRegistry, flushEvents, page, baseUrl, withBrowserLogs }) => { - await setSourceCodeContext(page, baseUrl) - await page.locator('button').click() - await flushEvents() - - const errorEvent = intakeRegistry.rumErrorEvents[0] - expect(errorEvent).toMatchObject({ service: 'mf-service', version: '0.1.0' }) - - withBrowserLogs((browserLogs) => { - expect(browserLogs).toHaveLength(1) - }) - }) - - createTest('runtime errors should have service and version from source code context') - .withRum(RUM_CONFIG) - .withBody(createBody('throw new Error("oh snap")')) - .run(async ({ intakeRegistry, flushEvents, page, baseUrl, withBrowserLogs }) => { - await setSourceCodeContext(page, baseUrl) - await page.locator('button').click() - await flushEvents() - - const errorEvent = intakeRegistry.rumErrorEvents[0] - expect(errorEvent).toMatchObject({ service: 'mf-service', version: '0.1.0' }) - - withBrowserLogs((browserLogs) => { - expect(browserLogs).toHaveLength(1) - }) - }) - - createTest('fetch requests should have service and version from source code context') - .withRum(RUM_CONFIG) - .withBody(createBody('fetch("/ok").then(() => {}, () => {})')) - .run(async ({ intakeRegistry, flushEvents, page, baseUrl }) => { - await setSourceCodeContext(page, baseUrl) - await page.locator('button').click() - await flushEvents() - - const resourceEvent = intakeRegistry.rumResourceEvents.find((event) => event.resource.type === 'fetch')! - expect(resourceEvent).toMatchObject({ service: 'mf-service', version: '0.1.0' }) - }) - - createTest('xhr requests should have service and version from source code context') - .withRum(RUM_CONFIG) - .withBody(createBody("const xhr = new XMLHttpRequest(); xhr.open('GET', '/ok'); xhr.send();")) - .run(async ({ intakeRegistry, flushEvents, page, baseUrl }) => { - await setSourceCodeContext(page, baseUrl) - await page.locator('button').click() - await flushEvents() - - const resourceEvent = intakeRegistry.rumResourceEvents.find((event) => event.resource.type === 'xhr')! - expect(resourceEvent).toMatchObject({ service: 'mf-service', version: '0.1.0' }) - }) - - createTest('custom actions should have service and version from source code context') - .withRum(RUM_CONFIG) - .withBody(createBody("window.DD_RUM.addAction('foo')")) - .run(async ({ intakeRegistry, flushEvents, page, baseUrl }) => { - await setSourceCodeContext(page, baseUrl) - await page.locator('button').click() - await flushEvents() - - const actionEvent = intakeRegistry.rumActionEvents[0] - expect(actionEvent).toMatchObject({ service: 'mf-service', version: '0.1.0' }) - }) - - createTest('LOAf should have service and version from source code context') - .withRum(RUM_CONFIG) - .withBody( - createBody(` - const end = performance.now() + 55 - while (performance.now() < end) {} // block the handler for ~55ms to trigger a long task - `) - ) - .run(async ({ intakeRegistry, flushEvents, page, baseUrl, browserName }) => { - test.skip(browserName !== 'chromium', 'Non-Chromium browsers do not support long tasks') - - await setSourceCodeContext(page, baseUrl) - await page.locator('button').click() - await flushEvents() - - const longTaskEvent = intakeRegistry.rumLongTaskEvents.find((event) => - event.long_task.scripts?.[0]?.invoker?.includes('BUTTON.onclick') - ) - - expect(longTaskEvent).toMatchObject({ service: 'mf-service', version: '0.1.0' }) - }) - - createTest('manual views should have service and version from source code context') - .withRum(RUM_CONFIG) - .withBody(createBody("window.DD_RUM.startView({ name: 'test-view' })")) - .run(async ({ intakeRegistry, flushEvents, page, baseUrl }) => { - await setSourceCodeContext(page, baseUrl) - await page.locator('button').click() - await flushEvents() - - const viewEvent = intakeRegistry.rumViewEvents.find((event) => event.view.name === 'test-view') - expect(viewEvent).toMatchObject({ service: 'mf-service', version: '0.1.0' }) - }) - - createTest('duration vitals should have service and version from source code context') - .withRum(RUM_CONFIG) - .withBody( - createBody("const ref = window.DD_RUM.startDurationVital('test-vital'); window.DD_RUM.stopDurationVital(ref)") - ) - .run(async ({ intakeRegistry, flushEvents, page, baseUrl }) => { - await setSourceCodeContext(page, baseUrl) - await page.locator('button').click() - await flushEvents() - - const vitalEvent = intakeRegistry.rumVitalEvents.find((event) => event.vital.name === 'test-vital') - expect(vitalEvent).toMatchObject({ service: 'mf-service', version: '0.1.0' }) - }) - }) })