@decaf-ts/for-http 0.0.11 → 0.2.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 (43) hide show
  1. package/dist/for-http.cjs +240 -0
  2. package/dist/for-http.esm.cjs +231 -0
  3. package/lib/RestRepository.cjs +1 -2
  4. package/lib/RestRepository.d.ts +7 -0
  5. package/lib/RestService.cjs +1 -2
  6. package/{dist/types → lib}/RestService.d.ts +3 -3
  7. package/lib/adapter.cjs +6 -5
  8. package/{dist/types → lib}/adapter.d.ts +8 -8
  9. package/lib/axios/axios.cjs +50 -0
  10. package/{dist/types → lib/axios}/axios.d.ts +5 -3
  11. package/lib/axios/index.cjs +18 -0
  12. package/lib/axios/index.d.ts +1 -0
  13. package/lib/axios/types.cjs +3 -0
  14. package/lib/axios/types.d.ts +2 -0
  15. package/lib/esm/RestRepository.d.ts +7 -0
  16. package/lib/esm/RestRepository.js +1 -2
  17. package/lib/esm/RestService.d.ts +43 -0
  18. package/lib/esm/RestService.js +1 -2
  19. package/lib/esm/adapter.d.ts +23 -0
  20. package/lib/esm/adapter.js +8 -7
  21. package/lib/esm/axios/axios.d.ts +13 -0
  22. package/lib/esm/axios/axios.js +46 -0
  23. package/lib/esm/axios/index.d.ts +1 -0
  24. package/lib/esm/axios/index.js +2 -0
  25. package/lib/esm/axios/types.d.ts +2 -0
  26. package/lib/esm/axios/types.js +2 -0
  27. package/{dist/types → lib/esm}/index.d.ts +2 -2
  28. package/lib/esm/index.js +3 -4
  29. package/lib/esm/types.d.ts +8 -0
  30. package/lib/esm/types.js +1 -2
  31. package/lib/index.cjs +3 -4
  32. package/lib/index.d.ts +23 -0
  33. package/lib/types.cjs +1 -2
  34. package/lib/types.d.ts +8 -0
  35. package/package.json +31 -38
  36. package/dist/esm/for-http.js +0 -2
  37. package/dist/esm/for-http.js.LICENSE.txt +0 -14
  38. package/dist/for-http.js +0 -2
  39. package/dist/for-http.js.LICENSE.txt +0 -14
  40. package/dist/types/RestRepository.d.ts +0 -5
  41. package/dist/types/types.d.ts +0 -4
  42. package/lib/axios.cjs +0 -51
  43. package/lib/esm/axios.js +0 -47
