{"version":3,"sources":["../../../src/build/collect-build-traces.ts"],"sourcesContent":["// Import cpu-profile to start profiling early if enabled\nimport '../server/lib/cpu-profile'\nimport { Span } from '../trace'\nimport type { NextConfigComplete } from '../server/config-shared'\n\nimport {\n  TRACE_IGNORES,\n  type BuildTraceContext,\n  getFilesMapFromReasons,\n} from './webpack/plugins/next-trace-entrypoints-plugin'\n\nimport path from 'path'\nimport fs from 'fs/promises'\nimport { nonNullable } from '../lib/non-nullable'\nimport * as ciEnvironment from '../server/ci-info'\nimport debugOriginal from 'next/dist/compiled/debug'\nimport picomatch from 'next/dist/compiled/picomatch'\nimport { defaultOverrides } from '../server/require-hook'\nimport { nodeFileTrace } from 'next/dist/compiled/@vercel/nft'\nimport { normalizePagePath } from '../shared/lib/page-path/normalize-page-path'\nimport { normalizeAppPath } from '../shared/lib/router/utils/app-paths'\nimport isError from '../lib/is-error'\nimport type { NodeFileTraceReasons } from '@vercel/nft'\nimport type { RoutesUsingEdgeRuntime } from './utils'\n\nconst debug = debugOriginal('next:build:build-traces')\n\nexport const makeIgnoreFn = (root: string, ignores: string[]) => {\n  // pre compile the ignore globs\n  const isMatch = picomatch(ignores, {\n    contains: true,\n    dot: true,\n  })\n\n  return (pathname: string) => {\n    if (path.isAbsolute(pathname) && !pathname.startsWith(root)) {\n      return true\n    }\n\n    return isMatch(pathname)\n  }\n}\n\nfunction shouldIgnore(\n  file: string,\n  serverIgnoreFn: (file: string) => boolean,\n  reasons: NodeFileTraceReasons,\n  cachedIgnoreFiles: Map<string, boolean>,\n  children: Set<string> = new Set()\n) {\n  if (cachedIgnoreFiles.has(file)) {\n    return cachedIgnoreFiles.get(file)\n  }\n\n  if (serverIgnoreFn(file)) {\n    cachedIgnoreFiles.set(file, true)\n    return true\n  }\n  children.add(file)\n\n  const reason = reasons.get(file)\n  if (!reason || reason.parents.size === 0 || reason.type.includes('initial')) {\n    cachedIgnoreFiles.set(file, false)\n    return false\n  }\n\n  // if all parents are ignored the child file\n  // should be ignored as well\n  let allParentsIgnored = true\n\n  for (const parent of reason.parents.values()) {\n    if (!children.has(parent)) {\n      children.add(parent)\n      if (\n        !shouldIgnore(\n          parent,\n          serverIgnoreFn,\n          reasons,\n          cachedIgnoreFiles,\n          children\n        )\n      ) {\n        allParentsIgnored = false\n        break\n      }\n    }\n  }\n\n  cachedIgnoreFiles.set(file, allParentsIgnored)\n  return allParentsIgnored\n}\n\nexport async function collectBuildTraces({\n  dir,\n  config,\n  distDir,\n  edgeRuntimeRoutes,\n  staticPages,\n  nextBuildSpan = new Span({ name: 'build' }),\n  buildTraceContext,\n  outputFileTracingRoot,\n}: {\n  dir: string\n  distDir: string\n  staticPages: string[]\n  outputFileTracingRoot: string\n  // pageInfos is serialized when this function runs in a worker.\n  edgeRuntimeRoutes: RoutesUsingEdgeRuntime\n  nextBuildSpan?: Span\n  config: NextConfigComplete\n  buildTraceContext?: BuildTraceContext\n}) {\n  const startTime = Date.now()\n  debug('starting build traces')\n\n  const { outputFileTracingIncludes = {}, outputFileTracingExcludes = {} } =\n    config\n  const excludeGlobKeys = Object.keys(outputFileTracingExcludes)\n  const includeGlobKeys = Object.keys(outputFileTracingIncludes)\n\n  await nextBuildSpan\n    .traceChild('node-file-trace-build', {\n      isTurbotrace: 'false', // TODO(arlyon): remove this\n    })\n    .traceAsyncFn(async () => {\n      const nextServerTraceOutput = path.join(\n        distDir,\n        'next-server.js.nft.json'\n      )\n      const nextMinimalTraceOutput = path.join(\n        distDir,\n        'next-minimal-server.js.nft.json'\n      )\n      const root = outputFileTracingRoot\n\n      // Under standalone mode, we need to trace the extra IPC server and\n      // worker files.\n      const isStandalone = config.output === 'standalone'\n      const sharedEntriesSet = Object.keys(defaultOverrides).map((value) =>\n        require.resolve(value, {\n          paths: [require.resolve('next/dist/server/require-hook')],\n        })\n      )\n\n      const { cacheHandler, cacheHandlers } = config\n\n      // ensure we trace any dependencies needed for custom\n      // incremental cache handler\n      if (cacheHandler) {\n        sharedEntriesSet.push(\n          require.resolve(\n            path.isAbsolute(cacheHandler)\n              ? cacheHandler\n              : path.join(dir, cacheHandler)\n          )\n        )\n      }\n\n      // Under standalone mode, we need to ensure that the cache entry debug\n      // handler is traced so it can be copied. This is only used for testing,\n      // and is not used in production.\n      if (\n        process.env.__NEXT_TEST_MODE &&\n        process.env.NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS\n      ) {\n        sharedEntriesSet.push(\n          require.resolve(\n            path.isAbsolute(process.env.NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS)\n              ? process.env.NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS\n              : path.join(\n                  dir,\n                  process.env.NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS\n                )\n          )\n        )\n      }\n\n      if (cacheHandlers) {\n        for (const handlerPath of Object.values(cacheHandlers)) {\n          if (handlerPath) {\n            sharedEntriesSet.push(\n              require.resolve(\n                path.isAbsolute(handlerPath)\n                  ? handlerPath\n                  : path.join(dir, handlerPath)\n              )\n            )\n          }\n        }\n      }\n\n      const serverEntries = [\n        ...sharedEntriesSet,\n        ...(isStandalone\n          ? [\n              require.resolve('next/dist/server/lib/start-server'),\n              require.resolve('next/dist/server/next'),\n              require.resolve('next/dist/server/require-hook'),\n            ]\n          : []),\n        require.resolve('next/dist/server/next-server'),\n      ].filter(Boolean) as string[]\n\n      const minimalServerEntries = [\n        ...sharedEntriesSet,\n        require.resolve('next/dist/compiled/next-server/server.runtime.prod'),\n      ].filter(Boolean)\n\n      const additionalIgnores = new Set<string>()\n\n      for (const glob of excludeGlobKeys) {\n        if (picomatch(glob)('next-server')) {\n          outputFileTracingExcludes[glob].forEach((exclude) => {\n            additionalIgnores.add(exclude)\n          })\n        }\n      }\n\n      const sharedIgnores = [\n        '**/next/dist/compiled/next-server/**/*.dev.js',\n        ...(isStandalone ? [] : ['**/next/dist/compiled/jest-worker/**/*']),\n        '**/next/dist/compiled/webpack/*',\n        '**/node_modules/webpack5/**/*',\n        '**/next/dist/server/lib/route-resolver*',\n        'next/dist/compiled/semver/semver/**/*.js',\n\n        ...(ciEnvironment.hasNextSupport\n          ? [\n              // only ignore image-optimizer code when\n              // this is being handled outside of next-server\n              '**/next/dist/server/image-optimizer.js',\n            ]\n          : []),\n\n        ...(isStandalone ? [] : TRACE_IGNORES),\n        ...additionalIgnores,\n      ]\n\n      const sharedIgnoresFn = makeIgnoreFn(root, sharedIgnores)\n\n      const serverIgnores = [\n        ...sharedIgnores,\n        '**/node_modules/react{,-dom,-dom-server-turbopack}/**/*.development.js',\n        '**/*.d.ts',\n        '**/*.map',\n        '**/next/dist/pages/**/*',\n        ...(ciEnvironment.hasNextSupport\n          ? ['**/node_modules/sharp/**/*', '**/@img/sharp-libvips*/**/*']\n          : []),\n      ].filter(nonNullable)\n      const serverIgnoreFn = makeIgnoreFn(root, serverIgnores)\n\n      const minimalServerIgnores = [\n        ...serverIgnores,\n        '**/next/dist/compiled/edge-runtime/**/*',\n        '**/next/dist/server/web/sandbox/**/*',\n        '**/next/dist/server/post-process.js',\n      ]\n      const minimalServerIgnoreFn = makeIgnoreFn(root, minimalServerIgnores)\n\n      const routesIgnores = [\n        ...sharedIgnores,\n        // server chunks are provided via next-trace-entrypoints-plugin plugin\n        // as otherwise all chunks are traced here and included for all pages\n        // whether they are needed or not\n        '**/.next/server/chunks/**',\n        '**/next/dist/server/post-process.js',\n      ].filter(nonNullable)\n\n      const routeIgnoreFn = makeIgnoreFn(root, routesIgnores)\n\n      const serverTracedFiles = new Set<string>()\n      const minimalServerTracedFiles = new Set<string>()\n\n      function addToTracedFiles(base: string, file: string, dest: Set<string>) {\n        dest.add(\n          path.relative(distDir, path.join(base, file)).replace(/\\\\/g, '/')\n        )\n      }\n\n      if (isStandalone) {\n        addToTracedFiles(\n          '',\n          require.resolve('next/dist/compiled/jest-worker/processChild'),\n          serverTracedFiles\n        )\n        addToTracedFiles(\n          '',\n          require.resolve('next/dist/compiled/jest-worker/threadChild'),\n          serverTracedFiles\n        )\n      }\n\n      {\n        const chunksToTrace: string[] = [\n          ...(buildTraceContext?.chunksTrace?.action.input || []),\n          ...serverEntries,\n          ...minimalServerEntries,\n        ]\n        const result = await nodeFileTrace(chunksToTrace, {\n          base: outputFileTracingRoot,\n          processCwd: dir,\n          mixedModules: true,\n          async readFile(p) {\n            try {\n              return await fs.readFile(p, 'utf8')\n            } catch (e) {\n              if (isError(e) && (e.code === 'ENOENT' || e.code === 'EISDIR')) {\n                // since tracing runs in parallel with static generation server\n                // files might be removed from that step so tolerate ENOENT\n                // errors gracefully\n                return ''\n              }\n              throw e\n            }\n          },\n          async readlink(p) {\n            try {\n              return await fs.readlink(p)\n            } catch (e) {\n              if (\n                isError(e) &&\n                (e.code === 'EINVAL' ||\n                  e.code === 'ENOENT' ||\n                  e.code === 'UNKNOWN')\n              ) {\n                return null\n              }\n              throw e\n            }\n          },\n          async stat(p) {\n            try {\n              return await fs.stat(p)\n            } catch (e) {\n              if (isError(e) && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) {\n                return null\n              }\n              throw e\n            }\n          },\n          // handle shared ignores at top-level as it\n          // avoids over-tracing when we don't need to\n          // and speeds up total trace time\n          ignore(p) {\n            if (sharedIgnoresFn(p)) {\n              return true\n            }\n\n            // if a chunk is attempting to be traced that isn't\n            // in our initial list we need to ignore it to prevent\n            // over tracing as webpack needs to be the source of\n            // truth for which chunks should be included for each entry\n            if (\n              p.includes('.next/server/chunks') &&\n              !chunksToTrace.includes(path.join(outputFileTracingRoot, p))\n            ) {\n              return true\n            }\n            return false\n          },\n        })\n        const reasons = result.reasons\n        const fileList = result.fileList\n        for (const file of result.esmFileList) {\n          fileList.add(file)\n        }\n\n        const parentFilesMap = getFilesMapFromReasons(fileList, reasons)\n        const cachedLookupIgnore = new Map<string, boolean>()\n        const cachedLookupIgnoreMinimal = new Map<string, boolean>()\n\n        for (const [entries, tracedFiles] of [\n          [serverEntries, serverTracedFiles],\n          [minimalServerEntries, minimalServerTracedFiles],\n        ] as Array<[string[], Set<string>]>) {\n          for (const file of entries) {\n            const curFiles = [\n              ...(parentFilesMap\n                .get(path.relative(outputFileTracingRoot, file))\n                ?.keys() || []),\n            ]\n            tracedFiles.add(path.relative(distDir, file).replace(/\\\\/g, '/'))\n\n            for (const curFile of curFiles || []) {\n              const filePath = path.join(outputFileTracingRoot, curFile)\n\n              if (\n                !shouldIgnore(\n                  curFile,\n                  tracedFiles === minimalServerTracedFiles\n                    ? minimalServerIgnoreFn\n                    : serverIgnoreFn,\n                  reasons,\n                  tracedFiles === minimalServerTracedFiles\n                    ? cachedLookupIgnoreMinimal\n                    : cachedLookupIgnore\n                )\n              ) {\n                tracedFiles.add(\n                  path.relative(distDir, filePath).replace(/\\\\/g, '/')\n                )\n              }\n            }\n          }\n        }\n\n        const { entryNameFilesMap } = buildTraceContext?.chunksTrace || {}\n\n        const cachedLookupIgnoreRoutes = new Map<string, boolean>()\n\n        await Promise.all(\n          [\n            ...(entryNameFilesMap\n              ? Object.entries(entryNameFilesMap)\n              : new Map()),\n          ].map(async ([entryName, entryNameFiles]) => {\n            const isApp = entryName.startsWith('app/')\n            const isPages = entryName.startsWith('pages/')\n            let route = entryName\n            if (isApp) {\n              route = normalizeAppPath(route.substring('app'.length))\n            }\n            if (isPages) {\n              route = normalizePagePath(route.substring('pages'.length))\n            }\n\n            // we don't need to trace for automatically statically optimized\n            // pages as they don't have server bundles, note there is\n            // the caveat with flying shuttle mode as it needs this for\n            // detecting changed entries\n            if (staticPages.includes(route)) {\n              return\n            }\n            const entryOutputPath = path.join(\n              distDir,\n              'server',\n              `${entryName}.js`\n            )\n            const traceOutputPath = `${entryOutputPath}.nft.json`\n            const existingTrace = JSON.parse(\n              await fs.readFile(traceOutputPath, 'utf8')\n            ) as {\n              version: number\n              files: string[]\n              fileHashes: Record<string, string>\n            }\n            const traceOutputDir = path.dirname(traceOutputPath)\n            const curTracedFiles = new Set<string>()\n\n            for (const file of [...entryNameFiles, entryOutputPath]) {\n              const curFiles = [\n                ...(parentFilesMap\n                  .get(path.relative(outputFileTracingRoot, file))\n                  ?.keys() || []),\n              ]\n              for (const curFile of curFiles || []) {\n                if (\n                  !shouldIgnore(\n                    curFile,\n                    routeIgnoreFn,\n                    reasons,\n                    cachedLookupIgnoreRoutes\n                  )\n                ) {\n                  const filePath = path.join(outputFileTracingRoot, curFile)\n                  const outputFile = path\n                    .relative(traceOutputDir, filePath)\n                    .replace(/\\\\/g, '/')\n                  curTracedFiles.add(outputFile)\n                }\n              }\n            }\n\n            for (const file of existingTrace.files || []) {\n              curTracedFiles.add(file)\n            }\n\n            await fs.writeFile(\n              traceOutputPath,\n              JSON.stringify({\n                ...existingTrace,\n                files: [...curTracedFiles].sort(),\n              })\n            )\n          })\n        )\n      }\n\n      const moduleTypes = ['app-page', 'pages']\n\n      for (const type of moduleTypes) {\n        const modulePath = require.resolve(\n          `next/dist/server/route-modules/${type}/module.compiled`\n        )\n        const relativeModulePath = path.relative(root, modulePath)\n\n        const contextDir = path.join(\n          path.dirname(modulePath),\n          'vendored',\n          'contexts'\n        )\n\n        for (const item of await fs.readdir(contextDir)) {\n          const itemPath = path.relative(root, path.join(contextDir, item))\n          if (!serverIgnoreFn(itemPath)) {\n            addToTracedFiles(root, itemPath, serverTracedFiles)\n            addToTracedFiles(root, itemPath, minimalServerTracedFiles)\n          }\n        }\n        addToTracedFiles(root, relativeModulePath, serverTracedFiles)\n        addToTracedFiles(root, relativeModulePath, minimalServerTracedFiles)\n      }\n\n      const serverTracedFilesSorted = Array.from(serverTracedFiles)\n      serverTracedFilesSorted.sort()\n      const minimalServerTracedFilesSorted = Array.from(\n        minimalServerTracedFiles\n      )\n      minimalServerTracedFilesSorted.sort()\n\n      await Promise.all([\n        fs.writeFile(\n          nextServerTraceOutput,\n          JSON.stringify({\n            version: 1,\n            files: serverTracedFilesSorted,\n          } as {\n            version: number\n            files: string[]\n          })\n        ),\n        fs.writeFile(\n          nextMinimalTraceOutput,\n          JSON.stringify({\n            version: 1,\n            files: minimalServerTracedFilesSorted,\n          } as {\n            version: number\n            files: string[]\n          })\n        ),\n      ])\n    })\n\n  // apply outputFileTracingIncludes/outputFileTracingExcludes after runTurbotrace\n  const includeExcludeSpan = nextBuildSpan.traceChild('apply-include-excludes')\n  await includeExcludeSpan.traceAsyncFn(async () => {\n    const globOrig =\n      require('next/dist/compiled/glob') as typeof import('next/dist/compiled/glob')\n    const glob = (pattern: string): Promise<string[]> => {\n      return new Promise((resolve, reject) => {\n        globOrig(\n          pattern,\n          { cwd: dir, nodir: true, dot: true },\n          (err, files) => {\n            if (err) {\n              return reject(err)\n            }\n            resolve(files)\n          }\n        )\n      })\n    }\n\n    const { entryNameFilesMap } = buildTraceContext?.chunksTrace || {}\n\n    await Promise.all(\n      [\n        ...(entryNameFilesMap ? Object.entries(entryNameFilesMap) : new Map()),\n      ].map(async ([entryName]) => {\n        const isApp = entryName.startsWith('app/')\n        const isPages = entryName.startsWith('pages/')\n        let route = entryName\n        if (isApp) {\n          route = normalizeAppPath(entryName)\n        }\n        if (isPages) {\n          route = normalizePagePath(entryName)\n        }\n\n        if (staticPages.includes(route)) {\n          return\n        }\n\n        // edge routes have no trace files\n        if (edgeRuntimeRoutes.hasOwnProperty(route)) {\n          return\n        }\n\n        const combinedIncludes = new Set<string>()\n        const combinedExcludes = new Set<string>()\n        for (const curGlob of includeGlobKeys) {\n          const isMatch = picomatch(curGlob, { dot: true, contains: true })\n          if (isMatch(route)) {\n            for (const include of outputFileTracingIncludes[curGlob]) {\n              combinedIncludes.add(include.replace(/\\\\/g, '/'))\n            }\n          }\n        }\n\n        for (const curGlob of excludeGlobKeys) {\n          const isMatch = picomatch(curGlob, { dot: true, contains: true })\n          if (isMatch(route)) {\n            for (const exclude of outputFileTracingExcludes[curGlob]) {\n              combinedExcludes.add(exclude)\n            }\n          }\n        }\n\n        if (!combinedIncludes?.size && !combinedExcludes?.size) {\n          return\n        }\n\n        const traceFile = path.join(\n          distDir,\n          `server`,\n          `${entryName}.js.nft.json`\n        )\n        const pageDir = path.dirname(traceFile)\n        const traceContent = JSON.parse(await fs.readFile(traceFile, 'utf8'))\n        const includes: string[] = []\n        const resolvedTraceIncludes = new Map<string, string[]>()\n\n        if (combinedIncludes?.size) {\n          await Promise.all(\n            [...combinedIncludes].map(async (includeGlob) => {\n              const results = await glob(includeGlob)\n              const resolvedInclude = resolvedTraceIncludes.get(\n                includeGlob\n              ) || [\n                ...results.map((file) => {\n                  return path.relative(pageDir, path.join(dir, file))\n                }),\n              ]\n              includes.push(...resolvedInclude)\n              resolvedTraceIncludes.set(includeGlob, resolvedInclude)\n            })\n          )\n        }\n        const combined = new Set([...traceContent.files, ...includes])\n\n        if (combinedExcludes?.size) {\n          const resolvedGlobs = [...combinedExcludes].map((exclude) =>\n            path.join(dir, exclude)\n          )\n\n          // pre compile before forEach\n          const isMatch = picomatch(resolvedGlobs, {\n            dot: true,\n            contains: true,\n          })\n\n          combined.forEach((file) => {\n            if (isMatch(path.join(pageDir, file))) {\n              combined.delete(file)\n            }\n          })\n        }\n\n        // overwrite trace file with custom includes/excludes\n        await fs.writeFile(\n          traceFile,\n          JSON.stringify({\n            version: traceContent.version,\n            files: [...combined],\n          })\n        )\n      })\n    )\n  })\n\n  debug(`finished build tracing ${Date.now() - startTime}ms`)\n}\n"],"names":["Span","TRACE_IGNORES","getFilesMapFromReasons","path","fs","nonNullable","ciEnvironment","debugOriginal","picomatch","defaultOverrides","nodeFileTrace","normalizePagePath","normalizeAppPath","isError","debug","makeIgnoreFn","root","ignores","isMatch","contains","dot","pathname","isAbsolute","startsWith","shouldIgnore","file","serverIgnoreFn","reasons","cachedIgnoreFiles","children","Set","has","get","set","add","reason","parents","size","type","includes","allParentsIgnored","parent","values","collectBuildTraces","dir","config","distDir","edgeRuntimeRoutes","staticPages","nextBuildSpan","name","buildTraceContext","outputFileTracingRoot","startTime","Date","now","outputFileTracingIncludes","outputFileTracingExcludes","excludeGlobKeys","Object","keys","includeGlobKeys","traceChild","isTurbotrace","traceAsyncFn","nextServerTraceOutput","join","nextMinimalTraceOutput","isStandalone","output","sharedEntriesSet","map","value","require","resolve","paths","cacheHandler","cacheHandlers","push","process","env","__NEXT_TEST_MODE","NEXT_PRIVATE_DEBUG_CACHE_ENTRY_HANDLERS","handlerPath","serverEntries","filter","Boolean","minimalServerEntries","additionalIgnores","glob","forEach","exclude","sharedIgnores","hasNextSupport","sharedIgnoresFn","serverIgnores","minimalServerIgnores","minimalServerIgnoreFn","routesIgnores","routeIgnoreFn","serverTracedFiles","minimalServerTracedFiles","addToTracedFiles","base","dest","relative","replace","chunksToTrace","chunksTrace","action","input","result","processCwd","mixedModules","readFile","p","e","code","readlink","stat","ignore","fileList","esmFileList","parentFilesMap","cachedLookupIgnore","Map","cachedLookupIgnoreMinimal","entries","tracedFiles","curFiles","curFile","filePath","entryNameFilesMap","cachedLookupIgnoreRoutes","Promise","all","entryName","entryNameFiles","isApp","isPages","route","substring","length","entryOutputPath","traceOutputPath","existingTrace","JSON","parse","traceOutputDir","dirname","curTracedFiles","outputFile","files","writeFile","stringify","sort","moduleTypes","modulePath","relativeModulePath","contextDir","item","readdir","itemPath","serverTracedFilesSorted","Array","from","minimalServerTracedFilesSorted","version","includeExcludeSpan","globOrig","pattern","reject","cwd","nodir","err","hasOwnProperty","combinedIncludes","combinedExcludes","curGlob","include","traceFile","pageDir","traceContent","resolvedTraceIncludes","includeGlob","results","resolvedInclude","combined","resolvedGlobs","delete"],"mappings":"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","ignoreList":[0]}