tsds-publish
Version:
Development stack for TypeScript libraries
75 lines (74 loc) • 2.64 kB
JavaScript
import spawn from 'cross-spawn-cb';
import fs from 'fs';
import getopts from 'getopts-compat';
import path from 'path';
import Queue from 'queue-cb';
import { wrapWorker } from 'tsds-lib';
import url from 'url';
import hasChanged from './lib/hasChanged.js';
import post from './post.js';
import pre from './pre.js';
const major = +process.versions.node.split('.')[0];
const version = major > 14 ? 'local' : 'stable';
const __dirname = path.dirname(typeof __filename === 'undefined' ? url.fileURLToPath(import.meta.url) : __filename);
const dist = path.join(__dirname, '..');
const workerWrapper = wrapWorker(path.join(dist, 'cjs', 'command.ts'));
function worker(args, options_, callback) {
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.private) {
console.log(`Skipping ${options.package.name}. Private`);
return callback();
}
const queue = new Queue(1);
const opts = getopts(args, {
alias: {
otp: 'o'
},
boolean: [
'yolo'
]
});
opts.yolo || queue.defer(pre.bind(null, args, options));
queue.defer((cb)=>{
hasChanged(options, (err, changed)=>{
if (err) {
cb(err);
return;
}
if (!changed) {
console.log(`Skipping ${options.package.name}. No changes`);
cb();
return;
}
// 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
const publishArgs = [
'publish'
];
if (opts.otp) Array.prototype.push.apply(publishArgs, [
`--otp=${opts.otp}`
]);
queue.defer(spawn.bind(null, 'npm', publishArgs, options));
// add post actions
queue.defer(post.bind(null, args, options));
cb();
});
});
queue.await(callback);
}
export default function publish(args, options, callback) {
version !== 'local' ? workerWrapper(version, args, options, callback) : worker(args, options, callback);
}