{"version":3,"sources":["../../src/cli/next-dev.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport '../server/lib/cpu-profile'\nimport { saveCpuProfile } from '../server/lib/cpu-profile'\nimport type { StartServerOptions } from '../server/lib/start-server'\nimport {\n  RESTART_EXIT_CODE,\n  getNodeDebugType,\n  getParsedDebugAddress,\n  getMaxOldSpaceSize,\n  printAndExit,\n  formatNodeOptions,\n  formatDebugAddress,\n  getParsedNodeOptions,\n  type DebugAddress,\n} from '../server/lib/utils'\nimport * as Log from '../build/output/log'\nimport { getProjectDir } from '../lib/get-project-dir'\nimport { ensureProfilesDir } from '../lib/profiles-dir'\nimport path from 'path'\nimport { traceGlobals } from '../trace/shared'\nimport { Telemetry } from '../telemetry/storage'\nimport { findPagesDir } from '../lib/find-pages-dir'\nimport { fileExists, FileType } from '../lib/file-exists'\nimport { getNpxCommand } from '../lib/helpers/get-npx-command'\nimport { createSelfSignedCertificate } from '../lib/mkcert'\nimport type { SelfSignedCertificate } from '../lib/mkcert'\nimport uploadTrace from '../trace/upload-trace'\nimport { initialEnv } from '@next/env'\nimport { fork } from 'child_process'\nimport type { ChildProcess } from 'child_process'\nimport {\n  getReservedPortExplanation,\n  isPortIsReserved,\n} from '../lib/helpers/get-reserved-port'\nimport { getCacheDirectory } from '../lib/helpers/get-cache-directory'\nimport { getGitBranch } from '../lib/helpers/git'\nimport os from 'os'\nimport fs from 'node:fs'\nimport { once } from 'node:events'\nimport { clearTimeout } from 'timers'\nimport { trace, initializeTraceState, exportTraceState } from '../trace'\nimport { traceId } from '../trace/shared'\nimport { Bundler, parseBundlerArgs } from '../lib/bundler'\n\nexport type NextDevOptions = {\n  disableSourceMaps: boolean\n  // Commander is not putting `--inspect` through the arg parser\n  inspect?: DebugAddress | true\n  turbo?: boolean\n  turbopack?: boolean\n  webpack?: boolean\n  port: number\n  hostname?: string\n  experimentalHttps?: boolean\n  experimentalHttpsKey?: string\n  experimentalHttpsCert?: string\n  experimentalHttpsCa?: string\n  experimentalUploadTrace?: string\n  experimentalNextConfigStripTypes?: boolean\n  experimentalCpuProf?: boolean\n  serverFastRefresh?: boolean\n  internalTrace?: string | boolean\n}\n\ntype PortSource = 'cli' | 'default' | 'env'\n\nlet dir: string\nlet child: undefined | ChildProcess\n// distDir is received from the child process via IPC, used for telemetry and trace.\nlet distDir: string | undefined\nlet isTurbopack: boolean\nlet traceUploadUrl: string\nlet sessionStopHandled = false\nlet devSpanAttrs: { 'rage-restart': boolean; 'missing-next-dir': boolean } = {\n  'rage-restart': false,\n  'missing-next-dir': false,\n}\nconst sessionStarted = Date.now()\nconst sessionSpan = trace('next-dev')\n\n// If the user restarts the dev server within this window we count it as a \"rage restart\".\nconst RAGE_RESTART_THRESHOLD_MS = 90_000\n\n// Shape of a single project entry in the dev-state.json file.\n// All fields are optional so older entries without gitBranch are still valid.\ntype DevStateEntry = {\n  stopTime?: number\n  distDirPath?: string\n  gitBranch?: string\n}\n\n// Single shared file for all projects — keyed by project directory path.\nconst DEV_STATE_FILE = path.join(\n  getCacheDirectory('nextjs-nodejs'),\n  'dev-state.json'\n)\n\n// How long should we wait for the child to cleanly exit after sending\n// SIGINT/SIGTERM to the child process before sending SIGKILL?\nconst CHILD_EXIT_TIMEOUT_MS = parseInt(\n  process.env.NEXT_EXIT_TIMEOUT_MS ?? '100',\n  10\n)\n\nconst handleSessionStop = async (signal: NodeJS.Signals | number | null) => {\n  if (signal != null && child?.pid) child.kill(signal)\n  if (sessionStopHandled) return\n  sessionStopHandled = true\n\n  // Capture the child's exit code if it has already exited and caused the\n  // session stop (via the 'exit' event), otherwise assume success (0).\n  const exitCode = child?.exitCode || 0\n\n  if (\n    signal != null &&\n    child?.pid &&\n    child.exitCode === null &&\n    child.signalCode === null\n  ) {\n    let exitTimeout = setTimeout(() => {\n      child?.kill('SIGKILL')\n    }, CHILD_EXIT_TIMEOUT_MS)\n    await once(child, 'exit').catch(() => {})\n    clearTimeout(exitTimeout)\n  }\n\n  sessionSpan.stop()\n\n  try {\n    const { eventCliSessionStopped } =\n      require('../telemetry/events/session-stopped') as typeof import('../telemetry/events/session-stopped')\n\n    let pagesDir: boolean = !!traceGlobals.get('pagesDir')\n    let appDir: boolean = !!traceGlobals.get('appDir')\n\n    if (\n      typeof traceGlobals.get('pagesDir') === 'undefined' ||\n      typeof traceGlobals.get('appDir') === 'undefined'\n    ) {\n      const pagesResult = findPagesDir(dir)\n      appDir = !!pagesResult.appDir\n      pagesDir = !!pagesResult.pagesDir\n    }\n\n    const telemetry =\n      (traceGlobals.get('telemetry') as InstanceType<\n        typeof import('../telemetry/storage').Telemetry\n      >) ||\n      new Telemetry({\n        distDir: path.join(dir, distDir || '.next'),\n      })\n\n    telemetry.record(\n      eventCliSessionStopped({\n        cliCommand: 'dev',\n        turboFlag: isTurbopack,\n        durationMilliseconds: Date.now() - sessionStarted,\n        pagesDir,\n        appDir,\n      }),\n      true\n    )\n    telemetry.flushDetached('dev', dir)\n  } catch (_) {\n    // errors here aren't actionable so don't add\n    // noise to the output\n  }\n\n  if (traceUploadUrl && distDir) {\n    uploadTrace({\n      traceUploadUrl,\n      mode: 'dev',\n      projectDir: dir,\n      distDir,\n      isTurboSession: isTurbopack,\n    })\n\n    writeDevState()\n  }\n\n  // Save CPU profile if it was enabled (before exiting)\n  saveCpuProfile()\n\n  // ensure we re-enable the terminal cursor before exiting\n  // the program, or the cursor could remain hidden\n  process.stdout.write('\\x1B[?25h')\n  process.stdout.write('\\n')\n  process.exit(exitCode)\n}\n\nprocess.on('SIGINT', () => handleSessionStop('SIGINT'))\nprocess.on('SIGTERM', () => handleSessionStop('SIGTERM'))\n\n// exit event must be synchronous\nprocess.on('exit', () => {\n  child?.kill('SIGKILL')\n  // Catch aggressive kills (e.g. OOM, unhandled exception) that bypass handleSessionStop.\n  // SIGKILL of the parent cannot be caught; for all other exits this ensures state is written.\n  if (!sessionStopHandled) {\n    writeDevState()\n  }\n})\n\nconst nextDev = async (\n  options: NextDevOptions,\n  portSource: PortSource,\n  directory?: string\n) => {\n  // Note: parseBundlerArgs can only decide on Turbopack or webpack.\n  // Rspack can be configured via next.config.js but next.config.js is not loaded in the main process, only in the child process.\n  isTurbopack = parseBundlerArgs(options) === Bundler.Turbopack\n\n  dir = getProjectDir(process.env.NEXT_PRIVATE_DEV_DIR || directory)\n\n  // Check if pages dir exists and warn if not\n  if (!(await fileExists(dir, FileType.Directory))) {\n    printAndExit(`> No such directory exists as the project root: ${dir}`)\n  }\n\n  if (options.experimentalCpuProf) {\n    Log.info(\n      `CPU profiling enabled. Profile will be saved to .next-profiles/ on exit (Ctrl+C).`\n    )\n  }\n\n  async function preflight(skipOnReboot: boolean) {\n    const { getPackageVersion, getDependencies } = (await Promise.resolve(\n      require('../lib/get-package-version') as typeof import('../lib/get-package-version')\n    )) as typeof import('../lib/get-package-version')\n\n    const [sassVersion, nodeSassVersion] = await Promise.all([\n      getPackageVersion({ cwd: dir, name: 'sass' }),\n      getPackageVersion({ cwd: dir, name: 'node-sass' }),\n    ])\n    if (sassVersion && nodeSassVersion) {\n      Log.warn(\n        'Your project has both `sass` and `node-sass` installed as dependencies, but should only use one or the other. ' +\n          'Please remove the `node-sass` dependency from your project. ' +\n          ' Read more: https://nextjs.org/docs/messages/duplicate-sass'\n      )\n    }\n\n    if (!skipOnReboot) {\n      const { dependencies, devDependencies } = await getDependencies({\n        cwd: dir,\n      })\n\n      // Warn if @next/font is installed as a dependency. Ignore `workspace:*` to not warn in the Next.js monorepo.\n      if (\n        dependencies['@next/font'] ||\n        (devDependencies['@next/font'] &&\n          devDependencies['@next/font'] !== 'workspace:*')\n      ) {\n        const command = getNpxCommand(dir)\n        Log.warn(\n          'Your project has `@next/font` installed as a dependency, please use the built-in `next/font` instead. ' +\n            'The `@next/font` package will be removed in Next.js 14. ' +\n            `You can migrate by running \\`${command} @next/codemod@latest built-in-next-font .\\`. Read more: https://nextjs.org/docs/messages/built-in-next-font`\n        )\n      }\n    }\n  }\n\n  let port = options.port\n\n  if (isPortIsReserved(port)) {\n    printAndExit(getReservedPortExplanation(port), 1)\n  }\n\n  // If neither --port nor PORT were specified, it's okay to retry new ports.\n  const allowRetry = portSource === 'default'\n\n  // We do not set a default host value here to prevent breaking\n  // some set-ups that rely on listening on other interfaces\n  const host = options.hostname\n\n  if (\n    options.experimentalUploadTrace &&\n    !process.env.NEXT_TRACE_UPLOAD_DISABLED\n  ) {\n    traceUploadUrl = options.experimentalUploadTrace\n  }\n\n  if (traceUploadUrl) {\n    let isRageRestart = false\n    let distDirCleared = false\n    try {\n      if (fs.existsSync(DEV_STATE_FILE)) {\n        const allState = JSON.parse(\n          fs.readFileSync(DEV_STATE_FILE, 'utf8')\n        ) as Record<string, DevStateEntry>\n        const state = allState[dir]\n        if (\n          state?.stopTime &&\n          Date.now() - state.stopTime < RAGE_RESTART_THRESHOLD_MS\n        ) {\n          // Only flag as a rage restart if the git branch hasn't changed. If\n          // either the stored or current branch is unknown, skip the comparison\n          // and fall back to time-only detection.\n          const storedBranch = state.gitBranch\n          const currentBranch = getGitBranch(dir)\n          const branchChanged =\n            storedBranch && currentBranch && storedBranch !== currentBranch\n          if (!branchChanged) {\n            isRageRestart = true\n          }\n        }\n        if (state?.distDirPath && !fs.existsSync(state.distDirPath)) {\n          distDirCleared = true\n        }\n      }\n    } catch {\n      // Corrupt file — leave both flags false\n    }\n    devSpanAttrs = {\n      'rage-restart': isRageRestart,\n      'missing-next-dir': distDirCleared,\n    }\n  }\n\n  const enabledFeatures = Object.fromEntries(\n    Object.entries({\n      serverFastRefreshDisabled: options.serverFastRefresh === false,\n      experimentalCpuProf: options.experimentalCpuProf,\n    }).filter(([_, value]) => value)\n  )\n\n  for (const [key, value] of Object.entries(enabledFeatures)) {\n    sessionSpan.setAttribute(`feature.${key}`, value)\n  }\n\n  initializeTraceState({\n    ...exportTraceState(),\n    defaultParentSpanId: sessionSpan.getId(),\n  })\n\n  const devServerOptions: StartServerOptions = {\n    dir,\n    port,\n    allowRetry,\n    isDev: true,\n    hostname: host,\n    serverFastRefresh: options.serverFastRefresh,\n  }\n\n  const startServerPath = require.resolve('../server/lib/start-server')\n\n  async function startServer(startServerOptions: StartServerOptions) {\n    return new Promise<void>((resolve) => {\n      let resolved = false\n      const defaultEnv = (initialEnv || process.env) as typeof process.env\n\n      const nodeOptions = getParsedNodeOptions()\n\n      let maxOldSpaceSize: string | number | undefined = getMaxOldSpaceSize()\n      if (!maxOldSpaceSize && !process.env.NEXT_DISABLE_MEM_OVERRIDE) {\n        const totalMem = os.totalmem()\n        const totalMemInMB = Math.floor(totalMem / 1024 / 1024)\n        maxOldSpaceSize = Math.floor(totalMemInMB * 0.5).toString()\n\n        nodeOptions['max-old-space-size'] = maxOldSpaceSize\n\n        // Ensure the max_old_space_size is not also set.\n        delete nodeOptions['max_old_space_size']\n      }\n\n      if (options.disableSourceMaps) {\n        delete nodeOptions['enable-source-maps']\n      } else {\n        nodeOptions['enable-source-maps'] = true\n      }\n\n      const nodeDebugType = getNodeDebugType(nodeOptions)\n      const originalAddress =\n        nodeDebugType === undefined ? undefined : nodeOptions[nodeDebugType]\n      delete nodeOptions.inspect\n      delete nodeOptions['inspect-brk']\n      delete nodeOptions['inspect_brk']\n      if (nodeDebugType !== undefined) {\n        const address = getParsedDebugAddress(originalAddress)\n        address.port = address.port === 0 ? 0 : address.port + 1\n        nodeOptions[nodeDebugType] = formatDebugAddress(address)\n      } else if (options.inspect) {\n        const address: DebugAddress =\n          options.inspect === true\n            ? getParsedDebugAddress(true)\n            : options.inspect\n        nodeOptions.inspect = formatDebugAddress(address)\n      }\n\n      const { nodeOptions: formattedNodeOptions, execArgv } =\n        formatNodeOptions(nodeOptions)\n\n      child = fork(startServerPath, {\n        stdio: 'inherit',\n        execArgv,\n        env: {\n          ...defaultEnv,\n          ...(isTurbopack ? { TURBOPACK: process.env.TURBOPACK } : undefined),\n          __NEXT_DEV_SERVER: '1',\n          NEXT_PRIVATE_START_TIME: process.env.NEXT_PRIVATE_START_TIME,\n          NEXT_PRIVATE_WORKER: '1',\n          NEXT_PRIVATE_TRACE_ID: traceId,\n          NEXT_PRIVATE_ENABLED_FEATURES: JSON.stringify(enabledFeatures),\n          NEXT_PRIVATE_DEV_SPAN_ATTRS: JSON.stringify(devSpanAttrs),\n          NODE_EXTRA_CA_CERTS: startServerOptions.selfSignedCertificate\n            ? startServerOptions.selfSignedCertificate.rootCA\n            : defaultEnv.NODE_EXTRA_CA_CERTS,\n          NODE_OPTIONS: formattedNodeOptions,\n          // There is a node.js bug on MacOS which causes closing file watchers to be really slow.\n          // This limits the number of watchers x mitigate the issue.\n          // https://github.com/nodejs/node/issues/29949\n          WATCHPACK_WATCHER_LIMIT:\n            os.platform() === 'darwin' ? '20' : undefined,\n          // Enable CPU profiling if requested\n          ...(options.experimentalCpuProf\n            ? {\n                NEXT_CPU_PROF: '1',\n                NEXT_CPU_PROF_DIR: ensureProfilesDir(dir),\n                __NEXT_PRIVATE_CPU_PROFILE: 'dev-server',\n              }\n            : undefined),\n          ...(process.env.NEXT_TURBOPACK_TRACING\n            ? { NEXT_TURBOPACK_TRACING: process.env.NEXT_TURBOPACK_TRACING }\n            : undefined),\n        },\n      })\n\n      child.on('message', (msg: any) => {\n        if (msg && typeof msg === 'object') {\n          if (msg.nextWorkerReady) {\n            child?.send({ nextWorkerOptions: startServerOptions })\n          } else if (msg.nextServerReady && !resolved) {\n            if (msg.port) {\n              // Store the used port in case a random one was selected, so that\n              // it can be re-used on automatic dev server restarts.\n              port = parseInt(msg.port, 10)\n            }\n            if (msg.distDir) {\n              // Store the distDir from the child process for telemetry and trace uploads.\n              distDir = msg.distDir\n            }\n\n            resolved = true\n            resolve()\n          }\n        }\n      })\n\n      child.on('exit', async (code, signal) => {\n        if (sessionStopHandled || signal) {\n          return\n        }\n        if (code === RESTART_EXIT_CODE) {\n          // Starting the dev server will overwrite the `.next/trace` file, so we\n          // must upload the existing contents before restarting the server to\n          // preserve the metrics.\n          if (traceUploadUrl && distDir) {\n            uploadTrace({\n              traceUploadUrl,\n              mode: 'dev',\n              projectDir: dir,\n              distDir,\n              isTurboSession: isTurbopack,\n              sync: true,\n            })\n          }\n\n          // Reset the start time so \"Ready in X\" reflects the restart\n          // duration, not time since the original process started.\n          process.env.NEXT_PRIVATE_START_TIME = Date.now().toString()\n\n          return startServer({ ...startServerOptions, port })\n        }\n        // Call handler (e.g. upload telemetry). Don't try to send a signal to\n        // the child, as it has already exited.\n        await handleSessionStop(/* signal */ null)\n      })\n    })\n  }\n\n  const runDevServer = async (reboot: boolean) => {\n    try {\n      if (!!options.experimentalHttps) {\n        Log.warn(\n          'Self-signed certificates are currently an experimental feature, use with caution.'\n        )\n\n        let certificate: SelfSignedCertificate | undefined\n\n        const key = options.experimentalHttpsKey\n        const cert = options.experimentalHttpsCert\n        const rootCA = options.experimentalHttpsCa\n\n        if (key && cert) {\n          certificate = {\n            key: path.resolve(key),\n            cert: path.resolve(cert),\n            rootCA: rootCA ? path.resolve(rootCA) : undefined,\n          }\n        } else {\n          certificate = await createSelfSignedCertificate(host)\n        }\n\n        await startServer({\n          ...devServerOptions,\n          selfSignedCertificate: certificate,\n        })\n      } else {\n        await startServer(devServerOptions)\n      }\n\n      await preflight(reboot)\n    } catch (err) {\n      console.error(err)\n      process.exit(1)\n    }\n  }\n\n  await runDevServer(false)\n}\n\nfunction writeDevState(): void {\n  if (!traceUploadUrl || !dir) return\n  try {\n    fs.mkdirSync(path.dirname(DEV_STATE_FILE), { recursive: true })\n\n    let state: Record<string, DevStateEntry> = {}\n    try {\n      state = JSON.parse(fs.readFileSync(DEV_STATE_FILE, 'utf8'))\n    } catch {\n      // File missing or corrupt — start with empty state\n    }\n\n    // Eagerly remove entries that are stale (older than threshold) or invalid\n    // (future timestamps from clock skew or corruption).\n    const now = Date.now()\n    const cutoff = now - RAGE_RESTART_THRESHOLD_MS\n    for (const key of Object.keys(state)) {\n      const t = state[key]?.stopTime\n      if (!t || t < cutoff || t > now) {\n        delete state[key]\n      }\n    }\n\n    // Update current project\n    const gitBranch = getGitBranch(dir)\n    state[dir] = {\n      stopTime: Date.now(),\n      distDirPath: path.join(dir, distDir ?? '.next'),\n      ...(gitBranch ? { gitBranch } : {}),\n    }\n\n    const { sync: writeFileAtomicSync } =\n      require('next/dist/compiled/write-file-atomic') as typeof import('next/dist/compiled/write-file-atomic')\n    writeFileAtomicSync(DEV_STATE_FILE, JSON.stringify(state))\n  } catch {\n    // Best effort — don't interfere with shutdown\n  }\n}\n\nexport { nextDev }\n"],"names":["nextDev","dir","child","distDir","isTurbopack","traceUploadUrl","sessionStopHandled","devSpanAttrs","sessionStarted","Date","now","sessionSpan","trace","RAGE_RESTART_THRESHOLD_MS","DEV_STATE_FILE","path","join","getCacheDirectory","CHILD_EXIT_TIMEOUT_MS","parseInt","process","env","NEXT_EXIT_TIMEOUT_MS","handleSessionStop","signal","pid","kill","exitCode","signalCode","exitTimeout","setTimeout","once","catch","clearTimeout","stop","eventCliSessionStopped","require","pagesDir","traceGlobals","get","appDir","pagesResult","findPagesDir","telemetry","Telemetry","record","cliCommand","turboFlag","durationMilliseconds","flushDetached","_","uploadTrace","mode","projectDir","isTurboSession","writeDevState","saveCpuProfile","stdout","write","exit","on","options","portSource","directory","parseBundlerArgs","Bundler","Turbopack","getProjectDir","NEXT_PRIVATE_DEV_DIR","fileExists","FileType","Directory","printAndExit","experimentalCpuProf","Log","info","preflight","skipOnReboot","getPackageVersion","getDependencies","Promise","resolve","sassVersion","nodeSassVersion","all","cwd","name","warn","dependencies","devDependencies","command","getNpxCommand","port","isPortIsReserved","getReservedPortExplanation","allowRetry","host","hostname","experimentalUploadTrace","NEXT_TRACE_UPLOAD_DISABLED","isRageRestart","distDirCleared","fs","existsSync","allState","JSON","parse","readFileSync","state","stopTime","storedBranch","gitBranch","currentBranch","getGitBranch","branchChanged","distDirPath","enabledFeatures","Object","fromEntries","entries","serverFastRefreshDisabled","serverFastRefresh","filter","value","key","setAttribute","initializeTraceState","exportTraceState","defaultParentSpanId","getId","devServerOptions","isDev","startServerPath","startServer","startServerOptions","resolved","defaultEnv","initialEnv","nodeOptions","getParsedNodeOptions","maxOldSpaceSize","getMaxOldSpaceSize","NEXT_DISABLE_MEM_OVERRIDE","totalMem","os","totalmem","totalMemInMB","Math","floor","toString","disableSourceMaps","nodeDebugType","getNodeDebugType","originalAddress","undefined","inspect","address","getParsedDebugAddress","formatDebugAddress","formattedNodeOptions","execArgv","formatNodeOptions","fork","stdio","TURBOPACK","__NEXT_DEV_SERVER","NEXT_PRIVATE_START_TIME","NEXT_PRIVATE_WORKER","NEXT_PRIVATE_TRACE_ID","traceId","NEXT_PRIVATE_ENABLED_FEATURES","stringify","NEXT_PRIVATE_DEV_SPAN_ATTRS","NODE_EXTRA_CA_CERTS","selfSignedCertificate","rootCA","NODE_OPTIONS","WATCHPACK_WATCHER_LIMIT","platform","NEXT_CPU_PROF","NEXT_CPU_PROF_DIR","ensureProfilesDir","__NEXT_PRIVATE_CPU_PROFILE","NEXT_TURBOPACK_TRACING","msg","nextWorkerReady","send","nextWorkerOptions","nextServerReady","code","RESTART_EXIT_CODE","sync","runDevServer","reboot","experimentalHttps","certificate","experimentalHttpsKey","cert","experimentalHttpsCert","experimentalHttpsCa","createSelfSignedCertificate","err","console","error","mkdirSync","dirname","recursive","cutoff","keys","t","writeFileAtomicSync"],"mappings":"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","ignoreList":[0]}