UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

56 lines (54 loc) 1.94 kB
import { existsSync } from "node:fs"; import { join } from "node:path"; import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises"; //#region src/dev-logs.ts const ESC = "\x1B"; const BEL = "\x07"; const ANSI_RE = new RegExp(`${ESC}\\[[0-?]*[ -/]*[@-~]|${ESC}\\][^${BEL}]*${BEL}`, "g"); const stripAnsi = (input) => input.replace(ANSI_RE, ""); function getBosDir(configDir) { return join(configDir, ".bos"); } function getLogsDir(configDir) { return join(getBosDir(configDir), "logs"); } function formatLogLine(entry) { const ts = new Date(entry.timestamp).toISOString(); const prefix = entry.isError ? "ERR" : "OUT"; const clean = stripAnsi(entry.line); return `[${ts}] [${entry.source}] [${prefix}] ${clean}`; } async function createDevLogger(configDir, description) { const dir = getLogsDir(configDir); if (!existsSync(dir)) await mkdir(dir, { recursive: true }); const now = /* @__PURE__ */ new Date(); const logFile = join(dir, `dev-${now.toISOString().replace(/[:.]/g, "-").slice(0, 19)}.log`); const latestFile = join(dir, "dev-latest.log"); const header = `# everything-dev dev session: ${description}\n# Started: ${now.toISOString()}\n\n`; await writeFile(logFile, header, "utf8"); await writeFile(latestFile, header, "utf8"); let chain = Promise.resolve(); const enqueue = (fn) => { chain = chain.then(fn, fn); return chain; }; return { logFile, latestFile, write: (entry) => enqueue(async () => { const line = `${formatLogLine(entry)}\n`; await appendFile(logFile, line); await appendFile(latestFile, line); }), readLatest: async (opts) => { const text = await readFile(latestFile, "utf8").catch(() => ""); const tail = opts?.tail; if (!tail || tail <= 0) return text; const lines = text.split("\n"); return lines.slice(Math.max(0, lines.length - tail)).join("\n"); } }; } //#endregion export { createDevLogger }; //# sourceMappingURL=dev-logs.mjs.map