alinea
Version:
Headless git-based CMS
45 lines (43 loc) • 1.28 kB
JavaScript
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
};