next 16.2.11 → 16.2.12
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/load-jsconfig.js +40 -20
- package/dist/build/load-jsconfig.js.map +1 -1
- package/dist/build/next-config-ts/transpile-config.js +3 -114
- package/dist/build/next-config-ts/transpile-config.js.map +1 -1
- package/dist/build/swc/index.js +1 -1
- package/dist/build/turbopack-analyze/index.js +1 -1
- package/dist/build/turbopack-build/impl.js +1 -1
- package/dist/build/type-check.js +20 -13
- 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 +2 -1
- 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-turbo.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.dev.js +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/server.runtime.prod.js +1 -1
- package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
- package/dist/docs/01-app/01-getting-started/01-installation.md +33 -0
- package/dist/docs/01-app/01-getting-started/02-project-structure.md +1 -1
- package/dist/docs/01-app/01-getting-started/06-fetching-data.md +1 -1
- package/dist/docs/01-app/01-getting-started/09-revalidating.md +1 -1
- package/dist/docs/01-app/02-guides/authentication.md +18 -10
- package/dist/docs/01-app/02-guides/backend-for-frontend.md +1 -1
- package/dist/docs/01-app/02-guides/debugging.md +2 -2
- package/dist/docs/01-app/02-guides/migrating/app-router-migration.md +18 -14
- package/dist/docs/01-app/02-guides/single-page-applications.md +1 -1
- package/dist/docs/01-app/02-guides/static-exports.md +2 -0
- package/dist/docs/01-app/03-api-reference/02-components/form.md +1 -1
- package/dist/docs/01-app/03-api-reference/03-file-conventions/error.md +2 -0
- package/dist/docs/01-app/03-api-reference/03-file-conventions/not-found.md +3 -1
- package/dist/docs/01-app/03-api-reference/04-functions/redirect.md +1 -0
- package/dist/docs/01-app/03-api-reference/04-functions/refresh.md +4 -1
- package/dist/docs/01-app/03-api-reference/04-functions/revalidatePath.md +3 -0
- package/dist/docs/01-app/03-api-reference/04-functions/revalidateTag.md +3 -0
- package/dist/docs/01-app/03-api-reference/04-functions/unstable_cache.md +5 -5
- package/dist/docs/01-app/03-api-reference/04-functions/use-search-params.md +1 -1
- package/dist/docs/01-app/03-api-reference/05-config/01-next-config-js/headers.md +11 -11
- package/dist/docs/01-app/03-api-reference/05-config/01-next-config-js/redirects.md +10 -10
- package/dist/docs/01-app/03-api-reference/05-config/01-next-config-js/rewrites.md +16 -16
- package/dist/docs/01-app/03-api-reference/05-config/01-next-config-js/serverActions.md +4 -1
- package/dist/docs/01-app/03-api-reference/05-config/01-next-config-js/useTypeScriptCli.md +62 -0
- package/dist/docs/01-app/03-api-reference/05-config/02-typescript.md +55 -1
- package/dist/docs/01-app/03-api-reference/07-adapters/05-routing-with-next-routing.md +0 -3
- package/dist/docs/02-pages/02-guides/forms.md +6 -6
- package/dist/docs/02-pages/03-building-your-application/01-routing/08-custom-error.md +2 -0
- package/dist/docs/02-pages/04-api-reference/04-config/01-next-config-js/useTypeScriptCli.md +8 -0
- package/dist/esm/build/index.js +3 -3
- package/dist/esm/build/load-jsconfig.js +40 -20
- package/dist/esm/build/load-jsconfig.js.map +1 -1
- package/dist/esm/build/next-config-ts/transpile-config.js +3 -73
- package/dist/esm/build/next-config-ts/transpile-config.js.map +1 -1
- package/dist/esm/build/swc/index.js +1 -1
- package/dist/esm/build/turbopack-analyze/index.js +1 -1
- package/dist/esm/build/turbopack-build/impl.js +1 -1
- package/dist/esm/build/type-check.js +20 -13
- 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/has-necessary-dependencies.js.map +1 -1
- package/dist/esm/lib/install-dependencies.js +1 -1
- package/dist/esm/lib/install-dependencies.js.map +1 -1
- package/dist/esm/lib/patch-incorrect-lockfile.js +3 -3
- package/dist/esm/lib/typescript/loadTsConfig.js +129 -0
- package/dist/esm/lib/typescript/loadTsConfig.js.map +1 -0
- package/dist/esm/lib/typescript/missingDependencyError.js +1 -1
- package/dist/esm/lib/typescript/missingDependencyError.js.map +1 -1
- package/dist/esm/lib/typescript/runTypeCheck.js.map +1 -1
- package/dist/esm/lib/typescript/runTypeCheckCli.js +38 -0
- package/dist/esm/lib/typescript/runTypeCheckCli.js.map +1 -0
- package/dist/esm/lib/typescript/runTypeScriptCli.js +217 -0
- package/dist/esm/lib/typescript/runTypeScriptCli.js.map +1 -0
- package/dist/esm/lib/verify-typescript-setup.js +87 -52
- package/dist/esm/lib/verify-typescript-setup.js.map +1 -1
- package/dist/esm/server/config-schema.js +1 -0
- package/dist/esm/server/config-schema.js.map +1 -1
- package/dist/esm/server/config-shared.js +1 -0
- package/dist/esm/server/config-shared.js.map +1 -1
- package/dist/esm/server/config.js +1 -1
- package/dist/esm/server/dev/hot-reloader-turbopack.js +2 -2
- 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/setup-dev-bundler.js +2 -1
- package/dist/esm/server/lib/router-utils/setup-dev-bundler.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/has-necessary-dependencies.d.ts +2 -0
- package/dist/lib/has-necessary-dependencies.js.map +1 -1
- package/dist/lib/install-dependencies.js +1 -1
- package/dist/lib/install-dependencies.js.map +1 -1
- package/dist/lib/patch-incorrect-lockfile.js +3 -3
- package/dist/lib/typescript/loadTsConfig.d.ts +13 -0
- package/dist/lib/typescript/loadTsConfig.js +181 -0
- package/dist/lib/typescript/loadTsConfig.js.map +1 -0
- package/dist/lib/typescript/missingDependencyError.js +1 -1
- package/dist/lib/typescript/missingDependencyError.js.map +1 -1
- package/dist/lib/typescript/runTypeCheck.d.ts +2 -2
- package/dist/lib/typescript/runTypeCheck.js.map +1 -1
- package/dist/lib/typescript/runTypeCheckCli.d.ts +12 -0
- package/dist/lib/typescript/runTypeCheckCli.js +53 -0
- package/dist/lib/typescript/runTypeCheckCli.js.map +1 -0
- package/dist/lib/typescript/runTypeScriptCli.d.ts +38 -0
- package/dist/lib/typescript/runTypeScriptCli.js +256 -0
- package/dist/lib/typescript/runTypeScriptCli.js.map +1 -0
- package/dist/lib/verify-typescript-setup.d.ts +16 -1
- package/dist/lib/verify-typescript-setup.js +97 -56
- package/dist/lib/verify-typescript-setup.js.map +1 -1
- package/dist/server/config-schema.d.ts +1 -0
- package/dist/server/config-schema.js +1 -0
- package/dist/server/config-schema.js.map +1 -1
- package/dist/server/config-shared.d.ts +6 -0
- package/dist/server/config-shared.js +1 -0
- package/dist/server/config-shared.js.map +1 -1
- package/dist/server/config.js +1 -1
- package/dist/server/dev/hot-reloader-turbopack.js +2 -2
- 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/setup-dev-bundler.js +2 -1
- package/dist/server/lib/router-utils/setup-dev-bundler.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/build.d.ts +1 -0
- package/dist/telemetry/events/build.js.map +1 -1
- package/dist/telemetry/events/session-stopped.js +2 -2
- package/dist/telemetry/events/swc-load-failure.js +1 -1
- package/dist/telemetry/events/version.js +2 -2
- package/package.json +10 -10
- /package/dist/bundle-analyzer/_next/static/{yuLxudwpXbv0jKSL-s0ZM → xR78HbVQBty3GRl-Ydf7i}/_buildManifest.js +0 -0
- /package/dist/bundle-analyzer/_next/static/{yuLxudwpXbv0jKSL-s0ZM → xR78HbVQBty3GRl-Ydf7i}/_clientMiddlewareManifest.json +0 -0
- /package/dist/bundle-analyzer/_next/static/{yuLxudwpXbv0jKSL-s0ZM → xR78HbVQBty3GRl-Ydf7i}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/build/next-config-ts/transpile-config.ts"],"sourcesContent":["import type { Options as SWCOptions } from '@swc/core'\nimport type { CompilerOptions } from 'typescript'\n\nimport path from 'node:path'\nimport { readFileSync, existsSync } from 'node:fs'\nimport { pathToFileURL } from 'node:url'\nimport * as CommentJson from 'next/dist/compiled/comment-json'\nimport { deregisterHook, registerHook, requireFromString } from './require-hook'\nimport { warn, warnOnce } from '../output/log'\nimport { getNodeOptionsArgs } from '../../server/lib/utils'\n\ntype RelevantCompilerOptions = Pick<CompilerOptions, 'paths' | 'baseUrl'>\n\nfunction resolveSWCOptions(\n cwd: string,\n compilerOptions: RelevantCompilerOptions\n): SWCOptions {\n return {\n jsc: {\n parser: {\n syntax: 'typescript',\n },\n ...(compilerOptions.paths ? { paths: compilerOptions.paths } : {}),\n ...(compilerOptions.baseUrl\n ? // Needs to be an absolute path.\n { baseUrl: path.resolve(cwd, compilerOptions.baseUrl) }\n : compilerOptions.paths\n ? // If paths is given, baseUrl is required.\n { baseUrl: cwd }\n : {}),\n },\n module: {\n type: 'commonjs',\n },\n isModule: 'unknown',\n env: {\n targets: {\n // Setting the Node.js version can reduce unnecessary code generation.\n node: process?.versions?.node ?? '20.19.0',\n },\n },\n } satisfies SWCOptions\n}\n\nfunction resolveExtends(extendsPath: string, currentConfigDir: string): string {\n // Relative paths are resolved relative to the current config's directory\n if (\n extendsPath.startsWith('./') ||\n extendsPath.startsWith('../') ||\n path.isAbsolute(extendsPath)\n ) {\n const resolved = path.resolve(currentConfigDir, extendsPath)\n // TypeScript allows omitting .json extension\n if (existsSync(resolved)) {\n return resolved\n }\n if (!resolved.endsWith('.json') && existsSync(resolved + '.json')) {\n return resolved + '.json'\n }\n return resolved\n }\n\n // Package paths - use require.resolve to find the package\n try {\n // Try resolving as a direct path within the package\n return require.resolve(extendsPath, { paths: [currentConfigDir] })\n } catch {\n // If that fails, try appending tsconfig.json for package names like \"@tsconfig/node18\"\n try {\n return require.resolve(extendsPath + '/tsconfig.json', {\n paths: [currentConfigDir],\n })\n } catch {\n // Return the original path and let it fail later with a clear error\n return path.resolve(currentConfigDir, extendsPath)\n }\n }\n}\n\nfunction loadTsConfigFile(\n configPath: string,\n visited: Set<string>\n): RelevantCompilerOptions {\n const resolvedPath = path.resolve(configPath)\n\n if (visited.has(resolvedPath)) {\n return {}\n }\n visited.add(resolvedPath)\n\n if (!existsSync(resolvedPath)) {\n return {}\n }\n\n const configContent = readFileSync(resolvedPath, 'utf8')\n const config = CommentJson.parse(configContent)\n const configDir = path.dirname(resolvedPath)\n\n let mergedOptions: RelevantCompilerOptions = {}\n\n // Note that config options from `extends` should get overwritten, not merged\n if (config.extends) {\n const extendsList = Array.isArray(config.extends)\n ? config.extends\n : [config.extends]\n\n for (const extendsPath of extendsList) {\n const parentConfigPath = resolveExtends(extendsPath, configDir)\n const parentOptions = loadTsConfigFile(parentConfigPath, visited)\n mergedOptions = { ...mergedOptions, ...parentOptions }\n }\n }\n\n const currentOptions = config.compilerOptions ?? {}\n mergedOptions = {\n ...mergedOptions,\n paths: currentOptions.paths ?? mergedOptions.paths,\n baseUrl: currentOptions.baseUrl ?? mergedOptions.baseUrl,\n }\n\n return mergedOptions\n}\n\nasync function loadTsConfig(dir: string): Promise<RelevantCompilerOptions> {\n // NOTE: This doesn't fully cover the edge case for setting\n // \"typescript.tsconfigPath\" in next config which is currently\n // a restriction.\n // It's a chicken-and-egg problem since we need to transpile\n // the next config to get that value.\n const resolvedTsConfigPath = path.join(dir, 'tsconfig.json')\n\n if (!existsSync(resolvedTsConfigPath)) {\n return {}\n }\n\n return loadTsConfigFile(resolvedTsConfigPath, new Set())\n}\n\nexport async function transpileConfig({\n nextConfigPath,\n dir,\n}: {\n nextConfigPath: string\n dir: string\n}) {\n try {\n // envs are passed to the workers and preserve the flag\n if (process.env.__NEXT_NODE_NATIVE_TS_LOADER_ENABLED === 'true') {\n try {\n // Node.js v22.10.0+\n // Value is 'strip' or 'transform' based on how the feature is enabled.\n // https://nodejs.org/api/process.html#processfeaturestypescript\n // TODO: Remove `as any` once we bump @types/node to v22.10.0+\n if ((process.features as any).typescript) {\n // Run import() here to catch errors and fallback to legacy resolution.\n return (await import(pathToFileURL(nextConfigPath).href)).default\n }\n\n if (\n getNodeOptionsArgs().includes('--no-experimental-strip-types') ||\n process.execArgv.includes('--no-experimental-strip-types')\n ) {\n warnOnce(\n `Skipped resolving \"${path.basename(nextConfigPath)}\" using Node.js native TypeScript resolution because it was disabled by the \"--no-experimental-strip-types\" flag.` +\n ' Falling back to legacy resolution.' +\n ' Learn more: https://nextjs.org/docs/app/api-reference/config/typescript#using-nodejs-native-typescript-resolver-for-nextconfigts'\n )\n }\n\n // Feature is not enabled, fallback to legacy resolution for current session.\n process.env.__NEXT_NODE_NATIVE_TS_LOADER_ENABLED = 'false'\n } catch (cause) {\n warnOnce(\n `Failed to import \"${path.basename(nextConfigPath)}\" using Node.js native TypeScript resolution.` +\n ' Falling back to legacy resolution.' +\n ' Learn more: https://nextjs.org/docs/app/api-reference/config/typescript#using-nodejs-native-typescript-resolver-for-nextconfigts',\n { cause }\n )\n // Once failed, fallback to legacy resolution for current session.\n process.env.__NEXT_NODE_NATIVE_TS_LOADER_ENABLED = 'false'\n }\n }\n\n const compilerOptions = await loadTsConfig(dir)\n return handleCJS({ dir, nextConfigPath, compilerOptions })\n } catch (cause) {\n throw new Error(`Failed to transpile \"${path.basename(nextConfigPath)}\".`, {\n cause,\n })\n }\n}\n\nasync function handleCJS({\n dir,\n nextConfigPath,\n compilerOptions,\n}: {\n dir: string\n nextConfigPath: string\n compilerOptions: RelevantCompilerOptions\n}) {\n const swcOptions = resolveSWCOptions(dir, compilerOptions)\n let hasRequire = false\n try {\n const nextConfigString = readFileSync(nextConfigPath, 'utf8')\n // lazy require swc since it loads React before even setting NODE_ENV\n // resulting loading Development React on Production\n const { loadBindings } = require('../swc') as typeof import('../swc')\n const bindings = await loadBindings()\n const { code } = await bindings.transform(nextConfigString, swcOptions)\n\n // register require hook only if require exists\n if (code.includes('require(')) {\n registerHook(swcOptions)\n hasRequire = true\n }\n\n // filename & extension don't matter here\n const config = requireFromString(\n code,\n path.resolve(dir, 'next.config.compiled.js')\n )\n // At this point we have already loaded the bindings without this configuration setting due to the `transform` call above.\n // Possibly we fell back to wasm in which case, it all works out but if not we need to warn\n // that the configuration was ignored.\n if (config?.experimental?.useWasmBinary && !bindings.isWasm) {\n warn(\n 'Using a next.config.ts file is incompatible with `experimental.useWasmBinary` unless ' +\n '`--experimental-next-config-strip-types` is also passed.\\nSetting `useWasmBinary` to `false'\n )\n config.experimental.useWasmBinary = false\n }\n return config\n } catch (error) {\n throw error\n } finally {\n if (hasRequire) {\n deregisterHook()\n }\n }\n}\n"],"names":["path","readFileSync","existsSync","pathToFileURL","CommentJson","deregisterHook","registerHook","requireFromString","warn","warnOnce","getNodeOptionsArgs","resolveSWCOptions","cwd","compilerOptions","process","jsc","parser","syntax","paths","baseUrl","resolve","module","type","isModule","env","targets","node","versions","resolveExtends","extendsPath","currentConfigDir","startsWith","isAbsolute","resolved","endsWith","require","loadTsConfigFile","configPath","visited","resolvedPath","has","add","configContent","config","parse","configDir","dirname","mergedOptions","extends","extendsList","Array","isArray","parentConfigPath","parentOptions","currentOptions","loadTsConfig","dir","resolvedTsConfigPath","join","Set","transpileConfig","nextConfigPath","__NEXT_NODE_NATIVE_TS_LOADER_ENABLED","features","typescript","href","default","includes","execArgv","basename","cause","handleCJS","Error","swcOptions","hasRequire","nextConfigString","loadBindings","bindings","code","transform","experimental","useWasmBinary","isWasm","error"],"mappings":"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","ignoreList":[0]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/build/next-config-ts/transpile-config.ts"],"sourcesContent":["import type { Options as SWCOptions } from '@swc/core'\n\nimport path from 'node:path'\nimport { readFileSync, existsSync } from 'node:fs'\nimport { pathToFileURL } from 'node:url'\nimport { deregisterHook, registerHook, requireFromString } from './require-hook'\nimport { warn, warnOnce } from '../output/log'\nimport { getNodeOptionsArgs } from '../../server/lib/utils'\nimport {\n loadTsConfigOptions,\n type RelevantCompilerOptions,\n} from '../../lib/typescript/loadTsConfig'\n\nfunction resolveSWCOptions(\n cwd: string,\n compilerOptions: RelevantCompilerOptions\n): SWCOptions {\n return {\n jsc: {\n parser: {\n syntax: 'typescript',\n },\n ...(compilerOptions.paths ? { paths: compilerOptions.paths } : {}),\n ...(compilerOptions.baseUrl\n ? // Needs to be an absolute path.\n { baseUrl: path.resolve(cwd, compilerOptions.baseUrl) }\n : compilerOptions.paths\n ? // If paths is given, baseUrl is required.\n { baseUrl: compilerOptions.pathsBasePath ?? cwd }\n : {}),\n },\n module: {\n type: 'commonjs',\n },\n isModule: 'unknown',\n env: {\n targets: {\n // Setting the Node.js version can reduce unnecessary code generation.\n node: process?.versions?.node ?? '20.19.0',\n },\n },\n } satisfies SWCOptions\n}\n\nasync function loadTsConfig(dir: string): Promise<RelevantCompilerOptions> {\n // NOTE: This doesn't fully cover the edge case for setting\n // \"typescript.tsconfigPath\" in next config which is currently\n // a restriction.\n // It's a chicken-and-egg problem since we need to transpile\n // the next config to get that value.\n const resolvedTsConfigPath = path.join(dir, 'tsconfig.json')\n\n if (!existsSync(resolvedTsConfigPath)) {\n return {}\n }\n\n return loadTsConfigOptions(resolvedTsConfigPath)\n}\n\nexport async function transpileConfig({\n nextConfigPath,\n dir,\n}: {\n nextConfigPath: string\n dir: string\n}) {\n try {\n // envs are passed to the workers and preserve the flag\n if (process.env.__NEXT_NODE_NATIVE_TS_LOADER_ENABLED === 'true') {\n try {\n // Node.js v22.10.0+\n // Value is 'strip' or 'transform' based on how the feature is enabled.\n // https://nodejs.org/api/process.html#processfeaturestypescript\n // TODO: Remove `as any` once we bump @types/node to v22.10.0+\n if ((process.features as any).typescript) {\n // Run import() here to catch errors and fallback to legacy resolution.\n return (await import(pathToFileURL(nextConfigPath).href)).default\n }\n\n if (\n getNodeOptionsArgs().includes('--no-experimental-strip-types') ||\n process.execArgv.includes('--no-experimental-strip-types')\n ) {\n warnOnce(\n `Skipped resolving \"${path.basename(nextConfigPath)}\" using Node.js native TypeScript resolution because it was disabled by the \"--no-experimental-strip-types\" flag.` +\n ' Falling back to legacy resolution.' +\n ' Learn more: https://nextjs.org/docs/app/api-reference/config/typescript#using-nodejs-native-typescript-resolver-for-nextconfigts'\n )\n }\n\n // Feature is not enabled, fallback to legacy resolution for current session.\n process.env.__NEXT_NODE_NATIVE_TS_LOADER_ENABLED = 'false'\n } catch (cause) {\n warnOnce(\n `Failed to import \"${path.basename(nextConfigPath)}\" using Node.js native TypeScript resolution.` +\n ' Falling back to legacy resolution.' +\n ' Learn more: https://nextjs.org/docs/app/api-reference/config/typescript#using-nodejs-native-typescript-resolver-for-nextconfigts',\n { cause }\n )\n // Once failed, fallback to legacy resolution for current session.\n process.env.__NEXT_NODE_NATIVE_TS_LOADER_ENABLED = 'false'\n }\n }\n\n const compilerOptions = await loadTsConfig(dir)\n return handleCJS({ dir, nextConfigPath, compilerOptions })\n } catch (cause) {\n throw new Error(`Failed to transpile \"${path.basename(nextConfigPath)}\".`, {\n cause,\n })\n }\n}\n\nasync function handleCJS({\n dir,\n nextConfigPath,\n compilerOptions,\n}: {\n dir: string\n nextConfigPath: string\n compilerOptions: RelevantCompilerOptions\n}) {\n const swcOptions = resolveSWCOptions(dir, compilerOptions)\n let hasRequire = false\n try {\n const nextConfigString = readFileSync(nextConfigPath, 'utf8')\n // lazy require swc since it loads React before even setting NODE_ENV\n // resulting loading Development React on Production\n const { loadBindings } = require('../swc') as typeof import('../swc')\n const bindings = await loadBindings()\n const { code } = await bindings.transform(nextConfigString, swcOptions)\n\n // register require hook only if require exists\n if (code.includes('require(')) {\n registerHook(swcOptions)\n hasRequire = true\n }\n\n // filename & extension don't matter here\n const config = requireFromString(\n code,\n path.resolve(dir, 'next.config.compiled.js')\n )\n // At this point we have already loaded the bindings without this configuration setting due to the `transform` call above.\n // Possibly we fell back to wasm in which case, it all works out but if not we need to warn\n // that the configuration was ignored.\n if (config?.experimental?.useWasmBinary && !bindings.isWasm) {\n warn(\n 'Using a next.config.ts file is incompatible with `experimental.useWasmBinary` unless ' +\n '`--experimental-next-config-strip-types` is also passed.\\nSetting `useWasmBinary` to `false'\n )\n config.experimental.useWasmBinary = false\n }\n return config\n } catch (error) {\n throw error\n } finally {\n if (hasRequire) {\n deregisterHook()\n }\n }\n}\n"],"names":["path","readFileSync","existsSync","pathToFileURL","deregisterHook","registerHook","requireFromString","warn","warnOnce","getNodeOptionsArgs","loadTsConfigOptions","resolveSWCOptions","cwd","compilerOptions","process","jsc","parser","syntax","paths","baseUrl","resolve","pathsBasePath","module","type","isModule","env","targets","node","versions","loadTsConfig","dir","resolvedTsConfigPath","join","transpileConfig","nextConfigPath","__NEXT_NODE_NATIVE_TS_LOADER_ENABLED","features","typescript","href","default","includes","execArgv","basename","cause","handleCJS","Error","swcOptions","hasRequire","config","nextConfigString","loadBindings","require","bindings","code","transform","experimental","useWasmBinary","isWasm","error"],"mappings":"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","ignoreList":[0]}
|
|
@@ -10,7 +10,7 @@ export var HmrTarget = /*#__PURE__*/ function(HmrTarget) {
|
|
|
10
10
|
HmrTarget["Server"] = "server";
|
|
11
11
|
return HmrTarget;
|
|
12
12
|
}({});
|
|
13
|
-
const nextVersion = "16.2.
|
|
13
|
+
const nextVersion = "16.2.12";
|
|
14
14
|
const ArchName = arch();
|
|
15
15
|
const PlatformName = platform();
|
|
16
16
|
function infoLog(...args) {
|
|
@@ -66,7 +66,7 @@ export async function turbopackAnalyze(analyzeContext) {
|
|
|
66
66
|
writeRoutesHashesManifest: false,
|
|
67
67
|
currentNodeJsVersion,
|
|
68
68
|
isPersistentCachingEnabled: persistentCaching,
|
|
69
|
-
nextVersion: "16.2.
|
|
69
|
+
nextVersion: "16.2.12"
|
|
70
70
|
}, {
|
|
71
71
|
memoryLimit: (_config_experimental2 = config.experimental) == null ? void 0 : _config_experimental2.turbopackMemoryLimit,
|
|
72
72
|
dependencyTracking: persistentCaching,
|
|
@@ -83,7 +83,7 @@ export async function turbopackBuild() {
|
|
|
83
83
|
currentNodeJsVersion,
|
|
84
84
|
isPersistentCachingEnabled: persistentCaching,
|
|
85
85
|
deferredEntries: config.experimental.deferredEntries,
|
|
86
|
-
nextVersion: "16.2.
|
|
86
|
+
nextVersion: "16.2.12"
|
|
87
87
|
};
|
|
88
88
|
const sharedTurboOptions = {
|
|
89
89
|
memoryLimit: (_config_experimental1 = config.experimental) == null ? void 0 : _config_experimental1.turbopackMemoryLimit,
|
|
@@ -5,19 +5,19 @@ import { eventTypeCheckCompleted } from '../telemetry/events';
|
|
|
5
5
|
import isError from '../lib/is-error';
|
|
6
6
|
import { hrtimeDurationToString } from './duration-to-string';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* TypeScript setup and type checking run in a worker so the compiler's memory
|
|
9
|
+
* can be released before the rest of the build continues.
|
|
10
10
|
*
|
|
11
11
|
* Since it is impossible to pass a function from main thread to a worker,
|
|
12
12
|
* instead of running "next/lib/typescript/runTypeCheck" in a worker,
|
|
13
13
|
* we will run entire "next/lib/verify-typescript-setup" in a worker instead.
|
|
14
|
-
*/ function verifyAndRunTypeScript(dir, distDir, strictRouteTypes, shouldRunTypeCheck, tsconfigPath, typedRoutes, disableStaticImages, cacheDir, enableWorkerThreads, hasAppDir, hasPagesDir, appDir, pagesDir, debugBuildPaths) {
|
|
14
|
+
*/ function verifyAndRunTypeScript(dir, distDir, strictRouteTypes, shouldRunTypeCheck, tsconfigPath, typedRoutes, disableStaticImages, cacheDir, enableWorkerThreads, hasAppDir, hasPagesDir, appDir, pagesDir, debugBuildPaths, useTypeScriptCli, onFirstCliOutput) {
|
|
15
15
|
let impl;
|
|
16
16
|
let typeCheckWorker;
|
|
17
|
-
if (shouldRunTypeCheck) {
|
|
17
|
+
if (shouldRunTypeCheck && !useTypeScriptCli) {
|
|
18
18
|
typeCheckWorker = new Worker(require.resolve('../lib/verify-typescript-setup'), {
|
|
19
19
|
exposedMethods: [
|
|
20
|
-
'
|
|
20
|
+
'verifyAndRunTypeScriptInWorker'
|
|
21
21
|
],
|
|
22
22
|
debuggerPortOffset: -1,
|
|
23
23
|
isolatedMemory: false,
|
|
@@ -25,10 +25,10 @@ import { hrtimeDurationToString } from './duration-to-string';
|
|
|
25
25
|
enableWorkerThreads,
|
|
26
26
|
maxRetries: 0
|
|
27
27
|
});
|
|
28
|
-
impl = typeCheckWorker.
|
|
28
|
+
impl = typeCheckWorker.verifyAndRunTypeScriptInWorker;
|
|
29
29
|
} else {
|
|
30
|
-
//
|
|
31
|
-
//
|
|
30
|
+
// No worker: either we are not type-checking (just writing setup files), or
|
|
31
|
+
// the CLI checker runs `tsc` in-process. Avoid the worker overhead.
|
|
32
32
|
impl = require('../lib/verify-typescript-setup').verifyAndRunTypeScript;
|
|
33
33
|
}
|
|
34
34
|
return impl({
|
|
@@ -44,18 +44,23 @@ import { hrtimeDurationToString } from './duration-to-string';
|
|
|
44
44
|
hasPagesDir,
|
|
45
45
|
appDir,
|
|
46
46
|
pagesDir,
|
|
47
|
-
debugBuildPaths
|
|
47
|
+
debugBuildPaths,
|
|
48
|
+
useTypeScriptCli,
|
|
49
|
+
onFirstCliOutput
|
|
48
50
|
}).then((result)=>{
|
|
49
51
|
typeCheckWorker == null ? void 0 : typeCheckWorker.end();
|
|
50
52
|
return result;
|
|
51
53
|
}).catch(()=>{
|
|
52
|
-
// The error is already logged in the worker
|
|
53
|
-
//
|
|
54
|
+
// The error is already logged (in the worker for the API checker, or
|
|
55
|
+
// directly for the in-process CLI checker); we simply exit to prevent the
|
|
56
|
+
// `Jest worker encountered 1 child process exceptions, exceeding retry
|
|
57
|
+
// limit` message from showing up.
|
|
54
58
|
process.exit(1);
|
|
55
59
|
});
|
|
56
60
|
}
|
|
57
61
|
export async function startTypeChecking({ cacheDir, config, dir, nextBuildSpan, pagesDir, telemetry, appDir, debugBuildPaths }) {
|
|
58
62
|
const ignoreTypeScriptErrors = Boolean(config.typescript.ignoreBuildErrors);
|
|
63
|
+
const useTypeScriptCli = Boolean(config.experimental.useTypeScriptCli);
|
|
59
64
|
if (ignoreTypeScriptErrors) {
|
|
60
65
|
Log.info('Skipping validation of types');
|
|
61
66
|
}
|
|
@@ -70,7 +75,8 @@ export async function startTypeChecking({ cacheDir, config, dir, nextBuildSpan,
|
|
|
70
75
|
const typeCheckAndLintStart = process.hrtime();
|
|
71
76
|
try {
|
|
72
77
|
var _createSpinner;
|
|
73
|
-
const [verifyResult, typeCheckEnd] = await nextBuildSpan.traceChild('run-typescript').traceAsyncFn(()=>verifyAndRunTypeScript(dir, config.distDir, Boolean(config.experimental.strictRouteTypes), !ignoreTypeScriptErrors, config.typescript.tsconfigPath, Boolean(config.typedRoutes), config.images.disableStaticImages, cacheDir, config.experimental.workerThreads, !!appDir, !!pagesDir, appDir, pagesDir, debugBuildPaths
|
|
78
|
+
const [verifyResult, typeCheckEnd] = await nextBuildSpan.traceChild('run-typescript').traceAsyncFn(()=>verifyAndRunTypeScript(dir, config.distDir, Boolean(config.experimental.strictRouteTypes), !ignoreTypeScriptErrors, config.typescript.tsconfigPath, Boolean(config.typedRoutes), config.images.disableStaticImages, cacheDir, config.experimental.workerThreads, !!appDir, !!pagesDir, appDir, pagesDir, debugBuildPaths, useTypeScriptCli, // Stop the spinner before as soon as the subprocess reports output.
|
|
79
|
+
useTypeScriptCli && typeCheckingSpinner ? ()=>typeCheckingSpinner.stop() : undefined).then((resolved)=>{
|
|
74
80
|
const checkEnd = process.hrtime(typeCheckAndLintStart);
|
|
75
81
|
return [
|
|
76
82
|
resolved,
|
|
@@ -88,7 +94,8 @@ export async function startTypeChecking({ cacheDir, config, dir, nextBuildSpan,
|
|
|
88
94
|
typescriptVersion: verifyResult.version,
|
|
89
95
|
inputFilesCount: (_verifyResult_result = verifyResult.result) == null ? void 0 : _verifyResult_result.inputFilesCount,
|
|
90
96
|
totalFilesCount: (_verifyResult_result1 = verifyResult.result) == null ? void 0 : _verifyResult_result1.totalFilesCount,
|
|
91
|
-
incremental: (_verifyResult_result2 = verifyResult.result) == null ? void 0 : _verifyResult_result2.incremental
|
|
97
|
+
incremental: (_verifyResult_result2 = verifyResult.result) == null ? void 0 : _verifyResult_result2.incremental,
|
|
98
|
+
typeCheckMode: verifyResult.typeCheckMode
|
|
92
99
|
}));
|
|
93
100
|
}
|
|
94
101
|
} catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/build/type-check.ts"],"sourcesContent":["import type { NextConfigComplete } from '../server/config-shared'\nimport type { Telemetry } from '../telemetry/storage'\nimport type { Span } from '../trace'\n\nimport * as Log from './output/log'\nimport { Worker } from '../lib/worker'\nimport createSpinner from './spinner'\nimport { eventTypeCheckCompleted } from '../telemetry/events'\nimport isError from '../lib/is-error'\nimport { hrtimeDurationToString } from './duration-to-string'\n\n/**\n *
|
|
1
|
+
{"version":3,"sources":["../../../src/build/type-check.ts"],"sourcesContent":["import type { NextConfigComplete } from '../server/config-shared'\nimport type { Telemetry } from '../telemetry/storage'\nimport type { Span } from '../trace'\n\nimport * as Log from './output/log'\nimport { Worker } from '../lib/worker'\nimport createSpinner from './spinner'\nimport { eventTypeCheckCompleted } from '../telemetry/events'\nimport isError from '../lib/is-error'\nimport { hrtimeDurationToString } from './duration-to-string'\n\n/**\n * TypeScript setup and type checking run in a worker so the compiler's memory\n * can be released before the rest of the build continues.\n *\n * Since it is impossible to pass a function from main thread to a worker,\n * instead of running \"next/lib/typescript/runTypeCheck\" in a worker,\n * we will run entire \"next/lib/verify-typescript-setup\" in a worker instead.\n */\nfunction verifyAndRunTypeScript(\n dir: string,\n distDir: string,\n strictRouteTypes: boolean,\n shouldRunTypeCheck: boolean,\n tsconfigPath: string | undefined,\n typedRoutes: boolean,\n disableStaticImages: boolean,\n cacheDir: string | undefined,\n enableWorkerThreads: boolean | undefined,\n hasAppDir: boolean,\n hasPagesDir: boolean,\n appDir: string | undefined,\n pagesDir: string | undefined,\n debugBuildPaths: { app: string[]; pages: string[] } | undefined,\n useTypeScriptCli: boolean,\n onFirstCliOutput?: () => void\n) {\n let impl: typeof import('../lib/verify-typescript-setup').verifyAndRunTypeScript\n let typeCheckWorker:\n | (Worker & {\n verifyAndRunTypeScriptInWorker: typeof impl\n })\n | undefined\n if (shouldRunTypeCheck && !useTypeScriptCli) {\n typeCheckWorker = new Worker(\n require.resolve('../lib/verify-typescript-setup'),\n {\n exposedMethods: ['verifyAndRunTypeScriptInWorker'],\n debuggerPortOffset: -1,\n isolatedMemory: false,\n numWorkers: 1,\n enableWorkerThreads,\n maxRetries: 0,\n }\n ) as typeof typeCheckWorker\n impl = typeCheckWorker!.verifyAndRunTypeScriptInWorker\n } else {\n // No worker: either we are not type-checking (just writing setup files), or\n // the CLI checker runs `tsc` in-process. Avoid the worker overhead.\n impl = (\n require('../lib/verify-typescript-setup') as typeof import('../lib/verify-typescript-setup')\n ).verifyAndRunTypeScript\n }\n\n return impl({\n dir,\n distDir,\n strictRouteTypes,\n shouldRunTypeCheck,\n tsconfigPath,\n typedRoutes,\n disableStaticImages,\n cacheDir,\n hasAppDir,\n hasPagesDir,\n appDir,\n pagesDir,\n debugBuildPaths,\n useTypeScriptCli,\n onFirstCliOutput,\n })\n .then((result) => {\n typeCheckWorker?.end()\n return result\n })\n .catch(() => {\n // The error is already logged (in the worker for the API checker, or\n // directly for the in-process CLI checker); we simply exit to prevent the\n // `Jest worker encountered 1 child process exceptions, exceeding retry\n // limit` message from showing up.\n process.exit(1)\n })\n}\n\nexport async function startTypeChecking({\n cacheDir,\n config,\n dir,\n nextBuildSpan,\n pagesDir,\n telemetry,\n appDir,\n debugBuildPaths,\n}: {\n cacheDir: string\n config: NextConfigComplete\n dir: string\n nextBuildSpan: Span\n pagesDir?: string\n telemetry: Telemetry\n appDir?: string\n debugBuildPaths: { app: string[]; pages: string[] } | undefined\n}) {\n const ignoreTypeScriptErrors = Boolean(config.typescript.ignoreBuildErrors)\n const useTypeScriptCli = Boolean(config.experimental.useTypeScriptCli)\n\n if (ignoreTypeScriptErrors) {\n Log.info('Skipping validation of types')\n }\n\n let typeCheckingSpinnerPrefixText: string | undefined\n let typeCheckingSpinner: ReturnType<typeof createSpinner> | undefined\n\n if (!ignoreTypeScriptErrors) {\n typeCheckingSpinnerPrefixText = 'Running TypeScript'\n }\n\n if (typeCheckingSpinnerPrefixText) {\n typeCheckingSpinner = createSpinner(typeCheckingSpinnerPrefixText)\n }\n\n const typeCheckAndLintStart = process.hrtime()\n\n try {\n const [verifyResult, typeCheckEnd] = await nextBuildSpan\n .traceChild('run-typescript')\n .traceAsyncFn(() =>\n verifyAndRunTypeScript(\n dir,\n config.distDir,\n Boolean(config.experimental.strictRouteTypes),\n !ignoreTypeScriptErrors,\n config.typescript.tsconfigPath,\n Boolean(config.typedRoutes),\n config.images.disableStaticImages,\n cacheDir,\n config.experimental.workerThreads,\n !!appDir,\n !!pagesDir,\n appDir,\n pagesDir,\n debugBuildPaths,\n useTypeScriptCli,\n // Stop the spinner before as soon as the subprocess reports output.\n useTypeScriptCli && typeCheckingSpinner\n ? () => typeCheckingSpinner.stop()\n : undefined\n ).then((resolved) => {\n const checkEnd = process.hrtime(typeCheckAndLintStart)\n return [resolved, checkEnd] as const\n })\n )\n\n if (typeCheckingSpinner) {\n typeCheckingSpinner.stop()\n }\n\n createSpinner(\n `Finished TypeScript${ignoreTypeScriptErrors ? ' config validation' : ''} in ${hrtimeDurationToString(typeCheckEnd)}`\n )?.stopAndPersist()\n\n if (!ignoreTypeScriptErrors && verifyResult) {\n telemetry.record(\n eventTypeCheckCompleted({\n durationInSeconds: typeCheckEnd[0],\n typescriptVersion: verifyResult.version,\n inputFilesCount: verifyResult.result?.inputFilesCount,\n totalFilesCount: verifyResult.result?.totalFilesCount,\n incremental: verifyResult.result?.incremental,\n typeCheckMode: verifyResult.typeCheckMode,\n })\n )\n }\n } catch (err) {\n // prevent showing jest-worker internal error as it\n // isn't helpful for users and clutters output\n if (isError(err) && err.message === 'Call retries were exceeded') {\n await telemetry.flush()\n process.exit(1)\n }\n throw err\n }\n}\n"],"names":["Log","Worker","createSpinner","eventTypeCheckCompleted","isError","hrtimeDurationToString","verifyAndRunTypeScript","dir","distDir","strictRouteTypes","shouldRunTypeCheck","tsconfigPath","typedRoutes","disableStaticImages","cacheDir","enableWorkerThreads","hasAppDir","hasPagesDir","appDir","pagesDir","debugBuildPaths","useTypeScriptCli","onFirstCliOutput","impl","typeCheckWorker","require","resolve","exposedMethods","debuggerPortOffset","isolatedMemory","numWorkers","maxRetries","verifyAndRunTypeScriptInWorker","then","result","end","catch","process","exit","startTypeChecking","config","nextBuildSpan","telemetry","ignoreTypeScriptErrors","Boolean","typescript","ignoreBuildErrors","experimental","info","typeCheckingSpinnerPrefixText","typeCheckingSpinner","typeCheckAndLintStart","hrtime","verifyResult","typeCheckEnd","traceChild","traceAsyncFn","images","workerThreads","stop","undefined","resolved","checkEnd","stopAndPersist","record","durationInSeconds","typescriptVersion","version","inputFilesCount","totalFilesCount","incremental","typeCheckMode","err","message","flush"],"mappings":"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","ignoreList":[0]}
|
|
@@ -1630,7 +1630,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
|
|
|
1630
1630
|
isClient && new CopyFilePlugin({
|
|
1631
1631
|
// file path to build output of `@next/polyfill-nomodule`
|
|
1632
1632
|
filePath: require.resolve('./polyfills/polyfill-nomodule'),
|
|
1633
|
-
cacheKey: "16.2.
|
|
1633
|
+
cacheKey: "16.2.12",
|
|
1634
1634
|
name: `static/chunks/polyfills${dev ? '' : '-[hash]'}.js`,
|
|
1635
1635
|
minimize: false,
|
|
1636
1636
|
info: {
|
|
@@ -1824,7 +1824,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
|
|
|
1824
1824
|
// - Next.js location on disk (some loaders use absolute paths and some resolve options depend on absolute paths)
|
|
1825
1825
|
// - Next.js version
|
|
1826
1826
|
// - next.config.js keys that affect compilation
|
|
1827
|
-
version: `${__dirname}|${"16.2.
|
|
1827
|
+
version: `${__dirname}|${"16.2.12"}|${configVars}`,
|
|
1828
1828
|
cacheDirectory: path.join(distDir, 'cache', 'webpack'),
|
|
1829
1829
|
// For production builds, it's more efficient to compress all cache files together instead of compression each one individually.
|
|
1830
1830
|
// So we disable compression here and allow the build runner to take care of compressing the cache as a whole.
|
|
@@ -1880,7 +1880,7 @@ export default async function getBaseWebpackConfig(dir, { buildId, encryptionKey
|
|
|
1880
1880
|
type: 'filesystem',
|
|
1881
1881
|
directory: cache.cacheDirectory
|
|
1882
1882
|
},
|
|
1883
|
-
version: `${__dirname}|${"16.2.
|
|
1883
|
+
version: `${__dirname}|${"16.2.12"}|${configVars}`
|
|
1884
1884
|
};
|
|
1885
1885
|
}
|
|
1886
1886
|
if (process.env.NEXT_WEBPACK_LOGGING) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - next/script with `beforeInteractive` strategy
|
|
6
6
|
*/ import { getAssetPrefix } from './asset-prefix';
|
|
7
7
|
import { setAttributesFromProps } from './set-attributes-from-props';
|
|
8
|
-
const version = "16.2.
|
|
8
|
+
const version = "16.2.12";
|
|
9
9
|
window.next = {
|
|
10
10
|
version,
|
|
11
11
|
appDir: true
|
package/dist/esm/client/index.js
CHANGED
|
@@ -25,7 +25,7 @@ import { SearchParamsContext, PathParamsContext } from '../shared/lib/hooks-clie
|
|
|
25
25
|
import { onRecoverableError } from './react-client-callbacks/on-recoverable-error';
|
|
26
26
|
import tracer from './tracing/tracer';
|
|
27
27
|
import { isNextRouterError } from './components/is-next-router-error';
|
|
28
|
-
export const version = "16.2.
|
|
28
|
+
export const version = "16.2.12";
|
|
29
29
|
export let router;
|
|
30
30
|
export const emitter = mitt();
|
|
31
31
|
const looseToArray = (input)=>[].slice.call(input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/has-necessary-dependencies.ts"],"sourcesContent":["import { existsSync, realpathSync } from 'fs'\nimport { resolveFrom } from './resolve-from'\nimport { dirname, join, relative } from 'path'\n\nexport interface MissingDependency {\n file: string\n /**\n * The package's package.json (e.g. require(`${pkg}/package.json`)) MUST resolve.\n * If `exportsRestrict` is false, `${file}` MUST also resolve.\n */\n pkg: string\n /**\n * If true, the pkg's package.json needs to be resolvable.\n * If true, will resolve `file` relative to the real path of the package.json.\n *\n * For example, `{ file: '@types/react/index.d.ts', pkg: '@types/react', exportsRestrict: true }`\n * will try to resolve '@types/react/package.json' first and then assume `@types/react/index.d.ts`\n * resolves to `path.join(dirname(resolvedPackageJsonPath), 'index.d.ts')`.\n *\n * If false, will resolve `file` relative to the baseDir.\n * ForFor example, `{ file: '@types/react/index.d.ts', pkg: '@types/react', exportsRestrict: true }`\n * will try to resolve `@types/react/index.d.ts` directly.\n */\n exportsRestrict: boolean\n}\n\nexport type NecessaryDependencies = {\n resolved: Map<string, string>\n missing: MissingDependency[]\n}\n\nexport function hasNecessaryDependencies(\n baseDir: string,\n requiredPackages: MissingDependency[]\n): NecessaryDependencies {\n let resolutions = new Map<string, string>()\n const missingPackages: MissingDependency[] = []\n\n for (const p of requiredPackages) {\n try {\n const pkgPath = realpathSync(\n resolveFrom(baseDir, `${p.pkg}/package.json`)\n )\n const pkgDir = dirname(pkgPath)\n\n resolutions.set(join(p.pkg, 'package.json'), pkgPath)\n\n if (p.exportsRestrict) {\n const fileNameToVerify = relative(p.pkg, p.file)\n if (fileNameToVerify) {\n const fileToVerify = join(pkgDir, fileNameToVerify)\n if (existsSync(fileToVerify)) {\n resolutions.set(p.pkg, fileToVerify)\n } else {\n missingPackages.push(p)\n continue\n }\n } else {\n resolutions.set(p.pkg, pkgPath)\n }\n } else {\n resolutions.set(p.pkg, resolveFrom(baseDir, p.file))\n }\n } catch (_) {\n missingPackages.push(p)\n continue\n }\n }\n\n return {\n resolved: resolutions,\n missing: missingPackages,\n }\n}\n"],"names":["existsSync","realpathSync","resolveFrom","dirname","join","relative","hasNecessaryDependencies","baseDir","requiredPackages","resolutions","Map","missingPackages","p","pkgPath","pkg","pkgDir","set","exportsRestrict","fileNameToVerify","file","fileToVerify","push","_","resolved","missing"],"mappings":"AAAA,SAASA,UAAU,EAAEC,YAAY,QAAQ,KAAI;AAC7C,SAASC,WAAW,QAAQ,iBAAgB;AAC5C,SAASC,OAAO,EAAEC,IAAI,EAAEC,QAAQ,QAAQ,OAAM;
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/has-necessary-dependencies.ts"],"sourcesContent":["import { existsSync, realpathSync } from 'fs'\nimport { resolveFrom } from './resolve-from'\nimport { dirname, join, relative } from 'path'\n\nexport interface MissingDependency {\n file: string\n /**\n * The package's package.json (e.g. require(`${pkg}/package.json`)) MUST resolve.\n * If `exportsRestrict` is false, `${file}` MUST also resolve.\n */\n pkg: string\n /** Package specifier to install when it differs from pkg. */\n install?: string\n /**\n * If true, the pkg's package.json needs to be resolvable.\n * If true, will resolve `file` relative to the real path of the package.json.\n *\n * For example, `{ file: '@types/react/index.d.ts', pkg: '@types/react', exportsRestrict: true }`\n * will try to resolve '@types/react/package.json' first and then assume `@types/react/index.d.ts`\n * resolves to `path.join(dirname(resolvedPackageJsonPath), 'index.d.ts')`.\n *\n * If false, will resolve `file` relative to the baseDir.\n * ForFor example, `{ file: '@types/react/index.d.ts', pkg: '@types/react', exportsRestrict: true }`\n * will try to resolve `@types/react/index.d.ts` directly.\n */\n exportsRestrict: boolean\n}\n\nexport type NecessaryDependencies = {\n resolved: Map<string, string>\n missing: MissingDependency[]\n}\n\nexport function hasNecessaryDependencies(\n baseDir: string,\n requiredPackages: MissingDependency[]\n): NecessaryDependencies {\n let resolutions = new Map<string, string>()\n const missingPackages: MissingDependency[] = []\n\n for (const p of requiredPackages) {\n try {\n const pkgPath = realpathSync(\n resolveFrom(baseDir, `${p.pkg}/package.json`)\n )\n const pkgDir = dirname(pkgPath)\n\n resolutions.set(join(p.pkg, 'package.json'), pkgPath)\n\n if (p.exportsRestrict) {\n const fileNameToVerify = relative(p.pkg, p.file)\n if (fileNameToVerify) {\n const fileToVerify = join(pkgDir, fileNameToVerify)\n if (existsSync(fileToVerify)) {\n resolutions.set(p.pkg, fileToVerify)\n } else {\n missingPackages.push(p)\n continue\n }\n } else {\n resolutions.set(p.pkg, pkgPath)\n }\n } else {\n resolutions.set(p.pkg, resolveFrom(baseDir, p.file))\n }\n } catch (_) {\n missingPackages.push(p)\n continue\n }\n }\n\n return {\n resolved: resolutions,\n missing: missingPackages,\n }\n}\n"],"names":["existsSync","realpathSync","resolveFrom","dirname","join","relative","hasNecessaryDependencies","baseDir","requiredPackages","resolutions","Map","missingPackages","p","pkgPath","pkg","pkgDir","set","exportsRestrict","fileNameToVerify","file","fileToVerify","push","_","resolved","missing"],"mappings":"AAAA,SAASA,UAAU,EAAEC,YAAY,QAAQ,KAAI;AAC7C,SAASC,WAAW,QAAQ,iBAAgB;AAC5C,SAASC,OAAO,EAAEC,IAAI,EAAEC,QAAQ,QAAQ,OAAM;AA+B9C,OAAO,SAASC,yBACdC,OAAe,EACfC,gBAAqC;IAErC,IAAIC,cAAc,IAAIC;IACtB,MAAMC,kBAAuC,EAAE;IAE/C,KAAK,MAAMC,KAAKJ,iBAAkB;QAChC,IAAI;YACF,MAAMK,UAAUZ,aACdC,YAAYK,SAAS,GAAGK,EAAEE,GAAG,CAAC,aAAa,CAAC;YAE9C,MAAMC,SAASZ,QAAQU;YAEvBJ,YAAYO,GAAG,CAACZ,KAAKQ,EAAEE,GAAG,EAAE,iBAAiBD;YAE7C,IAAID,EAAEK,eAAe,EAAE;gBACrB,MAAMC,mBAAmBb,SAASO,EAAEE,GAAG,EAAEF,EAAEO,IAAI;gBAC/C,IAAID,kBAAkB;oBACpB,MAAME,eAAehB,KAAKW,QAAQG;oBAClC,IAAIlB,WAAWoB,eAAe;wBAC5BX,YAAYO,GAAG,CAACJ,EAAEE,GAAG,EAAEM;oBACzB,OAAO;wBACLT,gBAAgBU,IAAI,CAACT;wBACrB;oBACF;gBACF,OAAO;oBACLH,YAAYO,GAAG,CAACJ,EAAEE,GAAG,EAAED;gBACzB;YACF,OAAO;gBACLJ,YAAYO,GAAG,CAACJ,EAAEE,GAAG,EAAEZ,YAAYK,SAASK,EAAEO,IAAI;YACpD;QACF,EAAE,OAAOG,GAAG;YACVX,gBAAgBU,IAAI,CAACT;YACrB;QACF;IACF;IAEA,OAAO;QACLW,UAAUd;QACVe,SAASb;IACX;AACF","ignoreList":[0]}
|
|
@@ -13,7 +13,7 @@ export async function installDependencies(baseDir, deps, dev = false) {
|
|
|
13
13
|
console.log(`- ${cyan(dep.pkg)}`);
|
|
14
14
|
}
|
|
15
15
|
console.log();
|
|
16
|
-
await install(path.resolve(baseDir), deps.map((dep)=>dep.pkg), {
|
|
16
|
+
await install(path.resolve(baseDir), deps.map((dep)=>dep.install ?? dep.pkg), {
|
|
17
17
|
devDependencies: dev,
|
|
18
18
|
isOnline,
|
|
19
19
|
packageManager
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/install-dependencies.ts"],"sourcesContent":["import { cyan } from './picocolors'\nimport path from 'path'\n\nimport type { MissingDependency } from './has-necessary-dependencies'\nimport { getPkgManager } from './helpers/get-pkg-manager'\nimport { install } from './helpers/install'\nimport { getOnline } from './helpers/get-online'\n\nexport type Dependencies = {\n resolved: Map<string, string>\n}\n\nexport async function installDependencies(\n baseDir: string,\n deps: any,\n dev: boolean = false\n) {\n const packageManager = getPkgManager(baseDir)\n const isOnline = await getOnline()\n\n if (deps.length) {\n console.log()\n console.log(\n `Installing ${\n dev ? 'devDependencies' : 'dependencies'\n } (${packageManager}):`\n )\n for (const dep of deps) {\n console.log(`- ${cyan(dep.pkg)}`)\n }\n console.log()\n\n await install(\n path.resolve(baseDir),\n deps.map((dep: MissingDependency) => dep.pkg),\n { devDependencies: dev, isOnline, packageManager }\n )\n console.log()\n }\n}\n"],"names":["cyan","path","getPkgManager","install","getOnline","installDependencies","baseDir","deps","dev","packageManager","isOnline","length","console","log","dep","pkg","resolve","map","devDependencies"],"mappings":"AAAA,SAASA,IAAI,QAAQ,eAAc;AACnC,OAAOC,UAAU,OAAM;AAGvB,SAASC,aAAa,QAAQ,4BAA2B;AACzD,SAASC,OAAO,QAAQ,oBAAmB;AAC3C,SAASC,SAAS,QAAQ,uBAAsB;AAMhD,OAAO,eAAeC,oBACpBC,OAAe,EACfC,IAAS,EACTC,MAAe,KAAK;IAEpB,MAAMC,iBAAiBP,cAAcI;IACrC,MAAMI,WAAW,MAAMN;IAEvB,IAAIG,KAAKI,MAAM,EAAE;QACfC,QAAQC,GAAG;QACXD,QAAQC,GAAG,CACT,CAAC,WAAW,EACVL,MAAM,oBAAoB,eAC3B,EAAE,EAAEC,eAAe,EAAE,CAAC;QAEzB,KAAK,MAAMK,OAAOP,KAAM;YACtBK,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEb,KAAKc,IAAIC,GAAG,GAAG;QAClC;QACAH,QAAQC,GAAG;QAEX,MAAMV,QACJF,KAAKe,OAAO,CAACV,UACbC,KAAKU,GAAG,CAAC,CAACH,MAA2BA,IAAIC,GAAG,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/install-dependencies.ts"],"sourcesContent":["import { cyan } from './picocolors'\nimport path from 'path'\n\nimport type { MissingDependency } from './has-necessary-dependencies'\nimport { getPkgManager } from './helpers/get-pkg-manager'\nimport { install } from './helpers/install'\nimport { getOnline } from './helpers/get-online'\n\nexport type Dependencies = {\n resolved: Map<string, string>\n}\n\nexport async function installDependencies(\n baseDir: string,\n deps: any,\n dev: boolean = false\n) {\n const packageManager = getPkgManager(baseDir)\n const isOnline = await getOnline()\n\n if (deps.length) {\n console.log()\n console.log(\n `Installing ${\n dev ? 'devDependencies' : 'dependencies'\n } (${packageManager}):`\n )\n for (const dep of deps) {\n console.log(`- ${cyan(dep.pkg)}`)\n }\n console.log()\n\n await install(\n path.resolve(baseDir),\n deps.map((dep: MissingDependency) => dep.install ?? dep.pkg),\n { devDependencies: dev, isOnline, packageManager }\n )\n console.log()\n }\n}\n"],"names":["cyan","path","getPkgManager","install","getOnline","installDependencies","baseDir","deps","dev","packageManager","isOnline","length","console","log","dep","pkg","resolve","map","devDependencies"],"mappings":"AAAA,SAASA,IAAI,QAAQ,eAAc;AACnC,OAAOC,UAAU,OAAM;AAGvB,SAASC,aAAa,QAAQ,4BAA2B;AACzD,SAASC,OAAO,QAAQ,oBAAmB;AAC3C,SAASC,SAAS,QAAQ,uBAAsB;AAMhD,OAAO,eAAeC,oBACpBC,OAAe,EACfC,IAAS,EACTC,MAAe,KAAK;IAEpB,MAAMC,iBAAiBP,cAAcI;IACrC,MAAMI,WAAW,MAAMN;IAEvB,IAAIG,KAAKI,MAAM,EAAE;QACfC,QAAQC,GAAG;QACXD,QAAQC,GAAG,CACT,CAAC,WAAW,EACVL,MAAM,oBAAoB,eAC3B,EAAE,EAAEC,eAAe,EAAE,CAAC;QAEzB,KAAK,MAAMK,OAAOP,KAAM;YACtBK,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEb,KAAKc,IAAIC,GAAG,GAAG;QAClC;QACAH,QAAQC,GAAG;QAEX,MAAMV,QACJF,KAAKe,OAAO,CAACV,UACbC,KAAKU,GAAG,CAAC,CAACH,MAA2BA,IAAIX,OAAO,IAAIW,IAAIC,GAAG,GAC3D;YAAEG,iBAAiBV;YAAKE;YAAUD;QAAe;QAEnDG,QAAQC,GAAG;IACb;AACF","ignoreList":[0]}
|
|
@@ -17,7 +17,7 @@ async function fetchPkgInfo(pkg) {
|
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
const data = await res.json();
|
|
20
|
-
const versionData = data.versions["16.2.
|
|
20
|
+
const versionData = data.versions["16.2.12"];
|
|
21
21
|
return {
|
|
22
22
|
os: versionData.os,
|
|
23
23
|
cpu: versionData.cpu,
|
|
@@ -50,7 +50,7 @@ async function fetchPkgInfo(pkg) {
|
|
|
50
50
|
const expectedSwcPkgs = Object.keys(nextOptionalDeps || {}).filter((pkg)=>pkg.startsWith('@next/swc-'));
|
|
51
51
|
const patchDependency = (pkg, pkgData)=>{
|
|
52
52
|
lockfileParsed.dependencies[pkg] = {
|
|
53
|
-
version: "16.2.
|
|
53
|
+
version: "16.2.12",
|
|
54
54
|
resolved: pkgData.tarball,
|
|
55
55
|
integrity: pkgData.integrity,
|
|
56
56
|
optional: true
|
|
@@ -58,7 +58,7 @@ async function fetchPkgInfo(pkg) {
|
|
|
58
58
|
};
|
|
59
59
|
const patchPackage = (pkg, pkgData)=>{
|
|
60
60
|
lockfileParsed.packages[pkg] = {
|
|
61
|
-
version: "16.2.
|
|
61
|
+
version: "16.2.12",
|
|
62
62
|
resolved: pkgData.tarball,
|
|
63
63
|
integrity: pkgData.integrity,
|
|
64
64
|
cpu: pkgData.cpu,
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import * as CommentJson from 'next/dist/compiled/comment-json';
|
|
4
|
+
function resolveConfigDirValue(value, configDir, rootConfigDir) {
|
|
5
|
+
return path.resolve(configDir, value.replace(/\$\{configDir\}/g, rootConfigDir));
|
|
6
|
+
}
|
|
7
|
+
function resolveConfigFile(candidate) {
|
|
8
|
+
for (const configPath of [
|
|
9
|
+
candidate,
|
|
10
|
+
candidate.endsWith('.json') ? undefined : candidate + '.json'
|
|
11
|
+
]){
|
|
12
|
+
if (configPath && existsSync(configPath) && statSync(configPath).isFile()) {
|
|
13
|
+
return configPath;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function resolvePackageTsConfig(extendsPath, currentConfigDir) {
|
|
18
|
+
const parts = extendsPath.split('/');
|
|
19
|
+
const isPackageRoot = extendsPath.startsWith('@') ? parts.length === 2 : parts.length === 1;
|
|
20
|
+
if (!isPackageRoot) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const packageJsonPath = require.resolve(extendsPath + '/package.json', {
|
|
25
|
+
paths: [
|
|
26
|
+
currentConfigDir
|
|
27
|
+
]
|
|
28
|
+
});
|
|
29
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
30
|
+
if (packageJson.exports !== undefined) {
|
|
31
|
+
try {
|
|
32
|
+
const exportedConfig = require.resolve(extendsPath, {
|
|
33
|
+
paths: [
|
|
34
|
+
currentConfigDir
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
if (path.extname(exportedConfig) === '.json') {
|
|
38
|
+
return exportedConfig;
|
|
39
|
+
}
|
|
40
|
+
} catch {}
|
|
41
|
+
}
|
|
42
|
+
if (typeof packageJson.tsconfig === 'string') {
|
|
43
|
+
return resolveConfigFile(path.resolve(path.dirname(packageJsonPath), packageJson.tsconfig));
|
|
44
|
+
}
|
|
45
|
+
return resolveConfigFile(path.join(path.dirname(packageJsonPath), 'tsconfig'));
|
|
46
|
+
} catch {}
|
|
47
|
+
}
|
|
48
|
+
function resolveExtends(extendsPath, currentConfigDir) {
|
|
49
|
+
if (extendsPath.startsWith('./') || extendsPath.startsWith('../') || path.isAbsolute(extendsPath)) {
|
|
50
|
+
const resolved = path.resolve(currentConfigDir, extendsPath);
|
|
51
|
+
if (existsSync(resolved)) {
|
|
52
|
+
return resolved;
|
|
53
|
+
}
|
|
54
|
+
if (!resolved.endsWith('.json') && existsSync(resolved + '.json')) {
|
|
55
|
+
return resolved + '.json';
|
|
56
|
+
}
|
|
57
|
+
return resolved;
|
|
58
|
+
}
|
|
59
|
+
const packageConfigPath = resolvePackageTsConfig(extendsPath, currentConfigDir);
|
|
60
|
+
if (packageConfigPath) {
|
|
61
|
+
return packageConfigPath;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const resolved = require.resolve(extendsPath, {
|
|
65
|
+
paths: [
|
|
66
|
+
currentConfigDir
|
|
67
|
+
]
|
|
68
|
+
});
|
|
69
|
+
if (path.extname(resolved) === '.json') {
|
|
70
|
+
return resolved;
|
|
71
|
+
}
|
|
72
|
+
} catch {}
|
|
73
|
+
try {
|
|
74
|
+
return require.resolve(extendsPath + '/tsconfig.json', {
|
|
75
|
+
paths: [
|
|
76
|
+
currentConfigDir
|
|
77
|
+
]
|
|
78
|
+
});
|
|
79
|
+
} catch {
|
|
80
|
+
return path.resolve(currentConfigDir, extendsPath);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function loadTsConfigOptionsRecursive(configPath, visited, rootConfigDir) {
|
|
84
|
+
const resolvedPath = path.resolve(configPath);
|
|
85
|
+
if (visited.has(resolvedPath) || !existsSync(resolvedPath)) {
|
|
86
|
+
return {};
|
|
87
|
+
}
|
|
88
|
+
const nextVisited = new Set(visited);
|
|
89
|
+
nextVisited.add(resolvedPath);
|
|
90
|
+
const configContent = readFileSync(resolvedPath, 'utf8');
|
|
91
|
+
const config = CommentJson.parse(configContent);
|
|
92
|
+
const configDir = path.dirname(resolvedPath);
|
|
93
|
+
let mergedOptions = {};
|
|
94
|
+
if (config.extends) {
|
|
95
|
+
const extendsList = Array.isArray(config.extends) ? config.extends : [
|
|
96
|
+
config.extends
|
|
97
|
+
];
|
|
98
|
+
for (const extendsPath of extendsList){
|
|
99
|
+
const parentConfigPath = resolveExtends(extendsPath, configDir);
|
|
100
|
+
const parentOptions = loadTsConfigOptionsRecursive(parentConfigPath, nextVisited, rootConfigDir);
|
|
101
|
+
mergedOptions = {
|
|
102
|
+
...mergedOptions,
|
|
103
|
+
...parentOptions
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const currentOptions = config.compilerOptions ?? {};
|
|
108
|
+
if (Object.hasOwn(currentOptions, 'paths')) {
|
|
109
|
+
mergedOptions.paths = currentOptions.paths;
|
|
110
|
+
mergedOptions.pathsBasePath = configDir;
|
|
111
|
+
}
|
|
112
|
+
if (Object.hasOwn(currentOptions, 'baseUrl') && typeof currentOptions.baseUrl === 'string') {
|
|
113
|
+
mergedOptions.baseUrl = resolveConfigDirValue(currentOptions.baseUrl, configDir, rootConfigDir);
|
|
114
|
+
}
|
|
115
|
+
if (mergedOptions.baseUrl) {
|
|
116
|
+
mergedOptions.pathsBasePath = undefined;
|
|
117
|
+
}
|
|
118
|
+
return mergedOptions;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Loads only the tsconfig options Next.js needs outside of the TypeScript API.
|
|
122
|
+
* Paths and baseUrl keep the directory they were declared in while resolving
|
|
123
|
+
* an extends chain, including arrays of extended configs.
|
|
124
|
+
*/ export function loadTsConfigOptions(configPath) {
|
|
125
|
+
const resolvedPath = path.resolve(configPath);
|
|
126
|
+
return loadTsConfigOptionsRecursive(resolvedPath, new Set(), path.dirname(resolvedPath));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=loadTsConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/typescript/loadTsConfig.ts"],"sourcesContent":["import { existsSync, readFileSync, statSync } from 'node:fs'\nimport path from 'node:path'\n\nimport * as CommentJson from 'next/dist/compiled/comment-json'\n\nexport type RelevantCompilerOptions = {\n paths?: Record<string, string[]>\n /** Absolute path for an explicitly configured baseUrl. */\n baseUrl?: string\n /** Absolute directory containing an inherited paths option without baseUrl. */\n pathsBasePath?: string\n}\n\nfunction resolveConfigDirValue(\n value: string,\n configDir: string,\n rootConfigDir: string\n): string {\n return path.resolve(\n configDir,\n value.replace(/\\$\\{configDir\\}/g, rootConfigDir)\n )\n}\n\nfunction resolveConfigFile(candidate: string): string | undefined {\n for (const configPath of [\n candidate,\n candidate.endsWith('.json') ? undefined : candidate + '.json',\n ]) {\n if (configPath && existsSync(configPath) && statSync(configPath).isFile()) {\n return configPath\n }\n }\n}\n\nfunction resolvePackageTsConfig(\n extendsPath: string,\n currentConfigDir: string\n): string | undefined {\n const parts = extendsPath.split('/')\n const isPackageRoot = extendsPath.startsWith('@')\n ? parts.length === 2\n : parts.length === 1\n\n if (!isPackageRoot) {\n return undefined\n }\n\n try {\n const packageJsonPath = require.resolve(extendsPath + '/package.json', {\n paths: [currentConfigDir],\n })\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'))\n if (packageJson.exports !== undefined) {\n try {\n const exportedConfig = require.resolve(extendsPath, {\n paths: [currentConfigDir],\n })\n if (path.extname(exportedConfig) === '.json') {\n return exportedConfig\n }\n } catch {}\n }\n if (typeof packageJson.tsconfig === 'string') {\n return resolveConfigFile(\n path.resolve(path.dirname(packageJsonPath), packageJson.tsconfig)\n )\n }\n return resolveConfigFile(\n path.join(path.dirname(packageJsonPath), 'tsconfig')\n )\n } catch {}\n}\n\nfunction resolveExtends(extendsPath: string, currentConfigDir: string): string {\n if (\n extendsPath.startsWith('./') ||\n extendsPath.startsWith('../') ||\n path.isAbsolute(extendsPath)\n ) {\n const resolved = path.resolve(currentConfigDir, extendsPath)\n if (existsSync(resolved)) {\n return resolved\n }\n if (!resolved.endsWith('.json') && existsSync(resolved + '.json')) {\n return resolved + '.json'\n }\n return resolved\n }\n\n const packageConfigPath = resolvePackageTsConfig(\n extendsPath,\n currentConfigDir\n )\n if (packageConfigPath) {\n return packageConfigPath\n }\n\n try {\n const resolved = require.resolve(extendsPath, { paths: [currentConfigDir] })\n if (path.extname(resolved) === '.json') {\n return resolved\n }\n } catch {}\n\n try {\n return require.resolve(extendsPath + '/tsconfig.json', {\n paths: [currentConfigDir],\n })\n } catch {\n return path.resolve(currentConfigDir, extendsPath)\n }\n}\n\nfunction loadTsConfigOptionsRecursive(\n configPath: string,\n visited: Set<string>,\n rootConfigDir: string\n): RelevantCompilerOptions {\n const resolvedPath = path.resolve(configPath)\n\n if (visited.has(resolvedPath) || !existsSync(resolvedPath)) {\n return {}\n }\n\n const nextVisited = new Set(visited)\n nextVisited.add(resolvedPath)\n\n const configContent = readFileSync(resolvedPath, 'utf8')\n const config = CommentJson.parse(configContent)\n const configDir = path.dirname(resolvedPath)\n\n let mergedOptions: RelevantCompilerOptions = {}\n\n if (config.extends) {\n const extendsList = Array.isArray(config.extends)\n ? config.extends\n : [config.extends]\n\n for (const extendsPath of extendsList) {\n const parentConfigPath = resolveExtends(extendsPath, configDir)\n const parentOptions = loadTsConfigOptionsRecursive(\n parentConfigPath,\n nextVisited,\n rootConfigDir\n )\n mergedOptions = { ...mergedOptions, ...parentOptions }\n }\n }\n\n const currentOptions = config.compilerOptions ?? {}\n\n if (Object.hasOwn(currentOptions, 'paths')) {\n mergedOptions.paths = currentOptions.paths\n mergedOptions.pathsBasePath = configDir\n }\n\n if (\n Object.hasOwn(currentOptions, 'baseUrl') &&\n typeof currentOptions.baseUrl === 'string'\n ) {\n mergedOptions.baseUrl = resolveConfigDirValue(\n currentOptions.baseUrl,\n configDir,\n rootConfigDir\n )\n }\n\n if (mergedOptions.baseUrl) {\n mergedOptions.pathsBasePath = undefined\n }\n\n return mergedOptions\n}\n\n/**\n * Loads only the tsconfig options Next.js needs outside of the TypeScript API.\n * Paths and baseUrl keep the directory they were declared in while resolving\n * an extends chain, including arrays of extended configs.\n */\nexport function loadTsConfigOptions(\n configPath: string\n): RelevantCompilerOptions {\n const resolvedPath = path.resolve(configPath)\n return loadTsConfigOptionsRecursive(\n resolvedPath,\n new Set(),\n path.dirname(resolvedPath)\n )\n}\n"],"names":["existsSync","readFileSync","statSync","path","CommentJson","resolveConfigDirValue","value","configDir","rootConfigDir","resolve","replace","resolveConfigFile","candidate","configPath","endsWith","undefined","isFile","resolvePackageTsConfig","extendsPath","currentConfigDir","parts","split","isPackageRoot","startsWith","length","packageJsonPath","require","paths","packageJson","JSON","parse","exports","exportedConfig","extname","tsconfig","dirname","join","resolveExtends","isAbsolute","resolved","packageConfigPath","loadTsConfigOptionsRecursive","visited","resolvedPath","has","nextVisited","Set","add","configContent","config","mergedOptions","extends","extendsList","Array","isArray","parentConfigPath","parentOptions","currentOptions","compilerOptions","Object","hasOwn","pathsBasePath","baseUrl","loadTsConfigOptions"],"mappings":"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","ignoreList":[0]}
|
|
@@ -4,7 +4,7 @@ import { FatalError } from '../fatal-error';
|
|
|
4
4
|
import { getPkgManager } from '../helpers/get-pkg-manager';
|
|
5
5
|
export function missingDepsError(dir, missingPackages) {
|
|
6
6
|
const packagesHuman = getOxfordCommaList(missingPackages.map((p)=>p.pkg));
|
|
7
|
-
const packagesCli = missingPackages.map((p)=>p.pkg).join(' ');
|
|
7
|
+
const packagesCli = missingPackages.map((p)=>p.install ?? p.pkg).join(' ');
|
|
8
8
|
const packageManager = getPkgManager(dir);
|
|
9
9
|
const removalMsg = '\n\n' + bold('If you are not trying to use TypeScript, please remove the ' + cyan('tsconfig.json') + ' file from your package root (and any TypeScript files in your app and pages directories).');
|
|
10
10
|
throw Object.defineProperty(new FatalError(bold(red(`It looks like you're trying to use TypeScript but do not have the required package(s) installed.`)) + '\n\n' + bold(`Please install ${bold(packagesHuman)} by running:`) + '\n\n' + `\t${bold(cyan((packageManager === 'yarn' ? 'yarn add --dev' : packageManager === 'pnpm' ? 'pnpm install --save-dev' : 'npm install --save-dev') + ' ' + packagesCli))}` + removalMsg + '\n'), "__NEXT_ERROR_CODE", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/typescript/missingDependencyError.ts"],"sourcesContent":["import { bold, cyan, red } from '../picocolors'\n\nimport { getOxfordCommaList } from '../oxford-comma-list'\nimport type { MissingDependency } from '../has-necessary-dependencies'\nimport { FatalError } from '../fatal-error'\nimport { getPkgManager } from '../helpers/get-pkg-manager'\n\nexport function missingDepsError(\n dir: string,\n missingPackages: MissingDependency[]\n): never {\n const packagesHuman = getOxfordCommaList(missingPackages.map((p) => p.pkg))\n const packagesCli = missingPackages.map((p) => p.pkg).join(' ')\n const packageManager = getPkgManager(dir)\n\n const removalMsg =\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 throw new FatalError(\n bold(\n red(\n `It looks like you're trying to use TypeScript but do not have the required package(s) installed.`\n )\n ) +\n '\\n\\n' +\n bold(`Please install ${bold(packagesHuman)} by running:`) +\n '\\n\\n' +\n `\\t${bold(\n cyan(\n (packageManager === 'yarn'\n ? 'yarn add --dev'\n : packageManager === 'pnpm'\n ? 'pnpm install --save-dev'\n : 'npm install --save-dev') +\n ' ' +\n packagesCli\n )\n )}` +\n removalMsg +\n '\\n'\n )\n}\n"],"names":["bold","cyan","red","getOxfordCommaList","FatalError","getPkgManager","missingDepsError","dir","missingPackages","packagesHuman","map","p","pkg","packagesCli","join","packageManager","removalMsg"],"mappings":"AAAA,SAASA,IAAI,EAAEC,IAAI,EAAEC,GAAG,QAAQ,gBAAe;AAE/C,SAASC,kBAAkB,QAAQ,uBAAsB;AAEzD,SAASC,UAAU,QAAQ,iBAAgB;AAC3C,SAASC,aAAa,QAAQ,6BAA4B;AAE1D,OAAO,SAASC,iBACdC,GAAW,EACXC,eAAoC;IAEpC,MAAMC,gBAAgBN,mBAAmBK,gBAAgBE,GAAG,CAAC,CAACC,IAAMA,EAAEC,GAAG;IACzE,MAAMC,cAAcL,gBAAgBE,GAAG,CAAC,CAACC,IAAMA,EAAEC,GAAG,
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/typescript/missingDependencyError.ts"],"sourcesContent":["import { bold, cyan, red } from '../picocolors'\n\nimport { getOxfordCommaList } from '../oxford-comma-list'\nimport type { MissingDependency } from '../has-necessary-dependencies'\nimport { FatalError } from '../fatal-error'\nimport { getPkgManager } from '../helpers/get-pkg-manager'\n\nexport function missingDepsError(\n dir: string,\n missingPackages: MissingDependency[]\n): never {\n const packagesHuman = getOxfordCommaList(missingPackages.map((p) => p.pkg))\n const packagesCli = missingPackages.map((p) => p.install ?? p.pkg).join(' ')\n const packageManager = getPkgManager(dir)\n\n const removalMsg =\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 throw new FatalError(\n bold(\n red(\n `It looks like you're trying to use TypeScript but do not have the required package(s) installed.`\n )\n ) +\n '\\n\\n' +\n bold(`Please install ${bold(packagesHuman)} by running:`) +\n '\\n\\n' +\n `\\t${bold(\n cyan(\n (packageManager === 'yarn'\n ? 'yarn add --dev'\n : packageManager === 'pnpm'\n ? 'pnpm install --save-dev'\n : 'npm install --save-dev') +\n ' ' +\n packagesCli\n )\n )}` +\n removalMsg +\n '\\n'\n )\n}\n"],"names":["bold","cyan","red","getOxfordCommaList","FatalError","getPkgManager","missingDepsError","dir","missingPackages","packagesHuman","map","p","pkg","packagesCli","install","join","packageManager","removalMsg"],"mappings":"AAAA,SAASA,IAAI,EAAEC,IAAI,EAAEC,GAAG,QAAQ,gBAAe;AAE/C,SAASC,kBAAkB,QAAQ,uBAAsB;AAEzD,SAASC,UAAU,QAAQ,iBAAgB;AAC3C,SAASC,aAAa,QAAQ,6BAA4B;AAE1D,OAAO,SAASC,iBACdC,GAAW,EACXC,eAAoC;IAEpC,MAAMC,gBAAgBN,mBAAmBK,gBAAgBE,GAAG,CAAC,CAACC,IAAMA,EAAEC,GAAG;IACzE,MAAMC,cAAcL,gBAAgBE,GAAG,CAAC,CAACC,IAAMA,EAAEG,OAAO,IAAIH,EAAEC,GAAG,EAAEG,IAAI,CAAC;IACxE,MAAMC,iBAAiBX,cAAcE;IAErC,MAAMU,aACJ,SACAjB,KACE,gEACEC,KAAK,mBACL;IAGN,MAAM,qBAsBL,CAtBK,IAAIG,WACRJ,KACEE,IACE,CAAC,gGAAgG,CAAC,KAGpG,SACAF,KAAK,CAAC,eAAe,EAAEA,KAAKS,eAAe,YAAY,CAAC,IACxD,SACA,CAAC,EAAE,EAAET,KACHC,KACE,AAACe,CAAAA,mBAAmB,SAChB,mBACAA,mBAAmB,SACjB,4BACA,wBAAuB,IAC3B,MACAH,eAEH,GACHI,aACA,OArBE,qBAAA;eAAA;oBAAA;sBAAA;IAsBN;AACF","ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/typescript/runTypeCheck.ts"],"sourcesContent":["import path from 'path'\nimport { getFormattedDiagnostic } from './diagnosticFormatter'\nimport { getTypeScriptConfiguration } from './getTypeScriptConfiguration'\nimport { getRequiredConfiguration } from './writeConfigurationDefaults'\nimport { getDevTypesPath } from './type-paths'\n\nimport { CompileError } from '../compile-error'\nimport { warn } from '../../build/output/log'\n\nexport interface TypeCheckResult {\n hasWarnings: boolean\n warnings?: string[]\n inputFilesCount: number\n totalFilesCount: number\n incremental: boolean\n}\n\nexport interface TypeCheckDirs {\n app?: string\n pages?: string\n}\n\nexport interface DebugBuildPaths {\n app?: string[]\n pages?: string[]\n}\n\n/**\n * Check if a file path matches any of the debug build paths.\n * Both filePath and debugPaths are resolved file paths from glob.\n */\nfunction fileMatchesDebugPaths(\n filePath: string,\n debugPaths: string[]\n): boolean {\n return debugPaths.includes(filePath)\n}\n\nexport async function runTypeCheck(\n typescript: typeof import('typescript'),\n baseDir: string,\n distDir: string,\n tsConfigPath: string,\n cacheDir?: string,\n isAppDirEnabled?: boolean,\n dirs?: TypeCheckDirs,\n debugBuildPaths?: DebugBuildPaths\n): Promise<TypeCheckResult> {\n const effectiveConfiguration = await getTypeScriptConfiguration(\n typescript,\n tsConfigPath\n )\n\n // tsconfig includes both .next/types and .next/dev/types to avoid config churn\n // between dev/build modes. During build, we filter out .next/dev/types files to\n // prevent stale dev types from causing errors when routes have been deleted since\n // the last dev session.\n let fileNames = effectiveConfiguration.fileNames\n\n // Get the dev types path to filter (null if not applicable)\n const devTypesDir = getDevTypesPath(baseDir, distDir)\n if (devTypesDir) {\n fileNames = fileNames.filter(\n (fileName) => !fileName.startsWith(devTypesDir)\n )\n }\n\n // Apply debug build paths filter if specified\n if (dirs && debugBuildPaths) {\n const { app: appDir, pages: pagesDir } = dirs\n const { app: debugAppPaths, pages: debugPagePaths } = debugBuildPaths\n\n fileNames = fileNames.filter((fileName) => {\n // Check if file is in app directory\n if (appDir && fileName.startsWith(appDir + path.sep)) {\n // If debugAppPaths is undefined, include all app files\n if (debugAppPaths === undefined) {\n return true\n }\n // If debugAppPaths is empty array, exclude all app files\n if (debugAppPaths.length === 0) {\n return false\n }\n // Check if file matches any of the debug paths\n const relativeToApp = fileName.slice(appDir.length)\n return fileMatchesDebugPaths(relativeToApp, debugAppPaths)\n }\n\n // Check if file is in pages directory\n if (pagesDir && fileName.startsWith(pagesDir + path.sep)) {\n // If debugPagePaths is undefined, include all pages files\n if (debugPagePaths === undefined) {\n return true\n }\n // If debugPagePaths is empty array, exclude all pages files\n if (debugPagePaths.length === 0) {\n return false\n }\n // Check if file matches any of the debug paths\n const relativeToPages = fileName.slice(pagesDir.length)\n return fileMatchesDebugPaths(relativeToPages, debugPagePaths)\n }\n\n // Keep files outside app/pages directories (shared code, etc.)\n return true\n })\n }\n\n if (fileNames.length < 1) {\n return {\n hasWarnings: false,\n inputFilesCount: 0,\n totalFilesCount: 0,\n incremental: false,\n }\n }\n const requiredConfig = getRequiredConfiguration(typescript)\n\n const options = {\n ...requiredConfig,\n ...effectiveConfiguration.options,\n declarationMap: false,\n emitDeclarationOnly: false,\n noEmit: true,\n }\n\n let program:\n | import('typescript').Program\n | import('typescript').BuilderProgram\n let incremental = false\n if ((options.incremental || options.composite) && cacheDir) {\n if (options.composite) {\n warn(\n 'TypeScript project references are not fully supported. Attempting to build in incremental mode.'\n )\n }\n incremental = true\n program = typescript.createIncrementalProgram({\n rootNames: fileNames,\n options: {\n ...options,\n composite: false,\n incremental: true,\n tsBuildInfoFile: path.join(cacheDir, '.tsbuildinfo'),\n },\n })\n } else {\n program = typescript.createProgram(fileNames, options)\n }\n\n const result = program.emit()\n\n const ignoreRegex = [\n // matches **/__(tests|mocks)__/**\n /[\\\\/]__(?:tests|mocks)__[\\\\/]/,\n // matches **/*.(spec|test).*\n /(?<=[\\\\/.])(?:spec|test)\\.[^\\\\/]+$/,\n ]\n const regexIgnoredFile = new RegExp(\n ignoreRegex.map((r) => r.source).join('|')\n )\n\n const allDiagnostics = typescript\n .getPreEmitDiagnostics(program as import('typescript').Program)\n .concat(result.diagnostics)\n .filter((d) => !(d.file && regexIgnoredFile.test(d.file.fileName)))\n\n const firstError =\n allDiagnostics.find(\n (d) =>\n d.category === typescript.DiagnosticCategory.Error && Boolean(d.file)\n ) ??\n allDiagnostics.find(\n (d) => d.category === typescript.DiagnosticCategory.Error\n )\n\n // In test mode, we want to check all diagnostics, not just the first one.\n if (process.env.__NEXT_TEST_MODE) {\n if (firstError) {\n const allErrors = allDiagnostics\n .filter((d) => d.category === typescript.DiagnosticCategory.Error)\n .map(\n (d) =>\n '[Test Mode] ' +\n getFormattedDiagnostic(\n typescript,\n baseDir,\n distDir,\n d,\n isAppDirEnabled\n )\n )\n\n console.error(\n '\\n\\n===== TS errors =====\\n\\n' +\n allErrors.join('\\n\\n') +\n '\\n\\n===== TS errors =====\\n\\n'\n )\n\n // Make sure all stdout is flushed before we exit.\n await new Promise((resolve) => setTimeout(resolve, 100))\n }\n }\n\n if (firstError) {\n throw new CompileError(\n getFormattedDiagnostic(\n typescript,\n baseDir,\n distDir,\n firstError,\n isAppDirEnabled\n )\n )\n }\n\n const warnings = allDiagnostics\n .filter((d) => d.category === typescript.DiagnosticCategory.Warning)\n .map((d) =>\n getFormattedDiagnostic(typescript, baseDir, distDir, d, isAppDirEnabled)\n )\n\n return {\n hasWarnings: true,\n warnings,\n inputFilesCount: fileNames.length,\n totalFilesCount: program.getSourceFiles().length,\n incremental,\n }\n}\n"],"names":["path","getFormattedDiagnostic","getTypeScriptConfiguration","getRequiredConfiguration","getDevTypesPath","CompileError","warn","fileMatchesDebugPaths","filePath","debugPaths","includes","runTypeCheck","typescript","baseDir","distDir","tsConfigPath","cacheDir","isAppDirEnabled","dirs","debugBuildPaths","effectiveConfiguration","fileNames","devTypesDir","filter","fileName","startsWith","app","appDir","pages","pagesDir","debugAppPaths","debugPagePaths","sep","undefined","length","relativeToApp","slice","relativeToPages","hasWarnings","inputFilesCount","totalFilesCount","incremental","requiredConfig","options","declarationMap","emitDeclarationOnly","noEmit","program","composite","createIncrementalProgram","rootNames","tsBuildInfoFile","join","createProgram","result","emit","ignoreRegex","regexIgnoredFile","RegExp","map","r","source","allDiagnostics","getPreEmitDiagnostics","concat","diagnostics","d","file","test","firstError","find","category","DiagnosticCategory","Error","Boolean","process","env","__NEXT_TEST_MODE","allErrors","console","error","Promise","resolve","setTimeout","warnings","Warning","getSourceFiles"],"mappings":"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","ignoreList":[0]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/typescript/runTypeCheck.ts"],"sourcesContent":["import path from 'path'\nimport { getFormattedDiagnostic } from './diagnosticFormatter'\nimport { getTypeScriptConfiguration } from './getTypeScriptConfiguration'\nimport { getRequiredConfiguration } from './writeConfigurationDefaults'\nimport { getDevTypesPath } from './type-paths'\n\nimport { CompileError } from '../compile-error'\nimport { warn } from '../../build/output/log'\n\nexport interface TypeCheckResult {\n hasWarnings: boolean\n warnings?: string[]\n inputFilesCount?: number\n totalFilesCount?: number\n incremental: boolean\n}\n\nexport interface TypeCheckDirs {\n app?: string\n pages?: string\n}\n\nexport interface DebugBuildPaths {\n app?: string[]\n pages?: string[]\n}\n\n/**\n * Check if a file path matches any of the debug build paths.\n * Both filePath and debugPaths are resolved file paths from glob.\n */\nfunction fileMatchesDebugPaths(\n filePath: string,\n debugPaths: string[]\n): boolean {\n return debugPaths.includes(filePath)\n}\n\nexport async function runTypeCheck(\n typescript: typeof import('typescript'),\n baseDir: string,\n distDir: string,\n tsConfigPath: string,\n cacheDir?: string,\n isAppDirEnabled?: boolean,\n dirs?: TypeCheckDirs,\n debugBuildPaths?: DebugBuildPaths\n): Promise<TypeCheckResult> {\n const effectiveConfiguration = await getTypeScriptConfiguration(\n typescript,\n tsConfigPath\n )\n\n // tsconfig includes both .next/types and .next/dev/types to avoid config churn\n // between dev/build modes. During build, we filter out .next/dev/types files to\n // prevent stale dev types from causing errors when routes have been deleted since\n // the last dev session.\n let fileNames = effectiveConfiguration.fileNames\n\n // Get the dev types path to filter (null if not applicable)\n const devTypesDir = getDevTypesPath(baseDir, distDir)\n if (devTypesDir) {\n fileNames = fileNames.filter(\n (fileName) => !fileName.startsWith(devTypesDir)\n )\n }\n\n // Apply debug build paths filter if specified\n if (dirs && debugBuildPaths) {\n const { app: appDir, pages: pagesDir } = dirs\n const { app: debugAppPaths, pages: debugPagePaths } = debugBuildPaths\n\n fileNames = fileNames.filter((fileName) => {\n // Check if file is in app directory\n if (appDir && fileName.startsWith(appDir + path.sep)) {\n // If debugAppPaths is undefined, include all app files\n if (debugAppPaths === undefined) {\n return true\n }\n // If debugAppPaths is empty array, exclude all app files\n if (debugAppPaths.length === 0) {\n return false\n }\n // Check if file matches any of the debug paths\n const relativeToApp = fileName.slice(appDir.length)\n return fileMatchesDebugPaths(relativeToApp, debugAppPaths)\n }\n\n // Check if file is in pages directory\n if (pagesDir && fileName.startsWith(pagesDir + path.sep)) {\n // If debugPagePaths is undefined, include all pages files\n if (debugPagePaths === undefined) {\n return true\n }\n // If debugPagePaths is empty array, exclude all pages files\n if (debugPagePaths.length === 0) {\n return false\n }\n // Check if file matches any of the debug paths\n const relativeToPages = fileName.slice(pagesDir.length)\n return fileMatchesDebugPaths(relativeToPages, debugPagePaths)\n }\n\n // Keep files outside app/pages directories (shared code, etc.)\n return true\n })\n }\n\n if (fileNames.length < 1) {\n return {\n hasWarnings: false,\n inputFilesCount: 0,\n totalFilesCount: 0,\n incremental: false,\n }\n }\n const requiredConfig = getRequiredConfiguration(typescript)\n\n const options = {\n ...requiredConfig,\n ...effectiveConfiguration.options,\n declarationMap: false,\n emitDeclarationOnly: false,\n noEmit: true,\n }\n\n let program:\n | import('typescript').Program\n | import('typescript').BuilderProgram\n let incremental = false\n if ((options.incremental || options.composite) && cacheDir) {\n if (options.composite) {\n warn(\n 'TypeScript project references are not fully supported. Attempting to build in incremental mode.'\n )\n }\n incremental = true\n program = typescript.createIncrementalProgram({\n rootNames: fileNames,\n options: {\n ...options,\n composite: false,\n incremental: true,\n tsBuildInfoFile: path.join(cacheDir, '.tsbuildinfo'),\n },\n })\n } else {\n program = typescript.createProgram(fileNames, options)\n }\n\n const result = program.emit()\n\n const ignoreRegex = [\n // matches **/__(tests|mocks)__/**\n /[\\\\/]__(?:tests|mocks)__[\\\\/]/,\n // matches **/*.(spec|test).*\n /(?<=[\\\\/.])(?:spec|test)\\.[^\\\\/]+$/,\n ]\n const regexIgnoredFile = new RegExp(\n ignoreRegex.map((r) => r.source).join('|')\n )\n\n const allDiagnostics = typescript\n .getPreEmitDiagnostics(program as import('typescript').Program)\n .concat(result.diagnostics)\n .filter((d) => !(d.file && regexIgnoredFile.test(d.file.fileName)))\n\n const firstError =\n allDiagnostics.find(\n (d) =>\n d.category === typescript.DiagnosticCategory.Error && Boolean(d.file)\n ) ??\n allDiagnostics.find(\n (d) => d.category === typescript.DiagnosticCategory.Error\n )\n\n // In test mode, we want to check all diagnostics, not just the first one.\n if (process.env.__NEXT_TEST_MODE) {\n if (firstError) {\n const allErrors = allDiagnostics\n .filter((d) => d.category === typescript.DiagnosticCategory.Error)\n .map(\n (d) =>\n '[Test Mode] ' +\n getFormattedDiagnostic(\n typescript,\n baseDir,\n distDir,\n d,\n isAppDirEnabled\n )\n )\n\n console.error(\n '\\n\\n===== TS errors =====\\n\\n' +\n allErrors.join('\\n\\n') +\n '\\n\\n===== TS errors =====\\n\\n'\n )\n\n // Make sure all stdout is flushed before we exit.\n await new Promise((resolve) => setTimeout(resolve, 100))\n }\n }\n\n if (firstError) {\n throw new CompileError(\n getFormattedDiagnostic(\n typescript,\n baseDir,\n distDir,\n firstError,\n isAppDirEnabled\n )\n )\n }\n\n const warnings = allDiagnostics\n .filter((d) => d.category === typescript.DiagnosticCategory.Warning)\n .map((d) =>\n getFormattedDiagnostic(typescript, baseDir, distDir, d, isAppDirEnabled)\n )\n\n return {\n hasWarnings: true,\n warnings,\n inputFilesCount: fileNames.length,\n totalFilesCount: program.getSourceFiles().length,\n incremental,\n }\n}\n"],"names":["path","getFormattedDiagnostic","getTypeScriptConfiguration","getRequiredConfiguration","getDevTypesPath","CompileError","warn","fileMatchesDebugPaths","filePath","debugPaths","includes","runTypeCheck","typescript","baseDir","distDir","tsConfigPath","cacheDir","isAppDirEnabled","dirs","debugBuildPaths","effectiveConfiguration","fileNames","devTypesDir","filter","fileName","startsWith","app","appDir","pages","pagesDir","debugAppPaths","debugPagePaths","sep","undefined","length","relativeToApp","slice","relativeToPages","hasWarnings","inputFilesCount","totalFilesCount","incremental","requiredConfig","options","declarationMap","emitDeclarationOnly","noEmit","program","composite","createIncrementalProgram","rootNames","tsBuildInfoFile","join","createProgram","result","emit","ignoreRegex","regexIgnoredFile","RegExp","map","r","source","allDiagnostics","getPreEmitDiagnostics","concat","diagnostics","d","file","test","firstError","find","category","DiagnosticCategory","Error","Boolean","process","env","__NEXT_TEST_MODE","allErrors","console","error","Promise","resolve","setTimeout","warnings","Warning","getSourceFiles"],"mappings":"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","ignoreList":[0]}
|