@uql/core 0.4.80 → 0.4.83

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.
Files changed (57) hide show
  1. package/README.md +11 -11
  2. package/dialect/abstractSqlDialect-spec.d.ts +49 -0
  3. package/dialect/abstractSqlDialect-spec.js +765 -0
  4. package/dialect/abstractSqlDialect.js +11 -17
  5. package/dialect/mysqlDialect.js +2 -2
  6. package/dialect/mysqlDialect.spec.d.ts +6 -0
  7. package/dialect/mysqlDialect.spec.js +33 -0
  8. package/dialect/postgresDialect.js +2 -2
  9. package/dialect/postgresDialect.spec.d.ts +1 -0
  10. package/dialect/postgresDialect.spec.js +139 -0
  11. package/dialect/sqliteDialect.spec.d.ts +1 -0
  12. package/dialect/sqliteDialect.spec.js +12 -0
  13. package/entity/decorator/definition.js +22 -24
  14. package/entity/decorator/definition.spec.d.ts +1 -0
  15. package/entity/decorator/definition.spec.js +725 -0
  16. package/entity/decorator/relation.spec.d.ts +1 -0
  17. package/entity/decorator/relation.spec.js +55 -0
  18. package/options.js +2 -2
  19. package/options.spec.d.ts +1 -0
  20. package/options.spec.js +50 -0
  21. package/package.json +3 -3
  22. package/querier/abstractQuerier-it.d.ts +41 -0
  23. package/querier/abstractQuerier-it.js +410 -0
  24. package/querier/abstractSqlQuerier-it.d.ts +9 -0
  25. package/querier/abstractSqlQuerier-it.js +19 -0
  26. package/querier/abstractSqlQuerier-spec.d.ts +53 -0
  27. package/querier/abstractSqlQuerier-spec.js +607 -0
  28. package/querier/abstractSqlQuerier.js +2 -3
  29. package/querier/decorator/injectQuerier.js +2 -3
  30. package/querier/decorator/injectQuerier.spec.d.ts +1 -0
  31. package/querier/decorator/injectQuerier.spec.js +108 -0
  32. package/querier/decorator/transactional.js +2 -2
  33. package/querier/decorator/transactional.spec.d.ts +1 -0
  34. package/querier/decorator/transactional.spec.js +241 -0
  35. package/repository/genericRepository.spec.d.ts +1 -0
  36. package/repository/genericRepository.spec.js +86 -0
  37. package/test/entityMock.d.ts +180 -0
  38. package/test/entityMock.js +451 -0
  39. package/test/index.d.ts +3 -0
  40. package/test/index.js +7 -0
  41. package/test/it.util.d.ts +4 -0
  42. package/test/it.util.js +60 -0
  43. package/test/spec.util.d.ts +13 -0
  44. package/test/spec.util.js +54 -0
  45. package/type/entity.d.ts +12 -17
  46. package/type/entity.js +1 -1
  47. package/type/utility.d.ts +3 -2
  48. package/type/utility.js +1 -1
  49. package/util/dialect.util.js +2 -3
  50. package/util/dialect.util.spec.d.ts +1 -0
  51. package/util/dialect.util.spec.js +23 -0
  52. package/util/object.util.spec.d.ts +1 -0
  53. package/util/object.util.spec.js +26 -0
  54. package/util/sql.util.spec.d.ts +1 -0
  55. package/util/sql.util.spec.js +164 -0
  56. package/util/string.util.spec.d.ts +1 -0
  57. package/util/string.util.spec.js +26 -0
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.isValidEntityType = exports.getMeta = exports.getEntities = exports.defineEntity = exports.defineRelation = exports.defineId = exports.defineField = void 0;
5
4
  require("reflect-metadata");
6
5
  const util_1 = require("@uql/core/util");
7
6
  const holder = globalThis;
8
7
  const metaKey = '@uql/core/entity/decorator';
9
- const metas = (_a = holder[metaKey]) !== null && _a !== void 0 ? _a : new Map();
8
+ const metas = holder[metaKey] ?? new Map();
10
9
  holder[metaKey] = metas;
11
10
  function defineField(entity, key, opts = {}) {
12
11
  const meta = ensureMeta(entity);
@@ -14,9 +13,6 @@ function defineField(entity, key, opts = {}) {
14
13
  const type = inferType(entity, key);
15
14
  opts = { ...opts, type };
16
15
  }
17
- if (typeof opts.reference === 'function') {
18
- opts = { ...opts, reference: { entity: opts.reference } };
19
- }
20
16
  meta.fields[key] = { ...meta.fields[key], ...{ name: key, ...opts } };
21
17
  return meta;
22
18
  }
@@ -41,7 +37,6 @@ function defineRelation(entity, key, opts) {
41
37
  }
42
38
  exports.defineRelation = defineRelation;
