#!/usr/bin/env tsx import { promises as fs } from 'node:fs'; import { camelCase } from 'lodash'; export async function buildLocalRules() { const files = (await fs.readdir('./src/custom')) .filter(file => file.endsWith('.ts')) .filter(file => file !== 'index.ts') .map(file => file.slice(0, -3)); const entryFile = /* js */ ` import type { ESLintUtils } from '@typescript-eslint/utils'; import type { Rule } from 'eslint'; ${files.map(file => `import ${camelCase(file)} from './${file}';`).join('\n')} export const rules: Record< string, Rule.RuleModule | ESLintUtils.RuleModule > = { ${files.map(file => `'${file}': ${camelCase(file)},`).join('\n ')} }; `.trim(); await fs.writeFile('./src/custom/index.ts', entryFile + '\n'); } if (require.main === module) { void buildLocalRules(); }