jinaga
Version:
Data management for web and mobile applications.
85 lines • 4.14 kB
JavaScript
;
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