alinea
Version:
[](https://npmjs.org/package/alinea) [](https://packagephobia.com/result?p=alinea)
47 lines (45 loc) • 1.08 kB
JavaScript
import {
Doc
} from "../chunks/chunk-OYP4EJOA.js";
import "../chunks/chunk-O6EXLFU2.js";
import "../chunks/chunk-U5RRZUYZ.js";
// src/core/Doc.ts
import { Field } from "./Field.js";
import { Type } from "./Type.js";
import { entries } from "./util/Objects.js";
var ROOT_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(ROOT_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(ROOT_KEY);
const data = Type.shape(type).fromY(docRoot);
return {
path: data.path,
title: data.title,
data
};
}
export {
ROOT_KEY,
applyEntryData,
createYDoc,
parseYDoc
};