43
39
  function defineEntity(entity, opts = {}) {
44
- var _a;
45
40
  const meta = ensureMeta(entity);
46
41
  if (!(0, util_1.hasKeys)(meta.fields)) {
47
42
  throw TypeError(`'${entity.name}' must have fields`);
@@ -56,7 +51,7 @@ function defineEntity(entity, opts = {}) {
56
51
  }
57
52
  meta.softDelete = onDeleteKeys[0];
58
53
  }
59
- meta.name = (_a = opts.name) !== null && _a !== void 0 ? _a : entity.name;
54
+ meta.name = opts.name ?? entity.name;
60
55
  let proto = Object.getPrototypeOf(entity.prototype);
61
56
  while (proto.constructor !== Object) {
62
57
  const parentMeta = ensureMeta(proto.constructor);
@@ -137,31 +132,32 @@ function fillInverseSideRelations(relOpts) {
137
132
  const relEntity = relOpts.entity();
138
133
  const relMeta = getMeta(relEntity);
139
134
  relOpts.mappedBy = getMappedByRelationKey(relOpts);
140
- // reversing references here makes the SQL generation simpler (no need to check for `mappedBy`)
141
- const { cardinality, references, through } = relMeta.relations[relOpts.mappedBy];
142
- if (cardinality === '11' || cardinality === 'm1') {
143
- relOpts.references = references.map(({ local, foreign }) => ({
144
- local: foreign,
145
- foreign: local,
146
- }));
135
+ if (relMeta.fields[relOpts.mappedBy]) {
136
+ relOpts.references = [{ local: relMeta.id, foreign: relOpts.mappedBy }];
137
+ return;
147
138
  }
148
- else {
149
- relOpts.references = references.slice().reverse();
150
- relOpts.through = through;
139
+ const mappedByRelation = relMeta.relations[relOpts.mappedBy];
140
+ if (relOpts.cardinality === 'm1' || relOpts.cardinality === 'mm') {
141
+ relOpts.references = mappedByRelation.references.slice().reverse();
142
+ relOpts.through = mappedByRelation.through;
143
+ return;
151
144
  }
145
+ relOpts.references = mappedByRelation.references.map(({ local, foreign }) => ({
146
+ local: foreign,
147
+ foreign: local,
148
+ }));
152
149
  }
153
150
  function fillThroughRelations(entity) {
154
151
  const meta = ensureMeta(entity);
155
152
  meta.relations = (0, util_1.getKeys)(meta.fields).reduce((relations, key) => {
156
153
  const { reference } = meta.fields[key];
157
154
  if (reference) {
158
- const relEntityGetter = reference.entity;
159
- const relEntity = relEntityGetter();
155
+ const relEntity = reference();
160
156
  const relMeta = ensureMeta(relEntity);
161
157
  const relKey = key.slice(0, -relMeta.id.length);
162
158
  const relOpts = {
159
+ entity: reference,
163
160
  cardinality: 'm1',
164
- entity: relEntityGetter,
165
161
  references: [{ local: key, foreign: relMeta.id }],
166
162
  };
167
163
  relations[relKey] = relOpts;
@@ -179,13 +175,15 @@ function getMappedByRelationKey(relOpts) {
179
175
  return relOpts.mappedBy;
180
176
  }
181
177
  function getRelationKeyMap(meta) {
182
- return (0, util_1.getKeys)(meta.relations).reduce((acc, key) => {
178
+ return (0, util_1.getKeys)(meta.fields)
179
+ .concat((0, util_1.getKeys)(meta.relations))
180
+ .reduce((acc, key) => {
183
181
  acc[key] = key;
184
182
  return acc;
185
183
  }, {});
186
184
  }
187
185
  function getIdKey(meta) {
188
- const id = (0, util_1.getKeys)(meta.fields).find((key) => { var _a; return (_a = meta.fields[key]) === null || _a === void 0 ? void 0 : _a.isId; });
186
+ const id = (0, util_1.getKeys)(meta.fields).find((key) => meta.fields[key]?.isId);
189
187
  return id;
190
188
  }
191
189
  function extendMeta(target, source) {
@@ -207,7 +205,7 @@ function inferEntityType(entity, key) {
207
205
  const inferredType = inferType(entity, key);
208
206
  const isValidType = isValidEntityType(inferredType);
209
207
  if (!isValidType) {
210
- throw TypeError(`'${entity.name}.${key}' type was auto-inferred with invalid type '${inferredType === null || inferredType === void 0 ? void 0 : inferredType.name}'`);
208
+ throw TypeError(`'${entity.name}.${key}' type was auto-inferred with invalid type '${inferredType?.name}'`);
211
209
  }
212
210
  return inferredType;
213
211
  }
@@ -222,4 +220,4 @@ function isValidEntityType(type) {
222
220
  type !== Object);
223
221
  }
224
222
  exports.isValidEntityType = isValidEntityType;
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRpdHkvZGVjb3JhdG9yL2RlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDRCQUEwQjtBQUMxQix5Q0FBMEU7QUFjMUUsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDO0FBQzFCLE1BQU0sT0FBTyxHQUFHLDRCQUE0QixDQUFDO0FBQzdDLE1BQU0sS0FBSyxHQUFvQyxNQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUNBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBRXhCLFNBQWdCLFdBQVcsQ0FBSSxNQUFlLEVBQUUsR0FBVyxFQUFFLE9BQXFCLEVBQUU7SUFDbEYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ2QsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUMxQjtJQUNELElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtRQUN4QyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7S0FDM0Q7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7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cnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHsgaGFzS2V5cywgbG93ZXJGaXJzdCwgZ2V0S2V5cywgdXBwZXJGaXJzdCB9IGZyb20gJ0B1cWwvY29yZS91dGlsJztcbmltcG9ydCB7XG4gIFJlbGF0aW9uT3B0aW9ucyxcbiAgRmllbGRPcHRpb25zLFxuICBFbnRpdHlPcHRpb25zLFxuICBFbnRpdHlNZXRhLFxuICBUeXBlLFxuICBSZWxhdGlvbktleU1hcCxcbiAgUmVmZXJlbmNlT3B0aW9ucyxcbiAgUmVsYXRpb25LZXksXG4gIEZpZWxkS2V5LFxuICBJZEtleSxcbn0gZnJvbSAnQHVxbC9jb3JlL3R5cGUnO1xuXG5jb25zdCBob2xkZXIgPSBnbG9iYWxUaGlzO1xuY29uc3QgbWV0YUtleSA9ICdAdXFsL2NvcmUvZW50aXR5L2RlY29yYXRvcic7XG5jb25zdCBtZXRhczogTWFwPFR5cGU8YW55PiwgRW50aXR5TWV0YTxhbnk+PiA9IGhvbGRlclttZXRhS2V5XSA/PyBuZXcgTWFwKCk7XG5ob2xkZXJbbWV0YUtleV0gPSBtZXRhcztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUZpZWxkPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcsIG9wdHM6IEZpZWxkT3B0aW9ucyA9IHt9KTogRW50aXR5TWV0YTxFPiB7XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIGlmICghb3B0cy50eXBlKSB7XG4gICAgY29uc3QgdHlwZSA9IGluZmVyVHlwZShlbnRpdHksIGtleSk7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgdHlwZSB9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5yZWZlcmVuY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCByZWZlcmVuY2U6IHsgZW50aXR5OiBvcHRzLnJlZmVyZW5jZSB9IH07XG4gIH1cbiAgbWV0YS5maWVsZHNba2V5XSA9IHsgLi4ubWV0YS5maWVsZHNba2V5XSwgLi4ueyBuYW1lOiBrZXksIC4uLm9wdHMgfSB9O1xuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUlkPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcsIG9wdHM6IEZpZWxkT3B0aW9ucyk6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuICBjb25zdCBpZCA9IGdldElkS2V5KG1ldGEpO1xuICBpZiAoaWQpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIGEgc2luZ2xlIGZpZWxkIGRlY29yYXRlZCB3aXRoIEBJZGApO1xuICB9XG4gIHJldHVybiBkZWZpbmVGaWVsZChlbnRpdHksIGtleSwgeyAuLi5vcHRzLCBpc0lkOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVsYXRpb248RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZywgb3B0czogUmVsYXRpb25PcHRpb25zPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGlmICghb3B0cy5lbnRpdHkpIHtcbiAgICBjb25zdCBpbmZlcnJlZFR5cGUgPSBpbmZlckVudGl0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgIG9wdHMuZW50aXR5ID0gKCkgPT4gaW5mZXJyZWRUeXBlO1xuICB9XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIG1ldGEucmVsYXRpb25zW2tleV0gPSB7IC4uLm1ldGEucmVsYXRpb25zW2tleV0sIC4uLm9wdHMgfTtcbiAgcmV0dXJuIG1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVFbnRpdHk8RT4oZW50aXR5OiBUeXBlPEU+LCBvcHRzOiBFbnRpdHlPcHRpb25zID0ge30pOiBFbnRpdHlNZXRhPEU+IHtcbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcblxuICBpZiAoIWhhc0tleXMobWV0YS5maWVsZHMpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIG11c3QgaGF2ZSBmaWVsZHNgKTtcbiAgfVxuXG4gIGNvbnN0IG9uRGVsZXRlS2V5cyA9IGdldEtleXMobWV0YS5maWVsZHMpLmZpbHRlcigoa2V5KSA9PiBtZXRhLmZpZWxkc1trZXldLm9uRGVsZXRlKSBhcyBGaWVsZEtleTxFPltdO1xuXG4gIGlmIChvbkRlbGV0ZUtleXMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIHdpdGggJ29uRGVsZXRlJyBhcyBtYXhpbXVtYCk7XG4gIH1cblxuICBpZiAob3B0cy5zb2Z0RGVsZXRlKSB7XG4gICAgaWYgKCFvbkRlbGV0ZUtleXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIG9uZSBmaWVsZCB3aXRoICdvbkRlbGV0ZScgdG8gZW5hYmxlICdzb2Z0RGVsZXRlJ2ApO1xuICAgIH1cbiAgICBtZXRhLnNvZnREZWxldGUgPSBvbkRlbGV0ZUtleXNbMF07XG4gIH1cblxuICBtZXRhLm5hbWUgPSBvcHRzLm5hbWUgPz8gZW50aXR5Lm5hbWU7XG4gIGxldCBwcm90bzogRnVuY3Rpb25Db25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihlbnRpdHkucHJvdG90eXBlKTtcblxuICB3aGlsZSAocHJvdG8uY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgIGNvbnN0IHBhcmVudE1ldGEgPSBlbnN1cmVNZXRhKHByb3RvLmNvbnN0cnVjdG9yIGFzIFR5cGU8RT4pO1xuICAgIGV4dGVuZE1ldGEobWV0YSwgcGFyZW50TWV0YSk7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG5cbiAgY29uc3QgaWQgPSBnZXRJZEtleShtZXRhKTtcbiAgaWYgKCFpZCkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIGRlY29yYXRlZCB3aXRoIEBJZGApO1xuICB9XG4gIG1ldGEuaWQgPSBpZDtcblxuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0aWVzKCk6IFR5cGU8YW55PltdIHtcbiAgcmV0dXJuIFsuLi5tZXRhcy5lbnRyaWVzKCldLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XG4gICAgaWYgKHZhbC5pZCkge1xuICAgICAgYWNjLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVNZXRhPEU+KGVudGl0eTogVHlwZTxFPik6IEVudGl0eU1ldGE8RT4ge1xuICBsZXQgbWV0YSA9IG1ldGFzLmdldChlbnRpdHkpO1xuICBpZiAobWV0YSkge1xuICAgIHJldHVybiBtZXRhO1xuICB9XG4gIG1ldGEgPSB7IGVudGl0eSwgZmllbGRzOiB7fSwgcmVsYXRpb25zOiB7fSB9O1xuICBtZXRhcy5zZXQoZW50aXR5LCBtZXRhKTtcbiAgcmV0dXJuIG1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhPEU+KGVudGl0eTogVHlwZTxFPik6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gbWV0YXMuZ2V0KGVudGl0eSk7XG4gIGlmICghbWV0YSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBpcyBub3QgYW4gZW50aXR5YCk7XG4gIH1cbiAgaWYgKG1ldGEucHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cbiAgbWV0YS5wcm9jZXNzZWQgPSB0cnVlO1xuICByZXR1cm4gZmlsbFJlbGF0aW9ucyhtZXRhKTtcbn1cblxuZnVuY3Rpb24gZmlsbFJlbGF0aW9uczxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGZvciAoY29uc3QgcmVsS2V5IGluIG1ldGEucmVsYXRpb25zKSB7XG4gICAgY29uc3QgcmVsT3B0cyA9IG1ldGEucmVsYXRpb25zW3JlbEtleSBhcyBSZWxhdGlvbktleTxFPl07XG5cbiAgICBpZiAocmVsT3B0cy5yZWZlcmVuY2VzKSB7XG4gICAgICAvLyByZWZlcmVuY2VzIHdlcmUgbWFudWFsbHkgc3BlY2lmaWVkXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVsT3B0cy5tYXBwZWRCeSkge1xuICAgICAgZmlsbEludmVyc2VTaWRlUmVsYXRpb25zKHJlbE9wdHMpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVsRW50aXR5ID0gcmVsT3B0cy5lbnRpdHkoKTtcbiAgICBjb25zdCByZWxNZXRhID0gZW5zdXJlTWV0YShyZWxFbnRpdHkpO1xuXG4gICAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtbScpIHtcbiAgICAgIGNvbnN0IGlkTmFtZSA9IG1ldGEuZmllbGRzW21ldGEuaWRdLm5hbWU7XG4gICAgICBjb25zdCByZWxJZE5hbWUgPSByZWxNZXRhLmZpZWxkc1tyZWxNZXRhLmlkXS5uYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gbG93ZXJGaXJzdChtZXRhLm5hbWUpICsgdXBwZXJGaXJzdChpZE5hbWUpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbG93ZXJGaXJzdChyZWxNZXRhLm5hbWUpICsgdXBwZXJGaXJzdChyZWxJZE5hbWUpO1xuICAgICAgcmVsT3B0cy5yZWZlcmVuY2VzID0gW1xuICAgICAgICB7IGxvY2FsOiBzb3VyY2UsIGZvcmVpZ246IG1ldGEuaWQgfSxcbiAgICAgICAgeyBsb2NhbDogdGFyZ2V0LCBmb3JlaWduOiByZWxNZXRhLmlkIH0sXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBbeyBsb2NhbDogYCR7cmVsS2V5fUlkYCwgZm9yZWlnbjogcmVsTWV0YS5pZCB9XTtcbiAgICB9XG5cbiAgICBpZiAocmVsT3B0cy50aHJvdWdoKSB7XG4gICAgICBmaWxsVGhyb3VnaFJlbGF0aW9ucyhyZWxPcHRzLnRocm91Z2goKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGE7XG59XG5cbmZ1bmN0aW9uIGZpbGxJbnZlcnNlU2lkZVJlbGF0aW9uczxFPihyZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiB2b2lkIHtcbiAgY29uc3QgcmVsRW50aXR5ID0gcmVsT3B0cy5lbnRpdHkoKTtcbiAgY29uc3QgcmVsTWV0YSA9IGdldE1ldGEocmVsRW50aXR5KTtcbiAgcmVsT3B0cy5tYXBwZWRCeSA9IGdldE1hcHBlZEJ5UmVsYXRpb25LZXkocmVsT3B0cyk7XG5cbiAgLy8gcmV2ZXJzaW5nIHJlZmVyZW5jZXMgaGVyZSBtYWtlcyB0aGUgU1FMIGdlbmVyYXRpb24gc2ltcGxlciAobm8gbmVlZCB0byBjaGVjayBmb3IgYG1hcHBlZEJ5YClcbiAgY29uc3QgeyBjYXJkaW5hbGl0eSwgcmVmZXJlbmNlcywgdGhyb3VnaCB9ID0gcmVsTWV0YS5yZWxhdGlvbnNbcmVsT3B0cy5tYXBwZWRCeV07XG4gIGlmIChjYXJkaW5hbGl0eSA9PT0gJzExJyB8fCBjYXJkaW5hbGl0eSA9PT0gJ20xJykge1xuICAgIHJlbE9wdHMucmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMubWFwKCh7IGxvY2FsLCBmb3JlaWduIH0pID0+ICh7XG4gICAgICBsb2NhbDogZm9yZWlnbixcbiAgICAgIGZvcmVpZ246IGxvY2FsLFxuICAgIH0pKTtcbiAgfSBlbHNlIHtcbiAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJlbE9wdHMudGhyb3VnaCA9IHRocm91Z2g7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlsbFRocm91Z2hSZWxhdGlvbnM8RT4oZW50aXR5OiBUeXBlPEU+KTogdm9pZCB7XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIG1ldGEucmVsYXRpb25zID0gZ2V0S2V5cyhtZXRhLmZpZWxkcykucmVkdWNlKChyZWxhdGlvbnMsIGtleSkgPT4ge1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlIH0gPSBtZXRhLmZpZWxkc1trZXldO1xuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgIGNvbnN0IHJlbEVudGl0eUdldHRlciA9IChyZWZlcmVuY2UgYXMgUmVmZXJlbmNlT3B0aW9ucykuZW50aXR5O1xuICAgICAgY29uc3QgcmVsRW50aXR5ID0gcmVsRW50aXR5R2V0dGVyKCk7XG4gICAgICBjb25zdCByZWxNZXRhID0gZW5zdXJlTWV0YShyZWxFbnRpdHkpO1xuICAgICAgY29uc3QgcmVsS2V5ID0ga2V5LnNsaWNlKDAsIC1yZWxNZXRhLmlkLmxlbmd0aCk7XG4gICAgICBjb25zdCByZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIGNhcmRpbmFsaXR5OiAnbTEnLFxuICAgICAgICBlbnRpdHk6IHJlbEVudGl0eUdldHRlcixcbiAgICAgICAgcmVmZXJlbmNlczogW3sgbG9jYWw6IGtleSwgZm9yZWlnbjogcmVsTWV0YS5pZCB9XSxcbiAgICAgIH07XG4gICAgICByZWxhdGlvbnNbcmVsS2V5XSA9IHJlbE9wdHM7XG4gICAgfVxuICAgIHJldHVybiByZWxhdGlvbnM7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFwcGVkQnlSZWxhdGlvbktleTxFPihyZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiBSZWxhdGlvbktleTxFPiB7XG4gIGlmICh0eXBlb2YgcmVsT3B0cy5tYXBwZWRCeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHJlbEVudGl0eSA9IHJlbE9wdHMuZW50aXR5KCk7XG4gICAgY29uc3QgcmVsTWV0YSA9IGVuc3VyZU1ldGEocmVsRW50aXR5KTtcbiAgICBjb25zdCBrZXlNYXAgPSBnZXRSZWxhdGlvbktleU1hcChyZWxNZXRhKTtcbiAgICByZXR1cm4gcmVsT3B0cy5tYXBwZWRCeShrZXlNYXApO1xuICB9XG4gIHJldHVybiByZWxPcHRzLm1hcHBlZEJ5O1xufVxuXG5mdW5jdGlvbiBnZXRSZWxhdGlvbktleU1hcDxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogUmVsYXRpb25LZXlNYXA8RT4ge1xuICByZXR1cm4gZ2V0S2V5cyhtZXRhLnJlbGF0aW9ucykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgIGFjY1trZXldID0ga2V5O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9IGFzIFJlbGF0aW9uS2V5TWFwPEU+KTtcbn1cblxuZnVuY3Rpb24gZ2V0SWRLZXk8RT4obWV0YTogRW50aXR5TWV0YTxFPik6IElkS2V5PEU+IHtcbiAgY29uc3QgaWQgPSBnZXRLZXlzKG1ldGEuZmllbGRzKS5maW5kKChrZXkpID0+IG1ldGEuZmllbGRzW2tleV0/LmlzSWQpO1xuICByZXR1cm4gaWQgYXMgSWRLZXk8RT47XG59XG5cbmZ1bmN0aW9uIGV4dGVuZE1ldGE8RT4odGFyZ2V0OiBFbnRpdHlNZXRhPEU+LCBzb3VyY2U6IEVudGl0eU1ldGE8RT4pOiB2b2lkIHtcbiAgY29uc3Qgc291cmNlRmllbGRzID0geyAuLi5zb3VyY2UuZmllbGRzIH07XG4gIGNvbnN0IHRhcmdldElkID0gZ2V0SWRLZXkodGFyZ2V0KTtcbiAgaWYgKHRhcmdldElkKSB7XG4gICAgY29uc3Qgc291cmNlSWQgPSBnZXRJZEtleShzb3VyY2UpO1xuICAgIGlmIChzb3VyY2VJZCkge1xuICAgICAgZGVsZXRlIHNvdXJjZUZpZWxkc1tzb3VyY2VJZF07XG4gICAgfVxuICB9XG4gIHRhcmdldC5maWVsZHMgPSB7IC4uLnNvdXJjZUZpZWxkcywgLi4udGFyZ2V0LmZpZWxkcyB9O1xuICB0YXJnZXQucmVsYXRpb25zID0geyAuLi5zb3VyY2UucmVsYXRpb25zLCAuLi50YXJnZXQucmVsYXRpb25zIH07XG59XG5cbmZ1bmN0aW9uIGluZmVyVHlwZTxFPihlbnRpdHk6IFR5cGU8RT4sIGtleTogc3RyaW5nKTogYW55IHtcbiAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjp0eXBlJywgZW50aXR5LnByb3RvdHlwZSwga2V5KTtcbn1cblxuZnVuY3Rpb24gaW5mZXJFbnRpdHlUeXBlPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcpOiBUeXBlPGFueT4ge1xuICBjb25zdCBpbmZlcnJlZFR5cGUgPSBpbmZlclR5cGUoZW50aXR5LCBrZXkpO1xuICBjb25zdCBpc1ZhbGlkVHlwZSA9IGlzVmFsaWRFbnRpdHlUeXBlKGluZmVycmVkVHlwZSk7XG4gIGlmICghaXNWYWxpZFR5cGUpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfS4ke2tleX0nIHR5cGUgd2FzIGF1dG8taW5mZXJyZWQgd2l0aCBpbnZhbGlkIHR5cGUgJyR7aW5mZXJyZWRUeXBlPy5uYW1lfSdgKTtcbiAgfVxuICByZXR1cm4gaW5mZXJyZWRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVudGl0eVR5cGUodHlwZTogYW55KTogdHlwZSBpcyBUeXBlPGFueT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZSAhPT0gQm9vbGVhbiAmJlxuICAgIHR5cGUgIT09IFN0cmluZyAmJlxuICAgIHR5cGUgIT09IE51bWJlciAmJlxuICAgIHR5cGUgIT09IEJpZ0ludCAmJlxuICAgIHR5cGUgIT09IERhdGUgJiZcbiAgICB0eXBlICE9PSBTeW1ib2wgJiZcbiAgICB0eXBlICE9PSBPYmplY3RcbiAgKTtcbn1cbiJdfQ==
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRpdHkvZGVjb3JhdG9yL2RlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNEJBQTBCO0FBQzFCLHlDQUEwRTtBQWUxRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDMUIsTUFBTSxPQUFPLEdBQUcsNEJBQTRCLENBQUM7QUFDN0MsTUFBTSxLQUFLLEdBQW9DLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7QUFFeEIsU0FBZ0IsV0FBVyxDQUFJLE1BQWUsRUFBRSxHQUFXLEVBQUUsT0FBcUIsRUFBRTtJQUNsRixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDZCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0tBQzFCO0lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7SUFDdEUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBUkQsa0NBUUM7QUFFRCxTQUFnQixRQUFRLENBQUksTUFBZSxFQUFFLEdBQVcsRUFBRSxJQUFrQjtJQUMxRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFD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dGVudCI6WyJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHsgaGFzS2V5cywgbG93ZXJGaXJzdCwgZ2V0S2V5cywgdXBwZXJGaXJzdCB9IGZyb20gJ0B1cWwvY29yZS91dGlsJztcbmltcG9ydCB7XG4gIFJlbGF0aW9uT3B0aW9ucyxcbiAgRmllbGRPcHRpb25zLFxuICBFbnRpdHlPcHRpb25zLFxuICBFbnRpdHlNZXRhLFxuICBUeXBlLFxuICBSZWxhdGlvbktleU1hcCxcbiAgUmVsYXRpb25LZXksXG4gIFJlbGF0aW9uQ2FyZGluYWxpdHksXG4gIEtleSxcbiAgRmllbGRLZXksXG4gIElkS2V5LFxufSBmcm9tICdAdXFsL2NvcmUvdHlwZSc7XG5cbmNvbnN0IGhvbGRlciA9IGdsb2JhbFRoaXM7XG5jb25zdCBtZXRhS2V5ID0gJ0B1cWwvY29yZS9lbnRpdHkvZGVjb3JhdG9yJztcbmNvbnN0IG1ldGFzOiBNYXA8VHlwZTxhbnk+LCBFbnRpdHlNZXRhPGFueT4+ID0gaG9sZGVyW21ldGFLZXldID8/IG5ldyBNYXAoKTtcbmhvbGRlclttZXRhS2V5XSA9IG1ldGFzO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRmllbGQ8RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZywgb3B0czogRmllbGRPcHRpb25zID0ge30pOiBFbnRpdHlNZXRhPEU+IHtcbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcbiAgaWYgKCFvcHRzLnR5cGUpIHtcbiAgICBjb25zdCB0eXBlID0gaW5mZXJUeXBlKGVudGl0eSwga2V5KTtcbiAgICBvcHRzID0geyAuLi5vcHRzLCB0eXBlIH07XG4gIH1cbiAgbWV0YS5maWVsZHNba2V5XSA9IHsgLi4ubWV0YS5maWVsZHNba2V5XSwgLi4ueyBuYW1lOiBrZXksIC4uLm9wdHMgfSB9O1xuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUlkPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcsIG9wdHM6IEZpZWxkT3B0aW9ucyk6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gZW5zdXJlTWV0YShlbnRpdHkpO1xuICBjb25zdCBpZCA9IGdldElkS2V5KG1ldGEpO1xuICBpZiAoaWQpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIGEgc2luZ2xlIGZpZWxkIGRlY29yYXRlZCB3aXRoIEBJZGApO1xuICB9XG4gIHJldHVybiBkZWZpbmVGaWVsZChlbnRpdHksIGtleSwgeyAuLi5vcHRzLCBpc0lkOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVsYXRpb248RT4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IHN0cmluZywgb3B0czogUmVsYXRpb25PcHRpb25zPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGlmICghb3B0cy5lbnRpdHkpIHtcbiAgICBjb25zdCBpbmZlcnJlZFR5cGUgPSBpbmZlckVudGl0eVR5cGUoZW50aXR5LCBrZXkpO1xuICAgIG9wdHMuZW50aXR5ID0gKCkgPT4gaW5mZXJyZWRUeXBlO1xuICB9XG4gIGNvbnN0IG1ldGEgPSBlbnN1cmVNZXRhKGVudGl0eSk7XG4gIG1ldGEucmVsYXRpb25zW2tleV0gPSB7IC4uLm1ldGEucmVsYXRpb25zW2tleV0sIC4uLm9wdHMgfTtcbiAgcmV0dXJuIG1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVFbnRpdHk8RT4oZW50aXR5OiBUeXBlPEU+LCBvcHRzOiBFbnRpdHlPcHRpb25zID0ge30pOiBFbnRpdHlNZXRhPEU+IHtcbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcblxuICBpZiAoIWhhc0tleXMobWV0YS5maWVsZHMpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKGAnJHtlbnRpdHkubmFtZX0nIG11c3QgaGF2ZSBmaWVsZHNgKTtcbiAgfVxuXG4gIGNvbnN0IG9uRGVsZXRlS2V5cyA9IGdldEtleXMobWV0YS5maWVsZHMpLmZpbHRlcigoa2V5KSA9PiBtZXRhLmZpZWxkc1trZXldLm9uRGVsZXRlKSBhcyBGaWVsZEtleTxFPltdO1xuXG4gIGlmIChvbkRlbGV0ZUtleXMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIHdpdGggJ29uRGVsZXRlJyBhcyBtYXhpbXVtYCk7XG4gIH1cblxuICBpZiAob3B0cy5zb2Z0RGVsZXRlKSB7XG4gICAgaWYgKCFvbkRlbGV0ZUtleXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfScgbXVzdCBoYXZlIG9uZSBmaWVsZCB3aXRoICdvbkRlbGV0ZScgdG8gZW5hYmxlICdzb2Z0RGVsZXRlJ2ApO1xuICAgIH1cbiAgICBtZXRhLnNvZnREZWxldGUgPSBvbkRlbGV0ZUtleXNbMF07XG4gIH1cblxuICBtZXRhLm5hbWUgPSBvcHRzLm5hbWUgPz8gZW50aXR5Lm5hbWU7XG4gIGxldCBwcm90bzogRnVuY3Rpb25Db25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihlbnRpdHkucHJvdG90eXBlKTtcblxuICB3aGlsZSAocHJvdG8uY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgIGNvbnN0IHBhcmVudE1ldGEgPSBlbnN1cmVNZXRhKHByb3RvLmNvbnN0cnVjdG9yIGFzIFR5cGU8RT4pO1xuICAgIGV4dGVuZE1ldGEobWV0YSwgcGFyZW50TWV0YSk7XG4gICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuICB9XG5cbiAgY29uc3QgaWQgPSBnZXRJZEtleShtZXRhKTtcbiAgaWYgKCFpZCkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBtdXN0IGhhdmUgb25lIGZpZWxkIGRlY29yYXRlZCB3aXRoIEBJZGApO1xuICB9XG4gIG1ldGEuaWQgPSBpZDtcblxuICByZXR1cm4gbWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudGl0aWVzKCk6IFR5cGU8YW55PltdIHtcbiAgcmV0dXJuIFsuLi5tZXRhcy5lbnRyaWVzKCldLnJlZHVjZSgoYWNjLCBba2V5LCB2YWxdKSA9PiB7XG4gICAgaWYgKHZhbC5pZCkge1xuICAgICAgYWNjLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVNZXRhPEU+KGVudGl0eTogVHlwZTxFPik6IEVudGl0eU1ldGE8RT4ge1xuICBsZXQgbWV0YSA9IG1ldGFzLmdldChlbnRpdHkpO1xuICBpZiAobWV0YSkge1xuICAgIHJldHVybiBtZXRhO1xuICB9XG4gIG1ldGEgPSB7IGVudGl0eSwgZmllbGRzOiB7fSwgcmVsYXRpb25zOiB7fSB9O1xuICBtZXRhcy5zZXQoZW50aXR5LCBtZXRhKTtcbiAgcmV0dXJuIG1ldGE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXRhPEU+KGVudGl0eTogVHlwZTxFPik6IEVudGl0eU1ldGE8RT4ge1xuICBjb25zdCBtZXRhID0gbWV0YXMuZ2V0KGVudGl0eSk7XG4gIGlmICghbWV0YSkge1xuICAgIHRocm93IFR5cGVFcnJvcihgJyR7ZW50aXR5Lm5hbWV9JyBpcyBub3QgYW4gZW50aXR5YCk7XG4gIH1cbiAgaWYgKG1ldGEucHJvY2Vzc2VkKSB7XG4gICAgcmV0dXJuIG1ldGE7XG4gIH1cbiAgbWV0YS5wcm9jZXNzZWQgPSB0cnVlO1xuICByZXR1cm4gZmlsbFJlbGF0aW9ucyhtZXRhKTtcbn1cblxuZnVuY3Rpb24gZmlsbFJlbGF0aW9uczxFPihtZXRhOiBFbnRpdHlNZXRhPEU+KTogRW50aXR5TWV0YTxFPiB7XG4gIGZvciAoY29uc3QgcmVsS2V5IGluIG1ldGEucmVsYXRpb25zKSB7XG4gICAgY29uc3QgcmVsT3B0cyA9IG1ldGEucmVsYXRpb25zW3JlbEtleSBhcyBSZWxhdGlvbktleTxFPl07XG5cbiAgICBpZiAocmVsT3B0cy5yZWZlcmVuY2VzKSB7XG4gICAgICAvLyByZWZlcmVuY2VzIHdlcmUgbWFudWFsbHkgc3BlY2lmaWVkXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVsT3B0cy5tYXBwZWRCeSkge1xuICAgICAgZmlsbEludmVyc2VTaWRlUmVsYXRpb25zKHJlbE9wdHMpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVsRW50aXR5ID0gcmVsT3B0cy5lbnRpdHkoKTtcbiAgICBjb25zdCByZWxNZXRhID0gZW5zdXJlTWV0YShyZWxFbnRpdHkpO1xuXG4gICAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtbScpIHtcbiAgICAgIGNvbnN0IGlkTmFtZSA9IG1ldGEuZmllbGRzW21ldGEuaWRdLm5hbWU7XG4gICAgICBjb25zdCByZWxJZE5hbWUgPSByZWxNZXRhLmZpZWxkc1tyZWxNZXRhLmlkXS5uYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gbG93ZXJGaXJzdChtZXRhLm5hbWUpICsgdXBwZXJGaXJzdChpZE5hbWUpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbG93ZXJGaXJzdChyZWxNZXRhLm5hbWUpICsgdXBwZXJGaXJzdChyZWxJZE5hbWUpO1xuICAgICAgcmVsT3B0cy5yZWZlcmVuY2VzID0gW1xuICAgICAgICB7IGxvY2FsOiBzb3VyY2UsIGZvcmVpZ246IG1ldGEuaWQgfSxcbiAgICAgICAgeyBsb2NhbDogdGFyZ2V0LCBmb3JlaWduOiByZWxNZXRhLmlkIH0sXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBbeyBsb2NhbDogYCR7cmVsS2V5fUlkYCwgZm9yZWlnbjogcmVsTWV0YS5pZCB9XTtcbiAgICB9XG5cbiAgICBpZiAocmVsT3B0cy50aHJvdWdoKSB7XG4gICAgICBmaWxsVGhyb3VnaFJlbGF0aW9ucyhyZWxPcHRzLnRocm91Z2goKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGE7XG59XG5cbmZ1bmN0aW9uIGZpbGxJbnZlcnNlU2lkZVJlbGF0aW9uczxFPihyZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiB2b2lkIHtcbiAgY29uc3QgcmVsRW50aXR5ID0gcmVsT3B0cy5lbnRpdHkoKTtcbiAgY29uc3QgcmVsTWV0YSA9IGdldE1ldGEocmVsRW50aXR5KTtcbiAgcmVsT3B0cy5tYXBwZWRCeSA9IGdldE1hcHBlZEJ5UmVsYXRpb25LZXkocmVsT3B0cyk7XG5cbiAgaWYgKHJlbE1ldGEuZmllbGRzW3JlbE9wdHMubWFwcGVkQnkgYXMgRmllbGRLZXk8RT5dKSB7XG4gICAgcmVsT3B0cy5yZWZlcmVuY2VzID0gW3sgbG9jYWw6IHJlbE1ldGEuaWQsIGZvcmVpZ246IHJlbE9wdHMubWFwcGVkQnkgfV07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWFwcGVkQnlSZWxhdGlvbiA9IHJlbE1ldGEucmVsYXRpb25zW3JlbE9wdHMubWFwcGVkQnkgYXMgUmVsYXRpb25LZXk8RT5dO1xuXG4gIGlmIChyZWxPcHRzLmNhcmRpbmFsaXR5ID09PSAnbTEnIHx8IHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICdtbScpIHtcbiAgICByZWxPcHRzLnJlZmVyZW5jZXMgPSBtYXBwZWRCeVJlbGF0aW9uLnJlZmVyZW5jZXMuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgcmVsT3B0cy50aHJvdWdoID0gbWFwcGVkQnlSZWxhdGlvbi50aHJvdWdoO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJlbE9wdHMucmVmZXJlbmNlcyA9IG1hcHBlZEJ5UmVsYXRpb24ucmVmZXJlbmNlcy5tYXAoKHsgbG9jYWwsIGZvcmVpZ24gfSkgPT4gKHtcbiAgICBsb2NhbDogZm9yZWlnbixcbiAgICBmb3JlaWduOiBsb2NhbCxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBmaWxsVGhyb3VnaFJlbGF0aW9uczxFPihlbnRpdHk6IFR5cGU8RT4pOiB2b2lkIHtcbiAgY29uc3QgbWV0YSA9IGVuc3VyZU1ldGEoZW50aXR5KTtcbiAgbWV0YS5yZWxhdGlvbnMgPSBnZXRLZXlzKG1ldGEuZmllbGRzKS5yZWR1Y2UoKHJlbGF0aW9ucywga2V5KSA9PiB7XG4gICAgY29uc3QgeyByZWZlcmVuY2UgfSA9IG1ldGEuZmllbGRzW2tleSBhcyBGaWVsZEtleTxFPl07XG4gICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgY29uc3QgcmVsRW50aXR5ID0gcmVmZXJlbmNlKCk7XG4gICAgICBjb25zdCByZWxNZXRhID0gZW5zdXJlTWV0YShyZWxFbnRpdHkpO1xuICAgICAgY29uc3QgcmVsS2V5ID0ga2V5LnNsaWNlKDAsIC1yZWxNZXRhLmlkLmxlbmd0aCk7XG4gICAgICBjb25zdCByZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnMgPSB7XG4gICAgICAgIGVudGl0eTogcmVmZXJlbmNlLFxuICAgICAgICBjYXJkaW5hbGl0eTogJ20xJyxcbiAgICAgICAgcmVmZXJlbmNlczogW3sgbG9jYWw6IGtleSwgZm9yZWlnbjogcmVsTWV0YS5pZCB9XSxcbiAgICAgIH07XG4gICAgICByZWxhdGlvbnNbcmVsS2V5XSA9IHJlbE9wdHM7XG4gICAgfVxuICAgIHJldHVybiByZWxhdGlvbnM7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFwcGVkQnlSZWxhdGlvbktleTxFPihyZWxPcHRzOiBSZWxhdGlvbk9wdGlvbnM8RT4pOiBLZXk8RT4ge1xuICBpZiAodHlwZW9mIHJlbE9wdHMubWFwcGVkQnkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByZWxFbnRpdHkgPSByZWxPcHRzLmVudGl0eSgpO1xuICAgIGNvbnN0IHJlbE1ldGEgPSBlbnN1cmVNZXRhKHJlbEVudGl0eSk7XG4gICAgY29uc3Qga2V5TWFwID0gZ2V0UmVsYXRpb25LZXlNYXAocmVsTWV0YSk7XG4gICAgcmV0dXJuIHJlbE9wdHMubWFwcGVkQnkoa2V5TWFwKTtcbiAgfVxuICByZXR1cm4gcmVsT3B0cy5tYXBwZWRCeTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVsYXRpb25LZXlNYXA8RT4obWV0YTogRW50aXR5TWV0YTxFPik6IFJlbGF0aW9uS2V5TWFwPEU+IHtcbiAgcmV0dXJuIGdldEtleXMobWV0YS5maWVsZHMpXG4gICAgLmNvbmNhdChnZXRLZXlzKG1ldGEucmVsYXRpb25zKSlcbiAgICAucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgYWNjW2tleV0gPSBrZXk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlbGF0aW9uS2V5TWFwPEU+KTtcbn1cblxuZnVuY3Rpb24gZ2V0SWRLZXk8RT4obWV0YTogRW50aXR5TWV0YTxFPik6IElkS2V5PEU+IHtcbiAgY29uc3QgaWQgPSBnZXRLZXlzKG1ldGEuZmllbGRzKS5maW5kKChrZXkpID0+IG1ldGEuZmllbGRzW2tleV0/LmlzSWQpO1xuICByZXR1cm4gaWQgYXMgSWRLZXk8RT47XG59XG5cbmZ1bmN0aW9uIGV4dGVuZE1ldGE8RT4odGFyZ2V0OiBFbnRpdHlNZXRhPEU+LCBzb3VyY2U6IEVudGl0eU1ldGE8RT4pOiB2b2lkIHtcbiAgY29uc3Qgc291cmNlRmllbGRzID0geyAuLi5zb3VyY2UuZmllbGRzIH07XG4gIGNvbnN0IHRhcmdldElkID0gZ2V0SWRLZXkodGFyZ2V0KTtcbiAgaWYgKHRhcmdldElkKSB7XG4gICAgY29uc3Qgc291cmNlSWQgPSBnZXRJZEtleShzb3VyY2UpO1xuICAgIGlmIChzb3VyY2VJZCkge1xuICAgICAgZGVsZXRlIHNvdXJjZUZpZWxkc1tzb3VyY2VJZF07XG4gICAgfVxuICB9XG4gIHRhcmdldC5maWVsZHMgPSB7IC4uLnNvdXJjZUZpZWxkcywgLi4udGFyZ2V0LmZpZWxkcyB9O1xuICB0YXJnZXQucmVsYXRpb25zID0geyAuLi5zb3VyY2UucmVsYXRpb25zLCAuLi50YXJnZXQucmVsYXRpb25zIH07XG59XG5cbmZ1bmN0aW9uIGluZmVyVHlwZTxFPihlbnRpdHk6IFR5cGU8RT4sIGtleTogc3RyaW5nKTogYW55IHtcbiAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjp0eXBlJywgZW50aXR5LnByb3RvdHlwZSwga2V5KTtcbn1cblxuZnVuY3Rpb24gaW5mZXJFbnRpdHlUeXBlPEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBzdHJpbmcpOiBUeXBlPGFueT4ge1xuICBjb25zdCBpbmZlcnJlZFR5cGUgPSBpbmZlclR5cGUoZW50aXR5LCBrZXkpO1xuICBjb25zdCBpc1ZhbGlkVHlwZSA9IGlzVmFsaWRFbnRpdHlUeXBlKGluZmVycmVkVHlwZSk7XG4gIGlmICghaXNWYWxpZFR5cGUpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoYCcke2VudGl0eS5uYW1lfS4ke2tleX0nIHR5cGUgd2FzIGF1dG8taW5mZXJyZWQgd2l0aCBpbnZhbGlkIHR5cGUgJyR7aW5mZXJyZWRUeXBlPy5uYW1lfSdgKTtcbiAgfVxuICByZXR1cm4gaW5mZXJyZWRUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVudGl0eVR5cGUodHlwZTogYW55KTogdHlwZSBpcyBUeXBlPGFueT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZSAhPT0gQm9vbGVhbiAmJlxuICAgIHR5cGUgIT09IFN0cmluZyAmJlxuICAgIHR5cGUgIT09IE51bWJlciAmJlxuICAgIHR5cGUgIT09IEJpZ0ludCAmJlxuICAgIHR5cGUgIT09IERhdGUgJiZcbiAgICB0eXBlICE9PSBTeW1ib2wgJiZcbiAgICB0eXBlICE9PSBPYmplY3RcbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};