import { mkdtempSync, rmSync } from "node:fs"; import os from "node:os"; import path from "node:path"; import { OfficeError } from "./errors.ts"; export const PREVIEW_PREFIX = "pi-word-pdf-preview-"; export const WORK_PREFIX = "pi-word-pdf-work-"; export function makePreviewDirectory(): string { return mkdtempSync(path.join(os.tmpdir(), PREVIEW_PREFIX)); } export function makeWorkDirectory(): string { return mkdtempSync(path.join(os.tmpdir(), WORK_PREFIX)); } export function removeWorkDirectory(directory: string): void { rmSync(directory, { recursive: true, force: true }); } export function cleanupPreviewDirectory(directory: string): void { const resolved = path.resolve(directory); const tempRoot = path.resolve(os.tmpdir()); if (path.dirname(resolved) !== tempRoot || !path.basename(resolved).startsWith(PREVIEW_PREFIX)) { throw new OfficeError("只允许清理由 pi-word-pdf 创建的系统临时预览目录。", "UNSAFE_CLEANUP_PATH", { path: directory }); } rmSync(resolved, { recursive: true, force: true }); }