#!/usr/bin/env node /** * @fileoverview Main CLI that is run via the eslint command. * @author Nicholas C. Zakas */ /* eslint no-console:off */ "use strict"; //------------------------------------------------------------------------------ // Helpers //------------------------------------------------------------------------------ const useStdIn = (process.argv.indexOf("--stdin") > -1), init = (process.argv.indexOf("--init") > -1), debug = (process.argv.indexOf("--debug") > -1); // must do this initialization *before* other requires in order to work if (debug) { require("debug").enable("eslint:*,-eslint:code-path"); } //------------------------------------------------------------------------------ // Requirements //------------------------------------------------------------------------------ // now we can safely include the other modules that use debug const cli = require("../lib/cli"), path = require("path"), fs = require("fs"); //------------------------------------------------------------------------------ // Execution //------------------------------------------------------------------------------ process.once("uncaughtException", err => { // lazy load const lodash = require("lodash"); if (typeof err.messageTemplate === "string" && err.messageTemplate.length > 0) { const template = lodash.template(fs.readFileSync(path.resolve(__dirname, `../messages/${err.messageTemplate}.txt`), "utf-8")); const pkg = require("../package.json"); console.error("\nOops! Something went wrong! :("); console.error(`\nESLint: ${pkg.version}.\n\n${template(err.messageData || {})}`); } else { console.error(err.stack); } process.exitCode = 2; }); if (useStdIn) { /* * Note: `process.stdin.fd` is not used here due to https://github.com/nodejs/node/issues/7439. * Accessing the `process.stdin` property seems to modify the behavior of file descriptor 0, resulting * in an error when stdin is piped in asynchronously. */ const STDIN_FILE_DESCRIPTOR = 0; process.exitCode = cli.execute(process.argv, fs.readFileSync(STDIN_FILE_DESCRIPTOR, "utf8")); } else if (init) { const configInit = require("../lib/init/config-initializer"); configInit.initializeConfig().then(() => { process.exitCode = 0; }).catch(err => { process.exitCode = 1; console.error(err.message); console.error(err.stack); }); } else { process.exitCode = cli.execute(process.argv); }