@decaf-ts/core 0.2.0 → 0.3.0

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 (83) hide show
  1. package/dist/core.bundle.min.js +1 -1
  2. package/dist/esm/core.bundle.min.esm.js +1 -1
  3. package/lib/esm/identity/decorators.d.ts +2 -1
  4. package/lib/esm/identity/decorators.js +2 -2
  5. package/lib/esm/identity/index.d.ts +1 -0
  6. package/lib/esm/identity/index.js +2 -1
  7. package/lib/esm/identity/utils.d.ts +2 -2
  8. package/lib/esm/identity/utils.js +3 -3
  9. package/lib/esm/index.d.ts +1 -1
  10. package/lib/esm/index.js +2 -2
  11. package/lib/esm/interfaces/index.d.ts +0 -1
  12. package/lib/esm/interfaces/index.js +1 -2
  13. package/lib/esm/model/BaseModel.d.ts +2 -2
  14. package/lib/esm/model/BaseModel.js +1 -3
  15. package/lib/esm/model/construction.d.ts +15 -0
  16. package/lib/esm/model/construction.js +201 -0
  17. package/lib/esm/model/decorators.d.ts +47 -3
  18. package/lib/esm/model/decorators.js +87 -14
  19. package/lib/esm/model/types.d.ts +6 -0
  20. package/lib/esm/model/types.js +3 -0
  21. package/lib/esm/persistence/Adapter.d.ts +7 -4
  22. package/lib/esm/persistence/Adapter.js +35 -7
  23. package/lib/esm/persistence/Sequence.d.ts +22 -0
  24. package/lib/esm/persistence/Sequence.js +11 -0
  25. package/lib/esm/persistence/constants.d.ts +5 -2
  26. package/lib/esm/persistence/constants.js +6 -2
  27. package/lib/esm/persistence/index.d.ts +1 -1
  28. package/lib/esm/persistence/index.js +2 -2
  29. package/lib/esm/query/Statement.js +3 -8
  30. package/lib/esm/repository/Repository.d.ts +6 -3
  31. package/lib/esm/repository/Repository.js +82 -47
  32. package/lib/esm/repository/decorators.js +2 -6
  33. package/lib/esm/repository/injectables.js +3 -1
  34. package/lib/esm/repository/types.d.ts +3 -0
  35. package/lib/esm/repository/types.js +1 -1
  36. package/lib/esm/repository/utils.d.ts +0 -3
  37. package/lib/esm/repository/utils.js +4 -32
  38. package/lib/esm/validators/ClauseSequenceValidator.js +4 -3
  39. package/lib/identity/decorators.cjs +2 -2
  40. package/lib/identity/decorators.d.ts +2 -1
  41. package/lib/identity/index.cjs +2 -1
  42. package/lib/identity/index.d.ts +1 -0
  43. package/lib/identity/utils.cjs +3 -3
  44. package/lib/identity/utils.d.ts +2 -2
  45. package/lib/index.cjs +2 -2
  46. package/lib/index.d.ts +1 -1
  47. package/lib/interfaces/index.cjs +1 -2
  48. package/lib/interfaces/index.d.ts +0 -1
  49. package/lib/model/BaseModel.cjs +1 -3
  50. package/lib/model/BaseModel.d.ts +2 -2
  51. package/lib/model/construction.cjs +214 -0
  52. package/lib/model/construction.d.ts +15 -0
  53. package/lib/model/decorators.cjs +91 -15
  54. package/lib/model/decorators.d.ts +47 -3
  55. package/lib/model/types.cjs +4 -0
  56. package/lib/model/types.d.ts +6 -0
  57. package/lib/persistence/Adapter.cjs +33 -5
  58. package/lib/persistence/Adapter.d.ts +7 -4
  59. package/lib/persistence/Sequence.cjs +15 -0
  60. package/lib/persistence/Sequence.d.ts +22 -0
  61. package/lib/persistence/constants.cjs +6 -2
  62. package/lib/persistence/constants.d.ts +5 -2
  63. package/lib/persistence/index.cjs +2 -2
  64. package/lib/persistence/index.d.ts +1 -1
  65. package/lib/query/Statement.cjs +3 -8
  66. package/lib/repository/Repository.cjs +81 -46
  67. package/lib/repository/Repository.d.ts +6 -3
  68. package/lib/repository/decorators.cjs +2 -6
  69. package/lib/repository/injectables.cjs +3 -1
  70. package/lib/repository/types.cjs +1 -1
  71. package/lib/repository/types.d.ts +3 -0
  72. package/lib/repository/utils.cjs +3 -33
  73. package/lib/repository/utils.d.ts +0 -3
  74. package/lib/validators/ClauseSequenceValidator.cjs +8 -7
  75. package/package.json +1 -1
  76. package/lib/esm/interfaces/Sequence.d.ts +0 -17
  77. package/lib/esm/interfaces/Sequence.js +0 -10
  78. package/lib/esm/persistence/utils.d.ts +0 -3
  79. package/lib/esm/persistence/utils.js +0 -12
  80. package/lib/interfaces/Sequence.cjs +0 -11
  81. package/lib/interfaces/Sequence.d.ts +0 -17
  82. package/lib/persistence/utils.cjs +0 -16
  83. package/lib/persistence/utils.d.ts +0 -3
@@ -4,11 +4,12 @@ exports.Repository = void 0;
4
4
  const db_decorators_1 = require("@decaf-ts/db-decorators");
5
5
  const errors_1 = require("./errors.cjs");
6
6
  const Adapter_1 = require("../persistence/Adapter.cjs");
7
- const utils_1 = require("./utils.cjs");
7
+ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
8
8
  const constants_1 = require("../persistence/constants.cjs");
9
9
  const query_1 = require("../query/index.cjs");
10
10
  const constants_2 = require("./constants.cjs");
