UNPKG

@x5e/gink

Version:

an eventually consistent database

88 lines 4.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toJson = exports.interpret = exports.construct = void 0; const Container_1 = require("./Container"); const Directory_1 = require("./Directory"); const Sequence_1 = require("./Sequence"); const Box_1 = require("./Box"); const Group_1 = require("./Group"); const PairSet_1 = require("./PairSet"); const PairMap_1 = require("./PairMap"); const KeySet_1 = require("./KeySet"); const utils_1 = require("./utils"); const builders_1 = require("./builders"); const Property_1 = require("./Property"); const Vertex_1 = require("./Vertex"); const EdgeType_1 = require("./EdgeType"); async function construct(database, address, containerBuilder) { if (address.timestamp === -1) { if (address.offset === builders_1.Behavior.DIRECTORY) return new Directory_1.Directory(database, address); if (address.offset === builders_1.Behavior.SEQUENCE) return new Sequence_1.Sequence(database, address); if (address.offset === builders_1.Behavior.BOX) return new Box_1.Box(database, address); if (address.offset === builders_1.Behavior.PAIR_MAP) return new PairMap_1.PairMap(database, address); if (address.offset === builders_1.Behavior.PAIR_SET) return new PairSet_1.PairSet(database, address); if (address.offset === builders_1.Behavior.KEY_SET) return new KeySet_1.KeySet(database, address); if (address.offset === builders_1.Behavior.GROUP) return new Group_1.Group(database, address); if (address.offset === builders_1.Behavior.PROPERTY) return new Property_1.Property(database, address); if (address.offset === builders_1.Behavior.VERTEX) return new Vertex_1.Vertex(database, address); } if (containerBuilder === undefined) { const containerBytes = (0, utils_1.ensure)(await database.store.getContainerBytes(address)); containerBuilder = (builders_1.ContainerBuilder.deserializeBinary(containerBytes)); } if (containerBuilder.getBehavior() === builders_1.Behavior.BOX) return new Box_1.Box(database, address, containerBuilder); if (containerBuilder.getBehavior() === builders_1.Behavior.SEQUENCE) return new Sequence_1.Sequence(database, address, containerBuilder); if (containerBuilder.getBehavior() === builders_1.Behavior.KEY_SET) return new KeySet_1.KeySet(database, address, containerBuilder); if (containerBuilder.getBehavior() === builders_1.Behavior.DIRECTORY) return new Directory_1.Directory(database, address, containerBuilder); if (containerBuilder.getBehavior() === builders_1.Behavior.PAIR_SET) return new PairSet_1.PairSet(database, address, containerBuilder); if (containerBuilder.getBehavior() === builders_1.Behavior.PAIR_MAP) return new PairMap_1.PairMap(database, address, containerBuilder); if (containerBuilder.getBehavior() === builders_1.Behavior.VERTEX) return new Vertex_1.Vertex(database, address, containerBuilder); if (containerBuilder.getBehavior() === builders_1.Behavior.EDGE_TYPE) return new EdgeType_1.EdgeType(database, address, containerBuilder); if (containerBuilder.getBehavior() === builders_1.Behavior.PROPERTY) return new Property_1.Property(database, address, containerBuilder); if (containerBuilder.getBehavior() === builders_1.Behavior.GROUP) return new Group_1.Group(database, address, containerBuilder); throw new Error(`container type not recognized/implemented: ${containerBuilder.getBehavior()}`); } exports.construct = construct; async function interpret(entry, database) { if (entry === undefined || entry.deletion) { return undefined; } if (entry.value !== undefined) return entry.value; if (entry.pointeeList.length > 0) { const muid = (0, utils_1.rehydrate)(entry.pointeeList[0]); return construct(database, muid); } if (Array.isArray(entry.storageKey) && entry.storageKey.length === 3) { // For a MuidTuple effective key return await construct(database, (0, utils_1.muidTupleToMuid)(entry.storageKey)); } throw new Error(`don't know how to interpret entry: ${JSON.stringify(entry)}`); } exports.interpret = interpret; async function toJson(value, indent = false, asOf, seen) { return value instanceof Container_1.Container ? await value.toJson(indent, asOf, seen) : (0, utils_1.valueToJson)(value); } exports.toJson = toJson; //# sourceMappingURL=factories.js.map