@riddance/env
Version:
Too much code slows you down, creates risks, increases maintainability burdens, confuses AI. So let's commit less of it.
50 lines • 5.99 kB
JavaScript
import { exec } from 'node:child_process';
import { stat } from 'node:fs/promises';
import { join } from 'node:path';
export async function install(reporter, path) {
reporter.status('Updating packages...');
const success = (await npmInstall(path)) && (await npmInstall(join(path, 'example')));
if (success) {
reporter.status('Packages updated.');
}
else {
reporter.error('Package install failed.');
}
return success;
}
async function npmInstall(path) {
try {
await stat(path);
}
catch (e) {
if (isFileNotFound(e)) {
return true;
}
throw e;
}
const exitCode = await new Promise((resolve, reject) => {
const proc = exec('npm install --omit=optional', { cwd: path }, err => {
if (err) {
reject(err);
}
});
const onError = (error) => {
reject(error);
proc.removeListener('error', onError);
proc.removeListener('exit', onExit);
};
const onExit = (code) => {
resolve(code);
proc.removeListener('error', onError);
proc.removeListener('exit', onExit);
};
proc.stderr?.pipe(process.stderr);
proc.addListener('error', onError);
proc.addListener('exit', onExit);
});
return exitCode === 0;
}
function isFileNotFound(e) {
return e.code === 'ENOENT';
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibnBtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDdkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUdoQyxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FBQyxRQUFrQixFQUFFLElBQVk7SUFDMUQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBTSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3JGLElBQUksT0FBTyxFQUFFLENBQUM7UUFDVixRQUFRLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFDeEMsQ0FBQztTQUFNLENBQUM7UUFDSixRQUFRLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2xCLENBQUM7QUFFRCxLQUFLLFVBQVUsVUFBVSxDQUFDLElBQVk7SUFDbEMsSUFBSSxDQUFDO1FBQ0QsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDcEIsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDVCxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFBO1FBQ2YsQ0FBQztRQUNELE1BQU0sQ0FBQyxDQUFBO0lBQ1gsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2xFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNsRSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNmLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDdkMsQ0FBQyxDQUFBO1FBQ0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFtQixFQUFFLEVBQUU7WUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDdkMsQ0FBQyxDQUFBO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3BDLENBQUMsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxRQUFRLEtBQUssQ0FBQyxDQUFBO0FBQ3pCLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFVO0lBQzlCLE9BQVEsQ0FBdUIsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFBO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgc3RhdCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJ1xuaW1wb3J0IHsgUmVwb3J0ZXIgfSBmcm9tICcuL3JlcG9ydGVyLmpzJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbChyZXBvcnRlcjogUmVwb3J0ZXIsIHBhdGg6IHN0cmluZykge1xuICAgIHJlcG9ydGVyLnN0YXR1cygnVXBkYXRpbmcgcGFja2FnZXMuLi4nKVxuICAgIGNvbnN0IHN1Y2Nlc3MgPSAoYXdhaXQgbnBtSW5zdGFsbChwYXRoKSkgJiYgKGF3YWl0IG5wbUluc3RhbGwoam9pbihwYXRoLCAnZXhhbXBsZScpKSlcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICByZXBvcnRlci5zdGF0dXMoJ1BhY2thZ2VzIHVwZGF0ZWQuJylcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXBvcnRlci5lcnJvcignUGFja2FnZSBpbnN0YWxsIGZhaWxlZC4nKVxuICAgIH1cbiAgICByZXR1cm4gc3VjY2Vzc1xufVxuXG5hc3luYyBmdW5jdGlvbiBucG1JbnN0YWxsKHBhdGg6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHN0YXQocGF0aClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChpc0ZpbGVOb3RGb3VuZChlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlXG4gICAgfVxuICAgIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgbmV3IFByb21pc2U8bnVtYmVyIHwgbnVsbD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9jID0gZXhlYygnbnBtIGluc3RhbGwgLS1vbWl0PW9wdGlvbmFsJywgeyBjd2Q6IHBhdGggfSwgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvbkVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgcHJvYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgICAgcHJvYy5yZW1vdmVMaXN0ZW5lcignZXhpdCcsIG9uRXhpdClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbkV4aXQgPSAoY29kZTogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShjb2RlKVxuICAgICAgICAgICAgcHJvYy5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICAgICAgcHJvYy5yZW1vdmVMaXN0ZW5lcignZXhpdCcsIG9uRXhpdClcbiAgICAgICAgfVxuICAgICAgICBwcm9jLnN0ZGVycj8ucGlwZShwcm9jZXNzLnN0ZGVycilcbiAgICAgICAgcHJvYy5hZGRMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKVxuICAgICAgICBwcm9jLmFkZExpc3RlbmVyKCdleGl0Jywgb25FeGl0KVxuICAgIH0pXG4gICAgcmV0dXJuIGV4aXRDb2RlID09PSAwXG59XG5cbmZ1bmN0aW9uIGlzRmlsZU5vdEZvdW5kKGU6IHVua25vd24pIHtcbiAgICByZXR1cm4gKGUgYXMgeyBjb2RlOiB1bmtub3duIH0pLmNvZGUgPT09ICdFTk9FTlQnXG59XG4iXX0=