next.js/test/production/next-server-nft/next-server-nft.test.ts
next-server-nft.test.ts524 lines29.2 KB
import { nextTestSetup } from 'e2e-utils'
import path from 'path'
import fs from 'fs'

const isReact18 = parseInt(process.env.NEXT_TEST_REACT_VERSION) === 18

async function readNormalizedNFT(next, name) {
  const data = await next.readJSON(name)
  const result = [
    ...new Set(
      data.files
        .filter((file: string) => {
          // They are important, but they are never actually included by themselves but rather as
          // part of some JS files in the same directory tree, which are higher-signal for the
          // screenshot below.
          if (file.endsWith('/package.json')) {
            return false
          }

          // Filter out the many symlinks that power node_modules
          const fileAbsolute = path.join(next.testDir, name, '..', file)
          try {
            if (fs.lstatSync(fileAbsolute).isSymbolicLink()) {
              return false
            }
          } catch (e) {
            // File doesn't exist - this is a bug in the NFT generation!
            // Keep it in the list so the test can catch it
          }
          return true
        })
        .map((file: string) => {
          // Normalize sharp, different architectures have different files
          if (file.includes('/node_modules/@img/sharp-libvips-')) {
            return '/node_modules/@img/sharp-libvips-*'
          }
          if (
            file.match(
              /\/node_modules\/@img\/sharp-\w+-\w+\/lib\/sharp-\w+-\w+.node$/
            )
          ) {
            return '/node_modules/@img/sharp-*/sharp-*.node'
          }

          // Strip double node_modules to simplify output
          const firstNodeModules = file.indexOf('/node_modules/')
          const lastNodeModules = file.lastIndexOf('/node_modules/')
          if (firstNodeModules !== lastNodeModules) {
            return file.slice(lastNodeModules)
          }

          return file
        })
    ),
  ]
  result.sort()
  return result
}

