diff --git a/e2e/react/src/react-module-federation.test.ts b/e2e/react/src/react-module-federation.test.ts index d55ca519bb1a2..87cbd97baf7fa 100644 --- a/e2e/react/src/react-module-federation.test.ts +++ b/e2e/react/src/react-module-federation.test.ts @@ -20,13 +20,13 @@ import { join } from 'path'; import { createTreeWithEmptyWorkspace } from 'nx/src/devkit-testing-exports'; describe('React Module Federation', () => { - beforeAll(() => { - newProject({ packages: ['@nx/react'] }); - }); + describe('Default Configuration', () => { + beforeAll(() => { + newProject({ packages: ['@nx/react'] }); + }); - afterAll(() => cleanupProject()); + 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 diff --git a/package.json b/package.json index 108a778d2708c..2da74ed931eb8 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/packages/angular/ng-package.json b/packages/angular/ng-package.json index b9bfbdce2d90c..1973ef2d3805c 100644 --- a/packages/angular/ng-package.json +++ b/packages/angular/ng-package.json @@ -21,6 +21,9 @@ "ts-node", "tsconfig-paths", "semver", + "webpack", + "express", + "http-proxy-middleware", "http-server", "magic-string", "enquirer", diff --git a/packages/angular/src/executors/module-federation-dev-server/lib/build-static-remotes.ts b/packages/angular/src/executors/module-federation-dev-server/lib/build-static-remotes.ts index e8e4cb8a1e253..57ad6d8474904 100644 --- a/packages/angular/src/executors/module-federation-dev-server/lib/build-static-remotes.ts +++ b/packages/angular/src/executors/module-federation-dev-server/lib/build-static-remotes.ts @@ -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((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; } diff --git a/packages/angular/src/executors/module-federation-dev-server/lib/index.ts b/packages/angular/src/executors/module-federation-dev-server/lib/index.ts index 7b020a218cf4d..331719948e2b9 100644 --- a/packages/angular/src/executors/module-federation-dev-server/lib/index.ts +++ b/packages/angular/src/executors/module-federation-dev-server/lib/index.ts @@ -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'; diff --git a/packages/angular/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.ts b/packages/angular/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.ts index d15e028b3e2e9..135d49daca440 100644 --- a/packages/angular/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.ts +++ b/packages/angular/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.ts @@ -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) { diff --git a/packages/angular/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts b/packages/angular/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts index 4cd42dfea615f..655f4d666e8ff 100644 --- a/packages/angular/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts +++ b/packages/angular/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts @@ -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) => 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 }) => { diff --git a/packages/react/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts b/packages/react/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts index 8dc8b75e27cff..6a30320eb2790 100644 --- a/packages/react/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts +++ b/packages/react/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts @@ -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 | undefined; -}; - -export function parseStaticRemotesConfig( - staticRemotes: string[] | undefined, - context: ExecutorContext -): StaticRemotesConfig { - if (!staticRemotes?.length) { - return { remotes: [], config: undefined }; - } - - const config: Record = {}; - 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 }) => { diff --git a/packages/react/src/generators/host/lib/add-module-federation-files.ts b/packages/react/src/generators/host/lib/add-module-federation-files.ts index 9aaf8e35e7d4f..a3a6f97326811 100644 --- a/packages/react/src/generators/host/lib/add-module-federation-files.ts +++ b/packages/react/src/generators/host/lib/add-module-federation-files.ts @@ -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')} + }` + ); } } } diff --git a/packages/react/src/generators/remote/lib/add-remote-to-dynamic-host.ts b/packages/react/src/generators/remote/lib/add-remote-to-dynamic-host.ts index 42bd6d7b97964..fb1349493ae10 100644 --- a/packages/react/src/generators/remote/lib/add-remote-to-dynamic-host.ts +++ b/packages/react/src/generators/remote/lib/add-remote-to-dynamic-host.ts @@ -6,12 +6,14 @@ export function addRemoteToDynamicHost( remotePort: number, pathToMfManifest: string ) { - const current = tree.read(pathToMfManifest, 'utf8'); - tree.write( - pathToMfManifest, - JSON.stringify({ - ...JSON.parse(current), - [remoteName]: `http://localhost:${remotePort}`, - }) - ); + if (tree.exists(pathToMfManifest)) { + const current = tree.read(pathToMfManifest, 'utf8'); + tree.write( + pathToMfManifest, + JSON.stringify({ + ...JSON.parse(current), + [remoteName]: `http://localhost:${remotePort}`, + }) + ); + } } diff --git a/packages/webpack/package.json b/packages/webpack/package.json index b14c8422fd250..e4224dae1bba4 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -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", diff --git a/packages/webpack/src/utils/module-federation/get-remotes-for-host.ts b/packages/webpack/src/utils/module-federation/get-remotes-for-host.ts index 39495d730a9b2..93646ab0d7397 100644 --- a/packages/webpack/src/utils/module-federation/get-remotes-for-host.ts +++ b/packages/webpack/src/utils/module-federation/get-remotes-for-host.ts @@ -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, }; } diff --git a/packages/angular/src/executors/module-federation-dev-server/lib/parse-static-remotes-config.ts b/packages/webpack/src/utils/module-federation/parse-static-remotes-config.ts similarity index 83% rename from packages/angular/src/executors/module-federation-dev-server/lib/parse-static-remotes-config.ts rename to packages/webpack/src/utils/module-federation/parse-static-remotes-config.ts index baf79ada0ce42..460b6f7a2e3e8 100644 --- a/packages/angular/src/executors/module-federation-dev-server/lib/parse-static-remotes-config.ts +++ b/packages/webpack/src/utils/module-federation/parse-static-remotes-config.ts @@ -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 }; diff --git a/packages/webpack/src/utils/module-federation/start-remote-proxies.ts b/packages/webpack/src/utils/module-federation/start-remote-proxies.ts new file mode 100644 index 0000000000000..b3f004d4b4235 --- /dev/null +++ b/packages/webpack/src/utils/module-federation/start-remote-proxies.ts @@ -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 +) { + 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`); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2b17a3ed0df62..54c1de3e1c854 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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,7 +23873,7 @@ 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: @@ -23948,10 +23881,9 @@ packages: peerDependenciesMeta: debug: optional: true - dependencies: - debug: 4.3.4(supports-color@8.1.1) + dev: false - /follow-redirects@1.15.6: + /follow-redirects@1.15.6(debug@4.3.4): resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: @@ -23959,7 +23891,8 @@ packages: peerDependenciesMeta: debug: optional: true - dev: true + dependencies: + debug: 4.3.4(supports-color@8.1.1) /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -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