es2049package
Version:
ECMAScript 2049 package: zero-configuration libraries and command-line utilies by Harald Rudell
45 lines (39 loc) • 1.41 kB
JavaScript
import { spawn } from 'child_process';
import { promises } from 'fs';
import { join } from 'path';
/*
© 2017-present Harald Rudell <harald.rudell@gmail.com> (http://www.haraldrudell.com)
This source code is licensed under the ISC-style license found in the LICENSE file in the root directory of this source tree.
*/
const {
lstat,
readlink
} = promises;
getPackageDirectory(process.argv[1]).then(directory => execCommand(directory)).catch(errorHandler);
async function execCommand(rollupConfigProjectDir) {
const realRollupExecutable = join(rollupConfigProjectDir, 'node_modules', '.bin', 'rollup');
const args = process.argv.slice(2);
const {
status,
signal
} = await new Promise((resolve, reject) => spawn(realRollupExecutable, args, {
stdio: 'inherit'
}).once('close', (st, si) => resolve({
status: st,
signal: si
})).on('error', reject));
if (signal) throw new Error(`signal: ${signal} status: ${status} from ${realRollupExecutable}`);
process.exit(status);
}
async function getPackageDirectory(executable) {
while ((await lstat(executable)).isSymbolicLink()) {
const target = await readlink(executable);
executable = target.startsWith('.') ? join(executable, '..', target) : target;
}
return join(executable, '..', '..');
}
function errorHandler(e) {
console.error(e instanceof Error ? e.message : e);
process.exit(1);
}