UNPKG

@x5e/gink

Version:

an eventually consistent database

100 lines 4.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.construct = construct; exports.interpret = interpret; exports.toJson = toJson; 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 Database_1 = require("./Database"); 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"); const Accumulator_1 = require("./Accumulator"); // TODO: maybe make address the first argument, and then database second and optional async function construct(address, database, containerBuilder) { if (database === undefined) { database = Database_1.Database.recent; } if (address.timestamp === -1) { if (address.offset === builders_1.Behavior.DIRECTORY) return Directory_1.Directory.get(database, address); if (address.offset === builders_1.Behavior.SEQUENCE) return Sequence_1.Sequence.get(database, address); if (address.offset === builders_1.Behavior.BOX) return Box_1.Box.get(database, address); if (address.offset === builders_1.Behavior.PAIR_MAP) return PairMap_1.PairMap.get(database, address); if (address.offset === builders_1.Behavior.PAIR_SET) return PairSet_1.PairSet.get(database, address); if (address.offset === builders_1.Behavior.KEY_SET) return KeySet_1.KeySet.get(database, address); if (address.offset === builders_1.Behavior.GROUP) return Group_1.Group.get(database, address); if (address.offset === builders_1.Behavior.PROPERTY) return Property_1.Property.get(database, address); if (address.offset === builders_1.Behavior.VERTEX) return Vertex_1.Vertex.get(database, address); if (address.offset === builders_1.Behavior.ACCUMULATOR) return Accumulator_1.Accumulator.get(database, address); } if (containerBuilder === undefined) { const containerBytes = await database.store.getContainerBytes(address); if (!containerBytes) { return null; } containerBuilder = (builders_1.ContainerBuilder.deserializeBinary(containerBytes)); } if (containerBuilder.getBehavior() === builders_1.Behavior.BOX) return Box_1.Box.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.SEQUENCE) return Sequence_1.Sequence.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.KEY_SET) return KeySet_1.KeySet.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.DIRECTORY) return Directory_1.Directory.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.PAIR_SET) return PairSet_1.PairSet.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.PAIR_MAP) return PairMap_1.PairMap.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.VERTEX) return Vertex_1.Vertex.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.EDGE_TYPE) return EdgeType_1.EdgeType.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.PROPERTY) return Property_1.Property.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.GROUP) return Group_1.Group.get(database, address); if (containerBuilder.getBehavior() === builders_1.Behavior.ACCUMULATOR) return Accumulator_1.Accumulator.get(database, address); throw new Error(`container type not recognized/implemented: ${containerBuilder.getBehavior()}`); } 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(muid, database); } if (Array.isArray(entry.storageKey) && entry.storageKey.length === 3) { // For a MuidTuple effective key return await construct((0, utils_1.muidTupleToMuid)(entry.storageKey), database); } throw new Error(`don't know how to interpret entry: ${JSON.stringify(entry)}`); } 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); } //# sourceMappingURL=factories.js.map