UNPKG

everything-dev

Version:

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

57 lines (55 loc) 2.2 kB
const require_runtime = require('./_virtual/_rolldown/runtime.cjs'); let node_fs = require("node:fs"); let node_path = require("node:path"); let node_fs_promises = require("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 (0, node_path.join)(configDir, ".bos"); } function getLogsDir(configDir) { return (0, node_path.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 (!(0, node_fs.existsSync)(dir)) await (0, node_fs_promises.mkdir)(dir, { recursive: true }); const now = /* @__PURE__ */ new Date(); const logFile = (0, node_path.join)(dir, `dev-${now.toISOString().replace(/[:.]/g, "-").slice(0, 19)}.log`); const latestFile = (0, node_path.join)(dir, "dev-latest.log"); const header = `# everything-dev dev session: ${description}\n# Started: ${now.toISOString()}\n\n`; await (0, node_fs_promises.writeFile)(logFile, header, "utf8"); await (0, node_fs_promises.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 (0, node_fs_promises.appendFile)(logFile, line); await (0, node_fs_promises.appendFile)(latestFile, line); }), readLatest: async (opts) => { const text = await (0, node_fs_promises.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 exports.createDevLogger = createDevLogger; //# sourceMappingURL=dev-logs.cjs.map