UNPKG

alinea

Version:
45 lines (43 loc) 1.28 kB
import "../../chunks/chunk-NZLE2WMY.js"; // src/core/source/SourceExport.ts import * as base64 from "alinea/core/util/BufferToBase64"; import { entries, fromEntries } from "alinea/core/util/Objects"; import { accumulate } from "../util/Async.js"; import { MemorySource } from "./MemorySource.js"; import { ReadonlyTree } from "./Tree.js"; var encoder = new TextEncoder(); var decoder = new TextDecoder(); async function exportSource(source) { const tree = await source.getTree(); const shas = Array.from(tree.index(), ([, sha]) => sha); const fromSource = await accumulate(source.getBlobs(shas)); const blobs = fromEntries( fromSource.map(([sha, blob]) => { return [sha, decoder.decode(blob)]; }) ); return { tree: tree.toJSON(), blobs: await base64.encode(encoder.encode(JSON.stringify(blobs))) }; } async function importSource(exported) { const tree = new ReadonlyTree(exported.tree); const blobs = JSON.parse( decoder.decode(await base64.decode(exported.blobs)) ); const source = new MemorySource( tree, new Map( entries(blobs).map(([sha, contents]) => { const buffer = encoder.encode(contents); return [sha, buffer]; }) ) ); return source; } export { exportSource, importSource };