configFor
uses node:crypto
The oxlint configuration for code with these traits: written to .tcm/lint, keyed by its content.
import type { Codebase } from "#codebase/tcmts/cli/codebase"; import { LINT_FORMAT, provideTool, userConfig } from "#codebase/tcmts/cli/lint"; import type { LintTraits } from "#codebase/tcmts/cli/lint"; import { createHash } from "node:crypto"; import fs from "node:fs"; import path from "node:path"; export function configFor( cb: Codebase, traits: LintTraits, ): { file: string; key: string; bin: string } { const tool = provideTool(cb, "oxlint"); const user = userConfig(cb); const plugins = new Set(["typescript", "unicorn", "oxc"]); if (traits.jsx) for (const p of ["react", "jsx-a11y"]) plugins.add(p); if (traits.tests) plugins.add("vitest"); if (traits.node) plugins.add("node"); for (const p of (user.config.plugins as string[] | undefined) ?? []) plugins.add(p); const config = { plugins: [...plugins].sort(), categories: { correctness: "warn", ...(user.config.categories as object | undefined) }, rules: (user.config.rules as object | undefined) ?? {}, ...(user.jsPlugins.length ? { jsPlugins: user.jsPlugins } : {}), ...(user.config.settings ? { settings: user.config.settings } : {}), }; const text = JSON.stringify(config, null, 2); const key = createHash("sha256") .update(`${tool.version}\n${LINT_FORMAT}\n${text}`) .digest("hex") .slice(0, 24); const dir = path.join(cb.lay.tcmDir, "lint"); fs.mkdirSync(dir, { recursive: true }); const file = path.join(dir, `oxlintrc-${key}.json`); if (!fs.existsSync(file)) fs.writeFileSync(file, text + "\n"); return { file, key, bin: path.join(tool.dir, "bin", "oxlint") }; }
uses
- tcmts.cli.codebase.Codebase
- tcmts.cli.lint.LINT_FORMAT
- tcmts.cli.lint.LintTraits
- tcmts.cli.lint.provideTool
- tcmts.cli.lint.userConfig