next 15.5.1-canary.32 → 15.5.1-canary.34
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/bin/next +1 -1
- package/dist/build/index.js +2 -2
- package/dist/build/load-jsconfig.js +1 -1
- package/dist/build/load-jsconfig.js.map +1 -1
- package/dist/build/next-config-ts/transpile-config.js +26 -0
- package/dist/build/next-config-ts/transpile-config.js.map +1 -1
- package/dist/build/swc/index.js +1 -1
- package/dist/build/webpack-config.js +2 -2
- package/dist/cli/next-test.js +1 -1
- package/dist/cli/next-test.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/esm/build/index.js +2 -2
- package/dist/esm/build/load-jsconfig.js +1 -1
- package/dist/esm/build/load-jsconfig.js.map +1 -1
- package/dist/esm/build/next-config-ts/transpile-config.js +27 -1
- 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/webpack-config.js +2 -2
- package/dist/esm/client/app-bootstrap.js +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/lib/eslint/runLintCheck.js +1 -1
- package/dist/esm/lib/eslint/runLintCheck.js.map +1 -1
- package/dist/esm/lib/has-necessary-dependencies.js +9 -7
- package/dist/esm/lib/has-necessary-dependencies.js.map +1 -1
- package/dist/esm/lib/verify-partytown-setup.js +1 -1
- package/dist/esm/lib/verify-partytown-setup.js.map +1 -1
- package/dist/esm/lib/verify-typescript-setup.js +2 -2
- package/dist/esm/lib/verify-typescript-setup.js.map +1 -1
- package/dist/esm/server/config-shared.js +1 -1
- package/dist/esm/server/config-shared.js.map +1 -1
- package/dist/esm/server/dev/hot-reloader-turbopack.js +13 -3
- package/dist/esm/server/dev/hot-reloader-turbopack.js.map +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/start-server.js +1 -1
- package/dist/esm/server/lib/utils.js +1 -1
- package/dist/esm/server/lib/utils.js.map +1 -1
- package/dist/esm/shared/lib/canary-only.js +1 -1
- package/dist/lib/eslint/runLintCheck.js +1 -1
- package/dist/lib/eslint/runLintCheck.js.map +1 -1
- package/dist/lib/has-necessary-dependencies.d.ts +1 -1
- package/dist/lib/has-necessary-dependencies.js +8 -6
- package/dist/lib/has-necessary-dependencies.js.map +1 -1
- package/dist/lib/verify-partytown-setup.js +1 -1
- package/dist/lib/verify-partytown-setup.js.map +1 -1
- package/dist/lib/verify-typescript-setup.js +2 -2
- package/dist/lib/verify-typescript-setup.js.map +1 -1
- package/dist/server/config-shared.d.ts +1 -3
- package/dist/server/config-shared.js +1 -1
- package/dist/server/config-shared.js.map +1 -1
- package/dist/server/dev/hot-reloader-turbopack.js +13 -3
- package/dist/server/dev/hot-reloader-turbopack.js.map +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/start-server.js +1 -1
- package/dist/server/lib/utils.d.ts +7 -0
- package/dist/server/lib/utils.js +5 -6
- package/dist/server/lib/utils.js.map +1 -1
- package/dist/shared/lib/canary-only.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
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/eslint/runLintCheck.ts"],"sourcesContent":["import { promises as fs, existsSync } from 'fs'\nimport { bold, cyan, red, underline, yellow } from '../picocolors'\nimport path from 'path'\n\nimport findUp from 'next/dist/compiled/find-up'\nimport semver from 'next/dist/compiled/semver'\nimport * as CommentJson from 'next/dist/compiled/comment-json'\n\nimport { formatResults } from './customFormatter'\nimport type { LintResult } from './customFormatter'\nimport { writeDefaultConfig } from './writeDefaultConfig'\nimport { hasEslintConfiguration } from './hasEslintConfiguration'\nimport { writeOutputFile } from './writeOutputFile'\n\nimport { findPagesDir } from '../find-pages-dir'\nimport { installDependencies } from '../install-dependencies'\nimport { hasNecessaryDependencies } from '../has-necessary-dependencies'\n\nimport * as Log from '../../build/output/log'\nimport type { EventLintCheckCompleted } from '../../telemetry/events/build'\nimport isError, { getProperError } from '../is-error'\nimport { getPkgManager } from '../helpers/get-pkg-manager'\nimport {\n getESLintStrictValue,\n getESLintPromptValues,\n} from './getESLintPromptValues'\n\ntype Config = {\n plugins: string[]\n rules: { [key: string]: Array<number | string> }\n}\n\n// 0 is off, 1 is warn, 2 is error. See https://eslint.org/docs/user-guide/configuring/rules#configuring-rules\nconst VALID_SEVERITY = ['off', 'warn', 'error'] as const\ntype Severity = (typeof VALID_SEVERITY)[number]\n\nfunction isValidSeverity(severity: string): severity is Severity {\n return VALID_SEVERITY.includes(severity as Severity)\n}\n\nconst requiredPackages = [\n { file: 'eslint', pkg: 'eslint', exportsRestrict: false },\n {\n file: 'eslint-config-next',\n pkg: 'eslint-config-next',\n exportsRestrict: false,\n },\n]\n\nasync function cliPrompt(cwd: string): Promise<{ config?: any }> {\n console.log(\n bold(\n `${cyan(\n '?'\n )} How would you like to configure ESLint? https://nextjs.org/docs/app/api-reference/config/eslint`\n )\n )\n\n try {\n const cliSelect = (\n await Promise.resolve(\n require('next/dist/compiled/cli-select') as typeof import('next/dist/compiled/cli-select')\n )\n ).default\n const { value } = await cliSelect({\n values: await getESLintPromptValues(cwd),\n valueRenderer: (\n {\n title,\n recommended,\n }: { title: string; recommended?: boolean; config: any },\n selected: boolean\n ) => {\n const name = selected ? bold(underline(cyan(title))) : title\n return name + (recommended ? bold(yellow(' (recommended)')) : '')\n },\n selected: cyan('❯ '),\n unselected: ' ',\n })\n\n return { config: value?.config ?? null }\n } catch {\n return { config: null }\n }\n}\n\nasync function lint(\n baseDir: string,\n lintDirs: string[],\n eslintrcFile: string | null,\n pkgJsonPath: string | null,\n {\n lintDuringBuild = false,\n eslintOptions = null,\n reportErrorsOnly = false,\n maxWarnings = -1,\n formatter = null,\n outputFile = null,\n }: {\n lintDuringBuild: boolean\n eslintOptions: any\n reportErrorsOnly: boolean\n maxWarnings: number\n formatter: string | null\n outputFile: string | null\n }\n): Promise<\n | string\n | null\n | {\n output: string | null\n isError: boolean\n eventInfo: EventLintCheckCompleted\n }\n> {\n try {\n // Load ESLint after we're sure it exists:\n const deps = await hasNecessaryDependencies(baseDir, requiredPackages)\n const packageManager = getPkgManager(baseDir)\n\n if (deps.missing.some((dep) => dep.pkg === 'eslint')) {\n Log.error(\n `ESLint must be installed${\n lintDuringBuild ? ' in order to run during builds:' : ':'\n } ${bold(\n cyan(\n (packageManager === 'yarn'\n ? 'yarn add --dev'\n : packageManager === 'pnpm'\n ? 'pnpm install --save-dev'\n : 'npm install --save-dev') + ' eslint'\n )\n )}`\n )\n return null\n }\n\n const mod = await Promise.resolve(require(deps.resolved.get('eslint')!))\n\n // If V9 config was found, use flat config, or else use legacy.\n const useFlatConfig = eslintrcFile\n ? // eslintrcFile is absolute path\n path.basename(eslintrcFile).startsWith('eslint.config.')\n : false\n\n let ESLint\n // loadESLint is >= 8.57.0\n // PR https://github.com/eslint/eslint/pull/18098\n // Release https://github.com/eslint/eslint/releases/tag/v8.57.0\n if ('loadESLint' in mod) {\n // By default, configType is `flat`. If `useFlatConfig` is false, the return value is `LegacyESLint`.\n // https://github.com/eslint/eslint/blob/1def4cdfab1f067c5089df8b36242cdf912b0eb6/lib/types/index.d.ts#L1609-L1613\n ESLint = await mod.loadESLint({\n useFlatConfig,\n })\n } else {\n // eslint < 8.57.0, use legacy ESLint\n ESLint = mod.ESLint\n }\n\n let eslintVersion = ESLint?.version ?? mod.CLIEngine?.version\n\n if (!eslintVersion || semver.lt(eslintVersion, '7.0.0')) {\n return `${red(\n 'error'\n )} - Your project has an older version of ESLint installed${\n eslintVersion ? ' (' + eslintVersion + ')' : ''\n }. Please upgrade to ESLint version 7 or above`\n }\n\n let options: any = {\n useEslintrc: true,\n baseConfig: {},\n errorOnUnmatchedPattern: false,\n extensions: ['.js', '.jsx', '.ts', '.tsx'],\n cache: true,\n ...eslintOptions,\n }\n\n if (semver.gte(eslintVersion, '9.0.0') && useFlatConfig) {\n for (const option of [\n 'useEslintrc',\n 'extensions',\n 'ignorePath',\n 'reportUnusedDisableDirectives',\n 'resolvePluginsRelativeTo',\n 'rulePaths',\n 'inlineConfig',\n 'maxWarnings',\n ]) {\n if (option in options) {\n delete options[option]\n }\n }\n }\n\n let eslint = new ESLint(options)\n\n let nextEslintPluginIsEnabled = false\n const nextRulesEnabled = new Map<string, Severity>()\n\n for (const configFile of [eslintrcFile, pkgJsonPath]) {\n if (!configFile) continue\n\n const completeConfig: Config | undefined =\n await eslint.calculateConfigForFile(configFile)\n if (!completeConfig) continue\n\n const plugins = completeConfig.plugins\n\n const hasNextPlugin =\n // in ESLint < 9, `plugins` value is string[]\n Array.isArray(plugins)\n ? plugins.includes('@next/next')\n : // in ESLint >= 9, `plugins` value is Record<string, unknown>\n '@next/next' in plugins\n\n if (hasNextPlugin) {\n nextEslintPluginIsEnabled = true\n for (const [name, [severity]] of Object.entries(completeConfig.rules)) {\n if (!name.startsWith('@next/next/')) {\n continue\n }\n if (\n typeof severity === 'number' &&\n severity >= 0 &&\n severity < VALID_SEVERITY.length\n ) {\n nextRulesEnabled.set(name, VALID_SEVERITY[severity])\n } else if (\n typeof severity === 'string' &&\n isValidSeverity(severity)\n ) {\n nextRulesEnabled.set(name, severity)\n }\n }\n break\n }\n }\n\n const pagesDir = findPagesDir(baseDir).pagesDir\n const pagesDirRules = pagesDir ? ['@next/next/no-html-link-for-pages'] : []\n\n if (nextEslintPluginIsEnabled) {\n let updatedPagesDir = false\n\n for (const rule of pagesDirRules) {\n if (\n !options.baseConfig!.rules?.[rule] &&\n !options.baseConfig!.rules?.[\n rule.replace('@next/next', '@next/babel-plugin-next')\n ]\n ) {\n if (!options.baseConfig!.rules) {\n options.baseConfig!.rules = {}\n }\n options.baseConfig!.rules[rule] = [1, pagesDir]\n updatedPagesDir = true\n }\n }\n\n if (updatedPagesDir) {\n eslint = new ESLint(options)\n }\n } else {\n Log.warn('')\n Log.warn(\n 'The Next.js plugin was not detected in your ESLint configuration. See https://nextjs.org/docs/app/api-reference/config/eslint#migrating-existing-config'\n )\n }\n\n const lintStart = process.hrtime()\n\n let results = await eslint.lintFiles(lintDirs)\n let selectedFormatter = null\n\n if (options.fix) await ESLint.outputFixes(results)\n if (reportErrorsOnly) results = await ESLint.getErrorResults(results) // Only return errors if --quiet flag is used\n\n if (formatter) selectedFormatter = await eslint.loadFormatter(formatter)\n const formattedResult = await formatResults(\n baseDir,\n results,\n selectedFormatter?.format\n )\n const lintEnd = process.hrtime(lintStart)\n const totalWarnings = results.reduce(\n (sum: number, file: LintResult) => sum + file.warningCount,\n 0\n )\n\n if (outputFile) await writeOutputFile(outputFile, formattedResult.output)\n\n return {\n output: formattedResult.outputWithMessages,\n isError:\n ESLint.getErrorResults(results)?.length > 0 ||\n (maxWarnings >= 0 && totalWarnings > maxWarnings),\n eventInfo: {\n durationInSeconds: lintEnd[0],\n eslintVersion: eslintVersion,\n lintedFilesCount: results.length,\n lintFix: !!options.fix,\n nextEslintPluginVersion:\n nextEslintPluginIsEnabled && deps.resolved.has('eslint-config-next')\n ? require(\n path.join(\n path.dirname(deps.resolved.get('eslint-config-next')!),\n 'package.json'\n )\n ).version\n : null,\n nextEslintPluginErrorsCount: formattedResult.totalNextPluginErrorCount,\n nextEslintPluginWarningsCount:\n formattedResult.totalNextPluginWarningCount,\n nextRulesEnabled: Object.fromEntries(nextRulesEnabled),\n },\n }\n } catch (err) {\n if (lintDuringBuild) {\n Log.error(\n `ESLint: ${\n isError(err) && err.message ? err.message.replace(/\\n/g, ' ') : err\n }`\n )\n return null\n } else {\n throw getProperError(err)\n }\n }\n}\n\nexport async function runLintCheck(\n baseDir: string,\n lintDirs: string[],\n opts: {\n lintDuringBuild?: boolean\n eslintOptions?: any\n reportErrorsOnly?: boolean\n maxWarnings?: number\n formatter?: string | null\n outputFile?: string | null\n strict?: boolean\n }\n): ReturnType<typeof lint> {\n const {\n lintDuringBuild = false,\n eslintOptions = null,\n reportErrorsOnly = false,\n maxWarnings = -1,\n formatter = null,\n outputFile = null,\n strict = false,\n } = opts\n try {\n // Find user's .eslintrc file\n // See: https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats\n const eslintrcFile =\n (await findUp(\n [\n // eslint v9\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n // TS extensions require to install a separate package `jiti`.\n // https://eslint.org/docs/latest/use/configure/configuration-files#typescript-configuration-files\n 'eslint.config.ts',\n 'eslint.config.mts',\n 'eslint.config.cts',\n // eslint <= v8\n '.eslintrc.js',\n '.eslintrc.cjs',\n '.eslintrc.yaml',\n '.eslintrc.yml',\n '.eslintrc.json',\n '.eslintrc',\n ],\n {\n cwd: baseDir,\n }\n )) ?? null\n\n const pkgJsonPath = (await findUp('package.json', { cwd: baseDir })) ?? null\n let packageJsonConfig = null\n if (pkgJsonPath) {\n const pkgJsonContent = await fs.readFile(pkgJsonPath, {\n encoding: 'utf8',\n })\n packageJsonConfig = CommentJson.parse(pkgJsonContent)\n }\n\n const config = await hasEslintConfiguration(eslintrcFile, packageJsonConfig)\n let deps\n\n if (config.exists) {\n // Run if ESLint config exists\n return await lint(baseDir, lintDirs, eslintrcFile, pkgJsonPath, {\n lintDuringBuild,\n eslintOptions,\n reportErrorsOnly,\n maxWarnings,\n formatter,\n outputFile,\n })\n } else {\n // Display warning if no ESLint configuration is present inside\n // config file during \"next build\", no warning is shown when\n // no eslintrc file is present\n if (lintDuringBuild) {\n if (config.emptyPkgJsonConfig || config.emptyEslintrc) {\n Log.warn(\n `No ESLint configuration detected. Run ${bold(\n cyan('next lint')\n )} to begin setup`\n )\n }\n return null\n } else {\n // Ask user what config they would like to start with for first time \"next lint\" setup\n const { config: selectedConfig } = strict\n ? await getESLintStrictValue(baseDir)\n : await cliPrompt(baseDir)\n\n if (selectedConfig == null) {\n // Show a warning if no option is selected in prompt\n Log.warn(\n 'If you set up ESLint yourself, we recommend adding the Next.js ESLint plugin. See https://nextjs.org/docs/app/api-reference/config/eslint#migrating-existing-config'\n )\n return null\n } else {\n // Check if necessary deps installed, and install any that are missing\n deps = await hasNecessaryDependencies(baseDir, requiredPackages)\n if (deps.missing.length > 0) {\n deps.missing.forEach((dep) => {\n if (dep.pkg === 'eslint') {\n // pin to v9 to avoid breaking changes\n dep.pkg = 'eslint@^9'\n }\n })\n\n await installDependencies(baseDir, deps.missing, true)\n }\n\n // Write default ESLint config.\n // Check for /pages and src/pages is to make sure this happens in Next.js folder\n if (\n ['app', 'src/app', 'pages', 'src/pages'].some((dir) =>\n existsSync(path.join(baseDir, dir))\n )\n ) {\n await writeDefaultConfig(\n baseDir,\n config,\n selectedConfig,\n eslintrcFile,\n pkgJsonPath,\n packageJsonConfig\n )\n }\n }\n\n Log.ready(\n `ESLint has successfully been configured. Run ${bold(\n cyan('next lint')\n )} again to view warnings and errors.`\n )\n\n return null\n }\n }\n } catch (err) {\n throw err\n }\n}\n"],"names":["runLintCheck","VALID_SEVERITY","isValidSeverity","severity","includes","requiredPackages","file","pkg","exportsRestrict","cliPrompt","cwd","console","log","bold","cyan","cliSelect","Promise","resolve","require","default","value","values","getESLintPromptValues","valueRenderer","title","recommended","selected","name","underline","yellow","unselected","config","lint","baseDir","lintDirs","eslintrcFile","pkgJsonPath","lintDuringBuild","eslintOptions","reportErrorsOnly","maxWarnings","formatter","outputFile","mod","ESLint","deps","hasNecessaryDependencies","packageManager","getPkgManager","missing","some","dep","Log","error","resolved","get","useFlatConfig","path","basename","startsWith","loadESLint","eslintVersion","version","CLIEngine","semver","lt","red","options","useEslintrc","baseConfig","errorOnUnmatchedPattern","extensions","cache","gte","option","eslint","nextEslintPluginIsEnabled","nextRulesEnabled","Map","configFile","completeConfig","calculateConfigForFile","plugins","hasNextPlugin","Array","isArray","Object","entries","rules","length","set","pagesDir","findPagesDir","pagesDirRules","updatedPagesDir","rule","replace","warn","lintStart","process","hrtime","results","lintFiles","selectedFormatter","fix","outputFixes","getErrorResults","loadFormatter","formattedResult","formatResults","format","lintEnd","totalWarnings","reduce","sum","warningCount","writeOutputFile","output","outputWithMessages","isError","eventInfo","durationInSeconds","lintedFilesCount","lintFix","nextEslintPluginVersion","has","join","dirname","nextEslintPluginErrorsCount","totalNextPluginErrorCount","nextEslintPluginWarningsCount","totalNextPluginWarningCount","fromEntries","err","message","getProperError","opts","strict","findUp","packageJsonConfig","pkgJsonContent","fs","readFile","encoding","CommentJson","parse","hasEslintConfiguration","exists","emptyPkgJsonConfig","emptyEslintrc","selectedConfig","getESLintStrictValue","forEach","installDependencies","dir","existsSync","writeDefaultConfig","ready"],"mappings":"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","ignoreList":[0]}
|
1
|
+
{"version":3,"sources":["../../../src/lib/eslint/runLintCheck.ts"],"sourcesContent":["import { promises as fs, existsSync } from 'fs'\nimport { bold, cyan, red, underline, yellow } from '../picocolors'\nimport path from 'path'\n\nimport findUp from 'next/dist/compiled/find-up'\nimport semver from 'next/dist/compiled/semver'\nimport * as CommentJson from 'next/dist/compiled/comment-json'\n\nimport { formatResults } from './customFormatter'\nimport type { LintResult } from './customFormatter'\nimport { writeDefaultConfig } from './writeDefaultConfig'\nimport { hasEslintConfiguration } from './hasEslintConfiguration'\nimport { writeOutputFile } from './writeOutputFile'\n\nimport { findPagesDir } from '../find-pages-dir'\nimport { installDependencies } from '../install-dependencies'\nimport { hasNecessaryDependencies } from '../has-necessary-dependencies'\n\nimport * as Log from '../../build/output/log'\nimport type { EventLintCheckCompleted } from '../../telemetry/events/build'\nimport isError, { getProperError } from '../is-error'\nimport { getPkgManager } from '../helpers/get-pkg-manager'\nimport {\n getESLintStrictValue,\n getESLintPromptValues,\n} from './getESLintPromptValues'\n\ntype Config = {\n plugins: string[]\n rules: { [key: string]: Array<number | string> }\n}\n\n// 0 is off, 1 is warn, 2 is error. See https://eslint.org/docs/user-guide/configuring/rules#configuring-rules\nconst VALID_SEVERITY = ['off', 'warn', 'error'] as const\ntype Severity = (typeof VALID_SEVERITY)[number]\n\nfunction isValidSeverity(severity: string): severity is Severity {\n return VALID_SEVERITY.includes(severity as Severity)\n}\n\nconst requiredPackages = [\n { file: 'eslint', pkg: 'eslint', exportsRestrict: false },\n {\n file: 'eslint-config-next',\n pkg: 'eslint-config-next',\n exportsRestrict: false,\n },\n]\n\nasync function cliPrompt(cwd: string): Promise<{ config?: any }> {\n console.log(\n bold(\n `${cyan(\n '?'\n )} How would you like to configure ESLint? https://nextjs.org/docs/app/api-reference/config/eslint`\n )\n )\n\n try {\n const cliSelect = (\n await Promise.resolve(\n require('next/dist/compiled/cli-select') as typeof import('next/dist/compiled/cli-select')\n )\n ).default\n const { value } = await cliSelect({\n values: await getESLintPromptValues(cwd),\n valueRenderer: (\n {\n title,\n recommended,\n }: { title: string; recommended?: boolean; config: any },\n selected: boolean\n ) => {\n const name = selected ? bold(underline(cyan(title))) : title\n return name + (recommended ? bold(yellow(' (recommended)')) : '')\n },\n selected: cyan('❯ '),\n unselected: ' ',\n })\n\n return { config: value?.config ?? null }\n } catch {\n return { config: null }\n }\n}\n\nasync function lint(\n baseDir: string,\n lintDirs: string[],\n eslintrcFile: string | null,\n pkgJsonPath: string | null,\n {\n lintDuringBuild = false,\n eslintOptions = null,\n reportErrorsOnly = false,\n maxWarnings = -1,\n formatter = null,\n outputFile = null,\n }: {\n lintDuringBuild: boolean\n eslintOptions: any\n reportErrorsOnly: boolean\n maxWarnings: number\n formatter: string | null\n outputFile: string | null\n }\n): Promise<\n | string\n | null\n | {\n output: string | null\n isError: boolean\n eventInfo: EventLintCheckCompleted\n }\n> {\n try {\n // Load ESLint after we're sure it exists:\n const deps = hasNecessaryDependencies(baseDir, requiredPackages)\n const packageManager = getPkgManager(baseDir)\n\n if (deps.missing.some((dep) => dep.pkg === 'eslint')) {\n Log.error(\n `ESLint must be installed${\n lintDuringBuild ? ' in order to run during builds:' : ':'\n } ${bold(\n cyan(\n (packageManager === 'yarn'\n ? 'yarn add --dev'\n : packageManager === 'pnpm'\n ? 'pnpm install --save-dev'\n : 'npm install --save-dev') + ' eslint'\n )\n )}`\n )\n return null\n }\n\n const mod = await Promise.resolve(require(deps.resolved.get('eslint')!))\n\n // If V9 config was found, use flat config, or else use legacy.\n const useFlatConfig = eslintrcFile\n ? // eslintrcFile is absolute path\n path.basename(eslintrcFile).startsWith('eslint.config.')\n : false\n\n let ESLint\n // loadESLint is >= 8.57.0\n // PR https://github.com/eslint/eslint/pull/18098\n // Release https://github.com/eslint/eslint/releases/tag/v8.57.0\n if ('loadESLint' in mod) {\n // By default, configType is `flat`. If `useFlatConfig` is false, the return value is `LegacyESLint`.\n // https://github.com/eslint/eslint/blob/1def4cdfab1f067c5089df8b36242cdf912b0eb6/lib/types/index.d.ts#L1609-L1613\n ESLint = await mod.loadESLint({\n useFlatConfig,\n })\n } else {\n // eslint < 8.57.0, use legacy ESLint\n ESLint = mod.ESLint\n }\n\n let eslintVersion = ESLint?.version ?? mod.CLIEngine?.version\n\n if (!eslintVersion || semver.lt(eslintVersion, '7.0.0')) {\n return `${red(\n 'error'\n )} - Your project has an older version of ESLint installed${\n eslintVersion ? ' (' + eslintVersion + ')' : ''\n }. Please upgrade to ESLint version 7 or above`\n }\n\n let options: any = {\n useEslintrc: true,\n baseConfig: {},\n errorOnUnmatchedPattern: false,\n extensions: ['.js', '.jsx', '.ts', '.tsx'],\n cache: true,\n ...eslintOptions,\n }\n\n if (semver.gte(eslintVersion, '9.0.0') && useFlatConfig) {\n for (const option of [\n 'useEslintrc',\n 'extensions',\n 'ignorePath',\n 'reportUnusedDisableDirectives',\n 'resolvePluginsRelativeTo',\n 'rulePaths',\n 'inlineConfig',\n 'maxWarnings',\n ]) {\n if (option in options) {\n delete options[option]\n }\n }\n }\n\n let eslint = new ESLint(options)\n\n let nextEslintPluginIsEnabled = false\n const nextRulesEnabled = new Map<string, Severity>()\n\n for (const configFile of [eslintrcFile, pkgJsonPath]) {\n if (!configFile) continue\n\n const completeConfig: Config | undefined =\n await eslint.calculateConfigForFile(configFile)\n if (!completeConfig) continue\n\n const plugins = completeConfig.plugins\n\n const hasNextPlugin =\n // in ESLint < 9, `plugins` value is string[]\n Array.isArray(plugins)\n ? plugins.includes('@next/next')\n : // in ESLint >= 9, `plugins` value is Record<string, unknown>\n '@next/next' in plugins\n\n if (hasNextPlugin) {\n nextEslintPluginIsEnabled = true\n for (const [name, [severity]] of Object.entries(completeConfig.rules)) {\n if (!name.startsWith('@next/next/')) {\n continue\n }\n if (\n typeof severity === 'number' &&\n severity >= 0 &&\n severity < VALID_SEVERITY.length\n ) {\n nextRulesEnabled.set(name, VALID_SEVERITY[severity])\n } else if (\n typeof severity === 'string' &&\n isValidSeverity(severity)\n ) {\n nextRulesEnabled.set(name, severity)\n }\n }\n break\n }\n }\n\n const pagesDir = findPagesDir(baseDir).pagesDir\n const pagesDirRules = pagesDir ? ['@next/next/no-html-link-for-pages'] : []\n\n if (nextEslintPluginIsEnabled) {\n let updatedPagesDir = false\n\n for (const rule of pagesDirRules) {\n if (\n !options.baseConfig!.rules?.[rule] &&\n !options.baseConfig!.rules?.[\n rule.replace('@next/next', '@next/babel-plugin-next')\n ]\n ) {\n if (!options.baseConfig!.rules) {\n options.baseConfig!.rules = {}\n }\n options.baseConfig!.rules[rule] = [1, pagesDir]\n updatedPagesDir = true\n }\n }\n\n if (updatedPagesDir) {\n eslint = new ESLint(options)\n }\n } else {\n Log.warn('')\n Log.warn(\n 'The Next.js plugin was not detected in your ESLint configuration. See https://nextjs.org/docs/app/api-reference/config/eslint#migrating-existing-config'\n )\n }\n\n const lintStart = process.hrtime()\n\n let results = await eslint.lintFiles(lintDirs)\n let selectedFormatter = null\n\n if (options.fix) await ESLint.outputFixes(results)\n if (reportErrorsOnly) results = await ESLint.getErrorResults(results) // Only return errors if --quiet flag is used\n\n if (formatter) selectedFormatter = await eslint.loadFormatter(formatter)\n const formattedResult = await formatResults(\n baseDir,\n results,\n selectedFormatter?.format\n )\n const lintEnd = process.hrtime(lintStart)\n const totalWarnings = results.reduce(\n (sum: number, file: LintResult) => sum + file.warningCount,\n 0\n )\n\n if (outputFile) await writeOutputFile(outputFile, formattedResult.output)\n\n return {\n output: formattedResult.outputWithMessages,\n isError:\n ESLint.getErrorResults(results)?.length > 0 ||\n (maxWarnings >= 0 && totalWarnings > maxWarnings),\n eventInfo: {\n durationInSeconds: lintEnd[0],\n eslintVersion: eslintVersion,\n lintedFilesCount: results.length,\n lintFix: !!options.fix,\n nextEslintPluginVersion:\n nextEslintPluginIsEnabled && deps.resolved.has('eslint-config-next')\n ? require(\n path.join(\n path.dirname(deps.resolved.get('eslint-config-next')!),\n 'package.json'\n )\n ).version\n : null,\n nextEslintPluginErrorsCount: formattedResult.totalNextPluginErrorCount,\n nextEslintPluginWarningsCount:\n formattedResult.totalNextPluginWarningCount,\n nextRulesEnabled: Object.fromEntries(nextRulesEnabled),\n },\n }\n } catch (err) {\n if (lintDuringBuild) {\n Log.error(\n `ESLint: ${\n isError(err) && err.message ? err.message.replace(/\\n/g, ' ') : err\n }`\n )\n return null\n } else {\n throw getProperError(err)\n }\n }\n}\n\nexport async function runLintCheck(\n baseDir: string,\n lintDirs: string[],\n opts: {\n lintDuringBuild?: boolean\n eslintOptions?: any\n reportErrorsOnly?: boolean\n maxWarnings?: number\n formatter?: string | null\n outputFile?: string | null\n strict?: boolean\n }\n): ReturnType<typeof lint> {\n const {\n lintDuringBuild = false,\n eslintOptions = null,\n reportErrorsOnly = false,\n maxWarnings = -1,\n formatter = null,\n outputFile = null,\n strict = false,\n } = opts\n try {\n // Find user's .eslintrc file\n // See: https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats\n const eslintrcFile =\n (await findUp(\n [\n // eslint v9\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n // TS extensions require to install a separate package `jiti`.\n // https://eslint.org/docs/latest/use/configure/configuration-files#typescript-configuration-files\n 'eslint.config.ts',\n 'eslint.config.mts',\n 'eslint.config.cts',\n // eslint <= v8\n '.eslintrc.js',\n '.eslintrc.cjs',\n '.eslintrc.yaml',\n '.eslintrc.yml',\n '.eslintrc.json',\n '.eslintrc',\n ],\n {\n cwd: baseDir,\n }\n )) ?? null\n\n const pkgJsonPath = (await findUp('package.json', { cwd: baseDir })) ?? null\n let packageJsonConfig = null\n if (pkgJsonPath) {\n const pkgJsonContent = await fs.readFile(pkgJsonPath, {\n encoding: 'utf8',\n })\n packageJsonConfig = CommentJson.parse(pkgJsonContent)\n }\n\n const config = await hasEslintConfiguration(eslintrcFile, packageJsonConfig)\n let deps\n\n if (config.exists) {\n // Run if ESLint config exists\n return await lint(baseDir, lintDirs, eslintrcFile, pkgJsonPath, {\n lintDuringBuild,\n eslintOptions,\n reportErrorsOnly,\n maxWarnings,\n formatter,\n outputFile,\n })\n } else {\n // Display warning if no ESLint configuration is present inside\n // config file during \"next build\", no warning is shown when\n // no eslintrc file is present\n if (lintDuringBuild) {\n if (config.emptyPkgJsonConfig || config.emptyEslintrc) {\n Log.warn(\n `No ESLint configuration detected. Run ${bold(\n cyan('next lint')\n )} to begin setup`\n )\n }\n return null\n } else {\n // Ask user what config they would like to start with for first time \"next lint\" setup\n const { config: selectedConfig } = strict\n ? await getESLintStrictValue(baseDir)\n : await cliPrompt(baseDir)\n\n if (selectedConfig == null) {\n // Show a warning if no option is selected in prompt\n Log.warn(\n 'If you set up ESLint yourself, we recommend adding the Next.js ESLint plugin. See https://nextjs.org/docs/app/api-reference/config/eslint#migrating-existing-config'\n )\n return null\n } else {\n // Check if necessary deps installed, and install any that are missing\n deps = await hasNecessaryDependencies(baseDir, requiredPackages)\n if (deps.missing.length > 0) {\n deps.missing.forEach((dep) => {\n if (dep.pkg === 'eslint') {\n // pin to v9 to avoid breaking changes\n dep.pkg = 'eslint@^9'\n }\n })\n\n await installDependencies(baseDir, deps.missing, true)\n }\n\n // Write default ESLint config.\n // Check for /pages and src/pages is to make sure this happens in Next.js folder\n if (\n ['app', 'src/app', 'pages', 'src/pages'].some((dir) =>\n existsSync(path.join(baseDir, dir))\n )\n ) {\n await writeDefaultConfig(\n baseDir,\n config,\n selectedConfig,\n eslintrcFile,\n pkgJsonPath,\n packageJsonConfig\n )\n }\n }\n\n Log.ready(\n `ESLint has successfully been configured. Run ${bold(\n cyan('next lint')\n )} again to view warnings and errors.`\n )\n\n return null\n }\n }\n } catch (err) {\n throw err\n }\n}\n"],"names":["runLintCheck","VALID_SEVERITY","isValidSeverity","severity","includes","requiredPackages","file","pkg","exportsRestrict","cliPrompt","cwd","console","log","bold","cyan","cliSelect","Promise","resolve","require","default","value","values","getESLintPromptValues","valueRenderer","title","recommended","selected","name","underline","yellow","unselected","config","lint","baseDir","lintDirs","eslintrcFile","pkgJsonPath","lintDuringBuild","eslintOptions","reportErrorsOnly","maxWarnings","formatter","outputFile","mod","ESLint","deps","hasNecessaryDependencies","packageManager","getPkgManager","missing","some","dep","Log","error","resolved","get","useFlatConfig","path","basename","startsWith","loadESLint","eslintVersion","version","CLIEngine","semver","lt","red","options","useEslintrc","baseConfig","errorOnUnmatchedPattern","extensions","cache","gte","option","eslint","nextEslintPluginIsEnabled","nextRulesEnabled","Map","configFile","completeConfig","calculateConfigForFile","plugins","hasNextPlugin","Array","isArray","Object","entries","rules","length","set","pagesDir","findPagesDir","pagesDirRules","updatedPagesDir","rule","replace","warn","lintStart","process","hrtime","results","lintFiles","selectedFormatter","fix","outputFixes","getErrorResults","loadFormatter","formattedResult","formatResults","format","lintEnd","totalWarnings","reduce","sum","warningCount","writeOutputFile","output","outputWithMessages","isError","eventInfo","durationInSeconds","lintedFilesCount","lintFix","nextEslintPluginVersion","has","join","dirname","nextEslintPluginErrorsCount","totalNextPluginErrorCount","nextEslintPluginWarningsCount","totalNextPluginWarningCount","fromEntries","err","message","getProperError","opts","strict","findUp","packageJsonConfig","pkgJsonContent","fs","readFile","encoding","CommentJson","parse","hasEslintConfiguration","exists","emptyPkgJsonConfig","emptyEslintrc","selectedConfig","getESLintStrictValue","forEach","installDependencies","dir","existsSync","writeDefaultConfig","ready"],"mappings":"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","ignoreList":[0]}
|
@@ -23,4 +23,4 @@ export type NecessaryDependencies = {
|
|
23
23
|
resolved: Map<string, string>;
|
24
24
|
missing: MissingDependency[];
|
25
25
|
};
|
26
|
-
export declare function hasNecessaryDependencies(baseDir: string, requiredPackages: MissingDependency[]):
|
26
|
+
export declare function hasNecessaryDependencies(baseDir: string, requiredPackages: MissingDependency[]): NecessaryDependencies;
|
@@ -11,12 +11,12 @@ Object.defineProperty(exports, "hasNecessaryDependencies", {
|
|
11
11
|
const _fs = require("fs");
|
12
12
|
const _resolvefrom = require("./resolve-from");
|
13
13
|
const _path = require("path");
|
14
|
-
|
14
|
+
function hasNecessaryDependencies(baseDir, requiredPackages) {
|
15
15
|
let resolutions = new Map();
|
16
16
|
const missingPackages = [];
|
17
|
-
|
17
|
+
for (const p of requiredPackages){
|
18
18
|
try {
|
19
|
-
const pkgPath =
|
19
|
+
const pkgPath = (0, _fs.realpathSync)((0, _resolvefrom.resolveFrom)(baseDir, `${p.pkg}/package.json`));
|
20
20
|
const pkgDir = (0, _path.dirname)(pkgPath);
|
21
21
|
if (p.exportsRestrict) {
|
22
22
|
const fileNameToVerify = (0, _path.relative)(p.pkg, p.file);
|
@@ -25,7 +25,8 @@ async function hasNecessaryDependencies(baseDir, requiredPackages) {
|
|
25
25
|
if ((0, _fs.existsSync)(fileToVerify)) {
|
26
26
|
resolutions.set(p.pkg, fileToVerify);
|
27
27
|
} else {
|
28
|
-
|
28
|
+
missingPackages.push(p);
|
29
|
+
continue;
|
29
30
|
}
|
30
31
|
} else {
|
31
32
|
resolutions.set(p.pkg, pkgPath);
|
@@ -34,9 +35,10 @@ async function hasNecessaryDependencies(baseDir, requiredPackages) {
|
|
34
35
|
resolutions.set(p.pkg, (0, _resolvefrom.resolveFrom)(baseDir, p.file));
|
35
36
|
}
|
36
37
|
} catch (_) {
|
37
|
-
|
38
|
+
missingPackages.push(p);
|
39
|
+
continue;
|
38
40
|
}
|
39
|
-
}
|
41
|
+
}
|
40
42
|
return {
|
41
43
|
resolved: resolutions,
|
42
44
|
missing: missingPackages
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/has-necessary-dependencies.ts"],"sourcesContent":["import { existsSync,
|
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 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":["hasNecessaryDependencies","baseDir","requiredPackages","resolutions","Map","missingPackages","p","pkgPath","realpathSync","resolveFrom","pkg","pkgDir","dirname","exportsRestrict","fileNameToVerify","relative","file","fileToVerify","join","existsSync","set","push","_","resolved","missing"],"mappings":";;;;+BA+BgBA;;;eAAAA;;;oBA/ByB;6BACb;sBACY;AA6BjC,SAASA,yBACdC,OAAe,EACfC,gBAAqC;IAErC,IAAIC,cAAc,IAAIC;IACtB,MAAMC,kBAAuC,EAAE;IAE/C,KAAK,MAAMC,KAAKJ,iBAAkB;QAChC,IAAI;YACF,MAAMK,UAAUC,IAAAA,gBAAY,EAC1BC,IAAAA,wBAAW,EAACR,SAAS,GAAGK,EAAEI,GAAG,CAAC,aAAa,CAAC;YAE9C,MAAMC,SAASC,IAAAA,aAAO,EAACL;YAEvB,IAAID,EAAEO,eAAe,EAAE;gBACrB,MAAMC,mBAAmBC,IAAAA,cAAQ,EAACT,EAAEI,GAAG,EAAEJ,EAAEU,IAAI;gBAC/C,IAAIF,kBAAkB;oBACpB,MAAMG,eAAeC,IAAAA,UAAI,EAACP,QAAQG;oBAClC,IAAIK,IAAAA,cAAU,EAACF,eAAe;wBAC5Bd,YAAYiB,GAAG,CAACd,EAAEI,GAAG,EAAEO;oBACzB,OAAO;wBACLZ,gBAAgBgB,IAAI,CAACf;wBACrB;oBACF;gBACF,OAAO;oBACLH,YAAYiB,GAAG,CAACd,EAAEI,GAAG,EAAEH;gBACzB;YACF,OAAO;gBACLJ,YAAYiB,GAAG,CAACd,EAAEI,GAAG,EAAED,IAAAA,wBAAW,EAACR,SAASK,EAAEU,IAAI;YACpD;QACF,EAAE,OAAOM,GAAG;YACVjB,gBAAgBgB,IAAI,CAACf;YACrB;QACF;IACF;IAEA,OAAO;QACLiB,UAAUpB;QACVqB,SAASnB;IACX;AACF","ignoreList":[0]}
|
@@ -85,7 +85,7 @@ async function copyPartytownStaticFiles(deps, staticDir) {
|
|
85
85
|
async function verifyPartytownSetup(dir, targetDir) {
|
86
86
|
try {
|
87
87
|
var _partytownDeps_missing;
|
88
|
-
const partytownDeps =
|
88
|
+
const partytownDeps = (0, _hasnecessarydependencies.hasNecessaryDependencies)(dir, [
|
89
89
|
{
|
90
90
|
file: '@builder.io/partytown',
|
91
91
|
pkg: '@builder.io/partytown',
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/verify-partytown-setup.ts"],"sourcesContent":["import { promises } from 'fs'\nimport { bold, cyan, red } from './picocolors'\n\nimport path from 'path'\nimport { hasNecessaryDependencies } from './has-necessary-dependencies'\nimport type { NecessaryDependencies } from './has-necessary-dependencies'\nimport { fileExists, FileType } from './file-exists'\nimport { FatalError } from './fatal-error'\nimport * as Log from '../build/output/log'\nimport { getPkgManager } from './helpers/get-pkg-manager'\n\nasync function missingDependencyError(dir: string) {\n const packageManager = getPkgManager(dir)\n\n throw new FatalError(\n bold(\n red(\n \"It looks like you're trying to use Partytown with next/script but do not have the required package(s) installed.\"\n )\n ) +\n '\\n\\n' +\n bold(`Please install Partytown 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') + ' @builder.io/partytown'\n )\n )}` +\n '\\n\\n' +\n bold(\n `If you are not trying to use Partytown, please disable the experimental ${cyan(\n '\"nextScriptWorkers\"'\n )} flag in next.config.js.`\n ) +\n '\\n'\n )\n}\n\nasync function copyPartytownStaticFiles(\n deps: NecessaryDependencies,\n staticDir: string\n) {\n const partytownLibDir = path.join(staticDir, '~partytown')\n const hasPartytownLibDir = await fileExists(\n partytownLibDir,\n FileType.Directory\n )\n\n if (hasPartytownLibDir) {\n await promises.rm(partytownLibDir, { recursive: true, force: true })\n }\n\n const { copyLibFiles } = await Promise.resolve(\n require(path.join(deps.resolved.get('@builder.io/partytown')!, '../utils'))\n )\n\n await copyLibFiles(partytownLibDir)\n}\n\nexport async function verifyPartytownSetup(\n dir: string,\n targetDir: string\n): Promise<void> {\n try {\n const partytownDeps: NecessaryDependencies =
|
1
|
+
{"version":3,"sources":["../../src/lib/verify-partytown-setup.ts"],"sourcesContent":["import { promises } from 'fs'\nimport { bold, cyan, red } from './picocolors'\n\nimport path from 'path'\nimport { hasNecessaryDependencies } from './has-necessary-dependencies'\nimport type { NecessaryDependencies } from './has-necessary-dependencies'\nimport { fileExists, FileType } from './file-exists'\nimport { FatalError } from './fatal-error'\nimport * as Log from '../build/output/log'\nimport { getPkgManager } from './helpers/get-pkg-manager'\n\nasync function missingDependencyError(dir: string) {\n const packageManager = getPkgManager(dir)\n\n throw new FatalError(\n bold(\n red(\n \"It looks like you're trying to use Partytown with next/script but do not have the required package(s) installed.\"\n )\n ) +\n '\\n\\n' +\n bold(`Please install Partytown 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') + ' @builder.io/partytown'\n )\n )}` +\n '\\n\\n' +\n bold(\n `If you are not trying to use Partytown, please disable the experimental ${cyan(\n '\"nextScriptWorkers\"'\n )} flag in next.config.js.`\n ) +\n '\\n'\n )\n}\n\nasync function copyPartytownStaticFiles(\n deps: NecessaryDependencies,\n staticDir: string\n) {\n const partytownLibDir = path.join(staticDir, '~partytown')\n const hasPartytownLibDir = await fileExists(\n partytownLibDir,\n FileType.Directory\n )\n\n if (hasPartytownLibDir) {\n await promises.rm(partytownLibDir, { recursive: true, force: true })\n }\n\n const { copyLibFiles } = await Promise.resolve(\n require(path.join(deps.resolved.get('@builder.io/partytown')!, '../utils'))\n )\n\n await copyLibFiles(partytownLibDir)\n}\n\nexport async function verifyPartytownSetup(\n dir: string,\n targetDir: string\n): Promise<void> {\n try {\n const partytownDeps: NecessaryDependencies = hasNecessaryDependencies(dir, [\n {\n file: '@builder.io/partytown',\n pkg: '@builder.io/partytown',\n exportsRestrict: false,\n },\n ])\n\n if (partytownDeps.missing?.length > 0) {\n await missingDependencyError(dir)\n } else {\n try {\n await copyPartytownStaticFiles(partytownDeps, targetDir)\n } catch (err) {\n Log.warn(\n `Partytown library files could not be copied to the static directory. Please ensure that ${bold(\n cyan('@builder.io/partytown')\n )} is installed as a dependency.`\n )\n }\n }\n } catch (err) {\n // Don't show a stack trace when there is an error due to missing dependencies\n if (err instanceof FatalError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n"],"names":["verifyPartytownSetup","missingDependencyError","dir","packageManager","getPkgManager","FatalError","bold","red","cyan","copyPartytownStaticFiles","deps","staticDir","partytownLibDir","path","join","hasPartytownLibDir","fileExists","FileType","Directory","promises","rm","recursive","force","copyLibFiles","Promise","resolve","require","resolved","get","targetDir","partytownDeps","hasNecessaryDependencies","file","pkg","exportsRestrict","missing","length","err","Log","warn","console","error","message","process","exit"],"mappings":";;;;+BA+DsBA;;;eAAAA;;;oBA/DG;4BACO;6DAEf;0CACwB;4BAEJ;4BACV;6DACN;+BACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE9B,eAAeC,uBAAuBC,GAAW;IAC/C,MAAMC,iBAAiBC,IAAAA,4BAAa,EAACF;IAErC,MAAM,qBAyBL,CAzBK,IAAIG,sBAAU,CAClBC,IAAAA,gBAAI,EACFC,IAAAA,eAAG,EACD,uHAGF,SACAD,IAAAA,gBAAI,EAAC,CAAC,oCAAoC,CAAC,IAC3C,SACA,CAAC,EAAE,EAAEA,IAAAA,gBAAI,EACPE,IAAAA,gBAAI,EACF,AAACL,CAAAA,mBAAmB,SAChB,mBACAA,mBAAmB,SACjB,4BACA,wBAAuB,IAAK,4BAEnC,GACH,SACAG,IAAAA,gBAAI,EACF,CAAC,wEAAwE,EAAEE,IAAAA,gBAAI,EAC7E,uBACA,wBAAwB,CAAC,IAE7B,OAxBE,qBAAA;eAAA;oBAAA;sBAAA;IAyBN;AACF;AAEA,eAAeC,yBACbC,IAA2B,EAC3BC,SAAiB;IAEjB,MAAMC,kBAAkBC,aAAI,CAACC,IAAI,CAACH,WAAW;IAC7C,MAAMI,qBAAqB,MAAMC,IAAAA,sBAAU,EACzCJ,iBACAK,oBAAQ,CAACC,SAAS;IAGpB,IAAIH,oBAAoB;QACtB,MAAMI,YAAQ,CAACC,EAAE,CAACR,iBAAiB;YAAES,WAAW;YAAMC,OAAO;QAAK;IACpE;IAEA,MAAM,EAAEC,YAAY,EAAE,GAAG,MAAMC,QAAQC,OAAO,CAC5CC,QAAQb,aAAI,CAACC,IAAI,CAACJ,KAAKiB,QAAQ,CAACC,GAAG,CAAC,0BAA2B;IAGjE,MAAML,aAAaX;AACrB;AAEO,eAAeZ,qBACpBE,GAAW,EACX2B,SAAiB;IAEjB,IAAI;YASEC;QARJ,MAAMA,gBAAuCC,IAAAA,kDAAwB,EAAC7B,KAAK;YACzE;gBACE8B,MAAM;gBACNC,KAAK;gBACLC,iBAAiB;YACnB;SACD;QAED,IAAIJ,EAAAA,yBAAAA,cAAcK,OAAO,qBAArBL,uBAAuBM,MAAM,IAAG,GAAG;YACrC,MAAMnC,uBAAuBC;QAC/B,OAAO;YACL,IAAI;gBACF,MAAMO,yBAAyBqB,eAAeD;YAChD,EAAE,OAAOQ,KAAK;gBACZC,KAAIC,IAAI,CACN,CAAC,wFAAwF,EAAEjC,IAAAA,gBAAI,EAC7FE,IAAAA,gBAAI,EAAC,0BACL,8BAA8B,CAAC;YAErC;QACF;IACF,EAAE,OAAO6B,KAAK;QACZ,8EAA8E;QAC9E,IAAIA,eAAehC,sBAAU,EAAE;YAC7BmC,QAAQC,KAAK,CAACJ,IAAIK,OAAO;YACzBC,QAAQC,IAAI,CAAC;QACf;QACA,MAAMP;IACR;AACF","ignoreList":[0]}
|
@@ -96,7 +96,7 @@ async function verifyTypeScriptSetup({ dir, distDir, cacheDir, intentDirs, tscon
|
|
96
96
|
};
|
97
97
|
}
|
98
98
|
// Ensure TypeScript and necessary `@types/*` are installed:
|
99
|
-
let deps =
|
99
|
+
let deps = (0, _hasnecessarydependencies.hasNecessaryDependencies)(dir, requiredPackages);
|
100
100
|
if (((_deps_missing = deps.missing) == null ? void 0 : _deps_missing.length) > 0) {
|
101
101
|
if (_ciinfo.isCI) {
|
102
102
|
// we don't attempt auto install in CI to avoid side-effects
|
@@ -110,7 +110,7 @@ async function verifyTypeScriptSetup({ dir, distDir, cacheDir, intentDirs, tscon
|
|
110
110
|
}
|
111
111
|
throw err;
|
112
112
|
});
|
113
|
-
deps =
|
113
|
+
deps = (0, _hasnecessarydependencies.hasNecessaryDependencies)(dir, requiredPackages);
|
114
114
|
}
|
115
115
|
// Load TypeScript after we're sure it exists:
|
116
116
|
const tsPath = deps.resolved.get('typescript');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/lib/verify-typescript-setup.ts"],"sourcesContent":["import { bold, cyan, red, yellow } from './picocolors'\nimport path 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 intentDirs,\n tsconfigPath,\n typeCheckPreflight,\n disableStaticImages,\n hasAppDir,\n hasPagesDir,\n}: {\n dir: string\n distDir: string\n cacheDir?: string\n tsconfigPath: string | undefined\n intentDirs: string[]\n typeCheckPreflight: boolean\n disableStaticImages: boolean\n hasAppDir: boolean\n hasPagesDir: boolean\n}): Promise<{ result?: TypeCheckResult; version: string | null }> {\n const tsConfigFileName = tsconfigPath || 'tsconfig.json'\n const resolvedTsConfigPath = path.join(dir, tsConfigFileName)\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 =
|
1
|
+
{"version":3,"sources":["../../src/lib/verify-typescript-setup.ts"],"sourcesContent":["import { bold, cyan, red, yellow } from './picocolors'\nimport path 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 intentDirs,\n tsconfigPath,\n typeCheckPreflight,\n disableStaticImages,\n hasAppDir,\n hasPagesDir,\n}: {\n dir: string\n distDir: string\n cacheDir?: string\n tsconfigPath: string | undefined\n intentDirs: string[]\n typeCheckPreflight: boolean\n disableStaticImages: boolean\n hasAppDir: boolean\n hasPagesDir: boolean\n}): Promise<{ result?: TypeCheckResult; version: string | null }> {\n const tsConfigFileName = tsconfigPath || 'tsconfig.json'\n const resolvedTsConfigPath = path.join(dir, tsConfigFileName)\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 tsPath = deps.resolved.get('typescript')!\n const ts = (await Promise.resolve(\n require(tsPath)\n )) as typeof import('typescript')\n\n if (semver.lt(ts.version, '4.5.2')) {\n log.warn(\n `Minimum recommended TypeScript version is v4.5.2, older versions can potentially be incompatible with Next.js. Detected: ${ts.version}`\n )\n }\n\n // Reconfigure (or create) the user's `tsconfig.json` for them:\n await writeConfigurationDefaults(\n ts,\n resolvedTsConfigPath,\n intent.firstTimeSetup,\n hasAppDir,\n distDir,\n hasPagesDir\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 })\n\n let result\n if (typeCheckPreflight) {\n const { runTypeCheck } =\n require('./typescript/runTypeCheck') as typeof import('./typescript/runTypeCheck')\n\n // Verify the project passes type-checking before we go to webpack phase:\n result = await runTypeCheck(\n ts,\n dir,\n distDir,\n resolvedTsConfigPath,\n cacheDir,\n hasAppDir\n )\n }\n return { result, version: ts.version }\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","intentDirs","tsconfigPath","typeCheckPreflight","disableStaticImages","hasAppDir","hasPagesDir","tsConfigFileName","resolvedTsConfigPath","path","join","deps","intent","getTypeScriptIntent","version","hasNecessaryDependencies","missing","length","isCI","missingDepsError","console","log","bold","yellow","cyan","installDependencies","catch","err","error","command","tsPath","resolved","get","ts","Promise","resolve","require","semver","lt","warn","writeConfigurationDefaults","firstTimeSetup","writeAppTypeDeclarations","baseDir","imageImportsEnabled","result","runTypeCheck","CompileError","red","message","process","exit","env","IS_NEXT_WORKER","Error"],"mappings":"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","ignoreList":[0]}
|
@@ -710,8 +710,6 @@ export interface ExperimentalConfig {
|
|
710
710
|
/**
|
711
711
|
* When enabled, in dev mode, Next.js will send React's debug info through the
|
712
712
|
* WebSocket connection, instead of including it in the main RSC payload.
|
713
|
-
*
|
714
|
-
* @default true
|
715
713
|
*/
|
716
714
|
reactDebugChannel?: boolean;
|
717
715
|
/**
|
@@ -1335,7 +1333,7 @@ export declare const defaultConfig: Readonly<{
|
|
1335
1333
|
};
|
1336
1334
|
allowDevelopmentBuild: undefined;
|
1337
1335
|
reactCompiler: undefined;
|
1338
|
-
reactDebugChannel:
|
1336
|
+
reactDebugChannel: false;
|
1339
1337
|
staticGenerationRetryCount: undefined;
|
1340
1338
|
serverComponentsHmrCache: true;
|
1341
1339
|
staticGenerationMaxConcurrency: number;
|
@@ -206,7 +206,7 @@ const defaultConfig = Object.freeze({
|
|
206
206
|
},
|
207
207
|
allowDevelopmentBuild: undefined,
|
208
208
|
reactCompiler: undefined,
|
209
|
-
reactDebugChannel:
|
209
|
+
reactDebugChannel: false,
|
210
210
|
staticGenerationRetryCount: undefined,
|
211
211
|
serverComponentsHmrCache: true,
|
212
212
|
staticGenerationMaxConcurrency: 8,
|