UNPKG

alinea

Version:
58 lines (56 loc) 1.75 kB
import "../../chunks/chunk-NZLE2WMY.js"; // src/backend/resolver/ParsePreview.ts import { JsonLoader } from "alinea/backend/loader/JsonLoader"; import { Entry } from "alinea/core"; import { createRecord, parseRecord } from "alinea/core/EntryRecord"; import { applyFilePatch } from "alinea/core/source/FilePatch"; import { createEntryRow } from "alinea/core/util/EntryRows"; import { decodePreviewPayload } from "alinea/preview/PreviewPayload"; var decoder = new TextDecoder(); function createPreviewParser(local) { return { async parse(preview, sync) { if (!(preview && "payload" in preview)) return preview; const payload = await decodePreviewPayload(preview.payload); if (local.sha !== payload.contentHash) { await sync(); if (local.sha !== payload.contentHash) return; } const entry = await local.first({ select: Entry, id: payload.entryId, locale: payload.locale, status: "preferDraft" }); if (!entry) return; const baseText = decoder.decode( JsonLoader.format( local.config.schema, createRecord(entry, entry.status) ) ); let updatedText; try { updatedText = await applyFilePatch(baseText, payload.patch); } catch { return; } const { data } = parseRecord(JSON.parse(updatedText)); const { rowHash: _rowHash, fileHash: _fileHash, ...withoutHashes } = entry; const patched = await createEntryRow( local.config, { ...withoutHashes, title: data.title, data, path: entry.path }, entry.status ); return { entry: patched }; } }; } export { createPreviewParser };