UNPKG

jsoniq

Version:

JSONiq implementation for JavaScript

107 lines (105 loc) 16.2 kB
"use strict"; /// <reference path="../../../typings/lodash/lodash.d.ts" /> var _ = require("lodash"); class IndexedDBCollection { constructor(store, pul) { if (store["autoIncrement"] === true) { throw new Error("Auto-generated keys are not supported."); } this.name = store.name; this.keyPath = store.keyPath; this.pul = pul; } keyMustBeProvided() { return !this.keyPath; } keyCannotBeProvided() { return this.keyPath !== undefined; } //http://www.w3.org/TR/IndexedDB/#dfn-steps-for-extracting-a-key-from-a-value-using-a-key-path //TODO: string[] type for keypath is not supported yet. getKey(value, keyPath) { if (!keyPath) { keyPath = this.keyPath.split("."); } if (keyPath.length === 0) { return value; } var current = keyPath[0]; var remaining = keyPath.slice(1); if (current === "") { return value; } if (!_.isObject(value)) { return undefined; } return this.getKey(value[current], remaining); } getId(id, value) { if (id && value && this.keyCannotBeProvided()) { throw new Error("Key cannot be provided"); } else if (!id && this.keyMustBeProvided()) { throw new Error("Key must be provided"); } if (!id && value) { id = this.getKey(value); if (id === undefined) { throw new Error("Not key found for keyPath " + this.keyPath + " and object " + JSON.stringify(value)); } } if (!id && !value) { throw new Error("At least the key or the value must be provided."); } return this.name + ":" + id; } insert(document, id) { this.pul.insert(this.getId(id, document), document); return this; } remove(id) { this.pul.remove(this.getId(id)); return this; } insertIntoObject(id, ordPath, pairs) { this.pul.insertIntoObject(this.getId(id), ordPath, pairs); return this; } insertIntoArray(id, ordPath, position, items) { this.pul.insertIntoArray(this.getId(id), ordPath, position, items); return this; } deleteFromObject(id, ordPath, keys) { this.pul.deleteFromObject(this.getId(id), ordPath, keys); return this; } deleteFromArray(id, ordPath, position) { this.pul.deleteFromArray(this.getId(id), ordPath, position); return this; } replaceInArray(id, ordPath, position, item) { this.pul.replaceInArray(this.getId(id), ordPath, position, item); return this; } replaceInObject(id, ordPath, key, item) { this.pul.renameInObject(this.getId(id), ordPath, key, item); return this; } renameInObject(id, ordPath, key, newKey) { this.pul.renameInObject(this.getId(id), ordPath, key, newKey); return this; } reset() { this.pul.udps.forEach((udp, udps, index) => { if (index === 0) { _.remove(udps, udp => { var prefix = this.name + ":"; return udp.id.substring(0, prefix.length) === prefix; }); } }); return this; } } exports.default = IndexedDBCollection; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9zdG9yZXMvaW5kZXhlZGRiL0luZGV4ZWREQkNvbGxlY3Rpb24udHMiXSwibmFtZXMiOlsiSW5kZXhlZERCQ29sbGVjdGlvbiIsIkluZGV4ZWREQkNvbGxlY3Rpb24uY29uc3RydWN0b3IiLCJJbmRleGVkREJDb2xsZWN0aW9uLmtleU11c3RCZVByb3ZpZGVkIiwiSW5kZXhlZERCQ29sbGVjdGlvbi5rZXlDYW5ub3RCZVByb3ZpZGVkIiwiSW5kZXhlZERCQ29sbGVjdGlvbi5nZXRLZXkiLCJJbmRleGVkREJDb2xsZWN0aW9uLmdldElkIiwiSW5kZXhlZERCQ29sbGVjdGlvbi5pbnNlcnQiLCJJbmRleGVkREJDb2xsZWN0aW9uLnJlbW92ZSIsIkluZGV4ZWREQkNvbGxlY3Rpb24uaW5zZXJ0SW50b09iamVjdCIsIkluZGV4ZWREQkNvbGxlY3Rpb24uaW5zZXJ0SW50b0FycmF5IiwiSW5kZXhlZERCQ29sbGVjdGlvbi5kZWxldGVGcm9tT2JqZWN0IiwiSW5kZXhlZERCQ29sbGVjdGlvbi5kZWxldGVGcm9tQXJyYXkiLCJJbmRleGVkREJDb2xsZWN0aW9uLnJlcGxhY2VJbkFycmF5IiwiSW5kZXhlZERCQ29sbGVjdGlvbi5yZXBsYWNlSW5PYmplY3QiLCJJbmRleGVkREJDb2xsZWN0aW9uLnJlbmFtZUluT2JqZWN0IiwiSW5kZXhlZERCQ29sbGVjdGlvbi5yZXNldCJdLCJtYXBwaW5ncyI6IjtBQUFBLDREQUE0RDtBQUM1RCxJQUFZLENBQUMsV0FBTSxRQUFRLENBQUMsQ0FBQTtBQUs1QjtJQW9ESUEsWUFBWUEsS0FBcUJBLEVBQUVBLEdBQVFBO1FBQ3ZDQyxFQUFFQSxDQUFBQSxDQUFDQSxLQUFLQSxDQUFDQSxlQUFlQSxDQUFDQSxLQUFLQSxJQUFJQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNqQ0EsTUFBTUEsSUFBSUEsS0FBS0EsQ0FBQ0Esd0NBQXdDQSxDQUFDQSxDQUFDQTtRQUM5REEsQ0FBQ0E7UUFDREEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsS0FBS0EsQ0FBQ0EsSUFBSUEsQ0FBQ0E7UUFDdkJBLElBQUlBLENBQUNBLE9BQU9BLEdBQUdBLEtBQUtBLENBQUNBLE9BQU9BLENBQUNBO1FBQzdCQSxJQUFJQSxDQUFDQSxHQUFHQSxHQUFHQSxHQUFHQSxDQUFDQTtJQUNuQkEsQ0FBQ0E7SUFyRE9ELGlCQUFpQkE7UUFDckJFLE1BQU1BLENBQUNBLENBQUNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBO0lBQ3pCQSxDQUFDQTtJQUVPRixtQkFBbUJBO1FBQ3ZCRyxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxLQUFLQSxTQUFTQSxDQUFDQTtJQUN0Q0EsQ0FBQ0E7SUFFREgsOEZBQThGQTtJQUM5RkEsdURBQXVEQTtJQUMvQ0EsTUFBTUEsQ0FBQ0EsS0FBVUEsRUFBRUEsT0FBa0JBO1FBQ3pDSSxFQUFFQSxDQUFBQSxDQUFDQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUNWQSxPQUFPQSxHQUFHQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxLQUFLQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUN0Q0EsQ0FBQ0E7UUFDREEsRUFBRUEsQ0FBQUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsTUFBTUEsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDdEJBLE1BQU1BLENBQUNBLEtBQUtBLENBQUNBO1FBQ2pCQSxDQUFDQTtRQUNEQSxJQUFJQSxPQUFPQSxHQUFHQSxPQUFPQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUN6QkEsSUFBSUEsU0FBU0EsR0FBR0EsT0FBT0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDakNBLEVBQUVBLENBQUFBLENBQUNBLE9BQU9BLEtBQUtBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1lBQ2hCQSxNQUFNQSxDQUFDQSxLQUFLQSxDQUFDQTtRQUNqQkEsQ0FBQ0E7UUFDREEsRUFBRUEsQ0FBQUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDcEJBLE1BQU1BLENBQUNBLFNBQVNBLENBQUNBO1FBQ3JCQSxDQUFDQTtRQUNEQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxLQUFLQSxDQUFDQSxPQUFPQSxDQUFDQSxFQUFFQSxTQUFTQSxDQUFDQSxDQUFDQTtJQUNsREEsQ0FBQ0E7SUFFT0osS0FBS0EsQ0FBQ0EsRUFBV0EsRUFBRUEsS0FBV0E7UUFDbENLLEVBQUVBLENBQUFBLENBQUNBLEVBQUVBLElBQUlBLEtBQUtBLElBQUlBLElBQUlBLENBQUNBLG1CQUFtQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDM0NBLE1BQU1BLElBQUlBLEtBQUtBLENBQUNBLHdCQUF3QkEsQ0FBQ0EsQ0FBQ0E7UUFDOUNBLENBQUNBO1FBQUNBLElBQUlBLENBQUNBLEVBQUVBLENBQUFBLENBQUNBLENBQUNBLEVBQUVBLElBQUlBLElBQUlBLENBQUNBLGlCQUFpQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDeENBLE1BQU1BLElBQUlBLEtBQUtBLENBQUNBLHNCQUFzQkEsQ0FBQ0EsQ0FBQ0E7UUFDNUNBLENBQUNBO1FBQ0RBLEVBQUVBLENBQUFBLENBQUNBLENBQUNBLEVBQUVBLElBQUlBLEtBQUtBLENBQUNBLENBQUNBLENBQUNBO1lBQ2RBLEVBQUVBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO1lBQ3hCQSxFQUFFQSxDQUFBQSxDQUFDQSxFQUFFQSxLQUFLQSxTQUFTQSxDQUFDQSxDQUFDQSxDQUFDQTtnQkFDbEJBLE1BQU1BLElBQUlBLEtBQUtBLENBQUNBLDRCQUE0QkEsR0FBR0EsSUFBSUEsQ0FBQ0EsT0FBT0EsR0FBR0EsY0FBY0EsR0FBR0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDMUdBLENBQUNBO1FBQ0xBLENBQUNBO1FBQ0RBLEVBQUVBLENBQUFBLENBQUNBLENBQUNBLEVBQUVBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBLENBQUNBO1lBQ2ZBLE1BQU1BLElBQUlBLEtBQUtBLENBQUNBLGlEQUFpREEsQ0FBQ0EsQ0FBQ0E7UUFDdkVBLENBQUNBO1FBQ0RBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLEdBQUdBLEdBQUdBLEVBQUVBLENBQUNBO0lBQ2hDQSxDQUFDQTtJQVdETCxNQUFNQSxDQUFDQSxRQUFhQSxFQUFFQSxFQUFXQTtRQUM3Qk0sSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBRUEsRUFBRUEsUUFBUUEsQ0FBQ0EsRUFBRUEsUUFBUUEsQ0FBQ0EsQ0FBQ0E7UUFDcERBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2hCQSxDQUFDQTtJQUVETixNQUFNQSxDQUFDQSxFQUFVQTtRQUNiTyxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUNoQ0EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDaEJBLENBQUNBO0lBRURQLGdCQUFnQkEsQ0FBQ0EsRUFBVUEsRUFBRUEsT0FBaUJBLEVBQUVBLEtBQVNBO1FBQ3JEUSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxnQkFBZ0JBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLE9BQU9BLEVBQUVBLEtBQUtBLENBQUNBLENBQUNBO1FBQzFEQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNoQkEsQ0FBQ0E7SUFFRFIsZUFBZUEsQ0FBQ0EsRUFBVUEsRUFBRUEsT0FBaUJBLEVBQUVBLFFBQWdCQSxFQUFFQSxLQUFZQTtRQUN6RVMsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsZUFBZUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsT0FBT0EsRUFBRUEsUUFBUUEsRUFBRUEsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFDbkVBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2hCQSxDQUFDQTtJQUVEVCxnQkFBZ0JBLENBQUNBLEVBQVVBLEVBQUVBLE9BQWlCQSxFQUFFQSxJQUFtQkE7UUFDL0RVLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGdCQUFnQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsT0FBT0EsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFDekRBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2hCQSxDQUFDQTtJQUVEVixlQUFlQSxDQUFDQSxFQUFVQSxFQUFFQSxPQUFpQkEsRUFBRUEsUUFBZ0JBO1FBQzNEVyxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxlQUFlQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxPQUFPQSxFQUFFQSxRQUFRQSxDQUFDQSxDQUFDQTtRQUM1REEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDaEJBLENBQUNBO0lBRURYLGNBQWNBLENBQUNBLEVBQVVBLEVBQUVBLE9BQWlCQSxFQUFFQSxRQUFnQkEsRUFBRUEsSUFBU0E7UUFDckVZLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLGNBQWNBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLE9BQU9BLEVBQUVBLFFBQVFBLEVBQUVBLElBQUlBLENBQUNBLENBQUNBO1FBQ2pFQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQTtJQUNoQkEsQ0FBQ0E7SUFFRFosZUFBZUEsQ0FBQ0EsRUFBVUEsRUFBRUEsT0FBaUJBLEVBQUVBLEdBQVdBLEVBQUVBLElBQVNBO1FBQ2pFYSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxjQUFjQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxPQUFPQSxFQUFFQSxHQUFHQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUM1REEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDaEJBLENBQUNBO0lBRURiLGNBQWNBLENBQUNBLEVBQVVBLEVBQUVBLE9BQWlCQSxFQUFFQSxHQUFXQSxFQUFFQSxNQUFjQTtRQUNyRWMsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsY0FBY0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsT0FBT0EsRUFBRUEsR0FBR0EsRUFBRUEsTUFBTUEsQ0FBQ0EsQ0FBQ0E7UUFDOURBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBO0lBQ2hCQSxDQUFDQTtJQUVEZCxLQUFLQTtRQUNEZSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxDQUFDQSxHQUFHQSxFQUFFQSxJQUFJQSxFQUFFQSxLQUFLQTtZQUNuQ0EsRUFBRUEsQ0FBQUEsQ0FBQ0EsS0FBS0EsS0FBS0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7Z0JBQ2JBLENBQUNBLENBQUNBLE1BQU1BLENBQUNBLElBQUlBLEVBQUVBLEdBQUdBO29CQUNkQSxJQUFJQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxHQUFHQSxDQUFDQTtvQkFDN0JBLE1BQU1BLENBQUNBLEdBQUdBLENBQUNBLEVBQUVBLENBQUNBLFNBQVNBLENBQUNBLENBQUNBLEVBQUVBLE1BQU1BLENBQUNBLE1BQU1BLENBQUNBLEtBQUtBLE1BQU1BLENBQUNBO2dCQUN6REEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDUEEsQ0FBQ0E7UUFDTEEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDSEEsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0E7SUFDaEJBLENBQUNBO0FBQ0xmLENBQUNBO3NDQUFBIiwiZmlsZSI6ImxpYi9zdG9yZXMvaW5kZXhlZGRiL0luZGV4ZWREQkNvbGxlY3Rpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSBwYXRoPVwiLi4vLi4vLi4vdHlwaW5ncy9sb2Rhc2gvbG9kYXNoLmQudHNcIiAvPlxuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmltcG9ydCB7IElDb2xsZWN0aW9uIH0gZnJvbSBcIi4uL0lDb2xsZWN0aW9uXCI7XG5pbXBvcnQgUFVMIGZyb20gXCIuLi8uLi91cGRhdGVzL1BVTFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRleGVkREJDb2xsZWN0aW9uIGltcGxlbWVudHMgSUNvbGxlY3Rpb24ge1xuXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBrZXlQYXRoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwdWw6IFBVTDtcblxuICAgIHByaXZhdGUga2V5TXVzdEJlUHJvdmlkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5rZXlQYXRoO1xuICAgIH1cblxuICAgIHByaXZhdGUga2V5Q2Fubm90QmVQcm92aWRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5UGF0aCAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vaHR0cDovL3d3dy53My5vcmcvVFIvSW5kZXhlZERCLyNkZm4tc3RlcHMtZm9yLWV4dHJhY3RpbmctYS1rZXktZnJvbS1hLXZhbHVlLXVzaW5nLWEta2V5LXBhdGhcbiAgICAvL1RPRE86IHN0cmluZ1tdIHR5cGUgZm9yIGtleXBhdGggaXMgbm90IHN1cHBvcnRlZCB5ZXQuXG4gICAgcHJpdmF0ZSBnZXRLZXkodmFsdWU6IGFueSwga2V5UGF0aD86IHN0cmluZ1tdKTogYW55IHtcbiAgICAgICAgaWYoIWtleVBhdGgpIHtcbiAgICAgICAgICAgIGtleVBhdGggPSB0aGlzLmtleVBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGtleVBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGN1cnJlbnQgPSBrZXlQYXRoWzBdO1xuICAgICAgICB2YXIgcmVtYWluaW5nID0ga2V5UGF0aC5zbGljZSgxKTtcbiAgICAgICAgaWYoY3VycmVudCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFfLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRLZXkodmFsdWVbY3VycmVudF0sIHJlbWFpbmluZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJZChpZD86IHN0cmluZywgdmFsdWU/OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZihpZCAmJiB2YWx1ZSAmJiB0aGlzLmtleUNhbm5vdEJlUHJvdmlkZWQoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiS2V5IGNhbm5vdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmKCFpZCAmJiB0aGlzLmtleU11c3RCZVByb3ZpZGVkKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIktleSBtdXN0IGJlIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFpZCAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgaWQgPSB0aGlzLmdldEtleSh2YWx1ZSk7XG4gICAgICAgICAgICBpZihpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGtleSBmb3VuZCBmb3Iga2V5UGF0aCBcIiArIHRoaXMua2V5UGF0aCArIFwiIGFuZCBvYmplY3QgXCIgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKCFpZCAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkF0IGxlYXN0IHRoZSBrZXkgb3IgdGhlIHZhbHVlIG11c3QgYmUgcHJvdmlkZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIjpcIiArIGlkO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHN0b3JlOiBJREJPYmplY3RTdG9yZSwgcHVsOiBQVUwpIHtcbiAgICAgICAgaWYoc3RvcmVbXCJhdXRvSW5jcmVtZW50XCJdID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdXRvLWdlbmVyYXRlZCBrZXlzIGFyZSBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hbWUgPSBzdG9yZS5uYW1lO1xuICAgICAgICB0aGlzLmtleVBhdGggPSBzdG9yZS5rZXlQYXRoO1xuICAgICAgICB0aGlzLnB1bCA9IHB1bDtcbiAgICB9XG5cbiAgICBpbnNlcnQoZG9jdW1lbnQ6IGFueSwgaWQ/OiBzdHJpbmcpOiBJQ29sbGVjdGlvbiB7XG4gICAgICAgIHRoaXMucHVsLmluc2VydCh0aGlzLmdldElkKGlkLCBkb2N1bWVudCksIGRvY3VtZW50KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmVtb3ZlKGlkOiBzdHJpbmcpOiBJQ29sbGVjdGlvbiB7XG4gICAgICAgIHRoaXMucHVsLnJlbW92ZSh0aGlzLmdldElkKGlkKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGluc2VydEludG9PYmplY3QoaWQ6IHN0cmluZywgb3JkUGF0aDogc3RyaW5nW10sIHBhaXJzOiB7fSk6IElDb2xsZWN0aW9uIHtcbiAgICAgICAgdGhpcy5wdWwuaW5zZXJ0SW50b09iamVjdCh0aGlzLmdldElkKGlkKSwgb3JkUGF0aCwgcGFpcnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpbnNlcnRJbnRvQXJyYXkoaWQ6IHN0cmluZywgb3JkUGF0aDogc3RyaW5nW10sIHBvc2l0aW9uOiBudW1iZXIsIGl0ZW1zOiBhbnlbXSk6IElDb2xsZWN0aW9uIHtcbiAgICAgICAgdGhpcy5wdWwuaW5zZXJ0SW50b0FycmF5KHRoaXMuZ2V0SWQoaWQpLCBvcmRQYXRoLCBwb3NpdGlvbiwgaXRlbXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkZWxldGVGcm9tT2JqZWN0KGlkOiBzdHJpbmcsIG9yZFBhdGg6IHN0cmluZ1tdLCBrZXlzOiBBcnJheTxzdHJpbmc+KTogSUNvbGxlY3Rpb24ge1xuICAgICAgICB0aGlzLnB1bC5kZWxldGVGcm9tT2JqZWN0KHRoaXMuZ2V0SWQoaWQpLCBvcmRQYXRoLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZGVsZXRlRnJvbUFycmF5KGlkOiBzdHJpbmcsIG9yZFBhdGg6IHN0cmluZ1tdLCBwb3NpdGlvbjogbnVtYmVyKTogSUNvbGxlY3Rpb24ge1xuICAgICAgICB0aGlzLnB1bC5kZWxldGVGcm9tQXJyYXkodGhpcy5nZXRJZChpZCksIG9yZFBhdGgsIHBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmVwbGFjZUluQXJyYXkoaWQ6IHN0cmluZywgb3JkUGF0aDogc3RyaW5nW10sIHBvc2l0aW9uOiBudW1iZXIsIGl0ZW06IGFueSk6IElDb2xsZWN0aW9uIHtcbiAgICAgICAgdGhpcy5wdWwucmVwbGFjZUluQXJyYXkodGhpcy5nZXRJZChpZCksIG9yZFBhdGgsIHBvc2l0aW9uLCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmVwbGFjZUluT2JqZWN0KGlkOiBzdHJpbmcsIG9yZFBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgaXRlbTogYW55KTogSUNvbGxlY3Rpb24ge1xuICAgICAgICB0aGlzLnB1bC5yZW5hbWVJbk9iamVjdCh0aGlzLmdldElkKGlkKSwgb3JkUGF0aCwga2V5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmVuYW1lSW5PYmplY3QoaWQ6IHN0cmluZywgb3JkUGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCBuZXdLZXk6IHN0cmluZyk6IElDb2xsZWN0aW9uIHtcbiAgICAgICAgdGhpcy5wdWwucmVuYW1lSW5PYmplY3QodGhpcy5nZXRJZChpZCksIG9yZFBhdGgsIGtleSwgbmV3S2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmVzZXQoKTogSUNvbGxlY3Rpb24ge1xuICAgICAgICB0aGlzLnB1bC51ZHBzLmZvckVhY2goKHVkcCwgdWRwcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgXy5yZW1vdmUodWRwcywgdWRwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZWZpeCA9IHRoaXMubmFtZSArIFwiOlwiO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdWRwLmlkLnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoKSA9PT0gcHJlZml4O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9