From a56a5fe1f535bd7e78110358d73623b7553ebeca Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 26 Dec 2025 16:00:21 +0200 Subject: [PATCH] feat(icon_pack): check if JSON is parsable --- apps/server/src/services/icon_packs.spec.ts | 12 ++++++++++++ apps/server/src/services/icon_packs.ts | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 apps/server/src/services/icon_packs.spec.ts create mode 100644 apps/server/src/services/icon_packs.ts diff --git a/apps/server/src/services/icon_packs.spec.ts b/apps/server/src/services/icon_packs.spec.ts new file mode 100644 index 000000000..1dd75d71f --- /dev/null +++ b/apps/server/src/services/icon_packs.spec.ts @@ -0,0 +1,12 @@ +import { buildNote } from "../test/becca_easy_mocking"; +import { processIconPack } from "./icon_packs"; + +describe("Processing icon packs", () => { + it("doesn't crash if icon pack is incorrect type", () => { + const iconPack = processIconPack(buildNote({ + type: "text", + content: "Foo" + })); + expect(iconPack).toBeFalsy(); + }); +}); diff --git a/apps/server/src/services/icon_packs.ts b/apps/server/src/services/icon_packs.ts new file mode 100644 index 000000000..1b9ee166c --- /dev/null +++ b/apps/server/src/services/icon_packs.ts @@ -0,0 +1,18 @@ +import type BNote from "../becca/entities/bnote"; +import log from "./log"; + +interface Manifest { + name: string; + prefix: string; + icons: Record; +} + +export function processIconPack(iconPackNote: BNote) { + const manifest = iconPackNote.getJsonContentSafely(); + if (!manifest) { + log.error(`Icon pack is missing JSON manifest (or has syntax errors): ${iconPackNote.title} (${iconPackNote.noteId})`); + return; + } + + console.log("Got manifest", manifest); +}