UNPKG

publish-please

Version:

Safe and highly functional replacement for `npm publish`.

54 lines (42 loc) 2.06 kB
'use strict'; const reporter = require('../reporters/current'); const validations = [require('./vulnerable-dependencies'), require('./uncommitted-changes'), require('./untracked-files'), require('./sensitive-data'), require('./branch'), require('./git-tag')]; function runValidation(validation, param, pkg, errs) { const done = reporter.current().reportRunningTask(validation.statusText); // prettier-ignore return validation.run(param, pkg).then(() => done(true)).catch(err => { Array.isArray(err) ? errs.push(...err) : errs.push(err); done(false); }); } function skipValidation(validation, errs) { const done = reporter.current().reportRunningTask(validation.statusText); return Promise.resolve().then(() => errs.push(validation.whyCannotRun())).then(() => done(false)); } module.exports = { DEFAULT_OPTIONS: validations.reduce((opts, validation) => { opts[validation.option] = validation.canRun() ? validation.defaultParam : false; return opts; }, {}), configurators: validations.reduce((opts, validation) => { opts[validation.option] = validation.configurator; return opts; }, {}), validate: function validate(opts, pkg) { const errs = []; const validationsToRun = validations.filter(validation => !!opts[validation.option]); if (!validationsToRun.length) return Promise.resolve(); reporter.current().reportRunningSequence('Running validations'); return validationsToRun.reduce((validationChain, validation) => { return validationChain.then(() => // prettier-ignore validation.canRun() ? runValidation(validation, opts[validation.option], pkg, errs) : skipValidation(validation, errs)); }, Promise.resolve()).then(() => { if (errs.length) { const msg = errs.map(err => ' * ' + err).join('\n'); throw new Error(msg); } reporter.current().reportSucceededSequence('Validations passed'); }); } };