db-sql-toolkit
Version:
Helps with SQL statements, database migration, and bulk execution.
206 lines (205 loc) • 51.1 kB
JavaScript
"use strict";
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.migrate = migrate;
var _sql = require("./sql");
var _templateObject, _templateObject2, _templateObject3;
function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = "function" == typeof Symbol ? Symbol : {}, i = o.iterator || "@@iterator", a = o.asyncIterator || "@@asyncIterator", u = o.toStringTag || "@@toStringTag"; function c(t, r, e, n) { return Object.defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, ""); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype); return c(a, "_invoke", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error("Generator is already running"); if (4 === o) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = 3; var h = s(r, e, n); if ("normal" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } "throw" === h.type && (o = 4, n.method = "throw", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: "normal", arg: t.call(r, e) }; } catch (t) { return { type: "throw", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = Object.getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(l); function g(t) { ["next", "throw", "return"].forEach(function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if ("throw" !== c.type) { var h = c.arg, f = h.value; return f && "object" == _typeof(f) && n.call(f, "__await") ? r.resolve(f.__await).then(function (t) { e("next", t, a, u); }, function (t) { e("throw", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e("throw", t, a, u); }); } u(c.arg); } var o; c(this, "_invoke", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, "throw" === n && r.i["return"] && (e.method = "return", e.arg = t, d(r, e), "throw" === e.method) || "return" !== n && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + n + "' method")), f; var i = s(o, r.i, e.arg); if ("throw" === i.type) return e.method = "throw", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, "return" !== e.method && (e.method = "next", e.arg = t), e.delegate = null, f) : a : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = "normal", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], t.forEach(w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if ("function" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, "constructor", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, "GeneratorFunction"), r.isGeneratorFunction = function (t) { var r = "function" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || "GeneratorFunction" === (r.displayName || r.name)); }, r.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, "GeneratorFunction")), t.prototype = Object.create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, "Generator"), c(v, i, function () { return this; }), c(v, "toString", function () { return "[object Generator]"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(m), !r) for (var e in this) "t" === e.charAt(0) && n.call(this, e) && !isNaN(+e.slice(1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = "throw", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n("end"), !1; if (!c && !h) throw Error("try statement without catch or finally"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = "next", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && ("break" === t || "continue" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, "catch": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if ("throw" === n.type) { var o = n.arg; m(e); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, "next" === this.method && (this.arg = t), f; } }, r; }
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
function migrate(_x) {
return _migrate.apply(this, arguments);
}
function _migrate() {
_migrate = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
var database, targetVersion, getCurrentVersion, updateVersion, migrationMap, writeLog, getDbVersion, updateDbVersion, currentVersion, sortedMigrationMap, lastMigration, migratedToVersion, _iterator, _step, _step$value, nextVersion, _apply;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
database = _ref.database, targetVersion = _ref.targetVersion, getCurrentVersion = _ref.getCurrentVersion, updateVersion = _ref.updateVersion, migrationMap = _ref.migrationMap, writeLog = _ref.writeLog;
getDbVersion = getCurrentVersion !== null && getCurrentVersion !== void 0 ? getCurrentVersion : defaultGetDbVersion;
updateDbVersion = updateVersion !== null && updateVersion !== void 0 ? updateVersion : defaultUpdateVersion;
_context.next = 5;
return getDbVersion(database);
case 5:
currentVersion = _context.sent;
writeLog === null || writeLog === void 0 || writeLog("Current database version: ".concat(currentVersion));
if (!(currentVersion === targetVersion)) {
_context.next = 9;
break;
}
return _context.abrupt("return");
case 9:
sortedMigrationMap = sortMigrationsByVersion(migrationMap);
lastMigration = sortedMigrationMap.at(-1);
if (lastMigration) {
_context.next = 15;
break;
}
if (!(targetVersion !== undefined)) {
_context.next = 14;
break;
}
throw new Error("Target version cannot be reached.");
case 14:
return _context.abrupt("return");
case 15:
targetVersion !== null && targetVersion !== void 0 ? targetVersion : targetVersion = lastMigration[0];
if (!(lastMigration[0] < targetVersion)) {
_context.next = 18;
break;
}
throw new Error("Target version cannot be reached.");
case 18:
migratedToVersion = currentVersion;
_iterator = _createForOfIteratorHelper(sortedMigrationMap);
_context.prev = 20;
_iterator.s();
case 22:
if ((_step = _iterator.n()).done) {
_context.next = 32;
break;
}
_step$value = _slicedToArray(_step.value, 2), nextVersion = _step$value[0], _apply = _step$value[1];
if (!(nextVersion > targetVersion)) {
_context.next = 26;
break;
}
return _context.abrupt("break", 32);
case 26:
if (!(currentVersion < nextVersion)) {
_context.next = 30;
break;
}
_context.next = 29;
return _apply(database);
case 29:
migratedToVersion = nextVersion;
case 30:
_context.next = 22;
break;
case 32:
_context.next = 37;
break;
case 34:
_context.prev = 34;
_context.t0 = _context["catch"](20);
_iterator.e(_context.t0);
case 37:
_context.prev = 37;
_iterator.f();
return _context.finish(37);
case 40:
_context.next = 42;
return updateDbVersion(database, migratedToVersion);
case 42:
writeLog === null || writeLog === void 0 || writeLog("Updated database to version ".concat(migratedToVersion));
case 43:
case "end":
return _context.stop();
}
}, _callee, null, [[20, 34, 37, 40]]);
}));
return _migrate.apply(this, arguments);
}
function sortMigrationsByVersion(migrationMap) {
return _toConsumableArray(migrationMap).sort(function (_ref2, _ref3) {
var _ref4 = _slicedToArray(_ref2, 1),
firstVersion = _ref4[0];
var _ref5 = _slicedToArray(_ref3, 1),
secondVersion = _ref5[0];
return firstVersion - secondVersion;
});
}
function defaultGetDbVersion(_x2) {
return _defaultGetDbVersion.apply(this, arguments);
}
function _defaultGetDbVersion() {
_defaultGetDbVersion = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(database) {
var versions, currentVersion;
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 3;
return database.getRows.apply(database, _toConsumableArray((0, _sql.sql)(_templateObject || (_templateObject = _taggedTemplateLiteral(["SELECT version FROM db_version"])))));
case 3:
versions = _context2.sent;
if (!(versions.length === 0)) {
_context2.next = 6;
break;
}
return _context2.abrupt("return", -1);
case 6:
currentVersion = versions.map(function (version) {
return version.version;
}).reduce(function (prev, current) {
return Math.max(prev, current);
}, 0);
return _context2.abrupt("return", currentVersion);
case 10:
_context2.prev = 10;
_context2.t0 = _context2["catch"](0);
_context2.next = 14;
return createDbVersionTable(database);
case 14:
return _context2.abrupt("return", -1);
case 15:
case "end":
return _context2.stop();
}
}, _callee2, null, [[0, 10]]);
}));
return _defaultGetDbVersion.apply(this, arguments);
}
function defaultUpdateVersion(_x3, _x4) {
return _defaultUpdateVersion.apply(this, arguments);
}
function _defaultUpdateVersion() {
_defaultUpdateVersion = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(database, version) {
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return database.executeSqlCommand.apply(database, _toConsumableArray((0, _sql.sql)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["INSERT OR REPLACE INTO db_version (version) VALUES (", ")"])), version)));
case 2:
case "end":
return _context3.stop();
}
}, _callee3);
}));
return _defaultUpdateVersion.apply(this, arguments);
}
function createDbVersionTable(_x5) {
return _createDbVersionTable.apply(this, arguments);
}
function _createDbVersionTable() {
_createDbVersionTable = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(database) {
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return database.executeSqlCommand.apply(database, _toConsumableArray((0, _sql.sql)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n\t\t\tCREATE TABLE IF NOT EXISTS db_version (\n\t\t\t\tversion INTEGER NOT NULL,\n\t\t\t\tPRIMARY KEY (\n\t\t\t\t\tversion\n\t\t\t\t)\n\t\t\t);\n\t\t"])))));
case 2:
case "end":
return _context4.stop();
}
}, _callee4);
}));
return _createDbVersionTable.apply(this, arguments);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3FsIiwicmVxdWlyZSIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsImUiLCJ0Iiwic2xpY2UiLCJPYmplY3QiLCJmcmVlemUiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicmF3IiwidmFsdWUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiciIsInByb3RvdHlwZSIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsIm8iLCJTeW1ib2wiLCJpIiwiaXRlcmF0b3IiLCJhIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImgiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJhcmciLCJkZWxlZ2F0ZSIsImQiLCJmIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJzIiwidHlwZSIsIkNvbnRleHQiLCJjYWxsIiwid3JhcCIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJsIiwicCIsImdldFByb3RvdHlwZU9mIiwieSIsIngiLCJ2IiwiZyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsIl90eXBlb2YiLCJyZXNvbHZlIiwiX19hd2FpdCIsInRoZW4iLCJUeXBlRXJyb3IiLCJuZXh0IiwidyIsInRyeUVudHJpZXMiLCJwdXNoIiwibSIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJ1bnNoaWZ0IiwicG9wIiwidmFsdWVzIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbiIsIkYiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl9ub25JdGVyYWJsZVJlc3QiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJfaXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsImZyb20iLCJ0ZXN0IiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwibWlncmF0ZSIsIl94IiwiX21pZ3JhdGUiLCJfY2FsbGVlIiwiX3JlZiIsImRhdGFiYXNlIiwidGFyZ2V0VmVyc2lvbiIsImdldEN1cnJlbnRWZXJzaW9uIiwidXBkYXRlVmVyc2lvbiIsIm1pZ3JhdGlvbk1hcCIsIndyaXRlTG9nIiwiZ2V0RGJWZXJzaW9uIiwidXBkYXRlRGJWZXJzaW9uIiwiY3VycmVudFZlcnNpb24iLCJzb3J0ZWRNaWdyYXRpb25NYXAiLCJsYXN0TWlncmF0aW9uIiwibWlncmF0ZWRUb1ZlcnNpb24iLCJfaXRlcmF0b3IiLCJfc3RlcCIsIl9zdGVwJHZhbHVlIiwibmV4dFZlcnNpb24iLCJfYXBwbHkiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiZGVmYXVsdEdldERiVmVyc2lvbiIsImRlZmF1bHRVcGRhdGVWZXJzaW9uIiwiY29uY2F0Iiwic29ydE1pZ3JhdGlvbnNCeVZlcnNpb24iLCJhdCIsInVuZGVmaW5lZCIsInQwIiwic29ydCIsIl9yZWYyIiwiX3JlZjMiLCJfcmVmNCIsImZpcnN0VmVyc2lvbiIsIl9yZWY1Iiwic2Vjb25kVmVyc2lvbiIsIl94MiIsIl9kZWZhdWx0R2V0RGJWZXJzaW9uIiwiX2NhbGxlZTIiLCJ2ZXJzaW9ucyIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImdldFJvd3MiLCJzcWwiLCJtYXAiLCJ2ZXJzaW9uIiwicmVkdWNlIiwiY3VycmVudCIsIk1hdGgiLCJtYXgiLCJjcmVhdGVEYlZlcnNpb25UYWJsZSIsIl94MyIsIl94NCIsIl9kZWZhdWx0VXBkYXRlVmVyc2lvbiIsIl9jYWxsZWUzIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiZXhlY3V0ZVNxbENvbW1hbmQiLCJfeDUiLCJfY3JlYXRlRGJWZXJzaW9uVGFibGUiLCJfY2FsbGVlNCIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9taWdyYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tIFwiLi9EYXRhYmFzZVwiO1xuaW1wb3J0IHsgc3FsIH0gZnJvbSBcIi4vc3FsXCI7XG5cbmludGVyZmFjZSBNaWdyYXRpb25PcHRpb25zPFREYXRhYmFzZSBleHRlbmRzIERhdGFiYXNlPiB7XG5cdGRhdGFiYXNlOiBURGF0YWJhc2U7XG5cdHRhcmdldFZlcnNpb24/OiBudW1iZXI7XG5cdGdldEN1cnJlbnRWZXJzaW9uPzogKChkYXRhYmFzZTogVERhdGFiYXNlKSA9PiBQcm9taXNlPG51bWJlcj4pIHwgbnVsbDtcblx0dXBkYXRlVmVyc2lvbj86ICgoZGF0YWJhc2U6IFREYXRhYmFzZSwgdmVyc2lvbjogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+KSB8IG51bGw7XG5cdG1pZ3JhdGlvbk1hcDogTWlncmF0aW9uPFREYXRhYmFzZT5bXTtcblx0d3JpdGVMb2c/OiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG50eXBlIE1pZ3JhdGlvbjxURGF0YWJhc2U+ID0gW3ZlcnNpb246IG51bWJlciwgYXBwbHk6IChkYXRhYmFzZTogVERhdGFiYXNlKSA9PiBQcm9taXNlPHZvaWQ+XTtcblxuYXN5bmMgZnVuY3Rpb24gbWlncmF0ZTxURGF0YWJhc2UgZXh0ZW5kcyBEYXRhYmFzZT4oe1xuXHRkYXRhYmFzZSxcblx0dGFyZ2V0VmVyc2lvbixcblx0Z2V0Q3VycmVudFZlcnNpb24sXG5cdHVwZGF0ZVZlcnNpb24sXG5cdG1pZ3JhdGlvbk1hcCxcblx0d3JpdGVMb2csXG59OiBNaWdyYXRpb25PcHRpb25zPFREYXRhYmFzZT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgZ2V0RGJWZXJzaW9uID0gZ2V0Q3VycmVudFZlcnNpb24gPz8gZGVmYXVsdEdldERiVmVyc2lvbjtcblx0Y29uc3QgdXBkYXRlRGJWZXJzaW9uID0gdXBkYXRlVmVyc2lvbiA/PyBkZWZhdWx0VXBkYXRlVmVyc2lvbjtcblxuXHRjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IGdldERiVmVyc2lvbihkYXRhYmFzZSk7XG5cblx0d3JpdGVMb2c/LihgQ3VycmVudCBkYXRhYmFzZSB2ZXJzaW9uOiAke2N1cnJlbnRWZXJzaW9ufWApO1xuXG5cdGlmIChjdXJyZW50VmVyc2lvbiA9PT0gdGFyZ2V0VmVyc2lvbikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHNvcnRlZE1pZ3JhdGlvbk1hcCA9IHNvcnRNaWdyYXRpb25zQnlWZXJzaW9uKG1pZ3JhdGlvbk1hcCk7XG5cdGNvbnN0IGxhc3RNaWdyYXRpb24gPSBzb3J0ZWRNaWdyYXRpb25NYXAuYXQoLTEpO1xuXG5cdGlmICghbGFzdE1pZ3JhdGlvbikge1xuXHRcdGlmICh0YXJnZXRWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRhcmdldCB2ZXJzaW9uIGNhbm5vdCBiZSByZWFjaGVkLlwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHR0YXJnZXRWZXJzaW9uID8/PSBsYXN0TWlncmF0aW9uWzBdO1xuXG5cdGlmIChsYXN0TWlncmF0aW9uWzBdIDwgdGFyZ2V0VmVyc2lvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRhcmdldCB2ZXJzaW9uIGNhbm5vdCBiZSByZWFjaGVkLlwiKTtcblx0fVxuXG5cdGxldCBtaWdyYXRlZFRvVmVyc2lvbiA9IGN1cnJlbnRWZXJzaW9uO1xuXG5cdGZvciAoY29uc3QgW25leHRWZXJzaW9uLCBhcHBseV0gb2Ygc29ydGVkTWlncmF0aW9uTWFwKSB7XG5cdFx0aWYgKG5leHRWZXJzaW9uID4gdGFyZ2V0VmVyc2lvbikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnRWZXJzaW9uIDwgbmV4dFZlcnNpb24pIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG5cdFx0XHRhd2FpdCBhcHBseShkYXRhYmFzZSk7XG5cblx0XHRcdG1pZ3JhdGVkVG9WZXJzaW9uID0gbmV4dFZlcnNpb247XG5cdFx0fVxuXHR9XG5cblx0YXdhaXQgdXBkYXRlRGJWZXJzaW9uKGRhdGFiYXNlLCBtaWdyYXRlZFRvVmVyc2lvbik7XG5cblx0d3JpdGVMb2c/LihgVXBkYXRlZCBkYXRhYmFzZSB0byB2ZXJzaW9uICR7bWlncmF0ZWRUb1ZlcnNpb259YCk7XG59XG5cbmZ1bmN0aW9uIHNvcnRNaWdyYXRpb25zQnlWZXJzaW9uPFREYXRhYmFzZT4obWlncmF0aW9uTWFwOiBNaWdyYXRpb248VERhdGFiYXNlPltdKTogTWlncmF0aW9uPFREYXRhYmFzZT5bXSB7XG5cdHJldHVybiBbLi4ubWlncmF0aW9uTWFwXS5zb3J0KChbZmlyc3RWZXJzaW9uXSwgW3NlY29uZFZlcnNpb25dKSA9PiBmaXJzdFZlcnNpb24gLSBzZWNvbmRWZXJzaW9uKTtcbn1cblxuaW50ZXJmYWNlIERiVmVyc2lvblRhYmxlIHtcblx0dmVyc2lvbjogbnVtYmVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0R2V0RGJWZXJzaW9uKGRhdGFiYXNlOiBEYXRhYmFzZSk6IFByb21pc2U8bnVtYmVyPiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgdmVyc2lvbnMgPSBhd2FpdCBkYXRhYmFzZS5nZXRSb3dzPERiVmVyc2lvblRhYmxlPiguLi5zcWxgU0VMRUNUIHZlcnNpb24gRlJPTSBkYl92ZXJzaW9uYCk7XG5cblx0XHRpZiAodmVyc2lvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3VycmVudFZlcnNpb24gPSB2ZXJzaW9ucy5tYXAoKHZlcnNpb24pID0+IHZlcnNpb24udmVyc2lvbikucmVkdWNlKChwcmV2LCBjdXJyZW50KSA9PiBNYXRoLm1heChwcmV2LCBjdXJyZW50KSwgMCk7XG5cblx0XHRyZXR1cm4gY3VycmVudFZlcnNpb247XG5cdH0gY2F0Y2gge1xuXHRcdGF3YWl0IGNyZWF0ZURiVmVyc2lvblRhYmxlKGRhdGFiYXNlKTtcblxuXHRcdHJldHVybiAtMTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZWZhdWx0VXBkYXRlVmVyc2lvbihkYXRhYmFzZTogRGF0YWJhc2UsIHZlcnNpb246IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuXHRhd2FpdCBkYXRhYmFzZS5leGVjdXRlU3FsQ29tbWFuZCguLi5zcWxgSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBkYl92ZXJzaW9uICh2ZXJzaW9uKSBWQUxVRVMgKCR7dmVyc2lvbn0pYCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURiVmVyc2lvblRhYmxlKGRhdGFiYXNlOiBEYXRhYmFzZSk6IFByb21pc2U8dm9pZD4ge1xuXHRhd2FpdCBkYXRhYmFzZS5leGVjdXRlU3FsQ29tbWFuZChcblx0XHQuLi5zcWxgXG5cdFx0XHRDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBkYl92ZXJzaW9uIChcblx0XHRcdFx0dmVyc2lvbiBJTlRFR0VSIE5PVCBOVUxMLFxuXHRcdFx0XHRQUklNQVJZIEtFWSAoXG5cdFx0XHRcdFx0dmVyc2lvblxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGAsXG5cdCk7XG59XG5cbmV4cG9ydCB0eXBlIHsgTWlncmF0aW9uT3B0aW9ucyB9O1xuXG5leHBvcnQgeyBtaWdyYXRlIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQSxJQUFBQSxJQUFBLEdBQUFDLE9BQUE7QUFBNEIsSUFBQUMsZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQTtBQUFBLFNBQUFDLHVCQUFBQyxDQUFBLEVBQUFDLENBQUEsV0FBQUEsQ0FBQSxLQUFBQSxDQUFBLEdBQUFELENBQUEsQ0FBQUUsS0FBQSxNQUFBQyxNQUFBLENBQUFDLE1BQUEsQ0FBQUQsTUFBQSxDQUFBRSxnQkFBQSxDQUFBTCxDQUFBLElBQUFNLEdBQUEsSUFBQUMsS0FBQSxFQUFBSixNQUFBLENBQUFDLE1BQUEsQ0FBQUgsQ0FBQTtBQUFBLFNBQUFPLG9CQUFBLGtCQUE1QixtS0FBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUMsQ0FBQSxTQUFBUixDQUFBLEVBQUFRLENBQUEsT0FBQVQsQ0FBQSxHQUFBRyxNQUFBLENBQUFPLFNBQUEsRUFBQUMsQ0FBQSxHQUFBWCxDQUFBLENBQUFZLGNBQUEsRUFBQUMsQ0FBQSx3QkFBQUMsTUFBQSxHQUFBQSxNQUFBLE9BQUFDLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxRQUFBLGtCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssYUFBQSx1QkFBQUMsQ0FBQSxHQUFBTixDQUFBLENBQUFPLFdBQUEsOEJBQUFDLEVBQUFwQixDQUFBLEVBQUFRLENBQUEsRUFBQVQsQ0FBQSxFQUFBVyxDQUFBLFdBQUFSLE1BQUEsQ0FBQW1CLGNBQUEsQ0FBQXJCLENBQUEsRUFBQVEsQ0FBQSxJQUFBRixLQUFBLEVBQUFQLENBQUEsRUFBQXVCLFVBQUEsR0FBQVosQ0FBQSxFQUFBYSxZQUFBLEdBQUFiLENBQUEsRUFBQWMsUUFBQSxHQUFBZCxDQUFBLGFBQUFVLENBQUEsbUJBQUFwQixDQUFBLElBQUFvQixDQUFBLFlBQUFBLEVBQUFwQixDQUFBLEVBQUFRLENB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