1
Fork 0
dotfiles/.bauke/scripts/utilities.ts

39 lines
1.0 KiB
TypeScript
Raw Normal View History

import { parse } from "https://deno.land/std@0.167.0/encoding/toml.ts";
import { TextDecoder } from "https://deno.land/std@0.167.0/node/util.ts";
export function stringifyJsonPretty(input: unknown): string {
return JSON.stringify(input, null, 2);
}
export async function runAndReturnStdout(
options: Deno.RunOptions,
): Promise<string> {
const process = Deno.run({ stdout: "piped", ...options });
return new TextDecoder().decode(await process.output());
}
export function tomlFrontmatter<T>(
data: string,
): [T, string] {
const startMarker = "---toml\n";
const endMarker = "\n---\n";
let start = data.indexOf(startMarker);
let end = data.indexOf(endMarker);
if (start === -1 || end === -1) {
throw new Error("Missing frontmatter");
}
if (start !== 0) {
throw new Error("Frontmatter not at beginning of data");
}
start += startMarker.length;
const frontmatter = data.slice(start, end);
end += endMarker.length;
const extra = data.slice(end);
return [parse(frontmatter) as T, extra.trimStart()];
}