UNPKG

tsds-publish

Version:

Development stack for TypeScript libraries

104 lines (103 loc) 4.15 kB
import spawn from 'cross-spawn-cb'; import fs from 'fs'; import { safeRm } from 'fs-remove-compat'; import getopts from 'getopts-compat'; import { bind } from 'node-version-call'; import path from 'path'; import Queue from 'queue-cb'; import url from 'url'; import hasChanged from './lib/hasChanged.js'; const major = +process.versions.node.split('.')[0]; const __dirname = path.dirname(typeof __filename === 'undefined' ? url.fileURLToPath(import.meta.url) : __filename); const dist = path.join(__dirname, '..'); function run(args, options_, callback) { var _options_package; const cwd = options_.cwd || process.cwd(); const options = { ...options_ }; options.package = options.package || JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8')); if ((_options_package = options.package) === null || _options_package === void 0 ? void 0 : _options_package.private) { var _options_package1; console.log(`Skipping ${(_options_package1 = options.package) === null || _options_package1 === void 0 ? void 0 : _options_package1.name}. Private`); return callback(); } const opts = getopts(args, { alias: { otp: 'o', 'dry-run': 'd' }, boolean: [ 'yolo', 'dry-run' ] }); hasChanged(options, (err, result)=>{ var _options_package; if (err) return callback(err); if (!(result === null || result === void 0 ? void 0 : result.changed)) { var _options_package1; console.log(`Skipping ${(_options_package1 = options.package) === null || _options_package1 === void 0 ? void 0 : _options_package1.name}. ${result === null || result === void 0 ? void 0 : result.reason}`); callback(); return; } console.log(`Publishing ${(_options_package = options.package) === null || _options_package === void 0 ? void 0 : _options_package.name}. ${result === null || result === void 0 ? void 0 : result.reason}`); const queue = new Queue(1); // run tests if (!opts.yolo) { queue.defer((cb)=>safeRm(path.join(cwd, 'node_modules'), (err)=>cb(err))); queue.defer(spawn.bind(null, 'npm', [ 'ci' ], { ...options, cwd })); queue.defer(spawn.bind(null, 'npm', [ 'test' ], { ...options, cwd })); } // update the version const versionArgs = [ 'version', opts._.length > 0 ? opts._[0] : 'patch' ]; queue.defer((cb)=>spawn('npm', versionArgs, options, (err)=>{ if (err) return cb(err); options.package = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8')); cb(); })); // do publish // Safeguard: block actual publish in test environment without --dry-run if (process.env.NODE_ENV === 'test' && !opts['dry-run']) { return callback(new Error('Cannot publish in test environment without --dry-run')); } const publishArgs = [ 'publish' ]; if (opts['dry-run']) publishArgs.push('--dry-run'); if (opts.otp) publishArgs.push(`--otp=${opts.otp}`); queue.defer(spawn.bind(null, 'npm', publishArgs, options)); queue.defer((cb)=>spawn('git', [ 'add', '.' ], options, ()=>cb())); queue.defer((cb)=>{ var _options_package; return spawn('git', [ 'commit', '-m', `${(_options_package = options.package) === null || _options_package === void 0 ? void 0 : _options_package.version}` ], options, ()=>cb()); }); queue.await(callback); }); } const worker = major >= 20 ? run : bind('>=20', path.join(dist, 'cjs', 'command.js'), { callbacks: true }); export default function publish(args, options, callback) { worker(args, options, callback); }