{"version":3,"sources":["../../../../src/lib/typescript/writeConfigurationDefaults.ts"],"sourcesContent":["import { readFileSync, writeFileSync } from 'fs'\nimport { bold, cyan, white } from '../picocolors'\nimport * as CommentJson from 'next/dist/compiled/comment-json'\nimport semver from 'next/dist/compiled/semver'\nimport os from 'os'\nimport type { CompilerOptions } from 'typescript'\nimport { getTypeDefinitionGlobPatterns } from './type-paths'\nimport * as Log from '../../build/output/log'\n\ntype DesiredCompilerOptionsShape = {\n  [K in keyof CompilerOptions]:\n    | { suggested: any; reason?: string }\n    | {\n        parsedValue?: any\n        parsedValues?: Array<any>\n        value: any\n        reason: string\n      }\n}\n\nfunction getDesiredCompilerOptions(\n  typescriptVersion: string,\n  userTsConfig?: Record<string, any>\n): DesiredCompilerOptionsShape {\n  // ModuleKind\n  const moduleKindESNext = 'esnext'\n  const moduleKindES2020 = 'es2020'\n  const moduleKindPreserve = 'preserve'\n  const moduleKindNodeNext = 'nodenext'\n  const moduleKindNode16 = 'node16'\n  const moduleKindCommonJS = 'commonjs'\n  const moduleKindAMD = 'amd'\n\n  // ModuleResolutionKind\n  const moduleResolutionKindBundler = 'bundler'\n  const moduleResolutionKindNode16 = 'node16'\n  const moduleResolutionKindNodeNext = 'nodenext'\n  const moduleResolutionKindNode12 = 'node12'\n  const moduleResolutionKindNode = 'node'\n  const configuredModule =\n    typeof userTsConfig?.compilerOptions?.module === 'string'\n      ? userTsConfig.compilerOptions.module.toLowerCase()\n      : undefined\n  const preferBundlerResolution =\n    semver.gte(typescriptVersion, '5.0.0') &&\n    configuredModule !== moduleKindCommonJS &&\n    configuredModule !== moduleKindAMD\n\n  // Jsx\n  const jsxEmitReactJSX = 'react-jsx'\n\n  return {\n    target: {\n      suggested: 'ES2017',\n      reason:\n        'For top-level `await`. Note: Next.js only polyfills for the esmodules target.',\n    },\n    // These are suggested values and will be set when not present in the\n    // tsconfig.json\n    lib: { suggested: ['dom', 'dom.iterable', 'esnext'] },\n    allowJs: { suggested: true },\n    skipLibCheck: { suggested: true },\n    strict: { suggested: false },\n    noEmit: { suggested: true },\n    incremental: { suggested: true },\n\n    // These values are required and cannot be changed by the user\n    // Keep this in sync with the webpack config\n    // 'parsedValue' matches the output value from ts.parseJsonConfigFileContent()\n    module: {\n      parsedValue: moduleKindESNext,\n      // All of these values work:\n      parsedValues: [\n        semver.gte(typescriptVersion, '5.4.0') && moduleKindPreserve,\n        moduleKindES2020,\n        moduleKindESNext,\n        moduleKindCommonJS,\n        moduleKindAMD,\n        moduleKindNodeNext,\n        moduleKindNode16,\n      ],\n      value: 'esnext',\n      reason: 'for dynamic import() support',\n    },\n    // TODO: Semver check not needed once Next.js repo uses 5.4.\n    ...(semver.gte(typescriptVersion, '5.4.0') &&\n    userTsConfig?.compilerOptions?.module?.toLowerCase() === moduleKindPreserve\n      ? {\n          // TypeScript 5.4 introduced `Preserve`. Using `Preserve` implies\n          // - `moduleResolution` is `Bundler`\n          // - `esModuleInterop` is `true`\n          // - `resolveJsonModule` is `true`\n          // This means that if the user is using Preserve, they don't need these options\n        }\n      : {\n          esModuleInterop: {\n            value: true,\n            reason: 'requirement for SWC / babel',\n          },\n          moduleResolution: {\n            parsedValue: preferBundlerResolution\n              ? moduleResolutionKindBundler\n              : moduleResolutionKindNode,\n            // All of these values work:\n            parsedValues: preferBundlerResolution\n              ? [\n                  moduleResolutionKindNode16,\n                  moduleResolutionKindNodeNext,\n                  moduleResolutionKindBundler,\n                ]\n              : [\n                  moduleResolutionKindNode,\n                  // only older TypeScript versions have this field\n                  moduleResolutionKindNode12,\n                  moduleResolutionKindNode16,\n                  moduleResolutionKindNodeNext,\n                ],\n            value: preferBundlerResolution\n              ? moduleResolutionKindBundler\n              : moduleResolutionKindNode,\n            reason: preferBundlerResolution\n              ? 'to match modern bundler resolution'\n              : 'to match webpack resolution',\n          },\n          resolveJsonModule: {\n            value: true,\n            reason: 'to match webpack resolution',\n          },\n        }),\n    ...(userTsConfig?.compilerOptions?.verbatimModuleSyntax === true\n      ? undefined\n      : {\n          isolatedModules: {\n            value: true,\n            reason: 'requirement for SWC / Babel',\n          },\n        }),\n    jsx: {\n      parsedValue: jsxEmitReactJSX,\n      value: 'react-jsx',\n      reason: 'next.js uses the React automatic runtime',\n    },\n  } satisfies DesiredCompilerOptionsShape\n}\n\nexport function getRequiredConfiguration(\n  typescript: typeof import('typescript')\n): Partial<import('typescript').CompilerOptions> {\n  const res: Partial<import('typescript').CompilerOptions> = {}\n  const typescriptVersion = typescript.version\n\n  const desiredCompilerOptions = getDesiredCompilerOptions(typescriptVersion)\n  for (const optionKey of Object.keys(desiredCompilerOptions)) {\n    const ev = desiredCompilerOptions[optionKey]\n    if (!('value' in ev)) {\n      continue\n    }\n\n    const value = ev.parsedValue ?? ev.value\n\n    // Convert string values back to TypeScript enum values\n    if (optionKey === 'module' && typeof value === 'string') {\n      const moduleMap: Record<string, import('typescript').ModuleKind> = {\n        esnext: typescript.ModuleKind.ESNext,\n        es2020: typescript.ModuleKind.ES2020,\n        ...(typescript.ModuleKind.Preserve !== undefined\n          ? { preserve: typescript.ModuleKind.Preserve }\n          : {}),\n        nodenext: typescript.ModuleKind.NodeNext,\n        node16: typescript.ModuleKind.Node16,\n        commonjs: typescript.ModuleKind.CommonJS,\n        amd: typescript.ModuleKind.AMD,\n      }\n      res[optionKey] = moduleMap[value.toLowerCase()] ?? value\n    } else if (optionKey === 'moduleResolution' && typeof value === 'string') {\n      const moduleResolutionMap: Record<\n        string,\n        import('typescript').ModuleResolutionKind\n      > = {\n        bundler: typescript.ModuleResolutionKind.Bundler,\n        node16: typescript.ModuleResolutionKind.Node16,\n        nodenext: typescript.ModuleResolutionKind.NodeNext,\n        node12: (typescript.ModuleResolutionKind as any).Node12,\n        node:\n          (typescript.ModuleResolutionKind as any).Node10 ??\n          typescript.ModuleResolutionKind.NodeJs,\n      }\n      res[optionKey] = moduleResolutionMap[value.toLowerCase()] ?? value\n    } else if (optionKey === 'jsx' && typeof value === 'string') {\n      const jsxMap: Record<string, import('typescript').JsxEmit> = {\n        'react-jsx': typescript.JsxEmit.ReactJSX,\n      }\n      res[optionKey] = jsxMap[value.toLowerCase()] ?? value\n    } else {\n      res[optionKey] = value\n    }\n  }\n\n  return res\n}\n\nconst localDevTestFilesExcludeAction =\n  'NEXT_PRIVATE_LOCAL_DEV_TEST_FILES_EXCLUDE'\n\nexport async function writeConfigurationDefaults(\n  typescriptVersion: string,\n  tsConfigPath: string,\n  isFirstTimeSetup: boolean,\n  hasAppDir: boolean,\n  distDir: string,\n  hasPagesDir: boolean,\n  strictRouteTypes: boolean\n): Promise<void> {\n  if (isFirstTimeSetup) {\n    writeFileSync(tsConfigPath, '{}' + os.EOL)\n  }\n\n  const userTsConfigContent = readFileSync(tsConfigPath, 'utf8')\n  const userTsConfig = CommentJson.parse(userTsConfigContent)\n\n  // Bail automatic setup when the user has extended or referenced another config\n  if ('extends' in userTsConfig || 'references' in userTsConfig) {\n    return\n  }\n\n  if (userTsConfig?.compilerOptions == null) {\n    userTsConfig.compilerOptions = {}\n    isFirstTimeSetup = true\n  }\n\n  const desiredCompilerOptions = getDesiredCompilerOptions(\n    typescriptVersion,\n    userTsConfig\n  )\n\n  const suggestedActions: string[] = []\n  const requiredActions: string[] = []\n  for (const optionKey in desiredCompilerOptions) {\n    const check = desiredCompilerOptions[optionKey]\n    if ('suggested' in check) {\n      if (!(optionKey in userTsConfig?.compilerOptions)) {\n        userTsConfig.compilerOptions[optionKey] = check.suggested\n        suggestedActions.push(\n          cyan(optionKey) +\n            ' was set to ' +\n            bold(check.suggested) +\n            (check.reason ? ` (${check.reason})` : '')\n        )\n      }\n    } else if ('value' in check) {\n      let existingValue = userTsConfig?.compilerOptions?.[optionKey]\n\n      if (typeof existingValue === 'string') {\n        existingValue = existingValue.toLowerCase()\n      }\n\n      const shouldWriteRequiredValue = () => {\n        // Check if the option has multiple allowed values\n        if (check.parsedValues) {\n          return !check.parsedValues.includes(existingValue)\n        }\n\n        // Check if the option has a single parsed value\n        if (check.parsedValue) {\n          return check.parsedValue !== existingValue\n        }\n\n        // Fall back to direct value comparison\n        return check.value !== existingValue\n      }\n\n      if (shouldWriteRequiredValue()) {\n        if (!userTsConfig.compilerOptions) {\n          userTsConfig.compilerOptions = {}\n        }\n        userTsConfig.compilerOptions[optionKey] = check.value\n        requiredActions.push(\n          cyan(optionKey) +\n            ' was set to ' +\n            bold(check.value) +\n            ` (${check.reason})`\n        )\n      }\n    } else {\n      const _: never = check\n    }\n  }\n\n  // Get type definition glob patterns using shared utility to ensure consistency\n  // with other TypeScript infrastructure (e.g., runTypeCheck.ts)\n  const nextTypes = getTypeDefinitionGlobPatterns(distDir)\n\n  if (!('include' in userTsConfig)) {\n    const defaultInclude =\n      hasAppDir && !strictRouteTypes\n        ? ['next-env.d.ts', ...nextTypes, '**/*.mts', '**/*.ts', '**/*.tsx']\n        : ['next-env.d.ts', '**/*.mts', '**/*.ts', '**/*.tsx']\n\n    userTsConfig.include = defaultInclude\n    suggestedActions.push(\n      cyan('include') +\n        ' was set to [' +\n        bold(defaultInclude.map((type) => `'${type}'`).join(', ')) +\n        ']'\n    )\n  } else if (hasAppDir && !strictRouteTypes) {\n    const missingFromResolved = []\n    for (const type of nextTypes) {\n      if (!userTsConfig.include.includes(type)) {\n        missingFromResolved.push(type)\n      }\n    }\n\n    if (missingFromResolved.length > 0) {\n      if (!Array.isArray(userTsConfig.include)) {\n        userTsConfig.include = []\n      }\n\n      missingFromResolved.forEach((item) => {\n        userTsConfig.include.push(item)\n        suggestedActions.push(\n          cyan('include') + ' was updated to add ' + bold(`'${item}'`)\n        )\n      })\n    }\n  }\n\n  // Enable the Next.js typescript plugin.\n  if (hasAppDir) {\n    // Check if the config or the resolved config has the plugin already.\n    const plugins = [\n      ...(Array.isArray(userTsConfig?.plugins) ? userTsConfig.plugins : []),\n      ...(userTsConfig.compilerOptions &&\n      Array.isArray(userTsConfig.compilerOptions.plugins)\n        ? userTsConfig.compilerOptions.plugins\n        : []),\n    ]\n    const hasNextPlugin = plugins.some(\n      ({ name }: { name: string }) => name === 'next'\n    )\n\n    // If the TS config extends on another config, we can't add the `plugin` field\n    // because that will override the parent config's plugins.\n    // Instead we have to show a message to the user to add the plugin manually.\n    if (\n      !userTsConfig.compilerOptions ||\n      (plugins.length &&\n        !hasNextPlugin &&\n        'extends' in userTsConfig &&\n        (!userTsConfig.compilerOptions ||\n          !userTsConfig.compilerOptions.plugins))\n    ) {\n      Log.info(\n        `\\nYour ${bold(\n          'tsconfig.json'\n        )} extends another configuration, which means we cannot add the Next.js TypeScript plugin automatically. To improve your development experience, we recommend adding the Next.js plugin (\\`${cyan(\n          '\"plugins\": [{ \"name\": \"next\" }]'\n        )}\\`) manually to your TypeScript configuration. Learn more: https://nextjs.org/docs/app/api-reference/config/typescript#the-typescript-plugin\\n`\n      )\n    } else if (!hasNextPlugin) {\n      if (!('plugins' in userTsConfig.compilerOptions)) {\n        userTsConfig.compilerOptions.plugins = []\n      }\n      userTsConfig.compilerOptions.plugins.push({ name: 'next' })\n      suggestedActions.push(\n        cyan('plugins') + ' was updated to add ' + bold(`{ name: 'next' }`)\n      )\n    }\n\n    // If `strict` is set to `false` and `strictNullChecks` is set to `false`,\n    // then set `strictNullChecks` to `true`.\n    if (\n      hasPagesDir &&\n      hasAppDir &&\n      !userTsConfig?.compilerOptions?.strict &&\n      !('strictNullChecks' in userTsConfig?.compilerOptions)\n    ) {\n      userTsConfig.compilerOptions.strictNullChecks = true\n      suggestedActions.push(\n        cyan('strictNullChecks') + ' was set to ' + bold(`true`)\n      )\n    }\n  }\n\n  if (!('exclude' in userTsConfig)) {\n    userTsConfig.exclude = ['node_modules']\n    suggestedActions.push(\n      cyan('exclude') + ' was set to ' + bold(`['node_modules']`)\n    )\n  }\n\n  // During local development inside Next.js repo, exclude the test files coverage by the local tsconfig\n  if (process.env.NEXT_PRIVATE_LOCAL_DEV && userTsConfig.exclude) {\n    const tsGlob = '**/*.test.ts'\n    const tsxGlob = '**/*.test.tsx'\n    let hasUpdates = false\n    if (!userTsConfig.exclude.includes(tsGlob)) {\n      userTsConfig.exclude.push(tsGlob)\n      hasUpdates = true\n    }\n    if (!userTsConfig.exclude.includes(tsxGlob)) {\n      userTsConfig.exclude.push(tsxGlob)\n      hasUpdates = true\n    }\n\n    if (hasUpdates) {\n      requiredActions.push(localDevTestFilesExcludeAction)\n    }\n  }\n\n  if (suggestedActions.length < 1 && requiredActions.length < 1) {\n    return\n  }\n\n  writeFileSync(\n    tsConfigPath,\n    CommentJson.stringify(userTsConfig, null, 2) + os.EOL\n  )\n\n  Log.info('')\n  if (isFirstTimeSetup) {\n    Log.info(\n      `We detected TypeScript in your project and created a ${cyan(\n        'tsconfig.json'\n      )} file for you.`\n    )\n    return\n  }\n\n  Log.info(\n    `We detected TypeScript in your project and reconfigured your ${cyan(\n      'tsconfig.json'\n    )} file for you.${\n      userTsConfig.compilerOptions?.strict\n        ? ''\n        : ` Strict-mode is set to ${cyan('false')} by default.`\n    }`\n  )\n\n  if (suggestedActions.length) {\n    Log.info(\n      `The following suggested values were added to your ${cyan(\n        'tsconfig.json'\n      )}. These values ${cyan('can be changed')} to fit your project's needs:\\n`\n    )\n\n    suggestedActions.forEach((action) => Log.info(`\\t- ${action}`))\n\n    Log.info('')\n  }\n\n  const requiredActionsToBeLogged = process.env.NEXT_PRIVATE_LOCAL_DEV\n    ? requiredActions.filter(\n        (action) => action !== localDevTestFilesExcludeAction\n      )\n    : requiredActions\n\n  if (requiredActionsToBeLogged.length) {\n    Log.info(\n      `The following ${white('mandatory changes')} were made to your ${cyan(\n        'tsconfig.json'\n      )}:\\n`\n    )\n\n    requiredActionsToBeLogged.forEach((action) => Log.info(`\\t- ${action}`))\n\n    Log.info('')\n  }\n}\n"],"names":["readFileSync","writeFileSync","bold","cyan","white","CommentJson","semver","os","getTypeDefinitionGlobPatterns","Log","getDesiredCompilerOptions","typescriptVersion","userTsConfig","moduleKindESNext","moduleKindES2020","moduleKindPreserve","moduleKindNodeNext","moduleKindNode16","moduleKindCommonJS","moduleKindAMD","moduleResolutionKindBundler","moduleResolutionKindNode16","moduleResolutionKindNodeNext","moduleResolutionKindNode12","moduleResolutionKindNode","configuredModule","compilerOptions","module","toLowerCase","undefined","preferBundlerResolution","gte","jsxEmitReactJSX","target","suggested","reason","lib","allowJs","skipLibCheck","strict","noEmit","incremental","parsedValue","parsedValues","value","esModuleInterop","moduleResolution","resolveJsonModule","verbatimModuleSyntax","isolatedModules","jsx","getRequiredConfiguration","typescript","res","version","desiredCompilerOptions","optionKey","Object","keys","ev","moduleMap","esnext","ModuleKind","ESNext","es2020","ES2020","Preserve","preserve","nodenext","NodeNext","node16","Node16","commonjs","CommonJS","amd","AMD","moduleResolutionMap","bundler","ModuleResolutionKind","Bundler","node12","Node12","node","Node10","NodeJs","jsxMap","JsxEmit","ReactJSX","localDevTestFilesExcludeAction","writeConfigurationDefaults","tsConfigPath","isFirstTimeSetup","hasAppDir","distDir","hasPagesDir","strictRouteTypes","EOL","userTsConfigContent","parse","suggestedActions","requiredActions","check","push","existingValue","shouldWriteRequiredValue","includes","_","nextTypes","defaultInclude","include","map","type","join","missingFromResolved","length","Array","isArray","forEach","item","plugins","hasNextPlugin","some","name","info","strictNullChecks","exclude","process","env","NEXT_PRIVATE_LOCAL_DEV","tsGlob","tsxGlob","hasUpdates","stringify","action","requiredActionsToBeLogged","filter"],"mappings":"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","ignoreList":[0]}