formatter
uses node:crypto
oxfmt and the configuration file for the codebase's options.
import type { Codebase } from "#codebase/tcmts/cli/codebase"; import { configDefinition } from "#codebase/tcmts/cli/config"; import { FMT_CONFIG } from "#codebase/tcmts/cli/fmt"; import { provideTool } from "#codebase/tcmts/cli/lint"; import { createHash } from "node:crypto"; import fs from "node:fs"; import path from "node:path"; export function formatter(cb: Codebase): { bin: string; config: string } { const tool = provideTool(cb, "oxfmt"); const options = configDefinition(cb, FMT_CONFIG)?.value ?? {}; const text = JSON.stringify(options, null, 2); const key = createHash("sha256").update(`${tool.version}\n${text}`).digest("hex").slice(0, 24); const dir = path.join(cb.lay.tcmDir, "fmt"); fs.mkdirSync(dir, { recursive: true }); const config = path.join(dir, `oxfmtrc-${key}.json`); if (!fs.existsSync(config)) fs.writeFileSync(config, text + "\n"); return { bin: path.join(tool.dir, "bin", "oxfmt"), config }; }
uses
- tcmts.cli.codebase.Codebase
- tcmts.cli.config.configDefinition
- tcmts.cli.fmt.FMT_CONFIG
- tcmts.cli.lint.provideTool