import { readFile, mkdir, mkdtemp, copyFile, rm } from "node:fs/promises"; import { dirname, resolve, sep } from "node:path"; import { gunzipSync } from "node:zlib"; import { renderSnapshot } from "../renderer/render.mjs"; const [input, output] = process.argv.slice(2); if (!input || !output) throw new Error( "Usage: npm run render:map -- ", ); const terrain = JSON.parse( gunzipSync(await readFile(input), { maxOutputLength: 256 * 1024 * 1024, }).toString(), ); const parent = dirname(resolve(output)); await mkdir(parent, { recursive: true }); const temporary = await mkdtemp(resolve(parent, ".minegeo-map-")); try { const report = await renderSnapshot(terrain, [], temporary); await copyFile(resolve(temporary, "map.webp"), resolve(output)); console.log( `Rendered ${report.map.width} × ${report.map.height} aerial map from Y=${report.map.cameraY}: ${output}`, ); } finally { if (!temporary.startsWith(parent + sep)) throw new Error("Refusing to remove a map directory outside its parent"); await rm(temporary, { recursive: true, force: true }); }