38 lines
830 B
TypeScript
38 lines
830 B
TypeScript
import type { ESLint } from 'eslint';
|
|
import * as fs from 'node:fs';
|
|
import { resolve, basename, extname } from 'node:path';
|
|
|
|
function tryRequire(candidates: string[]) {
|
|
for (const candidate of candidates) {
|
|
try {
|
|
require(candidate);
|
|
return;
|
|
} catch {}
|
|
}
|
|
}
|
|
|
|
// https://github.com/gulpjs/interpret
|
|
tryRequire([
|
|
'esbin/register',
|
|
'esbuild-register',
|
|
'ts-node/register/transpile-only',
|
|
'@swc/register',
|
|
'@babel/register',
|
|
'coffeescript/register',
|
|
]);
|
|
|
|
const folders = resolve(process.cwd(), 'eslint-local-rules');
|
|
const files = fs.readdirSync(folders);
|
|
|
|
const plugin: ESLint.Plugin = {
|
|
rules: {},
|
|
};
|
|
|
|
for (const file of files) {
|
|
const name = basename(file, extname(file));
|
|
const module = require(resolve(folders, file));
|
|
plugin.rules![name] = module.default ?? module;
|
|
}
|
|
|
|
export = plugin;
|