UNPKG

jinaga

Version:

Data management for web and mobile applications.

85 lines 4.14 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.keyToReference = exports.factKey = exports.execRequest = exports.withTransaction = exports.withDatabase = void 0; function upgradingToVersion({ newVersion, oldVersion }, ver) { return newVersion && newVersion >= ver && oldVersion < ver; } function openDatabase(indexName) { return new Promise((resolve, reject) => { const request = self.indexedDB.open(indexName, 2); request.onsuccess = _ => resolve(request.result); request.onerror = _ => reject(`Error opening database ${indexName}: ${JSON.stringify(request.error, null, 2)}.`); request.onupgradeneeded = ev => { const db = request.result; if (upgradingToVersion(ev, 1)) { db.createObjectStore('login'); db.createObjectStore('fact'); db.createObjectStore('ancestor'); const edgeObjectStore = db.createObjectStore('edge', { keyPath: ['successor', 'predecessor', 'role'] }); edgeObjectStore.createIndex('predecessor', ['predecessor', 'role'], { unique: false }); edgeObjectStore.createIndex('successor', ['successor', 'role'], { unique: false }); edgeObjectStore.createIndex('all', 'successor', { unique: false }); db.createObjectStore('queue'); } if (upgradingToVersion(ev, 2)) { db.createObjectStore('bookmark'); const specificationObjectStore = db.createObjectStore('specification'); specificationObjectStore.createIndex('mru', '', { unique: false }); } }; }); } function withDatabase(indexName, action) { return __awaiter(this, void 0, void 0, function* () { const db = yield openDatabase(indexName); const result = yield action(db); db.close(); return result; }); } exports.withDatabase = withDatabase; function withTransaction(db, storeNames, mode, action) { return __awaiter(this, void 0, void 0, function* () { const transaction = db.transaction(storeNames, mode); const transactionComplete = new Promise((resolve, reject) => { transaction.oncomplete = _ => resolve(); transaction.onerror = _ => { var _a; return reject(`Error executing transaction ${JSON.stringify((_a = transaction.error) === null || _a === void 0 ? void 0 : _a.message, null, 2)}`); }; }); const [result, v] = yield Promise.all([action(transaction), transactionComplete]); return result; }); } exports.withTransaction = withTransaction; function execRequest(request) { return new Promise((resolve, reject) => { request.onsuccess = (_) => resolve(request.result); request.onerror = (_) => { var _a; return reject(`Error executing request ${JSON.stringify((_a = request.error) === null || _a === void 0 ? void 0 : _a.message, null, 2)}`); }; }); } exports.execRequest = execRequest; function factKey(fact) { return `${fact.type}:${fact.hash}`; } exports.factKey = factKey; function keyToReference(key) { const regex = /([^:]*):(.*)/; const match = regex.exec(key); if (!match) { throw new Error(`Invalid key ${key}`); } const [_, type, hash] = match; return { type, hash }; } exports.keyToReference = keyToReference; //# sourceMappingURL=driver.js.map