UNPKG

eslint_d

Version:

Speed up eslint to accelerate your development workflow

72 lines (64 loc) 1.96 kB
import { createRequire } from 'node:module'; /** * @import { Socket } from 'node:net' * @import { Resolver } from './resolver.js' */ const stdout_write = process.stdout.write; const stderr_write = process.stderr.write; /** * @param {Resolver} resolver * @param {string} token * @returns {function(Socket): void} con */ export function createService(resolver, token) { const eslint = resolver.require(`${resolver.base}/lib/cli.js`); const chalk = createRequire(resolver.base)('chalk'); return (con) => { let content = ''; con .setEncoding('utf8') .on('readable', () => { let chunk = ''; while ((chunk = con.read()) !== null) { content += chunk; } }) .on('end', async () => { if (!content) { con.end(); return; } const newline = content.indexOf('\n'); let text = null; if (newline !== -1) { text = content.slice(newline + 1); content = content.slice(0, newline); } const [request_token, color_level, cwd, argv] = content.split(' '); if (request_token !== token) { con.end(); return; } chalk.level = color_level; process.chdir(JSON.parse(cwd)); process.stdout.write = (chunk) => con.write(chunk); process.stderr.write = (chunk) => con.write(chunk); let code = 1; try { code = await eslint.execute(JSON.parse(argv), text, true); } catch (e) { con.write(String(e)); } finally { /* eslint-disable require-atomic-updates */ process.stdout.write = stdout_write; process.stderr.write = stderr_write; /* eslint-enable require-atomic-updates */ con.end(`EXIT${code}`); } }) .on('error', () => { process.stdout.write = stdout_write; process.stderr.write = stderr_write; }); }; }