11
- const utils_2 = require("../identity/utils.cjs");
11
+ const reflection_1 = require("@decaf-ts/reflection");
12
+ const Sequence_1 = require("../persistence/Sequence.cjs");
12
13
  class Repository extends db_decorators_1.Repository {
13
14
  static { this._cache = {}; }
14
15
  get adapter() {
@@ -18,22 +19,19 @@ class Repository extends db_decorators_1.Repository {
18
19
  }
19
20
  get tableName() {
20
21
  if (!this._tableName)
21
- this._tableName = (0, utils_1.getTableName)(this.class);
22
+ this._tableName = Repository.table(this.class);
22
23
  return this._tableName;
23
24
  }
24
- get pk() {
25
- if (!this._pk)
26
- this._pk = (0, db_decorators_1.findPrimaryKey)(new this.class()).id;
27
- return this._pk;
28
- }
29
25
  constructor(adapter, clazz) {
30
26
  super(clazz);
31
27
  this.observers = [];
32
28
  if (adapter)
33
29
  this._adapter = adapter;
30
+ if (clazz)
31
+ Repository.register(clazz, this);
34
32
  [this.createAll, this.readAll, this.updateAll, this.deleteAll].forEach((m) => {
35
33
  const name = m.name;
36
- (0, db_decorators_1.wrapMethod)(this, this[name + "Prefix"], m, this[name + "Suffix"]);
34
+ (0, db_decorators_1.wrapMethodWithContext)(this, this[name + "Prefix"], m, this[name + "Suffix"]);
37
35
  });
38
36
  }
39
37
  async create(model, ...args) {
@@ -52,20 +50,20 @@ class Repository extends db_decorators_1.Repository {
52
50
  return records.map((r, i) => this.adapter.revert(r, this.class, this.pk, ids[i]));
53
51
  }
54
52
  async createAllPrefix(models, ...args) {
53
+ const contextArgs = (0, db_decorators_1.argsWithContext)(args);
55
54
  if (!models.length)
56
- return [models, ...args];
55
+ return [models, ...contextArgs.args];
57
56
  const opts = Repository.getSequenceOptions(models[0]);
58
57
  let ids = [];
59
58
  if (opts.type) {
60
59
  if (!opts.name)
61
- opts.name = (0, utils_2.sequenceNameForModel)(models[0], "pk");
60
+ opts.name = Sequence_1.Sequence.pk(models[0]);
62
61
  ids = await (await this.adapter.Sequence(opts)).range(models.length);
63
62
  }
64
- const pk = (0, db_decorators_1.findPrimaryKey)(models[0]).id;
65
63
  models = await Promise.all(models.map(async (m, i) => {
66
64
  m = new this.class(m);
67
- m[pk] = ids[i];
68
- await (0, db_decorators_1.enforceDBDecorators)(this, m, db_decorators_1.OperationKeys.CREATE, db_decorators_1.OperationKeys.ON);
65
+ m[this.pk] = ids[i];
66
+ await (0, db_decorators_1.enforceDBDecorators)(this, contextArgs.context, m, db_decorators_1.OperationKeys.CREATE, db_decorators_1.OperationKeys.ON);
69
67
  return m;
70
68
  }));
71
69
  const errors = models
@@ -80,7 +78,7 @@ class Repository extends db_decorators_1.Repository {
80
78
  }, undefined);
81
79
  if (errors)
82
80
  throw new db_decorators_1.ValidationError(errors);
83
- return [models, ...args];
81
+ return [models, ...contextArgs.args];
84
82
  }
85
83
  async read(id, ...args) {
86
84
  const m = await this.adapter.read(this.tableName, id, ...args);
@@ -88,15 +86,18 @@ class Repository extends db_decorators_1.Repository {
88
86
  }
89
87
  async update(model, ...args) {
90
88
  // eslint-disable-next-line prefer-const
91
- let { record, id } = await this.adapter.prepare(model, this.pk);
89
+ let { record, id } = this.adapter.prepare(model, this.pk);
92
90
  record = await this.adapter.update(this.tableName, id, record, ...args);
93
91
  return this.adapter.revert(record, this.class, this.pk, id);
94
92
  }
95
93
  async updatePrefix(model, ...args) {
96
- const pk = (0, db_decorators_1.findModelId)(model);
97
- const oldModel = await this.read(pk);
94
+ const contextArgs = (0, db_decorators_1.argsWithContext)(args);
95
+ const pk = model[this.pk];
96
+ if (!pk)
97
+ throw new db_decorators_1.InternalError(`No value for the Id is defined under the property ${this.pk}`);
98
+ const oldModel = await this.read(pk, ...contextArgs.args);
98
99
  model = this.merge(oldModel, model);
99
- await (0, db_decorators_1.enforceDBDecorators)(this, model, db_decorators_1.OperationKeys.UPDATE, db_decorators_1.OperationKeys.ON, oldModel);
100
+ await (0, db_decorators_1.enforceDBDecorators)(this, contextArgs.context, model, db_decorators_1.OperationKeys.UPDATE, db_decorators_1.OperationKeys.ON, oldModel);
100
101
  const errors = model.hasErrors(oldModel);
101
102
  if (errors)
102
103
  throw new db_decorators_1.ValidationError(errors.toString());
@@ -104,11 +105,17 @@ class Repository extends db_decorators_1.Repository {
104
105
  if (!Repository.getMetadata(model))
105
106
  Repository.setMetadata(model, Repository.getMetadata(oldModel));
106
107
  }
107
- return [model, ...args];
108
+ return [model, ...contextArgs.args];
108
109
  }
109
110
  async updateAllPrefix(models, ...args) {
110
- const ids = models.map((m) => (0, db_decorators_1.findModelId)(m));
111
- const oldModels = await this.readAll(ids);
111
+ const contextArgs = (0, db_decorators_1.argsWithContext)(args);
112
+ const ids = models.map((m) => {
113
+ const id = m[this.pk];
114
+ if (!id)
115
+ throw new db_decorators_1.InternalError("missing id on update operation");
116
+ return id;
117
+ });
118
+ const oldModels = await this.readAll(ids, ...contextArgs.args);
112
119
  models = models.map((m, i) => {
113
120
  m = this.merge(oldModels[i], m);
114
121
  if (Repository.getMetadata(oldModels[i])) {
@@ -117,7 +124,7 @@ class Repository extends db_decorators_1.Repository {
117
124
  }
118
125
  return m;
119
126
  });
120
- await Promise.all(models.map((m, i) => (0, db_decorators_1.enforceDBDecorators)(this, m, db_decorators_1.OperationKeys.UPDATE, db_decorators_1.OperationKeys.ON, oldModels[i])));
127
+ await Promise.all(models.map((m, i) => (0, db_decorators_1.enforceDBDecorators)(this, contextArgs.context, m, db_decorators_1.OperationKeys.UPDATE, db_decorators_1.OperationKeys.ON, oldModels[i])));
121
128
  const errors = models
122
129
  .map((m, i) => m.hasErrors(oldModels[i], m))
123
130
  .reduce((accum, e, i) => {
@@ -130,7 +137,7 @@ class Repository extends db_decorators_1.Repository {
130
137
  }, undefined);
131
138
  if (errors)
132
139
  throw new db_decorators_1.ValidationError(errors);
133
- return [models, ...args];
140
+ return [models, ...contextArgs.args];
134
141
  }
135
142
  async delete(id, ...args) {
136
143
  const m = await this.adapter.delete(this.tableName, id, ...args);
@@ -148,6 +155,9 @@ class Repository extends db_decorators_1.Repository {
148
155
  query.offset(skip);
149
156
  return query.execute();
150
157
  }
158
+ async timestamp() {
159
+ return this.adapter.timestamp();
160
+ }
151
161
  /**
152
162
  * @summary Registers an {@link Observer}
153
163
  * @param {Observer} observer
@@ -186,36 +196,33 @@ class Repository extends db_decorators_1.Repository {
186
196
  });
187
197
  }
188
198
  static forModel(model) {
189
- const repoName = Reflect.getMetadata(Repository.key(db_decorators_1.DBKeys.REPOSITORY), model);
190
- let flavour = Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER), model);
191
- let adapter = flavour
192
- ? Adapter_1.Adapter.get(flavour)
193
- : undefined;
194
- let repoConstructor;
195
- if (!repoName) {
196
- if (!adapter)
197
- throw new db_decorators_1.InternalError(`Cannot boot a standard repository without an adapter definition. Did you @use on the model ${model.name}`);
198
- repoConstructor = Repository;
199
+ let repo;
200
+ try {
201
+ repo = this.get(model);
202
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
199
203
  }
200
- else {
201
- repoConstructor = this.get(repoName);
202
- flavour =
203
- flavour ||
204
- Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER), repoConstructor);
205
- if (!flavour)
206
- throw new db_decorators_1.InternalError(`No registered persistence adapter found for model ${model.name}`);
207
- adapter = Adapter_1.Adapter.get(flavour);
204
+ catch (e) {
205
+ repo = Repository;
208
206
  }
207
+ if (repo instanceof Repository)
208
+ return repo;
209
+ const flavour = Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER), model) ||
210
+ Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER), repo);
211
+ const adapter = flavour
212
+ ? Adapter_1.Adapter.get(flavour)
213
+ : undefined;
209
214
  if (!adapter)
210
215
  throw new db_decorators_1.InternalError(`No registered persistence adapter found flavour ${flavour}`);
211
- return new repoConstructor(adapter, model);
216
+ return new repo(adapter, model);
212
217
  }
213
- static get(name) {
218
+ static get(model) {
219
+ const name = this.table(model);
214
220
  if (name in this._cache)
215
221
  return this._cache[name];
216
222
  throw new db_decorators_1.InternalError(`Could not find repository registered under ${name}`);
217
223
  }
218
- static register(name, repo) {
224
+ static register(model, repo) {
225
+ const name = this.table(model);
219
226
  if (name in this._cache)
220
227
  throw new db_decorators_1.InternalError(`${name} already registered as a repository`);
221
228
  this._cache[name] = repo;
@@ -244,7 +251,35 @@ class Repository extends db_decorators_1.Repository {
244
251
  throw new db_decorators_1.InternalError("No sequence options defined for model. did you use the @pk decorator?");
245
252
  return metadata;
246
253
  }
254
+ static indexes(model) {
255
+ const indexDecorators = (0, reflection_1.getAllPropertyDecorators)(model instanceof decorator_validation_1.Model ? model : new model(), db_decorators_1.DBKeys.REFLECT);
256
+ return Object.entries(indexDecorators || {}).reduce((accum, [k, val]) => {
257
+ const decs = val.filter((v) => v.key.startsWith(constants_1.PersistenceKeys.INDEX));
258
+ if (decs && decs.length) {
259
+ for (const dec of decs) {
260
+ const { key, props } = dec;
261
+ accum[k] = accum[k] || {};
262
+ accum[k][key] = props;
263
+ }
264
+ }
265
+ return accum;
266
+ }, {});
267
+ }
268
+ static table(model) {
269
+ const metadata = Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.TABLE), model instanceof decorator_validation_1.Model ? model.constructor : model);
270
+ if (metadata) {
271
+ return metadata;
272
+ }
273
+ if (model instanceof decorator_validation_1.Model) {
274
+ return model.constructor.name;
275
+ }
276
+ return model.name;
277
+ }
278
+ static column(model, attribute) {
279
+ const metadata = Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.COLUMN), model, attribute);
280
+ return metadata ? metadata : attribute;
281
+ }
247
282
  }
248
283
  exports.Repository = Repository;
249
284
 
250
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L1JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBVWlDO0FBQ2pDLHFDQUF5QztBQUd6QyxvREFBaUQ7QUFFakQsbUNBQXVDO0FBQ3ZDLHdEQUEyRDtBQUMzRCxvQ0FNa0I7QUFDbEIsMkNBQTZDO0FBRTdDLDZDQUF5RDtBQUd6RCxNQUFhLFVBQ1gsU0FBUSwwQkFBTTthQUdDLFdBQU0sR0FDbkIsRUFEbUIsQUFDakIsQ0FBQztJQVFMLElBQUksT0FBTztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNoQixNQUFNLElBQUksNkJBQWEsQ0FDckIsc0dBQXNHLENBQ3ZHLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQWMsU0FBUztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUEsb0JBQVksRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFjLEVBQUU7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7WUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUEsOEJBQWMsRUFBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVksT0FBeUIsRUFBRSxLQUFzQjtRQUMzRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUF6QlAsY0FBUyxHQUFlLEVBQUUsQ0FBQztRQTBCakMsSUFBSSxPQUFPO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDckMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFD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LE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FDaEQsS0FBSyxFQUNMLDJCQUFlLENBQUMsUUFBUSxDQUN6QixDQUFDO1FBQ0YsSUFBSSxVQUFVO1lBQUUsT0FBUSxLQUFhLENBQUMsMkJBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFrQixLQUFRO1FBQ2pELE1BQU0sRUFBRSxHQUFHLElBQUEsOEJBQWMsRUFBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLHNCQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxRQUFRO1lBQ1gsTUFBTSxJQUFJLDZCQUFhLENBQ3JCLHVFQUF1RSxDQUN4RSxDQUFDO1FBQ0osT0FBTyxRQUEyQixDQUFDO0lBQ3JDLENBQUM7O0FBcFZILGdDQXFWQyIsImZpbGUiOiJyZXBvc2l0b3J5L1JlcG9zaXRvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEQktleXMsXG4gIGVuZm9yY2VEQkRlY29yYXRvcnMsXG4gIGZpbmRNb2RlbElkLFxuICBmaW5kUHJpbWFyeUtleSxcbiAgSW50ZXJuYWxFcnJvcixcbiAgT3BlcmF0aW9uS2V5cyxcbiAgUmVwb3NpdG9yeSBhcyBSZXAsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgd3JhcE1ldGhvZCxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBPYnNlcnZlckVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvT2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9PYnNlcnZlclwiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBnZXRUYWJsZU5hbWUgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgQ29uZGl0aW9uLFxuICBPcmRlckJ5U2VsZWN0b3IsXG4gIFF1ZXJ5LFxuICBTZWxlY3RTZWxlY3RvcixcbiAgV2hlcmVPcHRpb24sXG59IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgT3JkZXJEaXJlY3Rpb24gfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBzZXF1ZW5jZU5hbWVGb3JNb2RlbCB9IGZyb20gXCIuLi9pZGVudGl0eS91dGlsc1wiO1xuaW1wb3J0IHsgUXVlcmlhYmxlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvUXVlcmlhYmxlXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXBvc2l0b3J5PE0gZXh0ZW5kcyBNb2RlbCwgUSA9IGFueT5cbiAgZXh0ZW5kcyBSZXA8TT5cbiAgaW1wbGVtZW50cyBPYnNlcnZhYmxlLCBRdWVyaWFibGVcbntcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBSZWNvcmQ8c3RyaW5nLCBDb25zdHJ1Y3RvcjxSZXBvc2l0b3J5PE1vZGVsLCBhbnk+Pj4gPVxuICAgIHt9O1xuXG4gIHByaXZhdGUgb2JzZXJ2ZXJzOiBPYnNlcnZlcltdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWRhcHRlciE6IEFkYXB0ZXI8YW55LCBRPjtcbiAgcHJpdmF0ZSBfdGFibGVOYW1lITogc3RyaW5nO1xuICBwcml2YXRlIF9wayE6IHN0cmluZztcblxuICBnZXQgYWRhcHRlcigpIHtcbiAgICBpZiAoIXRoaXMuX2FkYXB0ZXIpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYE5vIGFkYXB0ZXIgZm91bmQgZm9yIHRoaXMgcmVwb3NpdG9yeS4gZGlkIHlvdSB1c2UgdGhlIEB1c2VzIGRlY29yYXRvciBvciBwYXNzIGl0IGluIHRoZSBjb25zdHJ1Y3Rvcj9gXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLl9hZGFwdGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0YWJsZU5hbWUoKSB7XG4gICAgaWYgKCF0aGlzLl90YWJsZU5hbWUpIHRoaXMuX3RhYmxlTmFtZSA9IGdldFRhYmxlTmFtZSh0aGlzLmNsYXNzKTtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVOYW1lO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBwaygpIHtcbiAgICBpZiAoIXRoaXMuX3BrKSB0aGlzLl9wayA9IGZpbmRQcmltYXJ5S2V5KG5ldyB0aGlzLmNsYXNzKCkpLmlkO1xuICAgIHJldHVybiB0aGlzLl9waztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXI/OiBBZGFwdGVyPGFueSwgUT4sIGNsYXp6PzogQ29uc3RydWN0b3I8TT4pIHtcbiAgICBzdXBlcihjbGF6eik7XG4gICAgaWYgKGFkYXB0ZXIpIHRoaXMuX2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIFt0aGlzLmNyZWF0ZUFsbCwgdGhpcy5yZWFkQWxsLCB0aGlzLnVwZGF0ZUFsbCwgdGhpcy5kZWxldGVBbGxdLmZvckVhY2goXG4gICAgICAobSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gbS5uYW1lO1xuICAgICAgICB3cmFwTWV0aG9kKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKHRoaXMgYXMgYW55KVtuYW1lICsgXCJQcmVmaXhcIl0sXG4gICAgICAgICAgbSxcbiAgICAgICAgICAodGhpcyBhcyBhbnkpW25hbWUgKyBcIlN1ZmZpeFwiXVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUobW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IHJlY29yZCwgaWQgfSA9IHRoaXMuYWRhcHRlci5wcmVwYXJlKG1vZGVsLCB0aGlzLnBrKTtcbiAgICByZWNvcmQgPSBhd2FpdCB0aGlzLmFkYXB0ZXIuY3JlYXRlKHRoaXMudGFibGVOYW1lLCBpZCwgcmVjb3JkLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnJldmVydChyZWNvcmQsIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFsbChtb2RlbHM6IE1bXSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE1bXT4ge1xuICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIG1vZGVscztcbiAgICBjb25zdCBwcmVwYXJlZCA9IG1vZGVscy5tYXAoKG0pID0+IHRoaXMuYWRhcHRlci5wcmVwYXJlKG0sIHRoaXMucGspKTtcbiAgICBjb25zdCBpZHMgPSBwcmVwYXJlZC5tYXAoKHApID0+IHAuaWQpO1xuICAgIGxldCByZWNvcmRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLnJlY29yZCk7XG4gICAgcmVjb3JkcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGVBbGwoXG4gICAgICB0aGlzLnRhYmxlTmFtZSxcbiAgICAgIGlkcyBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICAgICAgcmVjb3JkcyxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIHJldHVybiByZWNvcmRzLm1hcCgociwgaSkgPT5cbiAgICAgIHRoaXMuYWRhcHRlci5yZXZlcnQociwgdGhpcy5jbGFzcywgdGhpcy5waywgaWRzW2ldIGFzIHN0cmluZyB8IG51bWJlcilcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZUFsbFByZWZpeChtb2RlbHM6IE1bXSwgLi4uYXJnczogYW55W10pIHtcbiAgICBpZiAoIW1vZGVscy5sZW5ndGgpIHJldHVybiBbbW9kZWxzLCAuLi5hcmdzXTtcbiAgICBjb25zdCBvcHRzID0gUmVwb3NpdG9yeS5nZXRTZXF1ZW5jZU9wdGlvbnMobW9kZWxzWzBdKTtcbiAgICBsZXQgaWRzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50IHwgdW5kZWZpbmVkKVtdID0gW107XG4gICAgaWYgKG9wdHMudHlwZSkge1xuICAgICAgaWYgKCFvcHRzLm5hbWUpIG9wdHMubmFtZSA9IHNlcXVlbmNlTmFtZUZvck1vZGVsKG1vZGVsc1swXSwgXCJwa1wiKTtcbiAgICAgIGlkcyA9IGF3YWl0IChhd2FpdCB0aGlzLmFkYXB0ZXIuU2VxdWVuY2Uob3B0cykpLnJhbmdlKG1vZGVscy5sZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCBwayA9IGZpbmRQcmltYXJ5S2V5KG1vZGVsc1swXSkuaWQ7XG5cbiAgICBtb2RlbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1vZGVscy5tYXAoYXN5bmMgKG0sIGkpID0+IHtcbiAgICAgICAgbSA9IG5ldyB0aGlzLmNsYXNzKG0pO1xuICAgICAgICAobSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwa10gPSBpZHNbaV07XG4gICAgICAgIGF3YWl0IGVuZm9yY2VEQkRlY29yYXRvcnMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBtLFxuICAgICAgICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgICAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgICB9KVxuICAgICk7XG4gICAgY29uc3QgZXJyb3JzID0gbW9kZWxzXG4gICAgICAubWFwKChtKSA9PiBtLmhhc0Vycm9ycygpKVxuICAgICAgLnJlZHVjZSgoYWNjdW06IHN0cmluZyB8IHVuZGVmaW5lZCwgZSwgaSkgPT4ge1xuICAgICAgICBpZiAoZSlcbiAgICAgICAgICBhY2N1bSA9XG4gICAgICAgICAgICB0eXBlb2YgYWNjdW0gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgPyBhY2N1bSArIGBcXG4gLSAke2l9OiAke2UudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIDogYCAtICR7aX06ICR7ZS50b1N0cmluZygpfWA7XG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgIH0sIHVuZGVmaW5lZCk7XG4gICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMpO1xuICAgIHJldHVybiBbbW9kZWxzLCAuLi5hcmdzXTtcbiAgfVxuXG4gIGFzeW5jIHJlYWQoaWQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICBjb25zdCBtID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJlYWQodGhpcy50YWJsZU5hbWUsIGlkLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnJldmVydChtLCB0aGlzLmNsYXNzLCB0aGlzLnBrLCBpZCk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUobW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IHJlY29yZCwgaWQgfSA9IGF3YWl0IHRoaXMuYWRhcHRlci5wcmVwYXJlKG1vZGVsLCB0aGlzLnBrKTtcbiAgICByZWNvcmQgPSBhd2FpdCB0aGlzLmFkYXB0ZXIudXBkYXRlKHRoaXMudGFibGVOYW1lLCBpZCwgcmVjb3JkLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnJldmVydChyZWNvcmQsIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVQcmVmaXgoXG4gICAgbW9kZWw6IE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxbTSwgLi4uYXJnczogYW55W11dPiB7XG4gICAgY29uc3QgcGsgPSBmaW5kTW9kZWxJZChtb2RlbCk7XG4gICAgY29uc3Qgb2xkTW9kZWwgPSBhd2FpdCB0aGlzLnJlYWQocGspO1xuICAgIG1vZGVsID0gdGhpcy5tZXJnZShvbGRNb2RlbCwgbW9kZWwpO1xuICAgIGF3YWl0IGVuZm9yY2VEQkRlY29yYXRvcnMoXG4gICAgICB0aGlzLFxuICAgICAgbW9kZWwsXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuT04sXG4gICAgICBvbGRNb2RlbFxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSBtb2RlbC5oYXNFcnJvcnMob2xkTW9kZWwpO1xuICAgIGlmIChlcnJvcnMpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzLnRvU3RyaW5nKCkpO1xuICAgIGlmIChSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG9sZE1vZGVsKSkge1xuICAgICAgaWYgKCFSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG1vZGVsKSlcbiAgICAgICAgUmVwb3NpdG9yeS5zZXRNZXRhZGF0YShtb2RlbCwgUmVwb3NpdG9yeS5nZXRNZXRhZGF0YShvbGRNb2RlbCkpO1xuICAgIH1cbiAgICByZXR1cm4gW21vZGVsLCAuLi5hcmdzXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVBbGxQcmVmaXgobW9kZWxzOiBNW10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGNvbnN0IGlkcyA9IG1vZGVscy5tYXAoKG0pID0+IGZpbmRNb2RlbElkKG0pKTtcbiAgICBjb25zdCBvbGRNb2RlbHMgPSBhd2FpdCB0aGlzLnJlYWRBbGwoaWRzKTtcbiAgICBtb2RlbHMgPSBtb2RlbHMubWFwKChtLCBpKSA9PiB7XG4gICAgICBtID0gdGhpcy5tZXJnZShvbGRNb2RlbHNbaV0sIG0pO1xuICAgICAgaWYgKFJlcG9zaXRvcnkuZ2V0TWV0YWRhdGEob2xkTW9kZWxzW2ldKSkge1xuICAgICAgICBpZiAoIVJlcG9zaXRvcnkuZ2V0TWV0YWRhdGEobSkpXG4gICAgICAgICAgUmVwb3NpdG9yeS5zZXRNZXRhZGF0YShtLCBSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG9sZE1vZGVsc1tpXSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG07XG4gICAgfSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtb2RlbHMubWFwKChtLCBpKSA9PlxuICAgICAgICBlbmZvcmNlREJEZWNvcmF0b3JzKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OLFxuICAgICAgICAgIG9sZE1vZGVsc1tpXVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGVycm9ycyA9IG1vZGVsc1xuICAgICAgLm1hcCgobSwgaSkgPT4gbS5oYXNFcnJvcnMob2xkTW9kZWxzW2ldLCBtKSlcbiAgICAgIC5yZWR1Y2UoKGFjY3VtOiBzdHJpbmcgfCB1bmRlZmluZWQsIGUsIGkpID0+IHtcbiAgICAgICAgaWYgKGUpXG4gICAgICAgICAgYWNjdW0gPVxuICAgICAgICAgICAgdHlwZW9mIGFjY3VtID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgID8gYWNjdW0gKyBgXFxuIC0gJHtpfTogJHtlLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgICA6IGAgLSAke2l9OiAke2UudG9TdHJpbmcoKX1gO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LCB1bmRlZmluZWQpO1xuICAgIGlmIChlcnJvcnMpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzKTtcblxuICAgIHJldHVybiBbbW9kZWxzLCAuLi5hcmdzXTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIGNvbnN0IG0gPSBhd2FpdCB0aGlzLmFkYXB0ZXIuZGVsZXRlKHRoaXMudGFibGVOYW1lLCBpZCwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQobSwgdGhpcy5jbGFzcywgdGhpcy5waywgaWQpO1xuICB9XG5cbiAgc2VsZWN0KHNlbGVjdG9yPzogU2VsZWN0U2VsZWN0b3IpOiBXaGVyZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBRdWVyeTxRLCBNPih0aGlzLmFkYXB0ZXIpLnNlbGVjdChzZWxlY3RvcikuZnJvbSh0aGlzLmNsYXNzKTtcbiAgfVxuXG4gIGFzeW5jIHF1ZXJ5PFY+KFxuICAgIGNvbmRpdGlvbjogQ29uZGl0aW9uLFxuICAgIG9yZGVyQnk6IHN0cmluZyxcbiAgICBvcmRlcjogT3JkZXJEaXJlY3Rpb24gPSBPcmRlckRpcmVjdGlvbi5BU0MsXG4gICAgbGltaXQ/OiBudW1iZXIsXG4gICAgc2tpcD86IG51bWJlclxuICApOiBQcm9taXNlPFY+IHtcbiAgICBjb25zdCBzb3J0OiBPcmRlckJ5U2VsZWN0b3IgPSBbb3JkZXJCeSBhcyBzdHJpbmcsIG9yZGVyIGFzIE9yZGVyRGlyZWN0aW9uXTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VsZWN0KCkud2hlcmUoY29uZGl0aW9uKS5vcmRlckJ5KHNvcnQpO1xuICAgIGlmIChsaW1pdCkgcXVlcnkubGltaXQobGltaXQpO1xuICAgIGlmIChza2lwKSBxdWVyeS5vZmZzZXQoc2tpcCk7XG4gICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGU8Vj4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgYW4ge0BsaW5rIE9ic2VydmVyfVxuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgKlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI29ic2VydmV9XG4gICAqL1xuICBvYnNlcnZlKG9ic2VydmVyOiBPYnNlcnZlcik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJPYnNlcnZlciBhbHJlYWR5IHJlZ2lzdGVyZWRcIik7XG4gICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgVW5yZWdpc3RlcnMgYW4ge0BsaW5rIE9ic2VydmVyfVxuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgKlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI3VuT2JzZXJ2ZX1cbiAgICovXG4gIHVuT2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiRmFpbGVkIHRvIGZpbmQgT2JzZXJ2ZXJcIik7XG4gICAgdGhpcy5vYnNlcnZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBjYWxscyBhbGwgcmVnaXN0ZXJlZCB7QGxpbmsgT2JzZXJ2ZXJ9cyB0byB1cGRhdGUgdGhlbXNlbHZlc1xuICAgKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gb3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUge0BsaW5rIE9ic2VydmVyI3JlZnJlc2h9IG1ldGhvZFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlT2JzZXJ2ZXJzKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIFByb21pc2UuYWxsKHRoaXMub2JzZXJ2ZXJzLm1hcCgobzogT2JzZXJ2ZXIpID0+IG8ucmVmcmVzaCguLi5hcmdzKSkpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZTogYW55KSA9PiByZWplY3QobmV3IE9ic2VydmVyRXJyb3IoZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JNb2RlbDxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PE0sIGFueT4+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPlxuICApOiBSIHtcbiAgICBjb25zdCByZXBvTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIFJlcG9zaXRvcnkua2V5KERCS2V5cy5SRVBPU0lUT1JZKSxcbiAgICAgIG1vZGVsXG4gICAgKTtcbiAgICBsZXQgZmxhdm91cjogc3RyaW5nIHwgdW5kZWZpbmVkID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSxcbiAgICAgIG1vZGVsXG4gICAgKTtcbiAgICBsZXQgYWRhcHRlcjogQWRhcHRlcjxhbnksIGFueT4gfCB1bmRlZmluZWQgPSBmbGF2b3VyXG4gICAgICA/IEFkYXB0ZXIuZ2V0KGZsYXZvdXIpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGxldCByZXBvQ29uc3RydWN0b3I6IENvbnN0cnVjdG9yPFI+O1xuICAgIGlmICghcmVwb05hbWUpIHtcbiAgICAgIGlmICghYWRhcHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBib290IGEgc3RhbmRhcmQgcmVwb3NpdG9yeSB3aXRob3V0IGFuIGFkYXB0ZXIgZGVmaW5pdGlvbi4gRGlkIHlvdSBAdXNlIG9uIHRoZSBtb2RlbCAke21vZGVsLm5hbWV9YFxuICAgICAgICApO1xuICAgICAgcmVwb0NvbnN0cnVjdG9yID0gUmVwb3NpdG9yeSBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFI+O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBvQ29uc3RydWN0b3IgPSB0aGlzLmdldChyZXBvTmFtZSkgYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxSPjtcbiAgICAgIGZsYXZvdXIgPVxuICAgICAgICBmbGF2b3VyIHx8XG4gICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgICAgQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpLFxuICAgICAgICAgIHJlcG9Db25zdHJ1Y3RvclxuICAgICAgICApO1xuICAgICAgaWYgKCFmbGF2b3VyKVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBgTm8gcmVnaXN0ZXJlZCBwZXJzaXN0ZW5jZSBhZGFwdGVyIGZvdW5kIGZvciBtb2RlbCAke21vZGVsLm5hbWV9YFxuICAgICAgICApO1xuXG4gICAgICBhZGFwdGVyID0gQWRhcHRlci5nZXQoZmxhdm91cik7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyByZWdpc3RlcmVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIgZm91bmQgZmxhdm91ciAke2ZsYXZvdXJ9YFxuICAgICAgKTtcblxuICAgIHJldHVybiBuZXcgcmVwb0NvbnN0cnVjdG9yKGFkYXB0ZXIsIG1vZGVsKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG5hbWU6IHN0cmluZ1xuICApOiBDb25zdHJ1Y3RvcjxSZXBvc2l0b3J5PE0+PiB7XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY2FjaGUpXG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGVbbmFtZV0gYXMgQ29uc3RydWN0b3I8UmVwb3NpdG9yeTxNPj47XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgQ291bGQgbm90IGZpbmQgcmVwb3NpdG9yeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyByZWdpc3RlcjxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICByZXBvOiBDb25zdHJ1Y3RvcjxSZXBvc2l0b3J5PE0sIGFueT4+XG4gICkge1xuICAgIGlmIChuYW1lIGluIHRoaXMuX2NhY2hlKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYCR7bmFtZX0gYWxyZWFkeSByZWdpc3RlcmVkIGFzIGEgcmVwb3NpdG9yeWApO1xuICAgIHRoaXMuX2NhY2hlW25hbWVdID0gcmVwbztcbiAgfVxuXG4gIHN0YXRpYyBzZXRNZXRhZGF0YTxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNLCBtZXRhZGF0YTogYW55KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZGVsLCBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEEsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IG1ldGFkYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldE1ldGFkYXRhPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIG1vZGVsLFxuICAgICAgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXG4gICAgKTtcbiAgICByZXR1cm4gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3IudmFsdWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgcmVtb3ZlTWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgbW9kZWwsXG4gICAgICBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFcbiAgICApO1xuICAgIGlmIChkZXNjcmlwdG9yKSBkZWxldGUgKG1vZGVsIGFzIGFueSlbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTZXF1ZW5jZU9wdGlvbnM8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICAgIGNvbnN0IHBrID0gZmluZFByaW1hcnlLZXkobW9kZWwpLmlkO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShSZXBvc2l0b3J5LmtleShEQktleXMuSUQpLCBtb2RlbCwgcGspO1xuICAgIGlmICghbWV0YWRhdGEpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgXCJObyBzZXF1ZW5jZSBvcHRpb25zIGRlZmluZWQgZm9yIG1vZGVsLiBkaWQgeW91IHVzZSB0aGUgQHBrIGRlY29yYXRvcj9cIlxuICAgICAgKTtcbiAgICByZXR1cm4gbWV0YWRhdGEgYXMgU2VxdWVuY2VPcHRpb25zO1xuICB9XG59XG4iXX0=
285
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L1JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBVWlDO0FBQ2pDLHFDQUF5QztBQUd6QyxvREFBaUQ7QUFDakQseUVBQW9FO0FBQ3BFLHdEQUEyRDtBQUMzRCxvQ0FNa0I7QUFDbEIsMkNBQTZDO0FBRzdDLHFEQUFnRTtBQUVoRSxzREFBbUQ7QUFFbkQsTUFBYSxVQUNYLFNBQVEsMEJBQU07YUFHQyxXQUFNLEdBR2pCLEVBSGlCLEFBR2YsQ0FBQztJQU9QLElBQUksT0FBTztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNoQixNQUFNLElBQUksNkJBQWEsQ0FDckIsc0dBQXNHLENBQ3ZHLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQWMsU0FBUztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFBWSxPQUF5QixFQUFFLEtBQXNCO1FBQzNELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQW5CUCxjQUFTLEdBQWUsRUFBRSxDQUFDO1FBb0JqQyxJQUFJLE9BQU87WUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUNyQyxJQUFJLEtBQUs7WUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQ3BFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDSixNQUFNLElBQUksR0FBRyxDQUFD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UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQWtCLEtBQVEsRUFBRSxTQUFpQjtRQUN4RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUNsQyxpQkFBTyxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLE1BQU0sQ0FBQyxFQUNuQyxLQUFLLEVBQ0wsU0FBUyxDQUNWLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekMsQ0FBQzs7QUE5WEgsZ0NBK1hDIiwiZmlsZSI6InJlcG9zaXRvcnkvUmVwb3NpdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFyZ3NXaXRoQ29udGV4dCxcbiAgREJLZXlzLFxuICBlbmZvcmNlREJEZWNvcmF0b3JzLFxuICBmaW5kUHJpbWFyeUtleSxcbiAgSW50ZXJuYWxFcnJvcixcbiAgT3BlcmF0aW9uS2V5cyxcbiAgUmVwb3NpdG9yeSBhcyBSZXAsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgd3JhcE1ldGhvZFdpdGhDb250ZXh0LFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IE9ic2VydmVyRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9PYnNlcnZhYmxlXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL09ic2VydmVyXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0FkYXB0ZXJcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIENvbmRpdGlvbixcbiAgT3JkZXJCeVNlbGVjdG9yLFxuICBRdWVyeSxcbiAgU2VsZWN0U2VsZWN0b3IsXG4gIFdoZXJlT3B0aW9uLFxufSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IE9yZGVyRGlyZWN0aW9uIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9wdGlvbnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgUXVlcmlhYmxlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvUXVlcmlhYmxlXCI7XG5pbXBvcnQgeyBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnMgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IEluZGV4TWV0YWRhdGEgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgU2VxdWVuY2UgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvU2VxdWVuY2VcIjtcblxuZXhwb3J0IGNsYXNzIFJlcG9zaXRvcnk8TSBleHRlbmRzIE1vZGVsLCBRID0gYW55PlxuICBleHRlbmRzIFJlcDxNPlxuICBpbXBsZW1lbnRzIE9ic2VydmFibGUsIFF1ZXJpYWJsZVxue1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGU6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgQ29uc3RydWN0b3I8UmVwb3NpdG9yeTxNb2RlbCwgYW55Pj4gfCBSZXBvc2l0b3J5PE1vZGVsLCBhbnk+XG4gID4gPSB7fTtcblxuICBwcml2YXRlIG9ic2VydmVyczogT2JzZXJ2ZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FkYXB0ZXIhOiBBZGFwdGVyPGFueSwgUT47XG4gIHByaXZhdGUgX3RhYmxlTmFtZSE6IHN0cmluZztcblxuICBnZXQgYWRhcHRlcigpIHtcbiAgICBpZiAoIXRoaXMuX2FkYXB0ZXIpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYE5vIGFkYXB0ZXIgZm91bmQgZm9yIHRoaXMgcmVwb3NpdG9yeS4gZGlkIHlvdSB1c2UgdGhlIEB1c2VzIGRlY29yYXRvciBvciBwYXNzIGl0IGluIHRoZSBjb25zdHJ1Y3Rvcj9gXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLl9hZGFwdGVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0YWJsZU5hbWUoKSB7XG4gICAgaWYgKCF0aGlzLl90YWJsZU5hbWUpIHRoaXMuX3RhYmxlTmFtZSA9IFJlcG9zaXRvcnkudGFibGUodGhpcy5jbGFzcyk7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlTmFtZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXI/OiBBZGFwdGVyPGFueSwgUT4sIGNsYXp6PzogQ29uc3RydWN0b3I8TT4pIHtcbiAgICBzdXBlcihjbGF6eik7XG4gICAgaWYgKGFkYXB0ZXIpIHRoaXMuX2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIGlmIChjbGF6eikgUmVwb3NpdG9yeS5yZWdpc3RlcihjbGF6eiwgdGhpcyk7XG4gICAgW3RoaXMuY3JlYXRlQWxsLCB0aGlzLnJlYWRBbGwsIHRoaXMudXBkYXRlQWxsLCB0aGlzLmRlbGV0ZUFsbF0uZm9yRWFjaChcbiAgICAgIChtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBtLm5hbWU7XG4gICAgICAgIHdyYXBNZXRob2RXaXRoQ29udGV4dChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgICh0aGlzIGFzIGFueSlbbmFtZSArIFwiUHJlZml4XCJdLFxuICAgICAgICAgIG0sXG4gICAgICAgICAgKHRoaXMgYXMgYW55KVtuYW1lICsgXCJTdWZmaXhcIl1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKG1vZGVsOiBNLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgeyByZWNvcmQsIGlkIH0gPSB0aGlzLmFkYXB0ZXIucHJlcGFyZShtb2RlbCwgdGhpcy5wayk7XG4gICAgcmVjb3JkID0gYXdhaXQgdGhpcy5hZGFwdGVyLmNyZWF0ZSh0aGlzLnRhYmxlTmFtZSwgaWQsIHJlY29yZCwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQocmVjb3JkLCB0aGlzLmNsYXNzLCB0aGlzLnBrLCBpZCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbGwobW9kZWxzOiBNW10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+IHtcbiAgICBpZiAoIW1vZGVscy5sZW5ndGgpIHJldHVybiBtb2RlbHM7XG4gICAgY29uc3QgcHJlcGFyZWQgPSBtb2RlbHMubWFwKChtKSA9PiB0aGlzLmFkYXB0ZXIucHJlcGFyZShtLCB0aGlzLnBrKSk7XG4gICAgY29uc3QgaWRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLmlkKTtcbiAgICBsZXQgcmVjb3JkcyA9IHByZXBhcmVkLm1hcCgocCkgPT4gcC5yZWNvcmQpO1xuICAgIHJlY29yZHMgPSBhd2FpdCB0aGlzLmFkYXB0ZXIuY3JlYXRlQWxsKFxuICAgICAgdGhpcy50YWJsZU5hbWUsXG4gICAgICBpZHMgYXMgKHN0cmluZyB8IG51bWJlcilbXSxcbiAgICAgIHJlY29yZHMsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICByZXR1cm4gcmVjb3Jkcy5tYXAoKHIsIGkpID0+XG4gICAgICB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHIsIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkc1tpXSBhcyBzdHJpbmcgfCBudW1iZXIpXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjcmVhdGVBbGxQcmVmaXgobW9kZWxzOiBNW10sIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhcmdzV2l0aENvbnRleHQoYXJncyk7XG4gICAgaWYgKCFtb2RlbHMubGVuZ3RoKSByZXR1cm4gW21vZGVscywgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gICAgY29uc3Qgb3B0cyA9IFJlcG9zaXRvcnkuZ2V0U2VxdWVuY2VPcHRpb25zKG1vZGVsc1swXSk7XG4gICAgbGV0IGlkczogKHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCB8IHVuZGVmaW5lZClbXSA9IFtdO1xuICAgIGlmIChvcHRzLnR5cGUpIHtcbiAgICAgIGlmICghb3B0cy5uYW1lKSBvcHRzLm5hbWUgPSBTZXF1ZW5jZS5wayhtb2RlbHNbMF0pO1xuICAgICAgaWRzID0gYXdhaXQgKGF3YWl0IHRoaXMuYWRhcHRlci5TZXF1ZW5jZShvcHRzKSkucmFuZ2UobW9kZWxzLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgbW9kZWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtb2RlbHMubWFwKGFzeW5jIChtLCBpKSA9PiB7XG4gICAgICAgIG0gPSBuZXcgdGhpcy5jbGFzcyhtKTtcbiAgICAgICAgKG0gYXMgUmVjb3JkPHN0cmluZywgYW55PilbdGhpcy5wa10gPSBpZHNbaV07XG4gICAgICAgIGF3YWl0IGVuZm9yY2VEQkRlY29yYXRvcnMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgICAgIG0sXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5PTlxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBjb25zdCBlcnJvcnMgPSBtb2RlbHNcbiAgICAgIC5tYXAoKG0pID0+IG0uaGFzRXJyb3JzKCkpXG4gICAgICAucmVkdWNlKChhY2N1bTogc3RyaW5nIHwgdW5kZWZpbmVkLCBlLCBpKSA9PiB7XG4gICAgICAgIGlmIChlKVxuICAgICAgICAgIGFjY3VtID1cbiAgICAgICAgICAgIHR5cGVvZiBhY2N1bSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICA/IGFjY3VtICsgYFxcbiAtICR7aX06ICR7ZS50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgOiBgIC0gJHtpfTogJHtlLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSwgdW5kZWZpbmVkKTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycyk7XG4gICAgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgYXN5bmMgcmVhZChpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIGNvbnN0IG0gPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmVhZCh0aGlzLnRhYmxlTmFtZSwgaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KG0sIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShtb2RlbDogTSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IHsgcmVjb3JkLCBpZCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUobW9kZWwsIHRoaXMucGspO1xuICAgIHJlY29yZCA9IGF3YWl0IHRoaXMuYWRhcHRlci51cGRhdGUodGhpcy50YWJsZU5hbWUsIGlkLCByZWNvcmQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHJlY29yZCwgdGhpcy5jbGFzcywgdGhpcy5waywgaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVByZWZpeChcbiAgICBtb2RlbDogTSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFtNLCAuLi5hcmdzOiBhbnlbXV0+IHtcbiAgICBjb25zdCBjb250ZXh0QXJncyA9IGFyZ3NXaXRoQ29udGV4dChhcmdzKTtcbiAgICBjb25zdCBwayA9IChtb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVt0aGlzLnBrXTtcbiAgICBpZiAoIXBrKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyB2YWx1ZSBmb3IgdGhlIElkIGlzIGRlZmluZWQgdW5kZXIgdGhlIHByb3BlcnR5ICR7dGhpcy5wa31gXG4gICAgICApO1xuICAgIGNvbnN0IG9sZE1vZGVsID0gYXdhaXQgdGhpcy5yZWFkKHBrLCAuLi5jb250ZXh0QXJncy5hcmdzKTtcbiAgICBtb2RlbCA9IHRoaXMubWVyZ2Uob2xkTW9kZWwsIG1vZGVsKTtcbiAgICBhd2FpdCBlbmZvcmNlREJEZWNvcmF0b3JzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICBtb2RlbCxcbiAgICAgIE9wZXJhdGlvbktleXMuVVBEQVRFLFxuICAgICAgT3BlcmF0aW9uS2V5cy5PTixcbiAgICAgIG9sZE1vZGVsXG4gICAgKTtcblxuICAgIGNvbnN0IGVycm9ycyA9IG1vZGVsLmhhc0Vycm9ycyhvbGRNb2RlbCk7XG4gICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMudG9TdHJpbmcoKSk7XG4gICAgaWYgKFJlcG9zaXRvcnkuZ2V0TWV0YWRhdGEob2xkTW9kZWwpKSB7XG4gICAgICBpZiAoIVJlcG9zaXRvcnkuZ2V0TWV0YWRhdGEobW9kZWwpKVxuICAgICAgICBSZXBvc2l0b3J5LnNldE1ldGFkYXRhKG1vZGVsLCBSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG9sZE1vZGVsKSk7XG4gICAgfVxuICAgIHJldHVybiBbbW9kZWwsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZUFsbFByZWZpeChtb2RlbHM6IE1bXSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhcmdzV2l0aENvbnRleHQoYXJncyk7XG4gICAgY29uc3QgaWRzID0gbW9kZWxzLm1hcCgobSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSAobSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVt0aGlzLnBrXTtcbiAgICAgIGlmICghaWQpIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwibWlzc2luZyBpZCBvbiB1cGRhdGUgb3BlcmF0aW9uXCIpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH0pO1xuICAgIGNvbnN0IG9sZE1vZGVscyA9IGF3YWl0IHRoaXMucmVhZEFsbChpZHMsIC4uLmNvbnRleHRBcmdzLmFyZ3MpO1xuICAgIG1vZGVscyA9IG1vZGVscy5tYXAoKG0sIGkpID0+IHtcbiAgICAgIG0gPSB0aGlzLm1lcmdlKG9sZE1vZGVsc1tpXSwgbSk7XG4gICAgICBpZiAoUmVwb3NpdG9yeS5nZXRNZXRhZGF0YShvbGRNb2RlbHNbaV0pKSB7XG4gICAgICAgIGlmICghUmVwb3NpdG9yeS5nZXRNZXRhZGF0YShtKSlcbiAgICAgICAgICBSZXBvc2l0b3J5LnNldE1ldGFkYXRhKG0sIFJlcG9zaXRvcnkuZ2V0TWV0YWRhdGEob2xkTW9kZWxzW2ldKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbTtcbiAgICB9KTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1vZGVscy5tYXAoKG0sIGkpID0+XG4gICAgICAgIGVuZm9yY2VEQkRlY29yYXRvcnMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgICAgIG0sXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5PTixcbiAgICAgICAgICBvbGRNb2RlbHNbaV1cbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSBtb2RlbHNcbiAgICAgIC5tYXAoKG0sIGkpID0+IG0uaGFzRXJyb3JzKG9sZE1vZGVsc1tpXSwgbSkpXG4gICAgICAucmVkdWNlKChhY2N1bTogc3RyaW5nIHwgdW5kZWZpbmVkLCBlLCBpKSA9PiB7XG4gICAgICAgIGlmIChlKVxuICAgICAgICAgIGFjY3VtID1cbiAgICAgICAgICAgIHR5cGVvZiBhY2N1bSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICA/IGFjY3VtICsgYFxcbiAtICR7aX06ICR7ZS50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgOiBgIC0gJHtpfTogJHtlLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSwgdW5kZWZpbmVkKTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycyk7XG5cbiAgICByZXR1cm4gW21vZGVscywgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICBhc3luYyBkZWxldGUoaWQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICBjb25zdCBtID0gYXdhaXQgdGhpcy5hZGFwdGVyLmRlbGV0ZSh0aGlzLnRhYmxlTmFtZSwgaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KG0sIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIHNlbGVjdChzZWxlY3Rvcj86IFNlbGVjdFNlbGVjdG9yKTogV2hlcmVPcHRpb24ge1xuICAgIHJldHVybiBuZXcgUXVlcnk8USwgTT4odGhpcy5hZGFwdGVyKS5zZWxlY3Qoc2VsZWN0b3IpLmZyb20odGhpcy5jbGFzcyk7XG4gIH1cblxuICBhc3luYyBxdWVyeTxWPihcbiAgICBjb25kaXRpb246IENvbmRpdGlvbixcbiAgICBvcmRlckJ5OiBzdHJpbmcsXG4gICAgb3JkZXI6IE9yZGVyRGlyZWN0aW9uID0gT3JkZXJEaXJlY3Rpb24uQVNDLFxuICAgIGxpbWl0PzogbnVtYmVyLFxuICAgIHNraXA/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxWPiB7XG4gICAgY29uc3Qgc29ydDogT3JkZXJCeVNlbGVjdG9yID0gW29yZGVyQnkgYXMgc3RyaW5nLCBvcmRlciBhcyBPcmRlckRpcmVjdGlvbl07XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnNlbGVjdCgpLndoZXJlKGNvbmRpdGlvbikub3JkZXJCeShzb3J0KTtcbiAgICBpZiAobGltaXQpIHF1ZXJ5LmxpbWl0KGxpbWl0KTtcbiAgICBpZiAoc2tpcCkgcXVlcnkub2Zmc2V0KHNraXApO1xuICAgIHJldHVybiBxdWVyeS5leGVjdXRlPFY+KCk7XG4gIH1cblxuICBhc3luYyB0aW1lc3RhbXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci50aW1lc3RhbXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgYW4ge0BsaW5rIE9ic2VydmVyfVxuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgKlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI29ic2VydmV9XG4gICAqL1xuICBvYnNlcnZlKG9ic2VydmVyOiBPYnNlcnZlcik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJPYnNlcnZlciBhbHJlYWR5IHJlZ2lzdGVyZWRcIik7XG4gICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgVW5yZWdpc3RlcnMgYW4ge0BsaW5rIE9ic2VydmVyfVxuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgKlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI3VuT2JzZXJ2ZX1cbiAgICovXG4gIHVuT2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiRmFpbGVkIHRvIGZpbmQgT2JzZXJ2ZXJcIik7XG4gICAgdGhpcy5vYnNlcnZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBjYWxscyBhbGwgcmVnaXN0ZXJlZCB7QGxpbmsgT2JzZXJ2ZXJ9cyB0byB1cGRhdGUgdGhlbXNlbHZlc1xuICAgKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gb3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUge0BsaW5rIE9ic2VydmVyI3JlZnJlc2h9IG1ldGhvZFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlT2JzZXJ2ZXJzKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIFByb21pc2UuYWxsKHRoaXMub2JzZXJ2ZXJzLm1hcCgobzogT2JzZXJ2ZXIpID0+IG8ucmVmcmVzaCguLi5hcmdzKSkpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZTogYW55KSA9PiByZWplY3QobmV3IE9ic2VydmVyRXJyb3IoZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JNb2RlbDxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PE0sIGFueT4+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPlxuICApOiBSIHtcbiAgICBsZXQgcmVwbzogUmVwb3NpdG9yeTxNPiB8IENvbnN0cnVjdG9yPFJlcG9zaXRvcnk8TT4+O1xuICAgIHRyeSB7XG4gICAgICByZXBvID0gdGhpcy5nZXQobW9kZWwpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgcmVwbyA9IFJlcG9zaXRvcnk7XG4gICAgfVxuXG4gICAgaWYgKHJlcG8gaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSByZXR1cm4gcmVwbyBhcyBSO1xuXG4gICAgY29uc3QgZmxhdm91cjogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpLCBtb2RlbCkgfHxcbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpLCByZXBvKTtcbiAgICBjb25zdCBhZGFwdGVyOiBBZGFwdGVyPGFueSwgYW55PiB8IHVuZGVmaW5lZCA9IGZsYXZvdXJcbiAgICAgID8gQWRhcHRlci5nZXQoZmxhdm91cilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFhZGFwdGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyByZWdpc3RlcmVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIgZm91bmQgZmxhdm91ciAke2ZsYXZvdXJ9YFxuICAgICAgKTtcblxuICAgIHJldHVybiBuZXcgcmVwbyhhZGFwdGVyLCBtb2RlbCkgYXMgUjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPlxuICApOiBDb25zdHJ1Y3RvcjxSZXBvc2l0b3J5PE0+PiB8IFJlcG9zaXRvcnk8TT4ge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRhYmxlKG1vZGVsKTtcbiAgICBpZiAobmFtZSBpbiB0aGlzLl9jYWNoZSlcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZVtuYW1lXSBhcyBDb25zdHJ1Y3RvcjxSZXBvc2l0b3J5PE0+PiB8IFJlcG9zaXRvcnk8TT47XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgQ291bGQgbm90IGZpbmQgcmVwb3NpdG9yeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyByZWdpc3RlcjxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICByZXBvOiBDb25zdHJ1Y3RvcjxSZXBvc2l0b3J5PE0sIGFueT4+IHwgUmVwb3NpdG9yeTxNLCBhbnk+XG4gICkge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLnRhYmxlKG1vZGVsKTtcbiAgICBpZiAobmFtZSBpbiB0aGlzLl9jYWNoZSlcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGAke25hbWV9IGFscmVhZHkgcmVnaXN0ZXJlZCBhcyBhIHJlcG9zaXRvcnlgKTtcbiAgICB0aGlzLl9jYWNoZVtuYW1lXSA9IHJlcG87XG4gIH1cblxuICBzdGF0aWMgc2V0TWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSwgbWV0YWRhdGE6IGFueSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2RlbCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBtZXRhZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRNZXRhZGF0YTxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICBtb2RlbCxcbiAgICAgIFBlcnNpc3RlbmNlS2V5cy5NRVRBREFUQVxuICAgICk7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3IgPyBkZXNjcmlwdG9yLnZhbHVlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIHJlbW92ZU1ldGFkYXRhPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgIG1vZGVsLFxuICAgICAgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXG4gICAgKTtcbiAgICBpZiAoZGVzY3JpcHRvcikgZGVsZXRlIChtb2RlbCBhcyBhbnkpW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV07XG4gIH1cblxuICBzdGF0aWMgZ2V0U2VxdWVuY2VPcHRpb25zPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pIHtcbiAgICBjb25zdCBwayA9IGZpbmRQcmltYXJ5S2V5KG1vZGVsKS5pZDtcbiAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoUmVwb3NpdG9yeS5rZXkoREJLZXlzLklEKSwgbW9kZWwsIHBrKTtcbiAgICBpZiAoIW1ldGFkYXRhKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIFwiTm8gc2VxdWVuY2Ugb3B0aW9ucyBkZWZpbmVkIGZvciBtb2RlbC4gZGlkIHlvdSB1c2UgdGhlIEBwayBkZWNvcmF0b3I/XCJcbiAgICAgICk7XG4gICAgcmV0dXJuIG1ldGFkYXRhIGFzIFNlcXVlbmNlT3B0aW9ucztcbiAgfVxuXG4gIHN0YXRpYyBpbmRleGVzPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPikge1xuICAgIGNvbnN0IGluZGV4RGVjb3JhdG9ycyA9IGdldEFsbFByb3BlcnR5RGVjb3JhdG9ycyhcbiAgICAgIG1vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbCA6IG5ldyBtb2RlbCgpLFxuICAgICAgREJLZXlzLlJFRkxFQ1RcbiAgICApO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbmRleERlY29yYXRvcnMgfHwge30pLnJlZHVjZShcbiAgICAgIChhY2N1bTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgSW5kZXhNZXRhZGF0YT4+LCBbaywgdmFsXSkgPT4ge1xuICAgICAgICBjb25zdCBkZWNzID0gdmFsLmZpbHRlcigodikgPT4gdi5rZXkuc3RhcnRzV2l0aChQZXJzaXN0ZW5jZUtleXMuSU5ERVgpKTtcbiAgICAgICAgaWYgKGRlY3MgJiYgZGVjcy5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRlYyBvZiBkZWNzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGtleSwgcHJvcHMgfSA9IGRlYztcbiAgICAgICAgICAgIGFjY3VtW2tdID0gYWNjdW1ba10gfHwge307XG4gICAgICAgICAgICBhY2N1bVtrXVtrZXldID0gcHJvcHMgYXMgSW5kZXhNZXRhZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyB0YWJsZTxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT4pIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICBBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuVEFCTEUpLFxuICAgICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbCA/IG1vZGVsLmNvbnN0cnVjdG9yIDogbW9kZWxcbiAgICApO1xuICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgIH1cbiAgICBpZiAobW9kZWwgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgcmV0dXJuIG1vZGVsLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiBtb2RlbC5uYW1lO1xuICB9XG5cbiAgc3RhdGljIGNvbHVtbjxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNLCBhdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5DT0xVTU4pLFxuICAgICAgbW9kZWwsXG4gICAgICBhdHRyaWJ1dGVcbiAgICApO1xuICAgIHJldHVybiBtZXRhZGF0YSA/IG1ldGFkYXRhIDogYXR0cmlidXRlO1xuICB9XG59XG4iXX0=
@@ -7,15 +7,14 @@ import { Condition, SelectSelector, WhereOption } from "../query";
7
7
  import { OrderDirection } from "./constants";
8
8
  import { SequenceOptions } from "../interfaces";
9
9
  import { Queriable } from "../interfaces/Queriable";
10
+ import { IndexMetadata } from "./types";
10
11
  export declare class Repository<M extends Model, Q = any> extends Rep<M> implements Observable, Queriable {
11
12
  private static _cache;
12
13
  private observers;
13
14
  private readonly _adapter;
14
15
  private _tableName;
15
- private _pk;
16
16
  get adapter(): Adapter<any, Q>;
17
17
  protected get tableName(): string;
18
- protected get pk(): string;
19
18
  constructor(adapter?: Adapter<any, Q>, clazz?: Constructor<M>);
20
19
  create(model: M, ...args: any[]): Promise<M>;
21
20
  createAll(models: M[], ...args: any[]): Promise<M[]>;
@@ -27,6 +26,7 @@ export declare class Repository<M extends Model, Q = any> extends Rep<M> impleme
27
26
  delete(id: string | number | bigint, ...args: any[]): Promise<M>;
28
27
  select(selector?: SelectSelector): WhereOption;
29
28
  query<V>(condition: Condition, orderBy: string, order?: OrderDirection, limit?: number, skip?: number): Promise<V>;
29
+ timestamp(): Promise<Date>;
30
30
  /**
31
31
  * @summary Registers an {@link Observer}
32
32
  * @param {Observer} observer
@@ -48,9 +48,12 @@ export declare class Repository<M extends Model, Q = any> extends Rep<M> impleme
48
48
  updateObservers(...args: any[]): Promise<void>;
49
49
  static forModel<M extends Model, R extends Repository<M, any>>(model: Constructor<M>): R;
50
50
  private static get;
51
- static register<M extends Model>(name: string, repo: Constructor<Repository<M, any>>): void;
51
+ static register<M extends Model>(model: Constructor<M>, repo: Constructor<Repository<M, any>> | Repository<M, any>): void;
52
52
  static setMetadata<M extends Model>(model: M, metadata: any): void;
53
53
  static getMetadata<M extends Model>(model: M): any;
54
54
  static removeMetadata<M extends Model>(model: M): void;
55
55
  static getSequenceOptions<M extends Model>(model: M): SequenceOptions;
56
+ static indexes<M extends Model>(model: M | Constructor<M>): Record<string, Record<string, IndexMetadata>>;
57
+ static table<M extends Model>(model: M | Constructor<M>): any;
58
+ static column<M extends Model>(model: M, attribute: string): any;
56
59
  }
@@ -8,14 +8,10 @@ const Repository_1 = require("./Repository.cjs");
8
8
  function repository(model, nameOverride) {
9
9
  return ((original, propertyKey) => {
10
10
  if (propertyKey) {
11
- // const flavour = Reflect.getMetadata(
12
- // getPersistenceKey(PersistenceKeys.ADAPTER),
13
- // original.constructor,
14
- // );
15
11
  return (0, injectable_decorators_1.inject)(nameOverride || model.name)(original, propertyKey);
16
12
  }
17
13
  (0, reflection_1.metadata)(Repository_1.Repository.key(db_decorators_1.DBKeys.REPOSITORY), nameOverride || original.name)(model);
18
- Repository_1.Repository.register(nameOverride || original.name, original);
14
+ Repository_1.Repository.register(model, original);
19
15
  return (0, injectable_decorators_1.injectable)(nameOverride || original.name, true, (instance) => {
20
16
  Object.defineProperty(instance, db_decorators_1.DBKeys.CLASS, {
21
17
  enumerable: false,
@@ -27,4 +23,4 @@ function repository(model, nameOverride) {
27
23
  });
28
24
  }
29
25
 
30
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxnQ0ErQkM7QUFyQ0QsMkVBQXFFO0FBQ3JFLDJEQUE4RDtBQUM5RCxxREFBZ0Q7QUFFaEQsNkNBQTBDO0FBRTFDLFNBQWdCLFVBQVUsQ0FDeEIsS0FBcUIsRUFDckIsWUFBcUI7SUFFckIsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLFdBQW9CLEVBQUUsRUFBRTtRQUM5QyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLHVDQUF1QztZQUN2QyxnREFBZ0Q7WUFDaEQsMEJBQTBCO1lBQzFCLEtBQUs7WUFDTCxPQUFPLElBQUEsOEJBQU0sRUFBQyxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsSUFBQSxxQkFBUSxFQUNOLHVCQUFVLENBQUMsR0FBRyxDQUFDLHNCQUFNLENBQUMsVUFBVSxDQUFDLEVBQ2pDLFlBQVksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUM5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ1QsdUJBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFBLGtDQUFVLEVBQ2YsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQzdCLElBQUksRUFDSixDQUFDLFFBQXdCLEVBQUUsRUFBRTtZQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxzQkFBTSxDQUFDLEtBQUssRUFBRTtnQkFDNUMsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixRQUFRLEVBQUUsS0FBSztnQkFDZixLQUFLLEVBQUUsS0FBSzthQUNiLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FDRixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUFRLENBQUM7QUFDWixDQUFDIiwiZmlsZSI6InJlcG9zaXRvcnkvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBEQktleXMsIElSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuL1JlcG9zaXRvcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9zaXRvcnk8VCBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IENvbnN0cnVjdG9yPFQ+LFxuICBuYW1lT3ZlcnJpZGU/OiBzdHJpbmdcbik6IGFueSB7XG4gIHJldHVybiAoKG9yaWdpbmFsOiBhbnksIHByb3BlcnR5S2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHByb3BlcnR5S2V5KSB7XG4gICAgICAvLyBjb25zdCBmbGF2b3VyID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIC8vICAgZ2V0UGVyc2lzdGVuY2VLZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpLFxuICAgICAgLy8gICBvcmlnaW5hbC5jb25zdHJ1Y3RvcixcbiAgICAgIC8vICk7XG4gICAgICByZXR1cm4gaW5qZWN0KG5hbWVPdmVycmlkZSB8fCBtb2RlbC5uYW1lKShvcmlnaW5hbCwgcHJvcGVydHlLZXkpO1xuICAgIH1cblxuICAgIG1ldGFkYXRhKFxuICAgICAgUmVwb3NpdG9yeS5rZXkoREJLZXlzLlJFUE9TSVRPUlkpLFxuICAgICAgbmFtZU92ZXJyaWRlIHx8IG9yaWdpbmFsLm5hbWVcbiAgICApKG1vZGVsKTtcbiAgICBSZXBvc2l0b3J5LnJlZ2lzdGVyKG5hbWVPdmVycmlkZSB8fCBvcmlnaW5hbC5uYW1lLCBvcmlnaW5hbCk7XG4gICAgcmV0dXJuIGluamVjdGFibGUoXG4gICAgICBuYW1lT3ZlcnJpZGUgfHwgb3JpZ2luYWwubmFtZSxcbiAgICAgIHRydWUsXG4gICAgICAoaW5zdGFuY2U6IElSZXBvc2l0b3J5PFQ+KSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0YW5jZSwgREJLZXlzLkNMQVNTLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IG1vZGVsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApKG9yaWdpbmFsKTtcbiAgfSkgYXMgYW55O1xufVxuIl19
26
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxnQ0EyQkM7QUFqQ0QsMkVBQXFFO0FBQ3JFLDJEQUE4RDtBQUM5RCxxREFBZ0Q7QUFFaEQsNkNBQTBDO0FBRTFDLFNBQWdCLFVBQVUsQ0FDeEIsS0FBcUIsRUFDckIsWUFBcUI7SUFFckIsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMzQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBQSw4QkFBTSxFQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxJQUFBLHFCQUFRLEVBQ04sdUJBQVUsQ0FBQyxHQUFHLENBQUMsc0JBQU0sQ0FBQyxVQUFVLENBQUMsRUFDakMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQzlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDVCx1QkFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFBLGtDQUFVLEVBQ2YsWUFBWSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQzdCLElBQUksRUFDSixDQUFDLFFBQXdCLEVBQUUsRUFBRTtZQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxzQkFBTSxDQUFDLEtBQUssRUFBRTtnQkFDNUMsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixRQUFRLEVBQUUsS0FBSztnQkFDZixLQUFLLEVBQUUsS0FBSzthQUNiLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FDRixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxDQUFRLENBQUM7QUFDWixDQUFDIiwiZmlsZSI6InJlcG9zaXRvcnkvZGVjb3JhdG9ycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBEQktleXMsIElSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBtZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuL1JlcG9zaXRvcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9zaXRvcnk8VCBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IENvbnN0cnVjdG9yPFQ+LFxuICBuYW1lT3ZlcnJpZGU/OiBzdHJpbmdcbik6IGFueSB7XG4gIHJldHVybiAoKG9yaWdpbmFsOiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5S2V5KSB7XG4gICAgICByZXR1cm4gaW5qZWN0KG5hbWVPdmVycmlkZSB8fCBtb2RlbC5uYW1lKShvcmlnaW5hbCwgcHJvcGVydHlLZXkpO1xuICAgIH1cblxuICAgIG1ldGFkYXRhKFxuICAgICAgUmVwb3NpdG9yeS5rZXkoREJLZXlzLlJFUE9TSVRPUlkpLFxuICAgICAgbmFtZU92ZXJyaWRlIHx8IG9yaWdpbmFsLm5hbWVcbiAgICApKG1vZGVsKTtcbiAgICBSZXBvc2l0b3J5LnJlZ2lzdGVyKG1vZGVsLCBvcmlnaW5hbCk7XG4gICAgcmV0dXJuIGluamVjdGFibGUoXG4gICAgICBuYW1lT3ZlcnJpZGUgfHwgb3JpZ2luYWwubmFtZSxcbiAgICAgIHRydWUsXG4gICAgICAoaW5zdGFuY2U6IElSZXBvc2l0b3J5PFQ+KSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0YW5jZSwgREJLZXlzLkNMQVNTLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IG1vZGVsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApKG9yaWdpbmFsKTtcbiAgfSkgYXMgYW55O1xufVxuIl19
@@ -19,6 +19,8 @@ class InjectablesRegistry extends injectable_decorators_1.InjectableRegistryImp
19
19
  if (m)
20
20
  injectable = Repository_1.Repository.forModel(m);
21
21
  if (injectable) {
22
+ if (injectable instanceof Repository_1.Repository)
23
+ return injectable;
22
24
  const flavour = Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER), injectable.constructor) ||
23
25
  Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER), m);
24
26
  injectable_decorators_1.Injectables.register(injectable, (0, utils_1.generateInjectableNameForRepository)(m, flavour));
@@ -33,4 +35,4 @@ class InjectablesRegistry extends injectable_decorators_1.InjectableRegistryImp
33
35
  }
34
36
  exports.InjectablesRegistry = InjectablesRegistry;
35
37
 
36
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L2luamVjdGFibGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJFQUd5QztBQUN6Qyw2Q0FBMEM7QUFDMUMseUVBQXlFO0FBQ3pFLG1DQUE4RDtBQUM5RCx3REFBMkQ7QUFDM0Qsb0RBQWlEO0FBRWpELE1BQWEsbUJBQW9CLFNBQVEsNkNBQXFCO0lBQzVEO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsR0FBRyxDQUFJLElBQVk7UUFDakIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVTtZQUNiLElBQUksQ0FBQztnQkFDSCxNQUFNLENBQUMsR0FBRyw0QkFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDO29CQUFFLFVBQVUsR0FBRyx1QkFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixNQUFNLE9BQU8sR0FDWCxPQUFPLENBQUMsV0FBVyxDQUNqQixpQkFBTyxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLE9BQU8sQ0FBQyxFQUNwQyxVQUFVLENBQUMsV0FBVyxDQUN2Qjt3QkFDRCxPQUFPLENBQUMsV0FBVyxDQUNqQixpQkFBTyxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLE9BQU8sQ0FBQyxFQUNwQyxDQUEwQixDQUMzQixDQUFDO29CQUNKLG1DQUFXLENBQUMsUUFBUSxDQUNsQixVQUFVLEVBQ1YsSUFBQSwyQ0FBbUMsRUFDakMsQ0FBMEIsRUFDMUIsT0FBTyxDQUNSLENBQ0YsQ0FBQztnQkFDSixDQUFDO2dCQUNELDZEQUE2RDtZQUMvRCxDQUFDO1lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztRQUNILE9BQU8sVUFBMkIsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUFuQ0Qsa0RBbUNDIiwiZmlsZSI6InJlcG9zaXRvcnkvaW5qZWN0YWJsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlUmVnaXN0cnlJbXAsXG4gIEluamVjdGFibGVzLFxufSBmcm9tIFwiQGRlY2FmLXRzL2luamVjdGFibGUtZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuL1JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IE1vZGVsLCBNb2RlbENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVJbmplY3RhYmxlTmFtZUZvclJlcG9zaXRvcnkgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBJbmplY3RhYmxlc1JlZ2lzdHJ5IGV4dGVuZHMgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldDxUPihuYW1lOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgaW5qZWN0YWJsZSA9IHN1cGVyLmdldChuYW1lKTtcbiAgICBpZiAoIWluamVjdGFibGUpXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtID0gTW9kZWwuZ2V0KG5hbWUpO1xuICAgICAgICBpZiAobSkgaW5qZWN0YWJsZSA9IFJlcG9zaXRvcnkuZm9yTW9kZWwobSk7XG4gICAgICAgIGlmIChpbmplY3RhYmxlKSB7XG4gICAgICAgICAgY29uc3QgZmxhdm91ciA9XG4gICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICAgICAgICBBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUiksXG4gICAgICAgICAgICAgIGluamVjdGFibGUuY29uc3RydWN0b3JcbiAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgICAgICAgIEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSxcbiAgICAgICAgICAgICAgbSBhcyBNb2RlbENvbnN0cnVjdG9yPGFueT5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgSW5qZWN0YWJsZXMucmVnaXN0ZXIoXG4gICAgICAgICAgICBpbmplY3RhYmxlLFxuICAgICAgICAgICAgZ2VuZXJhdGVJbmplY3RhYmxlTmFtZUZvclJlcG9zaXRvcnkoXG4gICAgICAgICAgICAgIG0gYXMgTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgICAgICAgICAgICBmbGF2b3VyXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICByZXR1cm4gaW5qZWN0YWJsZSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
38
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L2luamVjdGFibGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJFQUd5QztBQUN6Qyw2Q0FBMEM7QUFDMUMseUVBQXlFO0FBQ3pFLG1DQUE4RDtBQUM5RCx3REFBMkQ7QUFDM0Qsb0RBQWlEO0FBRWpELE1BQWEsbUJBQW9CLFNBQVEsNkNBQXFCO0lBQzVEO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsR0FBRyxDQUFJLElBQVk7UUFDakIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVTtZQUNiLElBQUksQ0FBQztnQkFDSCxNQUFNLENBQUMsR0FBRyw0QkFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDO29CQUFFLFVBQVUsR0FBRyx1QkFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixJQUFJLFVBQVUsWUFBWSx1QkFBVTt3QkFBRSxPQUFPLFVBQWUsQ0FBQztvQkFDN0QsTUFBTSxPQUFPLEdBQ1gsT0FBTyxDQUFDLFdBQVcsQ0FDakIsaUJBQU8sQ0FBQyxHQUFHLENBQUMsMkJBQWUsQ0FBQyxPQUFPLENBQUMsRUFDcEMsVUFBVSxDQUFDLFdBQVcsQ0FDdkI7d0JBQ0QsT0FBTyxDQUFDLFdBQVcsQ0FDakIsaUJBQU8sQ0FBQyxHQUFHLENBQUMsMkJBQWUsQ0FBQyxPQUFPLENBQUMsRUFDcEMsQ0FBMEIsQ0FDM0IsQ0FBQztvQkFDSixtQ0FBVyxDQUFDLFFBQVEsQ0FDbEIsVUFBVSxFQUNWLElBQUEsMkNBQW1DLEVBQ2pDLENBQTBCLEVBQzFCLE9BQU8sQ0FDUixDQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCw2REFBNkQ7WUFDL0QsQ0FBQztZQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7UUFDSCxPQUFPLFVBQTJCLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBcENELGtEQW9DQyIsImZpbGUiOiJyZXBvc2l0b3J5L2luamVjdGFibGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wLFxuICBJbmplY3RhYmxlcyxcbn0gZnJvbSBcIkBkZWNhZi10cy9pbmplY3RhYmxlLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi9SZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBNb2RlbCwgTW9kZWxDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGdlbmVyYXRlSW5qZWN0YWJsZU5hbWVGb3JSZXBvc2l0b3J5IH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvQWRhcHRlclwiO1xuXG5leHBvcnQgY2xhc3MgSW5qZWN0YWJsZXNSZWdpc3RyeSBleHRlbmRzIEluamVjdGFibGVSZWdpc3RyeUltcCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQ8VD4obmFtZTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGluamVjdGFibGUgPSBzdXBlci5nZXQobmFtZSk7XG4gICAgaWYgKCFpbmplY3RhYmxlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbSA9IE1vZGVsLmdldChuYW1lKTtcbiAgICAgICAgaWYgKG0pIGluamVjdGFibGUgPSBSZXBvc2l0b3J5LmZvck1vZGVsKG0pO1xuICAgICAgICBpZiAoaW5qZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChpbmplY3RhYmxlIGluc3RhbmNlb2YgUmVwb3NpdG9yeSkgcmV0dXJuIGluamVjdGFibGUgYXMgVDtcbiAgICAgICAgICBjb25zdCBmbGF2b3VyID1cbiAgICAgICAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgICAgICAgIEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSxcbiAgICAgICAgICAgICAgaW5qZWN0YWJsZS5jb25zdHJ1Y3RvclxuICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgICAgICAgQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpLFxuICAgICAgICAgICAgICBtIGFzIE1vZGVsQ29uc3RydWN0b3I8YW55PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBJbmplY3RhYmxlcy5yZWdpc3RlcihcbiAgICAgICAgICAgIGluamVjdGFibGUsXG4gICAgICAgICAgICBnZW5lcmF0ZUluamVjdGFibGVOYW1lRm9yUmVwb3NpdG9yeShcbiAgICAgICAgICAgICAgbSBhcyBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgICAgICAgICAgIGZsYXZvdXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIHJldHVybiBpbmplY3RhYmxlIGFzIFQgfCB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
 
4
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoicmVwb3NpdG9yeS90eXBlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhc2NhZGUsIE9yZGVyRGlyZWN0aW9uIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgZGVmaW5lcyB0aGUgY2FzY2FkaW5nIGJlaGF2aW91clxuICovXG5leHBvcnQgdHlwZSBDYXNjYWRlTWV0YWRhdGEgPSB7XG4gIHVwZGF0ZTogQ2FzY2FkZTtcbiAgZGVsZXRlOiBDYXNjYWRlO1xufTtcblxuZXhwb3J0IHR5cGUgSW5kZXhNZXRhZGF0YSA9IHtcbiAgZGlyZWN0aW9ucz86IE9yZGVyRGlyZWN0aW9uWzJdO1xuICBjb21wb3NpdGlvbnM/OiBzdHJpbmdbXTtcbn07XG4iXX0=
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoicmVwb3NpdG9yeS90eXBlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhc2NhZGUsIE9yZGVyRGlyZWN0aW9uIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgZGVmaW5lcyB0aGUgY2FzY2FkaW5nIGJlaGF2aW91clxuICovXG5leHBvcnQgdHlwZSBDYXNjYWRlTWV0YWRhdGEgPSB7XG4gIHVwZGF0ZTogQ2FzY2FkZTtcbiAgZGVsZXRlOiBDYXNjYWRlO1xufTtcblxuZXhwb3J0IHR5cGUgSW5kZXhNZXRhZGF0YSA9IHtcbiAgZGlyZWN0aW9ucz86IE9yZGVyRGlyZWN0aW9uWzJdO1xuICBjb21wb3NpdGlvbnM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIE5hbWVkSW5kZXhNZXRhZGF0YSA9IEluZGV4TWV0YWRhdGEgJiB7XG4gIHN1ZmZpeDogc3RyaW5nO1xufTtcbiJdfQ==
@@ -10,3 +10,6 @@ export type IndexMetadata = {
10
10
  directions?: OrderDirection[2];
11
11
  compositions?: string[];
12
12
  };
13
+ export type NamedIndexMetadata = IndexMetadata & {
14
+ suffix: string;
15
+ };
@@ -1,42 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.bootRepository = bootRepository;
4
- exports.getTableName = getTableName;
5
3
  exports.generateInjectableNameForRepository = generateInjectableNameForRepository;
6
4
  const db_decorators_1 = require("@decaf-ts/db-decorators");
7
- const injectable_decorators_1 = require("@decaf-ts/injectable-decorators");
8
- const Repository_1 = require("./Repository.cjs");
9
5
  const decorator_validation_1 = require("@decaf-ts/decorator-validation");
10
6
  const Adapter_1 = require("../persistence/Adapter.cjs");
11
7
  const constants_1 = require("../persistence/constants.cjs");
12
8
  const decorator_validation_2 = require("@decaf-ts/decorator-validation");
13
- function bootRepository(model, original) {
14
- const repo = Repository_1.Repository.forModel(model);
15
- console.log(repo);
16
- const injectableName = Reflect.getMetadata(Repository_1.Repository.key(db_decorators_1.DBKeys.REPOSITORY), model);
17
- if (!injectableName)
18
- throw new db_decorators_1.InternalError(`No Repository defined for model ${model.constructor.name}`);
19
- const flavour = Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER), original);
20
- if (!flavour)
21
- throw new db_decorators_1.InternalError(`Could not find persistence adapter definition for repository ${original.name}`);
22
- try {
23
- const adapter = Adapter_1.Adapter.get(flavour);
24
- return injectable_decorators_1.Injectables.get(injectableName, adapter);
25
- }
26
- catch (e) {
27
- throw new db_decorators_1.InternalError(e);
28
- }
29
- }
30
- function getTableName(model) {
31
- const metadata = Reflect.getMetadata(Adapter_1.Adapter.key(constants_1.PersistenceKeys.TABLE), model instanceof decorator_validation_2.Model ? model.constructor : model);
32
- if (metadata) {
33
- return metadata;
34
- }
35
- if (model instanceof decorator_validation_2.Model) {
36
- return model.constructor.name;
37
- }
38
- return model.name;
39
- }
9
+ const Repository_1 = require("./Repository.cjs");
40
10
  function generateInjectableNameForRepository(model, flavour) {
41
11
  if (!flavour) {
42
12
  const key = Adapter_1.Adapter.key(constants_1.PersistenceKeys.ADAPTER);
@@ -44,7 +14,7 @@ function generateInjectableNameForRepository(model, flavour) {
44
14
  if (!flavour)
45
15
  throw new db_decorators_1.InternalError(`Could not retrieve flavour from model ${model instanceof decorator_validation_2.Model ? model.constructor.name : model.name}`);
46
16
  }
47
- return (0, decorator_validation_1.sf)(constants_1.PersistenceKeys.INJECTABLE, flavour, getTableName(model));
17
+ return (0, decorator_validation_1.sf)(constants_1.PersistenceKeys.INJECTABLE, flavour, Repository_1.Repository.table(model));
48
18
  }
49
19
 
50
- //# sourceMappingURL=data:application/json;charset=utf8;base64,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ZSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyIsImZpbGUiOiJyZXBvc2l0b3J5L3V0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREJLZXlzLCBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlcyB9IGZyb20gXCJAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4vUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIHNmIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RSZXBvc2l0b3J5PFQgZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBDb25zdHJ1Y3RvcjxUPixcbiAgb3JpZ2luYWw6IENvbnN0cnVjdG9yPFJlcG9zaXRvcnk8VD4+XG4pOiBSZXBvc2l0b3J5PFQ+IHtcbiAgY29uc3QgcmVwbyA9IFJlcG9zaXRvcnkuZm9yTW9kZWwobW9kZWwpO1xuICBjb25zb2xlLmxvZyhyZXBvKTtcbiAgY29uc3QgaW5qZWN0YWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgUmVwb3NpdG9yeS5rZXkoREJLZXlzLlJFUE9TSVRPUlkpLFxuICAgIG1vZGVsXG4gICk7XG4gIGlmICghaW5qZWN0YWJsZU5hbWUpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgTm8gUmVwb3NpdG9yeSBkZWZpbmVkIGZvciBtb2RlbCAke21vZGVsLmNvbnN0cnVjdG9yLm5hbWV9YFxuICAgICk7XG4gIGNvbnN0IGZsYXZvdXIgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgIEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSxcbiAgICBvcmlnaW5hbFxuICApO1xuICBpZiAoIWZsYXZvdXIpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgQ291bGQgbm90IGZpbmQgcGVyc2lzdGVuY2UgYWRhcHRlciBkZWZpbml0aW9uIGZvciByZXBvc2l0b3J5ICR7b3JpZ2luYWwubmFtZX1gXG4gICAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBhZGFwdGVyID0gQWRhcHRlci5nZXQoZmxhdm91cik7XG4gICAgcmV0dXJuIEluamVjdGFibGVzLmdldChpbmplY3RhYmxlTmFtZSwgYWRhcHRlcikgYXMgUmVwb3NpdG9yeTxUPjtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTmFtZTxUIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBUIHwgQ29uc3RydWN0b3I8VD4pIHtcbiAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgIEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5UQUJMRSksXG4gICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbCA/IG1vZGVsLmNvbnN0cnVjdG9yIDogbW9kZWxcbiAgKTtcbiAgaWYgKG1ldGFkYXRhKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9XG4gIGlmIChtb2RlbCBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgcmV0dXJuIG1vZGVsLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cbiAgcmV0dXJuIG1vZGVsLm5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUluamVjdGFibGVOYW1lRm9yUmVwb3NpdG9yeTxUIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogQ29uc3RydWN0b3I8VD4gfCBULFxuICBmbGF2b3VyPzogc3RyaW5nXG4pIHtcbiAgaWYgKCFmbGF2b3VyKSB7XG4gICAgY29uc3Qga2V5ID0gQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpO1xuICAgIGZsYXZvdXIgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAga2V5LFxuICAgICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbCA/IG1vZGVsLmNvbnN0cnVjdG9yIDogbW9kZWxcbiAgICApO1xuICAgIGlmICghZmxhdm91cilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IHJldHJpZXZlIGZsYXZvdXIgZnJvbSBtb2RlbCAke21vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lIDogbW9kZWwubmFtZX1gXG4gICAgICApO1xuICB9XG4gIHJldHVybiBzZihQZXJzaXN0ZW5jZUtleXMuSU5KRUNUQUJMRSwgZmxhdm91ciwgZ2V0VGFibGVOYW1lKG1vZGVsKSk7XG59XG4iXX0=
20
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9yZXBvc2l0b3J5L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esa0ZBZ0JDO0FBdkJELDJEQUF3RDtBQUN4RCx5RUFBaUU7QUFDakUsb0RBQWlEO0FBQ2pELHdEQUEyRDtBQUMzRCx5RUFBdUQ7QUFDdkQsNkNBQTBDO0FBRTFDLFNBQWdCLG1DQUFtQyxDQUNqRCxLQUF5QixFQUN6QixPQUFnQjtJQUVoQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLEdBQUcsR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQywyQkFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUMzQixHQUFHLEVBQ0gsS0FBSyxZQUFZLDRCQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDbkQsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPO1lBQ1YsTUFBTSxJQUFJLDZCQUFhLENBQ3JCLHlDQUF5QyxLQUFLLFlBQVksNEJBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FDeEcsQ0FBQztJQUNOLENBQUM7SUFDRCxPQUFPLElBQUEseUJBQUUsRUFBQywyQkFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsdUJBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDIiwiZmlsZSI6InJlcG9zaXRvcnkvdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3Rvciwgc2YgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0FkYXB0ZXJcIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuL1JlcG9zaXRvcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSW5qZWN0YWJsZU5hbWVGb3JSZXBvc2l0b3J5PFQgZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBDb25zdHJ1Y3RvcjxUPiB8IFQsXG4gIGZsYXZvdXI/OiBzdHJpbmdcbikge1xuICBpZiAoIWZsYXZvdXIpIHtcbiAgICBjb25zdCBrZXkgPSBBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUik7XG4gICAgZmxhdm91ciA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICBrZXksXG4gICAgICBtb2RlbCBpbnN0YW5jZW9mIE1vZGVsID8gbW9kZWwuY29uc3RydWN0b3IgOiBtb2RlbFxuICAgICk7XG4gICAgaWYgKCFmbGF2b3VyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgcmV0cmlldmUgZmxhdm91ciBmcm9tIG1vZGVsICR7bW9kZWwgaW5zdGFuY2VvZiBNb2RlbCA/IG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUgOiBtb2RlbC5uYW1lfWBcbiAgICAgICk7XG4gIH1cbiAgcmV0dXJuIHNmKFBlcnNpc3RlbmNlS2V5cy5JTkpFQ1RBQkxFLCBmbGF2b3VyLCBSZXBvc2l0b3J5LnRhYmxlKG1vZGVsKSk7XG59XG4iXX0=
@@ -1,6 +1,3 @@
1
- import { Repository } from "./Repository";
2
1
  import { Constructor } from "@decaf-ts/decorator-validation";
3
2
  import { Model } from "@decaf-ts/decorator-validation";
4
- export declare function bootRepository<T extends Model>(model: Constructor<T>, original: Constructor<Repository<T>>): Repository<T>;
5
- export declare function getTableName<T extends Model>(model: T | Constructor<T>): any;
6
3
  export declare function generateInjectableNameForRepository<T extends Model>(model: Constructor<T> | T, flavour?: string): string;