alinea
Version:
Headless git-based CMS
45 lines (43 loc) • 1.06 kB
JavaScript
import {
Doc
} from "../chunks/chunk-QUIANN6B.js";
import "../chunks/chunk-AJJSW27C.js";
import "../chunks/chunk-NZLE2WMY.js";
// src/core/Doc.ts
import { Field } from "./Field.js";
import { Type } from "./Type.js";
import { entries } from "./util/Objects.js";
var DOC_KEY = "#root";
function createYDoc(type, entry) {
const doc = new Doc({ gc: false });
if (entry) applyEntryData(doc, type, entry);
return doc;
}
function applyEntryData(doc, type, entry) {
const clientID = doc.clientID;
doc.clientID = 1;
doc.transact(() => {
const docRoot = doc.getMap(DOC_KEY);
for (const [key, field] of entries(type)) {
if (key === "path") continue;
const contents = entry.data[key];
docRoot.set(key, Field.shape(field).toY(contents));
}
});
doc.clientID = clientID;
}
function parseYDoc(type, doc) {
const docRoot = doc.getMap(DOC_KEY);
const data = Type.shape(type).fromY(docRoot);
return {
path: data.path,
title: data.title,
data
};
}
export {
DOC_KEY,
applyEntryData,
createYDoc,
parseYDoc
};