@roots/dependencies
Version:
Automated package installation
45 lines (44 loc) • 1.36 kB
JavaScript
import { spawn } from 'child_process';
/**
* Base command
*/
export class Command {
path;
onMessage;
onError;
constructor(path, onMessage, onError) {
this.path = path;
this.onMessage = onMessage;
this.onError = onError;
}
async execute(commandArgs) {
const [bin, ...args] = commandArgs;
return new Promise((resolve, reject) => {
const message = [];
const command = spawn(bin, args);
command.stdout.on(`data`, incoming => {
message.push(incoming.toString());
this.onMessage && this.onMessage(incoming.toString());
});
command.stderr.on(`data`, incoming => {
message.push(incoming.toString());
this.onError && this.onError(incoming.toString());
});
command.on(`close`, () => resolve(message));
command.on(`error`, () => reject());
});
}
normalizeDependencies(dependencies) {
return dependencies
.reduce((acc, dependency) => {
if (Array.isArray(dependency)) {
acc.push(`${dependency[0]}@${dependency[1]}`);
}
else {
acc.push(dependency);
}
return acc;
}, [])
.filter(Boolean);
}
}