// Only run this test for Turbopack as it is more conservative (i.e. aggressive) in including
// referenced files and might include too many. (The Webpack snapshots would different slightly from
// the Turbopack ones below.)
//
// This test is not meant for testing correctness (which is done by the behavioral tests), but as a
// regression test to ensure that some stray `path.join` doesn't cause all of the Next.js package to
// get included.
//
// Also skip alternate React versions, as they would require different snapshots.
;(process.env.IS_TURBOPACK_TEST && !isReact18 ? describe : describe.skip)(
  'next-server-nft',
  () => {
    describe('with output:standalone', () => {
      const { next, skipped } = nextTestSetup({
        files: __dirname,
        dependencies: {
          typescript: '5.9.2',
        },
        nextConfig: {
          output: 'standalone',
        },
      })

      if (skipped) {
        return
      }

      it('should not trace too many files in next-server.js.nft.json', async () => {
        const trace = await readNormalizedNFT(
          next,
          '.next/next-server.js.nft.json'
        )

        // Group the entries together so that the snapshot doesn't change too often.
        // This trace contains quite a lot of files that aren't actually needed. But there isn't much
        // that Turbopack itself can do about that.
        const traceGrouped = [
          ...new Set(
            trace.map((file: string) => {
              if (file.startsWith('/node_modules/next/')) {
                if (file.startsWith('/node_modules/next/dist/client/')) {
                  return '/node_modules/next/dist/client/*'
                }
                if (file.startsWith('/node_modules/next/dist/server/')) {
                  return '/node_modules/next/dist/server/*'
                }
                if (file.startsWith('/node_modules/next/dist/shared/')) {
                  return '/node_modules/next/dist/shared/*'
                }
              } else if (
                file.startsWith('/node_modules/react') ||
                file.endsWith('.node')
              ) {
                return file
              } else {
                let match = /^\/node_modules\/(@[^/]+\/[^/]+|[^/]+)\//.exec(
                  file
                )
                if (match != null) {
                  return `/node_modules/${match[1]}/*`
                }
              }
              return file
            })
          ),
        ]

        expect(traceGrouped).toMatchInlineSnapshot(`
         [
           "/node_modules/@img/colour/*",
           "/node_modules/@img/sharp-*/sharp-*.node",
           "/node_modules/@img/*",
           "/node_modules/@next/env/*",
           "/node_modules/@swc/helpers/*",
           "/node_modules/client-only/*",
           "/node_modules/detect-libc/*",
           "/node_modules/next/dist/build/adapter/setup-node-env.external.js",
           "/node_modules/next/dist/build/define-env.js",
           "/node_modules/next/dist/build/duration-to-string.js",
           "/node_modules/next/dist/build/get-supported-browsers.js",
           "/node_modules/next/dist/build/next-config-ts/require-hook.js",
           "/node_modules/next/dist/build/next-config-ts/transpile-config.js",
           "/node_modules/next/dist/build/output/format.js",
           "/node_modules/next/dist/build/output/log.js",
           "/node_modules/next/dist/build/segment-config/app/app-segment-config.js",
           "/node_modules/next/dist/build/segment-config/app/app-segments.js",
           "/node_modules/next/dist/build/segment-config/app/collect-root-param-keys.js",
           "/node_modules/next/dist/build/static-paths/app.js",
           "/node_modules/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js",
           "/node_modules/next/dist/build/static-paths/pages.js",
           "/node_modules/next/dist/build/static-paths/utils.js",
           "/node_modules/next/dist/build/swc/helpers.js",
           "/node_modules/next/dist/build/swc/index.js",
           "/node_modules/next/dist/build/swc/install-bindings.js",
           "/node_modules/next/dist/build/swc/jest-transformer.js",
           "/node_modules/next/dist/build/swc/loaderWorkerPool.js",
           "/node_modules/next/dist/build/swc/options.js",
           "/node_modules/next/dist/build/swc/types.js",
           "/node_modules/next/dist/build/utils.js",
           "/node_modules/next/dist/cli/next-test.js",
           "/node_modules/next/dist/client/*",
           "/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js",
           "/node_modules/next/dist/compiled/@edge-runtime/ponyfill/index.js",
           "/node_modules/next/dist/compiled/@edge-runtime/primitives/abort-controller.js.text.js",
           "/node_modules/next/dist/compiled/@edge-runtime/primitives/console.js.text.js",
           "/node_modules/next/dist/compiled/@edge-runtime/primitives/events.js.text.js",
           "/node_modules/next/dist/compiled/@edge-runtime/primitives/index.js",
           "/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js",
           "/node_modules/next/dist/compiled/@edge-runtime/primitives/stream.js",
           "/node_modules/next/dist/compiled/@edge-runtime/primitives/timers.js.text.js",
           "/node_modules/next/dist/compiled/@edge-runtime/primitives/url.js.text.js",
           "/node_modules/next/dist/compiled/@hapi/accept/index.js",
           "/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js",
           "/node_modules/next/dist/compiled/@napi-rs/triples/index.js",
           "/node_modules/next/dist/compiled/@opentelemetry/api/index.js",
           "/node_modules/next/dist/compiled/async-retry/index.js",
           "/node_modules/next/dist/compiled/async-sema/index.js",
           "/node_modules/next/dist/compiled/busboy/index.js",
           "/node_modules/next/dist/compiled/bytes/index.js",
           "/node_modules/next/dist/compiled/ci-info/index.js",
           "/node_modules/next/dist/compiled/commander/index.js",
           "/node_modules/next/dist/compiled/comment-json/index.js",
           "/node_modules/next/dist/compiled/compression/index.js",
           "/node_modules/next/dist/compiled/conf/index.js",
           "/node_modules/next/dist/compiled/content-disposition/index.js",
           "/node_modules/next/dist/compiled/cookie/index.js",
           "/node_modules/next/dist/compiled/cross-spawn/index.js",
           "/node_modules/next/dist/compiled/debug/index.js",
           "/node_modules/next/dist/compiled/edge-runtime/index.js",
           "/node_modules/next/dist/compiled/find-up/index.js",
           "/node_modules/next/dist/compiled/fresh/index.js",
           "/node_modules/next/dist/compiled/http-proxy/index.js",
           "/node_modules/next/dist/compiled/image-detector/detector.js",
           "/node_modules/next/dist/compiled/image-size/index.js",
           "/node_modules/next/dist/compiled/ipaddr.js/ipaddr.js",
           "/node_modules/next/dist/compiled/is-animated/index.js",
           "/node_modules/next/dist/compiled/is-docker/index.js",
           "/node_modules/next/dist/compiled/is-wsl/index.js",
           "/node_modules/next/dist/compiled/jsonwebtoken/index.js",
           "/node_modules/next/dist/compiled/nanoid/index.cjs",
           "/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js",
           "/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",
           "/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js",
           "/node_modules/next/dist/compiled/p-limit/index.js",
           "/node_modules/next/dist/compiled/p-queue/index.js",
           "/node_modules/next/dist/compiled/path-browserify/index.js",
           "/node_modules/next/dist/compiled/path-to-regexp/index.js",
           "/node_modules/next/dist/compiled/picomatch/index.js",
           "/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js",
           "/node_modules/next/dist/compiled/react-is/cjs/react-is.production.js",
           "/node_modules/next/dist/compiled/react-is/index.js",
           "/node_modules/next/dist/compiled/regenerator-runtime/runtime.js",
           "/node_modules/next/dist/compiled/semver/index.js",
           "/node_modules/next/dist/compiled/send/index.js",
           "/node_modules/next/dist/compiled/source-map/source-map.js",
           "/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js",
           "/node_modules/next/dist/compiled/string-hash/index.js",
           "/node_modules/next/dist/compiled/strip-ansi/index.js",
           "/node_modules/next/dist/compiled/superstruct/index.cjs",
           "/node_modules/next/dist/compiled/tar/index.min.js",
           "/node_modules/next/dist/compiled/text-table/index.js",
           "/node_modules/next/dist/compiled/watchpack/watchpack.js",
           "/node_modules/next/dist/compiled/write-file-atomic/index.js",
           "/node_modules/next/dist/compiled/ws/index.js",
           "/node_modules/next/dist/compiled/zod-validation-error/index.js",
           "/node_modules/next/dist/compiled/zod/index.cjs",
           "/node_modules/next/dist/experimental/testmode/context.js",
           "/node_modules/next/dist/experimental/testmode/fetch.js",
           "/node_modules/next/dist/experimental/testmode/httpget.js",
           "/node_modules/next/dist/experimental/testmode/server-edge.js",
           "/node_modules/next/dist/experimental/testmode/server.js",
           "/node_modules/next/dist/export/helpers/create-incremental-cache.js",
           "/node_modules/next/dist/lib/batcher.js",
           "/node_modules/next/dist/lib/build-custom-route.js",
           "/node_modules/next/dist/lib/bundler.js",
           "/node_modules/next/dist/lib/client-and-server-references.js",
           "/node_modules/next/dist/lib/coalesced-function.js",
           "/node_modules/next/dist/lib/compile-error.js",
           "/node_modules/next/dist/lib/constants.js",
           "/node_modules/next/dist/lib/create-client-router-filter.js",
           "/node_modules/next/dist/lib/default-transpiled-packages.json",
           "/node_modules/next/dist/lib/detached-promise.js",
           "/node_modules/next/dist/lib/detect-typo.js",
           "/node_modules/next/dist/lib/download-swc.js",
           "/node_modules/next/dist/lib/error-telemetry-utils.js",
           "/node_modules/next/dist/lib/fallback.js",
           "/node_modules/next/dist/lib/file-exists.js",
           "/node_modules/next/dist/lib/find-config.js",
           "/node_modules/next/dist/lib/find-pages-dir.js",
           "/node_modules/next/dist/lib/find-root.js",
           "/node_modules/next/dist/lib/format-cli-help-output.js",
           "/node_modules/next/dist/lib/format-dynamic-import-path.js",
           "/node_modules/next/dist/lib/format-server-error.js",
           "/node_modules/next/dist/lib/framework/boundary-components.js",
           "/node_modules/next/dist/lib/framework/boundary-constants.js",
           "/node_modules/next/dist/lib/fs/rename.js",
           "/node_modules/next/dist/lib/fs/write-atomic.js",
           "/node_modules/next/dist/lib/generate-interception-routes-rewrites.js",
           "/node_modules/next/dist/lib/get-files-in-dir.js",
           "/node_modules/next/dist/lib/get-network-host.js",
           "/node_modules/next/dist/lib/get-package-version.js",
           "/node_modules/next/dist/lib/get-project-dir.js",
           "/node_modules/next/dist/lib/has-necessary-dependencies.js",
           "/node_modules/next/dist/lib/helpers/get-cache-directory.js",
           "/node_modules/next/dist/lib/helpers/get-npx-command.js",
           "/node_modules/next/dist/lib/helpers/get-online.js",
           "/node_modules/next/dist/lib/helpers/get-pkg-manager.js",
           "/node_modules/next/dist/lib/helpers/get-registry.js",
           "/node_modules/next/dist/lib/helpers/get-reserved-port.js",
           "/node_modules/next/dist/lib/helpers/git.js",
           "/node_modules/next/dist/lib/helpers/install.js",
           "/node_modules/next/dist/lib/import-next-warning.js",
           "/node_modules/next/dist/lib/inline-static-env.js",
           "/node_modules/next/dist/lib/install-dependencies.js",
           "/node_modules/next/dist/lib/interop-default.js",
           "/node_modules/next/dist/lib/is-api-route.js",
           "/node_modules/next/dist/lib/is-app-page-route.js",
           "/node_modules/next/dist/lib/is-app-route-route.js",
           "/node_modules/next/dist/lib/is-edge-runtime.js",
           "/node_modules/next/dist/lib/is-error.js",
           "/node_modules/next/dist/lib/is-interception-route-rewrite.js",
           "/node_modules/next/dist/lib/is-internal-component.js",
           "/node_modules/next/dist/lib/is-serializable-props.js",
           "/node_modules/next/dist/lib/known-edge-safe-packages.json",
           "/node_modules/next/dist/lib/load-custom-routes.js",
           "/node_modules/next/dist/lib/memory/gc-observer.js",
           "/node_modules/next/dist/lib/memory/shutdown.js",
           "/node_modules/next/dist/lib/memory/startup.js",
           "/node_modules/next/dist/lib/memory/trace.js",
           "/node_modules/next/dist/lib/metadata/constants.js",
           "/node_modules/next/dist/lib/metadata/default-metadata.js",
           "/node_modules/next/dist/lib/metadata/generate/icon-mark.js",
           "/node_modules/next/dist/lib/metadata/generate/utils.js",
           "/node_modules/next/dist/lib/metadata/get-metadata-route.js",
           "/node_modules/next/dist/lib/metadata/is-metadata-route.js",
           "/node_modules/next/dist/lib/metadata/metadata-context.js",
           "/node_modules/next/dist/lib/metadata/metadata.js",
           "/node_modules/next/dist/lib/metadata/resolve-metadata.js",
           "/node_modules/next/dist/lib/metadata/resolvers/resolve-basics.js",
           "/node_modules/next/dist/lib/metadata/resolvers/resolve-icons.js",
           "/node_modules/next/dist/lib/metadata/resolvers/resolve-opengraph.js",
           "/node_modules/next/dist/lib/metadata/resolvers/resolve-title.js",
           "/node_modules/next/dist/lib/metadata/resolvers/resolve-url.js",
           "/node_modules/next/dist/lib/metadata/types/alternative-urls-types.js",
           "/node_modules/next/dist/lib/metadata/types/extra-types.js",
           "/node_modules/next/dist/lib/metadata/types/icons.js",
           "/node_modules/next/dist/lib/metadata/types/manifest-types.js",
           "/node_modules/next/dist/lib/metadata/types/metadata-interface.js",
           "/node_modules/next/dist/lib/metadata/types/metadata-types.js",
           "/node_modules/next/dist/lib/metadata/types/opengraph-types.js",
           "/node_modules/next/dist/lib/metadata/types/resolvers.js",
           "/node_modules/next/dist/lib/metadata/types/twitter-types.js",
           "/node_modules/next/dist/lib/mime-type.js",
           "/node_modules/next/dist/lib/mkcert.js",
           "/node_modules/next/dist/lib/multi-file-writer.js",
           "/node_modules/next/dist/lib/needs-experimental-react.js",
           "/node_modules/next/dist/lib/non-nullable.js",
           "/node_modules/next/dist/lib/normalize-path.js",
           "/node_modules/next/dist/lib/oxford-comma-list.js",
           "/node_modules/next/dist/lib/page-types.js",
           "/node_modules/next/dist/lib/patch-incorrect-lockfile.js",
           "/node_modules/next/dist/lib/pick.js",
           "/node_modules/next/dist/lib/picocolors.js",
           "/node_modules/next/dist/lib/pretty-bytes.js",
           "/node_modules/next/dist/lib/realpath.js",
           "/node_modules/next/dist/lib/recursive-copy.js",
           "/node_modules/next/dist/lib/recursive-delete.js",
           "/node_modules/next/dist/lib/recursive-readdir.js",
           "/node_modules/next/dist/lib/redirect-status.js",
           "/node_modules/next/dist/lib/require-instrumentation-client.js",
           "/node_modules/next/dist/lib/resolve-build-paths.js",
           "/node_modules/next/dist/lib/resolve-from.js",
           "/node_modules/next/dist/lib/route-pattern-normalizer.js",
           "/node_modules/next/dist/lib/scheduler.js",
           "/node_modules/next/dist/lib/semver-noop.js",
           "/node_modules/next/dist/lib/server-external-packages.jsonc",
           "/node_modules/next/dist/lib/setup-exception-listeners.js",
           "/node_modules/next/dist/lib/static-env.js",
           "/node_modules/next/dist/lib/try-to-parse-path.js",
           "/node_modules/next/dist/lib/turbopack-warning.js",
           "/node_modules/next/dist/lib/typescript/diagnosticFormatter.js",
           "/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js",
           "/node_modules/next/dist/lib/typescript/getTypeScriptIntent.js",
           "/node_modules/next/dist/lib/typescript/missingDependencyError.js",
           "/node_modules/next/dist/lib/typescript/runTypeCheck.js",
           "/node_modules/next/dist/lib/typescript/type-paths.js",
           "/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js",
           "/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js",
           "/node_modules/next/dist/lib/url.js",
           "/node_modules/next/dist/lib/verify-partytown-setup.js",
           "/node_modules/next/dist/lib/verify-root-layout.js",
           "/node_modules/next/dist/lib/verify-typescript-setup.js",
           "/node_modules/next/dist/lib/wait.js",
           "/node_modules/next/dist/lib/with-promise-cache.js",
           "/node_modules/next/dist/lib/worker.js",
           "/node_modules/next/dist/server/*",
           "/node_modules/next/dist/shared/*",
           "/node_modules/next/dist/telemetry/anonymous-meta.js",
           "/node_modules/next/dist/telemetry/detached-flush.js",
           "/node_modules/next/dist/telemetry/detect-agent.js",
           "/node_modules/next/dist/telemetry/events/build.js",
           "/node_modules/next/dist/telemetry/events/index.js",
           "/node_modules/next/dist/telemetry/events/plugins.js",
           "/node_modules/next/dist/telemetry/events/swc-load-failure.js",
           "/node_modules/next/dist/telemetry/events/version.js",
           "/node_modules/next/dist/telemetry/flush-telemetry.js",
           "/node_modules/next/dist/telemetry/post-telemetry-payload.js",
           "/node_modules/next/dist/telemetry/project-id.js",
           "/node_modules/next/dist/telemetry/storage.js",
           "/node_modules/next/dist/trace/index.js",
           "/node_modules/next/dist/trace/report/index.js",
           "/node_modules/next/dist/trace/report/to-json-build.js",
           "/node_modules/next/dist/trace/report/to-json.js",
           "/node_modules/next/dist/trace/report/to-telemetry.js",
           "/node_modules/next/dist/trace/shared.js",
           "/node_modules/next/dist/trace/trace.js",
           "/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js",
           "/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js",
           "/node_modules/react-dom/cjs/react-dom-server.browser.production.js",
           "/node_modules/react-dom/cjs/react-dom-server.edge.production.js",
           "/node_modules/react-dom/cjs/react-dom-server.node.production.js",
           "/node_modules/react-dom/cjs/react-dom.production.js",
           "/node_modules/react-dom/index.js",
           "/node_modules/react-dom/server.browser.js",
           "/node_modules/react-dom/server.edge.js",
           "/node_modules/react-dom/server.node.js",
           "/node_modules/react-dom/static.node.js",
           "/node_modules/react/cjs/react-compiler-runtime.production.js",
           "/node_modules/react/cjs/react-jsx-dev-runtime.production.js",
           "/node_modules/react/cjs/react-jsx-runtime.production.js",
           "/node_modules/react/cjs/react.production.js",
           "/node_modules/react/compiler-runtime.js",
           "/node_modules/react/index.js",
           "/node_modules/react/jsx-dev-runtime.js",
           "/node_modules/react/jsx-runtime.js",
           "/node_modules/semver/*",
           "/node_modules/sharp/*",
           "/node_modules/styled-jsx/*",
         ]
        `)
      })
    })

    describe('default mode', () => {
      const { next, skipped } = nextTestSetup({
        files: __dirname,
        dependencies: {
          typescript: '5.9.2',
        },
      })

      if (skipped) {
        return
      }

      it('should not include .next directory in traces despite dynamic fs operations', async () => {
        // This test verifies that the denied_path feature prevents the .next directory
        // from being included in traces. The app/dynamic-read page uses dynamic fs.readFileSync
        // with path.join(process.cwd(), ...) which could theoretically read any file.

        // Check the page-specific trace that has the dynamic fs operations
        const pageTrace = await readNormalizedNFT(
          next,
          '.next/server/app/dynamic-read/page.js.nft.json'
        )

        // Snapshot the non-node_modules and non-chunks files to see what's being traced
        // We also filter out chunks because their names change with every build
        const nonNodeModulesFiles = pageTrace.filter(
          (file: string) =>
            !file.includes('/node_modules/') && !file.includes('/chunks/')
        )

        expect(nonNodeModulesFiles).toMatchInlineSnapshot(`
                [
                  "./page/react-loadable-manifest.json",
                  "./page_client-reference-manifest.js",
                ]
              `)
      })

      it('should not trace too many files in next-minimal-server.js.nft.json', async () => {
        const trace = await readNormalizedNFT(
          next,
          '.next/next-minimal-server.js.nft.json'
        )
        expect(trace).toMatchInlineSnapshot(`
         [
           "/node_modules/client-only/index.js",
           "/node_modules/next/dist/client/components/app-router-headers.js",
           "/node_modules/next/dist/compiled/@opentelemetry/api/index.js",
           "/node_modules/next/dist/compiled/next-server/server.runtime.prod.js",
           "/node_modules/next/dist/compiled/source-map/source-map.js",
           "/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js",
           "/node_modules/next/dist/compiled/ws/index.js",
           "/node_modules/next/dist/experimental/testmode/context.js",
           "/node_modules/next/dist/experimental/testmode/fetch.js",
           "/node_modules/next/dist/experimental/testmode/server-edge.js",
           "/node_modules/next/dist/lib/client-and-server-references.js",
           "/node_modules/next/dist/lib/constants.js",
           "/node_modules/next/dist/lib/interop-default.js",
           "/node_modules/next/dist/lib/is-error.js",
           "/node_modules/next/dist/lib/picocolors.js",
           "/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js",
           "/node_modules/next/dist/server/app-render/after-task-async-storage.external.js",
           "/node_modules/next/dist/server/app-render/async-local-storage.js",
           "/node_modules/next/dist/server/app-render/console-async-storage-instance.js",
           "/node_modules/next/dist/server/app-render/console-async-storage.external.js",
           "/node_modules/next/dist/server/app-render/staged-rendering.js",
           "/node_modules/next/dist/server/app-render/work-async-storage-instance.js",
           "/node_modules/next/dist/server/app-render/work-async-storage.external.js",
           "/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js",
           "/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js",
           "/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js",
           "/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js",
           "/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js",
           "/node_modules/next/dist/server/lib/lru-cache.js",
           "/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js",
           "/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js",
           "/node_modules/next/dist/server/lib/trace/constants.js",
           "/node_modules/next/dist/server/lib/trace/tracer.js",
           "/node_modules/next/dist/server/load-manifest.external.js",
           "/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js",
           "/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js",
           "/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js",
           "/node_modules/next/dist/server/response-cache/types.js",
           "/node_modules/next/dist/server/route-modules/app-page/module.compiled.js",
           "/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js",
           "/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.js",
           "/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/head-manager-context.js",
           "/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/hooks-client-context.js",
           "/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/image-config-context.js",
           "/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/router-context.js",
           "/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/server-inserted-html.js",
           "/node_modules/next/dist/server/route-modules/pages/module.compiled.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/app-router-context.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/hooks-client-context.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/image-config-context.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable-context.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/router-context.js",
           "/node_modules/next/dist/server/route-modules/pages/vendored/contexts/server-inserted-html.js",
           "/node_modules/next/dist/server/runtime-reacts.external.js",
           "/node_modules/next/dist/shared/lib/deep-freeze.js",
           "/node_modules/next/dist/shared/lib/invariant-error.js",
           "/node_modules/next/dist/shared/lib/is-plain-object.js",
           "/node_modules/next/dist/shared/lib/is-thenable.js",
           "/node_modules/next/dist/shared/lib/no-fallback-error.external.js",
           "/node_modules/next/dist/shared/lib/promise-with-resolvers.js",
           "/node_modules/next/dist/shared/lib/server-reference-info.js",
           "/node_modules/react/cjs/react.production.js",
           "/node_modules/react/index.js",
           "/node_modules/styled-jsx/dist/index/index.js",
           "/node_modules/styled-jsx/index.js",
           "/node_modules/styled-jsx/style.js",
         ]
        `)
      })
    })
  }
)
Quest for Codev2.0.0
/
SIGN IN