next 16.1.1-canary.13 → 16.1.1-canary.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.build-commit +1 -1
- package/dist/bin/next +2 -2
- package/dist/build/index.js +3 -3
- package/dist/build/swc/index.js +1 -1
- package/dist/build/type-check.js +4 -3
- package/dist/build/type-check.js.map +1 -1
- package/dist/build/webpack-config.js +3 -3
- package/dist/bundle-analyzer/404.html +2 -2
- package/dist/bundle-analyzer/__next.__PAGE__.txt +1 -1
- package/dist/bundle-analyzer/__next._full.txt +1 -1
- package/dist/bundle-analyzer/__next._head.txt +1 -1
- package/dist/bundle-analyzer/__next._index.txt +1 -1
- package/dist/bundle-analyzer/__next._tree.txt +1 -1
- package/dist/bundle-analyzer/_not-found/__next._full.txt +1 -1
- package/dist/bundle-analyzer/_not-found/__next._head.txt +1 -1
- package/dist/bundle-analyzer/_not-found/__next._index.txt +1 -1
- package/dist/bundle-analyzer/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/dist/bundle-analyzer/_not-found/__next._not-found.txt +1 -1
- package/dist/bundle-analyzer/_not-found/__next._tree.txt +1 -1
- package/dist/bundle-analyzer/_not-found.html +2 -2
- package/dist/bundle-analyzer/_not-found.txt +1 -1
- package/dist/bundle-analyzer/index.html +2 -2
- package/dist/bundle-analyzer/index.txt +1 -1
- package/dist/cli/next-test.js +2 -1
- package/dist/cli/next-test.js.map +1 -1
- package/dist/cli/next-typegen.js +4 -2
- package/dist/cli/next-typegen.js.map +1 -1
- package/dist/client/app-bootstrap.js +1 -1
- package/dist/client/index.js +1 -1
- package/dist/compiled/next-server/pages-api.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages-api.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages.runtime.dev.js.map +1 -1
- package/dist/esm/build/index.js +3 -3
- package/dist/esm/build/swc/index.js +1 -1
- package/dist/esm/build/type-check.js +4 -3
- package/dist/esm/build/type-check.js.map +1 -1
- package/dist/esm/build/webpack-config.js +3 -3
- package/dist/esm/client/app-bootstrap.js +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/lib/typescript/writeAppTypeDeclarations.js +18 -10
- package/dist/esm/lib/typescript/writeAppTypeDeclarations.js.map +1 -1
- package/dist/esm/lib/typescript/writeConfigurationDefaults.js +8 -7
- package/dist/esm/lib/typescript/writeConfigurationDefaults.js.map +1 -1
- package/dist/esm/lib/verify-typescript-setup.js +5 -4
- package/dist/esm/lib/verify-typescript-setup.js.map +1 -1
- package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/esm/server/lib/app-info-log.js +1 -1
- package/dist/esm/server/lib/router-utils/route-types-utils.js +0 -20
- package/dist/esm/server/lib/router-utils/route-types-utils.js.map +1 -1
- package/dist/esm/server/lib/router-utils/setup-dev-bundler.js +3 -8
- package/dist/esm/server/lib/router-utils/setup-dev-bundler.js.map +1 -1
- package/dist/esm/server/lib/router-utils/typegen.js +7 -11
- package/dist/esm/server/lib/router-utils/typegen.js.map +1 -1
- package/dist/esm/server/lib/start-server.js +1 -1
- package/dist/esm/shared/lib/errors/canary-only-config-error.js +1 -1
- package/dist/lib/typescript/writeAppTypeDeclarations.d.ts +3 -3
- package/dist/lib/typescript/writeAppTypeDeclarations.js +18 -10
- package/dist/lib/typescript/writeAppTypeDeclarations.js.map +1 -1
- package/dist/lib/typescript/writeConfigurationDefaults.d.ts +1 -1
- package/dist/lib/typescript/writeConfigurationDefaults.js +8 -7
- package/dist/lib/typescript/writeConfigurationDefaults.js.map +1 -1
- package/dist/lib/verify-typescript-setup.d.ts +3 -3
- package/dist/lib/verify-typescript-setup.js +5 -4
- package/dist/lib/verify-typescript-setup.js.map +1 -1
- package/dist/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/server/lib/app-info-log.js +1 -1
- package/dist/server/lib/router-utils/route-types-utils.d.ts +0 -9
- package/dist/server/lib/router-utils/route-types-utils.js +0 -17
- package/dist/server/lib/router-utils/route-types-utils.js.map +1 -1
- package/dist/server/lib/router-utils/setup-dev-bundler.js +2 -7
- package/dist/server/lib/router-utils/setup-dev-bundler.js.map +1 -1
- package/dist/server/lib/router-utils/typegen.js +7 -11
- package/dist/server/lib/router-utils/typegen.js.map +1 -1
- package/dist/server/lib/start-server.js +1 -1
- package/dist/shared/lib/errors/canary-only-config-error.js +1 -1
- package/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/telemetry/events/session-stopped.js +2 -2
- package/dist/telemetry/events/version.js +2 -2
- package/package.json +15 -15
- /package/dist/bundle-analyzer/_next/static/{bo6zOIZ5tUP7aVRjeqElS → mqnk7CZQ-0CmHbCRF2ua6}/_buildManifest.js +0 -0
- /package/dist/bundle-analyzer/_next/static/{bo6zOIZ5tUP7aVRjeqElS → mqnk7CZQ-0CmHbCRF2ua6}/_clientMiddlewareManifest.json +0 -0
- /package/dist/bundle-analyzer/_next/static/{bo6zOIZ5tUP7aVRjeqElS → mqnk7CZQ-0CmHbCRF2ua6}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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'\nimport { defaultConfig } from '../../server/config-shared'\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 moduleResolutionKindNode10 = 'node10'\n const moduleResolutionKindNode12 = 'node12'\n const moduleResolutionKindNodeJs = 'node'\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 // In TypeScript 5.0, `NodeJs` has renamed to `Node10`\n parsedValue: moduleResolutionKindBundler,\n // All of these values work:\n parsedValues: [\n moduleResolutionKindNode10,\n moduleResolutionKindNodeJs,\n // only newer TypeScript versions have this field, it\n // will be filtered for new versions of TypeScript\n moduleResolutionKindNode12,\n moduleKindNode16,\n moduleKindNodeNext,\n moduleResolutionKindBundler,\n ].filter((val) => typeof val !== 'undefined'),\n value: 'node',\n reason: '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 node10: typescript.ModuleResolutionKind.Node10,\n node12: (typescript.ModuleResolutionKind as any).Node12,\n node: 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 isolatedDevBuild: boolean | undefined\n): Promise<void> {\n if (isFirstTimeSetup) {\n writeFileSync(tsConfigPath, '{}' + os.EOL)\n }\n\n const userTsConfigContent = readFileSync(tsConfigPath, {\n encoding: 'utf8',\n })\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 const resolvedIsolatedDevBuild =\n isolatedDevBuild === undefined\n ? defaultConfig.experimental.isolatedDevBuild\n : isolatedDevBuild\n\n // Get type definition glob patterns using shared utility to ensure consistency\n // with other TypeScript infrastructure (e.g., runTypeCheck.ts)\n const nextAppTypes = getTypeDefinitionGlobPatterns(\n distDir,\n resolvedIsolatedDevBuild\n )\n\n if (!('include' in userTsConfig)) {\n userTsConfig.include = hasAppDir\n ? ['next-env.d.ts', ...nextAppTypes, '**/*.mts', '**/*.ts', '**/*.tsx']\n : ['next-env.d.ts', '**/*.mts', '**/*.ts', '**/*.tsx']\n suggestedActions.push(\n cyan('include') +\n ' was set to ' +\n bold(\n hasAppDir\n ? `['next-env.d.ts', ${nextAppTypes.map((type) => `'${type}'`).join(', ')}, '**/*.mts', '**/*.ts', '**/*.tsx']`\n : `['next-env.d.ts', '**/*.mts', '**/*.ts', '**/*.tsx']`\n )\n )\n } else if (hasAppDir) {\n const missingFromResolved = []\n for (const type of nextAppTypes) {\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":["getRequiredConfiguration","writeConfigurationDefaults","getDesiredCompilerOptions","typescriptVersion","userTsConfig","moduleKindESNext","moduleKindES2020","moduleKindPreserve","moduleKindNodeNext","moduleKindNode16","moduleKindCommonJS","moduleKindAMD","moduleResolutionKindBundler","moduleResolutionKindNode10","moduleResolutionKindNode12","moduleResolutionKindNodeJs","jsxEmitReactJSX","target","suggested","reason","lib","allowJs","skipLibCheck","strict","noEmit","incremental","module","parsedValue","parsedValues","semver","gte","value","compilerOptions","toLowerCase","esModuleInterop","moduleResolution","filter","val","resolveJsonModule","verbatimModuleSyntax","undefined","isolatedModules","jsx","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","node10","Node10","node12","Node12","node","NodeJs","jsxMap","JsxEmit","ReactJSX","localDevTestFilesExcludeAction","tsConfigPath","isFirstTimeSetup","hasAppDir","distDir","hasPagesDir","isolatedDevBuild","writeFileSync","os","EOL","userTsConfigContent","readFileSync","encoding","CommentJson","parse","suggestedActions","requiredActions","check","push","cyan","bold","existingValue","shouldWriteRequiredValue","includes","_","resolvedIsolatedDevBuild","defaultConfig","experimental","nextAppTypes","getTypeDefinitionGlobPatterns","include","map","type","join","missingFromResolved","length","Array","isArray","forEach","item","plugins","hasNextPlugin","some","name","Log","info","strictNullChecks","exclude","process","env","NEXT_PRIVATE_LOCAL_DEV","tsGlob","tsxGlob","hasUpdates","stringify","action","requiredActionsToBeLogged","white"],"mappings":"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","ignoreList":[0]}
|
|
1
|
+
{"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'\nimport { defaultConfig } from '../../server/config-shared'\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 moduleResolutionKindNode10 = 'node10'\n const moduleResolutionKindNode12 = 'node12'\n const moduleResolutionKindNodeJs = 'node'\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 // In TypeScript 5.0, `NodeJs` has renamed to `Node10`\n parsedValue: moduleResolutionKindBundler,\n // All of these values work:\n parsedValues: [\n moduleResolutionKindNode10,\n moduleResolutionKindNodeJs,\n // only newer TypeScript versions have this field, it\n // will be filtered for new versions of TypeScript\n moduleResolutionKindNode12,\n moduleKindNode16,\n moduleKindNodeNext,\n moduleResolutionKindBundler,\n ].filter((val) => typeof val !== 'undefined'),\n value: 'node',\n reason: '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 node10: typescript.ModuleResolutionKind.Node10,\n node12: (typescript.ModuleResolutionKind as any).Node12,\n node: 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 isolatedDevBuild: boolean | undefined,\n strictRouteTypes: boolean\n): Promise<void> {\n if (isFirstTimeSetup) {\n writeFileSync(tsConfigPath, '{}' + os.EOL)\n }\n\n const userTsConfigContent = readFileSync(tsConfigPath, {\n encoding: 'utf8',\n })\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 const resolvedIsolatedDevBuild =\n isolatedDevBuild === undefined\n ? defaultConfig.experimental.isolatedDevBuild\n : isolatedDevBuild\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(\n distDir,\n resolvedIsolatedDevBuild\n )\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":["getRequiredConfiguration","writeConfigurationDefaults","getDesiredCompilerOptions","typescriptVersion","userTsConfig","moduleKindESNext","moduleKindES2020","moduleKindPreserve","moduleKindNodeNext","moduleKindNode16","moduleKindCommonJS","moduleKindAMD","moduleResolutionKindBundler","moduleResolutionKindNode10","moduleResolutionKindNode12","moduleResolutionKindNodeJs","jsxEmitReactJSX","target","suggested","reason","lib","allowJs","skipLibCheck","strict","noEmit","incremental","module","parsedValue","parsedValues","semver","gte","value","compilerOptions","toLowerCase","esModuleInterop","moduleResolution","filter","val","resolveJsonModule","verbatimModuleSyntax","undefined","isolatedModules","jsx","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","node10","Node10","node12","Node12","node","NodeJs","jsxMap","JsxEmit","ReactJSX","localDevTestFilesExcludeAction","tsConfigPath","isFirstTimeSetup","hasAppDir","distDir","hasPagesDir","isolatedDevBuild","strictRouteTypes","writeFileSync","os","EOL","userTsConfigContent","readFileSync","encoding","CommentJson","parse","suggestedActions","requiredActions","check","push","cyan","bold","existingValue","shouldWriteRequiredValue","includes","_","resolvedIsolatedDevBuild","defaultConfig","experimental","nextTypes","getTypeDefinitionGlobPatterns","defaultInclude","include","map","type","join","missingFromResolved","length","Array","isArray","forEach","item","plugins","hasNextPlugin","some","name","Log","info","strictNullChecks","exclude","process","env","NEXT_PRIVATE_LOCAL_DEV","tsGlob","tsxGlob","hasUpdates","stringify","action","requiredActionsToBeLogged","white"],"mappings":"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","ignoreList":[0]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { TypeCheckResult } from './typescript/runTypeCheck';
|
|
2
|
-
export declare function verifyTypeScriptSetup({ dir, distDir,
|
|
2
|
+
export declare function verifyTypeScriptSetup({ dir, distDir, cacheDir, strictRouteTypes, tsconfigPath, typeCheckPreflight, typedRoutes, disableStaticImages, hasAppDir, hasPagesDir, isolatedDevBuild, appDir, pagesDir, debugBuildPaths, }: {
|
|
3
3
|
dir: string;
|
|
4
4
|
distDir: string;
|
|
5
|
-
/** The original distDir before any modifications (e.g., for isolatedDevBuild). */
|
|
6
|
-
distDirRoot?: string;
|
|
7
5
|
cacheDir?: string;
|
|
6
|
+
strictRouteTypes: boolean;
|
|
8
7
|
tsconfigPath: string | undefined;
|
|
9
8
|
typeCheckPreflight: boolean;
|
|
9
|
+
typedRoutes: boolean;
|
|
10
10
|
disableStaticImages: boolean;
|
|
11
11
|
hasAppDir: boolean;
|
|
12
12
|
hasPagesDir: boolean;
|
|
@@ -83,7 +83,7 @@ const requiredPackages = [
|
|
|
83
83
|
exportsRestrict: true
|
|
84
84
|
}
|
|
85
85
|
];
|
|
86
|
-
async function verifyTypeScriptSetup({ dir, distDir,
|
|
86
|
+
async function verifyTypeScriptSetup({ dir, distDir, cacheDir, strictRouteTypes, tsconfigPath, typeCheckPreflight, typedRoutes, disableStaticImages, hasAppDir, hasPagesDir, isolatedDevBuild, appDir, pagesDir, debugBuildPaths }) {
|
|
87
87
|
const tsConfigFileName = tsconfigPath || 'tsconfig.json';
|
|
88
88
|
const resolvedTsConfigPath = _path.default.join(dir, tsConfigFileName);
|
|
89
89
|
// Construct intentDirs from appDir and pagesDir for getTypeScriptIntent
|
|
@@ -125,16 +125,17 @@ async function verifyTypeScriptSetup({ dir, distDir, distDirRoot, cacheDir, tsco
|
|
|
125
125
|
_log.warn(`Minimum recommended TypeScript version is v5.1.0, older versions can potentially be incompatible with Next.js. Detected: ${typescriptVersion}`);
|
|
126
126
|
}
|
|
127
127
|
// Reconfigure (or create) the user's `tsconfig.json` for them:
|
|
128
|
-
await (0, _writeConfigurationDefaults.writeConfigurationDefaults)(typescriptVersion, resolvedTsConfigPath, intent.firstTimeSetup, hasAppDir, distDir, hasPagesDir, isolatedDevBuild);
|
|
128
|
+
await (0, _writeConfigurationDefaults.writeConfigurationDefaults)(typescriptVersion, resolvedTsConfigPath, intent.firstTimeSetup, hasAppDir, distDir, hasPagesDir, isolatedDevBuild, strictRouteTypes);
|
|
129
129
|
// Write out the necessary `next-env.d.ts` file to correctly register
|
|
130
130
|
// Next.js' types:
|
|
131
131
|
await (0, _writeAppTypeDeclarations.writeAppTypeDeclarations)({
|
|
132
132
|
baseDir: dir,
|
|
133
133
|
distDir,
|
|
134
|
-
distDirRoot,
|
|
135
134
|
imageImportsEnabled: !disableStaticImages,
|
|
136
135
|
hasPagesDir,
|
|
137
|
-
hasAppDir
|
|
136
|
+
hasAppDir,
|
|
137
|
+
strictRouteTypes,
|
|
138
|
+
typedRoutes
|
|
138
139
|
});
|
|
139
140
|
let result;
|
|
140
141
|
if (typeCheckPreflight) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/verify-typescript-setup.ts"],"sourcesContent":["import { bold, cyan, red, yellow } from './picocolors'\nimport path, { join } from 'path'\n\nimport { hasNecessaryDependencies } from './has-necessary-dependencies'\nimport type { NecessaryDependencies } from './has-necessary-dependencies'\nimport semver from 'next/dist/compiled/semver'\nimport { CompileError } from './compile-error'\nimport * as log from '../build/output/log'\n\nimport { getTypeScriptIntent } from './typescript/getTypeScriptIntent'\nimport type { TypeCheckResult } from './typescript/runTypeCheck'\nimport { writeAppTypeDeclarations } from './typescript/writeAppTypeDeclarations'\nimport { writeConfigurationDefaults } from './typescript/writeConfigurationDefaults'\nimport { installDependencies } from './install-dependencies'\nimport { isCI } from '../server/ci-info'\nimport { missingDepsError } from './typescript/missingDependencyError'\n\nconst requiredPackages = [\n {\n file: 'typescript/lib/typescript.js',\n pkg: 'typescript',\n exportsRestrict: true,\n },\n {\n file: '@types/react/index.d.ts',\n pkg: '@types/react',\n exportsRestrict: true,\n },\n {\n file: '@types/node/index.d.ts',\n pkg: '@types/node',\n exportsRestrict: true,\n },\n]\n\nexport async function verifyTypeScriptSetup({\n dir,\n distDir,\n distDirRoot,\n cacheDir,\n tsconfigPath,\n typeCheckPreflight,\n disableStaticImages,\n hasAppDir,\n hasPagesDir,\n isolatedDevBuild,\n appDir,\n pagesDir,\n debugBuildPaths,\n}: {\n dir: string\n distDir: string\n /** The original distDir before any modifications (e.g., for isolatedDevBuild). */\n distDirRoot?: string\n cacheDir?: string\n tsconfigPath: string | undefined\n typeCheckPreflight: boolean\n disableStaticImages: boolean\n hasAppDir: boolean\n hasPagesDir: boolean\n isolatedDevBuild: boolean | undefined\n appDir?: string\n pagesDir?: string\n debugBuildPaths?: { app?: string[]; pages?: string[] }\n}): Promise<{ result?: TypeCheckResult; version: string | null }> {\n const tsConfigFileName = tsconfigPath || 'tsconfig.json'\n const resolvedTsConfigPath = path.join(dir, tsConfigFileName)\n\n // Construct intentDirs from appDir and pagesDir for getTypeScriptIntent\n const intentDirs = [pagesDir, appDir].filter(Boolean) as string[]\n\n try {\n // Check if the project uses TypeScript:\n const intent = await getTypeScriptIntent(dir, intentDirs, tsConfigFileName)\n if (!intent) {\n return { version: null }\n }\n\n // Ensure TypeScript and necessary `@types/*` are installed:\n let deps: NecessaryDependencies = hasNecessaryDependencies(\n dir,\n requiredPackages\n )\n\n if (deps.missing?.length > 0) {\n if (isCI) {\n // we don't attempt auto install in CI to avoid side-effects\n // and instead log the error for installing needed packages\n missingDepsError(dir, deps.missing)\n }\n console.log(\n bold(\n yellow(\n `It looks like you're trying to use TypeScript but do not have the required package(s) installed.`\n )\n ) +\n '\\n' +\n 'Installing dependencies' +\n '\\n\\n' +\n bold(\n 'If you are not trying to use TypeScript, please remove the ' +\n cyan('tsconfig.json') +\n ' file from your package root (and any TypeScript files in your app and pages directories).'\n ) +\n '\\n'\n )\n await installDependencies(dir, deps.missing, true).catch((err) => {\n if (err && typeof err === 'object' && 'command' in err) {\n console.error(\n `Failed to install required TypeScript dependencies, please install them manually to continue:\\n` +\n (err as any).command +\n '\\n'\n )\n }\n throw err\n })\n deps = hasNecessaryDependencies(dir, requiredPackages)\n }\n\n // Load TypeScript after we're sure it exists:\n const tsPackageJsonPath = deps.resolved.get(\n join('typescript', 'package.json')\n )!\n const typescriptPackageJson = require(tsPackageJsonPath)\n\n const typescriptVersion = typescriptPackageJson.version\n\n if (semver.lt(typescriptVersion, '5.1.0')) {\n log.warn(\n `Minimum recommended TypeScript version is v5.1.0, older versions can potentially be incompatible with Next.js. Detected: ${typescriptVersion}`\n )\n }\n\n // Reconfigure (or create) the user's `tsconfig.json` for them:\n await writeConfigurationDefaults(\n typescriptVersion,\n resolvedTsConfigPath,\n intent.firstTimeSetup,\n hasAppDir,\n distDir,\n hasPagesDir,\n isolatedDevBuild\n )\n // Write out the necessary `next-env.d.ts` file to correctly register\n // Next.js' types:\n await writeAppTypeDeclarations({\n baseDir: dir,\n distDir,\n distDirRoot,\n imageImportsEnabled: !disableStaticImages,\n hasPagesDir,\n hasAppDir,\n })\n\n let result\n if (typeCheckPreflight) {\n const { runTypeCheck } =\n require('./typescript/runTypeCheck') as typeof import('./typescript/runTypeCheck')\n\n const tsPath = deps.resolved.get('typescript')!\n const typescript = (await Promise.resolve(\n require(tsPath)\n )) as typeof import('typescript')\n\n // Verify the project passes type-checking before we go to webpack phase:\n result = await runTypeCheck(\n typescript,\n dir,\n distDir,\n resolvedTsConfigPath,\n cacheDir,\n hasAppDir,\n isolatedDevBuild,\n { app: appDir, pages: pagesDir },\n debugBuildPaths\n )\n }\n return { result, version: typescriptVersion }\n } catch (err) {\n // These are special errors that should not show a stack trace:\n if (err instanceof CompileError) {\n console.error(red('Failed to compile.\\n'))\n console.error(err.message)\n process.exit(1)\n }\n\n /**\n * verifyTypeScriptSetup can be either invoked directly in the main thread (during next dev / next lint)\n * or run in a worker (during next build). In the latter case, we need to print the error message, as the\n * parent process will only receive an `Jest worker encountered 1 child process exceptions, exceeding retry limit`.\n */\n\n // we are in a worker, print the error message and exit the process\n if (process.env.IS_NEXT_WORKER) {\n if (err instanceof Error) {\n console.error(err.message)\n } else {\n console.error(err)\n }\n process.exit(1)\n }\n // we are in the main thread, throw the error and it will be handled by the caller\n throw err\n }\n}\n"],"names":["verifyTypeScriptSetup","requiredPackages","file","pkg","exportsRestrict","dir","distDir","distDirRoot","cacheDir","tsconfigPath","typeCheckPreflight","disableStaticImages","hasAppDir","hasPagesDir","isolatedDevBuild","appDir","pagesDir","debugBuildPaths","tsConfigFileName","resolvedTsConfigPath","path","join","intentDirs","filter","Boolean","deps","intent","getTypeScriptIntent","version","hasNecessaryDependencies","missing","length","isCI","missingDepsError","console","log","bold","yellow","cyan","installDependencies","catch","err","error","command","tsPackageJsonPath","resolved","get","typescriptPackageJson","require","typescriptVersion","semver","lt","warn","writeConfigurationDefaults","firstTimeSetup","writeAppTypeDeclarations","baseDir","imageImportsEnabled","result","runTypeCheck","tsPath","typescript","Promise","resolve","app","pages","CompileError","red","message","process","exit","env","IS_NEXT_WORKER","Error"],"mappings":"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","ignoreList":[0]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/verify-typescript-setup.ts"],"sourcesContent":["import { bold, cyan, red, yellow } from './picocolors'\nimport path, { join } from 'path'\n\nimport { hasNecessaryDependencies } from './has-necessary-dependencies'\nimport type { NecessaryDependencies } from './has-necessary-dependencies'\nimport semver from 'next/dist/compiled/semver'\nimport { CompileError } from './compile-error'\nimport * as log from '../build/output/log'\n\nimport { getTypeScriptIntent } from './typescript/getTypeScriptIntent'\nimport type { TypeCheckResult } from './typescript/runTypeCheck'\nimport { writeAppTypeDeclarations } from './typescript/writeAppTypeDeclarations'\nimport { writeConfigurationDefaults } from './typescript/writeConfigurationDefaults'\nimport { installDependencies } from './install-dependencies'\nimport { isCI } from '../server/ci-info'\nimport { missingDepsError } from './typescript/missingDependencyError'\n\nconst requiredPackages = [\n {\n file: 'typescript/lib/typescript.js',\n pkg: 'typescript',\n exportsRestrict: true,\n },\n {\n file: '@types/react/index.d.ts',\n pkg: '@types/react',\n exportsRestrict: true,\n },\n {\n file: '@types/node/index.d.ts',\n pkg: '@types/node',\n exportsRestrict: true,\n },\n]\n\nexport async function verifyTypeScriptSetup({\n dir,\n distDir,\n cacheDir,\n strictRouteTypes,\n tsconfigPath,\n typeCheckPreflight,\n typedRoutes,\n disableStaticImages,\n hasAppDir,\n hasPagesDir,\n isolatedDevBuild,\n appDir,\n pagesDir,\n debugBuildPaths,\n}: {\n dir: string\n distDir: string\n cacheDir?: string\n strictRouteTypes: boolean\n tsconfigPath: string | undefined\n typeCheckPreflight: boolean\n typedRoutes: boolean\n disableStaticImages: boolean\n hasAppDir: boolean\n hasPagesDir: boolean\n isolatedDevBuild: boolean | undefined\n appDir?: string\n pagesDir?: string\n debugBuildPaths?: { app?: string[]; pages?: string[] }\n}): Promise<{ result?: TypeCheckResult; version: string | null }> {\n const tsConfigFileName = tsconfigPath || 'tsconfig.json'\n const resolvedTsConfigPath = path.join(dir, tsConfigFileName)\n\n // Construct intentDirs from appDir and pagesDir for getTypeScriptIntent\n const intentDirs = [pagesDir, appDir].filter(Boolean) as string[]\n\n try {\n // Check if the project uses TypeScript:\n const intent = await getTypeScriptIntent(dir, intentDirs, tsConfigFileName)\n if (!intent) {\n return { version: null }\n }\n\n // Ensure TypeScript and necessary `@types/*` are installed:\n let deps: NecessaryDependencies = hasNecessaryDependencies(\n dir,\n requiredPackages\n )\n\n if (deps.missing?.length > 0) {\n if (isCI) {\n // we don't attempt auto install in CI to avoid side-effects\n // and instead log the error for installing needed packages\n missingDepsError(dir, deps.missing)\n }\n console.log(\n bold(\n yellow(\n `It looks like you're trying to use TypeScript but do not have the required package(s) installed.`\n )\n ) +\n '\\n' +\n 'Installing dependencies' +\n '\\n\\n' +\n bold(\n 'If you are not trying to use TypeScript, please remove the ' +\n cyan('tsconfig.json') +\n ' file from your package root (and any TypeScript files in your app and pages directories).'\n ) +\n '\\n'\n )\n await installDependencies(dir, deps.missing, true).catch((err) => {\n if (err && typeof err === 'object' && 'command' in err) {\n console.error(\n `Failed to install required TypeScript dependencies, please install them manually to continue:\\n` +\n (err as any).command +\n '\\n'\n )\n }\n throw err\n })\n deps = hasNecessaryDependencies(dir, requiredPackages)\n }\n\n // Load TypeScript after we're sure it exists:\n const tsPackageJsonPath = deps.resolved.get(\n join('typescript', 'package.json')\n )!\n const typescriptPackageJson = require(tsPackageJsonPath)\n\n const typescriptVersion = typescriptPackageJson.version\n\n if (semver.lt(typescriptVersion, '5.1.0')) {\n log.warn(\n `Minimum recommended TypeScript version is v5.1.0, older versions can potentially be incompatible with Next.js. Detected: ${typescriptVersion}`\n )\n }\n\n // Reconfigure (or create) the user's `tsconfig.json` for them:\n await writeConfigurationDefaults(\n typescriptVersion,\n resolvedTsConfigPath,\n intent.firstTimeSetup,\n hasAppDir,\n distDir,\n hasPagesDir,\n isolatedDevBuild,\n strictRouteTypes\n )\n // Write out the necessary `next-env.d.ts` file to correctly register\n // Next.js' types:\n await writeAppTypeDeclarations({\n baseDir: dir,\n distDir,\n imageImportsEnabled: !disableStaticImages,\n hasPagesDir,\n hasAppDir,\n strictRouteTypes,\n typedRoutes,\n })\n\n let result\n if (typeCheckPreflight) {\n const { runTypeCheck } =\n require('./typescript/runTypeCheck') as typeof import('./typescript/runTypeCheck')\n\n const tsPath = deps.resolved.get('typescript')!\n const typescript = (await Promise.resolve(\n require(tsPath)\n )) as typeof import('typescript')\n\n // Verify the project passes type-checking before we go to webpack phase:\n result = await runTypeCheck(\n typescript,\n dir,\n distDir,\n resolvedTsConfigPath,\n cacheDir,\n hasAppDir,\n isolatedDevBuild,\n { app: appDir, pages: pagesDir },\n debugBuildPaths\n )\n }\n return { result, version: typescriptVersion }\n } catch (err) {\n // These are special errors that should not show a stack trace:\n if (err instanceof CompileError) {\n console.error(red('Failed to compile.\\n'))\n console.error(err.message)\n process.exit(1)\n }\n\n /**\n * verifyTypeScriptSetup can be either invoked directly in the main thread (during next dev / next lint)\n * or run in a worker (during next build). In the latter case, we need to print the error message, as the\n * parent process will only receive an `Jest worker encountered 1 child process exceptions, exceeding retry limit`.\n */\n\n // we are in a worker, print the error message and exit the process\n if (process.env.IS_NEXT_WORKER) {\n if (err instanceof Error) {\n console.error(err.message)\n } else {\n console.error(err)\n }\n process.exit(1)\n }\n // we are in the main thread, throw the error and it will be handled by the caller\n throw err\n }\n}\n"],"names":["verifyTypeScriptSetup","requiredPackages","file","pkg","exportsRestrict","dir","distDir","cacheDir","strictRouteTypes","tsconfigPath","typeCheckPreflight","typedRoutes","disableStaticImages","hasAppDir","hasPagesDir","isolatedDevBuild","appDir","pagesDir","debugBuildPaths","tsConfigFileName","resolvedTsConfigPath","path","join","intentDirs","filter","Boolean","deps","intent","getTypeScriptIntent","version","hasNecessaryDependencies","missing","length","isCI","missingDepsError","console","log","bold","yellow","cyan","installDependencies","catch","err","error","command","tsPackageJsonPath","resolved","get","typescriptPackageJson","require","typescriptVersion","semver","lt","warn","writeConfigurationDefaults","firstTimeSetup","writeAppTypeDeclarations","baseDir","imageImportsEnabled","result","runTypeCheck","tsPath","typescript","Promise","resolve","app","pages","CompileError","red","message","process","exit","env","IS_NEXT_WORKER","Error"],"mappings":"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","ignoreList":[0]}
|
|
@@ -153,7 +153,7 @@ async function createHotReloaderTurbopack(opts, serverFields, distDir, resetFetc
|
|
|
153
153
|
}
|
|
154
154
|
const hasRewrites = opts.fsChecker.rewrites.afterFiles.length > 0 || opts.fsChecker.rewrites.beforeFiles.length > 0 || opts.fsChecker.rewrites.fallback.length > 0;
|
|
155
155
|
const hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
|
|
156
|
-
version: "16.1.1-canary.
|
|
156
|
+
version: "16.1.1-canary.14"
|
|
157
157
|
});
|
|
158
158
|
// Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
|
|
159
159
|
// of the current `next dev` invocation.
|
|
@@ -233,7 +233,7 @@ class HotReloaderWebpack {
|
|
|
233
233
|
this.previewProps = previewProps;
|
|
234
234
|
this.rewrites = rewrites;
|
|
235
235
|
this.hotReloaderSpan = (0, _trace.trace)('hot-reloader', undefined, {
|
|
236
|
-
version: "16.1.1-canary.
|
|
236
|
+
version: "16.1.1-canary.14"
|
|
237
237
|
});
|
|
238
238
|
// Ensure the hotReloaderSpan is flushed immediately as it's the parentSpan for all processing
|
|
239
239
|
// of the current `next dev` invocation.
|
|
@@ -91,7 +91,7 @@ function logStartInfo({ networkUrl, appUrl, envInfo, experimentalFeatures, logBu
|
|
|
91
91
|
if (parts.length > 0) {
|
|
92
92
|
versionSuffix = ` (${parts.join(', ')})`;
|
|
93
93
|
}
|
|
94
|
-
_log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"16.1.1-canary.
|
|
94
|
+
_log.bootstrap(`${(0, _picocolors.bold)((0, _picocolors.purple)(`${_log.prefixes.ready} Next.js ${"16.1.1-canary.14"}`))}${versionSuffix}`);
|
|
95
95
|
if (appUrl) {
|
|
96
96
|
_log.bootstrap(`- Local: ${appUrl}`);
|
|
97
97
|
}
|
|
@@ -69,13 +69,4 @@ export declare function createRouteTypesManifest({ dir, pageRoutes, appRoutes, a
|
|
|
69
69
|
}): Promise<RouteTypesManifest>;
|
|
70
70
|
export declare function writeRouteTypesManifest(manifest: RouteTypesManifest, filePath: string, config: NextConfigComplete): Promise<void>;
|
|
71
71
|
export declare function writeValidatorFile(manifest: RouteTypesManifest, filePath: string, strict: boolean): Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* Writes a proxy routes.d.ts file at the stable path that re-exports from
|
|
74
|
-
* the actual dev types location. This allows next-env.d.ts to always reference
|
|
75
|
-
* the same stable path regardless of dev/build mode.
|
|
76
|
-
*
|
|
77
|
-
* @param stableTypesDir - The stable types directory (e.g., .next/types)
|
|
78
|
-
* @param devTypesRelativePath - Relative path from stable dir to dev types (e.g., ../dev/types/routes.d.ts)
|
|
79
|
-
*/
|
|
80
|
-
export declare function writeRouteTypesProxy(stableTypesDir: string, devTypesRelativePath: string): Promise<void>;
|
|
81
72
|
export {};
|
|
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
createRouteTypesManifest: null,
|
|
8
8
|
extractRouteParams: null,
|
|
9
9
|
writeRouteTypesManifest: null,
|
|
10
|
-
writeRouteTypesProxy: null,
|
|
11
10
|
writeValidatorFile: null
|
|
12
11
|
});
|
|
13
12
|
function _export(target, all) {
|
|
@@ -29,9 +28,6 @@ _export(exports, {
|
|
|
29
28
|
writeRouteTypesManifest: function() {
|
|
30
29
|
return writeRouteTypesManifest;
|
|
31
30
|
},
|
|
32
|
-
writeRouteTypesProxy: function() {
|
|
33
|
-
return writeRouteTypesProxy;
|
|
34
|
-
},
|
|
35
31
|
writeValidatorFile: function() {
|
|
36
32
|
return writeValidatorFile;
|
|
37
33
|
}
|
|
@@ -286,18 +282,5 @@ async function writeValidatorFile(manifest, filePath, strict) {
|
|
|
286
282
|
}
|
|
287
283
|
await _fs.default.promises.writeFile(filePath, strict ? (0, _typegen.generateValidatorFileStrict)(manifest) : (0, _typegen.generateValidatorFile)(manifest));
|
|
288
284
|
}
|
|
289
|
-
async function writeRouteTypesProxy(stableTypesDir, devTypesRelativePath) {
|
|
290
|
-
if (!_fs.default.existsSync(stableTypesDir)) {
|
|
291
|
-
await _fs.default.promises.mkdir(stableTypesDir, {
|
|
292
|
-
recursive: true
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
const proxyFilePath = _path.default.join(stableTypesDir, 'routes.d.ts');
|
|
296
|
-
const proxyContent = `// This file re-exports route types from the dev types location.
|
|
297
|
-
// This provides a stable import path for next-env.d.ts across dev/build modes.
|
|
298
|
-
export * from '${devTypesRelativePath}';
|
|
299
|
-
`;
|
|
300
|
-
await _fs.default.promises.writeFile(proxyFilePath, proxyContent);
|
|
301
|
-
}
|
|
302
285
|
|
|
303
286
|
//# sourceMappingURL=route-types-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/server/lib/router-utils/route-types-utils.ts"],"sourcesContent":["import path from 'path'\nimport {\n getRouteRegex,\n type Group,\n} from '../../../shared/lib/router/utils/route-regex'\nimport type { NextConfigComplete } from '../../config-shared'\n\nimport fs from 'fs'\nimport {\n generateRouteTypesFile,\n generateLinkTypesFile,\n generateValidatorFile,\n generateValidatorFileStrict,\n generateRouteTypesFileStrict,\n} from './typegen'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from '../../../shared/lib/router/utils/interception-routes'\nimport {\n UNDERSCORE_GLOBAL_ERROR_ROUTE,\n UNDERSCORE_NOT_FOUND_ROUTE,\n} from '../../../shared/lib/entry-constants'\nimport { normalizePathSep } from '../../../shared/lib/page-path/normalize-path-sep'\n\ninterface RouteInfo {\n path: string\n groups: { [groupName: string]: Group }\n}\n\nexport interface RouteTypesManifest {\n appRoutes: Record<string, RouteInfo>\n pageRoutes: Record<string, RouteInfo>\n layoutRoutes: Record<string, RouteInfo & { slots: string[] }>\n appRouteHandlerRoutes: Record<string, RouteInfo>\n /** Map of redirect source => RouteInfo */\n redirectRoutes: Record<string, RouteInfo>\n /** Map of rewrite source => RouteInfo */\n rewriteRoutes: Record<string, RouteInfo>\n /** File paths for validation */\n appPagePaths: Set<string>\n pagesRouterPagePaths: Set<string>\n layoutPaths: Set<string>\n appRouteHandlers: Set<string>\n pageApiRoutes: Set<string>\n /** Direct mapping from file paths to routes for validation */\n filePathToRoute: Map<string, string>\n}\n\n// Convert a custom-route source string (`/blog/:slug`, `/docs/:path*`, ...)\n// into the bracket-syntax used by other Next.js route helpers so that we can\n// reuse `getRouteRegex()` to extract groups.\nexport function convertCustomRouteSource(source: string): string[] {\n const parseResult = tryToParsePath(source)\n\n if (parseResult.error || !parseResult.tokens) {\n // Fallback to original source if parsing fails\n return source.startsWith('/') ? [source] : ['/' + source]\n }\n\n const possibleNormalizedRoutes = ['']\n let slugCnt = 1\n\n function append(suffix: string) {\n for (let i = 0; i < possibleNormalizedRoutes.length; i++) {\n possibleNormalizedRoutes[i] += suffix\n }\n }\n\n function fork(suffix: string) {\n const currentLength = possibleNormalizedRoutes.length\n for (let i = 0; i < currentLength; i++) {\n possibleNormalizedRoutes.push(possibleNormalizedRoutes[i] + suffix)\n }\n }\n\n for (const token of parseResult.tokens) {\n if (typeof token === 'object') {\n // Make sure the slug is always named.\n const slug = token.name || (slugCnt++ === 1 ? 'slug' : `slug${slugCnt}`)\n if (token.modifier === '*') {\n append(`${token.prefix}[[...${slug}]]`)\n } else if (token.modifier === '+') {\n append(`${token.prefix}[...${slug}]`)\n } else if (token.modifier === '') {\n if (token.pattern === '[^\\\\/#\\\\?]+?') {\n // A safe slug\n append(`${token.prefix}[${slug}]`)\n } else if (token.pattern === '.*') {\n // An optional catch-all slug\n append(`${token.prefix}[[...${slug}]]`)\n } else if (token.pattern === '.+') {\n // A catch-all slug\n append(`${token.prefix}[...${slug}]`)\n } else {\n // Other regex patterns are not supported. Skip this route.\n return []\n }\n } else if (token.modifier === '?') {\n if (/^[a-zA-Z0-9_/]*$/.test(token.pattern)) {\n // An optional slug with plain text only, fork the route.\n append(token.prefix)\n fork(token.pattern)\n } else {\n // Optional modifier `?` and regex patterns are not supported.\n return []\n }\n }\n } else if (typeof token === 'string') {\n append(token)\n }\n }\n\n // Ensure leading slash\n return possibleNormalizedRoutes.map((route) =>\n route.startsWith('/') ? route : '/' + route\n )\n}\n\n/**\n * Extracts route parameters from a route pattern\n */\nexport function extractRouteParams(route: string) {\n const regex = getRouteRegex(route)\n return regex.groups\n}\n\n/**\n * Resolves an intercepting route to its canonical equivalent\n * Example: /gallery/test/(..)photo/[id] -> /gallery/photo/[id]\n */\nfunction resolveInterceptingRoute(route: string): string {\n // Reuse centralized interception route normalization logic\n try {\n if (!isInterceptionRouteAppPath(route)) return route\n const { interceptedRoute } = extractInterceptionRouteInformation(route)\n return interceptedRoute\n } catch {\n // If parsing fails, fall back to the original route\n return route\n }\n}\n\n/**\n * Creates a route types manifest from processed route data\n * (used for both build and dev)\n */\nexport async function createRouteTypesManifest({\n dir,\n pageRoutes,\n appRoutes,\n appRouteHandlers,\n pageApiRoutes,\n layoutRoutes,\n slots,\n redirects,\n rewrites,\n validatorFilePath,\n}: {\n dir: string\n pageRoutes: Array<{ route: string; filePath: string }>\n appRoutes: Array<{ route: string; filePath: string }>\n appRouteHandlers: Array<{ route: string; filePath: string }>\n pageApiRoutes: Array<{ route: string; filePath: string }>\n layoutRoutes: Array<{ route: string; filePath: string }>\n slots: Array<{ name: string; parent: string }>\n redirects?: NextConfigComplete['redirects']\n rewrites?: NextConfigComplete['rewrites']\n validatorFilePath?: string\n}): Promise<RouteTypesManifest> {\n // Helper function to calculate the correct relative path\n const getRelativePath = (filePath: string) => {\n if (validatorFilePath) {\n // For validator generation, calculate path relative to validator directory\n return normalizePathSep(\n path.relative(path.dirname(validatorFilePath), filePath)\n )\n }\n // For other uses, calculate path relative to project directory\n return normalizePathSep(path.relative(dir, filePath))\n }\n\n const manifest: RouteTypesManifest = {\n appRoutes: {},\n pageRoutes: {},\n layoutRoutes: {},\n appRouteHandlerRoutes: {},\n redirectRoutes: {},\n rewriteRoutes: {},\n appRouteHandlers: new Set(\n appRouteHandlers.map(({ filePath }) => getRelativePath(filePath))\n ),\n pageApiRoutes: new Set(\n pageApiRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n appPagePaths: new Set(\n appRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n pagesRouterPagePaths: new Set(\n pageRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n layoutPaths: new Set(\n layoutRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n filePathToRoute: new Map([\n ...appRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), resolveInterceptingRoute(route)] as [\n string,\n string,\n ]\n ),\n ...layoutRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), resolveInterceptingRoute(route)] as [\n string,\n string,\n ]\n ),\n ...appRouteHandlers.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), resolveInterceptingRoute(route)] as [\n string,\n string,\n ]\n ),\n ...pageRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), route] as [string, string]\n ),\n ...pageApiRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), route] as [string, string]\n ),\n ]),\n }\n\n // Process page routes\n for (const { route, filePath } of pageRoutes) {\n manifest.pageRoutes[route] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(route),\n }\n }\n\n // Process layout routes (exclude internal app error/not-found layouts)\n for (const { route, filePath } of layoutRoutes) {\n if (\n route === UNDERSCORE_GLOBAL_ERROR_ROUTE ||\n route === UNDERSCORE_NOT_FOUND_ROUTE\n )\n continue\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n if (!manifest.layoutRoutes[resolvedRoute]) {\n manifest.layoutRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n slots: [],\n }\n }\n }\n\n // Process slots\n for (const slot of slots) {\n if (manifest.layoutRoutes[slot.parent]) {\n manifest.layoutRoutes[slot.parent].slots.push(slot.name)\n }\n }\n\n // Process app routes (exclude internal app routes)\n for (const { route, filePath } of appRoutes) {\n if (\n route === UNDERSCORE_GLOBAL_ERROR_ROUTE ||\n route === UNDERSCORE_NOT_FOUND_ROUTE\n )\n continue\n // Don't include metadata routes or pages\n if (\n !filePath.endsWith('page.ts') &&\n !filePath.endsWith('page.tsx') &&\n !filePath.endsWith('.mdx') &&\n !filePath.endsWith('.md')\n ) {\n continue\n }\n\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.appRoutes[resolvedRoute]) {\n manifest.appRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n }\n }\n }\n\n // Process app route handlers\n for (const { route, filePath } of appRouteHandlers) {\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.appRouteHandlerRoutes[resolvedRoute]) {\n manifest.appRouteHandlerRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n }\n }\n }\n\n // Process redirects\n if (typeof redirects === 'function') {\n const rd = await redirects()\n\n for (const item of rd) {\n const possibleRoutes = convertCustomRouteSource(item.source)\n for (const route of possibleRoutes) {\n manifest.redirectRoutes[route] = {\n path: route,\n groups: extractRouteParams(route),\n }\n }\n }\n }\n\n // Process rewrites\n if (typeof rewrites === 'function') {\n const rw = await rewrites()\n\n const allSources = Array.isArray(rw)\n ? rw\n : [\n ...(rw?.beforeFiles || []),\n ...(rw?.afterFiles || []),\n ...(rw?.fallback || []),\n ]\n\n for (const item of allSources) {\n const possibleRoutes = convertCustomRouteSource(item.source)\n for (const route of possibleRoutes) {\n manifest.rewriteRoutes[route] = {\n path: route,\n groups: extractRouteParams(route),\n }\n }\n }\n }\n\n return manifest\n}\n\nexport async function writeRouteTypesManifest(\n manifest: RouteTypesManifest,\n filePath: string,\n config: NextConfigComplete\n) {\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true })\n }\n\n // Write the main routes.d.ts file\n await fs.promises.writeFile(\n filePath,\n config.experimental.strictRouteTypes\n ? generateRouteTypesFileStrict(manifest)\n : generateRouteTypesFile(manifest)\n )\n\n // Write the link.d.ts file if typedRoutes is enabled\n if (config.typedRoutes === true) {\n const linkTypesPath = path.join(dirname, 'link.d.ts')\n await fs.promises.writeFile(linkTypesPath, generateLinkTypesFile(manifest))\n }\n}\n\nexport async function writeValidatorFile(\n manifest: RouteTypesManifest,\n filePath: string,\n strict: boolean\n) {\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true })\n }\n\n await fs.promises.writeFile(\n filePath,\n strict\n ? generateValidatorFileStrict(manifest)\n : generateValidatorFile(manifest)\n )\n}\n\n/**\n * Writes a proxy routes.d.ts file at the stable path that re-exports from\n * the actual dev types location. This allows next-env.d.ts to always reference\n * the same stable path regardless of dev/build mode.\n *\n * @param stableTypesDir - The stable types directory (e.g., .next/types)\n * @param devTypesRelativePath - Relative path from stable dir to dev types (e.g., ../dev/types/routes.d.ts)\n */\nexport async function writeRouteTypesProxy(\n stableTypesDir: string,\n devTypesRelativePath: string\n) {\n if (!fs.existsSync(stableTypesDir)) {\n await fs.promises.mkdir(stableTypesDir, { recursive: true })\n }\n\n const proxyFilePath = path.join(stableTypesDir, 'routes.d.ts')\n const proxyContent = `// This file re-exports route types from the dev types location.\n// This provides a stable import path for next-env.d.ts across dev/build modes.\nexport * from '${devTypesRelativePath}';\n`\n\n await fs.promises.writeFile(proxyFilePath, proxyContent)\n}\n"],"names":["convertCustomRouteSource","createRouteTypesManifest","extractRouteParams","writeRouteTypesManifest","writeRouteTypesProxy","writeValidatorFile","source","parseResult","tryToParsePath","error","tokens","startsWith","possibleNormalizedRoutes","slugCnt","append","suffix","i","length","fork","currentLength","push","token","slug","name","modifier","prefix","pattern","test","map","route","regex","getRouteRegex","groups","resolveInterceptingRoute","isInterceptionRouteAppPath","interceptedRoute","extractInterceptionRouteInformation","dir","pageRoutes","appRoutes","appRouteHandlers","pageApiRoutes","layoutRoutes","slots","redirects","rewrites","validatorFilePath","getRelativePath","filePath","normalizePathSep","path","relative","dirname","manifest","appRouteHandlerRoutes","redirectRoutes","rewriteRoutes","Set","appPagePaths","pagesRouterPagePaths","layoutPaths","filePathToRoute","Map","UNDERSCORE_GLOBAL_ERROR_ROUTE","UNDERSCORE_NOT_FOUND_ROUTE","resolvedRoute","slot","parent","endsWith","rd","item","possibleRoutes","rw","allSources","Array","isArray","beforeFiles","afterFiles","fallback","config","fs","existsSync","promises","mkdir","recursive","writeFile","experimental","strictRouteTypes","generateRouteTypesFileStrict","generateRouteTypesFile","typedRoutes","linkTypesPath","join","generateLinkTypesFile","strict","generateValidatorFileStrict","generateValidatorFile","stableTypesDir","devTypesRelativePath","proxyFilePath","proxyContent"],"mappings":"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","ignoreList":[0]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/server/lib/router-utils/route-types-utils.ts"],"sourcesContent":["import path from 'path'\nimport {\n getRouteRegex,\n type Group,\n} from '../../../shared/lib/router/utils/route-regex'\nimport type { NextConfigComplete } from '../../config-shared'\n\nimport fs from 'fs'\nimport {\n generateRouteTypesFile,\n generateLinkTypesFile,\n generateValidatorFile,\n generateValidatorFileStrict,\n generateRouteTypesFileStrict,\n} from './typegen'\nimport { tryToParsePath } from '../../../lib/try-to-parse-path'\nimport {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from '../../../shared/lib/router/utils/interception-routes'\nimport {\n UNDERSCORE_GLOBAL_ERROR_ROUTE,\n UNDERSCORE_NOT_FOUND_ROUTE,\n} from '../../../shared/lib/entry-constants'\nimport { normalizePathSep } from '../../../shared/lib/page-path/normalize-path-sep'\n\ninterface RouteInfo {\n path: string\n groups: { [groupName: string]: Group }\n}\n\nexport interface RouteTypesManifest {\n appRoutes: Record<string, RouteInfo>\n pageRoutes: Record<string, RouteInfo>\n layoutRoutes: Record<string, RouteInfo & { slots: string[] }>\n appRouteHandlerRoutes: Record<string, RouteInfo>\n /** Map of redirect source => RouteInfo */\n redirectRoutes: Record<string, RouteInfo>\n /** Map of rewrite source => RouteInfo */\n rewriteRoutes: Record<string, RouteInfo>\n /** File paths for validation */\n appPagePaths: Set<string>\n pagesRouterPagePaths: Set<string>\n layoutPaths: Set<string>\n appRouteHandlers: Set<string>\n pageApiRoutes: Set<string>\n /** Direct mapping from file paths to routes for validation */\n filePathToRoute: Map<string, string>\n}\n\n// Convert a custom-route source string (`/blog/:slug`, `/docs/:path*`, ...)\n// into the bracket-syntax used by other Next.js route helpers so that we can\n// reuse `getRouteRegex()` to extract groups.\nexport function convertCustomRouteSource(source: string): string[] {\n const parseResult = tryToParsePath(source)\n\n if (parseResult.error || !parseResult.tokens) {\n // Fallback to original source if parsing fails\n return source.startsWith('/') ? [source] : ['/' + source]\n }\n\n const possibleNormalizedRoutes = ['']\n let slugCnt = 1\n\n function append(suffix: string) {\n for (let i = 0; i < possibleNormalizedRoutes.length; i++) {\n possibleNormalizedRoutes[i] += suffix\n }\n }\n\n function fork(suffix: string) {\n const currentLength = possibleNormalizedRoutes.length\n for (let i = 0; i < currentLength; i++) {\n possibleNormalizedRoutes.push(possibleNormalizedRoutes[i] + suffix)\n }\n }\n\n for (const token of parseResult.tokens) {\n if (typeof token === 'object') {\n // Make sure the slug is always named.\n const slug = token.name || (slugCnt++ === 1 ? 'slug' : `slug${slugCnt}`)\n if (token.modifier === '*') {\n append(`${token.prefix}[[...${slug}]]`)\n } else if (token.modifier === '+') {\n append(`${token.prefix}[...${slug}]`)\n } else if (token.modifier === '') {\n if (token.pattern === '[^\\\\/#\\\\?]+?') {\n // A safe slug\n append(`${token.prefix}[${slug}]`)\n } else if (token.pattern === '.*') {\n // An optional catch-all slug\n append(`${token.prefix}[[...${slug}]]`)\n } else if (token.pattern === '.+') {\n // A catch-all slug\n append(`${token.prefix}[...${slug}]`)\n } else {\n // Other regex patterns are not supported. Skip this route.\n return []\n }\n } else if (token.modifier === '?') {\n if (/^[a-zA-Z0-9_/]*$/.test(token.pattern)) {\n // An optional slug with plain text only, fork the route.\n append(token.prefix)\n fork(token.pattern)\n } else {\n // Optional modifier `?` and regex patterns are not supported.\n return []\n }\n }\n } else if (typeof token === 'string') {\n append(token)\n }\n }\n\n // Ensure leading slash\n return possibleNormalizedRoutes.map((route) =>\n route.startsWith('/') ? route : '/' + route\n )\n}\n\n/**\n * Extracts route parameters from a route pattern\n */\nexport function extractRouteParams(route: string) {\n const regex = getRouteRegex(route)\n return regex.groups\n}\n\n/**\n * Resolves an intercepting route to its canonical equivalent\n * Example: /gallery/test/(..)photo/[id] -> /gallery/photo/[id]\n */\nfunction resolveInterceptingRoute(route: string): string {\n // Reuse centralized interception route normalization logic\n try {\n if (!isInterceptionRouteAppPath(route)) return route\n const { interceptedRoute } = extractInterceptionRouteInformation(route)\n return interceptedRoute\n } catch {\n // If parsing fails, fall back to the original route\n return route\n }\n}\n\n/**\n * Creates a route types manifest from processed route data\n * (used for both build and dev)\n */\nexport async function createRouteTypesManifest({\n dir,\n pageRoutes,\n appRoutes,\n appRouteHandlers,\n pageApiRoutes,\n layoutRoutes,\n slots,\n redirects,\n rewrites,\n validatorFilePath,\n}: {\n dir: string\n pageRoutes: Array<{ route: string; filePath: string }>\n appRoutes: Array<{ route: string; filePath: string }>\n appRouteHandlers: Array<{ route: string; filePath: string }>\n pageApiRoutes: Array<{ route: string; filePath: string }>\n layoutRoutes: Array<{ route: string; filePath: string }>\n slots: Array<{ name: string; parent: string }>\n redirects?: NextConfigComplete['redirects']\n rewrites?: NextConfigComplete['rewrites']\n validatorFilePath?: string\n}): Promise<RouteTypesManifest> {\n // Helper function to calculate the correct relative path\n const getRelativePath = (filePath: string) => {\n if (validatorFilePath) {\n // For validator generation, calculate path relative to validator directory\n return normalizePathSep(\n path.relative(path.dirname(validatorFilePath), filePath)\n )\n }\n // For other uses, calculate path relative to project directory\n return normalizePathSep(path.relative(dir, filePath))\n }\n\n const manifest: RouteTypesManifest = {\n appRoutes: {},\n pageRoutes: {},\n layoutRoutes: {},\n appRouteHandlerRoutes: {},\n redirectRoutes: {},\n rewriteRoutes: {},\n appRouteHandlers: new Set(\n appRouteHandlers.map(({ filePath }) => getRelativePath(filePath))\n ),\n pageApiRoutes: new Set(\n pageApiRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n appPagePaths: new Set(\n appRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n pagesRouterPagePaths: new Set(\n pageRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n layoutPaths: new Set(\n layoutRoutes.map(({ filePath }) => getRelativePath(filePath))\n ),\n filePathToRoute: new Map([\n ...appRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), resolveInterceptingRoute(route)] as [\n string,\n string,\n ]\n ),\n ...layoutRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), resolveInterceptingRoute(route)] as [\n string,\n string,\n ]\n ),\n ...appRouteHandlers.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), resolveInterceptingRoute(route)] as [\n string,\n string,\n ]\n ),\n ...pageRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), route] as [string, string]\n ),\n ...pageApiRoutes.map(\n ({ route, filePath }) =>\n [getRelativePath(filePath), route] as [string, string]\n ),\n ]),\n }\n\n // Process page routes\n for (const { route, filePath } of pageRoutes) {\n manifest.pageRoutes[route] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(route),\n }\n }\n\n // Process layout routes (exclude internal app error/not-found layouts)\n for (const { route, filePath } of layoutRoutes) {\n if (\n route === UNDERSCORE_GLOBAL_ERROR_ROUTE ||\n route === UNDERSCORE_NOT_FOUND_ROUTE\n )\n continue\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n if (!manifest.layoutRoutes[resolvedRoute]) {\n manifest.layoutRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n slots: [],\n }\n }\n }\n\n // Process slots\n for (const slot of slots) {\n if (manifest.layoutRoutes[slot.parent]) {\n manifest.layoutRoutes[slot.parent].slots.push(slot.name)\n }\n }\n\n // Process app routes (exclude internal app routes)\n for (const { route, filePath } of appRoutes) {\n if (\n route === UNDERSCORE_GLOBAL_ERROR_ROUTE ||\n route === UNDERSCORE_NOT_FOUND_ROUTE\n )\n continue\n // Don't include metadata routes or pages\n if (\n !filePath.endsWith('page.ts') &&\n !filePath.endsWith('page.tsx') &&\n !filePath.endsWith('.mdx') &&\n !filePath.endsWith('.md')\n ) {\n continue\n }\n\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.appRoutes[resolvedRoute]) {\n manifest.appRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n }\n }\n }\n\n // Process app route handlers\n for (const { route, filePath } of appRouteHandlers) {\n // Use the resolved route (for interception routes, this gives us the canonical route)\n const resolvedRoute = resolveInterceptingRoute(route)\n\n if (!manifest.appRouteHandlerRoutes[resolvedRoute]) {\n manifest.appRouteHandlerRoutes[resolvedRoute] = {\n path: getRelativePath(filePath),\n groups: extractRouteParams(resolvedRoute),\n }\n }\n }\n\n // Process redirects\n if (typeof redirects === 'function') {\n const rd = await redirects()\n\n for (const item of rd) {\n const possibleRoutes = convertCustomRouteSource(item.source)\n for (const route of possibleRoutes) {\n manifest.redirectRoutes[route] = {\n path: route,\n groups: extractRouteParams(route),\n }\n }\n }\n }\n\n // Process rewrites\n if (typeof rewrites === 'function') {\n const rw = await rewrites()\n\n const allSources = Array.isArray(rw)\n ? rw\n : [\n ...(rw?.beforeFiles || []),\n ...(rw?.afterFiles || []),\n ...(rw?.fallback || []),\n ]\n\n for (const item of allSources) {\n const possibleRoutes = convertCustomRouteSource(item.source)\n for (const route of possibleRoutes) {\n manifest.rewriteRoutes[route] = {\n path: route,\n groups: extractRouteParams(route),\n }\n }\n }\n }\n\n return manifest\n}\n\nexport async function writeRouteTypesManifest(\n manifest: RouteTypesManifest,\n filePath: string,\n config: NextConfigComplete\n) {\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true })\n }\n\n // Write the main routes.d.ts file\n await fs.promises.writeFile(\n filePath,\n config.experimental.strictRouteTypes\n ? generateRouteTypesFileStrict(manifest)\n : generateRouteTypesFile(manifest)\n )\n\n // Write the link.d.ts file if typedRoutes is enabled\n if (config.typedRoutes === true) {\n const linkTypesPath = path.join(dirname, 'link.d.ts')\n await fs.promises.writeFile(linkTypesPath, generateLinkTypesFile(manifest))\n }\n}\n\nexport async function writeValidatorFile(\n manifest: RouteTypesManifest,\n filePath: string,\n strict: boolean\n) {\n const dirname = path.dirname(filePath)\n\n if (!fs.existsSync(dirname)) {\n await fs.promises.mkdir(dirname, { recursive: true })\n }\n\n await fs.promises.writeFile(\n filePath,\n strict\n ? generateValidatorFileStrict(manifest)\n : generateValidatorFile(manifest)\n )\n}\n"],"names":["convertCustomRouteSource","createRouteTypesManifest","extractRouteParams","writeRouteTypesManifest","writeValidatorFile","source","parseResult","tryToParsePath","error","tokens","startsWith","possibleNormalizedRoutes","slugCnt","append","suffix","i","length","fork","currentLength","push","token","slug","name","modifier","prefix","pattern","test","map","route","regex","getRouteRegex","groups","resolveInterceptingRoute","isInterceptionRouteAppPath","interceptedRoute","extractInterceptionRouteInformation","dir","pageRoutes","appRoutes","appRouteHandlers","pageApiRoutes","layoutRoutes","slots","redirects","rewrites","validatorFilePath","getRelativePath","filePath","normalizePathSep","path","relative","dirname","manifest","appRouteHandlerRoutes","redirectRoutes","rewriteRoutes","Set","appPagePaths","pagesRouterPagePaths","layoutPaths","filePathToRoute","Map","UNDERSCORE_GLOBAL_ERROR_ROUTE","UNDERSCORE_NOT_FOUND_ROUTE","resolvedRoute","slot","parent","endsWith","rd","item","possibleRoutes","rw","allSources","Array","isArray","beforeFiles","afterFiles","fallback","config","fs","existsSync","promises","mkdir","recursive","writeFile","experimental","strictRouteTypes","generateRouteTypesFileStrict","generateRouteTypesFile","typedRoutes","linkTypesPath","join","generateLinkTypesFile","strict","generateValidatorFileStrict","generateValidatorFile"],"mappings":"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","ignoreList":[0]}
|
|
@@ -117,9 +117,10 @@ async function verifyTypeScript(opts) {
|
|
|
117
117
|
const verifyResult = await (0, _verifytypescriptsetup.verifyTypeScriptSetup)({
|
|
118
118
|
dir: opts.dir,
|
|
119
119
|
distDir: opts.nextConfig.distDir,
|
|
120
|
-
|
|
120
|
+
strictRouteTypes: Boolean(opts.nextConfig.experimental.strictRouteTypes),
|
|
121
121
|
typeCheckPreflight: false,
|
|
122
122
|
tsconfigPath: opts.nextConfig.typescript.tsconfigPath,
|
|
123
|
+
typedRoutes: Boolean(opts.nextConfig.typedRoutes),
|
|
123
124
|
disableStaticImages: opts.nextConfig.images.disableStaticImages,
|
|
124
125
|
hasAppDir: !!opts.appDir,
|
|
125
126
|
hasPagesDir: !!opts.pagesDir,
|
|
@@ -197,12 +198,6 @@ async function startWatcher(opts) {
|
|
|
197
198
|
pageApiRoutes: new Set(),
|
|
198
199
|
filePathToRoute: new Map()
|
|
199
200
|
}, _path.default.join(distTypesDir, 'routes.d.ts'), opts.nextConfig);
|
|
200
|
-
// When isolatedDevBuild is enabled, write a proxy file at the stable path
|
|
201
|
-
// that re-exports from the dev types location
|
|
202
|
-
if (opts.nextConfig.experimental.isolatedDevBuild) {
|
|
203
|
-
const stableTypesDir = _path.default.join(opts.dir, opts.nextConfig.distDirRoot, 'types');
|
|
204
|
-
await (0, _routetypesutils.writeRouteTypesProxy)(stableTypesDir, '../dev/types/routes.d.ts');
|
|
205
|
-
}
|
|
206
201
|
const routesManifestPath = _path.default.join(distDir, _constants.ROUTES_MANIFEST);
|
|
207
202
|
const routesManifest = {
|
|
208
203
|
version: 3,
|