From acb0991d054100350d5b80a242025b830f947e15 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 23 Jun 2025 18:24:59 +0300 Subject: [PATCH] refactor(export/zip): separate building provider into own method --- apps/server/src/services/export/zip.ts | 42 +++++++++---------- .../src/services/export/zip/share_theme.ts | 6 ++- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/apps/server/src/services/export/zip.ts b/apps/server/src/services/export/zip.ts index de84a580d..fe767662b 100644 --- a/apps/server/src/services/export/zip.ts +++ b/apps/server/src/services/export/zip.ts @@ -20,7 +20,7 @@ import type BBranch from "../../becca/entities/bbranch.js"; import type { Response } from "express"; import type { NoteMetaFile } from "../meta/note_meta.js"; import HtmlExportProvider from "./zip/html.js"; -import { AdvancedExportOptions, ZipExportProvider, ZipExportProviderData } from "./zip/abstract_provider.js"; +import { AdvancedExportOptions, ZipExportProviderData } from "./zip/abstract_provider.js"; import MarkdownExportProvider from "./zip/markdown.js"; import ShareThemeExportProvider from "./zip/share_theme.js"; import type BNote from "../../becca/entities/bnote.js"; @@ -36,6 +36,25 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h const noteIdToMeta: Record = {}; + function buildProvider() { + const providerData: ZipExportProviderData = { + getNoteTargetUrl, + metaFile, + archive, + rootMeta: rootMeta! + }; + switch (format) { + case "html": + return new HtmlExportProvider(providerData); + case "markdown": + return new MarkdownExportProvider(providerData); + case "share": + return new ShareThemeExportProvider(providerData); + default: + throw new Error(); + } + } + function getUniqueFilename(existingFileNames: Record, fileName: string) { const lcFileName = fileName.toLowerCase(); @@ -388,26 +407,7 @@ async function exportToZip(taskContext: TaskContext, branch: BBranch, format: "h files: [rootMeta] }; - let provider: ZipExportProvider; - const providerData: ZipExportProviderData = { - getNoteTargetUrl, - metaFile, - archive, - rootMeta - }; - switch (format) { - case "html": - provider = new HtmlExportProvider(providerData); - break; - case "markdown": - provider = new MarkdownExportProvider(providerData); - break; - case "share": - provider = new ShareThemeExportProvider(providerData); - break; - default: - throw new Error(); - } + const provider= buildProvider(); provider.prepareMeta(); diff --git a/apps/server/src/services/export/zip/share_theme.ts b/apps/server/src/services/export/zip/share_theme.ts index 50339d20a..07dbf5f7c 100644 --- a/apps/server/src/services/export/zip/share_theme.ts +++ b/apps/server/src/services/export/zip/share_theme.ts @@ -35,13 +35,15 @@ export default class ShareThemeExportProvider extends ZipExportProvider { } } - prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote, branch: BBranch): string | Buffer { + prepareContent(title: string, content: string | Buffer, noteMeta: NoteMeta, note: BNote | undefined, branch: BBranch): string | Buffer { if (!noteMeta?.notePath?.length) { throw new Error("Missing note path."); } const basePath = "../".repeat(noteMeta.notePath.length - 1); - content = renderNoteForExport(note, branch, basePath); + if (note) { + content = renderNoteForExport(note, branch, basePath); + } return content; }