@spotify/web-scripts
Version:
Build, lint, test, format, and release your JS/TS library.
253 lines (252 loc) • 8.12 kB
JavaScript
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();
}
;