tsds-build
Version:
Development stack for TypeScript libraries
47 lines (46 loc) • 1.72 kB
JavaScript
import spawn from 'cross-spawn-cb';
import { safeRm } from 'fs-remove-compat';
import { installSync } from 'install-optional';
import debounce from 'lodash.debounce';
import { bind } from 'node-version-call';
import path from 'path';
import Queue from 'queue-cb';
import resolveBin from 'resolve-bin-sync';
import url from 'url';
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, '..', '..');
const installSyncRollup = debounce(installSync, 300, {
leading: true,
trailing: false
});
function run(_args, options, callback) {
const cwd = options.cwd || process.cwd();
const dest = path.join(cwd, 'dist', 'umd');
const configRoot = path.join(dist, 'esm', 'rollup');
try {
installSyncRollup('rollup', `${process.platform}-${process.arch}`, {
cwd
});
const rollup = resolveBin('rollup');
const queue = new Queue(1);
queue.defer((cb)=>safeRm(dest, (err)=>cb(err)));
queue.defer(spawn.bind(null, rollup, [
'--config',
path.join(configRoot, 'config.js')
], options));
queue.defer(spawn.bind(null, rollup, [
'--config',
path.join(configRoot, 'config.min.js')
], options));
queue.await(callback);
} catch (err) {
return callback(err instanceof Error ? err : new Error(String(err)));
}
}
const worker = major >= 20 ? run : bind('>=20', path.join(dist, 'cjs', 'lib', 'umd.js'), {
callbacks: true
});
export default function umd(args, options, callback) {
worker(args, options, callback);
}