UNPKG

jinaga

Version:

Data management for web and mobile applications.

72 lines 3 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TransientFork = void 0; const sorter_1 = require("../fact/sorter"); const storage_1 = require("../storage"); const trace_1 = require("../util/trace"); const serialize_1 = require("./serialize"); class TransientFork { constructor(storage, client) { this.storage = storage; this.client = client; } close() { return Promise.resolve(); } save(envelopes) { return __awaiter(this, void 0, void 0, function* () { yield this.client.save(envelopes); }); } load(references) { return __awaiter(this, void 0, void 0, function* () { const known = yield this.storage.load(references); const remaining = references.filter(reference => !known.some((0, storage_1.factEnvelopeEquals)(reference))); if (remaining.length === 0) { return known; } else { const records = yield this.loadEnvelopes(remaining); return records.concat(known); } }); } loadEnvelopes(references) { return __awaiter(this, void 0, void 0, function* () { const sorter = new sorter_1.TopologicalSorter(); let loaded = []; for (let start = 0; start < references.length; start += 300) { const chunk = references.slice(start, start + 300); const response = yield this.client.load((0, serialize_1.serializeLoad)(chunk)); const facts = sorter.sort(response.facts, (p, f) => f); const envelopes = facts.map(fact => { return { fact: fact, signatures: [] }; }); const saved = yield this.storage.save(envelopes); if (saved.length > 0) { trace_1.Trace.counter("facts_saved", saved.length); } loaded = loaded.concat(envelopes); } return loaded; }); } processQueueNow() { // No-op for transient fork return Promise.resolve(); } } exports.TransientFork = TransientFork; //# sourceMappingURL=transient-fork.js.map