import { dirname } from 'path' import { readFile, writeFile, mkdir, lstat } from 'fs/promises' export async function ensureFileDir(path: string): Promise { await mkdir(dirname(path), { recursive: true }) } export async function readJson(path: string): Promise { const srcJson = await readFile(path, 'utf8') const srcMeta = JSON.parse(srcJson) return srcMeta } export async function writeJson(path: string, obj: any): Promise { await writeFile(path, stringifyJson(obj)) } export function stringifyJson(obj: any): string { return JSON.stringify(obj, undefined, 2) + '\n' } export async function writeIfDifferent(path: string, content: string): Promise { const existingContent = await readFile(path, 'utf8').catch(() => false) if (existingContent === false || existingContent !== content) { await writeFile(path, content) return true } return false } export function fileExists(path: string): Promise { return lstat(path).then( () => true, () => false, ) }