@@ -0,0 +1,240 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@decaf-ts/core'), require('@decaf-ts/db-decorators')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@decaf-ts/core', '@decaf-ts/db-decorators'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["for-http"] = {}, global.core, global.dbDecorators));
5
+ })(this, (function (exports, core, dbDecorators) { 'use strict';
6
+
7
+ class RestService {
8
+ get class() {
9
+ if (!this._class)
10
+ throw new dbDecorators.InternalError("No class definition found for this repository");
11
+ return this._class;
12
+ }
13
+ get pk() {
14
+ if (!this._pk)
15
+ this._pk = dbDecorators.findPrimaryKey(new this.class()).id;
16
+ return this._pk;
17
+ }
18
+ get adapter() {
19
+ if (!this._adapter)
20
+ throw new dbDecorators.InternalError("No adapter found for this repository. did you use the @uses decorator or pass it in the constructor?");
21
+ return this._adapter;
22
+ }
23
+ get tableName() {
24
+ if (!this._tableName)
25
+ this._tableName = core.Repository.table(this.class);
26
+ return this._tableName;
27
+ }
28
+ constructor(adapter, clazz) {
29
+ this.observers = [];
30
+ this._adapter = adapter;
31
+ if (clazz)
32
+ this._class = clazz;
33
+ }
34
+ async create(model, ...args) {
35
+ // eslint-disable-next-line prefer-const
36
+ let { record, id } = this.adapter.prepare(model, this.pk);
37
+ record = await this.adapter.create(this.tableName, id, record, ...args);
38
+ return this.adapter.revert(record, this.class, this.pk, id);
39
+ }
40
+ async read(id, ...args) {
41
+ const m = await this.adapter.read(this.tableName, id, ...args);
42
+ return this.adapter.revert(m, this.class, this.pk, id);
43
+ }
44
+ async update(model, ...args) {
45
+ // eslint-disable-next-line prefer-const
46
+ let { record, id } = this.adapter.prepare(model, this.pk);
47
+ record = await this.adapter.update(this.tableName, id, record, ...args);
48
+ return this.adapter.revert(record, this.class, this.pk, id);
49
+ }
50
+ async delete(id, ...args) {
51
+ const m = await this.adapter.delete(this.tableName, id, ...args);
52
+ return this.adapter.revert(m, this.class, this.pk, id);
53
+ }
54
+ async createAll(models, ...args) {
55
+ if (!models.length)
56
+ return models;
57
+ const prepared = models.map((m) => this.adapter.prepare(m, this.pk));
58
+ const ids = prepared.map((p) => p.id);
59
+ let records = prepared.map((p) => p.record);
60
+ records = await this.adapter.createAll(this.tableName, ids, records, ...args);
61
+ return records.map((r, i) => this.adapter.revert(r, this.class, this.pk, ids[i]));
62
+ }
63
+ async deleteAll(keys, ...args) {
64
+ const results = await this.adapter.deleteAll(this.tableName, keys, ...args);
65
+ return results.map((r, i) => this.adapter.revert(r, this.class, this.pk, keys[i]));
66
+ }
67
+ async readAll(keys, ...args) {
68
+ const records = await this.adapter.readAll(this.tableName, keys, ...args);
69
+ return records.map((r, i) => this.adapter.revert(r, this.class, this.pk, keys[i]));
70
+ }
71
+ async updateAll(models, ...args) {
72
+ const records = models.map((m) => this.adapter.prepare(m, this.pk));
73
+ const updated = await this.adapter.updateAll(this.tableName, records.map((r) => r.id), records.map((r) => r.record), ...args);
74
+ return updated.map((u, i) => this.adapter.revert(u, this.class, this.pk, records[i].id));
75
+ }
76
+ /**
77
+ * @summary Registers an {@link Observer}
78
+ * @param {Observer} observer
79
+ *
80
+ * @see {Observable#observe}
81
+ */
82
+ observe(observer) {
83
+ const index = this.observers.indexOf(observer);
84
+ if (index !== -1)
85
+ throw new dbDecorators.InternalError("Observer already registered");
86
+ this.observers.push(observer);
87
+ }
88
+ /**
89
+ * @summary Unregisters an {@link Observer}
90
+ * @param {Observer} observer
91
+ *
92
+ * @see {Observable#unObserve}
93
+ */
94
+ unObserve(observer) {
95
+ const index = this.observers.indexOf(observer);
96
+ if (index === -1)
97
+ throw new dbDecorators.InternalError("Failed to find Observer");
98
+ this.observers.splice(index, 1);
99
+ }
100
+ /**
101
+ * @summary calls all registered {@link Observer}s to update themselves
102
+ * @param {any[]} [args] optional arguments to be passed to the {@link Observer#refresh} method
103
+ */
104
+ async updateObservers(...args) {
105
+ const results = await Promise.allSettled(this.observers.map((o) => o.refresh(...args)));
106
+ results.forEach((result, i) => {
107
+ if (result.status === "rejected")
108
+ console.warn(`Failed to update observable ${this.observers[i]}: ${result.reason}`);
109
+ });
110
+ }
111
+ }
112
+
113
+ class HttpAdapter extends core.Adapter {
114
+ constructor(native, config, flavour = "http") {
115
+ super(native, flavour);
116
+ this.config = config;
117
+ }
118
+ async context(operation, overrides, model) {
119
+ return (await super.context(operation, Object.assign({
120
+ headers: {},
121
+ }, overrides), model));
122
+ }
123
+ repository() {
124
+ return RestService;
125
+ }
126
+ url(tableName, queryParams) {
127
+ const url = new URL(`${this.config.protocol}://${this.config.host}/${tableName}`);
128
+ if (queryParams)
129
+ Object.entries(queryParams).forEach(([key, value]) => url.searchParams.append(key, value.toString()));
130
+ return encodeURI(url.toString());
131
+ }
132
+ parseError(err) {
133
+ const { message } = err;
134
+ switch (message) {
135
+ default:
136
+ return err;
137
+ }
138
+ }
139
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
140
+ async initialize(...args) {
141
+ // do nothing
142
+ }
143
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
144
+ raw(rawInput, process, ...args) {
145
+ throw new core.UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class");
146
+ }
147
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
148
+ Sequence(options) {
149
+ throw new core.UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class");
150
+ }
151
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
152
+ parseCondition(condition) {
153
+ throw new core.UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class");
154
+ }
155
+ get Statement() {
156
+ throw new core.UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class");
157
+ }
158
+ get Clauses() {
159
+ throw new dbDecorators.InternalError("Api is not natively available for HttpAdapters. If required, please extends this class");
160
+ }
161
+ }
162
+
163
+ class AxiosHttpAdapter extends HttpAdapter {
164
+ constructor(native, config, flavour = "axios") {
165
+ super(native, config, flavour);
166
+ }
167
+ async request(details) {
168
+ return this.native.request(details);
169
+ }
170
+ async create(tableName, id, model) {
171
+ try {
172
+ const url = this.url(tableName);
173
+ return this.native.post(url, model);
174
+ }
175
+ catch (e) {
176
+ throw this.parseError(e);
177
+ }
178
+ }
179
+ async read(tableName, id) {
180
+ try {
181
+ const url = this.url(tableName, { id: id });
182
+ return this.native.get(url);
183
+ }
184
+ catch (e) {
185
+ throw this.parseError(e);
186
+ }
187
+ }
188
+ async update(tableName, id, model) {
189
+ try {
190
+ const url = this.url(tableName);
191
+ return this.native.put(url, model);
192
+ }
193
+ catch (e) {
194
+ throw this.parseError(e);
195
+ }
196
+ }
197
+ async delete(tableName, id) {
198
+ try {
199
+ const url = this.url(tableName, { id: id });
200
+ return this.native.delete(url);
201
+ }
202
+ catch (e) {
203
+ throw this.parseError(e);
204
+ }
205
+ }
206
+ }
207
+
208
+ class RestRepository extends core.Repository {
209
+ constructor(adapter, clazz) {
210
+ super(adapter, clazz);
211
+ }
212
+ }
213
+
214
+ /**
215
+ * @summary Module summary
216
+ * @description Module description
217
+ * @module ts-workspace
218
+ */
219
+ /**
220
+ * @summary Namespace summary
221
+ * @description Namespace description
222
+ * @namespace Namespace
223
+ * @memberOf module:ts-workspace
224
+ */
225
+ /**
226
+ * @summary stores the current package version
227
+ * @description this is how you should document a constant
228
+ * @const VERSION
229
+ * @memberOf module:ts-workspace
230
+ */
231
+ const VERSION = "0.2.0";
232
+
233
+ exports.AxiosHttpAdapter = AxiosHttpAdapter;
234
+ exports.HttpAdapter = HttpAdapter;
235
+ exports.RestRepository = RestRepository;
236
+ exports.RestService = RestService;
237
+ exports.VERSION = VERSION;
238
+
239
+ }));
240
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yLWh0dHAuY2pzIiwic291cmNlcyI6WyIuLi9zcmMvUmVzdFNlcnZpY2UudHMiLCIuLi9zcmMvYWRhcHRlci50cyIsIi4uL3NyYy9heGlvcy9heGlvcy50cyIsIi4uL3NyYy9SZXN0UmVwb3NpdG9yeS50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCdWxrQ3J1ZE9wZXJhdG9yLFxuICBDb250ZXh0LFxuICBDcnVkT3BlcmF0b3IsXG4gIGZpbmRQcmltYXJ5S2V5LFxuICBJbnRlcm5hbEVycm9yLFxuICBSZXBvc2l0b3J5RmxhZ3MsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFJlcG9zaXRvcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IEh0dHBBZGFwdGVyIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuXG5leHBvcnQgY2xhc3MgUmVzdFNlcnZpY2U8XG4gICAgTSBleHRlbmRzIE1vZGVsLFxuICAgIFEsXG4gICAgQSBleHRlbmRzIEh0dHBBZGFwdGVyPGFueSwgUSwgRiwgQz4sXG4gICAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgICBDIGV4dGVuZHMgQ29udGV4dDxGPiA9IENvbnRleHQ8Rj4sXG4gID5cbiAgaW1wbGVtZW50cyBDcnVkT3BlcmF0b3I8TT4sIEJ1bGtDcnVkT3BlcmF0b3I8TT4sIE9ic2VydmFibGVcbntcbiAgcHJpdmF0ZSByZWFkb25seSBfY2xhc3MhOiBDb25zdHJ1Y3RvcjxNPjtcbiAgcHJpdmF0ZSBfcGshOiBrZXlvZiBNO1xuXG4gIGdldCBjbGFzcygpIHtcbiAgICBpZiAoIXRoaXMuX2NsYXNzKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJObyBjbGFzcyBkZWZpbml0aW9uIGZvdW5kIGZvciB0aGlzIHJlcG9zaXRvcnlcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NsYXNzO1xuICB9XG5cbiAgZ2V0IHBrKCkge1xuICAgIGlmICghdGhpcy5fcGspIHRoaXMuX3BrID0gZmluZFByaW1hcnlLZXkobmV3IHRoaXMuY2xhc3MoKSkuaWQ7XG4gICAgcmV0dXJuIHRoaXMuX3BrO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9ic2VydmVyczogT2JzZXJ2ZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FkYXB0ZXIhOiBBO1xuICBwcml2YXRlIF90YWJsZU5hbWUhOiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGdldCBhZGFwdGVyKCk6IEEge1xuICAgIGlmICghdGhpcy5fYWRhcHRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBcIk5vIGFkYXB0ZXIgZm91bmQgZm9yIHRoaXMgcmVwb3NpdG9yeS4gZGlkIHlvdSB1c2UgdGhlIEB1c2VzIGRlY29yYXRvciBvciBwYXNzIGl0IGluIHRoZSBjb25zdHJ1Y3Rvcj9cIlxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5fYWRhcHRlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdGFibGVOYW1lKCkge1xuICAgIGlmICghdGhpcy5fdGFibGVOYW1lKSB0aGlzLl90YWJsZU5hbWUgPSBSZXBvc2l0b3J5LnRhYmxlKHRoaXMuY2xhc3MpO1xuICAgIHJldHVybiB0aGlzLl90YWJsZU5hbWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihhZGFwdGVyOiBBLCBjbGF6ej86IENvbnN0cnVjdG9yPE0+KSB7XG4gICAgdGhpcy5fYWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgaWYgKGNsYXp6KSB0aGlzLl9jbGFzcyA9IGNsYXp6O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKG1vZGVsOiBNLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgeyByZWNvcmQsIGlkIH0gPSB0aGlzLmFkYXB0ZXIucHJlcGFyZShtb2RlbCwgdGhpcy5wayk7XG4gICAgcmVjb3JkID0gYXdhaXQgdGhpcy5hZGFwdGVyLmNyZWF0ZSh0aGlzLnRhYmxlTmFtZSwgaWQsIHJlY29yZCwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQocmVjb3JkLCB0aGlzLmNsYXNzLCB0aGlzLnBrLCBpZCk7XG4gIH1cblxuICBhc3luYyByZWFkKGlkOiBzdHJpbmcgfCBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgY29uc3QgbSA9IGF3YWl0IHRoaXMuYWRhcHRlci5yZWFkKHRoaXMudGFibGVOYW1lLCBpZCwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQobSwgdGhpcy5jbGFzcywgdGhpcy5waywgaWQpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKG1vZGVsOiBNLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgeyByZWNvcmQsIGlkIH0gPSB0aGlzLmFkYXB0ZXIucHJlcGFyZShtb2RlbCwgdGhpcy5wayk7XG4gICAgcmVjb3JkID0gYXdhaXQgdGhpcy5hZGFwdGVyLnVwZGF0ZSh0aGlzLnRhYmxlTmFtZSwgaWQsIHJlY29yZCwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQocmVjb3JkLCB0aGlzLmNsYXNzLCB0aGlzLnBrLCBpZCk7XG4gIH1cblxuICBhc3luYyBkZWxldGUoaWQ6IHN0cmluZyB8IG51bWJlciwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICBjb25zdCBtID0gYXdhaXQgdGhpcy5hZGFwdGVyLmRlbGV0ZSh0aGlzLnRhYmxlTmFtZSwgaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KG0sIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFsbChtb2RlbHM6IE1bXSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE1bXT4ge1xuICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIG1vZGVscztcbiAgICBjb25zdCBwcmVwYXJlZCA9IG1vZGVscy5tYXAoKG0pID0+IHRoaXMuYWRhcHRlci5wcmVwYXJlKG0sIHRoaXMucGspKTtcbiAgICBjb25zdCBpZHMgPSBwcmVwYXJlZC5tYXAoKHApID0+IHAuaWQpO1xuICAgIGxldCByZWNvcmRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLnJlY29yZCk7XG4gICAgcmVjb3JkcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGVBbGwoXG4gICAgICB0aGlzLnRhYmxlTmFtZSxcbiAgICAgIGlkcyBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICAgICAgcmVjb3JkcyxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIHJldHVybiByZWNvcmRzLm1hcCgociwgaSkgPT5cbiAgICAgIHRoaXMuYWRhcHRlci5yZXZlcnQociwgdGhpcy5jbGFzcywgdGhpcy5waywgaWRzW2ldIGFzIHN0cmluZyB8IG51bWJlcilcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQWxsKGtleXM6IHN0cmluZ1tdIHwgbnVtYmVyW10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5hZGFwdGVyLmRlbGV0ZUFsbCh0aGlzLnRhYmxlTmFtZSwga2V5cywgLi4uYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdHMubWFwKChyLCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydChyLCB0aGlzLmNsYXNzLCB0aGlzLnBrLCBrZXlzW2ldKVxuICAgICk7XG4gIH1cblxuICBhc3luYyByZWFkQWxsKGtleXM6IHN0cmluZ1tdIHwgbnVtYmVyW10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+IHtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJlYWRBbGwodGhpcy50YWJsZU5hbWUsIGtleXMsIC4uLmFyZ3MpO1xuICAgIHJldHVybiByZWNvcmRzLm1hcCgociwgaSkgPT5cbiAgICAgIHRoaXMuYWRhcHRlci5yZXZlcnQociwgdGhpcy5jbGFzcywgdGhpcy5waywga2V5c1tpXSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQWxsKG1vZGVsczogTVtdLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgcmVjb3JkcyA9IG1vZGVscy5tYXAoKG0pID0+IHRoaXMuYWRhcHRlci5wcmVwYXJlKG0sIHRoaXMucGspKTtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdGhpcy5hZGFwdGVyLnVwZGF0ZUFsbChcbiAgICAgIHRoaXMudGFibGVOYW1lLFxuICAgICAgcmVjb3Jkcy5tYXAoKHIpID0+IHIuaWQpLFxuICAgICAgcmVjb3Jkcy5tYXAoKHIpID0+IHIucmVjb3JkKSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIHJldHVybiB1cGRhdGVkLm1hcCgodSwgaSkgPT5cbiAgICAgIHRoaXMuYWRhcHRlci5yZXZlcnQodSwgdGhpcy5jbGFzcywgdGhpcy5waywgcmVjb3Jkc1tpXS5pZClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlZ2lzdGVycyBhbiB7QGxpbmsgT2JzZXJ2ZXJ9XG4gICAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG4gICAqXG4gICAqIEBzZWUge09ic2VydmFibGUjb2JzZXJ2ZX1cbiAgICovXG4gIG9ic2VydmUob2JzZXJ2ZXI6IE9ic2VydmVyKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm9ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk9ic2VydmVyIGFscmVhZHkgcmVnaXN0ZXJlZFwiKTtcbiAgICB0aGlzLm9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBVbnJlZ2lzdGVycyBhbiB7QGxpbmsgT2JzZXJ2ZXJ9XG4gICAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG4gICAqXG4gICAqIEBzZWUge09ic2VydmFibGUjdW5PYnNlcnZlfVxuICAgKi9cbiAgdW5PYnNlcnZlKG9ic2VydmVyOiBPYnNlcnZlcik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XG4gICAgaWYgKGluZGV4ID09PSAtMSkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJGYWlsZWQgdG8gZmluZCBPYnNlcnZlclwiKTtcbiAgICB0aGlzLm9ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IGNhbGxzIGFsbCByZWdpc3RlcmVkIHtAbGluayBPYnNlcnZlcn1zIHRvIHVwZGF0ZSB0aGVtc2VsdmVzXG4gICAqIEBwYXJhbSB7YW55W119IFthcmdzXSBvcHRpb25hbCBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSB7QGxpbmsgT2JzZXJ2ZXIjcmVmcmVzaH0gbWV0aG9kXG4gICAqL1xuICBhc3luYyB1cGRhdGVPYnNlcnZlcnMoLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgdGhpcy5vYnNlcnZlcnMubWFwKChvKSA9PiBvLnJlZnJlc2goLi4uYXJncykpXG4gICAgKTtcbiAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdCwgaSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIilcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBGYWlsZWQgdG8gdXBkYXRlIG9ic2VydmFibGUgJHt0aGlzLm9ic2VydmVyc1tpXX06ICR7cmVzdWx0LnJlYXNvbn1gXG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFkYXB0ZXIsXG4gIENsYXVzZUZhY3RvcnksXG4gIENvbmRpdGlvbixcbiAgUmVwb3NpdG9yeSxcbiAgU2VxdWVuY2UsXG4gIFNlcXVlbmNlT3B0aW9ucyxcbiAgU3RhdGVtZW50LFxuICBVbnN1cHBvcnRlZEVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7XG4gIEJhc2VFcnJvcixcbiAgQ29udGV4dCxcbiAgSW50ZXJuYWxFcnJvcixcbiAgT3BlcmF0aW9uS2V5cyxcbiAgUmVwb3NpdG9yeUZsYWdzLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IEh0dHBDb25maWcgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tIFwiLi9SZXN0U2VydmljZVwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSHR0cEFkYXB0ZXI8XG4gIFksXG4gIFEsXG4gIEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsXG4gIEMgZXh0ZW5kcyBDb250ZXh0PEY+LFxuPiBleHRlbmRzIEFkYXB0ZXI8WSwgUSwgRiwgQz4ge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgbmF0aXZlOiBZLFxuICAgIHByb3RlY3RlZCBjb25maWc6IEh0dHBDb25maWcsXG4gICAgZmxhdm91cjogc3RyaW5nID0gXCJodHRwXCJcbiAgKSB7XG4gICAgc3VwZXIobmF0aXZlLCBmbGF2b3VyKTtcbiAgfVxuXG4gIGFzeW5jIGNvbnRleHQ8XG4gICAgTSBleHRlbmRzIE1vZGVsLFxuICAgIEMgZXh0ZW5kcyBDb250ZXh0PEY+LFxuICAgIEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsXG4gID4oXG4gICAgb3BlcmF0aW9uOlxuICAgICAgfCBPcGVyYXRpb25LZXlzLkNSRUFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLlJFQURcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5VUERBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgb3ZlcnJpZGVzOiBQYXJ0aWFsPEY+LFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPlxuICApOiBQcm9taXNlPEM+IHtcbiAgICByZXR1cm4gKGF3YWl0IHN1cGVyLmNvbnRleHQoXG4gICAgICBvcGVyYXRpb24sXG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIH0sXG4gICAgICAgIG92ZXJyaWRlc1xuICAgICAgKSxcbiAgICAgIG1vZGVsXG4gICAgKSkgYXMgdW5rbm93biBhcyBDO1xuICB9XG5cbiAgcmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw+KCk6IENvbnN0cnVjdG9yPFxuICAgIFJlcG9zaXRvcnk8TSwgUSwgSHR0cEFkYXB0ZXI8WSwgUSwgRiwgQz4+XG4gID4ge1xuICAgIHJldHVybiBSZXN0U2VydmljZSBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFxuICAgICAgUmVwb3NpdG9yeTxNLCBRLCBIdHRwQWRhcHRlcjxZLCBRLCBGLCBDPj5cbiAgICA+O1xuICB9XG5cbiAgcHJvdGVjdGVkIHVybChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBxdWVyeVBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChcbiAgICAgIGAke3RoaXMuY29uZmlnLnByb3RvY29sfTovLyR7dGhpcy5jb25maWcuaG9zdH0vJHt0YWJsZU5hbWV9YFxuICAgICk7XG4gICAgaWYgKHF1ZXJ5UGFyYW1zKVxuICAgICAgT2JqZWN0LmVudHJpZXMocXVlcnlQYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgICAgKTtcblxuICAgIHJldHVybiBlbmNvZGVVUkkodXJsLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgcGFyc2VFcnJvcihlcnI6IEVycm9yKTogQmFzZUVycm9yIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IGVycjtcbiAgICBzd2l0Y2ggKG1lc3NhZ2UpIHtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBlcnIgYXMgQmFzZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYXN5bmMgaW5pdGlhbGl6ZSguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuXG4gIGFic3RyYWN0IHJlcXVlc3Q8Vj4oZGV0YWlsczogUSk6IFByb21pc2U8Vj47XG5cbiAgYWJzdHJhY3QgY3JlYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICBhYnN0cmFjdCByZWFkKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICBhYnN0cmFjdCB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIGFic3RyYWN0IGRlbGV0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICByYXc8Uj4ocmF3SW5wdXQ6IFEsIHByb2Nlc3M6IGJvb2xlYW4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSPiB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICBcIkFwaSBpcyBub3QgbmF0aXZlbHkgYXZhaWxhYmxlIGZvciBIdHRwQWRhcHRlcnMuIElmIHJlcXVpcmVkLCBwbGVhc2UgZXh0ZW5kcyB0aGlzIGNsYXNzXCJcbiAgICApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBTZXF1ZW5jZShvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpOiBQcm9taXNlPFNlcXVlbmNlPiB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICBcIkFwaSBpcyBub3QgbmF0aXZlbHkgYXZhaWxhYmxlIGZvciBIdHRwQWRhcHRlcnMuIElmIHJlcXVpcmVkLCBwbGVhc2UgZXh0ZW5kcyB0aGlzIGNsYXNzXCJcbiAgICApO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwYXJzZUNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbik6IFEge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKFxuICAgICAgXCJBcGkgaXMgbm90IG5hdGl2ZWx5IGF2YWlsYWJsZSBmb3IgSHR0cEFkYXB0ZXJzLiBJZiByZXF1aXJlZCwgcGxlYXNlIGV4dGVuZHMgdGhpcyBjbGFzc1wiXG4gICAgKTtcbiAgfVxuICBnZXQgU3RhdGVtZW50KCk6IFN0YXRlbWVudDxRPiB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICBcIkFwaSBpcyBub3QgbmF0aXZlbHkgYXZhaWxhYmxlIGZvciBIdHRwQWRhcHRlcnMuIElmIHJlcXVpcmVkLCBwbGVhc2UgZXh0ZW5kcyB0aGlzIGNsYXNzXCJcbiAgICApO1xuICB9XG4gIGdldCBDbGF1c2VzKCk6IENsYXVzZUZhY3Rvcnk8WSwgUSwgdHlwZW9mIHRoaXM+IHtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIFwiQXBpIGlzIG5vdCBuYXRpdmVseSBhdmFpbGFibGUgZm9yIEh0dHBBZGFwdGVycy4gSWYgcmVxdWlyZWQsIHBsZWFzZSBleHRlbmRzIHRoaXMgY2xhc3NcIlxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEh0dHBBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7IEF4aW9zLCBBeGlvc1JlcXVlc3RDb25maWcgfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7IEh0dHBDb25maWcgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IEF4aW9zRmxhZ3MgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgY2xhc3MgQXhpb3NIdHRwQWRhcHRlciBleHRlbmRzIEh0dHBBZGFwdGVyPFxuICBBeGlvcyxcbiAgQXhpb3NSZXF1ZXN0Q29uZmlnLFxuICBBeGlvc0ZsYWdzLFxuICBDb250ZXh0PEF4aW9zRmxhZ3M+XG4+IHtcbiAgY29uc3RydWN0b3IobmF0aXZlOiBBeGlvcywgY29uZmlnOiBIdHRwQ29uZmlnLCBmbGF2b3VyOiBzdHJpbmcgPSBcImF4aW9zXCIpIHtcbiAgICBzdXBlcihuYXRpdmUgYXMgYW55LCBjb25maWcsIGZsYXZvdXIpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcmVxdWVzdDxWPihkZXRhaWxzOiBBeGlvc1JlcXVlc3RDb25maWcpOiBQcm9taXNlPFY+IHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmUucmVxdWVzdChkZXRhaWxzKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLnVybCh0YWJsZU5hbWUpO1xuICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnBvc3QodXJsLCBtb2RlbCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuICB9XG4gIGFzeW5jIHJlYWQoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy51cmwodGFibGVOYW1lLCB7IGlkOiBpZCBhcyBzdHJpbmcgfCBudW1iZXIgfSk7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0KHVybCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMudXJsKHRhYmxlTmFtZSk7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUucHV0KHVybCwgbW9kZWwpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLnVybCh0YWJsZU5hbWUsIHsgaWQ6IGlkIGFzIHN0cmluZyB8IG51bWJlciB9KTtcbiAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5kZWxldGUodXJsKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEh0dHBBZGFwdGVyIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuaW1wb3J0IHsgQ29udGV4dCwgUmVwb3NpdG9yeUZsYWdzIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXN0UmVwb3NpdG9yeTxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBRLFxuICBBIGV4dGVuZHMgSHR0cEFkYXB0ZXI8YW55LCBRLCBGLCBDPixcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4gPSBDb250ZXh0PEY+LFxuPiBleHRlbmRzIFJlcG9zaXRvcnk8TSwgUSwgQT4ge1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyOiBBLCBjbGF6ej86IENvbnN0cnVjdG9yPE0+KSB7XG4gICAgc3VwZXIoYWRhcHRlciwgY2xhenopO1xuICB9XG59XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9hZGFwdGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9heGlvcy9heGlvc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmVzdFJlcG9zaXRvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc3RTZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IE1vZHVsZSBzdW1tYXJ5XG4gKiBAZGVzY3JpcHRpb24gTW9kdWxlIGRlc2NyaXB0aW9uXG4gKiBAbW9kdWxlIHRzLXdvcmtzcGFjZVxuICovXG5cbi8qKlxuICogQHN1bW1hcnkgTmFtZXNwYWNlIHN1bW1hcnlcbiAqIEBkZXNjcmlwdGlvbiBOYW1lc3BhY2UgZGVzY3JpcHRpb25cbiAqIEBuYW1lc3BhY2UgTmFtZXNwYWNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnRzLXdvcmtzcGFjZVxuICovXG5cbi8qKlxuICogQHN1bW1hcnkgc3RvcmVzIHRoZSBjdXJyZW50IHBhY2thZ2UgdmVyc2lvblxuICogQGRlc2NyaXB0aW9uIHRoaXMgaXMgaG93IHlvdSBzaG91bGQgZG9jdW1lbnQgYSBjb25zdGFudFxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dHMtd29ya3NwYWNlXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl0sIm5hbWVzIjpbIkludGVybmFsRXJyb3IiLCJmaW5kUHJpbWFyeUtleSIsIlJlcG9zaXRvcnkiLCJBZGFwdGVyIiwiVW5zdXBwb3J0ZWRFcnJvciJdLCJtYXBwaW5n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
@@ -0,0 +1,231 @@
1
+ import { Repository, Adapter, UnsupportedError } from '@decaf-ts/core';
2
+ import { InternalError, findPrimaryKey } from '@decaf-ts/db-decorators';
3
+
4
+ class RestService {
5
+ get class() {
6
+ if (!this._class)
7
+ throw new InternalError("No class definition found for this repository");
8
+ return this._class;
9
+ }
10
+ get pk() {
11
+ if (!this._pk)
12
+ this._pk = findPrimaryKey(new this.class()).id;
13
+ return this._pk;
14
+ }
15
+ get adapter() {
16
+ if (!this._adapter)
17
+ throw new InternalError("No adapter found for this repository. did you use the @uses decorator or pass it in the constructor?");
18
+ return this._adapter;
19
+ }
20
+ get tableName() {
21
+ if (!this._tableName)
22
+ this._tableName = Repository.table(this.class);
23
+ return this._tableName;
24
+ }
25
+ constructor(adapter, clazz) {
26
+ this.observers = [];
27
+ this._adapter = adapter;
28
+ if (clazz)
29
+ this._class = clazz;
30
+ }
31
+ async create(model, ...args) {
32
+ // eslint-disable-next-line prefer-const
33
+ let { record, id } = this.adapter.prepare(model, this.pk);
34
+ record = await this.adapter.create(this.tableName, id, record, ...args);
35
+ return this.adapter.revert(record, this.class, this.pk, id);
36
+ }
37
+ async read(id, ...args) {
38
+ const m = await this.adapter.read(this.tableName, id, ...args);
39
+ return this.adapter.revert(m, this.class, this.pk, id);
40
+ }
41
+ async update(model, ...args) {
42
+ // eslint-disable-next-line prefer-const
43
+ let { record, id } = this.adapter.prepare(model, this.pk);
44
+ record = await this.adapter.update(this.tableName, id, record, ...args);
45
+ return this.adapter.revert(record, this.class, this.pk, id);
46
+ }
47
+ async delete(id, ...args) {
48
+ const m = await this.adapter.delete(this.tableName, id, ...args);
49
+ return this.adapter.revert(m, this.class, this.pk, id);
50
+ }
51
+ async createAll(models, ...args) {
52
+ if (!models.length)
53
+ return models;
54
+ const prepared = models.map((m) => this.adapter.prepare(m, this.pk));
55
+ const ids = prepared.map((p) => p.id);
56
+ let records = prepared.map((p) => p.record);
57
+ records = await this.adapter.createAll(this.tableName, ids, records, ...args);
58
+ return records.map((r, i) => this.adapter.revert(r, this.class, this.pk, ids[i]));
59
+ }
60
+ async deleteAll(keys, ...args) {
61
+ const results = await this.adapter.deleteAll(this.tableName, keys, ...args);
62
+ return results.map((r, i) => this.adapter.revert(r, this.class, this.pk, keys[i]));
63
+ }
64
+ async readAll(keys, ...args) {
65
+ const records = await this.adapter.readAll(this.tableName, keys, ...args);
66
+ return records.map((r, i) => this.adapter.revert(r, this.class, this.pk, keys[i]));
67
+ }
68
+ async updateAll(models, ...args) {
69
+ const records = models.map((m) => this.adapter.prepare(m, this.pk));
70
+ const updated = await this.adapter.updateAll(this.tableName, records.map((r) => r.id), records.map((r) => r.record), ...args);
71
+ return updated.map((u, i) => this.adapter.revert(u, this.class, this.pk, records[i].id));
72
+ }
73
+ /**
74
+ * @summary Registers an {@link Observer}
75
+ * @param {Observer} observer
76
+ *
77
+ * @see {Observable#observe}
78
+ */
79
+ observe(observer) {
80
+ const index = this.observers.indexOf(observer);
81
+ if (index !== -1)
82
+ throw new InternalError("Observer already registered");
83
+ this.observers.push(observer);
84
+ }
85
+ /**
86
+ * @summary Unregisters an {@link Observer}
87
+ * @param {Observer} observer
88
+ *
89
+ * @see {Observable#unObserve}
90
+ */
91
+ unObserve(observer) {
92
+ const index = this.observers.indexOf(observer);
93
+ if (index === -1)
94
+ throw new InternalError("Failed to find Observer");
95
+ this.observers.splice(index, 1);
96
+ }
97
+ /**
98
+ * @summary calls all registered {@link Observer}s to update themselves
99
+ * @param {any[]} [args] optional arguments to be passed to the {@link Observer#refresh} method
100
+ */
101
+ async updateObservers(...args) {
102
+ const results = await Promise.allSettled(this.observers.map((o) => o.refresh(...args)));
103
+ results.forEach((result, i) => {
104
+ if (result.status === "rejected")
105
+ console.warn(`Failed to update observable ${this.observers[i]}: ${result.reason}`);
106
+ });
107
+ }
108
+ }
109
+
110
+ class HttpAdapter extends Adapter {
111
+ constructor(native, config, flavour = "http") {
112
+ super(native, flavour);
113
+ this.config = config;
114
+ }
115
+ async context(operation, overrides, model) {
116
+ return (await super.context(operation, Object.assign({
117
+ headers: {},
118
+ }, overrides), model));
119
+ }
120
+ repository() {
121
+ return RestService;
122
+ }
123
+ url(tableName, queryParams) {
124
+ const url = new URL(`${this.config.protocol}://${this.config.host}/${tableName}`);
125
+ if (queryParams)
126
+ Object.entries(queryParams).forEach(([key, value]) => url.searchParams.append(key, value.toString()));
127
+ return encodeURI(url.toString());
128
+ }
129
+ parseError(err) {
130
+ const { message } = err;
131
+ switch (message) {
132
+ default:
133
+ return err;
134
+ }
135
+ }
136
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
137
+ async initialize(...args) {
138
+ // do nothing
139
+ }
140
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
141
+ raw(rawInput, process, ...args) {
142
+ throw new UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class");
143
+ }
144
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
145
+ Sequence(options) {
146
+ throw new UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class");
147
+ }
148
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
149
+ parseCondition(condition) {
150
+ throw new UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class");
151
+ }
152
+ get Statement() {
153
+ throw new UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class");
154
+ }
155
+ get Clauses() {
156
+ throw new InternalError("Api is not natively available for HttpAdapters. If required, please extends this class");
157
+ }
158
+ }
159
+
160
+ class AxiosHttpAdapter extends HttpAdapter {
161
+ constructor(native, config, flavour = "axios") {
162
+ super(native, config, flavour);
163
+ }
164
+ async request(details) {
165
+ return this.native.request(details);
166
+ }
167
+ async create(tableName, id, model) {
168
+ try {
169
+ const url = this.url(tableName);
170
+ return this.native.post(url, model);
171
+ }
172
+ catch (e) {
173
+ throw this.parseError(e);
174
+ }
175
+ }
176
+ async read(tableName, id) {
177
+ try {
178
+ const url = this.url(tableName, { id: id });
179
+ return this.native.get(url);
180
+ }
181
+ catch (e) {
182
+ throw this.parseError(e);
183
+ }
184
+ }
185
+ async update(tableName, id, model) {
186
+ try {
187
+ const url = this.url(tableName);
188
+ return this.native.put(url, model);
189
+ }
190
+ catch (e) {
191
+ throw this.parseError(e);
192
+ }
193
+ }
194
+ async delete(tableName, id) {
195
+ try {
196
+ const url = this.url(tableName, { id: id });
197
+ return this.native.delete(url);
198
+ }
199
+ catch (e) {
200
+ throw this.parseError(e);
201
+ }
202
+ }
203
+ }
204
+
205
+ class RestRepository extends Repository {
206
+ constructor(adapter, clazz) {
207
+ super(adapter, clazz);
208
+ }
209
+ }
210
+
211
+ /**
212
+ * @summary Module summary
213
+ * @description Module description
214
+ * @module ts-workspace
215
+ */
216
+ /**
217
+ * @summary Namespace summary
218
+ * @description Namespace description
219
+ * @namespace Namespace
220
+ * @memberOf module:ts-workspace
221
+ */
222
+ /**
223
+ * @summary stores the current package version
224
+ * @description this is how you should document a constant
225
+ * @const VERSION
226
+ * @memberOf module:ts-workspace
227
+ */
228
+ const VERSION = "0.2.0";
229
+
230
+ export { AxiosHttpAdapter, HttpAdapter, RestRepository, RestService, VERSION };
231
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yLWh0dHAuZXNtLmNqcyIsInNvdXJjZXMiOlsiLi4vc3JjL1Jlc3RTZXJ2aWNlLnRzIiwiLi4vc3JjL2FkYXB0ZXIudHMiLCIuLi9zcmMvYXhpb3MvYXhpb3MudHMiLCIuLi9zcmMvUmVzdFJlcG9zaXRvcnkudHMiLCIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQnVsa0NydWRPcGVyYXRvcixcbiAgQ29udGV4dCxcbiAgQ3J1ZE9wZXJhdG9yLFxuICBmaW5kUHJpbWFyeUtleSxcbiAgSW50ZXJuYWxFcnJvcixcbiAgUmVwb3NpdG9yeUZsYWdzLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyLCBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBIdHRwQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcblxuZXhwb3J0IGNsYXNzIFJlc3RTZXJ2aWNlPFxuICAgIE0gZXh0ZW5kcyBNb2RlbCxcbiAgICBRLFxuICAgIEEgZXh0ZW5kcyBIdHRwQWRhcHRlcjxhbnksIFEsIEYsIEM+LFxuICAgIEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsXG4gICAgQyBleHRlbmRzIENvbnRleHQ8Rj4gPSBDb250ZXh0PEY+LFxuICA+XG4gIGltcGxlbWVudHMgQ3J1ZE9wZXJhdG9yPE0+LCBCdWxrQ3J1ZE9wZXJhdG9yPE0+LCBPYnNlcnZhYmxlXG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsYXNzITogQ29uc3RydWN0b3I8TT47XG4gIHByaXZhdGUgX3BrIToga2V5b2YgTTtcblxuICBnZXQgY2xhc3MoKSB7XG4gICAgaWYgKCF0aGlzLl9jbGFzcylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTm8gY2xhc3MgZGVmaW5pdGlvbiBmb3VuZCBmb3IgdGhpcyByZXBvc2l0b3J5XCIpO1xuICAgIHJldHVybiB0aGlzLl9jbGFzcztcbiAgfVxuXG4gIGdldCBwaygpIHtcbiAgICBpZiAoIXRoaXMuX3BrKSB0aGlzLl9wayA9IGZpbmRQcmltYXJ5S2V5KG5ldyB0aGlzLmNsYXNzKCkpLmlkO1xuICAgIHJldHVybiB0aGlzLl9waztcbiAgfVxuXG4gIHByb3RlY3RlZCBvYnNlcnZlcnM6IE9ic2VydmVyW10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hZGFwdGVyITogQTtcbiAgcHJpdmF0ZSBfdGFibGVOYW1lITogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBnZXQgYWRhcHRlcigpOiBBIHtcbiAgICBpZiAoIXRoaXMuX2FkYXB0ZXIpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgXCJObyBhZGFwdGVyIGZvdW5kIGZvciB0aGlzIHJlcG9zaXRvcnkuIGRpZCB5b3UgdXNlIHRoZSBAdXNlcyBkZWNvcmF0b3Igb3IgcGFzcyBpdCBpbiB0aGUgY29uc3RydWN0b3I/XCJcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRhYmxlTmFtZSgpIHtcbiAgICBpZiAoIXRoaXMuX3RhYmxlTmFtZSkgdGhpcy5fdGFibGVOYW1lID0gUmVwb3NpdG9yeS50YWJsZSh0aGlzLmNsYXNzKTtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVOYW1lO1xuICB9XG5cbiAgY29uc3RydWN0b3IoYWRhcHRlcjogQSwgY2xheno/OiBDb25zdHJ1Y3RvcjxNPikge1xuICAgIHRoaXMuX2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIGlmIChjbGF6eikgdGhpcy5fY2xhc3MgPSBjbGF6ejtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShtb2RlbDogTSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IHsgcmVjb3JkLCBpZCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUobW9kZWwsIHRoaXMucGspO1xuICAgIHJlY29yZCA9IGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGUodGhpcy50YWJsZU5hbWUsIGlkLCByZWNvcmQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHJlY29yZCwgdGhpcy5jbGFzcywgdGhpcy5waywgaWQpO1xuICB9XG5cbiAgYXN5bmMgcmVhZChpZDogc3RyaW5nIHwgbnVtYmVyLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIGNvbnN0IG0gPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmVhZCh0aGlzLnRhYmxlTmFtZSwgaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KG0sIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShtb2RlbDogTSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IHsgcmVjb3JkLCBpZCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUobW9kZWwsIHRoaXMucGspO1xuICAgIHJlY29yZCA9IGF3YWl0IHRoaXMuYWRhcHRlci51cGRhdGUodGhpcy50YWJsZU5hbWUsIGlkLCByZWNvcmQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHJlY29yZCwgdGhpcy5jbGFzcywgdGhpcy5waywgaWQpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGlkOiBzdHJpbmcgfCBudW1iZXIsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgY29uc3QgbSA9IGF3YWl0IHRoaXMuYWRhcHRlci5kZWxldGUodGhpcy50YWJsZU5hbWUsIGlkLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnJldmVydChtLCB0aGlzLmNsYXNzLCB0aGlzLnBrLCBpZCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbGwobW9kZWxzOiBNW10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+IHtcbiAgICBpZiAoIW1vZGVscy5sZW5ndGgpIHJldHVybiBtb2RlbHM7XG4gICAgY29uc3QgcHJlcGFyZWQgPSBtb2RlbHMubWFwKChtKSA9PiB0aGlzLmFkYXB0ZXIucHJlcGFyZShtLCB0aGlzLnBrKSk7XG4gICAgY29uc3QgaWRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLmlkKTtcbiAgICBsZXQgcmVjb3JkcyA9IHByZXBhcmVkLm1hcCgocCkgPT4gcC5yZWNvcmQpO1xuICAgIHJlY29yZHMgPSBhd2FpdCB0aGlzLmFkYXB0ZXIuY3JlYXRlQWxsKFxuICAgICAgdGhpcy50YWJsZU5hbWUsXG4gICAgICBpZHMgYXMgKHN0cmluZyB8IG51bWJlcilbXSxcbiAgICAgIHJlY29yZHMsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICByZXR1cm4gcmVjb3Jkcy5tYXAoKHIsIGkpID0+XG4gICAgICB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHIsIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkc1tpXSBhcyBzdHJpbmcgfCBudW1iZXIpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbChrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuYWRhcHRlci5kZWxldGVBbGwodGhpcy50YWJsZU5hbWUsIGtleXMsIC4uLmFyZ3MpO1xuICAgIHJldHVybiByZXN1bHRzLm1hcCgociwgaSkgPT5cbiAgICAgIHRoaXMuYWRhcHRlci5yZXZlcnQociwgdGhpcy5jbGFzcywgdGhpcy5waywga2V5c1tpXSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVhZEFsbChrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5yZWFkQWxsKHRoaXMudGFibGVOYW1lLCBrZXlzLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gcmVjb3Jkcy5tYXAoKHIsIGkpID0+XG4gICAgICB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHIsIHRoaXMuY2xhc3MsIHRoaXMucGssIGtleXNbaV0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFsbChtb2RlbHM6IE1bXSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE1bXT4ge1xuICAgIGNvbnN0IHJlY29yZHMgPSBtb2RlbHMubWFwKChtKSA9PiB0aGlzLmFkYXB0ZXIucHJlcGFyZShtLCB0aGlzLnBrKSk7XG4gICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHRoaXMuYWRhcHRlci51cGRhdGVBbGwoXG4gICAgICB0aGlzLnRhYmxlTmFtZSxcbiAgICAgIHJlY29yZHMubWFwKChyKSA9PiByLmlkKSxcbiAgICAgIHJlY29yZHMubWFwKChyKSA9PiByLnJlY29yZCksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICByZXR1cm4gdXBkYXRlZC5tYXAoKHUsIGkpID0+XG4gICAgICB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHUsIHRoaXMuY2xhc3MsIHRoaXMucGssIHJlY29yZHNbaV0uaWQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgYW4ge0BsaW5rIE9ic2VydmVyfVxuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgKlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI29ic2VydmV9XG4gICAqL1xuICBvYnNlcnZlKG9ic2VydmVyOiBPYnNlcnZlcik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJPYnNlcnZlciBhbHJlYWR5IHJlZ2lzdGVyZWRcIik7XG4gICAgdGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgVW5yZWdpc3RlcnMgYW4ge0BsaW5rIE9ic2VydmVyfVxuICAgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuICAgKlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI3VuT2JzZXJ2ZX1cbiAgICovXG4gIHVuT2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMub2JzZXJ2ZXJzLmluZGV4T2Yob2JzZXJ2ZXIpO1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiRmFpbGVkIHRvIGZpbmQgT2JzZXJ2ZXJcIik7XG4gICAgdGhpcy5vYnNlcnZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBjYWxscyBhbGwgcmVnaXN0ZXJlZCB7QGxpbmsgT2JzZXJ2ZXJ9cyB0byB1cGRhdGUgdGhlbXNlbHZlc1xuICAgKiBAcGFyYW0ge2FueVtdfSBbYXJnc10gb3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUge0BsaW5rIE9ic2VydmVyI3JlZnJlc2h9IG1ldGhvZFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlT2JzZXJ2ZXJzKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIHRoaXMub2JzZXJ2ZXJzLm1hcCgobykgPT4gby5yZWZyZXNoKC4uLmFyZ3MpKVxuICAgICk7XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgRmFpbGVkIHRvIHVwZGF0ZSBvYnNlcnZhYmxlICR7dGhpcy5vYnNlcnZlcnNbaV19OiAke3Jlc3VsdC5yZWFzb259YFxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBZGFwdGVyLFxuICBDbGF1c2VGYWN0b3J5LFxuICBDb25kaXRpb24sXG4gIFJlcG9zaXRvcnksXG4gIFNlcXVlbmNlLFxuICBTZXF1ZW5jZU9wdGlvbnMsXG4gIFN0YXRlbWVudCxcbiAgVW5zdXBwb3J0ZWRFcnJvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIENvbnRleHQsXG4gIEludGVybmFsRXJyb3IsXG4gIE9wZXJhdGlvbktleXMsXG4gIFJlcG9zaXRvcnlGbGFncyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBIdHRwQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSBcIi4vUmVzdFNlcnZpY2VcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEh0dHBBZGFwdGVyPFxuICBZLFxuICBRLFxuICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbj4gZXh0ZW5kcyBBZGFwdGVyPFksIFEsIEYsIEM+IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIG5hdGl2ZTogWSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBIdHRwQ29uZmlnLFxuICAgIGZsYXZvdXI6IHN0cmluZyA9IFwiaHR0cFwiXG4gICkge1xuICAgIHN1cGVyKG5hdGl2ZSwgZmxhdm91cik7XG4gIH1cblxuICBhc3luYyBjb250ZXh0PFxuICAgIE0gZXh0ZW5kcyBNb2RlbCxcbiAgICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbiAgICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICA+KFxuICAgIG9wZXJhdGlvbjpcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5DUkVBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5SRUFEXG4gICAgICB8IE9wZXJhdGlvbktleXMuVVBEQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuREVMRVRFLFxuICAgIG92ZXJyaWRlczogUGFydGlhbDxGPixcbiAgICBtb2RlbDogQ29uc3RydWN0b3I8TT5cbiAgKTogUHJvbWlzZTxDPiB7XG4gICAgcmV0dXJuIChhd2FpdCBzdXBlci5jb250ZXh0KFxuICAgICAgb3BlcmF0aW9uLFxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICB9LFxuICAgICAgICBvdmVycmlkZXNcbiAgICAgICksXG4gICAgICBtb2RlbFxuICAgICkpIGFzIHVua25vd24gYXMgQztcbiAgfVxuXG4gIHJlcG9zaXRvcnk8TSBleHRlbmRzIE1vZGVsPigpOiBDb25zdHJ1Y3RvcjxcbiAgICBSZXBvc2l0b3J5PE0sIFEsIEh0dHBBZGFwdGVyPFksIFEsIEYsIEM+PlxuICA+IHtcbiAgICByZXR1cm4gUmVzdFNlcnZpY2UgYXMgdW5rbm93biBhcyBDb25zdHJ1Y3RvcjxcbiAgICAgIFJlcG9zaXRvcnk8TSwgUSwgSHR0cEFkYXB0ZXI8WSwgUSwgRiwgQz4+XG4gICAgPjtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cmwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XG4gICkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoXG4gICAgICBgJHt0aGlzLmNvbmZpZy5wcm90b2NvbH06Ly8ke3RoaXMuY29uZmlnLmhvc3R9LyR7dGFibGVOYW1lfWBcbiAgICApO1xuICAgIGlmIChxdWVyeVBhcmFtcylcbiAgICAgIE9iamVjdC5lbnRyaWVzKHF1ZXJ5UGFyYW1zKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgIHVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoKSlcbiAgICAgICk7XG5cbiAgICByZXR1cm4gZW5jb2RlVVJJKHVybC50b1N0cmluZygpKTtcbiAgfVxuXG4gIHBhcnNlRXJyb3IoZXJyOiBFcnJvcik6IEJhc2VFcnJvciB7XG4gICAgY29uc3QgeyBtZXNzYWdlIH0gPSBlcnI7XG4gICAgc3dpdGNoIChtZXNzYWdlKSB7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZXJyIGFzIEJhc2VFcnJvcjtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFzeW5jIGluaXRpYWxpemUoLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICBhYnN0cmFjdCByZXF1ZXN0PFY+KGRldGFpbHM6IFEpOiBQcm9taXNlPFY+O1xuXG4gIGFic3RyYWN0IGNyZWF0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgYWJzdHJhY3QgcmVhZChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgYWJzdHJhY3QgdXBkYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICBhYnN0cmFjdCBkZWxldGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcmF3PFI+KHJhd0lucHV0OiBRLCBwcm9jZXNzOiBib29sZWFuLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8Uj4ge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKFxuICAgICAgXCJBcGkgaXMgbm90IG5hdGl2ZWx5IGF2YWlsYWJsZSBmb3IgSHR0cEFkYXB0ZXJzLiBJZiByZXF1aXJlZCwgcGxlYXNlIGV4dGVuZHMgdGhpcyBjbGFzc1wiXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgU2VxdWVuY2Uob3B0aW9uczogU2VxdWVuY2VPcHRpb25zKTogUHJvbWlzZTxTZXF1ZW5jZT4ge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKFxuICAgICAgXCJBcGkgaXMgbm90IG5hdGl2ZWx5IGF2YWlsYWJsZSBmb3IgSHR0cEFkYXB0ZXJzLiBJZiByZXF1aXJlZCwgcGxlYXNlIGV4dGVuZHMgdGhpcyBjbGFzc1wiXG4gICAgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcGFyc2VDb25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb24pOiBRIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcbiAgICAgIFwiQXBpIGlzIG5vdCBuYXRpdmVseSBhdmFpbGFibGUgZm9yIEh0dHBBZGFwdGVycy4gSWYgcmVxdWlyZWQsIHBsZWFzZSBleHRlbmRzIHRoaXMgY2xhc3NcIlxuICAgICk7XG4gIH1cbiAgZ2V0IFN0YXRlbWVudCgpOiBTdGF0ZW1lbnQ8UT4ge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKFxuICAgICAgXCJBcGkgaXMgbm90IG5hdGl2ZWx5IGF2YWlsYWJsZSBmb3IgSHR0cEFkYXB0ZXJzLiBJZiByZXF1aXJlZCwgcGxlYXNlIGV4dGVuZHMgdGhpcyBjbGFzc1wiXG4gICAgKTtcbiAgfVxuICBnZXQgQ2xhdXNlcygpOiBDbGF1c2VGYWN0b3J5PFksIFEsIHR5cGVvZiB0aGlzPiB7XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBcIkFwaSBpcyBub3QgbmF0aXZlbHkgYXZhaWxhYmxlIGZvciBIdHRwQWRhcHRlcnMuIElmIHJlcXVpcmVkLCBwbGVhc2UgZXh0ZW5kcyB0aGlzIGNsYXNzXCJcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBIdHRwQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBBeGlvcywgQXhpb3NSZXF1ZXN0Q29uZmlnIH0gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBIdHRwQ29uZmlnIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBBeGlvc0ZsYWdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuZXhwb3J0IGNsYXNzIEF4aW9zSHR0cEFkYXB0ZXIgZXh0ZW5kcyBIdHRwQWRhcHRlcjxcbiAgQXhpb3MsXG4gIEF4aW9zUmVxdWVzdENvbmZpZyxcbiAgQXhpb3NGbGFncyxcbiAgQ29udGV4dDxBeGlvc0ZsYWdzPlxuPiB7XG4gIGNvbnN0cnVjdG9yKG5hdGl2ZTogQXhpb3MsIGNvbmZpZzogSHR0cENvbmZpZywgZmxhdm91cjogc3RyaW5nID0gXCJheGlvc1wiKSB7XG4gICAgc3VwZXIobmF0aXZlIGFzIGFueSwgY29uZmlnLCBmbGF2b3VyKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlcXVlc3Q8Vj4oZGV0YWlsczogQXhpb3NSZXF1ZXN0Q29uZmlnKTogUHJvbWlzZTxWPiB7XG4gICAgcmV0dXJuIHRoaXMubmF0aXZlLnJlcXVlc3QoZGV0YWlscyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy51cmwodGFibGVOYW1lKTtcbiAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5wb3N0KHVybCwgbW9kZWwpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgfVxuICBhc3luYyByZWFkKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnRcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMudXJsKHRhYmxlTmFtZSwgeyBpZDogaWQgYXMgc3RyaW5nIHwgbnVtYmVyIH0pO1xuICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldCh1cmwpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLnVybCh0YWJsZU5hbWUpO1xuICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnB1dCh1cmwsIG1vZGVsKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludFxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy51cmwodGFibGVOYW1lLCB7IGlkOiBpZCBhcyBzdHJpbmcgfCBudW1iZXIgfSk7XG4gICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZGVsZXRlKHVybCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBIdHRwQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmltcG9ydCB7IENvbnRleHQsIFJlcG9zaXRvcnlGbGFncyB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgY2xhc3MgUmVzdFJlcG9zaXRvcnk8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUSxcbiAgQSBleHRlbmRzIEh0dHBBZGFwdGVyPGFueSwgUSwgRiwgQz4sXG4gIEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsXG4gIEMgZXh0ZW5kcyBDb250ZXh0PEY+ID0gQ29udGV4dDxGPixcbj4gZXh0ZW5kcyBSZXBvc2l0b3J5PE0sIFEsIEE+IHtcbiAgY29uc3RydWN0b3IoYWRhcHRlcjogQSwgY2xheno/OiBDb25zdHJ1Y3RvcjxNPikge1xuICAgIHN1cGVyKGFkYXB0ZXIsIGNsYXp6KTtcbiAgfVxufVxuIiwiZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXhpb3MvYXhpb3NcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc3RSZXBvc2l0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXN0U2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBNb2R1bGUgc3VtbWFyeVxuICogQGRlc2NyaXB0aW9uIE1vZHVsZSBkZXNjcmlwdGlvblxuICogQG1vZHVsZSB0cy13b3Jrc3BhY2VcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IE5hbWVzcGFjZSBzdW1tYXJ5XG4gKiBAZGVzY3JpcHRpb24gTmFtZXNwYWNlIGRlc2NyaXB0aW9uXG4gKiBAbmFtZXNwYWNlIE5hbWVzcGFjZVxuICogQG1lbWJlck9mIG1vZHVsZTp0cy13b3Jrc3BhY2VcbiAqL1xuXG4vKipcbiAqIEBzdW1tYXJ5IHN0b3JlcyB0aGUgY3VycmVudCBwYWNrYWdlIHZlcnNpb25cbiAqIEBkZXNjcmlwdGlvbiB0aGlzIGlzIGhvdyB5b3Ugc2hvdWxkIGRvY3VtZW50IGEgY29uc3RhbnRcbiAqIEBjb25zdCBWRVJTSU9OXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnRzLXdvcmtzcGFjZVxuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7TUFZYSxXQUFXLENBQUE7QUFZdEIsSUFBQSxJQUFJLEtBQUssR0FBQTtRQUNQLElBQUksQ0FBQyxJQUFJLENB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TSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUMzRSxRQUFBLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3JEOztBQUdILElBQUEsTUFBTSxPQUFPLENBQUMsSUFBeUIsRUFBRSxHQUFHLElBQVcsRUFBQTtBQUNyRCxRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDekUsUUFBQSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNyRDs7QUFHSCxJQUFBLE1BQU0sU0FBUyxDQUFDLE1BQVcsRUFBRSxHQUFHLElBQVcsRUFBQTtRQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDMUMsSUFBSSxDQUFDLFNBQVMsRUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMs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
@@ -8,5 +8,4 @@ class RestRepository extends core_1.Repository {
8
8
  }
