alinea
Version:
Headless git-based CMS
56 lines (54 loc) • 1.34 kB
JavaScript
import "../../chunks/chunk-NZLE2WMY.js";
// src/core/db/CommitRequest.ts
function commitChanges(changes) {
return changes.map((change) => {
switch (change.op) {
case "add":
return {
...change,
op: "addContent",
contents: new TextDecoder().decode(change.contents)
};
case "delete":
return {
...change,
op: "deleteContent"
};
}
});
}
function sourceChanges(request) {
return {
fromSha: request.fromSha,
changes: request.changes.filter(
(change) => change.op === "addContent" || change.op === "deleteContent"
).map((change) => {
switch (change.op) {
case "deleteContent":
return {
...change,
op: "delete"
};
case "addContent":
return {
...change,
op: "add",
contents: new TextEncoder().encode(change.contents)
};
}
})
};
}
function checkCommit(tree, request) {
if (tree.sha === request.fromSha) return;
for (const [path, sha] of request.checks) {
const entry = tree.get(path);
if (!entry) throw new Error(`Missing entry for ${path}`);
if (entry.sha !== sha) throw new Error(`Entry ${path} has changed`);
}
}
export {
checkCommit,
commitChanges,
sourceChanges
};