sonamu 0.10.8 → 0.10.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -79,8 +79,18 @@ var init_db = __esmMin((() => {
79
79
  workerDBs = /* @__PURE__ */ new Map();
80
80
  currentConfig = null;
81
81
  transactionStorage = new AsyncLocalStorage();
82
- runWithTransaction(callback) {
83
- return this.transactionStorage.run(new TransactionContext(), callback);
82
+ runWithTransactionScope(preset, transaction, callback) {
83
+ const transactionContext = new TransactionContext(this.transactionStorage.getStore(), {
84
+ preset,
85
+ transaction
86
+ });
87
+ return this.transactionStorage.run(transactionContext, async () => {
88
+ try {
89
+ return await callback();
90
+ } finally {
91
+ transactionContext.clearLocal();
92
+ }
93
+ });
84
94
  }
85
95
  setConfig(dbConfig) {
86
96
  this.currentConfig = dbConfig;
@@ -242,4 +252,4 @@ var init_db = __esmMin((() => {
242
252
  init_db();
243
253
  export { DB, DBClass, init_db };
244
254
 
245
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2RiLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiYXN5bmNfaG9va3NcIjtcblxuaW1wb3J0IHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcblxuaW1wb3J0IHsgdHlwZSBEYXRhYmFzZUNvbmZpZywgdHlwZSBTb25hbXVDb25maWcgfSBmcm9tIFwiLi4vYXBpL2NvbmZpZ1wiO1xuaW1wb3J0IHsgZ2V0U29uYW11RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnRTbmFwc2hvdHMsIHR5cGUgU29uYW11RW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vZW52XCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi9rbmV4XCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbnRleHQgfSBmcm9tIFwiLi90cmFuc2FjdGlvbi1jb250ZXh0XCI7XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBtZXJnZVJlY29yZChcbiAgdGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc291cmNlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlKSkge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRhcmdldFtrZXldO1xuXG4gICAgaWYgKGlzUGxhaW5PYmplY3QoY3VycmVudFZhbHVlKSAmJiBpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBtZXJnZVJlY29yZCh7IC4uLmN1cnJlbnRWYWx1ZSB9LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gbWVyZ2VDb25maWdzPFQgZXh0ZW5kcyBvYmplY3Q+KC4uLmNvbmZpZ3M6IChQYXJ0aWFsPFQ+IHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IFQge1xuICBjb25zdCBtZXJnZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgZm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuICAgIGlmIChjb25maWcgIT09IHVuZGVmaW5lZCAmJiBjb25maWcgIT09IG51bGwpIHtcbiAgICAgIG1lcmdlUmVjb3JkKG1lcmdlZCwgY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkIGFzIFQ7XG59XG5cbmV4cG9ydCB0eXBlIFNvbmFtdU1haW5EQlByZXNldCA9IFwidGVzdFwiIHwgXCJmaXh0dXJlXCIgfCBTb25hbXVFbnZpcm9ubWVudDtcbmV4cG9ydCB0eXBlIFNvbmFtdVJlYWRvbmx5REJQcmVzZXQgPVxuICB8IFwidGVzdF9yZWFkb25seVwiXG4gIHwgXCJkZXZlbG9wbWVudF9yZWFkb25seVwiXG4gIHwgXCJzdGFnaW5nX3JlYWRvbmx5XCJcbiAgfCBcInByb2R1Y3Rpb25fcmVhZG9ubHlcIjtcbmV4cG9ydCB0eXBlIFNvbmFtdURCUHJlc2V0ID0gU29uYW11TWFpbkRCUHJlc2V0IHwgU29uYW11UmVhZG9ubHlEQlByZXNldDtcbmV4cG9ydCB0eXBlIERCUHJlc2V0ID0gXCJ3XCIgfCBcInJcIiB8IFNvbmFtdURCUHJlc2V0O1xuXG5leHBvcnQgdHlwZSBTb25hbXVEQkNvbmZpZyA9IFJlY29yZDxTb25hbXVEQlByZXNldCwgS25leC5Db25maWc+O1xuXG5mdW5jdGlvbiBpc0NvbmNyZXRlUHJlc2V0KHZhbHVlOiBEQlByZXNldCk6IHZhbHVlIGlzIFNvbmFtdURCUHJlc2V0IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBcIndcIiAmJiB2YWx1ZSAhPT0gXCJyXCI7XG59XG5cbmZ1bmN0aW9uIGdldFJlYWRvbmx5UHJlc2V0KGVudmlyb25tZW50OiBTb25hbXVFbnZpcm9ubWVudCk6IFNvbmFtdVJlYWRvbmx5REJQcmVzZXQge1xuICByZXR1cm4gYCR7ZW52aXJvbm1lbnR9X3JlYWRvbmx5YCBhcyBTb25hbXVSZWFkb25seURCUHJlc2V0O1xufVxuXG5mdW5jdGlvbiBnZXRQcm9qZWN0RGF0YWJhc2VCYXNlTmFtZShwcm9qZWN0TmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAocHJvamVjdE5hbWUgPz8gXCJzb25hbXVcIilcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csIFwiX1wiKVxuICAgIC5yZXBsYWNlKC9eXyt8XyskL2csIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJGcm9tRW52KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSk7XG4gIGlmIChOdW1iZXIuaXNOYU4ocGFyc2VkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkYXRhYmFzZSBwb3J0OiAke3ZhbHVlfWApO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gY29ubmVjdGlvbkZyb21FbnYob3B0aW9uczoge1xuICBiYXNlTmFtZTogc3RyaW5nO1xuICBzdWZmaXg6IFNvbmFtdU1haW5EQlByZXNldDtcbiAgYmFzZUNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbiAgcHJlZml4PzogXCJTT05BTVVfREJfUkVBRE9OTFlcIiB8IFwiU09OQU1VX0RCX0ZJWFRVUkVcIjtcbiAgZW52PzogTm9kZUpTLlByb2Nlc3NFbnY7XG59KTogS25leC5QZ0Nvbm5lY3Rpb25Db25maWcge1xuICBjb25zdCB7XG4gICAgYmFzZU5hbWUsXG4gICAgc3VmZml4LFxuICAgIGJhc2VDb25uZWN0aW9uID0ge30sXG4gICAgcHJlZml4ID0gXCJTT05BTVVfREJcIixcbiAgICBlbnYgPSBwcm9jZXNzLmVudixcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlYWQgPSAoa2V5OiBcIkhPU1RcIiB8IFwiUE9SVFwiIHwgXCJVU0VSXCIgfCBcIlBBU1NXT1JEXCIgfCBcIk5BTUVcIikgPT4ge1xuICAgIGNvbnN0IHByZWZpeGVkVmFsdWUgPSBlbnZbYCR7cHJlZml4fV8ke2tleX1gXTtcbiAgICBpZiAocHJlZml4ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHByZWZpeCA9PT0gXCJTT05BTVVfREJfRklYVFVSRVwiICYmIGtleSA9PT0gXCJOQU1FXCIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudltgU09OQU1VX0RCXyR7a2V5fWBdO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbm5lY3Rpb24sXG4gICAgaG9zdDogcmVhZChcIkhPU1RcIikgPz8gYmFzZUNvbm5lY3Rpb24uaG9zdCA/PyBcIjAuMC4wLjBcIixcbiAgICBwb3J0OiBudW1iZXJGcm9tRW52KHJlYWQoXCJQT1JUXCIpLCBiYXNlQ29ubmVjdGlvbi5wb3J0ID8/IDU0MzIpLFxuICAgIHVzZXI6IHJlYWQoXCJVU0VSXCIpID8/IGJhc2VDb25uZWN0aW9uLnVzZXIgPz8gXCJwb3N0Z3Jlc1wiLFxuICAgIHBhc3N3b3JkOiByZWFkKFwiUEFTU1dPUkRcIikgPz8gYmFzZUNvbm5lY3Rpb24ucGFzc3dvcmQsXG4gICAgZGF0YWJhc2U6IHJlYWQoXCJOQU1FXCIpID8/IGAke2Jhc2VOYW1lfV8ke3N1ZmZpeH1gLFxuICB9O1xufVxuXG5mdW5jdGlvbiBuZXV0cmFsaXplRW52aXJvbm1lbnRDb25uZWN0aW9uRmllbGRzKFxuICBjb25uZWN0aW9uOiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZyB8IHVuZGVmaW5lZCxcbik6IEtuZXguUGdDb25uZWN0aW9uQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBuZXV0cmFsQ29ubmVjdGlvbiA9IHsgLi4uY29ubmVjdGlvbiB9O1xuICBkZWxldGUgbmV1dHJhbENvbm5lY3Rpb24uaG9zdDtcbiAgZGVsZXRlIG5ldXRyYWxDb25uZWN0aW9uLnBvcnQ7XG4gIGRlbGV0ZSBuZXV0cmFsQ29ubmVjdGlvbi51c2VyO1xuICBkZWxldGUgbmV1dHJhbENvbm5lY3Rpb24ucGFzc3dvcmQ7XG4gIGRlbGV0ZSBuZXV0cmFsQ29ubmVjdGlvbi5kYXRhYmFzZTtcblxuICByZXR1cm4gbmV1dHJhbENvbm5lY3Rpb247XG59XG5cbmZ1bmN0aW9uIGFzc2VydE5vTGVnYWN5RGF0YWJhc2VDb25maWcoY29uZmlnOiBTb25hbXVDb25maWdbXCJkYXRhYmFzZVwiXSk6IHZvaWQge1xuICBjb25zdCBsZWdhY3lDb25maWcgPSBjb25maWcgYXMgU29uYW11Q29uZmlnW1wiZGF0YWJhc2VcIl0gJiB7XG4gICAgbmFtZT86IHVua25vd247XG4gICAgZW52aXJvbm1lbnRzPzogdW5rbm93bjtcbiAgfTtcblxuICBpZiAobGVnYWN5Q29uZmlnLm5hbWUgIT09IHVuZGVmaW5lZCB8fCBsZWdhY3lDb25maWcuZW52aXJvbm1lbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlNvbmFtdSBkYXRhYmFzZS5uYW1lIGFuZCBkYXRhYmFzZS5lbnZpcm9ubWVudHMgd2VyZSByZW1vdmVkLiBVc2UgU09OQU1VX0RCXyogZG90ZW52IHZhcmlhYmxlcyBpbnN0ZWFkLlwiLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERCQ2xhc3Mge1xuICBwcml2YXRlIHdkYj86IEtuZXg7XG4gIHByaXZhdGUgcmRiPzogS25leDtcbiAgcHJpdmF0ZSBwcmVzZXREQnM6IE1hcDxTb25hbXVEQlByZXNldCwgS25leD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgd29ya2VyREJzOiBNYXA8bnVtYmVyLCBLbmV4PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBjdXJyZW50Q29uZmlnOiBTb25hbXVEQkNvbmZpZyB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyB0cmFuc2FjdGlvblN0b3JhZ2UgPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2U8VHJhbnNhY3Rpb25Db250ZXh0PigpO1xuXG4gIHB1YmxpYyBydW5XaXRoVHJhbnNhY3Rpb248VD4oY2FsbGJhY2s6ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvblN0b3JhZ2UucnVuKG5ldyBUcmFuc2FjdGlvbkNvbnRleHQoKSwgY2FsbGJhY2spO1xuICB9XG5cbiAgc2V0Q29uZmlnKGRiQ29uZmlnOiBTb25hbXVEQkNvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudENvbmZpZyA9IGRiQ29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50Q29uZmlnKCk6IFNvbmFtdURCQ29uZmlnIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTb25hbXUgREIgY29uZmlnIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldFRyYW5zYWN0aW9uQ29udGV4dCgpOiBUcmFuc2FjdGlvbkNvbnRleHQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uU3RvcmFnZS5nZXRTdG9yZSgpID8/IG5ldyBUcmFuc2FjdGlvbkNvbnRleHQoKTtcbiAgfVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIGNvbnN0IGRiQ29uZmlnID0gdGhpcy5nZXRDdXJyZW50Q29uZmlnKCk7XG5cbiAgICBpZiAoaXNDb25jcmV0ZVByZXNldCh3aGljaCkpIHtcbiAgICAgIGlmICghdGhpcy5wcmVzZXREQnMuaGFzKHdoaWNoKSkge1xuICAgICAgICB0aGlzLnByZXNldERCcy5zZXQod2hpY2gsIGNyZWF0ZUtuZXhJbnN0YW5jZShkYkNvbmZpZ1t3aGljaF0pKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGIgPSB0aGlzLnByZXNldERCcy5nZXQod2hpY2gpO1xuICAgICAgYXNzZXJ0KGRiLCBgREIgcHJlc2V0ICR7d2hpY2h9IG5vdCBmb3VuZGApO1xuICAgICAgcmV0dXJuIGRiO1xuICAgIH1cblxuICAgIGlmIChnZXRTb25hbXVFbnZpcm9ubWVudCgpID09PSBcInRlc3RcIikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52LlNPTkFNVV9XT1JLRVJfREIgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFdvcmtlckRCKGRiQ29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudGVzdFRyYW5zYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RUcmFuc2FjdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy53ZGIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2RiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy53ZGIgPSBjcmVhdGVLbmV4SW5zdGFuY2Uoe1xuICAgICAgICAgIC4uLmRiQ29uZmlnLnRlc3QsXG4gICAgICAgICAgcG9vbDoge1xuICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy53ZGI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VOYW1lID0gd2hpY2ggPT09IFwid1wiID8gXCJ3ZGJcIiA6IFwicmRiXCI7XG5cbiAgICBpZiAoIXRoaXNbaW5zdGFuY2VOYW1lXSkge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXREQkNvbmZpZyh3aGljaCk7XG4gICAgICB0aGlzW2luc3RhbmNlTmFtZV0gPSBjcmVhdGVLbmV4SW5zdGFuY2UoY29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tpbnN0YW5jZU5hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRXb3JrZXJEQihkYkNvbmZpZzogU29uYW11REJDb25maWcpOiBLbmV4IHtcbiAgICBpZiAodGhpcy50ZXN0VHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnRlc3RUcmFuc2FjdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdCB3b3JrZXJJZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LlZJVEVTVF9QT09MX0lEID8/IFwiMVwiLCAxMCk7XG5cbiAgICBpZiAoIXRoaXMud29ya2VyREJzLmhhcyh3b3JrZXJJZCkpIHtcbiAgICAgIGNvbnN0IGJhc2VUZXN0Q29uZmlnID0gZGJDb25maWcudGVzdDtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBiYXNlVGVzdENvbmZpZy5jb25uZWN0aW9uIGFzIHsgZGF0YWJhc2U6IHN0cmluZyB9O1xuICAgICAgY29uc3Qgd29ya2VyRGJOYW1lID0gYCR7Y29ubmVjdGlvbi5kYXRhYmFzZX1fJHt3b3JrZXJJZH1gO1xuXG4gICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7XG4gICAgICAgIC4uLmJhc2VUZXN0Q29uZmlnLFxuICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgLi4uY29ubmVjdGlvbixcbiAgICAgICAgICBkYXRhYmFzZTogd29ya2VyRGJOYW1lLFxuICAgICAgICB9LFxuICAgICAgICBwb29sOiB7IG1pbjogMSwgbWF4OiAxIH0sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLndvcmtlckRCcy5zZXQod29ya2VySWQsIGNyZWF0ZUtuZXhJbnN0YW5jZSh3b3JrZXJDb25maWcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IHRoaXMud29ya2VyREJzLmdldCh3b3JrZXJJZCk7XG4gICAgYXNzZXJ0KGRiLCBgV29ya2VyIERCICR7d29ya2VySWR9IG5vdCBmb3VuZGApO1xuICAgIHJldHVybiBkYjtcbiAgfVxuXG4gIGdldERCQ29uZmlnKHdoaWNoOiBEQlByZXNldCk6IEtuZXguQ29uZmlnIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMuZ2V0Q3VycmVudENvbmZpZygpO1xuXG4gICAgaWYgKGlzQ29uY3JldGVQcmVzZXQod2hpY2gpKSB7XG4gICAgICByZXR1cm4gZGJDb25maWdbd2hpY2hdO1xuICAgIH1cblxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gZ2V0U29uYW11RW52aXJvbm1lbnQoKTtcbiAgICBpZiAoZW52aXJvbm1lbnQgPT09IFwidGVzdFwiKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB3aGljaCA9PT0gXCJ3XCIgPyBkYkNvbmZpZy50ZXN0IDogZGJDb25maWcudGVzdF9yZWFkb25seTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRhcmdldCxcbiAgICAgICAgcG9vbDoge1xuICAgICAgICAgIG1pbjogMSxcbiAgICAgICAgICBtYXg6IDEsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB3aGljaCA9PT0gXCJ3XCIgPyBkYkNvbmZpZ1tlbnZpcm9ubWVudF0gOiBkYkNvbmZpZ1tnZXRSZWFkb25seVByZXNldChlbnZpcm9ubWVudCldO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53ZGIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy53ZGIuZGVzdHJveSgpO1xuICAgICAgdGhpcy53ZGIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnJkYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnJkYi5kZXN0cm95KCk7XG4gICAgICB0aGlzLnJkYiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkYiBvZiB0aGlzLnByZXNldERCcy52YWx1ZXMoKSkge1xuICAgICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLnByZXNldERCcy5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgZGIgb2YgdGhpcy53b3JrZXJEQnMudmFsdWVzKCkpIHtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy53b3JrZXJEQnMuY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZW5lcmF0ZURCQ29uZmlnKFxuICAgIGNvbmZpZzogU29uYW11Q29uZmlnW1wiZGF0YWJhc2VcIl0sXG4gICAgcHJvamVjdE5hbWU/OiBzdHJpbmcsXG4gICAgc25hcHNob3RzPzogRW52aXJvbm1lbnRTbmFwc2hvdHMsXG4gICk6IFNvbmFtdURCQ29uZmlnIHtcbiAgICBhc3NlcnROb0xlZ2FjeURhdGFiYXNlQ29uZmlnKGNvbmZpZyk7XG5cbiAgICBjb25zdCBiYXNlTmFtZSA9IGdldFByb2plY3REYXRhYmFzZUJhc2VOYW1lKHByb2plY3ROYW1lKTtcbiAgICBjb25zdCBkZWZhdWx0S25leENvbmZpZyA9IG1lcmdlQ29uZmlnczxQYXJ0aWFsPERhdGFiYXNlQ29uZmlnPj4oXG4gICAgICB7XG4gICAgICAgIGNsaWVudDogY29uZmlnLmRhdGFiYXNlID09PSBcInBnbmF0aXZlXCIgPyBcInBnbmF0aXZlXCIgOiBcInBvc3RncmVzcWxcIixcbiAgICAgICAgcG9vbDoge1xuICAgICAgICAgIG1pbjogMSxcbiAgICAgICAgICBtYXg6IDUsXG4gICAgICAgIH0sXG4gICAgICAgIG1pZ3JhdGlvbnM6IHtcbiAgICAgICAgICBkaXJlY3Rvcnk6IFwiLi9zcmMvbWlncmF0aW9uc1wiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNvbmZpZy5kZWZhdWx0T3B0aW9ucyxcbiAgICApO1xuICAgIGNvbnN0IGJhc2VDb25uZWN0aW9uID0gZGVmYXVsdEtuZXhDb25maWcuY29ubmVjdGlvbiBhcyBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBlbnZpcm9ubWVudEZhbGxiYWNrQ29ubmVjdGlvbiA9IHNuYXBzaG90c1xuICAgICAgPyBuZXV0cmFsaXplRW52aXJvbm1lbnRDb25uZWN0aW9uRmllbGRzKGJhc2VDb25uZWN0aW9uKVxuICAgICAgOiBiYXNlQ29ubmVjdGlvbjtcblxuICAgIGNvbnN0IGVudkZvclByZXNldCA9IChwcmVzZXQ6IFNvbmFtdU1haW5EQlByZXNldCk6IE5vZGVKUy5Qcm9jZXNzRW52ID0+IHtcbiAgICAgIGlmICghc25hcHNob3RzKSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzLmVudjtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVzZXQgPT09IFwiZml4dHVyZVwiKSB7XG4gICAgICAgIHJldHVybiBzbmFwc2hvdHMudGVzdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbmFwc2hvdHNbcHJlc2V0XTtcbiAgICB9O1xuXG4gICAgY29uc3QgbWFpbkNvbmZpZyA9IChwcmVzZXQ6IFNvbmFtdU1haW5EQlByZXNldCk6IEtuZXguQ29uZmlnID0+XG4gICAgICBtZXJnZUNvbmZpZ3MoZGVmYXVsdEtuZXhDb25maWcsIHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbkZyb21FbnYoe1xuICAgICAgICAgIGJhc2VOYW1lLFxuICAgICAgICAgIHN1ZmZpeDogcHJlc2V0LFxuICAgICAgICAgIGJhc2VDb25uZWN0aW9uOiBlbnZpcm9ubWVudEZhbGxiYWNrQ29ubmVjdGlvbixcbiAgICAgICAgICBlbnY6IGVudkZvclByZXNldChwcmVzZXQpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIGNvbnN0IHJlYWRvbmx5Q29uZmlnID0gKGVudmlyb25tZW50OiBTb25hbXVFbnZpcm9ubWVudCk6IEtuZXguQ29uZmlnID0+XG4gICAgICBtZXJnZUNvbmZpZ3M8S25leC5Db25maWc+KGRlZmF1bHRLbmV4Q29uZmlnLCBtYWluQ29uZmlnKGVudmlyb25tZW50KSwge1xuICAgICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uRnJvbUVudih7XG4gICAgICAgICAgYmFzZU5hbWUsXG4gICAgICAgICAgc3VmZml4OiBlbnZpcm9ubWVudCxcbiAgICAgICAgICBiYXNlQ29ubmVjdGlvbjogbWFpbkNvbmZpZyhlbnZpcm9ubWVudCkuY29ubmVjdGlvbiBhcyBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZyxcbiAgICAgICAgICBwcmVmaXg6IFwiU09OQU1VX0RCX1JFQURPTkxZXCIsXG4gICAgICAgICAgZW52OiBlbnZGb3JQcmVzZXQoZW52aXJvbm1lbnQpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgdGVzdCA9IG1haW5Db25maWcoXCJ0ZXN0XCIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlc3QsXG4gICAgICB0ZXN0X3JlYWRvbmx5OiByZWFkb25seUNvbmZpZyhcInRlc3RcIiksXG4gICAgICBmaXh0dXJlOiBtZXJnZUNvbmZpZ3MoZGVmYXVsdEtuZXhDb25maWcsIHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbkZyb21FbnYoe1xuICAgICAgICAgIGJhc2VOYW1lLFxuICAgICAgICAgIHN1ZmZpeDogXCJmaXh0dXJlXCIsXG4gICAgICAgICAgYmFzZUNvbm5lY3Rpb246IGVudmlyb25tZW50RmFsbGJhY2tDb25uZWN0aW9uLFxuICAgICAgICAgIHByZWZpeDogXCJTT05BTVVfREJfRklYVFVSRVwiLFxuICAgICAgICAgIGVudjogZW52Rm9yUHJlc2V0KFwiZml4dHVyZVwiKSxcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICAgIGRldmVsb3BtZW50OiBtYWluQ29uZmlnKFwiZGV2ZWxvcG1lbnRcIiksXG4gICAgICBkZXZlbG9wbWVudF9yZWFkb25seTogcmVhZG9ubHlDb25maWcoXCJkZXZlbG9wbWVudFwiKSxcbiAgICAgIHN0YWdpbmc6IG1haW5Db25maWcoXCJzdGFnaW5nXCIpLFxuICAgICAgc3RhZ2luZ19yZWFkb25seTogcmVhZG9ubHlDb25maWcoXCJzdGFnaW5nXCIpLFxuICAgICAgcHJvZHVjdGlvbjogbWFpbkNvbmZpZyhcInByb2R1Y3Rpb25cIiksXG4gICAgICBwcm9kdWN0aW9uX3JlYWRvbmx5OiByZWFkb25seUNvbmZpZyhcInByb2R1Y3Rpb25cIiksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyB0ZXN0VHJhbnNhY3Rpb246IEtuZXguVHJhbnNhY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgYXN5bmMgY3JlYXRlVGVzdFRyYW5zYWN0aW9uKCk6IFByb21pc2U8S25leC5UcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcIndcIik7XG4gICAgdGhpcy50ZXN0VHJhbnNhY3Rpb24gPSBhd2FpdCBkYi50cmFuc2FjdGlvbigpO1xuICAgIHJldHVybiB0aGlzLnRlc3RUcmFuc2FjdGlvbjtcbiAgfVxuICBhc3luYyBjbGVhclRlc3RUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnRlc3RUcmFuc2FjdGlvbj8ucm9sbGJhY2soKTtcbiAgICB0aGlzLnRlc3RUcmFuc2FjdGlvbiA9IG51bGw7XG4gIH1cbiAgYXN5bmMgZ2V0VGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxLbmV4PiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICByZXR1cm4gZGI7XG4gIH1cbn1cbmV4cG9ydCBjb25zdCBEQiA9IG5ldyBEQkNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFVQSxTQUFTLGNBQWMsT0FBa0Q7Q0FDdkUsT0FBTyxPQUFPLFVBQVUsWUFBWSxVQUFVLFFBQVEsQ0FBQyxNQUFNLFFBQVEsS0FBSztBQUM1RTtBQUVBLFNBQVMsWUFDUCxRQUNBLFFBQ3lCO0NBQ3pCLEtBQUssTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPLFFBQVEsTUFBTSxHQUFHO0VBQ2pELE1BQU0sZUFBZSxPQUFPO0VBRTVCLElBQUksY0FBYyxZQUFZLEtBQUssY0FBYyxLQUFLLEdBQ3BELE9BQU8sT0FBTyxZQUFZLEVBQUUsR0FBRyxhQUFhLEdBQUcsS0FBSztPQUVwRCxPQUFPLE9BQU87Q0FFbEI7Q0FFQSxPQUFPO0FBQ1Q7QUFFQSxTQUFTLGFBQStCLEdBQUcsU0FBK0M7Q0FDeEYsTUFBTSxTQUFrQyxDQUFDO0NBRXpDLEtBQUssTUFBTSxVQUFVLFNBQ25CLElBQUksV0FBVyxVQUFhLFdBQVcsTUFDckMsWUFBWSxRQUFRLE1BQWlDO0NBSXpELE9BQU87QUFDVDtBQWFBLFNBQVMsaUJBQWlCLE9BQTBDO0NBQ2xFLE9BQU8sVUFBVSxPQUFPLFVBQVU7QUFDcEM7QUFFQSxTQUFTLGtCQUFrQixhQUF3RDtDQUNqRixPQUFPLEdBQUcsWUFBWTtBQUN4QjtBQUVBLFNBQVMsMkJBQTJCLGFBQThCO0NBQ2hFLFFBQVEsZUFBZSxTQUFBLENBQ3BCLFlBQVksQ0FBQyxDQUNiLFFBQVEsZUFBZSxHQUFHLENBQUMsQ0FDM0IsUUFBUSxZQUFZLEVBQUU7QUFDM0I7QUFFQSxTQUFTLGNBQWMsT0FBMkIsVUFBMEI7Q0FDMUUsSUFBSSxVQUFVLFVBQWEsVUFBVSxJQUNuQyxPQUFPO0NBR1QsTUFBTSxTQUFTLE9BQU8sS0FBSztDQUMzQixJQUFJLE9BQU8sTUFBTSxNQUFNLEdBQ3JCLE1BQU0sSUFBSSxNQUFNLDBCQUEwQixPQUFPO0NBR25ELE9BQU87QUFD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
255
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFiYXNlL2RiLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiYXN5bmNfaG9va3NcIjtcblxuaW1wb3J0IHsgdHlwZSBLbmV4IH0gZnJvbSBcImtuZXhcIjtcblxuaW1wb3J0IHsgdHlwZSBEYXRhYmFzZUNvbmZpZywgdHlwZSBTb25hbXVDb25maWcgfSBmcm9tIFwiLi4vYXBpL2NvbmZpZ1wiO1xuaW1wb3J0IHsgZ2V0U29uYW11RW52aXJvbm1lbnQsIHR5cGUgRW52aXJvbm1lbnRTbmFwc2hvdHMsIHR5cGUgU29uYW11RW52aXJvbm1lbnQgfSBmcm9tIFwiLi4vZW52XCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi9rbmV4XCI7XG5pbXBvcnQgeyB0eXBlIFB1cmlUcmFuc2FjdGlvbldyYXBwZXIgfSBmcm9tIFwiLi9wdXJpLXdyYXBwZXJcIjtcbmltcG9ydCB7IFRyYW5zYWN0aW9uQ29udGV4dCB9IGZyb20gXCIuL3RyYW5zYWN0aW9uLWNvbnRleHRcIjtcblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlUmVjb3JkKFxuICB0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzb3VyY2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGFyZ2V0W2tleV07XG5cbiAgICBpZiAoaXNQbGFpbk9iamVjdChjdXJyZW50VmFsdWUpICYmIGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IG1lcmdlUmVjb3JkKHsgLi4uY3VycmVudFZhbHVlIH0sIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3M8VCBleHRlbmRzIG9iamVjdD4oLi4uY29uZmlnczogKFBhcnRpYWw8VD4gfCB1bmRlZmluZWQgfCBudWxsKVtdKTogVCB7XG4gIGNvbnN0IG1lcmdlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWdzKSB7XG4gICAgaWYgKGNvbmZpZyAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgbWVyZ2VSZWNvcmQobWVyZ2VkLCBjb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWQgYXMgVDtcbn1cblxuZXhwb3J0IHR5cGUgU29uYW11TWFpbkRCUHJlc2V0ID0gXCJ0ZXN0XCIgfCBcImZpeHR1cmVcIiB8IFNvbmFtdUVudmlyb25tZW50O1xuZXhwb3J0IHR5cGUgU29uYW11UmVhZG9ubHlEQlByZXNldCA9XG4gIHwgXCJ0ZXN0X3JlYWRvbmx5XCJcbiAgfCBcImRldmVsb3BtZW50X3JlYWRvbmx5XCJcbiAgfCBcInN0YWdpbmdfcmVhZG9ubHlcIlxuICB8IFwicHJvZHVjdGlvbl9yZWFkb25seVwiO1xuZXhwb3J0IHR5cGUgU29uYW11REJQcmVzZXQgPSBTb25hbXVNYWluREJQcmVzZXQgfCBTb25hbXVSZWFkb25seURCUHJlc2V0O1xuZXhwb3J0IHR5cGUgREJQcmVzZXQgPSBcIndcIiB8IFwiclwiIHwgU29uYW11REJQcmVzZXQ7XG5cbmV4cG9ydCB0eXBlIFNvbmFtdURCQ29uZmlnID0gUmVjb3JkPFNvbmFtdURCUHJlc2V0LCBLbmV4LkNvbmZpZz47XG5cbmZ1bmN0aW9uIGlzQ29uY3JldGVQcmVzZXQodmFsdWU6IERCUHJlc2V0KTogdmFsdWUgaXMgU29uYW11REJQcmVzZXQge1xuICByZXR1cm4gdmFsdWUgIT09IFwid1wiICYmIHZhbHVlICE9PSBcInJcIjtcbn1cblxuZnVuY3Rpb24gZ2V0UmVhZG9ubHlQcmVzZXQoZW52aXJvbm1lbnQ6IFNvbmFtdUVudmlyb25tZW50KTogU29uYW11UmVhZG9ubHlEQlByZXNldCB7XG4gIHJldHVybiBgJHtlbnZpcm9ubWVudH1fcmVhZG9ubHlgIGFzIFNvbmFtdVJlYWRvbmx5REJQcmVzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldFByb2plY3REYXRhYmFzZUJhc2VOYW1lKHByb2plY3ROYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChwcm9qZWN0TmFtZSA/PyBcInNvbmFtdVwiKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCJfXCIpXG4gICAgLnJlcGxhY2UoL15fK3xfKyQvZywgXCJcIik7XG59XG5cbmZ1bmN0aW9uIG51bWJlckZyb21FbnYodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gTnVtYmVyKHZhbHVlKTtcbiAgaWYgKE51bWJlci5pc05hTihwYXJzZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGFiYXNlIHBvcnQ6ICR7dmFsdWV9YCk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0aW9uRnJvbUVudihvcHRpb25zOiB7XG4gIGJhc2VOYW1lOiBzdHJpbmc7XG4gIHN1ZmZpeDogU29uYW11TWFpbkRCUHJlc2V0O1xuICBiYXNlQ29ubmVjdGlvbj86IEtuZXguUGdDb25uZWN0aW9uQ29uZmlnO1xuICBwcmVmaXg/OiBcIlNPTkFNVV9EQl9SRUFET05MWVwiIHwgXCJTT05BTVVfREJfRklYVFVSRVwiO1xuICBlbnY/OiBOb2RlSlMuUHJvY2Vzc0Vudjtcbn0pOiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZyB7XG4gIGNvbnN0IHtcbiAgICBiYXNlTmFtZSxcbiAgICBzdWZmaXgsXG4gICAgYmFzZUNvbm5lY3Rpb24gPSB7fSxcbiAgICBwcmVmaXggPSBcIlNPTkFNVV9EQlwiLFxuICAgIGVudiA9IHByb2Nlc3MuZW52LFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVhZCA9IChrZXk6IFwiSE9TVFwiIHwgXCJQT1JUXCIgfCBcIlVTRVJcIiB8IFwiUEFTU1dPUkRcIiB8IFwiTkFNRVwiKSA9PiB7XG4gICAgY29uc3QgcHJlZml4ZWRWYWx1ZSA9IGVudltgJHtwcmVmaXh9XyR7a2V5fWBdO1xuICAgIGlmIChwcmVmaXhlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBwcmVmaXhlZFZhbHVlO1xuICAgIH1cbiAgICBpZiAocHJlZml4ID09PSBcIlNPTkFNVV9EQl9GSVhUVVJFXCIgJiYga2V5ID09PSBcIk5BTUVcIikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZW52W2BTT05BTVVfREJfJHtrZXl9YF07XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlQ29ubmVjdGlvbixcbiAgICBob3N0OiByZWFkKFwiSE9TVFwiKSA/PyBiYXNlQ29ubmVjdGlvbi5ob3N0ID8/IFwiMC4wLjAuMFwiLFxuICAgIHBvcnQ6IG51bWJlckZyb21FbnYocmVhZChcIlBPUlRcIiksIGJhc2VDb25uZWN0aW9uLnBvcnQgPz8gNTQzMiksXG4gICAgdXNlcjogcmVhZChcIlVTRVJcIikgPz8gYmFzZUNvbm5lY3Rpb24udXNlciA/PyBcInBvc3RncmVzXCIsXG4gICAgcGFzc3dvcmQ6IHJlYWQoXCJQQVNTV09SRFwiKSA/PyBiYXNlQ29ubmVjdGlvbi5wYXNzd29yZCxcbiAgICBkYXRhYmFzZTogcmVhZChcIk5BTUVcIikgPz8gYCR7YmFzZU5hbWV9XyR7c3VmZml4fWAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5ldXRyYWxpemVFbnZpcm9ubWVudENvbm5lY3Rpb25GaWVsZHMoXG4gIGNvbm5lY3Rpb246IEtuZXguUGdDb25uZWN0aW9uQ29uZmlnIHwgdW5kZWZpbmVkLFxuKTogS25leC5QZ0Nvbm5lY3Rpb25Db25maWcgfCB1bmRlZmluZWQge1xuICBpZiAoY29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG5ldXRyYWxDb25uZWN0aW9uID0geyAuLi5jb25uZWN0aW9uIH07XG4gIGRlbGV0ZSBuZXV0cmFsQ29ubmVjdGlvbi5ob3N0O1xuICBkZWxldGUgbmV1dHJhbENvbm5lY3Rpb24ucG9ydDtcbiAgZGVsZXRlIG5ldXRyYWxDb25uZWN0aW9uLnVzZXI7XG4gIGRlbGV0ZSBuZXV0cmFsQ29ubmVjdGlvbi5wYXNzd29yZDtcbiAgZGVsZXRlIG5ldXRyYWxDb25uZWN0aW9uLmRhdGFiYXNlO1xuXG4gIHJldHVybiBuZXV0cmFsQ29ubmVjdGlvbjtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0Tm9MZWdhY3lEYXRhYmFzZUNvbmZpZyhjb25maWc6IFNvbmFtdUNvbmZpZ1tcImRhdGFiYXNlXCJdKTogdm9pZCB7XG4gIGNvbnN0IGxlZ2FjeUNvbmZpZyA9IGNvbmZpZyBhcyBTb25hbXVDb25maWdbXCJkYXRhYmFzZVwiXSAmIHtcbiAgICBuYW1lPzogdW5rbm93bjtcbiAgICBlbnZpcm9ubWVudHM/OiB1bmtub3duO1xuICB9O1xuXG4gIGlmIChsZWdhY3lDb25maWcubmFtZSAhPT0gdW5kZWZpbmVkIHx8IGxlZ2FjeUNvbmZpZy5lbnZpcm9ubWVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiU29uYW11IGRhdGFiYXNlLm5hbWUgYW5kIGRhdGFiYXNlLmVudmlyb25tZW50cyB3ZXJlIHJlbW92ZWQuIFVzZSBTT05BTVVfREJfKiBkb3RlbnYgdmFyaWFibGVzIGluc3RlYWQuXCIsXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgREJDbGFzcyB7XG4gIHByaXZhdGUgd2RiPzogS25leDtcbiAgcHJpdmF0ZSByZGI/OiBLbmV4O1xuICBwcml2YXRlIHByZXNldERCczogTWFwPFNvbmFtdURCUHJlc2V0LCBLbmV4PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB3b3JrZXJEQnM6IE1hcDxudW1iZXIsIEtuZXg+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGN1cnJlbnRDb25maWc6IFNvbmFtdURCQ29uZmlnIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIHRyYW5zYWN0aW9uU3RvcmFnZSA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxUcmFuc2FjdGlvbkNvbnRleHQ+KCk7XG5cbiAgcHVibGljIHJ1bldpdGhUcmFuc2FjdGlvblNjb3BlPFQ+KFxuICAgIHByZXNldDogREJQcmVzZXQsXG4gICAgdHJhbnNhY3Rpb246IFB1cmlUcmFuc2FjdGlvbldyYXBwZXIsXG4gICAgY2FsbGJhY2s6ICgpID0+IFByb21pc2U8VD4sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHBhcmVudENvbnRleHQgPSB0aGlzLnRyYW5zYWN0aW9uU3RvcmFnZS5nZXRTdG9yZSgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uQ29udGV4dCA9IG5ldyBUcmFuc2FjdGlvbkNvbnRleHQocGFyZW50Q29udGV4dCwgeyBwcmVzZXQsIHRyYW5zYWN0aW9uIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25TdG9yYWdlLnJ1bih0cmFuc2FjdGlvbkNvbnRleHQsIGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgLy8gZGV0YWNoZWQgZGVzY2VuZGFudOqwgCDsmYTro4zrkJwg7Yq4656c7J6t7IWY7J2EIOuLpOyLnCDsgqzsmqntlZjsp4Ag7JWK64+E66GdIGxvY2FsIHNjb3Bl66W8IOu5hOyatOuLpC5cbiAgICAgICAgdHJhbnNhY3Rpb25Db250ZXh0LmNsZWFyTG9jYWwoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldENvbmZpZyhkYkNvbmZpZzogU29uYW11REJDb25maWcpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRDb25maWcgPSBkYkNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudENvbmZpZygpOiBTb25hbXVEQkNvbmZpZyB7XG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU29uYW11IERCIGNvbmZpZyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWRcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudENvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBnZXRUcmFuc2FjdGlvbkNvbnRleHQoKTogVHJhbnNhY3Rpb25Db250ZXh0IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvblN0b3JhZ2UuZ2V0U3RvcmUoKSA/PyBuZXcgVHJhbnNhY3Rpb25Db250ZXh0KCk7XG4gIH1cblxuICBnZXREQih3aGljaDogREJQcmVzZXQpOiBLbmV4IHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMuZ2V0Q3VycmVudENvbmZpZygpO1xuXG4gICAgaWYgKGlzQ29uY3JldGVQcmVzZXQod2hpY2gpKSB7XG4gICAgICBpZiAoIXRoaXMucHJlc2V0REJzLmhhcyh3aGljaCkpIHtcbiAgICAgICAgdGhpcy5wcmVzZXREQnMuc2V0KHdoaWNoLCBjcmVhdGVLbmV4SW5zdGFuY2UoZGJDb25maWdbd2hpY2hdKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRiID0gdGhpcy5wcmVzZXREQnMuZ2V0KHdoaWNoKTtcbiAgICAgIGFzc2VydChkYiwgYERCIHByZXNldCAke3doaWNofSBub3QgZm91bmRgKTtcbiAgICAgIHJldHVybiBkYjtcbiAgICB9XG5cbiAgICBpZiAoZ2V0U29uYW11RW52aXJvbm1lbnQoKSA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5TT05BTVVfV09SS0VSX0RCID09PSBcInRydWVcIikge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRXb3JrZXJEQihkYkNvbmZpZyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRlc3RUcmFuc2FjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2RiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2RiID0gY3JlYXRlS25leEluc3RhbmNlKHtcbiAgICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAgIHBvb2w6IHtcbiAgICAgICAgICAgIG1pbjogMSxcbiAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMud2RiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlTmFtZSA9IHdoaWNoID09PSBcIndcIiA/IFwid2RiXCIgOiBcInJkYlwiO1xuXG4gICAgaWYgKCF0aGlzW2luc3RhbmNlTmFtZV0pIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0REJDb25maWcod2hpY2gpO1xuICAgICAgdGhpc1tpbnN0YW5jZU5hbWVdID0gY3JlYXRlS25leEluc3RhbmNlKGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbaW5zdGFuY2VOYW1lXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0V29ya2VyREIoZGJDb25maWc6IFNvbmFtdURCQ29uZmlnKTogS25leCB7XG4gICAgaWYgKHRoaXMudGVzdFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3Qgd29ya2VySWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5WSVRFU1RfUE9PTF9JRCA/PyBcIjFcIiwgMTApO1xuXG4gICAgaWYgKCF0aGlzLndvcmtlckRCcy5oYXMod29ya2VySWQpKSB7XG4gICAgICBjb25zdCBiYXNlVGVzdENvbmZpZyA9IGRiQ29uZmlnLnRlc3Q7XG4gICAgICBjb25zdCBjb25uZWN0aW9uID0gYmFzZVRlc3RDb25maWcuY29ubmVjdGlvbiBhcyB7IGRhdGFiYXNlOiBzdHJpbmcgfTtcbiAgICAgIGNvbnN0IHdvcmtlckRiTmFtZSA9IGAke2Nvbm5lY3Rpb24uZGF0YWJhc2V9XyR7d29ya2VySWR9YDtcblxuICAgICAgY29uc3Qgd29ya2VyQ29uZmlnID0ge1xuICAgICAgICAuLi5iYXNlVGVzdENvbmZpZyxcbiAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgIC4uLmNvbm5lY3Rpb24sXG4gICAgICAgICAgZGF0YWJhc2U6IHdvcmtlckRiTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgcG9vbDogeyBtaW46IDEsIG1heDogMSB9LFxuICAgICAgfTtcblxuICAgICAgdGhpcy53b3JrZXJEQnMuc2V0KHdvcmtlcklkLCBjcmVhdGVLbmV4SW5zdGFuY2Uod29ya2VyQ29uZmlnKSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGIgPSB0aGlzLndvcmtlckRCcy5nZXQod29ya2VySWQpO1xuICAgIGFzc2VydChkYiwgYFdvcmtlciBEQiAke3dvcmtlcklkfSBub3QgZm91bmRgKTtcbiAgICByZXR1cm4gZGI7XG4gIH1cblxuICBnZXREQkNvbmZpZyh3aGljaDogREJQcmVzZXQpOiBLbmV4LkNvbmZpZyB7XG4gICAgY29uc3QgZGJDb25maWcgPSB0aGlzLmdldEN1cnJlbnRDb25maWcoKTtcblxuICAgIGlmIChpc0NvbmNyZXRlUHJlc2V0KHdoaWNoKSkge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnW3doaWNoXTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGdldFNvbmFtdUVudmlyb25tZW50KCk7XG4gICAgaWYgKGVudmlyb25tZW50ID09PSBcInRlc3RcIikge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gd2hpY2ggPT09IFwid1wiID8gZGJDb25maWcudGVzdCA6IGRiQ29uZmlnLnRlc3RfcmVhZG9ubHk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50YXJnZXQsXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiAxLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2hpY2ggPT09IFwid1wiID8gZGJDb25maWdbZW52aXJvbm1lbnRdIDogZGJDb25maWdbZ2V0UmVhZG9ubHlQcmVzZXQoZW52aXJvbm1lbnQpXTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMud2RiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMud2RiLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMud2RiID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZGIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy5yZGIuZGVzdHJveSgpO1xuICAgICAgdGhpcy5yZGIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZGIgb2YgdGhpcy5wcmVzZXREQnMudmFsdWVzKCkpIHtcbiAgICAgIGF3YWl0IGRiLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5wcmVzZXREQnMuY2xlYXIoKTtcbiAgICBmb3IgKGNvbnN0IGRiIG9mIHRoaXMud29ya2VyREJzLnZhbHVlcygpKSB7XG4gICAgICBhd2FpdCBkYi5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMud29ya2VyREJzLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2VuZXJhdGVEQkNvbmZpZyhcbiAgICBjb25maWc6IFNvbmFtdUNvbmZpZ1tcImRhdGFiYXNlXCJdLFxuICAgIHByb2plY3ROYW1lPzogc3RyaW5nLFxuICAgIHNuYXBzaG90cz86IEVudmlyb25tZW50U25hcHNob3RzLFxuICApOiBTb25hbXVEQkNvbmZpZyB7XG4gICAgYXNzZXJ0Tm9MZWdhY3lEYXRhYmFzZUNvbmZpZyhjb25maWcpO1xuXG4gICAgY29uc3QgYmFzZU5hbWUgPSBnZXRQcm9qZWN0RGF0YWJhc2VCYXNlTmFtZShwcm9qZWN0TmFtZSk7XG4gICAgY29uc3QgZGVmYXVsdEtuZXhDb25maWcgPSBtZXJnZUNvbmZpZ3M8UGFydGlhbDxEYXRhYmFzZUNvbmZpZz4+KFxuICAgICAge1xuICAgICAgICBjbGllbnQ6IGNvbmZpZy5kYXRhYmFzZSA9PT0gXCJwZ25hdGl2ZVwiID8gXCJwZ25hdGl2ZVwiIDogXCJwb3N0Z3Jlc3FsXCIsXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiA1LFxuICAgICAgICB9LFxuICAgICAgICBtaWdyYXRpb25zOiB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBcIi4vc3JjL21pZ3JhdGlvbnNcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBjb25maWcuZGVmYXVsdE9wdGlvbnMsXG4gICAgKTtcbiAgICBjb25zdCBiYXNlQ29ubmVjdGlvbiA9IGRlZmF1bHRLbmV4Q29uZmlnLmNvbm5lY3Rpb24gYXMgS25leC5QZ0Nvbm5lY3Rpb25Db25maWcgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZW52aXJvbm1lbnRGYWxsYmFja0Nvbm5lY3Rpb24gPSBzbmFwc2hvdHNcbiAgICAgID8gbmV1dHJhbGl6ZUVudmlyb25tZW50Q29ubmVjdGlvbkZpZWxkcyhiYXNlQ29ubmVjdGlvbilcbiAgICAgIDogYmFzZUNvbm5lY3Rpb247XG5cbiAgICBjb25zdCBlbnZGb3JQcmVzZXQgPSAocHJlc2V0OiBTb25hbXVNYWluREJQcmVzZXQpOiBOb2RlSlMuUHJvY2Vzc0VudiA9PiB7XG4gICAgICBpZiAoIXNuYXBzaG90cykge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbnY7XG4gICAgICB9XG4gICAgICBpZiAocHJlc2V0ID09PSBcImZpeHR1cmVcIikge1xuICAgICAgICByZXR1cm4gc25hcHNob3RzLnRlc3Q7XG4gICAgICB9XG4gICAgICByZXR1cm4gc25hcHNob3RzW3ByZXNldF07XG4gICAgfTtcblxuICAgIGNvbnN0IG1haW5Db25maWcgPSAocHJlc2V0OiBTb25hbXVNYWluREJQcmVzZXQpOiBLbmV4LkNvbmZpZyA9PlxuICAgICAgbWVyZ2VDb25maWdzKGRlZmF1bHRLbmV4Q29uZmlnLCB7XG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb25Gcm9tRW52KHtcbiAgICAgICAgICBiYXNlTmFtZSxcbiAgICAgICAgICBzdWZmaXg6IHByZXNldCxcbiAgICAgICAgICBiYXNlQ29ubmVjdGlvbjogZW52aXJvbm1lbnRGYWxsYmFja0Nvbm5lY3Rpb24sXG4gICAgICAgICAgZW52OiBlbnZGb3JQcmVzZXQocHJlc2V0KSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICBjb25zdCByZWFkb25seUNvbmZpZyA9IChlbnZpcm9ubWVudDogU29uYW11RW52aXJvbm1lbnQpOiBLbmV4LkNvbmZpZyA9PlxuICAgICAgbWVyZ2VDb25maWdzPEtuZXguQ29uZmlnPihkZWZhdWx0S25leENvbmZpZywgbWFpbkNvbmZpZyhlbnZpcm9ubWVudCksIHtcbiAgICAgICAgY29ubmVjdGlvbjogY29ubmVjdGlvbkZyb21FbnYoe1xuICAgICAgICAgIGJhc2VOYW1lLFxuICAgICAgICAgIHN1ZmZpeDogZW52aXJvbm1lbnQsXG4gICAgICAgICAgYmFzZUNvbm5lY3Rpb246IG1haW5Db25maWcoZW52aXJvbm1lbnQpLmNvbm5lY3Rpb24gYXMgS25leC5QZ0Nvbm5lY3Rpb25Db25maWcsXG4gICAgICAgICAgcHJlZml4OiBcIlNPTkFNVV9EQl9SRUFET05MWVwiLFxuICAgICAgICAgIGVudjogZW52Rm9yUHJlc2V0KGVudmlyb25tZW50KSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHRlc3QgPSBtYWluQ29uZmlnKFwidGVzdFwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZXN0LFxuICAgICAgdGVzdF9yZWFkb25seTogcmVhZG9ubHlDb25maWcoXCJ0ZXN0XCIpLFxuICAgICAgZml4dHVyZTogbWVyZ2VDb25maWdzKGRlZmF1bHRLbmV4Q29uZmlnLCB7XG4gICAgICAgIGNvbm5lY3Rpb246IGNvbm5lY3Rpb25Gcm9tRW52KHtcbiAgICAgICAgICBiYXNlTmFtZSxcbiAgICAgICAgICBzdWZmaXg6IFwiZml4dHVyZVwiLFxuICAgICAgICAgIGJhc2VDb25uZWN0aW9uOiBlbnZpcm9ubWVudEZhbGxiYWNrQ29ubmVjdGlvbixcbiAgICAgICAgICBwcmVmaXg6IFwiU09OQU1VX0RCX0ZJWFRVUkVcIixcbiAgICAgICAgICBlbnY6IGVudkZvclByZXNldChcImZpeHR1cmVcIiksXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgICBkZXZlbG9wbWVudDogbWFpbkNvbmZpZyhcImRldmVsb3BtZW50XCIpLFxuICAgICAgZGV2ZWxvcG1lbnRfcmVhZG9ubHk6IHJlYWRvbmx5Q29uZmlnKFwiZGV2ZWxvcG1lbnRcIiksXG4gICAgICBzdGFnaW5nOiBtYWluQ29uZmlnKFwic3RhZ2luZ1wiKSxcbiAgICAgIHN0YWdpbmdfcmVhZG9ubHk6IHJlYWRvbmx5Q29uZmlnKFwic3RhZ2luZ1wiKSxcbiAgICAgIHByb2R1Y3Rpb246IG1haW5Db25maWcoXCJwcm9kdWN0aW9uXCIpLFxuICAgICAgcHJvZHVjdGlvbl9yZWFkb25seTogcmVhZG9ubHlDb25maWcoXCJwcm9kdWN0aW9uXCIpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgdGVzdFRyYW5zYWN0aW9uOiBLbmV4LlRyYW5zYWN0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGFzeW5jIGNyZWF0ZVRlc3RUcmFuc2FjdGlvbigpOiBQcm9taXNlPEtuZXguVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIoXCJ3XCIpO1xuICAgIHRoaXMudGVzdFRyYW5zYWN0aW9uID0gYXdhaXQgZGIudHJhbnNhY3Rpb24oKTtcbiAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gIH1cbiAgYXN5bmMgY2xlYXJUZXN0VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy50ZXN0VHJhbnNhY3Rpb24/LnJvbGxiYWNrKCk7XG4gICAgdGhpcy50ZXN0VHJhbnNhY3Rpb24gPSBudWxsO1xuICB9XG4gIGFzeW5jIGdldFRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8S25leD4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcIndcIik7XG4gICAgcmV0dXJuIGRiO1xuICB9XG59XG5leHBvcnQgY29uc3QgREIgPSBuZXcgREJDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBV0EsU0FBUyxjQUFjLE9BQWtEO0NBQ3ZFLE9BQU8sT0FBTyxVQUFVLFlBQVksVUFBVSxRQUFRLENBQUMsTUFBTSxRQUFRLEtBQUs7QUFDNUU7QUFFQSxTQUFTLFlBQ1AsUUFDQSxRQUN5QjtDQUN6QixLQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxRQUFRLE1BQU0sR0FBRztFQUNqRCxNQUFNLGVBQWUsT0FBTztFQUU1QixJQUFJLGNBQWMsWUFBWSxLQUFLLGNBQWMsS0FBSyxHQUNwRCxPQUFPLE9BQU8sWUFBWSxFQUFFLEdBQUcsYUFBYSxHQUFHLEtBQUs7T0FF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
@@ -1 +1 @@
1
- {"version":3,"file":"puri-wrapper.d.ts","sourceRoot":"","sources":["../../src/database/puri-wrapper.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,MAAM,EACX,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAE1B,KAAK,SAAS,CAAC,OAAO,SAAS,oBAAoB,IAAI,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC;AAEtF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAAa,WAAW,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB;IAEzE,IAAI,EAAE,IAAI;IACV,aAAa,EAAE,aAAa;gBAD5B,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,aAAa;IAGrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAK1B,IAAI,CAAC,MAAM,SAAS,MAAM,OAAO,EAC/B,SAAS,EAAE,MAAM,GAChB,IAAI,CACL,OAAO,EACP,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1C,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CACjD;IAED,IAAI,CAAC,MAAM,SAAS,MAAM,OAAO,EAAE,MAAM,SAAS,MAAM,EAAE,IAAI,EAAE;SAC7D,CAAC,IAAI,MAAM,GAAG,MAAM;KACtB,GAAG,IAAI,CACN,OAAO,EACP,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1C,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CACjD;IAED,IAAI,CAAC,MAAM,SAAS,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;SAC3C,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC;KAC9C,GAAG,IAAI,CACN,OAAO,EACP,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,EACrC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAC5C;IAMD,KAAK,CAAC,MAAM,SAAS,MAAM,OAAO,EAChC,SAAS,EAAE,MAAM,GAChB,IAAI,CACL,OAAO,EACP,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1C,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CACjD;IAED,KAAK,CAAC,MAAM,SAAS,MAAM,OAAO,EAAE,MAAM,SAAS,MAAM,EAAE,IAAI,EAAE;SAC9D,CAAC,IAAI,MAAM,GAAG,MAAM;KACtB,GAAG,IAAI,CACN,OAAO,EACP,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1C,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CACjD;IAED,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;SAC5C,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC;KAC9C,GAAG,IAAI,CACN,OAAO,EACP,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,EACrC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAC5C;IAKK,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,sBAAsB,KAAK,OAAO,CAAC,CAAC,CAAC,EACrD,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,CAAC,CAAC;IA6Cb,UAAU,CAAC,MAAM,SAAS,SAAS,CAAC,OAAO,CAAC,EAC1C,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,CAAC;SACV,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;KAC/D,CAAC,GACD,KAAK;IAIR,QAAQ,CAAC,MAAM,SAAS,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,oBAAoB,EACrE,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE,CAAC;IAIlD,YAAY,CAAC,MAAM,SAAS,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,oBAAoB,EACzE,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE,CAAC;IAIlD,gBAAgB,CAAC,MAAM,SAAS,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,oBAAoB,EAC7E,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE,CAAC;IAIlD,aAAa,CACX,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,GAC1D,OAAO,CAAC,IAAI,CAAC;IAKV,gBAAgB;YAKR,kBAAkB;CAsBjC;AAED,qBAAa,sBAAuB,SAAQ,WAAW;IAE5C,GAAG,EAAE,IAAI,CAAC,WAAW;IACrB,aAAa,EAAE,aAAa;gBAD5B,GAAG,EAAE,IAAI,CAAC,WAAW,EACrB,aAAa,EAAE,aAAa;IAK/B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B"}
1
+ {"version":3,"file":"puri-wrapper.d.ts","sourceRoot":"","sources":["../../src/database/puri-wrapper.ts"],"names":[],"mappings":"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"}
@@ -24,25 +24,18 @@ var init_puri_wrapper = __esmMin((() => {
24
24
  async transaction(callback, options = {}) {
25
25
  const { isolation, readOnly, dbPreset = "w" } = options;
26
26
  const { DB } = await import("./db.js");
27
- const existingContext = DB.transactionStorage.getStore();
28
27
  const startTransaction = async (knex, upsertBuilder) => {
29
28
  return knex.transaction(async (trx) => {
30
29
  const trxWrapper = new PuriTransactionWrapper(trx, upsertBuilder);
31
- DB.getTransactionContext().setTransaction(dbPreset, trxWrapper);
32
- try {
33
- return await callback(trxWrapper);
34
- } finally {
35
- DB.getTransactionContext().deleteTransaction(dbPreset);
36
- }
30
+ return DB.runWithTransactionScope(dbPreset, trxWrapper, () => callback(trxWrapper));
37
31
  }, {
38
32
  isolationLevel: isolation,
39
33
  readOnly
40
34
  });
41
35
  };
42
- if (!existingContext) return DB.runWithTransaction(() => startTransaction(this.knex, this.upsertBuilder));
43
- const existingTrx = existingContext.getTransaction(dbPreset);
36
+ const existingTrx = DB.transactionStorage.getStore()?.getTransaction(dbPreset);
44
37
  if (existingTrx) return startTransaction(existingTrx.trx, existingTrx.upsertBuilder);
45
- else return startTransaction(this.knex, this.upsertBuilder);
38
+ return startTransaction(this.knex, this.upsertBuilder);
46
39
  }
47
40
  ubRegister(tableName, row) {
48
41
  return this.upsertBuilder.register(tableName, row);
@@ -100,4 +93,4 @@ var init_puri_wrapper = __esmMin((() => {
100
93
  init_puri_wrapper();
101
94
  export { PuriTransactionWrapper, PuriWrapper, init_puri_wrapper };
102
95
 
103
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyaS13cmFwcGVyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLXdyYXBwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogb3hsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyAvLyBQdXJpV3JhcHBlcuuKlCDri6TslpHtlZwg7YOA7J6F7J2EIOyCrOyaqe2VmOqzoCDsnojsirXri4jri6QuXG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgRGF0YWJhc2VTY2hlbWFFeHRlbmQgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgREJQcmVzZXQgfSBmcm9tIFwiLi9kYlwiO1xuaW1wb3J0IHsgUHVyaSB9IGZyb20gXCIuL3B1cmlcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ29sdW1uS2V5cyxcbiAgdHlwZSBJZFR5cGUsXG4gIHR5cGUgT21pdEludGVybmFsVHlwZUtleXMsXG4gIHR5cGUgUHVyaVRhYmxlLFxufSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQge1xuICB0eXBlIEluc2VydE9ubHlPcHRpb25zLFxuICB0eXBlIFVCUmVmLFxuICB0eXBlIFVwc2VydEJ1aWxkZXIsXG4gIHR5cGUgVXBzZXJ0T3B0aW9ucyxcbn0gZnJvbSBcIi4vdXBzZXJ0LWJ1aWxkZXJcIjtcblxudHlwZSBUYWJsZU5hbWU8VFNjaGVtYSBleHRlbmRzIERhdGFiYXNlU2NoZW1hRXh0ZW5kPiA9IEV4dHJhY3Q8a2V5b2YgVFNjaGVtYSwgc3RyaW5nPjtcblxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7XG4gIGlzb2xhdGlvbj86IEV4Y2x1ZGU8S25leC5Jc29sYXRpb25MZXZlbHMsIFwic25hcHNob3RcIj47IC8vIHNuYXBzaG90OiBtc3NxbCBvbmx5XG4gIGRiUHJlc2V0PzogREJQcmVzZXQ7XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBQdXJpV3JhcHBlcjxUU2NoZW1hIGV4dGVuZHMgRGF0YWJhc2VTY2hlbWFFeHRlbmQgPSBEYXRhYmFzZVNjaGVtYUV4dGVuZD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMga25leDogS25leCxcbiAgICBwdWJsaWMgdXBzZXJ0QnVpbGRlcjogVXBzZXJ0QnVpbGRlcixcbiAgKSB7fVxuXG4gIHJhdyhzcWw6IHN0cmluZyk6IEtuZXguUmF3IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4LnJhdyhzcWwpO1xuICB9XG5cbiAgLy8g7YWM7J2067iU66qF7Jy866GcIOyLnOyekVxuICBmcm9tPFRUYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgUmVjb3JkPFRUYWJsZSwgUHVyaVRhYmxlPFRTY2hlbWFbVFRhYmxlXT4+LFxuICAgIE9taXRJbnRlcm5hbFR5cGVLZXlzPFB1cmlUYWJsZTxUU2NoZW1hW1RUYWJsZV0+PlxuICA+O1xuICAvLyDthYzsnbTruJTrqoUgKyBBbGlhc+uhnCDsi5zsnpFcbiAgZnJvbTxUVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KHNwZWM6IHtcbiAgICBbSyBpbiBUQWxpYXNdOiBUVGFibGU7XG4gIH0pOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgUmVjb3JkPFRBbGlhcywgUHVyaVRhYmxlPFRTY2hlbWFbVFRhYmxlXT4+LFxuICAgIE9taXRJbnRlcm5hbFR5cGVLZXlzPFB1cmlUYWJsZTxUU2NoZW1hW1RUYWJsZV0+PlxuICA+O1xuICAvLyDshJzruIzsv7zrpqzroZwg7Iuc7J6RXG4gIGZyb208VEFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihzcGVjOiB7XG4gICAgW0sgaW4gVEFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+O1xuICB9KTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFJlY29yZDxUQWxpYXMsIFB1cmlUYWJsZTxUU3ViUmVzdWx0Pj4sXG4gICAgT21pdEludGVybmFsVHlwZUtleXM8UHVyaVRhYmxlPFRTdWJSZXN1bHQ+PlxuICA+O1xuICBmcm9tKHNwZWM6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQdXJpKHRoaXMua25leCwgc3BlYyk7XG4gIH1cblxuICAvLyDthYzsnbTruJTrqoXsnLzroZwg7Iuc7J6RXG4gIHRhYmxlPFRUYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgUmVjb3JkPFRUYWJsZSwgUHVyaVRhYmxlPFRTY2hlbWFbVFRhYmxlXT4+LFxuICAgIE9taXRJbnRlcm5hbFR5cGVLZXlzPFB1cmlUYWJsZTxUU2NoZW1hW1RUYWJsZV0+PlxuICA+O1xuICAvLyDthYzsnbTruJTrqoUgKyBBbGlhc+uhnCDsi5zsnpFcbiAgdGFibGU8VFRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVEFsaWFzIGV4dGVuZHMgc3RyaW5nPihzcGVjOiB7XG4gICAgW0sgaW4gVEFsaWFzXTogVFRhYmxlO1xuICB9KTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFJlY29yZDxUQWxpYXMsIFB1cmlUYWJsZTxUU2NoZW1hW1RUYWJsZV0+PixcbiAgICBPbWl0SW50ZXJuYWxUeXBlS2V5czxQdXJpVGFibGU8VFNjaGVtYVtUVGFibGVdPj5cbiAgPjtcbiAgLy8g7ISc67iM7L+866as66GcIOyLnOyekVxuICB0YWJsZTxUQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KHNwZWM6IHtcbiAgICBbSyBpbiBUQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD47XG4gIH0pOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgUmVjb3JkPFRBbGlhcywgUHVyaVRhYmxlPFRTdWJSZXN1bHQ+PixcbiAgICBPbWl0SW50ZXJuYWxUeXBlS2V5czxQdXJpVGFibGU8VFN1YlJlc3VsdD4+XG4gID47XG4gIHRhYmxlKHNwZWM6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQdXJpKHRoaXMua25leCwgc3BlYyk7XG4gIH1cblxuICBhc3luYyB0cmFuc2FjdGlvbjxUPihcbiAgICBjYWxsYmFjazogKHRyeDogUHVyaVRyYW5zYWN0aW9uV3JhcHBlcikgPT4gUHJvbWlzZTxUPixcbiAgICBvcHRpb25zOiBUcmFuc2FjdGlvbmFsT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgICAvLyBAdHJhbnNhY3Rpb25hbCDrjbDsvZTroIjsnbTthLDsmYAg64+Z7J287ZWcIOuhnOyngTog7J2066+4IO2KuOuenOyereyFmCDsu6jthY3siqTtirjqsIAg7J6I64qU7KeAIO2ZleyduFxuICAgIGNvbnN0IHsgREIgfSA9IGF3YWl0IGltcG9ydChcIi4vZGJcIik7XG4gICAgY29uc3QgZXhpc3RpbmdDb250ZXh0ID0gREIudHJhbnNhY3Rpb25TdG9yYWdlLmdldFN0b3JlKCk7XG5cbiAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirjqsIAg7JeG6rGw64KYIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOyXhuycvOuptCDsg4jroZwg7Iuc7J6RXG4gICAgY29uc3Qgc3RhcnRUcmFuc2FjdGlvbiA9IGFzeW5jIChcbiAgICAgIGtuZXg6IEtuZXggfCBLbmV4LlRyYW5zYWN0aW9uLFxuICAgICAgdXBzZXJ0QnVpbGRlcjogVXBzZXJ0QnVpbGRlcixcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBrbmV4LnRyYW5zYWN0aW9uKFxuICAgICAgICBhc3luYyAodHJ4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJ4V3JhcHBlciA9IG5ldyBQdXJpVHJhbnNhY3Rpb25XcmFwcGVyKHRyeCwgdXBzZXJ0QnVpbGRlcik7XG5cbiAgICAgICAgICAvLyBUcmFuc2FjdGlvbkNvbnRleHTsl5Ag7Yq4656c7J6t7IWYIOyggOyepVxuICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLnNldFRyYW5zYWN0aW9uKGRiUHJlc2V0LCB0cnhXcmFwcGVyKTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2sodHJ4V3JhcHBlcik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIC8vIO2KuOuenOyereyFmCDsoJzqsbBcbiAgICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLmRlbGV0ZVRyYW5zYWN0aW9uKGRiUHJlc2V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgaXNvbGF0aW9uTGV2ZWw6IGlzb2xhdGlvbiwgcmVhZE9ubHkgfSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuOqwgCDsl4bsnLzrqbQg7IOI66GcIOyDneyEsVxuICAgIGlmICghZXhpc3RpbmdDb250ZXh0KSB7XG4gICAgICByZXR1cm4gREIucnVuV2l0aFRyYW5zYWN0aW9uKCgpID0+IHN0YXJ0VHJhbnNhY3Rpb24odGhpcy5rbmV4LCB0aGlzLnVwc2VydEJ1aWxkZXIpKTtcbiAgICB9XG5cbiAgICAvLyDtlbTri7kgcHJlc2V07J2YIO2KuOuenOyereyFmOydtCDsnbTrr7gg7J6I7Jy866m0IFNBVkVQT0lOVOuhnCDspJHssqkg7Yq4656c7J6t7IWYIOyDneyEsVxuICAgIGNvbnN0IGV4aXN0aW5nVHJ4ID0gZXhpc3RpbmdDb250ZXh0LmdldFRyYW5zYWN0aW9uKGRiUHJlc2V0KTtcbiAgICBpZiAoZXhpc3RpbmdUcngpIHtcbiAgICAgIHJldHVybiBzdGFydFRyYW5zYWN0aW9uKGV4aXN0aW5nVHJ4LnRyeCwgZXhpc3RpbmdUcngudXBzZXJ0QnVpbGRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOy7qO2FjeyKpO2KuOuKlCDsnojsp4Drp4wg7J20IHByZXNldOydmCDtirjrnpzsnq3shZjsnYAg7JeG64qUIOqyveyasCAo6rCZ7J2AIOy7qO2FjeyKpO2KuCDrgrTsl5DshJwg7Iuk7ZaJKVxuICAgICAgcmV0dXJuIHN0YXJ0VHJhbnNhY3Rpb24odGhpcy5rbmV4LCB0aGlzLnVwc2VydEJ1aWxkZXIpO1xuICAgIH1cbiAgfVxuXG4gIHViUmVnaXN0ZXI8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPFRTY2hlbWE+PihcbiAgICB0YWJsZU5hbWU6IFRUYWJsZSxcbiAgICByb3c6IFBhcnRpYWw8e1xuICAgICAgW0sgaW4gQ29sdW1uS2V5czxUU2NoZW1hW1RUYWJsZV0+XTogVFNjaGVtYVtUVGFibGVdW0tdIHwgVUJSZWY7XG4gICAgfT4sXG4gICk6IFVCUmVmIHtcbiAgICByZXR1cm4gdGhpcy51cHNlcnRCdWlsZGVyLnJlZ2lzdGVyKHRhYmxlTmFtZSwgcm93KTtcbiAgfVxuXG4gIHViVXBzZXJ0PFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxUU2NoZW1hPiAmIGtleW9mIERhdGFiYXNlU2NoZW1hRXh0ZW5kPihcbiAgICB0YWJsZU5hbWU6IFRUYWJsZSxcbiAgICBvcHRpb25zPzogVXBzZXJ0T3B0aW9uczxUVGFibGU+LFxuICApOiBQcm9taXNlPElkVHlwZTxEYXRhYmFzZVNjaGVtYUV4dGVuZCwgVFRhYmxlPltdPiB7XG4gICAgcmV0dXJuIHRoaXMudXBzZXJ0QnVpbGRlci51cHNlcnQodGhpcy5rbmV4LCB0YWJsZU5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgdWJJbnNlcnRPbmx5PFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxUU2NoZW1hPiAmIGtleW9mIERhdGFiYXNlU2NoZW1hRXh0ZW5kPihcbiAgICB0YWJsZU5hbWU6IFRUYWJsZSxcbiAgICBvcHRpb25zPzogSW5zZXJ0T25seU9wdGlvbnMsXG4gICk6IFByb21pc2U8SWRUeXBlPERhdGFiYXNlU2NoZW1hRXh0ZW5kLCBUVGFibGU+W10+IHtcbiAgICByZXR1cm4gdGhpcy51cHNlcnRCdWlsZGVyLmluc2VydE9ubHkodGhpcy5rbmV4LCB0YWJsZU5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgdWJVcHNlcnRPckluc2VydDxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8VFNjaGVtYT4gJiBrZXlvZiBEYXRhYmFzZVNjaGVtYUV4dGVuZD4oXG4gICAgdGFibGVOYW1lOiBUVGFibGUsXG4gICAgbW9kZTogXCJ1cHNlcnRcIiB8IFwiaW5zZXJ0XCIsXG4gICAgb3B0aW9ucz86IFVwc2VydE9wdGlvbnM8VFRhYmxlPixcbiAgKTogUHJvbWlzZTxJZFR5cGU8RGF0YWJhc2VTY2hlbWFFeHRlbmQsIFRUYWJsZT5bXT4ge1xuICAgIHJldHVybiB0aGlzLnVwc2VydEJ1aWxkZXIudXBzZXJ0T3JJbnNlcnQodGhpcy5rbmV4LCB0YWJsZU5hbWUsIG1vZGUsIG9wdGlvbnMpO1xuICB9XG5cbiAgdWJVcGRhdGVCYXRjaChcbiAgICB0YWJsZU5hbWU6IFRhYmxlTmFtZTxUU2NoZW1hPixcbiAgICBvcHRpb25zPzogeyBjaHVua1NpemU/OiBudW1iZXI7IHdoZXJlPzogc3RyaW5nIHwgc3RyaW5nW10gfSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBzZXJ0QnVpbGRlci51cGRhdGVCYXRjaCh0aGlzLmtuZXgsIHRhYmxlTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyDtirjrnpzsnq3shZgg7Jew6rKwIO2FjOyKpO2KuOyaqVxuICBhc3luYyBkZWJ1Z1RyYW5zYWN0aW9uKCkge1xuICAgIGNvbnN0IGluZm8gPSBhd2FpdCB0aGlzLmdldFRyYW5zYWN0aW9uSW5mbygpO1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLmN5YW4oXCJbUHVyaSBUcmFuc2FjdGlvbl1cIil9ICR7Y2hhbGsubWFnZW50YShpbmZvKX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0VHJhbnNhY3Rpb25JbmZvKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8g7Jew6rKwIElEIOyhsO2ajFxuICAgIGNvbnN0IFtjb25uZWN0aW9uSWRSb3dzXSA9IGF3YWl0IHRoaXMua25leC5yYXcoYFNFTEVDVCBDT05ORUNUSU9OX0lEKCkgYXMgY29ubmVjdGlvbl9pZGApO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25JZCA9IGNvbm5lY3Rpb25JZFJvd3NbMF0uY29ubmVjdGlvbl9pZDtcblxuICAgIC8vIO2KuOuenOyereyFmCDsoJXrs7Qg7KGw7ZqMXG4gICAgY29uc3QgW3RyeFJvd3NdID0gYXdhaXQgdGhpcy5rbmV4LnJhdyhgXG4gICAgICAgIFNFTEVDVCBTVEFURSwgSVNPTEFUSU9OX0xFVkVMLCBUSFJFQURfSUQsIEVWRU5UX0lEXG4gICAgICAgIEZST00gcGVyZm9ybWFuY2Vfc2NoZW1hLmV2ZW50c190cmFuc2FjdGlvbnNfY3VycmVudFxuICAgICAgICBXSEVSRSBUSFJFQURfSUQgPSBcbiAgICAgICAgICAoU0VMRUNUIFRIUkVBRF9JRFxuICAgICAgICAgIEZST00gcGVyZm9ybWFuY2Vfc2NoZW1hLnRocmVhZHMgXG4gICAgICAgICAgV0hFUkUgUFJPQ0VTU0xJU1RfSUQgPSBDT05ORUNUSU9OX0lEKCkpXG4gICAgICBgKTtcblxuICAgIGlmICh0cnhSb3dzLmxlbmd0aCA+IDAgJiYgdHJ4Um93c1swXS5TVEFURSAhPT0gXCJDT01NSVRURURcIikge1xuICAgICAgY29uc3QgdHJ4ID0gdHJ4Um93c1swXTtcbiAgICAgIHJldHVybiBgSW4gVHJhbnNhY3Rpb24sIENvbm5JRDogJHtjb25uZWN0aW9uSWR9LCBUaHJlYWRJRDogJHt0cnguVEhSRUFEX0lEfSwgRXZlbnRJRDogJHt0cnguRVZFTlRfSUR9LCBJbm5vREIgVFJYOiAke3RyeC5TVEFURX0oJHt0cnguSVNPTEFUSU9OX0xFVkVMfSlgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYE5vdCBpbiBUcmFuc2FjdGlvbiwgQ29ubklEOiAke2Nvbm5lY3Rpb25JZH1gO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHVyaVRyYW5zYWN0aW9uV3JhcHBlciBleHRlbmRzIFB1cmlXcmFwcGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRyeDogS25leC5UcmFuc2FjdGlvbixcbiAgICBwdWJsaWMgdXBzZXJ0QnVpbGRlcjogVXBzZXJ0QnVpbGRlcixcbiAgKSB7XG4gICAgc3VwZXIodHJ4LCB1cHNlcnRCdWlsZGVyKTtcbiAgfVxuXG4gIGFzeW5jIHJvbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMudHJ4LnJvbGxiYWNrKCk7XG4gIH1cblxuICBhc3luYyBjb21taXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy50cnguY29tbWl0KCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O1dBTzZCO0NBc0JoQixjQUFiLE1BQXNGO0VBRTNFO0VBQ0E7RUFGVCxZQUNFLE1BQ0EsZUFDQTtHQUZPLEtBQUEsT0FBQTtHQUNBLEtBQUEsZ0JBQUE7RUFDTjtFQUVILElBQUksS0FBdUI7R0FDekIsT0FBTyxLQUFLLEtBQUssSUFBSSxHQUFHO0VBQzFCO0VBMEJBLEtBQUssTUFBZ0I7R0FDbkIsT0FBTyxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUk7RUFDakM7RUEwQkEsTUFBTSxNQUFnQjtHQUNwQixPQUFPLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSTtFQUNqQztFQUVBLE1BQU0sWUFDSixVQUNBLFVBQWdDLENBQUMsR0FDckI7R0FDWixNQUFNLEVBQUUsV0FBVyxVQUFVLFdBQVcsUUFBUTtHQUdoRCxNQUFNLEVBQUUsT0FBTyxNQUFNLE9BQU87R0FDNUIsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsU0FBUztHQUd2RCxNQUFNLG1CQUFtQixPQUN2QixNQUNBLGtCQUNHO0lBQ0gsT0FBTyxLQUFLLFlBQ1YsT0FBTyxRQUFRO0tBQ2IsTUFBTSxhQUFhLElBQUksdUJBQXVCLEtBQUssYUFBYTtLQUdoRSxHQUFHLHNCQUFzQixDQUFDLENBQUMsZUFBZSxVQUFVLFVBQVU7S0FFOUQsSUFBSTtNQUNGLE9BQU8sTUFBTSxTQUFTLFVBQVU7S0FDbEMsVUFBVTtNQUVSLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxrQkFBa0IsUUFBUTtLQUN2RDtJQUNGLEdBQ0E7S0FBRSxnQkFBZ0I7S0FBVztJQUFTLENBQ3hDO0dBQ0Y7R0FHQSxJQUFJLENBQUMsaUJBQ0gsT0FBTyxHQUFHLHlCQUF5QixpQkFBaUIsS0FBSyxNQUFNLEtBQUssYUFBYSxDQUFDO0dBSXBGLE1BQU0sY0FBYyxnQkFBZ0IsZUFBZSxRQUFRO0dBQzNELElBQUksYUFDRixPQUFPLGlCQUFpQixZQUFZLEtBQUssWUFBWSxhQUFhO1FBR2xFLE9BQU8saUJBQWlCLEtBQUssTUFBTSxLQUFLLGFBQWE7RUFFekQ7RUFFQSxXQUNFLFdBQ0EsS0FHTztHQUNQLE9BQU8sS0FBSyxjQUFjLFNBQVMsV0FBVyxHQUFHO0VBQ25EO0VBRUEsU0FDRSxXQUNBLFNBQ2lEO0dBQ2pELE9BQU8sS0FBSyxjQUFjLE9BQU8sS0FBSyxNQUFNLFdBQVcsT0FBTztFQUNoRTtFQUVBLGFBQ0UsV0FDQSxTQUNpRDtHQUNqRCxPQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssTUFBTSxXQUFXLE9BQU87RUFDcEU7RUFFQSxpQkFDRSxXQUNBLE1BQ0EsU0FDaUQ7R0FDakQsT0FBTyxLQUFLLGNBQWMsZUFBZSxLQUFLLE1BQU0sV0FBVyxNQUFNLE9BQU87RUFDOUU7RUFFQSxjQUNFLFdBQ0EsU0FDZTtHQUNmLE9BQU8sS0FBSyxjQUFjLFlBQVksS0FBSyxNQUFNLFdBQVcsT0FBTztFQUNyRTtFQUdBLE1BQU0sbUJBQW1CO0dBQ3ZCLE1BQU0sT0FBTyxNQUFNLEtBQUssbUJBQW1CO0dBQzNDLFFBQVEsSUFBSSxHQUFHLE1BQU0sS0FBSyxvQkFBb0IsRUFBRSxHQUFHLE1BQU0sUUFBUSxJQUFJLEdBQUc7RUFDMUU7RUFFQSxNQUFjLHFCQUFzQztHQUVsRCxNQUFNLENBQUMsb0JBQW9CLE1BQU0sS0FBSyxLQUFLLElBQUkseUNBQXlDO0dBQ3hGLE1BQU0sZUFBZSxpQkFBaUIsRUFBRSxDQUFDO0dBR3pDLE1BQU0sQ0FBQyxXQUFXLE1BQU0sS0FBSyxLQUFLLElBQUk7Ozs7Ozs7T0FPbkM7R0FFSCxJQUFJLFFBQVEsU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDLFVBQVUsYUFBYTtJQUMxRCxNQUFNLE1BQU0sUUFBUTtJQUNwQixPQUFPLDJCQUEyQixhQUFhLGNBQWMsSUFBSSxVQUFVLGFBQWEsSUFBSSxTQUFTLGdCQUFnQixJQUFJLE1BQU0sR0FBRyxJQUFJLGdCQUFnQjtHQUN4SixPQUNFLE9BQU8sK0JBQStCO0VBRTFDO0NBQ0Y7Q0FFYSx5QkFBYixjQUE0QyxZQUFZO0VBRTdDO0VBQ0E7RUFGVCxZQUNFLEtBQ0EsZUFDQTtHQUNBLE1BQU0sS0FBSyxhQUFhO0dBSGpCLEtBQUEsTUFBQTtHQUNBLEtBQUEsZ0JBQUE7RUFHVDtFQUVBLE1BQU0sV0FBMEI7R0FDOUIsTUFBTSxLQUFLLElBQUksU0FBUztFQUMxQjtFQUVBLE1BQU0sU0FBd0I7R0FDNUIsTUFBTSxLQUFLLElBQUksT0FBTztFQUN4QjtDQUNGIn0=
96
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyaS13cmFwcGVyLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLXdyYXBwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogb3hsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyAvLyBQdXJpV3JhcHBlcuuKlCDri6TslpHtlZwg7YOA7J6F7J2EIOyCrOyaqe2VmOqzoCDsnojsirXri4jri6QuXG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5cbmltcG9ydCB7IHR5cGUgRGF0YWJhc2VTY2hlbWFFeHRlbmQgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgREJQcmVzZXQgfSBmcm9tIFwiLi9kYlwiO1xuaW1wb3J0IHsgUHVyaSB9IGZyb20gXCIuL3B1cmlcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ29sdW1uS2V5cyxcbiAgdHlwZSBJZFR5cGUsXG4gIHR5cGUgT21pdEludGVybmFsVHlwZUtleXMsXG4gIHR5cGUgUHVyaVRhYmxlLFxufSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQge1xuICB0eXBlIEluc2VydE9ubHlPcHRpb25zLFxuICB0eXBlIFVCUmVmLFxuICB0eXBlIFVwc2VydEJ1aWxkZXIsXG4gIHR5cGUgVXBzZXJ0T3B0aW9ucyxcbn0gZnJvbSBcIi4vdXBzZXJ0LWJ1aWxkZXJcIjtcblxudHlwZSBUYWJsZU5hbWU8VFNjaGVtYSBleHRlbmRzIERhdGFiYXNlU2NoZW1hRXh0ZW5kPiA9IEV4dHJhY3Q8a2V5b2YgVFNjaGVtYSwgc3RyaW5nPjtcblxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7XG4gIGlzb2xhdGlvbj86IEV4Y2x1ZGU8S25leC5Jc29sYXRpb25MZXZlbHMsIFwic25hcHNob3RcIj47IC8vIHNuYXBzaG90OiBtc3NxbCBvbmx5XG4gIGRiUHJlc2V0PzogREJQcmVzZXQ7XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBQdXJpV3JhcHBlcjxUU2NoZW1hIGV4dGVuZHMgRGF0YWJhc2VTY2hlbWFFeHRlbmQgPSBEYXRhYmFzZVNjaGVtYUV4dGVuZD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMga25leDogS25leCxcbiAgICBwdWJsaWMgdXBzZXJ0QnVpbGRlcjogVXBzZXJ0QnVpbGRlcixcbiAgKSB7fVxuXG4gIHJhdyhzcWw6IHN0cmluZyk6IEtuZXguUmF3IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4LnJhdyhzcWwpO1xuICB9XG5cbiAgLy8g7YWM7J2067iU66qF7Jy866GcIOyLnOyekVxuICBmcm9tPFRUYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgUmVjb3JkPFRUYWJsZSwgUHVyaVRhYmxlPFRTY2hlbWFbVFRhYmxlXT4+LFxuICAgIE9taXRJbnRlcm5hbFR5cGVLZXlzPFB1cmlUYWJsZTxUU2NoZW1hW1RUYWJsZV0+PlxuICA+O1xuICAvLyDthYzsnbTruJTrqoUgKyBBbGlhc+uhnCDsi5zsnpFcbiAgZnJvbTxUVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KHNwZWM6IHtcbiAgICBbSyBpbiBUQWxpYXNdOiBUVGFibGU7XG4gIH0pOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgUmVjb3JkPFRBbGlhcywgUHVyaVRhYmxlPFRTY2hlbWFbVFRhYmxlXT4+LFxuICAgIE9taXRJbnRlcm5hbFR5cGVLZXlzPFB1cmlUYWJsZTxUU2NoZW1hW1RUYWJsZV0+PlxuICA+O1xuICAvLyDshJzruIzsv7zrpqzroZwg7Iuc7J6RXG4gIGZyb208VEFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihzcGVjOiB7XG4gICAgW0sgaW4gVEFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+O1xuICB9KTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFJlY29yZDxUQWxpYXMsIFB1cmlUYWJsZTxUU3ViUmVzdWx0Pj4sXG4gICAgT21pdEludGVybmFsVHlwZUtleXM8UHVyaVRhYmxlPFRTdWJSZXN1bHQ+PlxuICA+O1xuICBmcm9tKHNwZWM6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQdXJpKHRoaXMua25leCwgc3BlYyk7XG4gIH1cblxuICAvLyDthYzsnbTruJTrqoXsnLzroZwg7Iuc7J6RXG4gIHRhYmxlPFRUYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgUmVjb3JkPFRUYWJsZSwgUHVyaVRhYmxlPFRTY2hlbWFbVFRhYmxlXT4+LFxuICAgIE9taXRJbnRlcm5hbFR5cGVLZXlzPFB1cmlUYWJsZTxUU2NoZW1hW1RUYWJsZV0+PlxuICA+O1xuICAvLyDthYzsnbTruJTrqoUgKyBBbGlhc+uhnCDsi5zsnpFcbiAgdGFibGU8VFRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVEFsaWFzIGV4dGVuZHMgc3RyaW5nPihzcGVjOiB7XG4gICAgW0sgaW4gVEFsaWFzXTogVFRhYmxlO1xuICB9KTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFJlY29yZDxUQWxpYXMsIFB1cmlUYWJsZTxUU2NoZW1hW1RUYWJsZV0+PixcbiAgICBPbWl0SW50ZXJuYWxUeXBlS2V5czxQdXJpVGFibGU8VFNjaGVtYVtUVGFibGVdPj5cbiAgPjtcbiAgLy8g7ISc67iM7L+866as66GcIOyLnOyekVxuICB0YWJsZTxUQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KHNwZWM6IHtcbiAgICBbSyBpbiBUQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD47XG4gIH0pOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgUmVjb3JkPFRBbGlhcywgUHVyaVRhYmxlPFRTdWJSZXN1bHQ+PixcbiAgICBPbWl0SW50ZXJuYWxUeXBlS2V5czxQdXJpVGFibGU8VFN1YlJlc3VsdD4+XG4gID47XG4gIHRhYmxlKHNwZWM6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBQdXJpKHRoaXMua25leCwgc3BlYyk7XG4gIH1cblxuICBhc3luYyB0cmFuc2FjdGlvbjxUPihcbiAgICBjYWxsYmFjazogKHRyeDogUHVyaVRyYW5zYWN0aW9uV3JhcHBlcikgPT4gUHJvbWlzZTxUPixcbiAgICBvcHRpb25zOiBUcmFuc2FjdGlvbmFsT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCB7IERCIH0gPSBhd2FpdCBpbXBvcnQoXCIuL2RiXCIpO1xuXG4gICAgY29uc3Qgc3RhcnRUcmFuc2FjdGlvbiA9IGFzeW5jIChcbiAgICAgIGtuZXg6IEtuZXggfCBLbmV4LlRyYW5zYWN0aW9uLFxuICAgICAgdXBzZXJ0QnVpbGRlcjogVXBzZXJ0QnVpbGRlcixcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBrbmV4LnRyYW5zYWN0aW9uKFxuICAgICAgICBhc3luYyAodHJ4KSA9PiB7XG4gICAgICAgICAgY29uc3QgdHJ4V3JhcHBlciA9IG5ldyBQdXJpVHJhbnNhY3Rpb25XcmFwcGVyKHRyeCwgdXBzZXJ0QnVpbGRlcik7XG5cbiAgICAgICAgICByZXR1cm4gREIucnVuV2l0aFRyYW5zYWN0aW9uU2NvcGUoZGJQcmVzZXQsIHRyeFdyYXBwZXIsICgpID0+IGNhbGxiYWNrKHRyeFdyYXBwZXIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyBpc29sYXRpb25MZXZlbDogaXNvbGF0aW9uLCByZWFkT25seSB9LFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdUcnggPSBEQi50cmFuc2FjdGlvblN0b3JhZ2UuZ2V0U3RvcmUoKT8uZ2V0VHJhbnNhY3Rpb24oZGJQcmVzZXQpO1xuICAgIGlmIChleGlzdGluZ1RyeCkge1xuICAgICAgLy8g6rCZ7J2AIHByZXNldOydmCDspJHssqkg7Yq4656c7J6t7IWY7J2AIOq4sOyhtCDsl7DqsrDsl5DshJwgU0FWRVBPSU5U66GcIOyLnOyeke2VnOuLpC5cbiAgICAgIHJldHVybiBzdGFydFRyYW5zYWN0aW9uKGV4aXN0aW5nVHJ4LnRyeCwgZXhpc3RpbmdUcngudXBzZXJ0QnVpbGRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXJ0VHJhbnNhY3Rpb24odGhpcy5rbmV4LCB0aGlzLnVwc2VydEJ1aWxkZXIpO1xuICB9XG5cbiAgdWJSZWdpc3RlcjxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8VFNjaGVtYT4+KFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICAgIHJvdzogUGFydGlhbDx7XG4gICAgICBbSyBpbiBDb2x1bW5LZXlzPFRTY2hlbWFbVFRhYmxlXT5dOiBUU2NoZW1hW1RUYWJsZV1bS10gfCBVQlJlZjtcbiAgICB9PixcbiAgKTogVUJSZWYge1xuICAgIHJldHVybiB0aGlzLnVwc2VydEJ1aWxkZXIucmVnaXN0ZXIodGFibGVOYW1lLCByb3cpO1xuICB9XG5cbiAgdWJVcHNlcnQ8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPFRTY2hlbWE+ICYga2V5b2YgRGF0YWJhc2VTY2hlbWFFeHRlbmQ+KFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICAgIG9wdGlvbnM/OiBVcHNlcnRPcHRpb25zPFRUYWJsZT4sXG4gICk6IFByb21pc2U8SWRUeXBlPERhdGFiYXNlU2NoZW1hRXh0ZW5kLCBUVGFibGU+W10+IHtcbiAgICByZXR1cm4gdGhpcy51cHNlcnRCdWlsZGVyLnVwc2VydCh0aGlzLmtuZXgsIHRhYmxlTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICB1Ykluc2VydE9ubHk8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPFRTY2hlbWE+ICYga2V5b2YgRGF0YWJhc2VTY2hlbWFFeHRlbmQ+KFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICAgIG9wdGlvbnM/OiBJbnNlcnRPbmx5T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxJZFR5cGU8RGF0YWJhc2VTY2hlbWFFeHRlbmQsIFRUYWJsZT5bXT4ge1xuICAgIHJldHVybiB0aGlzLnVwc2VydEJ1aWxkZXIuaW5zZXJ0T25seSh0aGlzLmtuZXgsIHRhYmxlTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICB1YlVwc2VydE9ySW5zZXJ0PFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxUU2NoZW1hPiAmIGtleW9mIERhdGFiYXNlU2NoZW1hRXh0ZW5kPihcbiAgICB0YWJsZU5hbWU6IFRUYWJsZSxcbiAgICBtb2RlOiBcInVwc2VydFwiIHwgXCJpbnNlcnRcIixcbiAgICBvcHRpb25zPzogVXBzZXJ0T3B0aW9uczxUVGFibGU+LFxuICApOiBQcm9taXNlPElkVHlwZTxEYXRhYmFzZVNjaGVtYUV4dGVuZCwgVFRhYmxlPltdPiB7XG4gICAgcmV0dXJuIHRoaXMudXBzZXJ0QnVpbGRlci51cHNlcnRPckluc2VydCh0aGlzLmtuZXgsIHRhYmxlTmFtZSwgbW9kZSwgb3B0aW9ucyk7XG4gIH1cblxuICB1YlVwZGF0ZUJhdGNoKFxuICAgIHRhYmxlTmFtZTogVGFibGVOYW1lPFRTY2hlbWE+LFxuICAgIG9wdGlvbnM/OiB7IGNodW5rU2l6ZT86IG51bWJlcjsgd2hlcmU/OiBzdHJpbmcgfCBzdHJpbmdbXSB9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy51cHNlcnRCdWlsZGVyLnVwZGF0ZUJhdGNoKHRoaXMua25leCwgdGFibGVOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIO2KuOuenOyereyFmCDsl7DqsrAg7YWM7Iqk7Yq47JqpXG4gIGFzeW5jIGRlYnVnVHJhbnNhY3Rpb24oKSB7XG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25JbmZvKCk7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsuY3lhbihcIltQdXJpIFRyYW5zYWN0aW9uXVwiKX0gJHtjaGFsay5tYWdlbnRhKGluZm8pfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRUcmFuc2FjdGlvbkluZm8oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyDsl7DqsrAgSUQg7KGw7ZqMXG4gICAgY29uc3QgW2Nvbm5lY3Rpb25JZFJvd3NdID0gYXdhaXQgdGhpcy5rbmV4LnJhdyhgU0VMRUNUIENPTk5FQ1RJT05fSUQoKSBhcyBjb25uZWN0aW9uX2lkYCk7XG4gICAgY29uc3QgY29ubmVjdGlvbklkID0gY29ubmVjdGlvbklkUm93c1swXS5jb25uZWN0aW9uX2lkO1xuXG4gICAgLy8g7Yq4656c7J6t7IWYIOygleuztCDsobDtmoxcbiAgICBjb25zdCBbdHJ4Um93c10gPSBhd2FpdCB0aGlzLmtuZXgucmF3KGBcbiAgICAgICAgU0VMRUNUIFNUQVRFLCBJU09MQVRJT05fTEVWRUwsIFRIUkVBRF9JRCwgRVZFTlRfSURcbiAgICAgICAgRlJPTSBwZXJmb3JtYW5jZV9zY2hlbWEuZXZlbnRzX3RyYW5zYWN0aW9uc19jdXJyZW50XG4gICAgICAgIFdIRVJFIFRIUkVBRF9JRCA9IFxuICAgICAgICAgIChTRUxFQ1QgVEhSRUFEX0lEXG4gICAgICAgICAgRlJPTSBwZXJmb3JtYW5jZV9zY2hlbWEudGhyZWFkcyBcbiAgICAgICAgICBXSEVSRSBQUk9DRVNTTElTVF9JRCA9IENPTk5FQ1RJT05fSUQoKSlcbiAgICAgIGApO1xuXG4gICAgaWYgKHRyeFJvd3MubGVuZ3RoID4gMCAmJiB0cnhSb3dzWzBdLlNUQVRFICE9PSBcIkNPTU1JVFRFRFwiKSB7XG4gICAgICBjb25zdCB0cnggPSB0cnhSb3dzWzBdO1xuICAgICAgcmV0dXJuIGBJbiBUcmFuc2FjdGlvbiwgQ29ubklEOiAke2Nvbm5lY3Rpb25JZH0sIFRocmVhZElEOiAke3RyeC5USFJFQURfSUR9LCBFdmVudElEOiAke3RyeC5FVkVOVF9JRH0sIElubm9EQiBUUlg6ICR7dHJ4LlNUQVRFfSgke3RyeC5JU09MQVRJT05fTEVWRUx9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgTm90IGluIFRyYW5zYWN0aW9uLCBDb25uSUQ6ICR7Y29ubmVjdGlvbklkfWA7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQdXJpVHJhbnNhY3Rpb25XcmFwcGVyIGV4dGVuZHMgUHVyaVdyYXBwZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdHJ4OiBLbmV4LlRyYW5zYWN0aW9uLFxuICAgIHB1YmxpYyB1cHNlcnRCdWlsZGVyOiBVcHNlcnRCdWlsZGVyLFxuICApIHtcbiAgICBzdXBlcih0cngsIHVwc2VydEJ1aWxkZXIpO1xuICB9XG5cbiAgYXN5bmMgcm9sbGJhY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy50cngucm9sbGJhY2soKTtcbiAgfVxuXG4gIGFzeW5jIGNvbW1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnRyeC5jb21taXQoKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7V0FPNkI7Q0FzQmhCLGNBQWIsTUFBc0Y7RUFFM0U7RUFDQTtFQUZULFlBQ0UsTUFDQSxlQUNBO0dBRk8sS0FBQSxPQUFBO0dBQ0EsS0FBQSxnQkFBQTtFQUNOO0VBRUgsSUFBSSxLQUF1QjtHQUN6QixPQUFPLEtBQUssS0FBSyxJQUFJLEdBQUc7RUFDMUI7RUEwQkEsS0FBSyxNQUFnQjtHQUNuQixPQUFPLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSTtFQUNqQztFQTBCQSxNQUFNLE1BQWdCO0dBQ3BCLE9BQU8sSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJO0VBQ2pDO0VBRUEsTUFBTSxZQUNKLFVBQ0EsVUFBZ0MsQ0FBQyxHQUNyQjtHQUNaLE1BQU0sRUFBRSxXQUFXLFVBQVUsV0FBVyxRQUFRO0dBRWhELE1BQU0sRUFBRSxPQUFPLE1BQU0sT0FBTztHQUU1QixNQUFNLG1CQUFtQixPQUN2QixNQUNBLGtCQUNHO0lBQ0gsT0FBTyxLQUFLLFlBQ1YsT0FBTyxRQUFRO0tBQ2IsTUFBTSxhQUFhLElBQUksdUJBQXVCLEtBQUssYUFBYTtLQUVoRSxPQUFPLEdBQUcsd0JBQXdCLFVBQVUsa0JBQWtCLFNBQVMsVUFBVSxDQUFDO0lBQ3BGLEdBQ0E7S0FBRSxnQkFBZ0I7S0FBVztJQUFTLENBQ3hDO0dBQ0Y7R0FFQSxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsU0FBUyxDQUFDLEVBQUUsZUFBZSxRQUFRO0dBQzdFLElBQUksYUFFRixPQUFPLGlCQUFpQixZQUFZLEtBQUssWUFBWSxhQUFhO0dBR3BFLE9BQU8saUJBQWlCLEtBQUssTUFBTSxLQUFLLGFBQWE7RUFDdkQ7RUFFQSxXQUNFLFdBQ0EsS0FHTztHQUNQLE9BQU8sS0FBSyxjQUFjLFNBQVMsV0FBVyxHQUFHO0VBQ25EO0VBRUEsU0FDRSxXQUNBLFNBQ2lEO0dBQ2pELE9BQU8sS0FBSyxjQUFjLE9BQU8sS0FBSyxNQUFNLFdBQVcsT0FBTztFQUNoRTtFQUVBLGFBQ0UsV0FDQSxTQUNpRDtHQUNqRCxPQUFPLEtBQUssY0FBYyxXQUFXLEtBQUssTUFBTSxXQUFXLE9BQU87RUFDcEU7RUFFQSxpQkFDRSxXQUNBLE1BQ0EsU0FDaUQ7R0FDakQsT0FBTyxLQUFLLGNBQWMsZUFBZSxLQUFLLE1BQU0sV0FBVyxNQUFNLE9BQU87RUFDOUU7RUFFQSxjQUNFLFdBQ0EsU0FDZTtHQUNmLE9BQU8sS0FBSyxjQUFjLFlBQVksS0FBSyxNQUFNLFdBQVcsT0FBTztFQUNyRTtFQUdBLE1BQU0sbUJBQW1CO0dBQ3ZCLE1BQU0sT0FBTyxNQUFNLEtBQUssbUJBQW1CO0dBQzNDLFFBQVEsSUFBSSxHQUFHLE1BQU0sS0FBSyxvQkFBb0IsRUFBRSxHQUFHLE1BQU0sUUFBUSxJQUFJLEdBQUc7RUFDMUU7RUFFQSxNQUFjLHFCQUFzQztHQUVsRCxNQUFNLENBQUMsb0JBQW9CLE1BQU0sS0FBSyxLQUFLLElBQUkseUNBQXlDO0dBQ3hGLE1BQU0sZUFBZSxpQkFBaUIsRUFBRSxDQUFDO0dBR3pDLE1BQU0sQ0FBQyxXQUFXLE1BQU0sS0FBSyxLQUFLLElBQUk7Ozs7Ozs7T0FPbkM7R0FFSCxJQUFJLFFBQVEsU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDLFVBQVUsYUFBYTtJQUMxRCxNQUFNLE1BQU0sUUFBUTtJQUNwQixPQUFPLDJCQUEyQixhQUFhLGNBQWMsSUFBSSxVQUFVLGFBQWEsSUFBSSxTQUFTLGdCQUFnQixJQUFJLE1BQU0sR0FBRyxJQUFJLGdCQUFnQjtHQUN4SixPQUNFLE9BQU8sK0JBQStCO0VBRTFDO0NBQ0Y7Q0FFYSx5QkFBYixjQUE0QyxZQUFZO0VBRTdDO0VBQ0E7RUFGVCxZQUNFLEtBQ0EsZUFDQTtHQUNBLE1BQU0sS0FBSyxhQUFhO0dBSGpCLEtBQUEsTUFBQTtHQUNBLEtBQUEsZ0JBQUE7RUFHVDtFQUVBLE1BQU0sV0FBMEI7R0FDOUIsTUFBTSxLQUFLLElBQUksU0FBUztFQUMxQjtFQUVBLE1BQU0sU0FBd0I7R0FDNUIsTUFBTSxLQUFLLElBQUksT0FBTztFQUN4QjtDQUNGIn0=
@@ -1,9 +1,14 @@
1
1
  import { type DBPreset } from "./db";
2
2
  import { type PuriTransactionWrapper } from "./puri-wrapper";
3
3
  export declare class TransactionContext {
4
- private transactions;
4
+ private readonly parent?;
5
+ private local?;
6
+ constructor(parent?: TransactionContext | undefined, local?: {
7
+ preset: DBPreset;
8
+ transaction: PuriTransactionWrapper;
9
+ } | undefined);
5
10
  getTransaction(preset: DBPreset): PuriTransactionWrapper | undefined;
6
- setTransaction(preset: DBPreset, trx: PuriTransactionWrapper): void;
7
- deleteTransaction(preset: DBPreset): void;
11
+ getActiveTransaction(): PuriTransactionWrapper | undefined;
12
+ clearLocal(): void;
8
13
  }
9
14
  //# sourceMappingURL=transaction-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-context.d.ts","sourceRoot":"","sources":["../../src/database/transaction-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,YAAY,CAAoD;IAExE,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,sBAAsB,GAAG,SAAS;IAIpE,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,sBAAsB,GAAG,IAAI;IAInE,iBAAiB,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI;CAG1C"}
1
+ {"version":3,"file":"transaction-context.d.ts","sourceRoot":"","sources":["../../src/database/transaction-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,KAAK,CAAC;gBADG,MAAM,CAAC,EAAE,kBAAkB,YAAA,EACpC,KAAK,CAAC,EAAE;QACd,MAAM,EAAE,QAAQ,CAAC;QACjB,WAAW,EAAE,sBAAsB,CAAC;KACrC,YAAA;IAGH,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,sBAAsB,GAAG,SAAS;IAMpE,oBAAoB,IAAI,sBAAsB,GAAG,SAAS;IAI1D,UAAU,IAAI,IAAI;CAGnB"}
@@ -3,15 +3,20 @@ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
3
3
  var TransactionContext;
4
4
  var init_transaction_context = __esmMin((() => {
5
5
  TransactionContext = class {
6
- transactions = /* @__PURE__ */ new Map();
6
+ parent;
7
+ local;
8
+ constructor(parent, local) {
9
+ this.parent = parent;
10
+ this.local = local;
11
+ }
7
12
  getTransaction(preset) {
8
- return this.transactions.get(preset);
13
+ return this.local?.preset === preset ? this.local.transaction : this.parent?.getTransaction(preset);
9
14
  }
10
- setTransaction(preset, trx) {
11
- this.transactions.set(preset, trx);
15
+ getActiveTransaction() {
16
+ return this.local?.transaction ?? this.parent?.getActiveTransaction();
12
17
  }
13
- deleteTransaction(preset) {
14
- this.transactions.delete(preset);
18
+ clearLocal() {
19
+ this.local = void 0;
15
20
  }
16
21
  };
17
22
  }));
@@ -19,4 +24,4 @@ var init_transaction_context = __esmMin((() => {
19
24
  init_transaction_context();
20
25
  export { TransactionContext, init_transaction_context };
21
26
 
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tY29udGV4dC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvdHJhbnNhY3Rpb24tY29udGV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIERCUHJlc2V0IH0gZnJvbSBcIi4vZGJcIjtcbmltcG9ydCB7IHR5cGUgUHVyaVRyYW5zYWN0aW9uV3JhcHBlciB9IGZyb20gXCIuL3B1cmktd3JhcHBlclwiO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25Db250ZXh0IHtcbiAgcHJpdmF0ZSB0cmFuc2FjdGlvbnM6IE1hcDxEQlByZXNldCwgUHVyaVRyYW5zYWN0aW9uV3JhcHBlcj4gPSBuZXcgTWFwKCk7XG5cbiAgZ2V0VHJhbnNhY3Rpb24ocHJlc2V0OiBEQlByZXNldCk6IFB1cmlUcmFuc2FjdGlvbldyYXBwZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9ucy5nZXQocHJlc2V0KTtcbiAgfVxuXG4gIHNldFRyYW5zYWN0aW9uKHByZXNldDogREJQcmVzZXQsIHRyeDogUHVyaVRyYW5zYWN0aW9uV3JhcHBlcik6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb25zLnNldChwcmVzZXQsIHRyeCk7XG4gIH1cblxuICBkZWxldGVUcmFuc2FjdGlvbihwcmVzZXQ6IERCUHJlc2V0KTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbnMuZGVsZXRlKHByZXNldCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7OztDQUdhLHFCQUFiLE1BQWdDO0VBQzlCLCtCQUE4RCxJQUFJLElBQUk7RUFFdEUsZUFBZSxRQUFzRDtHQUNuRSxPQUFPLEtBQUssYUFBYSxJQUFJLE1BQU07RUFDckM7RUFFQSxlQUFlLFFBQWtCLEtBQW1DO0dBQ2xFLEtBQUssYUFBYSxJQUFJLFFBQVEsR0FBRztFQUNuQztFQUVBLGtCQUFrQixRQUF3QjtHQUN4QyxLQUFLLGFBQWEsT0FBTyxNQUFNO0VBQ2pDO0NBQ0YifQ==
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tY29udGV4dC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvdHJhbnNhY3Rpb24tY29udGV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIERCUHJlc2V0IH0gZnJvbSBcIi4vZGJcIjtcbmltcG9ydCB7IHR5cGUgUHVyaVRyYW5zYWN0aW9uV3JhcHBlciB9IGZyb20gXCIuL3B1cmktd3JhcHBlclwiO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25Db250ZXh0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ/OiBUcmFuc2FjdGlvbkNvbnRleHQsXG4gICAgcHJpdmF0ZSBsb2NhbD86IHtcbiAgICAgIHByZXNldDogREJQcmVzZXQ7XG4gICAgICB0cmFuc2FjdGlvbjogUHVyaVRyYW5zYWN0aW9uV3JhcHBlcjtcbiAgICB9LFxuICApIHt9XG5cbiAgZ2V0VHJhbnNhY3Rpb24ocHJlc2V0OiBEQlByZXNldCk6IFB1cmlUcmFuc2FjdGlvbldyYXBwZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxvY2FsPy5wcmVzZXQgPT09IHByZXNldFxuICAgICAgPyB0aGlzLmxvY2FsLnRyYW5zYWN0aW9uXG4gICAgICA6IHRoaXMucGFyZW50Py5nZXRUcmFuc2FjdGlvbihwcmVzZXQpO1xuICB9XG5cbiAgZ2V0QWN0aXZlVHJhbnNhY3Rpb24oKTogUHVyaVRyYW5zYWN0aW9uV3JhcHBlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWw/LnRyYW5zYWN0aW9uID8/IHRoaXMucGFyZW50Py5nZXRBY3RpdmVUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgY2xlYXJMb2NhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsID0gdW5kZWZpbmVkO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Q0FHYSxxQkFBYixNQUFnQztFQUVYO0VBQ1Q7RUFGVixZQUNFLFFBQ0EsT0FJQTtHQUxpQixLQUFBLFNBQUE7R0FDVCxLQUFBLFFBQUE7RUFJUDtFQUVILGVBQWUsUUFBc0Q7R0FDbkUsT0FBTyxLQUFLLE9BQU8sV0FBVyxTQUMxQixLQUFLLE1BQU0sY0FDWCxLQUFLLFFBQVEsZUFBZSxNQUFNO0VBQ3hDO0VBRUEsdUJBQTJEO0dBQ3pELE9BQU8sS0FBSyxPQUFPLGVBQWUsS0FBSyxRQUFRLHFCQUFxQjtFQUN0RTtFQUVBLGFBQW1CO0dBQ2pCLEtBQUssUUFBUTtFQUNmO0NBQ0YifQ==
@@ -6,6 +6,11 @@
6
6
  *
7
7
  * 프로젝트별로 고유한 소켓을 사용하기 위해 sonamu.config.ts 경로의 해시를 사용합니다.
8
8
  *
9
+ * 모듈 싱글턴이지만 인스턴스는 프로세스마다 별개입니다. run/start·run/end는
10
+ * Vitest 메인 프로세스(NaiteVitestReporter 커스텀 리포터)에서, test/result는
11
+ * 각 worker 프로세스(bootstrap의 afterEach)에서 전송되므로 buffer와 소켓
12
+ * 연결을 서로 공유하지 않습니다.
13
+ *
9
14
  * fs mock 충돌을 피하기 위해 net 모듈만 사용합니다.
10
15
  */
11
16
 
@@ -24,17 +29,17 @@ declare class NaiteReporterClass {
24
29
  */
25
30
  private send;
26
31
  /**
27
- * beforeAll에서 호출합니다.
32
+ * Vitest 커스텀 리포터(NaiteVitestReporter)의 onTestRunStart에서 호출합니다.
28
33
  * 테스트 run 시작을 알립니다 (데이터 클리어 신호).
29
34
  */
30
35
  startTestRun(): Promise<void>;
31
36
  /**
32
- * afterEach에서 호출합니다.
37
+ * bootstrap()의 afterEach에서 호출합니다.
33
38
  * 테스트 케이스 결과를 traces와 함께 전송합니다.
34
39
  */
35
40
  reportTestResult(result: Omit<NaiteMessagingTypes.TestResult, "receivedAt">): Promise<void>;
36
41
  /**
37
- * afterAll에서 호출합니다.
42
+ * Vitest 커스텀 리포터(NaiteVitestReporter)의 onTestRunEnd에서 호출합니다.
38
43
  * 테스트 run 종료를 알립니다.
39
44
  */
40
45
  endTestRun(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"naite-reporter.d.ts","sourceRoot":"","sources":["../../src/naite/naite-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;;AAUH,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AA+B7D,cAAM,kBAAkB;IACtB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAE9B;;OAEG;YACW,gBAAgB;IAmC9B;;OAEG;YACW,IAAI;IAgBlB;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAWnC;;;OAGG;IACG,gBAAgB,CACpB,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC;IAYhB;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAiBlC;AAED,eAAO,MAAM,aAAa,oBAA2B,CAAC"}
1
+ {"version":3,"file":"naite-reporter.d.ts","sourceRoot":"","sources":["../../src/naite/naite-reporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;;AAUH,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AA+B7D,cAAM,kBAAkB;IACtB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAE9B;;OAEG;YACW,gBAAgB;IAmC9B;;OAEG;YACW,IAAI;IAgBlB;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAWnC;;;OAGG;IACG,gBAAgB,CACpB,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,GACzD,OAAO,CAAC,IAAI,CAAC;IAYhB;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAiBlC;AAED,eAAO,MAAM,aAAa,oBAA2B,CAAC"}
@@ -12,6 +12,11 @@ import { connect } from "net";
12
12
  *
13
13
  * 프로젝트별로 고유한 소켓을 사용하기 위해 sonamu.config.ts 경로의 해시를 사용합니다.
14
14
  *
15
+ * 모듈 싱글턴이지만 인스턴스는 프로세스마다 별개입니다. run/start·run/end는
16
+ * Vitest 메인 프로세스(NaiteVitestReporter 커스텀 리포터)에서, test/result는
17
+ * 각 worker 프로세스(bootstrap의 afterEach)에서 전송되므로 buffer와 소켓
18
+ * 연결을 서로 공유하지 않습니다.
19
+ *
15
20
  * fs mock 충돌을 피하기 위해 net 모듈만 사용합니다.
16
21
  */
17
22
  init_utils();
@@ -78,7 +83,7 @@ var NaiteReporterClass = class {
78
83
  }
79
84
  }
80
85
  /**
81
- * beforeAll에서 호출합니다.
86
+ * Vitest 커스텀 리포터(NaiteVitestReporter)의 onTestRunStart에서 호출합니다.
82
87
  * 테스트 run 시작을 알립니다 (데이터 클리어 신호).
83
88
  */
84
89
  async startTestRun() {
@@ -89,7 +94,7 @@ var NaiteReporterClass = class {
89
94
  });
90
95
  }
91
96
  /**
92
- * afterEach에서 호출합니다.
97
+ * bootstrap()의 afterEach에서 호출합니다.
93
98
  * 테스트 케이스 결과를 traces와 함께 전송합니다.
94
99
  */
95
100
  async reportTestResult(result) {
@@ -101,7 +106,7 @@ var NaiteReporterClass = class {
101
106
  });
102
107
  }
103
108
  /**
104
- * afterAll에서 호출합니다.
109
+ * Vitest 커스텀 리포터(NaiteVitestReporter)의 onTestRunEnd에서 호출합니다.
105
110
  * 테스트 run 종료를 알립니다.
106
111
  */
107
112
  async endTestRun() {
@@ -121,4 +126,4 @@ const NaiteReporter = new NaiteReporterClass();
121
126
  //#endregion
122
127
  export { NaiteReporter };
123
128
 
124
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFpdGUtcmVwb3J0ZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL25haXRlL25haXRlLXJlcG9ydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmFpdGVSZXBvcnRlclxuICpcbiAqIO2FjOyKpO2KuCDqsrDqs7zsmYAgVHJhY2Ug7KCV67O066W8IFVuaXggU29ja2V07Jy866GcIFZTIENvZGUgZXh0ZW5zaW9u7JeQIOyghOuLrO2VqeuLiOuLpC5cbiAqIGV4dGVuc2lvbuydtCB+Ly5zb25hbXUvbmFpdGUte2hhc2h9LnNvY2vsl5Ag7IaM7LyTIOyEnOuyhOulvCDsl7TslrTrkaHri4jri6QuXG4gKlxuICog7ZSE66Gc7KCd7Yq467OE66GcIOqzoOycoO2VnCDshozsvJPsnYQg7IKs7Jqp7ZWY6riwIOychO2VtCBzb25hbXUuY29uZmlnLnRzIOqyveuhnOydmCDtlbTsi5zrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIGZzIG1vY2sg7Lap64+M7J2EIO2UvO2VmOq4sCDsnITtlbQgbmV0IOuqqOuTiOunjCDsgqzsmqntlanri4jri6QuXG4gKi9cbi8qIG94bGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi8gLy8gTmFpdGXripQgZXhwZWN07JmAIO2YuOydke2VmOuPhOuhnSBhbnnrpbwg7ZeI7Jqp7ZWoXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSBcIm5ldFwiO1xuaW1wb3J0IHsgdHlwZSBTb2NrZXQgfSBmcm9tIFwibmV0XCI7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgZmluZEFwaVJvb3RQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIE5haXRlTWVzc2FnaW5nVHlwZXMgfSBmcm9tIFwiLi9tZXNzYWdpbmctdHlwZXNcIjtcblxuLyoqXG4gKiBzb25hbXUuY29uZmlnLnRzIOqyveuhnOulvCDrsJvslYTshJwg7ZSE66Gc7KCd7Yq467OEIOqzoOycoCDtlbTsi5zrpbwg7IOd7ISx7ZWp64uI64ukLlxuICog7J217Iqk7YWQ7IWY6rO8IOuPmeydvO2VnCDrsKnsi53snLzroZwg6rOE7IKw7ZW07JW8IO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvamVjdEhhc2goY29uZmlnUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJtZDVcIikudXBkYXRlKGNvbmZpZ1BhdGgpLmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCA4KTtcbn1cblxuLyoqXG4gKiDtmITsnqwg7ZSE66Gc7KCd7Yq47J2YIOyGjOy8kyDqsr3roZzrpbwg6rOE7IKw7ZWp64uI64ukLlxuICogU29uYW11LmFwaVJvb3RQYXRo6rCAIOyEpOygleuQnCDtm4Tsl5Ag7Zi47Lac7ZW07JW8IO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0U29ja2V0UGF0aCgpOiBzdHJpbmcge1xuICAvLyBzb25hbXUuY29uZmlnLnRz7J2YIOygiOuMgCDqsr3roZwg6rOE7IKwXG4gIC8vIGFwaVJvb3RQYXRo64qUIC9wcm9qZWN0L2FwaSDtmJXtg5zsnbTqs6AsIGNvbmZpZ+uKlCAvcHJvamVjdC9hcGkvc3JjL3NvbmFtdS5jb25maWcudHPsl5Ag7J6I7J2MXG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKGZpbmRBcGlSb290UGF0aCgpLCBcInNyY1wiLCBcInNvbmFtdS5jb25maWcudHNcIik7XG4gIGNvbnN0IGhhc2ggPSBnZXRQcm9qZWN0SGFzaChjb25maWdQYXRoKTtcblxuICByZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiXG4gICAgPyBgXFxcXFxcXFwuXFxcXHBpcGVcXFxcbmFpdGUtJHtoYXNofWBcbiAgICA6IGpvaW4oaG9tZWRpcigpLCBcIi5zb25hbXVcIiwgYG5haXRlLSR7aGFzaH0uc29ja2ApO1xufVxuXG4vKipcbiAqIOyXsOqysCDsi6TtjKjqsIAg7KeA7IaN65CgIOuVjChleHRlbnNpb24g66+47Iuk7ZaJIOuTsSkgYnVmZmVy6rCAIOustO2VnO2eiCDsu6Tsp4Dsp4Ag7JWK64+E66GdXG4gKiDstZzqt7wg66mU7Iuc7KeA66eMIOydtCDqsJzsiJjrp4ztgbwg7Jyg7KeA7ZWp64uI64ukLlxuICovXG5jb25zdCBNQVhfQlVGRkVSRURfTUVTU0FHRVMgPSAxMDAwO1xuXG5jbGFzcyBOYWl0ZVJlcG9ydGVyQ2xhc3Mge1xuICBwcml2YXRlIHNvY2tldFBhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNvY2tldDogU29ja2V0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY29ubmVjdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgYnVmZmVyOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiDshozsvJMg7Jew6rKwIOyLnOuPhFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNvbm5lY3RlZCB8fCB0aGlzLnNvY2tldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgIGlmICghdGhpcy5zb2NrZXRQYXRoKSB7XG4gICAgICAgIHRoaXMuc29ja2V0UGF0aCA9IGdldFNvY2tldFBhdGgoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc29ja2V0ID0gY29ubmVjdCh0aGlzLnNvY2tldFBhdGgpO1xuXG4gICAgICB0aGlzLnNvY2tldC5vbihcImNvbm5lY3RcIiwgKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgIC8vIOuyhO2NvOyXkCDsjJPsnbgg66mU7Iuc7KeAIOyghOyGoVxuICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiB0aGlzLmJ1ZmZlcikge1xuICAgICAgICAgIHRoaXMuc29ja2V0Py53cml0ZShtc2cpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgICAgIHJlcygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgICAgLy8g7Jew6rKwIOyLpO2MqCDrrLTsi5wgKGV4dGVuc2lvbuydtCDqurzsoLjsnojsnYQg7IiYIOyeiOydjClcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBudWxsO1xuICAgICAgICByZWooZSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zb2NrZXQub24oXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOuplOyLnOyngCDsoITshqEgKOykhOuwlOq/iOycvOuhnCDqtazrtoQpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNlbmQoZGF0YTogTmFpdGVNZXNzYWdpbmdUeXBlcy5OYWl0ZU1lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtc2cgPSBgJHtKU09OLnN0cmluZ2lmeShkYXRhKX1cXG5gO1xuXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVDb25uZWN0aW9uKCkuY2F0Y2goKF8pID0+IHt9KTtcblxuICAgIGlmICh0aGlzLmNvbm5lY3RlZCAmJiB0aGlzLnNvY2tldCkge1xuICAgICAgdGhpcy5zb2NrZXQud3JpdGUobXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7Jew6rKwIOuMgOq4sCDspJHsnbTrqbQg67KE7Y287JeQIOyggOyepSwg7IOB7ZWcIOy0iOqzvCDsi5wg7Jik656Y65CcIOuplOyLnOyngOu2gO2EsCDtj5DquLBcbiAgICAgIHRoaXMuYnVmZmVyLnB1c2gobXNnKTtcbiAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPiBNQVhfQlVGRkVSRURfTUVTU0FHRVMpIHtcbiAgICAgICAgdGhpcy5idWZmZXIuc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYmVmb3JlQWxs7JeQ7IScIO2YuOy2nO2VqeuLiOuLpC5cbiAgICog7YWM7Iqk7Yq4IHJ1biDsi5zsnpHsnYQg7JWM66a964uI64ukICjrjbDsnbTthLAg7YG066as7Ja0IOyLoO2YuCkuXG4gICAqL1xuICBhc3luYyBzdGFydFRlc3RSdW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKHtcbiAgICAgIHR5cGU6IFwicnVuL3N0YXJ0XCIsXG4gICAgICBzdGFydGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBhZnRlckVhY2jsl5DshJwg7Zi47Lac7ZWp64uI64ukLlxuICAgKiDthYzsiqTtirgg7LyA7J207IqkIOqysOqzvOulvCB0cmFjZXPsmYAg7ZWo6ruYIOyghOyGoe2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlcG9ydFRlc3RSZXN1bHQoXG4gICAgcmVzdWx0OiBPbWl0PE5haXRlTWVzc2FnaW5nVHlwZXMuVGVzdFJlc3VsdCwgXCJyZWNlaXZlZEF0XCI+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoe1xuICAgICAgdHlwZTogXCJ0ZXN0L3Jlc3VsdFwiLFxuICAgICAgcmVjZWl2ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgLi4ucmVzdWx0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGFmdGVyQWxs7JeQ7IScIO2YuOy2nO2VqeuLiOuLpC5cbiAgICog7YWM7Iqk7Yq4IHJ1biDsooXro4zrpbwg7JWM66a964uI64ukLlxuICAgKi9cbiAgYXN5bmMgZW5kVGVzdFJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNlbmQoe1xuICAgICAgdHlwZTogXCJydW4vZW5kXCIsXG4gICAgICBlbmRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG5cbiAgICAvLyDsl7DqsrAg7KKF66OMXG4gICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICB0aGlzLnNvY2tldC5lbmQoKTtcbiAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBOYWl0ZVJlcG9ydGVyID0gbmV3IE5haXRlUmVwb3J0ZXJDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O1dBa0JnRDs7Ozs7QUFPaEQsU0FBUyxlQUFlLFlBQTRCO0NBQ2xELE9BQU8sV0FBVyxLQUFLLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDdEU7Ozs7O0FBTUEsU0FBUyxnQkFBd0I7Q0FJL0IsTUFBTSxPQUFPLGVBRE0sS0FBSyxnQkFBZ0IsR0FBRyxPQUFPLGtCQUN0QixDQUFVO0NBRXRDLE9BQU8sUUFBUSxhQUFhLFVBQ3hCLHNCQUFzQixTQUN0QixLQUFLLFFBQVEsR0FBRyxXQUFXLFNBQVMsS0FBSyxNQUFNO0FBQ3JEOzs7OztBQU1BLE1BQU0sd0JBQXdCO0FBRTlCLElBQU0scUJBQU4sTUFBeUI7Q0FDdkIsYUFBb0M7Q0FDcEMsU0FBZ0M7Q0FDaEMsWUFBb0I7Q0FDcEIsU0FBMkIsQ0FBQzs7OztDQUs1QixNQUFjLG1CQUFrQztFQUM5QyxJQUFJLEtBQUssYUFBYSxLQUFLLFFBQ3pCO0VBR0YsT0FBTyxJQUFJLFNBQVMsS0FBSyxRQUFRO0dBQy9CLElBQUksQ0FBQyxLQUFLLFlBQ1IsS0FBSyxhQUFhLGNBQWM7R0FFbEMsS0FBSyxTQUFTLFFBQVEsS0FBSyxVQUFVO0dBRXJDLEtBQUssT0FBTyxHQUFHLGlCQUFpQjtJQUM5QixLQUFLLFlBQVk7SUFFakIsS0FBSyxNQUFNLE9BQU8sS0FBSyxRQUNyQixLQUFLLFFBQVEsTUFBTSxHQUFHO0lBRXhCLEtBQUssU0FBUyxDQUFDO0lBQ2YsSUFBSTtHQUNOLENBQUM7R0FFRCxLQUFLLE9BQU8sR0FBRyxVQUFVLE1BQU07SUFFN0IsS0FBSyxZQUFZO0lBQ2pCLEtBQUssU0FBUztJQUNkLElBQUksQ0FBQztHQUNQLENBQUM7R0FFRCxLQUFLLE9BQU8sR0FBRyxlQUFlO0lBQzVCLEtBQUssWUFBWTtJQUNqQixLQUFLLFNBQVM7R0FDaEIsQ0FBQztFQUNILENBQUM7Q0FDSDs7OztDQUtBLE1BQWMsS0FBSyxNQUF1RDtFQUN4RSxNQUFNLE1BQU0sR0FBRyxLQUFLLFVBQVUsSUFBSSxFQUFFO0VBRXBDLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLENBQUM7RUFFN0MsSUFBSSxLQUFLLGFBQWEsS0FBSyxRQUN6QixLQUFLLE9BQU8sTUFBTSxHQUFHO09BQ2hCO0dBRUwsS0FBSyxPQUFPLEtBQUssR0FBRztHQUNwQixJQUFJLEtBQUssT0FBTyxTQUFTLHVCQUN2QixLQUFLLE9BQU8sTUFBTTtFQUV0QjtDQUNGOzs7OztDQU1BLE1BQU0sZUFBOEI7RUFDbEMsSUFBSSxRQUFRLElBQUksSUFDZDtFQUdGLE1BQU0sS0FBSyxLQUFLO0dBQ2QsTUFBTTtHQUNOLDRCQUFXLElBQUksS0FBSyxFQUFDLENBQUMsWUFBWTtFQUNwQyxDQUFDO0NBQ0g7Ozs7O0NBTUEsTUFBTSxpQkFDSixRQUNlO0VBQ2YsSUFBSSxRQUFRLElBQUksSUFDZDtFQUdGLE1BQU0sS0FBSyxLQUFLO0dBQ2QsTUFBTTtHQUNOLDZCQUFZLElBQUksS0FBSyxFQUFDLENBQUMsWUFBWTtHQUNuQyxHQUFHO0VBQ0wsQ0FBQztDQUNIOzs7OztDQU1BLE1BQU0sYUFBNEI7RUFDaEMsSUFBSSxRQUFRLElBQUksSUFDZDtFQUdGLE1BQU0sS0FBSyxLQUFLO0dBQ2QsTUFBTTtHQUNOLDBCQUFTLElBQUksS0FBSyxFQUFDLENBQUMsWUFBWTtFQUNsQyxDQUFDO0VBR0QsSUFBSSxLQUFLLFFBQVE7R0FDZixLQUFLLE9BQU8sSUFBSTtHQUNoQixLQUFLLFNBQVM7R0FDZCxLQUFLLFlBQVk7RUFDbkI7Q0FDRjtBQUNGO0FBRUEsTUFBYSxnQkFBZ0IsSUFBSSxtQkFBbUIifQ==
129
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFpdGUtcmVwb3J0ZXIuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL25haXRlL25haXRlLXJlcG9ydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTmFpdGVSZXBvcnRlclxuICpcbiAqIO2FjOyKpO2KuCDqsrDqs7zsmYAgVHJhY2Ug7KCV67O066W8IFVuaXggU29ja2V07Jy866GcIFZTIENvZGUgZXh0ZW5zaW9u7JeQIOyghOuLrO2VqeuLiOuLpC5cbiAqIGV4dGVuc2lvbuydtCB+Ly5zb25hbXUvbmFpdGUte2hhc2h9LnNvY2vsl5Ag7IaM7LyTIOyEnOuyhOulvCDsl7TslrTrkaHri4jri6QuXG4gKlxuICog7ZSE66Gc7KCd7Yq467OE66GcIOqzoOycoO2VnCDshozsvJPsnYQg7IKs7Jqp7ZWY6riwIOychO2VtCBzb25hbXUuY29uZmlnLnRzIOqyveuhnOydmCDtlbTsi5zrpbwg7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIOuqqOuTiCDsi7HquIDthLTsnbTsp4Drp4wg7J247Iqk7YS07Iqk64qUIO2UhOuhnOyEuOyKpOuniOuLpCDrs4TqsJzsnoXri4jri6QuIHJ1bi9zdGFydMK3cnVuL2VuZOuKlFxuICogVml0ZXN0IOuplOyduCDtlITroZzshLjsiqQoTmFpdGVWaXRlc3RSZXBvcnRlciDsu6TsiqTthYAg66as7Y+s7YSwKeyXkOyEnCwgdGVzdC9yZXN1bHTripRcbiAqIOqwgSB3b3JrZXIg7ZSE66Gc7IS47IqkKGJvb3RzdHJhcOydmCBhZnRlckVhY2gp7JeQ7IScIOyghOyGoeuQmOuvgOuhnCBidWZmZXLsmYAg7IaM7LyTXG4gKiDsl7DqsrDsnYQg7ISc66GcIOqzteycoO2VmOyngCDslYrsirXri4jri6QuXG4gKlxuICogZnMgbW9jayDstqnrj4zsnYQg7ZS87ZWY6riwIOychO2VtCBuZXQg66qo65OI66eMIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuLyogb3hsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLyAvLyBOYWl0ZeuKlCBleHBlY3TsmYAg7Zi47J2R7ZWY64+E66GdIGFueeulvCDtl4jsmqntlahcblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tIFwibmV0XCI7XG5pbXBvcnQgeyB0eXBlIFNvY2tldCB9IGZyb20gXCJuZXRcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwib3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBmaW5kQXBpUm9vdFBhdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgTmFpdGVNZXNzYWdpbmdUeXBlcyB9IGZyb20gXCIuL21lc3NhZ2luZy10eXBlc1wiO1xuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg6rK966Gc66W8IOuwm+yVhOyEnCDtlITroZzsoJ3tirjrs4Qg6rOg7JygIO2VtOyLnOulvCDsg53shLHtlanri4jri6QuXG4gKiDsnbXsiqTthZDshZjqs7wg64+Z7J287ZWcIOuwqeyLneycvOuhnCDqs4TsgrDtlbTslbwg7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRQcm9qZWN0SGFzaChjb25maWdQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaChcIm1kNVwiKS51cGRhdGUoY29uZmlnUGF0aCkuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIDgpO1xufVxuXG4vKipcbiAqIO2YhOyerCDtlITroZzsoJ3tirjsnZgg7IaM7LyTIOqyveuhnOulvCDqs4TsgrDtlanri4jri6QuXG4gKiBTb25hbXUuYXBpUm9vdFBhdGjqsIAg7ISk7KCV65CcIO2bhOyXkCDtmLjstpztlbTslbwg7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBnZXRTb2NrZXRQYXRoKCk6IHN0cmluZyB7XG4gIC8vIHNvbmFtdS5jb25maWcudHPsnZgg7KCI64yAIOqyveuhnCDqs4TsgrBcbiAgLy8gYXBpUm9vdFBhdGjripQgL3Byb2plY3QvYXBpIO2Yle2DnOydtOqzoCwgY29uZmln64qUIC9wcm9qZWN0L2FwaS9zcmMvc29uYW11LmNvbmZpZy50c+yXkCDsnojsnYxcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4oZmluZEFwaVJvb3RQYXRoKCksIFwic3JjXCIsIFwic29uYW11LmNvbmZpZy50c1wiKTtcbiAgY29uc3QgaGFzaCA9IGdldFByb2plY3RIYXNoKGNvbmZpZ1BhdGgpO1xuXG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCJcbiAgICA/IGBcXFxcXFxcXC5cXFxccGlwZVxcXFxuYWl0ZS0ke2hhc2h9YFxuICAgIDogam9pbihob21lZGlyKCksIFwiLnNvbmFtdVwiLCBgbmFpdGUtJHtoYXNofS5zb2NrYCk7XG59XG5cbi8qKlxuICog7Jew6rKwIOyLpO2MqOqwgCDsp4Dsho3rkKAg65WMKGV4dGVuc2lvbiDrr7jsi6Ttlokg65OxKSBidWZmZXLqsIAg66y07ZWc7Z6IIOy7pOyngOyngCDslYrrj4TroZ1cbiAqIOy1nOq3vCDrqZTsi5zsp4Drp4wg7J20IOqwnOyImOunjO2BvCDsnKDsp4Dtlanri4jri6QuXG4gKi9cbmNvbnN0IE1BWF9CVUZGRVJFRF9NRVNTQUdFUyA9IDEwMDA7XG5cbmNsYXNzIE5haXRlUmVwb3J0ZXJDbGFzcyB7XG4gIHByaXZhdGUgc29ja2V0UGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc29ja2V0OiBTb2NrZXQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb25uZWN0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBidWZmZXI6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIOyGjOy8kyDsl7DqsrAg7Iuc64+EXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUNvbm5lY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGVkIHx8IHRoaXMuc29ja2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNvY2tldFBhdGgpIHtcbiAgICAgICAgdGhpcy5zb2NrZXRQYXRoID0gZ2V0U29ja2V0UGF0aCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zb2NrZXQgPSBjb25uZWN0KHRoaXMuc29ja2V0UGF0aCk7XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uKFwiY29ubmVjdFwiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgLy8g67KE7Y287JeQIOyMk+yduCDrqZTsi5zsp4Ag7KCE7IahXG4gICAgICAgIGZvciAoY29uc3QgbXNnIG9mIHRoaXMuYnVmZmVyKSB7XG4gICAgICAgICAgdGhpcy5zb2NrZXQ/LndyaXRlKG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgcmVzKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zb2NrZXQub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgICAvLyDsl7DqsrAg7Iuk7YyoIOustOyLnCAoZXh0ZW5zaW9u7J20IOq6vOyguOyeiOydhCDsiJgg7J6I7J2MKVxuICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHJlaihlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNvY2tldC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog66mU7Iuc7KeAIOyghOyGoSAo7KSE67CU6r+I7Jy866GcIOq1rOu2hClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZChkYXRhOiBOYWl0ZU1lc3NhZ2luZ1R5cGVzLk5haXRlTWVzc2FnZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1zZyA9IGAke0pTT04uc3RyaW5naWZ5KGRhdGEpfVxcbmA7XG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZUNvbm5lY3Rpb24oKS5jYXRjaCgoXykgPT4ge30pO1xuXG4gICAgaWYgKHRoaXMuY29ubmVjdGVkICYmIHRoaXMuc29ja2V0KSB7XG4gICAgICB0aGlzLnNvY2tldC53cml0ZShtc2cpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDsl7DqsrAg64yA6riwIOykkeydtOuptCDrsoTtjbzsl5Ag7KCA7J6lLCDsg4HtlZwg7LSI6rO8IOyLnCDsmKTrnpjrkJwg66mU7Iuc7KeA67aA7YSwIO2PkOq4sFxuICAgICAgdGhpcy5idWZmZXIucHVzaChtc2cpO1xuICAgICAgaWYgKHRoaXMuYnVmZmVyLmxlbmd0aCA+IE1BWF9CVUZGRVJFRF9NRVNTQUdFUykge1xuICAgICAgICB0aGlzLmJ1ZmZlci5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWaXRlc3Qg7Luk7Iqk7YWAIOumrO2PrO2EsChOYWl0ZVZpdGVzdFJlcG9ydGVyKeydmCBvblRlc3RSdW5TdGFydOyXkOyEnCDtmLjstpztlanri4jri6QuXG4gICAqIO2FjOyKpO2KuCBydW4g7Iuc7J6R7J2EIOyVjOumveuLiOuLpCAo642w7J207YSwIO2BtOumrOyWtCDsi6DtmLgpLlxuICAgKi9cbiAgYXN5bmMgc3RhcnRUZXN0UnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5DSSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCh7XG4gICAgICB0eXBlOiBcInJ1bi9zdGFydFwiLFxuICAgICAgc3RhcnRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogYm9vdHN0cmFwKCnsnZggYWZ0ZXJFYWNo7JeQ7IScIO2YuOy2nO2VqeuLiOuLpC5cbiAgICog7YWM7Iqk7Yq4IOy8gOydtOyKpCDqsrDqs7zrpbwgdHJhY2Vz7JmAIO2VqOq7mCDsoITshqHtlanri4jri6QuXG4gICAqL1xuICBhc3luYyByZXBvcnRUZXN0UmVzdWx0KFxuICAgIHJlc3VsdDogT21pdDxOYWl0ZU1lc3NhZ2luZ1R5cGVzLlRlc3RSZXN1bHQsIFwicmVjZWl2ZWRBdFwiPixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHByb2Nlc3MuZW52LkNJKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZW5kKHtcbiAgICAgIHR5cGU6IFwidGVzdC9yZXN1bHRcIixcbiAgICAgIHJlY2VpdmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIC4uLnJlc3VsdCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXRlc3Qg7Luk7Iqk7YWAIOumrO2PrO2EsChOYWl0ZVZpdGVzdFJlcG9ydGVyKeydmCBvblRlc3RSdW5FbmTsl5DshJwg7Zi47Lac7ZWp64uI64ukLlxuICAgKiDthYzsiqTtirggcnVuIOyiheujjOulvCDslYzrpr3ri4jri6QuXG4gICAqL1xuICBhc3luYyBlbmRUZXN0UnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5DSSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VuZCh7XG4gICAgICB0eXBlOiBcInJ1bi9lbmRcIixcbiAgICAgIGVuZGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9KTtcblxuICAgIC8vIOyXsOqysCDsooXro4xcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuc29ja2V0LmVuZCgpO1xuICAgICAgdGhpcy5zb2NrZXQgPSBudWxsO1xuICAgICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.10.8",
3
+ "version": "0.10.9",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "framework",
@@ -130,8 +130,8 @@
130
130
  "vite": "8.0.16",
131
131
  "vitest": "^4.1.9",
132
132
  "@sonamu-kit/hmr-hook": "^0.5.1",
133
- "@sonamu-kit/hmr-runner": "^0.2.0",
134
133
  "@sonamu-kit/tasks": "^0.3.1",
134
+ "@sonamu-kit/hmr-runner": "^0.2.0",
135
135
  "@sonamu-kit/ts-loader": "^2.2.0"
136
136
  },
137
137
  "devDependencies": {
@@ -396,9 +396,7 @@ export function transactional(options: TransactionalOptions = {}) {
396
396
  method: methodName,
397
397
  });
398
398
 
399
- const existingContext = DB.transactionStorage.getStore();
400
-
401
- // AsyncLocalStorage 컨텍스트 없거나 해당 preset의 트랜잭션이 없으면 새로 시작
399
+ // 해당 preset의 트랜잭션이 없으면 새 트랜잭션과 scope를 함께 시작한다.
402
400
  const startTransaction = async () => {
403
401
  const puri = this.getPuri(dbPreset);
404
402
 
@@ -406,33 +404,24 @@ export function transactional(options: TransactionalOptions = {}) {
406
404
  async (trx) => {
407
405
  this.logger.debug("new transaction context: {dbPreset}", { dbPreset });
408
406
  const trxWrapper = new PuriTransactionWrapper(trx, new UpsertBuilder());
409
- // TransactionContext에 트랜잭션 저장
410
- DB.getTransactionContext().setTransaction(dbPreset, trxWrapper);
411
-
412
- try {
413
- return await originalMethod.apply(this, args);
414
- } finally {
415
- // 트랜잭션 제거
416
- this.logger.debug("delete transaction context: {dbPreset}", { dbPreset });
417
- DB.getTransactionContext().deleteTransaction(dbPreset);
418
- }
407
+
408
+ return DB.runWithTransactionScope(dbPreset, trxWrapper, () =>
409
+ originalMethod.apply(this, args),
410
+ );
419
411
  },
420
412
  { isolationLevel: isolation, readOnly },
421
413
  );
422
414
  };
423
415
 
424
- // AsyncLocalStorage 컨텍스트가 없으면 새로 생성
425
- if (!existingContext) {
426
- return DB.runWithTransaction(startTransaction);
427
- }
428
-
429
- // 이미 AsyncLocalStorage 컨텍스트 안에 있는지 확인 후 해당 preset의 트랜잭션이 이미 있으면 재사용
430
- if (existingContext?.getTransaction(dbPreset)) {
416
+ const existingTransaction = DB.transactionStorage.getStore()?.getTransaction(dbPreset);
417
+ if (existingTransaction) {
431
418
  this.logger.debug("reuse transaction context: {dbPreset}", { dbPreset });
432
- return originalMethod.apply(this, args);
419
+ // 다른 preset이 안쪽에 있어도 이 메서드가 재사용한 트랜잭션을 현재 scope로 표시한다.
420
+ return DB.runWithTransactionScope(dbPreset, existingTransaction, () =>
421
+ originalMethod.apply(this, args),
422
+ );
433
423
  }
434
424
 
435
- // 컨텍스트는 있지만 이 preset의 트랜잭션은 없는 경우 (같은 컨텍스트 내에서 실행)
436
425
  return startTransaction();
437
426
  };
438
427