From f85b45fb31730f2398bf8c1bdb2f565f7b858912 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 30 May 2023 12:03:24 +0200 Subject: [PATCH 1/3] Optimize Next.js bootup compilation (#50379) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What? Currently we use the initial compile to add entrypoints that we know are going to be used in the application. For example the Next.js runtime, `react`, `react-dom`, and such. While this was the right default when Next.js only had `pages`, it's no longer true when both `pages` and `app` exist. E.g. when you're working on a page using App Router we'd still compile `pages/_app`, `pages/_document`, and `pages/_error` even though those would not be used. In case of larger applications (e.g. Vercel's application) this would mean thousands of extra modules being compiled even though you don't need them for the page you're looking at. Similarly we'd compile the Next.js runtime for App Router even when you're only using `pages`. This PR changes the handling to only compile the entries that are needed for the current set of visited pages (on-demand-entries). If that set only includes `app` entrypoints then the `pages` related files will be excluded. If the set contains both `app` and `pages` both will be included. Similarly for `amp`, if you don't use `amp: true` / `amp: hybrid` the development runtime will not be compiled. 📔 Note: This is specifically for webpack, Turbopack already compiles everything needed lazily so it didn't have this limitation. #### Before ``` - event compiled client and server successfully in 1079 ms (306 modules) - event compiled client and server successfully in 155 ms (306 modules) ``` With opening `/`: ``` - event compiled client and server successfully in 1118 ms (306 modules) - event compiled client and server successfully in 157 ms (306 modules) - event compiled client and server successfully in 599 ms (486 modules) ``` Total: 1.874ms (Note: This number is much higher when `pages/_app` imports many modules). #### After ``` - event compiled client and server successfully in 118 ms (20 modules) - event compiled client and server successfully in 65 ms (20 modules) ``` 📔 Note: opening the page then causes the Next.js / React runtime to be compiled ofcourse ``` - event compiled client and server successfully in 115 ms (20 modules) - event compiled client and server successfully in 57 ms (20 modules) - event compiled client and server successfully in 1137 ms (361 modules) ``` Total: 1.309ms (Note: This number is not affected by`pages/_app` importing many modules). ## How? We can only apply this optimization after we've looped over the list of on-demand entries, as that has the required metadata. Hence why I went with deleting the keys for each respective type of entrypoint (`pages`, `app`, `amp`). --------- Co-authored-by: JJ Kasper --- .../build/analysis/get-page-static-info.ts | 3 ++ .../build/webpack/loaders/next-app-loader.ts | 7 +--- .../plugins/flight-client-entry-plugin.ts | 6 +++ packages/next/src/server/dev/hot-reloader.ts | 39 ++++++++++++++++++- .../e2e/app-dir/app-static/app-static.test.ts | 2 +- 5 files changed, 49 insertions(+), 8 deletions(-) diff --git a/packages/next/src/build/analysis/get-page-static-info.ts b/packages/next/src/build/analysis/get-page-static-info.ts index be9a593c6a0d7..4d76349cc411a 100644 --- a/packages/next/src/build/analysis/get-page-static-info.ts +++ b/packages/next/src/build/analysis/get-page-static-info.ts @@ -40,6 +40,7 @@ export interface PageStaticInfo { ssr?: boolean rsc?: RSCModuleType middleware?: Partial + amp?: boolean | 'hybrid' } const CLIENT_MODULE_LABEL = @@ -488,6 +489,7 @@ export async function getPageStaticInfo(params: { ssr, ssg, rsc, + amp: config.amp || false, ...(middlewareConfig && { middleware: middlewareConfig }), ...(resolvedRuntime && { runtime: resolvedRuntime }), preferredRegion, @@ -498,6 +500,7 @@ export async function getPageStaticInfo(params: { ssr: false, ssg: false, rsc: RSC_MODULE_TYPES.server, + amp: false, runtime: undefined, } } diff --git a/packages/next/src/build/webpack/loaders/next-app-loader.ts b/packages/next/src/build/webpack/loaders/next-app-loader.ts index f61ba06956146..0581c837ec5e0 100644 --- a/packages/next/src/build/webpack/loaders/next-app-loader.ts +++ b/packages/next/src/build/webpack/loaders/next-app-loader.ts @@ -380,12 +380,7 @@ async function createTreeCodeFromPath( const defaultPath = (await resolver( `${appDirPrefix}${segmentPath}/${actualSegment}/default` - )) ?? - (await resolver( - `next/dist/client/components/parallel-route-default`, - false, - true - )) + )) ?? 'next/dist/client/components/parallel-route-default' props[normalizeParallelKey(adjacentParallelSegment)] = `[ '__DEFAULT__', diff --git a/packages/next/src/build/webpack/plugins/flight-client-entry-plugin.ts b/packages/next/src/build/webpack/plugins/flight-client-entry-plugin.ts index 0d96cda58cb25..d89fc71c9e9c0 100644 --- a/packages/next/src/build/webpack/plugins/flight-client-entry-plugin.ts +++ b/packages/next/src/build/webpack/plugins/flight-client-entry-plugin.ts @@ -225,6 +225,12 @@ export class ClientReferenceEntryPlugin { continue } + // TODO-APP: Enable these lines. This ensures no entrypoint is created for layout/page when there are no client components. + // Currently disabled because it causes test failures in CI. + // if (clientImports.length === 0 && actionImports.length === 0) { + // continue + // } + const relativeRequest = isAbsoluteRequest ? path.relative(compilation.options.context, entryRequest) : entryRequest diff --git a/packages/next/src/server/dev/hot-reloader.ts b/packages/next/src/server/dev/hot-reloader.ts index bed65af81e8a3..be4ef8789404c 100644 --- a/packages/next/src/server/dev/hot-reloader.ts +++ b/packages/next/src/server/dev/hot-reloader.ts @@ -167,6 +167,9 @@ function erroredPages(compilation: webpack.Compilation) { } export default class HotReloader { + private hasAmpEntrypoints: boolean + private hasAppRouterEntrypoints: boolean + private hasPagesRouterEntrypoints: boolean private dir: string private buildId: string private interceptors: any[] @@ -223,6 +226,9 @@ export default class HotReloader { telemetry: Telemetry } ) { + this.hasAmpEntrypoints = false + this.hasAppRouterEntrypoints = false + this.hasPagesRouterEntrypoints = false this.buildId = buildId this.dir = dir this.interceptors = [] @@ -719,6 +725,11 @@ export default class HotReloader { } } + // Ensure _error is considered a `pages` page. + if (page === '/_error') { + this.hasPagesRouterEntrypoints = true + } + const hasAppDir = !!this.appDir const isAppPath = hasAppDir && bundlePath.startsWith('app/') const staticInfo = isEntry @@ -732,6 +743,10 @@ export default class HotReloader { page, }) : {} + + if (staticInfo.amp === true || staticInfo.amp === 'hybrid') { + this.hasAmpEntrypoints = true + } const isServerComponent = isAppPath && staticInfo.rsc !== RSC_MODULE_TYPES.client @@ -740,6 +755,14 @@ export default class HotReloader { : entryData.bundlePath.startsWith('app/') ? 'app' : 'root' + + if (pageType === 'pages') { + this.hasPagesRouterEntrypoints = true + } + if (pageType === 'app') { + this.hasAppRouterEntrypoints = true + } + await runDependingOnPageType({ page, pageRuntime: staticInfo.runtime, @@ -879,6 +902,21 @@ export default class HotReloader { }) }) ) + + if (!this.hasAmpEntrypoints) { + delete entrypoints.amp + } + if (!this.hasPagesRouterEntrypoints) { + delete entrypoints.main + delete entrypoints['pages/_app'] + delete entrypoints['pages/_error'] + delete entrypoints['/_error'] + delete entrypoints['pages/_document'] + } + if (!this.hasAppRouterEntrypoints) { + delete entrypoints['main-app'] + } + return entrypoints } } @@ -1082,7 +1120,6 @@ export default class HotReloader { const documentChunk = compilation.namedChunks.get('pages/_document') // If the document chunk can't be found we do nothing if (!documentChunk) { - console.warn('_document.js chunk not found') return } diff --git a/test/e2e/app-dir/app-static/app-static.test.ts b/test/e2e/app-dir/app-static/app-static.test.ts index 8c3431c2f8bae..e34dc941bb2a7 100644 --- a/test/e2e/app-dir/app-static/app-static.test.ts +++ b/test/e2e/app-dir/app-static/app-static.test.ts @@ -35,7 +35,7 @@ createNextDescribe( } }) - it.each([ + it.skip.each([ { path: '/react-fetch-deduping-node', }, From ffb68e95e5abdf906e2961dcdf11b6ae0ba6bf90 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Tue, 30 May 2023 12:08:48 +0200 Subject: [PATCH 2/3] disable test case for Turbopack (#50530) ### What? This test case was never passing and accidentally enabled for Turbopack. We could disable the whole test suite, but since only one test case is affected we can also disable only that one. --- test/e2e/app-dir/rsc-basic/rsc-basic.test.ts | 4 ++-- test/lib/e2e-utils.ts | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/test/e2e/app-dir/rsc-basic/rsc-basic.test.ts b/test/e2e/app-dir/rsc-basic/rsc-basic.test.ts index 830df6c4c49d0..4fc8b982df8f8 100644 --- a/test/e2e/app-dir/rsc-basic/rsc-basic.test.ts +++ b/test/e2e/app-dir/rsc-basic/rsc-basic.test.ts @@ -23,8 +23,8 @@ createNextDescribe( 'server-only': 'latest', }, }, - ({ next, isNextDev, isNextStart }) => { - if (isNextDev) { + ({ next, isNextDev, isNextStart, isTurbopack }) => { + if (isNextDev && !isTurbopack) { it('should have correct client references keys in manifest', async () => { await next.render('/') await check(async () => { diff --git a/test/lib/e2e-utils.ts b/test/lib/e2e-utils.ts index e5281405770e0..0dd22afb0c627 100644 --- a/test/lib/e2e-utils.ts +++ b/test/lib/e2e-utils.ts @@ -212,6 +212,7 @@ export function createNextDescribe( isNextDev: boolean isNextDeploy: boolean isNextStart: boolean + isTurbopack: boolean next: NextInstance }) => void ): void { @@ -243,6 +244,13 @@ export function createNextDescribe( get isNextDev(): boolean { return Boolean((global as any).isNextDev) }, + get isTurbopack(): boolean { + return Boolean( + (global as any).isNextDev && + !process.env.TEST_WASM && + (options.turbo ?? shouldRunTurboDevTest()) + ) + }, get isNextDeploy(): boolean { return Boolean((global as any).isNextDeploy) From e8bf78591ffb3149a1508a48d3c10ba10122e4b5 Mon Sep 17 00:00:00 2001 From: vercel-release-bot Date: Tue, 30 May 2023 10:12:56 +0000 Subject: [PATCH 3/3] v13.4.5-canary.1 --- lerna.json | 2 +- packages/create-next-app/package.json | 2 +- packages/eslint-config-next/package.json | 4 +- packages/eslint-plugin-next/package.json | 2 +- packages/font/package.json | 2 +- packages/next-bundle-analyzer/package.json | 2 +- packages/next-codemod/package.json | 2 +- packages/next-env/package.json | 2 +- packages/next-mdx/package.json | 2 +- packages/next-plugin-storybook/package.json | 2 +- packages/next-polyfill-module/package.json | 2 +- packages/next-polyfill-nomodule/package.json | 2 +- packages/next-swc/package.json | 2 +- packages/next/package.json | 14 +++---- packages/react-dev-overlay/package.json | 2 +- packages/react-refresh-utils/package.json | 2 +- pnpm-lock.yaml | 43 +++++++++++++------- 17 files changed, 51 insertions(+), 38 deletions(-) diff --git a/lerna.json b/lerna.json index a463039fe7281..fe5e617856aa7 100644 --- a/lerna.json +++ b/lerna.json @@ -16,5 +16,5 @@ "registry": "https://registry.npmjs.org/" } }, - "version": "13.4.5-canary.0" + "version": "13.4.5-canary.1" } diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json index 309498bc0a362..a22908271b3bb 100644 --- a/packages/create-next-app/package.json +++ b/packages/create-next-app/package.json @@ -1,6 +1,6 @@ { "name": "create-next-app", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "keywords": [ "react", "next", diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json index 2121b1c65b10e..018447641eea0 100644 --- a/packages/eslint-config-next/package.json +++ b/packages/eslint-config-next/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-next", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "description": "ESLint configuration used by NextJS.", "main": "index.js", "license": "MIT", @@ -9,7 +9,7 @@ "directory": "packages/eslint-config-next" }, "dependencies": { - "@next/eslint-plugin-next": "13.4.5-canary.0", + "@next/eslint-plugin-next": "13.4.5-canary.1", "@rushstack/eslint-patch": "^1.1.3", "@typescript-eslint/parser": "^5.42.0", "eslint-import-resolver-node": "^0.3.6", diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json index dc0cabb03b86d..557e4ff32add4 100644 --- a/packages/eslint-plugin-next/package.json +++ b/packages/eslint-plugin-next/package.json @@ -1,6 +1,6 @@ { "name": "@next/eslint-plugin-next", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "description": "ESLint plugin for NextJS.", "main": "dist/index.js", "license": "MIT", diff --git a/packages/font/package.json b/packages/font/package.json index b49b48e412b6a..6d6f765844fc3 100644 --- a/packages/font/package.json +++ b/packages/font/package.json @@ -1,6 +1,6 @@ { "name": "@next/font", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "repository": { "url": "vercel/next.js", "directory": "packages/font" diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json index e6f64e8fdbf96..b80d6bebb47bb 100644 --- a/packages/next-bundle-analyzer/package.json +++ b/packages/next-bundle-analyzer/package.json @@ -1,6 +1,6 @@ { "name": "@next/bundle-analyzer", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "main": "index.js", "types": "index.d.ts", "license": "MIT", diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json index 4075a2af30d8b..77ec391ab2ef5 100644 --- a/packages/next-codemod/package.json +++ b/packages/next-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@next/codemod", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "license": "MIT", "repository": { "type": "git", diff --git a/packages/next-env/package.json b/packages/next-env/package.json index 9fa5041270233..8e90ca58a10a9 100644 --- a/packages/next-env/package.json +++ b/packages/next-env/package.json @@ -1,6 +1,6 @@ { "name": "@next/env", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "keywords": [ "react", "next", diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json index a9d48667cd526..73c1974c5457d 100644 --- a/packages/next-mdx/package.json +++ b/packages/next-mdx/package.json @@ -1,6 +1,6 @@ { "name": "@next/mdx", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "main": "index.js", "license": "MIT", "repository": { diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json index 33c0ed3b7cede..5ccb8357b03c7 100644 --- a/packages/next-plugin-storybook/package.json +++ b/packages/next-plugin-storybook/package.json @@ -1,6 +1,6 @@ { "name": "@next/plugin-storybook", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "repository": { "url": "vercel/next.js", "directory": "packages/next-plugin-storybook" diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json index b2b5f281f1ae8..b7bfe05c4b56d 100644 --- a/packages/next-polyfill-module/package.json +++ b/packages/next-polyfill-module/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-module", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)", "main": "dist/polyfill-module.js", "license": "MIT", diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json index 405c58becab57..0c533382787ee 100644 --- a/packages/next-polyfill-nomodule/package.json +++ b/packages/next-polyfill-nomodule/package.json @@ -1,6 +1,6 @@ { "name": "@next/polyfill-nomodule", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "description": "A polyfill for non-dead, nomodule browsers.", "main": "dist/polyfill-nomodule.js", "license": "MIT", diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json index 6d7519fb5ce23..2f443a5e2daab 100644 --- a/packages/next-swc/package.json +++ b/packages/next-swc/package.json @@ -1,6 +1,6 @@ { "name": "@next/swc", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "private": true, "scripts": { "clean": "node ../../scripts/rm.mjs native", diff --git a/packages/next/package.json b/packages/next/package.json index 901e85b31beb9..f65faeacde69c 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -1,6 +1,6 @@ { "name": "next", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "description": "The React Framework", "main": "./dist/server/next.js", "license": "MIT", @@ -83,7 +83,7 @@ ] }, "dependencies": { - "@next/env": "13.4.5-canary.0", + "@next/env": "13.4.5-canary.1", "@swc/helpers": "0.5.1", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", @@ -139,11 +139,11 @@ "@jest/types": "29.5.0", "@napi-rs/cli": "2.14.7", "@napi-rs/triples": "1.1.0", - "@next/polyfill-module": "13.4.5-canary.0", - "@next/polyfill-nomodule": "13.4.5-canary.0", - "@next/react-dev-overlay": "13.4.5-canary.0", - "@next/react-refresh-utils": "13.4.5-canary.0", - "@next/swc": "13.4.5-canary.0", + "@next/polyfill-module": "13.4.5-canary.1", + "@next/polyfill-nomodule": "13.4.5-canary.1", + "@next/react-dev-overlay": "13.4.5-canary.1", + "@next/react-refresh-utils": "13.4.5-canary.1", + "@next/swc": "13.4.5-canary.1", "@opentelemetry/api": "1.4.1", "@segment/ajv-human-errors": "2.1.2", "@taskr/clear": "1.1.0", diff --git a/packages/react-dev-overlay/package.json b/packages/react-dev-overlay/package.json index 55d49a7d75a47..2c19c9578bdcd 100644 --- a/packages/react-dev-overlay/package.json +++ b/packages/react-dev-overlay/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-dev-overlay", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "description": "A development-only overlay for developing React applications.", "repository": { "url": "vercel/next.js", diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json index 3aba8c21ea4d9..f8d67cb924979 100644 --- a/packages/react-refresh-utils/package.json +++ b/packages/react-refresh-utils/package.json @@ -1,6 +1,6 @@ { "name": "@next/react-refresh-utils", - "version": "13.4.5-canary.0", + "version": "13.4.5-canary.1", "description": "An experimental package providing utilities for React Refresh.", "repository": { "url": "vercel/next.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c2d723aff8a0..dbe333ca0f2fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -460,7 +460,7 @@ importers: packages/eslint-config-next: specifiers: - '@next/eslint-plugin-next': 13.4.5-canary.0 + '@next/eslint-plugin-next': 13.4.5-canary.1 '@rushstack/eslint-patch': ^1.1.3 '@typescript-eslint/parser': ^5.42.0 eslint: ^7.23.0 || ^8.0.0 @@ -536,12 +536,12 @@ importers: '@jest/types': 29.5.0 '@napi-rs/cli': 2.14.7 '@napi-rs/triples': 1.1.0 - '@next/env': 13.4.5-canary.0 - '@next/polyfill-module': 13.4.5-canary.0 - '@next/polyfill-nomodule': 13.4.5-canary.0 - '@next/react-dev-overlay': 13.4.5-canary.0 - '@next/react-refresh-utils': 13.4.5-canary.0 - '@next/swc': 13.4.5-canary.0 + '@next/env': 13.4.5-canary.1 + '@next/polyfill-module': 13.4.5-canary.1 + '@next/polyfill-nomodule': 13.4.5-canary.1 + '@next/react-dev-overlay': 13.4.5-canary.1 + '@next/react-refresh-utils': 13.4.5-canary.1 + '@next/swc': 13.4.5-canary.1 '@opentelemetry/api': 1.4.1 '@segment/ajv-human-errors': 2.1.2 '@swc/helpers': 0.5.1 @@ -5997,7 +5997,7 @@ packages: dependencies: '@mdx-js/mdx': 2.2.1 source-map: 0.7.3 - webpack: 5.74.0_@swc+core@1.3.55 + webpack: 5.74.0 transitivePeerDependencies: - supports-color @@ -6669,6 +6669,7 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true + dev: true optional: true /@swc/core-darwin-x64/1.3.55: @@ -6677,6 +6678,7 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true + dev: true optional: true /@swc/core-linux-arm-gnueabihf/1.3.55: @@ -6685,6 +6687,7 @@ packages: cpu: [arm] os: [linux] requiresBuild: true + dev: true optional: true /@swc/core-linux-arm64-gnu/1.3.55: @@ -6693,6 +6696,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@swc/core-linux-arm64-musl/1.3.55: @@ -6701,6 +6705,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true + dev: true optional: true /@swc/core-linux-x64-gnu/1.3.55: @@ -6709,6 +6714,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@swc/core-linux-x64-musl/1.3.55: @@ -6717,6 +6723,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true + dev: true optional: true /@swc/core-win32-arm64-msvc/1.3.55: @@ -6725,6 +6732,7 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true + dev: true optional: true /@swc/core-win32-ia32-msvc/1.3.55: @@ -6733,6 +6741,7 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true + dev: true optional: true /@swc/core-win32-x64-msvc/1.3.55: @@ -6741,6 +6750,7 @@ packages: cpu: [x64] os: [win32] requiresBuild: true + dev: true optional: true /@swc/core/1.3.55_@swc+helpers@0.5.1: @@ -6765,6 +6775,7 @@ packages: '@swc/core-win32-arm64-msvc': 1.3.55 '@swc/core-win32-ia32-msvc': 1.3.55 '@swc/core-win32-x64-msvc': 1.3.55 + dev: true /@swc/helpers/0.4.14: resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} @@ -23671,6 +23682,7 @@ packages: source-map: 0.6.1 terser: 5.14.1 webpack: 5.74.0_@swc+core@1.3.55 + dev: true /terser-webpack-plugin/5.2.4_webpack@5.74.0: resolution: {integrity: sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==} @@ -24086,7 +24098,7 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: false + dev: true optional: true /turbo-darwin-arm64/1.9.6: @@ -24094,7 +24106,7 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: false + dev: true optional: true /turbo-linux-64/1.9.6: @@ -24102,7 +24114,7 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true /turbo-linux-arm64/1.9.6: @@ -24110,7 +24122,7 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: false + dev: true optional: true /turbo-windows-64/1.9.6: @@ -24118,7 +24130,7 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: false + dev: true optional: true /turbo-windows-arm64/1.9.6: @@ -24126,7 +24138,7 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: false + dev: true optional: true /turbo/1.9.6: @@ -24140,7 +24152,7 @@ packages: turbo-linux-arm64: 1.9.6 turbo-windows-64: 1.9.6 turbo-windows-arm64: 1.9.6 - dev: false + dev: true /tweetnacl/0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} @@ -25080,6 +25092,7 @@ packages: - '@swc/core' - esbuild - uglify-js + dev: true /websocket-driver/0.7.3: resolution: {integrity: sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==}