putout
Version:
🐊 Pluggable and configurable code transformer with built-in ESLint, Babel and support of js, jsx, typescript, flow, markdown, yaml and json
74 lines (62 loc) • 1.52 kB
JavaScript
import process from 'node:process';
import inspector from 'node:inspector';
import {readFile, writeFile} from 'node:fs/promises';
import {subscribe} from '@putout/engine-reporter/subscribe';
import {createTrace} from './trace.mjs';
import {createIsStop} from './is-stop.mjs';
import {createWrite} from './write.mjs';
import {createCommunication} from './communication.mjs';
import cli from '../lib/cli/index.js';
import {parseArgs} from '../lib/cli/parse-args.js';
import {createExit} from '../lib/cli/exit.mjs';
import {onDebuggerExit} from './debugger-exit.mjs';
import {dropInteractive} from './drop-interactive.mjs';
const halt = process.exit;
const logError = console.error;
const {log} = console;
onDebuggerExit({
log,
process,
inspector,
});
const {
worker,
workerData,
parentPort,
} = createCommunication();
const trace = createTrace(parentPort);
const isStop = createIsStop(parentPort);
const write = createWrite(parentPort);
const {cwd, stdout} = process;
const args = parseArgs(workerData.slice(2));
const {raw} = args;
if (worker) {
const exit = createExit({
raw,
halt,
logError,
});
await subscribe({
args,
worker,
exit,
cwd,
write: stdout.write.bind(stdout),
});
}
workerData.push(...[
'-f',
'none',
]);
await cli({
write,
halt,
argv: dropInteractive(workerData.slice(2)),
log,
logError,
readFile,
writeFile,
trace,
isStop,
});