eslint_d
Version:
Speed up eslint to accelerate your development workflow
54 lines (49 loc) • 1.18 kB
JavaScript
import { createRequire } from 'node:module';
/**
* @typedef {Object} Resolver
* @property {string} base
* @property {boolean} bundled
* @property {require} require
*/
/**
* @returns {Resolver | 'ignore' | 'fail'}
*/
export function createResolver() {
const require = createRequire(import.meta.url);
const local = getLocal();
let bundled = false;
let path;
try {
path = require.resolve('eslint', { paths: [process.cwd()] });
} catch (err) {
if (local === 'ignore') {
return 'ignore';
}
if (local === 'fail') {
console.error(`eslint_d: Failed to resolve eslint - ${err}`);
return 'fail';
}
// Fallback to bundled eslint
path = require.resolve('eslint');
bundled = true;
}
return {
base: path.substring(0, path.lastIndexOf('/eslint/') + 7),
bundled,
require
};
}
const local_options = ['fallback', 'fail', 'ignore'];
/**
* @returns {string}
*/
function getLocal() {
const env = process.env.ESLINT_D_MISS;
if (!env) {
return 'fallback';
}
if (local_options.includes(env)) {
return env;
}
throw new Error(`ESLINT_D_MISS must be one of ${local_options.join(', ')}`);
}