From 5380a574ccf8b241f968898192adf49ab6acb99c Mon Sep 17 00:00:00 2001 From: Chris Baume Date: Sun, 8 Mar 2026 14:08:26 +0000 Subject: [PATCH 1/2] Write manifest when saving OBZ --- src/processors/obfProcessor.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/processors/obfProcessor.ts b/src/processors/obfProcessor.ts index 21b0c4e..5b2e8af 100644 --- a/src/processors/obfProcessor.ts +++ b/src/processors/obfProcessor.ts @@ -741,6 +741,19 @@ class ObfProcessor extends BaseProcessor { data: new TextEncoder().encode(obfContent), }; }); + const manifest: ObfManifest = { + format: OBF_FORMAT_VERSION, + root: tree.metadata.defaultHomePageId, + paths: { + boards: Object.fromEntries(Object.entries(tree.pages).map(([id, page]) => [id, page.id])), + images: {}, //TODO Add support for saving images as files + sounds: {}, //TODO Add support for saving sounds as files + }, + }; + files.push({ + name: 'manifest.json', + data: new TextEncoder().encode(JSON.stringify(manifest)), + }); const fileExists = await pathExists(outputPath); this.zipFile = await this.options.zipAdapter( fileExists ? outputPath : undefined, From c4771be3164113bed24dc54ab9a031df2275340e Mon Sep 17 00:00:00 2001 From: Chris Baume Date: Sun, 8 Mar 2026 15:33:33 +0000 Subject: [PATCH 2/2] Add .obf to page ID --- src/processors/obfProcessor.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/processors/obfProcessor.ts b/src/processors/obfProcessor.ts index 5b2e8af..00965c5 100644 --- a/src/processors/obfProcessor.ts +++ b/src/processors/obfProcessor.ts @@ -732,10 +732,11 @@ class ObfProcessor extends BaseProcessor { const obfBoard = this.createObfBoardFromPage(rootPage, 'Exported Board', tree.metadata); await writeTextToPath(outputPath, JSON.stringify(obfBoard, null, 2)); } else { + const getPageFilename = (id: string): string => (id.endsWith('.obf') ? id : `${id}.obf`); const files = Object.values(tree.pages).map((page) => { const obfBoard = this.createObfBoardFromPage(page, 'Board', tree.metadata); const obfContent = JSON.stringify(obfBoard, null, 2); - const name = page.id.endsWith('.obf') ? page.id : `${page.id}.obf`; + const name = getPageFilename(page.id); return { name, data: new TextEncoder().encode(obfContent), @@ -745,7 +746,9 @@ class ObfProcessor extends BaseProcessor { format: OBF_FORMAT_VERSION, root: tree.metadata.defaultHomePageId, paths: { - boards: Object.fromEntries(Object.entries(tree.pages).map(([id, page]) => [id, page.id])), + boards: Object.fromEntries( + Object.entries(tree.pages).map(([id, page]) => [id, getPageFilename(page.id)]) + ), images: {}, //TODO Add support for saving images as files sounds: {}, //TODO Add support for saving sounds as files },