// ============================================================ // canvas/sidecar.ts — Sidecar 元数据操作 // // 职责: // - 读取/写入旁加载 JSON 元数据文件 // - sidecar 文件与媒体文件同目录、同名、.json 扩展名 // ============================================================ import fs from 'node:fs'; import path from 'node:path'; /** 生成 sidecar JSON 文件路径:同目录、同名、.json 扩展名 */ export function sidecarPathForMedia(filePath: string): string { const dir = path.dirname(filePath); const baseName = path.basename(filePath, path.extname(filePath)); return path.join(dir, `${baseName}.json`); } /** * 读取旁加载元数据。 * @param filePath - 媒体文件路径 * @returns 元数据对象,文件不存在返回 null */ export function readSidecarFile(filePath: string): object | null { const sidecarPath = sidecarPathForMedia(filePath); if (!fs.existsSync(sidecarPath)) return null; try { const content = fs.readFileSync(sidecarPath, 'utf-8'); return JSON.parse(content); } catch { return null; } } /** * 写入旁加载元数据(自动创建目录)。 * @param filePath - 媒体文件路径 * @param metadata - 元数据对象 */ export function writeSidecarFile(filePath: string, metadata: object): void { const sidecarPath = sidecarPathForMedia(filePath); const dir = path.dirname(sidecarPath); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } fs.writeFileSync(sidecarPath, JSON.stringify(metadata, null, 2), 'utf-8'); }