{"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 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 os from 'os'\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}\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\nconst sessionStarted = Date.now()\nconst sessionSpan = trace('next-dev')\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    let 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\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', () => child?.kill('SIGKILL'))\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/cpu-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  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          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 to 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: path.join(dir, '.next', 'cpu-profiles'),\n                __NEXT_PRIVATE_CPU_PROFILE: 'dev-server',\n              }\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\nexport { nextDev }\n"],"names":["nextDev","dir","child","distDir","isTurbopack","traceUploadUrl","sessionStopHandled","sessionStarted","Date","now","sessionSpan","trace","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","path","join","record","cliCommand","turboFlag","durationMilliseconds","flushDetached","_","uploadTrace","mode","projectDir","isTurboSession","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","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","JSON","stringify","NODE_EXTRA_CA_CERTS","selfSignedCertificate","rootCA","NODE_OPTIONS","WATCHPACK_WATCHER_LIMIT","platform","NEXT_CPU_PROF","NEXT_CPU_PROF_DIR","__NEXT_PRIVATE_CPU_PROFILE","msg","nextWorkerReady","send","nextWorkerOptions","nextServerReady","code","RESTART_EXIT_CODE","sync","runDevServer","reboot","experimentalHttps","certificate","experimentalHttpsKey","cert","experimentalHttpsCert","experimentalHttpsCa","createSelfSignedCertificate","err","console","error"],"mappings":"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","ignoreList":[0]}