UNPKG

@spotify/web-scripts

Version:

Build, lint, test, format, and release your JS/TS library.

253 lines (252 loc) 8.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var commander_1 = require("commander"); var Paths_1 = require("./Paths"); var AuditTasks_1 = require("./Tasks/AuditTasks"); var TestTask_1 = require("./Tasks/TestTask"); var BuildTask_1 = require("./Tasks/BuildTask"); var LintTask_1 = require("./Tasks/LintTask"); var FormatTask_1 = require("./Tasks/FormatTask"); var CommitTasks_1 = require("./Tasks/CommitTasks"); commander_1.program .command('init') .description('initialize your package to use web-scripts') .action(function () { throw new Error('unimplemented'); }); commander_1.program .command('build') .allowUnknownOption() .description('Build your project into esm, cjs, and types folders') .option('--no-esm', 'do not build esm target') .option('--no-cjs', 'do not build cjs target') .option('--no-types', 'do not build types target') .action(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cmd = getCommand(args); var _a = getOpts(cmd), esm = _a.esm, types = _a.types, cjs = _a.cjs; var t = { name: 'build', esm: esm, types: types, cjs: cjs, restOptions: cmd.args, }; handlePromiseResult((0, BuildTask_1.buildTask)(t)); }); commander_1.program .command('test') .allowUnknownOption() .description('Run tests via jest') .option('--config [path]', 'path to jest config') .action(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cmd = getCommand(args); var config = getOpts(cmd).config; var t = { name: 'test', config: config, restOptions: cmd.args, }; var result = (0, TestTask_1.testTask)(t); handleSpawnResult(result); }); commander_1.program .command('lint') .allowUnknownOption() .description('Run ESLint and TypeScript to statically analyze your code') .option('--config [path]', 'path to ESLint config') .option('--typecheck', 'run a TypeScript type check', true) .option('--no-typecheck', 'do not run a TypeScript type check') .option('--stylecheck', "run Prettier's style check", true) .option('--no-stylecheck', "do not run Prettier's style check") .action(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cmd = getCommand(args); var _a = getOpts(cmd), stylecheck = _a.stylecheck, typecheck = _a.typecheck, config = _a.config; var t = { name: 'lint', config: config, stylecheck: stylecheck, typecheck: typecheck, restOptions: cmd.args, }; handlePromiseResult((0, LintTask_1.lintTask)(t)); }); commander_1.program .command('format') .allowUnknownOption() .description('Run Prettier to format your code') .option('--config [path]', 'path to Prettier config') .option('--path [path]', 'path to project folder to format. targets the `src` directory within this path only.') .action(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cmd = getCommand(args); var _a = getOpts(cmd), config = _a.config, path = _a.path; var t = { name: 'format', config: config, path: path, restOptions: cmd.args, }; handleSpawnResult((0, FormatTask_1.formatTask)(t)); }); commander_1.program .command('precommit') .allowUnknownOption() .description('Locally validate the repo before committing') .option('--jest-config [path]', 'path to jest config') .option('--prettier-config [path]', 'path to prettier config') .option('--eslint-config [path]', 'path to eslint config') .option('--no-tests', 'Do not run Jest tests') .option('--no-typecheck', 'Do not type check using TypeScript') .action(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cmd = getCommand(args); var _a = getOpts(cmd), tests = _a.tests, typecheck = _a.typecheck, jestConfig = _a.jestConfig, eslintConfig = _a.eslintConfig, prettierConfig = _a.prettierConfig; var t = { name: 'precommit', tests: tests, typecheck: typecheck, jestConfig: jestConfig, eslintConfig: eslintConfig, prettierConfig: prettierConfig, restOptions: cmd.args, }; handlePromiseResult((0, CommitTasks_1.precommitTask)(t)); }); function thresholdLimiter(value, defaultValue) { switch (value) { case 'info': case 'low': case 'moderate': case 'high': case 'critical': return value; default: return defaultValue; } } commander_1.program .command('audit') .alias('postinstall') .allowUnknownOption() .description("Run yarn audit and exit non-zero if the security vulnerability threshold is breached") .option('--threshold [info|low|moderate|high|critical]', 'The amount of permissible vulnerabilities', thresholdLimiter, 'none') .action(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cmd = getCommand(args); var threshold = getOpts(cmd).threshold; var t = { name: 'audit', threshold: threshold, restOptions: cmd.args, }; handlePromiseResult((0, AuditTasks_1.auditTask)(t)); }); commander_1.program .command('commit') .allowUnknownOption() .description('Create Commitizen commit from staged files') .option('--path [path]', 'path for commitizen adapter to use', 'cz-conventional-changelog') .action(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cmd = getCommand(args); var path = getOpts(cmd).path; var t = { name: 'commit', path: path, restOptions: cmd.args, }; try { (0, CommitTasks_1.commitTask)(t); } catch (err) { handleError(err); } }); commander_1.program .command('commitmsg') .allowUnknownOption() .description('Run commitizen commit message validation hook') .option('--config [path]', 'path to the commitlint config.', Paths_1.COMMITLINT_CONIFG) .option('--edit [path]', 'read last commit message from the specified file (only necessary when using Husky v6).') .action(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cmd = getCommand(args); var _a = getOpts(cmd), config = _a.config, edit = _a.edit; var t = { name: 'commitmsg', config: config, edit: edit, restOptions: cmd.args, }; handleSpawnResult((0, CommitTasks_1.commitMsgTask)(t)); }); commander_1.program .command('release') .allowUnknownOption() .description('Run semantic-release') .action(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cmd = getCommand(args); var t = { name: 'release', restOptions: cmd.args, }; handleSpawnResult((0, CommitTasks_1.releaseTask)(t)); }); function handlePromiseResult(result) { result.catch(handleError); } function handleError(error) { if (error.message && error.message.indexOf('Error: Exited with status') < 0) { console.error(error); } process.exit(error.exitStatus || 1); } function handleSpawnResult(result) { if (result.error) { throw result.error; } if (result.status !== 0) { process.exit(result.status === null ? 0 : result.status); } } function getCommand(args) { return args[1]; } function getOpts(cmd) { return cmd.opts(); } commander_1.program.parse(process.argv); if (!process.argv.slice(2).length) { commander_1.program.help(); }