db-sql-toolkit
Version:
Helps with SQL statements, database migration, and bulk execution.
158 lines (157 loc) • 32.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.applyMigrations = applyMigrations;
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 _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 _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 _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o("next", 0), o("throw", 1), o("return", 2); } }, _regeneratorDefine2(e, r, n, t); }
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 _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 _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 applyMigrations(_x) {
return _applyMigrations.apply(this, arguments);
}
function _applyMigrations() {
_applyMigrations = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
var database, migrations, targetId, getExecutedMigrationIds, insertMigrationId, writeLog, executedMigrationIds, lastId, _iterator, _step, _step$value, id, apply, _t;
return _regenerator().w(function (_context) {
while (1) switch (_context.p = _context.n) {
case 0:
database = _ref.database, migrations = _ref.migrations, targetId = _ref.targetId, getExecutedMigrationIds = _ref.getExecutedMigrationIds, insertMigrationId = _ref.insertMigrationId, writeLog = _ref.writeLog;
_context.n = 1;
return (getExecutedMigrationIds !== null && getExecutedMigrationIds !== void 0 ? getExecutedMigrationIds : defaultGetExecutedMigrationIds)(database);
case 1:
executedMigrationIds = _context.v;
if (executedMigrationIds.length === 0) {
writeLog === null || writeLog === void 0 || writeLog("No previously applied migrations.");
} else {
lastId = executedMigrationIds.at(-1);
writeLog === null || writeLog === void 0 || writeLog("Previously applied ".concat(executedMigrationIds.length, " migrations, last id=\"").concat(lastId, "\"."));
}
_iterator = _createForOfIteratorHelper(migrations);
_context.p = 2;
_iterator.s();
case 3:
if ((_step = _iterator.n()).done) {
_context.n = 9;
break;
}
_step$value = _step.value, id = _step$value.id, apply = _step$value.apply;
if (!executedMigrationIds.includes(id)) {
_context.n = 5;
break;
}
if (!(id === targetId)) {
_context.n = 4;
break;
}
return _context.a(3, 9);
case 4:
return _context.a(3, 8);
case 5:
_context.n = 6;
return apply(database);
case 6:
_context.n = 7;
return (insertMigrationId !== null && insertMigrationId !== void 0 ? insertMigrationId : defaultUpdateVersion)(database, id);
case 7:
writeLog === null || writeLog === void 0 || writeLog("Applied migration \"".concat(id, "\"."));
if (!(id === targetId)) {
_context.n = 8;
break;
}
return _context.a(3, 9);
case 8:
_context.n = 3;
break;
case 9:
_context.n = 11;
break;
case 10:
_context.p = 10;
_t = _context.v;
_iterator.e(_t);
case 11:
_context.p = 11;
_iterator.f();
return _context.f(11);
case 12:
return _context.a(2);
}
}, _callee, null, [[2, 10, 11, 12]]);
}));
return _applyMigrations.apply(this, arguments);
}
function defaultGetExecutedMigrationIds(_x2) {
return _defaultGetExecutedMigrationIds.apply(this, arguments);
}
function _defaultGetExecutedMigrationIds() {
_defaultGetExecutedMigrationIds = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(database) {
var migrations, _t2;
return _regenerator().w(function (_context2) {
while (1) switch (_context2.p = _context2.n) {
case 0:
_context2.p = 0;
_context2.n = 1;
return database.getRows.apply(database, _toConsumableArray((0, _sql.sql)(_templateObject || (_templateObject = _taggedTemplateLiteral(["SELECT id FROM _db_migration"])))));
case 1:
migrations = _context2.v;
return _context2.a(2, migrations.map(function (migration) {
return migration.id;
}));
case 2:
_context2.p = 2;
_t2 = _context2.v;
_context2.n = 3;
return createDbVersionTable(database);
case 3:
return _context2.a(2, []);
}
}, _callee2, null, [[0, 2]]);
}));
return _defaultGetExecutedMigrationIds.apply(this, arguments);
}
function defaultUpdateVersion(_x3, _x4) {
return _defaultUpdateVersion.apply(this, arguments);
}
function _defaultUpdateVersion() {
_defaultUpdateVersion = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(database, id) {
return _regenerator().w(function (_context3) {
while (1) switch (_context3.n) {
case 0:
_context3.n = 1;
return database.executeSqlCommand.apply(database, _toConsumableArray((0, _sql.sql)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["INSERT INTO _db_migration (id) VALUES (", ")"])), id)));
case 1:
return _context3.a(2);
}
}, _callee3);
}));
return _defaultUpdateVersion.apply(this, arguments);
}
function createDbVersionTable(_x5) {
return _createDbVersionTable.apply(this, arguments);
}
function _createDbVersionTable() {
_createDbVersionTable = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(database) {
return _regenerator().w(function (_context4) {
while (1) switch (_context4.n) {
case 0:
_context4.n = 1;
return database.executeSqlCommand.apply(database, _toConsumableArray((0, _sql.sql)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n\t\t\tCREATE TABLE IF NOT EXISTS _db_migration (\n\t\t\t\tid VARCHAR NOT NULL,\n\t\t\t\tPRIMARY KEY (\n\t\t\t\t\tid\n\t\t\t\t)\n\t\t\t);\n\t\t"])))));
case 1:
return _context4.a(2);
}
}, _callee4);
}));
return _createDbVersionTable.apply(this, arguments);
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3FsIiwicmVxdWlyZSIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsImUiLCJ0Iiwic2xpY2UiLCJPYmplY3QiLCJmcmVlemUiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicmF3IiwidmFsdWUiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiX3JlZ2VuZXJhdG9yIiwibiIsIm8iLCJ0b1N0cmluZ1RhZyIsImkiLCJjIiwicHJvdG90eXBlIiwiR2VuZXJhdG9yIiwidSIsImNyZWF0ZSIsIl9yZWdlbmVyYXRvckRlZmluZTIiLCJmIiwicCIsInkiLCJHIiwidiIsImEiLCJkIiwiYmluZCIsImxlbmd0aCIsImwiLCJjYWxsIiwiZG9uZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX2ludm9rZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX24iLCJGIiwicyIsIm5leHQiLCJ0b1N0cmluZyIsImNvbnN0cnVjdG9yIiwibmFtZSIsInRlc3QiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJhcHBseU1pZ3JhdGlvbnMiLCJfeCIsIl9hcHBseU1pZ3JhdGlvbnMiLCJfY2FsbGVlIiwiX3JlZiIsImRhdGFiYXNlIiwibWlncmF0aW9ucyIsInRhcmdldElkIiwiZ2V0RXhlY3V0ZWRNaWdyYXRpb25JZHMiLCJpbnNlcnRNaWdyYXRpb25JZCIsIndyaXRlTG9nIiwiZXhlY3V0ZWRNaWdyYXRpb25JZHMiLCJsYXN0SWQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIl9zdGVwJHZhbHVlIiwiaWQiLCJfdCIsIl9jb250ZXh0IiwiZGVmYXVsdEdldEV4ZWN1dGVkTWlncmF0aW9uSWRzIiwiYXQiLCJjb25jYXQiLCJpbmNsdWRlcyIsImRlZmF1bHRVcGRhdGVWZXJzaW9uIiwiX3gyIiwiX2RlZmF1bHRHZXRFeGVjdXRlZE1pZ3JhdGlvbklkcyIsIl9jYWxsZWUyIiwiX3QyIiwiX2NvbnRleHQyIiwiZ2V0Um93cyIsInNxbCIsIm1hcCIsIm1pZ3JhdGlvbiIsImNyZWF0ZURiVmVyc2lvblRhYmxlIiwiX3gzIiwiX3g0IiwiX2RlZmF1bHRVcGRhdGVWZXJzaW9uIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJleGVjdXRlU3FsQ29tbWFuZCIsIl94NSIsIl9jcmVhdGVEYlZlcnNpb25UYWJsZSIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGx5TWlncmF0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSBcIi4vRGF0YWJhc2VcIjtcbmltcG9ydCB7IHNxbCB9IGZyb20gXCIuL3NxbFwiO1xuXG50eXBlIERiTWlncmF0aW9uSWQgPSBzdHJpbmc7XG5cbmludGVyZmFjZSBBcHBseU1pZ3JhdGlvbnNPcHRpb25zPFREYXRhYmFzZSBleHRlbmRzIERhdGFiYXNlPiB7XG5cdGRhdGFiYXNlOiBURGF0YWJhc2U7XG5cdG1pZ3JhdGlvbnM6IE1pZ3JhdGlvbjxURGF0YWJhc2U+W107XG5cdHRhcmdldElkPzogRGJNaWdyYXRpb25JZDtcblx0Z2V0RXhlY3V0ZWRNaWdyYXRpb25JZHM/OiAoKGRhdGFiYXNlOiBURGF0YWJhc2UpID0+IFByb21pc2U8RGJNaWdyYXRpb25JZFtdPikgfCBudWxsO1xuXHRpbnNlcnRNaWdyYXRpb25JZD86ICgoZGF0YWJhc2U6IFREYXRhYmFzZSwgaWQ6IERiTWlncmF0aW9uSWQpID0+IFByb21pc2U8dm9pZD4pIHwgbnVsbDtcblx0d3JpdGVMb2c/OiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgTWlncmF0aW9uPFREYXRhYmFzZT4ge1xuXHRpZDogRGJNaWdyYXRpb25JZDtcblx0YXBwbHk6IChkYXRhYmFzZTogVERhdGFiYXNlKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseU1pZ3JhdGlvbnM8VERhdGFiYXNlIGV4dGVuZHMgRGF0YWJhc2U+KHtcblx0ZGF0YWJhc2UsXG5cdG1pZ3JhdGlvbnMsXG5cdHRhcmdldElkLFxuXHRnZXRFeGVjdXRlZE1pZ3JhdGlvbklkcyxcblx0aW5zZXJ0TWlncmF0aW9uSWQsXG5cdHdyaXRlTG9nLFxufTogQXBwbHlNaWdyYXRpb25zT3B0aW9uczxURGF0YWJhc2U+KTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGV4ZWN1dGVkTWlncmF0aW9uSWRzID0gYXdhaXQgKGdldEV4ZWN1dGVkTWlncmF0aW9uSWRzID8/IGRlZmF1bHRHZXRFeGVjdXRlZE1pZ3JhdGlvbklkcykoZGF0YWJhc2UpO1xuXG5cdGlmIChleGVjdXRlZE1pZ3JhdGlvbklkcy5sZW5ndGggPT09IDApIHtcblx0XHR3cml0ZUxvZz8uKFwiTm8gcHJldmlvdXNseSBhcHBsaWVkIG1pZ3JhdGlvbnMuXCIpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGxhc3RJZCA9IGV4ZWN1dGVkTWlncmF0aW9uSWRzLmF0KC0xKTtcblxuXHRcdHdyaXRlTG9nPy4oYFByZXZpb3VzbHkgYXBwbGllZCAke2V4ZWN1dGVkTWlncmF0aW9uSWRzLmxlbmd0aH0gbWlncmF0aW9ucywgbGFzdCBpZD1cIiR7bGFzdElkfVwiLmApO1xuXHR9XG5cblx0Zm9yIChjb25zdCB7IGlkLCBhcHBseSB9IG9mIG1pZ3JhdGlvbnMpIHtcblx0XHRpZiAoZXhlY3V0ZWRNaWdyYXRpb25JZHMuaW5jbHVkZXMoaWQpKSB7XG5cdFx0XHRpZiAoaWQgPT09IHRhcmdldElkKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvbnVyc2VyeS9ub0F3YWl0SW5Mb29wOiBXZSBuZWVkIHRvIGtlZXAgdGhlIG9yZGVyXG5cdFx0YXdhaXQgYXBwbHkoZGF0YWJhc2UpO1xuXHRcdGF3YWl0IChpbnNlcnRNaWdyYXRpb25JZCA/PyBkZWZhdWx0VXBkYXRlVmVyc2lvbikoZGF0YWJhc2UsIGlkKTtcblxuXHRcdHdyaXRlTG9nPy4oYEFwcGxpZWQgbWlncmF0aW9uIFwiJHtpZH1cIi5gKTtcblxuXHRcdGlmIChpZCA9PT0gdGFyZ2V0SWQpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxufVxuXG5pbnRlcmZhY2UgRGJNaWdyYXRpb25zVGFibGUge1xuXHRpZDogRGJNaWdyYXRpb25JZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVmYXVsdEdldEV4ZWN1dGVkTWlncmF0aW9uSWRzKGRhdGFiYXNlOiBEYXRhYmFzZSk6IFByb21pc2U8RGJNaWdyYXRpb25JZFtdPiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgbWlncmF0aW9ucyA9IGF3YWl0IGRhdGFiYXNlLmdldFJvd3M8RGJNaWdyYXRpb25zVGFibGU+KC4uLnNxbGBTRUxFQ1QgaWQgRlJPTSBfZGJfbWlncmF0aW9uYCk7XG5cblx0XHRyZXR1cm4gbWlncmF0aW9ucy5tYXAoKG1pZ3JhdGlvbikgPT4gbWlncmF0aW9uLmlkKTtcblx0fSBjYXRjaCB7XG5cdFx0YXdhaXQgY3JlYXRlRGJWZXJzaW9uVGFibGUoZGF0YWJhc2UpO1xuXG5cdFx0cmV0dXJuIFtdO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlZmF1bHRVcGRhdGVWZXJzaW9uKGRhdGFiYXNlOiBEYXRhYmFzZSwgaWQ6IERiTWlncmF0aW9uSWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0YXdhaXQgZGF0YWJhc2UuZXhlY3V0ZVNxbENvbW1hbmQoLi4uc3FsYElOU0VSVCBJTlRPIF9kYl9taWdyYXRpb24gKGlkKSBWQUxVRVMgKCR7aWR9KWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEYlZlcnNpb25UYWJsZShkYXRhYmFzZTogRGF0YWJhc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0YXdhaXQgZGF0YWJhc2UuZXhlY3V0ZVNxbENvbW1hbmQoXG5cdFx0Li4uc3FsYFxuXHRcdFx0Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgX2RiX21pZ3JhdGlvbiAoXG5cdFx0XHRcdGlkIFZBUkNIQVIgTk9UIE5VTEwsXG5cdFx0XHRcdFBSSU1BUlkgS0VZIChcblx0XHRcdFx0XHRpZFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGAsXG5cdCk7XG59XG5cbmV4cG9ydCB0eXBlIHsgQXBwbHlNaWdyYXRpb25zT3B0aW9ucyB9O1xuXG5leHBvcnQgeyBhcHBseU1pZ3JhdGlvbnMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsSUFBQSxHQUFBQyxPQUFBO0FBQTRCLElBQUFDLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUE7QUFBQSxTQUFBQyx1QkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFBLENBQUEsS0FBQUEsQ0FBQSxHQUFBRCxDQUFBLENBQUFFLEtBQUEsTUFBQUMsTUFBQSxDQUFBQyxNQUFBLENBQUFELE1BQUEsQ0FBQUUsZ0JBQUEsQ0FBQUwsQ0FBQSxJQUFBTSxHQUFBLElBQUFDLEtBQUEsRUFBQUosTUFBQSxDQUFBQyxNQUFBLENBQUFILENBQUE7QUFBQSxTQUFBTyxtQkFBQUMs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