@riddance/env
Version:
Too much code slows you down, creates risks, increases maintainability burdens, confuses AI. So let's commit less of it.
83 lines • 11.4 kB
JavaScript
import { getSource, load } from '../lib/changes.js';
import { sync } from '../lib/chrono.js';
import { ensureUnlinked } from '../lib/fs.js';
import { signaled } from '../lib/reporter.js';
import { isSpellingDictionaryFile, spelling } from '../lib/spelling.js';
import { watch } from './lib/compiler.js';
import { consoleReporter } from './lib/console-reporter.js';
let watcher;
let lastInput = [];
const cwd = process.cwd();
const changes = await load(cwd);
function start(preCompileSuccess) {
if (preCompileSuccess === undefined) {
process.exit(0);
}
let lastGood = preCompileSuccess;
watcher = watch(consoleReporter, cwd, isOutput, async (success, reload, inputFiles, outputFiles, signal) => {
if (reload ||
inputFiles.includes('package.json') ||
inputFiles.includes('package-lock.json')) {
await installAndRestart();
return;
}
const reporter = signaled(consoleReporter, signal);
if (!preCompileSuccess) {
reporter.status('⚠️ Issues found 👆');
reporter.done();
return;
}
if (isSpellingDictionaryFile(inputFiles)) {
if ((await spelling(reporter, cwd, getSource(lastInput), signal)) && lastGood) {
reporter.status('🚀 All good 👌');
await changes.stageComplete('spelling');
}
else {
reporter.status('⚠️ Issues found 👆');
lastGood = false;
}
reporter.done();
return;
}
lastInput = inputFiles;
await cleanUpRenames(outputFiles);
if (await changes.postCompile(consoleReporter, cwd, inputFiles, Promise.resolve(success ? outputFiles : undefined), signal)) {
reporter.status('🚀 All good 👌');
lastGood = true;
}
else {
reporter.status('⚠️ Issues found 👆');
lastGood = false;
}
reporter.done();
});
}
let createdFiles;
async function cleanUpRenames(outputFiles) {
if (!outputFiles) {
return;
}
if (!createdFiles) {
createdFiles = [...outputFiles];
return;
}
const gone = createdFiles.filter(created => !outputFiles.includes(created));
createdFiles = [...outputFiles];
await Promise.all(gone.map(ensureUnlinked));
}
function isOutput(file) {
if (!createdFiles) {
return false;
}
return createdFiles.includes(file);
}
async function installAndRestart() {
watcher.close();
await changes.clearStages();
const preCompileSuccess = await changes.preCompile(consoleReporter, cwd);
start(preCompileSuccess);
}
const [preCompileSuccess] = await Promise.all([changes.preCompile(consoleReporter, cwd), sync()]);
start(preCompileSuccess);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3YXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFM0QsSUFBSSxPQUE4QixDQUFBO0FBQ2xDLElBQUksU0FBUyxHQUFhLEVBQUUsQ0FBQTtBQUU1QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7QUFFekIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFFL0IsU0FBUyxLQUFLLENBQUMsaUJBQXNDO0lBQ2pELElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuQixDQUFDO0lBRUQsSUFBSSxRQUFRLEdBQUcsaUJBQWlCLENBQUE7SUFDaEMsT0FBTyxHQUFHLEtBQUssQ0FDWCxlQUFlLEVBQ2YsR0FBRyxFQUNILFFBQVEsRUFDUixLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3ZELElBQ0ksTUFBTTtZQUNOLFVBQVUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQ25DLFVBQVUsQ0FB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QUFPLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUN4RSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtBQUM1QixDQUFDO0FBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ2pHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBnZXRTb3VyY2UsIGxvYWQgfSBmcm9tICcuLi9saWIvY2hhbmdlcy5qcydcbmltcG9ydCB7IHN5bmMgfSBmcm9tICcuLi9saWIvY2hyb25vLmpzJ1xuaW1wb3J0IHsgZW5zdXJlVW5saW5rZWQgfSBmcm9tICcuLi9saWIvZnMuanMnXG5pbXBvcnQgeyBzaWduYWxlZCB9IGZyb20gJy4uL2xpYi9yZXBvcnRlci5qcydcbmltcG9ydCB7IGlzU3BlbGxpbmdEaWN0aW9uYXJ5RmlsZSwgc3BlbGxpbmcgfSBmcm9tICcuLi9saWIvc3BlbGxpbmcuanMnXG5pbXBvcnQgeyB3YXRjaCB9IGZyb20gJy4vbGliL2NvbXBpbGVyLmpzJ1xuaW1wb3J0IHsgY29uc29sZVJlcG9ydGVyIH0gZnJvbSAnLi9saWIvY29uc29sZS1yZXBvcnRlci5qcydcblxubGV0IHdhdGNoZXI6IHsgY2xvc2U6ICgpID0+IHZvaWQgfVxubGV0IGxhc3RJbnB1dDogc3RyaW5nW10gPSBbXVxuXG5jb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpXG5cbmNvbnN0IGNoYW5nZXMgPSBhd2FpdCBsb2FkKGN3ZClcblxuZnVuY3Rpb24gc3RhcnQocHJlQ29tcGlsZVN1Y2Nlc3M6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJlQ29tcGlsZVN1Y2Nlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICB9XG5cbiAgICBsZXQgbGFzdEdvb2QgPSBwcmVDb21waWxlU3VjY2Vzc1xuICAgIHdhdGNoZXIgPSB3YXRjaChcbiAgICAgICAgY29uc29sZVJlcG9ydGVyLFxuICAgICAgICBjd2QsXG4gICAgICAgIGlzT3V0cHV0LFxuICAgICAgICBhc3luYyAoc3VjY2VzcywgcmVsb2FkLCBpbnB1dEZpbGVzLCBvdXRwdXRGaWxlcywgc2lnbmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcmVsb2FkIHx8XG4gICAgICAgICAgICAgICAgaW5wdXRGaWxlcy5pbmNsdWRlcygncGFja2FnZS5qc29uJykgfHxcbiAgICAgICAgICAgICAgICBpbnB1dEZpbGVzLmluY2x1ZGVzKCdwYWNrYWdlLWxvY2suanNvbicpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBpbnN0YWxsQW5kUmVzdGFydCgpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXBvcnRlciA9IHNpZ25hbGVkKGNvbnNvbGVSZXBvcnRlciwgc2lnbmFsKVxuICAgICAgICAgICAgaWYgKCFwcmVDb21waWxlU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJlcG9ydGVyLnN0YXR1cygn4pqg77iPICBJc3N1ZXMgZm91bmQg8J+RhicpXG4gICAgICAgICAgICAgICAgcmVwb3J0ZXIuZG9uZSgpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTcGVsbGluZ0RpY3Rpb25hcnlGaWxlKGlucHV0RmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKChhd2FpdCBzcGVsbGluZyhyZXBvcnRlciwgY3dkLCBnZXRTb3VyY2UobGFzdElucHV0KSwgc2lnbmFsKSkgJiYgbGFzdEdvb2QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIuc3RhdHVzKCfwn5qAICBBbGwgZ29vZCDwn5GMJylcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2hhbmdlcy5zdGFnZUNvbXBsZXRlKCdzcGVsbGluZycpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIuc3RhdHVzKCfimqDvuI8gIElzc3VlcyBmb3VuZCDwn5GGJylcbiAgICAgICAgICAgICAgICAgICAgbGFzdEdvb2QgPSBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXBvcnRlci5kb25lKClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RJbnB1dCA9IGlucHV0RmlsZXNcbiAgICAgICAgICAgIGF3YWl0IGNsZWFuVXBSZW5hbWVzKG91dHB1dEZpbGVzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGF3YWl0IGNoYW5nZXMucG9zdENvbXBpbGUoXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGVSZXBvcnRlcixcbiAgICAgICAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dEZpbGVzLFxuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoc3VjY2VzcyA/IG91dHB1dEZpbGVzIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJlcG9ydGVyLnN0YXR1cygn8J+agCAgQWxsIGdvb2Qg8J+RjCcpXG4gICAgICAgICAgICAgICAgbGFzdEdvb2QgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcG9ydGVyLnN0YXR1cygn4pqg77iPICBJc3N1ZXMgZm91bmQg8J+RhicpXG4gICAgICAgICAgICAgICAgbGFzdEdvb2QgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwb3J0ZXIuZG9uZSgpXG4gICAgICAgIH0sXG4gICAgKVxufVxuXG5sZXQgY3JlYXRlZEZpbGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuXG5hc3luYyBmdW5jdGlvbiBjbGVhblVwUmVuYW1lcyhvdXRwdXRGaWxlczogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIW91dHB1dEZpbGVzKSB7XG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWNyZWF0ZWRGaWxlcykge1xuICAgICAgICBjcmVhdGVkRmlsZXMgPSBbLi4ub3V0cHV0RmlsZXNdXG4gICAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBnb25lID0gY3JlYXRlZEZpbGVzLmZpbHRlcihjcmVhdGVkID0+ICFvdXRwdXRGaWxlcy5pbmNsdWRlcyhjcmVhdGVkKSlcbiAgICBjcmVhdGVkRmlsZXMgPSBbLi4ub3V0cHV0RmlsZXNdXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZ29uZS5tYXAoZW5zdXJlVW5saW5rZWQpKVxufVxuXG5mdW5jdGlvbiBpc091dHB1dChmaWxlOiBzdHJpbmcpIHtcbiAgICBpZiAoIWNyZWF0ZWRGaWxlcykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZWRGaWxlcy5pbmNsdWRlcyhmaWxlKVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbnN0YWxsQW5kUmVzdGFydCgpIHtcbiAgICB3YXRjaGVyLmNsb3NlKClcbiAgICBhd2FpdCBjaGFuZ2VzLmNsZWFyU3RhZ2VzKClcbiAgICBjb25zdCBwcmVDb21waWxlU3VjY2VzcyA9IGF3YWl0IGNoYW5nZXMucHJlQ29tcGlsZShjb25zb2xlUmVwb3J0ZXIsIGN3ZClcbiAgICBzdGFydChwcmVDb21waWxlU3VjY2Vzcylcbn1cblxuY29uc3QgW3ByZUNvbXBpbGVTdWNjZXNzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtjaGFuZ2VzLnByZUNvbXBpbGUoY29uc29sZVJlcG9ydGVyLCBjd2QpLCBzeW5jKCldKVxuc3RhcnQocHJlQ29tcGlsZVN1Y2Nlc3MpXG4iXX0=