formatter

tcmts.cli.fmt.formatter · #tp2wiepj · term · runs on the server

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

used by