feat(module-federation): use proxy servers to proxy to single file server for static remotes (#26782)

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->
Remotes that are served for a host are usually served from a single file
server running on a single port.
We perform some mapping logic during the build of the host application
to update the locations the remotes can be found at to point to the
single file server.

This works, but it's also wrong, as it breaks the flow that users
expect.
It also breaks dynamic remotes.


## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->
Continue to serve the remotes from a single file server, as this helps
reduce the amount of resources used on developers machines.
Use express to create proxy servers that will proxy requests from the
original remote location to the single file server.

This allows applications to continue to work without us having to
interfere and map any remote locations.
It also solves the issue with dynamic remotes.


## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #26318
This commit is contained in:
Colum Ferry 2024-07-18 18:46:06 +01:00 committed by GitHub
parent 53d2e9cfc7
commit a549b9b0c9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 260 additions and 387 deletions

View File

@ -20,13 +20,13 @@ import { join } from 'path';
import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports';
describe('React Module Federation', () => {
describe('Default Configuration', () => {
beforeAll(() => {
newProject({ packages: ['@nx/react'] });
});
afterAll(() => cleanupProject());
describe('Default Configuration', () => {
it.each`
js
${false}
@ -39,9 +39,6 @@ describe('React Module Federation', () => {
const remote2 = uniq('remote2');
const remote3 = uniq('remote3');
// Since we are using a single-file server for the remotes
const defaultRemotePort = 4201;
runCLI(
`generate @nx/react:host ${shell} --remotes=${remote1},${remote2},${remote3} --e2eTestRunner=cypress --style=css --no-interactive --skipFormat --js=${js}`
);
@ -65,54 +62,6 @@ describe('React Module Federation', () => {
),
});
if (js) {
updateFile(
`apps/${shell}/webpack.config.js`,
stripIndents`
const { composePlugins, withNx } = require('@nx/webpack');
const { withReact } = require('@nx/react');
const { withModuleFederation } = require('@nx/react/module-federation');
const baseConfig = require('./module-federation.config');
const config = {
...baseConfig,
remotes: [
'${remote1}',
['${remote2}', 'http://localhost:${defaultRemotePort}/${remote2}/remoteEntry.js'],
['${remote3}', 'http://localhost:${defaultRemotePort}/${remote3}/remoteEntry.js'],
],
};
// Nx plugins for webpack to build config object from Nx options and context.
module.exports = composePlugins(withNx(), withReact(), withModuleFederation(config));
`
);
} else {
updateFile(
`apps/${shell}/webpack.config.ts`,
stripIndents`
import { composePlugins, withNx } from '@nx/webpack';
import { withReact } from '@nx/react';
import { withModuleFederation } from '@nx/react/module-federation';
import baseConfig from './module-federation.config';
const config = {
...baseConfig,
remotes: [
'${remote1}',
['${remote2}', 'http://localhost:${defaultRemotePort}/${remote2}/remoteEntry.js'],
['${remote3}', 'http://localhost:${defaultRemotePort}/${remote3}/remoteEntry.js'],
],
};
// Nx plugins for webpack to build config object from Nx options and context.
export default composePlugins(withNx(), withReact(), withModuleFederation(config));
`
);
}
updateFile(
`apps/${shell}-e2e/src/integration/app.spec.${js ? 'js' : 'ts'}`,
stripIndents`
@ -153,11 +102,7 @@ describe('React Module Federation', () => {
output.includes(`http://localhost:${readPort(shell)}`)
);
await killProcessAndPorts(
serveResult.pid,
readPort(shell),
defaultRemotePort
);
await killProcessAndPorts(serveResult.pid, readPort(shell));
if (runE2ETests()) {
const e2eResultsSwc = await runCommandUntil(
@ -165,11 +110,7 @@ describe('React Module Federation', () => {
(output) => output.includes('All specs passed!')
);
await killProcessAndPorts(
e2eResultsSwc.pid,
readPort(shell),
defaultRemotePort
);
await killProcessAndPorts(e2eResultsSwc.pid, readPort(shell));
const e2eResultsTsNode = await runCommandUntil(
`e2e ${shell}-e2e --no-watch --verbose`,
@ -179,11 +120,7 @@ describe('React Module Federation', () => {
env: { NX_PREFER_TS_NODE: 'true' },
}
);
await killProcessAndPorts(
e2eResultsTsNode.pid,
readPort(shell),
defaultRemotePort
);
await killProcessAndPorts(e2eResultsTsNode.pid, readPort(shell));
}
},
500_000
@ -924,14 +861,20 @@ describe('React Module Federation', () => {
});
afterAll(() => cleanupProject());
it('should load remote dynamic module', async () => {
it('ttt should load remote dynamic module', async () => {
const shell = uniq('shell');
const remote = uniq('remote');
const remotePort = 4205;
runCLI(
`generate @nx/react:host ${shell} --remotes=${remote} --e2eTestRunner=cypress --dynamic=true --project-name-and-root-format=as-provided --no-interactive --skipFormat`
);
updateJson(`${remote}/project.json`, (project) => {
project.targets.serve.options.port = remotePort;
return project;
});
// Webpack prod config should not exists when loading dynamic modules
expect(
fileExists(`${tmpProjPath()}/${shell}/webpack.config.prod.ts`)
@ -942,12 +885,20 @@ describe('React Module Federation', () => {
)
).toBeTruthy();
updateJson(
`${shell}/src/assets/module-federation.manifest.json`,
(json) => {
return {
[remote]: `http://localhost:${remotePort}`,
};
}
);
const manifest = readJson(
`${shell}/src/assets/module-federation.manifest.json`
);
expect(manifest[remote]).toBeDefined();
expect(manifest[remote]).toEqual('http://localhost:4201');
expect(manifest[remote]).toEqual('http://localhost:4205');
// update e2e
updateFile(
@ -981,7 +932,6 @@ describe('React Module Federation', () => {
expect(remoteOutput).toContain('Successfully ran target build');
const shellPort = readPort(shell);
const remotePort = readPort(remote);
if (runE2ETests()) {
// Serve Remote since it is dynamic and won't be started with the host

View File

@ -180,7 +180,7 @@
"eslint-plugin-react": "7.32.2",
"eslint-plugin-react-hooks": "4.6.0",
"eslint-plugin-storybook": "^0.6.12",
"express": "^4.18.1",
"express": "^4.19.2",
"fast-xml-parser": "^4.2.7",
"figures": "3.2.0",
"file-type": "^16.2.0",
@ -192,6 +192,7 @@
"gpt3-tokenizer": "^1.1.5",
"handlebars": "4.7.7",
"html-webpack-plugin": "5.5.0",
"http-proxy-middleware": "^3.0.0",
"http-server": "14.1.0",
"husky": "^8.0.1",
"identity-obj-proxy": "3.0.0",

View File

@ -21,6 +21,9 @@
"ts-node",
"tsconfig-paths",
"semver",
"webpack",
"express",
"http-proxy-middleware",
"http-server",
"magic-string",
"enquirer",

View File

@ -1,10 +1,10 @@
import { type Schema } from '../schema';
import { type ExecutorContext, logger } from '@nx/devkit';
import type { StaticRemotesConfig } from './parse-static-remotes-config';
import { workspaceDataDirectory } from 'nx/src/utils/cache-directory';
import { fork } from 'node:child_process';
import { join } from 'node:path';
import { createWriteStream } from 'node:fs';
import type { StaticRemotesConfig } from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
export async function buildStaticRemotes(
staticRemotesConfig: StaticRemotesConfig,
@ -23,9 +23,6 @@ export async function buildStaticRemotes(
staticRemotesConfig.config[app].urlSegment
}`;
}
process.env.NX_MF_DEV_SERVER_STATIC_REMOTES = JSON.stringify(
mappedLocationOfRemotes
);
await new Promise<void>((res) => {
logger.info(
@ -81,4 +78,6 @@ export async function buildStaticRemotes(
process.on('SIGTERM', () => staticProcess.kill('SIGTERM'));
process.on('exit', () => staticProcess.kill('SIGTERM'));
});
return mappedLocationOfRemotes;
}

View File

@ -1,5 +1,4 @@
export * from './build-static-remotes';
export * from './normalize-options';
export * from './parse-static-remotes-config';
export * from './start-dev-remotes';
export * from './start-static-remotes-file-server';

View File

@ -3,13 +3,19 @@ import { type Schema } from '../schema';
import fileServerExecutor from '@nx/web/src/executors/file-server/file-server.impl';
import { join } from 'path';
import { cpSync } from 'fs';
import type { StaticRemotesConfig } from './parse-static-remotes-config';
import type { StaticRemotesConfig } from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
export function startStaticRemotesFileServer(
staticRemotesConfig: StaticRemotesConfig,
context: ExecutorContext,
options: Schema
) {
if (
!staticRemotesConfig.remotes ||
staticRemotesConfig.remotes.length === 0
) {
return;
}
let shouldMoveToCommonLocation = false;
let commonOutputDirectory: string;
for (const app of staticRemotesConfig.remotes) {

View File

@ -7,7 +7,6 @@ import { type Schema } from './schema';
import {
buildStaticRemotes,
normalizeOptions,
parseStaticRemotesConfig,
startRemotes,
startStaticRemotesFileServer,
} from './lib';
@ -31,6 +30,8 @@ import {
} from '../../builders/utilities/module-federation';
import { extname, join } from 'path';
import { existsSync } from 'fs';
import { startRemoteProxies } from '@nx/webpack/src/utils/module-federation/start-remote-proxies';
import { parseStaticRemotesConfig } from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
export async function* moduleFederationDevServerExecutor(
schema: Schema,
@ -39,7 +40,6 @@ export async function* moduleFederationDevServerExecutor(
// Force Node to resolve to look for the nx binary that is inside node_modules
const nxBin = require.resolve('nx/bin/nx');
const options = normalizeOptions(schema);
options.staticRemotesPort ??= options.port + 1;
const { projects: workspaceProjects } =
readProjectsConfigurationFromProjectGraph(context.projectGraph);
@ -123,30 +123,23 @@ export async function* moduleFederationDevServerExecutor(
pathToManifestFile
);
options.staticRemotesPort ??= remotes.staticRemotePort;
// Set NX_MF_DEV_REMOTES for the Nx Runtime Library Control Plugin
process.env.NX_MF_DEV_REMOTES = JSON.stringify(
remotes.devRemotes.map((r) => (typeof r === 'string' ? r : r.remoteName))
);
if (remotes.devRemotes.length > 0 && !schema.staticRemotesPort) {
options.staticRemotesPort = options.devRemotes.reduce((portToUse, r) => {
const remoteName = typeof r === 'string' ? r : r.remoteName;
const remotePort =
context.projectGraph.nodes[remoteName].data.targets['serve'].options
.port;
if (remotePort >= portToUse) {
return remotePort + 1;
} else {
return portToUse;
}
}, options.staticRemotesPort);
}
const staticRemotesConfig = parseStaticRemotesConfig(
remotes.staticRemotes,
[...remotes.staticRemotes, ...remotes.dynamicRemotes],
context
);
await buildStaticRemotes(staticRemotesConfig, nxBin, context, options);
const mappedLocationsOfStaticRemotes = await buildStaticRemotes(
staticRemotesConfig,
nxBin,
context,
options
);
const devRemoteIters = await startRemotes(
remotes.devRemotes,
@ -156,18 +149,13 @@ export async function* moduleFederationDevServerExecutor(
'serve'
);
const dynamicRemoteIters = await startRemotes(
remotes.dynamicRemotes,
workspaceProjects,
options,
const staticRemotesIter = startStaticRemotesFileServer(
staticRemotesConfig,
context,
'serve-static'
options
);
const staticRemotesIter =
remotes.staticRemotes.length > 0
? startStaticRemotesFileServer(staticRemotesConfig, context, options)
: undefined;
startRemoteProxies(staticRemotesConfig, mappedLocationsOfStaticRemotes);
const removeBaseUrlEmission = (iter: AsyncIterable<unknown>) =>
mapAsyncIterable(iter, (v) => ({
@ -178,7 +166,6 @@ export async function* moduleFederationDevServerExecutor(
return yield* combineAsyncIterables(
removeBaseUrlEmission(currIter),
...devRemoteIters.map(removeBaseUrlEmission),
...dynamicRemoteIters.map(removeBaseUrlEmission),
...(staticRemotesIter ? [removeBaseUrlEmission(staticRemotesIter)] : []),
createAsyncIterable<{ success: true; baseUrl: string }>(
async ({ next, done }) => {

View File

@ -20,10 +20,15 @@ import {
import { waitForPortOpen } from '@nx/web/src/utils/wait-for-port-open';
import { workspaceDataDirectory } from 'nx/src/utils/cache-directory';
import { fork } from 'node:child_process';
import { basename, dirname, join } from 'node:path';
import { createWriteStream, cpSync } from 'node:fs';
import { join } from 'node:path';
import { cpSync, createWriteStream } from 'node:fs';
import { existsSync } from 'fs';
import { extname } from 'path';
import { startRemoteProxies } from '@nx/webpack/src/utils/module-federation/start-remote-proxies';
import {
parseStaticRemotesConfig,
type StaticRemotesConfig,
} from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
type ModuleFederationDevServerOptions = WebDevServerOptions & {
devRemotes?: (
@ -56,6 +61,12 @@ function startStaticRemotesFileServer(
context: ExecutorContext,
options: ModuleFederationDevServerOptions
) {
if (
!staticRemotesConfig.remotes ||
staticRemotesConfig.remotes.length === 0
) {
return;
}
let shouldMoveToCommonLocation = false;
let commonOutputDirectory: string;
for (const app of staticRemotesConfig.remotes) {
@ -238,45 +249,14 @@ async function buildStaticRemotes(
process.on('SIGTERM', () => staticProcess.kill('SIGTERM'));
process.on('exit', () => staticProcess.kill('SIGTERM'));
});
}
type StaticRemoteConfig = {
basePath: string;
outputPath: string;
urlSegment: string;
};
type StaticRemotesConfig = {
remotes: string[];
config: Record<string, StaticRemoteConfig> | undefined;
};
export function parseStaticRemotesConfig(
staticRemotes: string[] | undefined,
context: ExecutorContext
): StaticRemotesConfig {
if (!staticRemotes?.length) {
return { remotes: [], config: undefined };
}
const config: Record<string, StaticRemoteConfig> = {};
for (const app of staticRemotes) {
const outputPath =
context.projectGraph.nodes[app].data.targets['build'].options.outputPath;
const basePath = dirname(outputPath);
const urlSegment = basename(outputPath);
config[app] = { basePath, outputPath, urlSegment };
}
return { remotes: staticRemotes, config };
return mappedLocationOfRemotes;
}
export default async function* moduleFederationDevServer(
options: ModuleFederationDevServerOptions,
context: ExecutorContext
): AsyncIterableIterator<{ success: boolean; baseUrl?: string }> {
const initialStaticRemotesPorts = options.staticRemotesPort;
options.staticRemotesPort ??= options.port + 1;
// Force Node to resolve to look for the nx binary that is inside node_modules
const nxBin = require.resolve('nx/bin/nx');
const currIter = options.static
@ -344,31 +324,23 @@ export default async function* moduleFederationDevServer(
},
pathToManifestFile
);
options.staticRemotesPort ??= remotes.staticRemotePort;
// Set NX_MF_DEV_REMOTES for the Nx Runtime Library Control Plugin
process.env.NX_MF_DEV_REMOTES = JSON.stringify(
remotes.devRemotes.map((r) => (typeof r === 'string' ? r : r.remoteName))
);
if (remotes.devRemotes.length > 0 && !initialStaticRemotesPorts) {
options.staticRemotesPort = options.devRemotes.reduce((portToUse, r) => {
const remoteName = typeof r === 'string' ? r : r.remoteName;
const remotePort =
context.projectGraph.nodes[remoteName].data.targets['serve'].options
.port;
if (remotePort >= portToUse) {
return remotePort + 1;
} else {
return portToUse;
}
}, options.staticRemotesPort);
}
const staticRemotesConfig = parseStaticRemotesConfig(
remotes.staticRemotes,
[...remotes.staticRemotes, ...remotes.dynamicRemotes],
context
);
await buildStaticRemotes(staticRemotesConfig, nxBin, context, options);
const mappedLocationsOfStaticRemotes = await buildStaticRemotes(
staticRemotesConfig,
nxBin,
context,
options
);
const devRemoteIters = await startRemotes(
remotes.devRemotes,
@ -376,22 +348,18 @@ export default async function* moduleFederationDevServer(
options,
'serve'
);
const dynamicRemotesIters = await startRemotes(
remotes.dynamicRemotes,
const staticRemotesIter = startStaticRemotesFileServer(
staticRemotesConfig,
context,
options,
'serve-static'
options
);
const staticRemotesIter =
remotes.staticRemotes.length > 0
? startStaticRemotesFileServer(staticRemotesConfig, context, options)
: undefined;
startRemoteProxies(staticRemotesConfig, mappedLocationsOfStaticRemotes);
return yield* combineAsyncIterables(
currIter,
...devRemoteIters,
...dynamicRemotesIters,
...(staticRemotesIter ? [staticRemotesIter] : []),
createAsyncIterable<{ success: true; baseUrl: string }>(
async ({ next, done }) => {

View File

@ -87,7 +87,14 @@ export function addModuleFederationFiles(
processWebpackConfig(options, host, 'webpack.config.prod.js');
processWebpackConfig(options, host, 'webpack.config.prod.ts');
if (!host.exists(pathToMFManifest)) {
host.write(pathToMFManifest, '{}');
host.write(
pathToMFManifest,
`{
${defaultRemoteManifest
.map(({ name, port }) => `"${name}": "http://localhost:${port}"`)
.join(',\n')}
}`
);
}
}
}

View File

@ -6,6 +6,7 @@ export function addRemoteToDynamicHost(
remotePort: number,
pathToMfManifest: string
) {
if (tree.exists(pathToMfManifest)) {
const current = tree.read(pathToMfManifest, 'utf8');
tree.write(
pathToMfManifest,
@ -15,3 +16,4 @@ export function addRemoteToDynamicHost(
})
);
}
}

View File

@ -42,7 +42,9 @@
"copy-webpack-plugin": "^10.2.4",
"css-loader": "^6.4.0",
"css-minimizer-webpack-plugin": "^5.0.0",
"express": "^4.19.2",
"fork-ts-checker-webpack-plugin": "7.2.13",
"http-proxy-middleware": "^3.0.0",
"less": "4.1.3",
"less-loader": "11.1.0",
"license-webpack-plugin": "^4.0.2",

View File

@ -121,8 +121,8 @@ export function getRemotes(
);
const staticRemotes = knownRemotes.filter((r) => !devServeApps.has(r));
const devServeRemotes = [...knownRemotes, ...dynamicRemotes].filter((r) =>
devServeApps.has(r)
const devServeRemotes = [...knownRemotes, ...knownDynamicRemotes].filter(
(r) => devServeApps.has(r)
);
const staticDynamicRemotes = knownDynamicRemotes.filter(
(r) => !devServeApps.has(r)
@ -130,12 +130,23 @@ export function getRemotes(
const remotePorts = [...devServeRemotes, ...staticDynamicRemotes].map(
(r) => context.projectGraph.nodes[r].data.targets['serve'].options.port
);
const staticRemotePort =
Math.max(
...([
...remotePorts,
...staticRemotes.map(
(r) =>
context.projectGraph.nodes[r].data.targets['serve'].options.port
),
] as number[])
) + 1;
return {
staticRemotes,
devRemotes: devServeRemotes,
dynamicRemotes: staticDynamicRemotes,
remotePorts,
staticRemotePort,
};
}

View File

@ -5,6 +5,7 @@ export type StaticRemoteConfig = {
basePath: string;
outputPath: string;
urlSegment: string;
port: number;
};
export type StaticRemotesConfig = {
@ -26,7 +27,9 @@ export function parseStaticRemotesConfig(
context.projectGraph.nodes[app].data.targets['build'].options.outputPath;
const basePath = dirname(outputPath);
const urlSegment = basename(outputPath);
config[app] = { basePath, outputPath, urlSegment };
const port =
context.projectGraph.nodes[app].data.targets['serve'].options.port;
config[app] = { basePath, outputPath, urlSegment, port };
}
return { remotes: staticRemotes, config };

View File

@ -0,0 +1,27 @@
import type { Express } from 'express';
import { logger } from '@nx/devkit';
import { StaticRemotesConfig } from './parse-static-remotes-config';
export function startRemoteProxies(
staticRemotesConfig: StaticRemotesConfig,
mappedLocationsOfRemotes: Record<string, string>
) {
const { createProxyMiddleware } = require('http-proxy-middleware');
const express = require('express');
logger.info(`NX Starting static remotes proxies...`);
for (const app of staticRemotesConfig.remotes) {
const expressProxy: Express = express();
expressProxy.use(
createProxyMiddleware({
target: mappedLocationsOfRemotes[app],
changeOrigin: true,
})
);
const proxyServer = expressProxy.listen(
staticRemotesConfig.config[app].port
);
process.on('SIGTERM', () => proxyServer.close());
process.on('exit', () => proxyServer.close());
}
logger.info(`NX Static remotes proxies started successfully`);
}

318
pnpm-lock.yaml generated
View File

@ -630,8 +630,8 @@ devDependencies:
specifier: ^0.6.12
version: 0.6.12(eslint@8.57.0)(typescript@5.5.3)
express:
specifier: ^4.18.1
version: 4.18.1
specifier: ^4.19.2
version: 4.19.2
fast-xml-parser:
specifier: ^4.2.7
version: 4.2.7
@ -665,6 +665,9 @@ devDependencies:
html-webpack-plugin:
specifier: 5.5.0
version: 5.5.0(webpack@5.88.0)
http-proxy-middleware:
specifier: ^3.0.0
version: 3.0.0
http-server:
specifier: 14.1.0
version: 14.1.0
@ -9239,7 +9242,7 @@ packages:
resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
dev: true
/@ljharb/through@2.3.13:
@ -13660,7 +13663,7 @@ packages:
esbuild-plugins-node-modules-polyfill: 1.6.1(esbuild@0.17.6)
execa: 5.1.1
exit-hook: 2.2.1
express: 4.18.2
express: 4.19.2
fs-extra: 10.1.0
get-port: 5.1.1
gunzip-maybe: 1.4.2
@ -14823,7 +14826,7 @@ packages:
'@types/find-cache-dir': 3.2.1
browser-assert: 1.2.1
es-module-lexer: 0.9.3
express: 4.18.2
express: 4.19.2
find-cache-dir: 3.3.2
fs-extra: 11.2.0
magic-string: 0.30.10
@ -14861,7 +14864,7 @@ packages:
case-sensitive-paths-webpack-plugin: 2.4.0
constants-browserify: 1.0.0
css-loader: 6.10.0(webpack@5.88.0)
express: 4.18.2
express: 4.19.2
fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.5.3)(webpack@5.88.0)
fs-extra: 11.2.0
html-webpack-plugin: 5.5.0(webpack@5.88.0)
@ -15069,7 +15072,7 @@ packages:
cli-table3: 0.6.3
compression: 1.7.4
detect-port: 1.5.1
express: 4.18.2
express: 4.19.2
fs-extra: 11.1.1
globby: 11.1.0
ip: 2.0.0
@ -18539,7 +18542,7 @@ packages:
/array-buffer-byte-length@1.0.0:
resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
is-array-buffer: 3.0.2
dev: true
@ -18578,10 +18581,10 @@ packages:
resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.0
es-abstract: 1.22.3
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
is-string: 1.0.7
dev: true
@ -18607,11 +18610,11 @@ packages:
resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-shim-unscopables: 1.0.0
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
dev: true
/array.prototype.flat@1.3.1:
@ -18628,7 +18631,7 @@ packages:
resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-shim-unscopables: 1.0.0
@ -18648,7 +18651,7 @@ packages:
resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-shim-unscopables: 1.0.0
@ -18669,10 +18672,10 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
array-buffer-byte-length: 1.0.0
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
is-array-buffer: 3.0.2
is-shared-array-buffer: 1.0.2
dev: true
@ -18869,7 +18872,7 @@ packages:
/axios@1.6.2:
resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==}
dependencies:
follow-redirects: 1.15.2(debug@4.3.4)
follow-redirects: 1.15.2
form-data: 4.0.0
proxy-from-env: 1.1.0
transitivePeerDependencies:
@ -18879,7 +18882,7 @@ packages:
/axios@1.7.2:
resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==}
dependencies:
follow-redirects: 1.15.6
follow-redirects: 1.15.6(debug@4.3.4)
form-data: 4.0.0
proxy-from-env: 1.1.0
transitivePeerDependencies:
@ -19425,26 +19428,6 @@ packages:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
dev: true
/body-parser@1.20.0:
resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
dependencies:
bytes: 3.1.2
content-type: 1.0.4
debug: 2.6.9
depd: 2.0.0
destroy: 1.2.0
http-errors: 2.0.0
iconv-lite: 0.4.24
on-finished: 2.4.1
qs: 6.10.3
raw-body: 2.5.1
type-is: 1.6.18
unpipe: 1.0.0
transitivePeerDependencies:
- supports-color
dev: true
/body-parser@1.20.1:
resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@ -19463,6 +19446,7 @@ packages:
unpipe: 1.0.0
transitivePeerDependencies:
- supports-color
dev: true
/body-parser@1.20.2:
resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
@ -19482,7 +19466,6 @@ packages:
unpipe: 1.0.0
transitivePeerDependencies:
- supports-color
dev: true
/bonjour-service@1.0.14:
resolution: {integrity: sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==}
@ -19828,8 +19811,9 @@ packages:
resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==}
dependencies:
function-bind: 1.1.2
get-intrinsic: 1.2.2
set-function-length: 1.2.0
get-intrinsic: 1.2.4
set-function-length: 1.2.2
dev: true
/call-bind@1.0.7:
resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
@ -19840,7 +19824,6 @@ packages:
function-bind: 1.1.2
get-intrinsic: 1.2.4
set-function-length: 1.2.2
dev: true
/call-me-maybe@1.0.1:
resolution: {integrity: sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==}
@ -20508,11 +20491,11 @@ packages:
/content-type@1.0.4:
resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
engines: {node: '>= 0.6'}
dev: true
/content-type@1.0.5:
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
dev: true
/conventional-changelog-angular@5.0.13:
resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==}
@ -20694,11 +20677,11 @@ packages:
/cookie@0.5.0:
resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
engines: {node: '>= 0.6'}
dev: true
/cookie@0.6.0:
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
dev: true
/cookies@0.8.0:
resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==}
@ -21662,14 +21645,6 @@ packages:
engines: {node: '>=10'}
dev: true
/define-data-property@1.1.1:
resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==}
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.2
gopd: 1.0.1
has-property-descriptors: 1.0.1
/define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@ -21677,7 +21652,6 @@ packages:
es-define-property: 1.0.0
es-errors: 1.3.0
gopd: 1.0.1
dev: true
/define-lazy-prop@2.0.0:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
@ -21692,7 +21666,7 @@ packages:
resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
engines: {node: '>= 0.4'}
dependencies:
has-property-descriptors: 1.0.1
has-property-descriptors: 1.0.2
object-keys: 1.1.1
dev: true
@ -21700,8 +21674,8 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.1
has-property-descriptors: 1.0.1
define-data-property: 1.1.4
has-property-descriptors: 1.0.2
object-keys: 1.1.1
dev: true
@ -22228,14 +22202,14 @@ packages:
resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
es-to-primitive: 1.2.1
function-bind: 1.1.2
function.prototype.name: 1.1.5
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
get-symbol-description: 1.0.0
has: 1.0.3
has-property-descriptors: 1.0.1
has-property-descriptors: 1.0.2
has-symbols: 1.0.3
internal-slot: 1.0.5
is-callable: 1.2.7
@ -22244,7 +22218,7 @@ packages:
is-shared-array-buffer: 1.0.2
is-string: 1.0.7
is-weakref: 1.0.2
object-inspect: 1.12.2
object-inspect: 1.13.1
object-keys: 1.1.1
object.assign: 4.1.4
regexp.prototype.flags: 1.5.1
@ -22261,15 +22235,15 @@ packages:
array-buffer-byte-length: 1.0.0
arraybuffer.prototype.slice: 1.0.2
available-typed-arrays: 1.0.5
call-bind: 1.0.5
call-bind: 1.0.7
es-set-tostringtag: 2.0.2
es-to-primitive: 1.2.1
function.prototype.name: 1.1.6
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
get-symbol-description: 1.0.0
globalthis: 1.0.3
gopd: 1.0.1
has-property-descriptors: 1.0.1
has-property-descriptors: 1.0.2
has-proto: 1.0.1
has-symbols: 1.0.3
hasown: 2.0.0
@ -22304,25 +22278,23 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.4
dev: true
/es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
dev: true
/es-iterator-helpers@1.0.15:
resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==}
dependencies:
asynciterator.prototype: 1.0.0
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
es-set-tostringtag: 2.0.2
function-bind: 1.1.2
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
globalthis: 1.0.3
has-property-descriptors: 1.0.1
has-property-descriptors: 1.0.2
has-proto: 1.0.1
has-symbols: 1.0.3
internal-slot: 1.0.5
@ -22345,7 +22317,7 @@ packages:
resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==}
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
has-tostringtag: 1.0.0
hasown: 2.0.0
dev: true
@ -23402,45 +23374,6 @@ packages:
resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==}
dev: true
/express@4.18.1:
resolution: {integrity: sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==}
engines: {node: '>= 0.10.0'}
dependencies:
accepts: 1.3.8
array-flatten: 1.1.1
body-parser: 1.20.0
content-disposition: 0.5.4
content-type: 1.0.4
cookie: 0.5.0
cookie-signature: 1.0.6
debug: 2.6.9
depd: 2.0.0
encodeurl: 1.0.2
escape-html: 1.0.3
etag: 1.8.1
finalhandler: 1.2.0
fresh: 0.5.2
http-errors: 2.0.0
merge-descriptors: 1.0.1
methods: 1.1.2
on-finished: 2.4.1
parseurl: 1.3.3
path-to-regexp: 0.1.7
proxy-addr: 2.0.7
qs: 6.10.3
range-parser: 1.2.1
safe-buffer: 5.2.1
send: 0.18.0
serve-static: 1.15.0
setprototypeof: 1.2.0
statuses: 2.0.1
type-is: 1.6.18
utils-merge: 1.0.1
vary: 1.1.2
transitivePeerDependencies:
- supports-color
dev: true
/express@4.18.2:
resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
engines: {node: '>= 0.10.0'}
@ -23478,6 +23411,7 @@ packages:
vary: 1.1.2
transitivePeerDependencies:
- supports-color
dev: true
/express@4.18.3:
resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==}
@ -23487,7 +23421,7 @@ packages:
array-flatten: 1.1.1
body-parser: 1.20.2
content-disposition: 0.5.4
content-type: 1.0.4
content-type: 1.0.5
cookie: 0.5.0
cookie-signature: 1.0.6
debug: 2.6.9
@ -23526,7 +23460,7 @@ packages:
array-flatten: 1.1.1
body-parser: 1.20.2
content-disposition: 0.5.4
content-type: 1.0.4
content-type: 1.0.5
cookie: 0.6.0
cookie-signature: 1.0.6
debug: 2.6.9
@ -23555,7 +23489,6 @@ packages:
vary: 1.1.2
transitivePeerDependencies:
- supports-color
dev: true
/ext-list@2.2.2:
resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==}
@ -23940,9 +23873,19 @@ packages:
resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
dev: true
/follow-redirects@1.15.2(debug@4.3.4):
/follow-redirects@1.15.2:
resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
debug:
optional: true
dev: false
/follow-redirects@1.15.6(debug@4.3.4):
resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
@ -23951,16 +23894,6 @@ packages:
dependencies:
debug: 4.3.4(supports-color@8.1.1)
/follow-redirects@1.15.6:
resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
peerDependenciesMeta:
debug:
optional: true
dev: true
/for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
dependencies:
@ -24255,7 +24188,7 @@ packages:
resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
functions-have-names: 1.2.3
@ -24265,7 +24198,7 @@ packages:
resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
functions-have-names: 1.2.3
@ -24335,6 +24268,7 @@ packages:
has-proto: 1.0.1
has-symbols: 1.0.3
hasown: 2.0.0
dev: true
/get-intrinsic@1.2.4:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
@ -24345,7 +24279,6 @@ packages:
has-proto: 1.0.1
has-symbols: 1.0.3
hasown: 2.0.0
dev: true
/get-nonce@1.0.1:
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
@ -24407,8 +24340,8 @@ packages:
resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
get-intrinsic: 1.2.2
call-bind: 1.0.7
get-intrinsic: 1.2.4
dev: true
/get-symbol-from-current-process-h@1.0.2:
@ -24766,7 +24699,7 @@ packages:
/gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
dependencies:
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
/got@11.8.6:
resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==}
@ -24896,16 +24829,10 @@ packages:
engines: {node: '>=8'}
dev: true
/has-property-descriptors@1.0.1:
resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==}
dependencies:
get-intrinsic: 1.2.2
/has-property-descriptors@1.0.2:
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
dependencies:
es-define-property: 1.0.0
dev: true
/has-proto@1.0.1:
resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
@ -25172,6 +25099,7 @@ packages:
setprototypeof: 1.1.1
statuses: 1.5.0
toidentifier: 1.0.0
dev: false
/http-errors@1.8.1:
resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==}
@ -25293,7 +25221,7 @@ packages:
engines: {node: '>=8.0.0'}
dependencies:
eventemitter3: 4.0.7
follow-redirects: 1.15.2(debug@4.3.4)
follow-redirects: 1.15.6(debug@4.3.4)
requires-port: 1.0.0
transitivePeerDependencies:
- debug
@ -25654,7 +25582,7 @@ packages:
resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
has: 1.0.3
side-channel: 1.0.4
dev: true
@ -25748,15 +25676,15 @@ packages:
resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
has-tostringtag: 1.0.0
dev: true
/is-array-buffer@3.0.2:
resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
dependencies:
call-bind: 1.0.5
get-intrinsic: 1.2.2
call-bind: 1.0.7
get-intrinsic: 1.2.4
is-typed-array: 1.1.12
dev: true
@ -25787,7 +25715,7 @@ packages:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
has-tostringtag: 1.0.0
dev: true
@ -25872,7 +25800,7 @@ packages:
/is-finalizationregistry@1.0.2:
resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
dev: true
/is-fullwidth-code-point@3.0.0:
@ -25967,7 +25895,7 @@ packages:
resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
dev: true
@ -26069,7 +25997,7 @@ packages:
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
has-tostringtag: 1.0.0
dev: true
@ -26080,7 +26008,7 @@ packages:
/is-shared-array-buffer@1.0.2:
resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
dev: true
/is-ssh@1.4.0:
@ -26136,7 +26064,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.5
call-bind: 1.0.7
es-abstract: 1.22.3
for-each: 0.3.3
has-tostringtag: 1.0.0
@ -26167,14 +26095,14 @@ packages:
/is-weakref@1.0.2:
resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
dev: true
/is-weakset@2.0.2:
resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
dependencies:
call-bind: 1.0.5
get-intrinsic: 1.2.2
call-bind: 1.0.7
get-intrinsic: 1.2.4
dev: true
/is-what@3.14.1:
@ -26314,7 +26242,7 @@ packages:
resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
dependencies:
define-properties: 1.2.1
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
has-symbols: 1.0.3
reflect.getprototypeof: 1.0.4
set-function-name: 2.0.1
@ -27242,7 +27170,7 @@ packages:
escape-html: 1.0.3
fresh: 0.5.2
http-assert: 1.5.0
http-errors: 1.7.3
http-errors: 1.8.1
is-generator-function: 1.0.10
koa-compose: 4.1.0
koa-convert: 1.2.0
@ -30078,18 +30006,14 @@ packages:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
/object-inspect@1.12.2:
resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
/object-inspect@1.13.1:
resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
dev: true
/object-is@1.1.5:
resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
dev: true
@ -30102,7 +30026,7 @@ packages:
resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
has-symbols: 1.0.3
object-keys: 1.1.1
@ -30130,7 +30054,7 @@ packages:
resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
dev: true
@ -30138,10 +30062,10 @@ packages:
/object.groupby@1.0.1:
resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
dev: true
/object.hasown@1.1.2:
@ -30164,7 +30088,7 @@ packages:
resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
dev: true
@ -32456,13 +32380,6 @@ packages:
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
dev: true
/qs@6.10.3:
resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
engines: {node: '>=0.6'}
dependencies:
side-channel: 1.0.4
dev: true
/qs@6.10.4:
resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==}
engines: {node: '>=0.6'}
@ -32536,6 +32453,7 @@ packages:
http-errors: 2.0.0
iconv-lite: 0.4.24
unpipe: 1.0.0
dev: true
/raw-body@2.5.2:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
@ -32545,7 +32463,6 @@ packages:
http-errors: 2.0.0
iconv-lite: 0.4.24
unpipe: 1.0.0
dev: true
/raw-loader@4.0.2(webpack@5.88.0):
resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==}
@ -33112,10 +33029,10 @@ packages:
resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
get-intrinsic: 1.2.2
get-intrinsic: 1.2.4
globalthis: 1.0.3
which-builtin-type: 1.1.3
dev: true
@ -33163,7 +33080,7 @@ packages:
resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
set-function-name: 2.0.1
dev: true
@ -33666,8 +33583,8 @@ packages:
resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==}
engines: {node: '>=0.4'}
dependencies:
call-bind: 1.0.5
get-intrinsic: 1.2.2
call-bind: 1.0.7
get-intrinsic: 1.2.4
has-symbols: 1.0.3
isarray: 2.0.5
dev: true
@ -33685,8 +33602,8 @@ packages:
/safe-regex-test@1.0.0:
resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
dependencies:
call-bind: 1.0.5
get-intrinsic: 1.2.2
call-bind: 1.0.7
get-intrinsic: 1.2.4
is-regex: 1.1.4
dev: true
@ -34021,16 +33938,6 @@ packages:
resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
dev: true
/set-function-length@1.2.0:
resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.1
function-bind: 1.1.2
get-intrinsic: 1.2.2
gopd: 1.0.1
has-property-descriptors: 1.0.1
/set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@ -34041,15 +33948,14 @@ packages:
get-intrinsic: 1.2.4
gopd: 1.0.1
has-property-descriptors: 1.0.2
dev: true
/set-function-name@2.0.1:
resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.1
define-data-property: 1.1.4
functions-have-names: 1.2.3
has-property-descriptors: 1.0.1
has-property-descriptors: 1.0.2
dev: true
/setimmediate-napi@1.0.6:
@ -34068,6 +33974,7 @@ packages:
/setprototypeof@1.1.1:
resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==}
dev: false
/setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@ -34146,9 +34053,9 @@ packages:
/side-channel@1.0.4:
resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
dependencies:
call-bind: 1.0.5
get-intrinsic: 1.2.2
object-inspect: 1.12.2
call-bind: 1.0.7
get-intrinsic: 1.2.4
object-inspect: 1.13.1
/siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
@ -34749,7 +34656,7 @@ packages:
resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
dev: true
@ -34757,7 +34664,7 @@ packages:
/string.prototype.trimend@1.0.5:
resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
dev: true
@ -34765,7 +34672,7 @@ packages:
/string.prototype.trimend@1.0.7:
resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
dev: true
@ -34773,7 +34680,7 @@ packages:
/string.prototype.trimstart@1.0.5:
resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
dev: true
@ -34781,7 +34688,7 @@ packages:
/string.prototype.trimstart@1.0.7:
resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.3
dev: true
@ -35640,6 +35547,7 @@ packages:
/toidentifier@1.0.0:
resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==}
engines: {node: '>=0.6'}
dev: false
/toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
@ -36087,8 +35995,8 @@ packages:
resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
get-intrinsic: 1.2.2
call-bind: 1.0.7
get-intrinsic: 1.2.4
is-typed-array: 1.1.12
dev: true
@ -36096,7 +36004,7 @@ packages:
resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
for-each: 0.3.3
has-proto: 1.0.1
is-typed-array: 1.1.12
@ -36107,7 +36015,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.5
call-bind: 1.0.7
for-each: 0.3.3
has-proto: 1.0.1
is-typed-array: 1.1.12
@ -36116,7 +36024,7 @@ packages:
/typed-array-length@1.0.4:
resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
for-each: 0.3.3
is-typed-array: 1.1.12
dev: true
@ -36194,7 +36102,7 @@ packages:
/unbox-primitive@1.0.2:
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
dependencies:
call-bind: 1.0.5
call-bind: 1.0.7
has-bigints: 1.0.2
has-symbols: 1.0.3
which-boxed-primitive: 1.0.2
@ -37658,7 +37566,7 @@ packages:
compression: 1.7.4
connect-history-api-fallback: 2.0.0
default-gateway: 6.0.3
express: 4.18.2
express: 4.19.2
graceful-fs: 4.2.10
html-entities: 2.3.3
http-proxy-middleware: 2.0.6(@types/express@4.17.15)
@ -38073,7 +37981,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.5
call-bind: 1.0.7
for-each: 0.3.3
gopd: 1.0.1
has-tostringtag: 1.0.0
@ -38084,7 +37992,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
available-typed-arrays: 1.0.5
call-bind: 1.0.5
call-bind: 1.0.7
es-abstract: 1.22.3
for-each: 0.3.3
has-tostringtag: 1.0.0