123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- #!/usr/bin/env node
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.nextLint = void 0;
- var _fs = require("fs");
- var _indexJs = _interopRequireDefault(require("next/dist/compiled/arg/index.js"));
- var _path = require("path");
- var _chalk = _interopRequireDefault(require("next/dist/compiled/chalk"));
- var _constants = require("../lib/constants");
- var _runLintCheck = require("../lib/eslint/runLintCheck");
- var _utils = require("../server/lib/utils");
- var _storage = require("../telemetry/storage");
- var _config = _interopRequireDefault(require("../server/config"));
- var _constants1 = require("../shared/lib/constants");
- var _events = require("../telemetry/events");
- var _compileError = require("../lib/compile-error");
- var _isError = _interopRequireDefault(require("../lib/is-error"));
- var _getProjectDir = require("../lib/get-project-dir");
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- var ref, ref1, ref2, ref3;
- const eslintOptions = (args, defaultCacheLocation)=>({
- overrideConfigFile: args["--config"] || null,
- extensions: (ref = args["--ext"]) != null ? ref : [
- ".js",
- ".jsx",
- ".ts",
- ".tsx"
- ],
- resolvePluginsRelativeTo: args["--resolve-plugins-relative-to"] || null,
- rulePaths: (ref1 = args["--rulesdir"]) != null ? ref1 : [],
- fix: (ref2 = args["--fix"]) != null ? ref2 : false,
- fixTypes: (ref3 = args["--fix-type"]) != null ? ref3 : null,
- ignorePath: args["--ignore-path"] || null,
- ignore: !Boolean(args["--no-ignore"]),
- allowInlineConfig: !Boolean(args["--no-inline-config"]),
- reportUnusedDisableDirectives: args["--report-unused-disable-directives"] || null,
- cache: !Boolean(args["--no-cache"]),
- cacheLocation: args["--cache-location"] || defaultCacheLocation,
- cacheStrategy: args["--cache-strategy"] || "metadata",
- errorOnUnmatchedPattern: args["--error-on-unmatched-pattern"] ? Boolean(args["--error-on-unmatched-pattern"]) : false
- });
- const nextLint = async (argv)=>{
- var ref7;
- const validArgs = {
- // Types
- "--help": Boolean,
- "--base-dir": String,
- "--dir": [
- String
- ],
- "--file": [
- String
- ],
- "--strict": Boolean,
- // Aliases
- "-h": "--help",
- "-b": "--base-dir",
- "-d": "--dir"
- };
- const validEslintArgs = {
- // Types
- "--config": String,
- "--ext": [
- String
- ],
- "--resolve-plugins-relative-to": String,
- "--rulesdir": [
- String
- ],
- "--fix": Boolean,
- "--fix-type": [
- String
- ],
- "--ignore-path": String,
- "--no-ignore": Boolean,
- "--quiet": Boolean,
- "--max-warnings": Number,
- "--no-inline-config": Boolean,
- "--report-unused-disable-directives": String,
- "--cache": Boolean,
- "--no-cache": Boolean,
- "--cache-location": String,
- "--cache-strategy": String,
- "--error-on-unmatched-pattern": Boolean,
- "--format": String,
- "--output-file": String,
- // Aliases
- "-c": "--config",
- "-f": "--format",
- "-o": "--output-file"
- };
- let args;
- try {
- args = (0, _indexJs).default({
- ...validArgs,
- ...validEslintArgs
- }, {
- argv
- });
- } catch (error) {
- if ((0, _isError).default(error) && error.code === "ARG_UNKNOWN_OPTION") {
- return (0, _utils).printAndExit(error.message, 1);
- }
- throw error;
- }
- if (args["--help"]) {
- (0, _utils).printAndExit(`
- Description
- Run ESLint on every file in specified directories.
- If not configured, ESLint will be set up for the first time.
- Usage
- $ next lint <baseDir> [options]
- <baseDir> represents the directory of the Next.js application.
- If no directory is provided, the current directory will be used.
- Options
- Basic configuration:
- -h, --help List this help
- -d, --dir Array Include directory, or directories, to run ESLint - default: 'pages', 'components', and 'lib'
- --file Array Include file, or files, to run ESLint
- -c, --config path::String Use this configuration file, overriding all other config options
- --ext [String] Specify JavaScript file extensions - default: .js, .jsx, .ts, .tsx
- --resolve-plugins-relative-to path::String A folder where plugins should be resolved from, CWD by default
- Initial setup:
- --strict Creates an .eslintrc.json file using the Next.js strict configuration (only possible if no .eslintrc.json file is present)
- Specifying rules:
- --rulesdir [path::String] Use additional rules from this directory
- Fixing problems:
- --fix Automatically fix problems
- --fix-type Array Specify the types of fixes to apply (problem, suggestion, layout)
- Ignoring files:
- --ignore-path path::String Specify path of ignore file
- --no-ignore Disable use of ignore files and patterns
- Handling warnings:
- --quiet Report errors only - default: false
- --max-warnings Int Number of warnings to trigger nonzero exit code - default: -1
- Output:
- -o, --output-file path::String Specify file to write report to
- -f, --format String Use a specific output format - default: Next.js custom formatter
- Inline configuration comments:
- --no-inline-config Prevent comments from changing config or rules
- --report-unused-disable-directives Adds reported errors for unused eslint-disable directives ("error" | "warn" | "off")
- Caching:
- --no-cache Disable caching
- --cache-location path::String Path to the cache file or directory - default: .eslintcache
- --cache-strategy String Strategy to use for detecting changed files in the cache, either metadata or content - default: metadata
- Miscellaneous:
- --error-on-unmatched-pattern Show errors when any file patterns are unmatched - default: false
- `, 0);
- }
- const baseDir = (0, _getProjectDir).getProjectDir(args._[0]);
- // Check if the provided directory exists
- if (!(0, _fs).existsSync(baseDir)) {
- (0, _utils).printAndExit(`> No such directory exists as the project root: ${baseDir}`);
- }
- const nextConfig = await (0, _config).default(_constants1.PHASE_PRODUCTION_BUILD, baseDir);
- var ref4;
- const files = (ref4 = args["--file"]) != null ? ref4 : [];
- var ref5;
- const dirs = (ref5 = args["--dir"]) != null ? ref5 : (ref7 = nextConfig.eslint) == null ? void 0 : ref7.dirs;
- const filesToLint = [
- ...dirs != null ? dirs : [],
- ...files
- ];
- const pathsToLint = (filesToLint.length ? filesToLint : _constants.ESLINT_DEFAULT_DIRS).reduce((res, d)=>{
- const currDir = (0, _path).join(baseDir, d);
- if (!(0, _fs).existsSync(currDir)) return res;
- res.push(currDir);
- return res;
- }, []);
- const reportErrorsOnly = Boolean(args["--quiet"]);
- var ref6;
- const maxWarnings = (ref6 = args["--max-warnings"]) != null ? ref6 : -1;
- const formatter = args["--format"] || null;
- const strict = Boolean(args["--strict"]);
- const outputFile = args["--output-file"] || null;
- const distDir = (0, _path).join(baseDir, nextConfig.distDir);
- const defaultCacheLocation = (0, _path).join(distDir, "cache", "eslint/");
- (0, _runLintCheck).runLintCheck(baseDir, pathsToLint, {
- lintDuringBuild: false,
- eslintOptions: eslintOptions(args, defaultCacheLocation),
- reportErrorsOnly: reportErrorsOnly,
- maxWarnings,
- formatter,
- outputFile,
- strict,
- hasAppDir: !!nextConfig.experimental.appDir
- }).then(async (lintResults)=>{
- const lintOutput = typeof lintResults === "string" ? lintResults : lintResults == null ? void 0 : lintResults.output;
- if (typeof lintResults !== "string" && (lintResults == null ? void 0 : lintResults.eventInfo)) {
- const telemetry = new _storage.Telemetry({
- distDir
- });
- telemetry.record((0, _events).eventLintCheckCompleted({
- ...lintResults.eventInfo,
- buildLint: false
- }));
- await telemetry.flush();
- }
- if (typeof lintResults !== "string" && (lintResults == null ? void 0 : lintResults.isError) && lintOutput) {
- throw new _compileError.CompileError(lintOutput);
- }
- if (lintOutput) {
- (0, _utils).printAndExit(lintOutput, 0);
- } else if (lintResults && !lintOutput) {
- (0, _utils).printAndExit(_chalk.default.green("\u2714 No ESLint warnings or errors"), 0);
- }
- }).catch((err)=>{
- (0, _utils).printAndExit(err.message);
- });
- };
- exports.nextLint = nextLint;
- //# sourceMappingURL=next-lint.js.map
|