9
9
  }
10
10
  exports.RestRepository = RestRepository;
11
-
12
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SZXN0UmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBcUQ7QUFHckQsTUFBYSxjQUlYLFNBQVEsaUJBQW1CO0lBQzNCLFlBQVksT0FBVSxFQUFFLEtBQXNCO1FBQzVDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBUkQsd0NBUUMiLCJmaWxlIjoiUmVzdFJlcG9zaXRvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZGFwdGVyLCBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBSZXN0UmVwb3NpdG9yeTxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBRLFxuICBBIGV4dGVuZHMgQWRhcHRlcjxhbnksIFE+LFxuPiBleHRlbmRzIFJlcG9zaXRvcnk8TSwgUSwgQT4ge1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyOiBBLCBjbGF6ej86IENvbnN0cnVjdG9yPE0+KSB7XG4gICAgc3VwZXIoYWRhcHRlciwgY2xhenopO1xuICB9XG59XG4iXX0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzdFJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUmVzdFJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTRDO0FBSzVDLE1BQWEsY0FNWCxTQUFRLGlCQUFtQjtJQUMzQixZQUFZLE9BQVUsRUFBRSxLQUFzQjtRQUM1QyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQVZELHdDQVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgSHR0cEFkYXB0ZXIgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBDb250ZXh0LCBSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuZXhwb3J0IGNsYXNzIFJlc3RSZXBvc2l0b3J5PFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFEsXG4gIEEgZXh0ZW5kcyBIdHRwQWRhcHRlcjxhbnksIFEsIEYsIEM+LFxuICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPiA9IENvbnRleHQ8Rj4sXG4+IGV4dGVuZHMgUmVwb3NpdG9yeTxNLCBRLCBBPiB7XG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXI6IEEsIGNsYXp6PzogQ29uc3RydWN0b3I8TT4pIHtcbiAgICBzdXBlcihhZGFwdGVyLCBjbGF6eik7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { Repository } from "@decaf-ts/core";
2
+ import { Constructor, Model } from "@decaf-ts/decorator-validation";
3
+ import { HttpAdapter } from "./adapter";
4
+ import { Context, RepositoryFlags } from "@decaf-ts/db-decorators";
5
+ export declare class RestRepository<M extends Model, Q, A extends HttpAdapter<any, Q, F, C>, F extends RepositoryFlags, C extends Context<F> = Context<F>> extends Repository<M, Q, A> {
6
+ constructor(adapter: A, clazz?: Constructor<M>);
7
+ }