core/persistence/text.persistence.ts
core/persistence/text.persistence.ts is a file in Canonical Write. 44 lines of code and 10 definitions.
import { existsSync, readFileSync, writeFileSync } from "node:fs";
import { stampGenerated, stripMark } from "#core/formatters/mark.formatter";
import type { Options } from "prettier";
import prettier from "prettier";
const writeChanged = function writeChanged(target: string, content: Uint8Array | string): void {
const next = typeof content === "string" ? Buffer.from(content) : content;
if (existsSync(target) && readFileSync(target).equals(next)) {
return;
}
writeFileSync(target, next);
};
const canonicalText = async function canonicalText(target: string, text: string, options: Options): Promise<string> {
const { inferredParser } = await prettier.getFileInfo(target);
if (inferredParser === null && options.parser === undefined) {
return text;
}
return prettier.format(text, { ...options, filepath: target });
};
export const writeCanonicalText = async function writeCanonicalText(
target: string,
text: string,
options: Options = {},
): Promise<void> {
writeChanged(target, await canonicalText(target, text, options));
};
export const writeCanonicalJson = async function writeCanonicalJson(
target: string,
data: unknown,
options: Options = {},
): Promise<void> {
await writeCanonicalText(target, JSON.stringify(data), options);
};
export const writeGeneratedMarkdown = async function writeGeneratedMarkdown(
target: string,
text: string,
options: Options = {},
): Promise<void> {
const body = await prettier.format(stripMark(text), { ...options, filepath: target });
const previous = existsSync(target) ? readFileSync(target, "utf8") : "";
writeChanged(target, stampGenerated(body, previous, new Date()));
};
export const writeVerbatim = function writeVerbatim(target: string, content: Uint8Array | string): void {
writeChanged(target, content);
};