@decaf-ts/for-pouch 0.0.3 → 0.0.4

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.
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9Qb3VjaFJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJQb3VjaFJlcG9zaXRvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE1hbmdvUXVlcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQgeyBQb3VjaEFkYXB0ZXIgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG91Y2hSZXBvc2l0b3J5PE0gZXh0ZW5kcyBNb2RlbD5cbiAgZXh0ZW5kcyBSZXBvc2l0b3J5PE0sIE1hbmdvUXVlcnk+IHtcbiAgYWRhcHRlcjogUG91Y2hBZGFwdGVyO1xufVxuIl19
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9Qb3VjaFJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJQb3VjaFJlcG9zaXRvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE1hbmdvUXVlcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQgeyBBZGFwdGVyLCBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgRGF0YWJhc2UgPSBQb3VjaERCLkRhdGFiYXNlO1xuXG5leHBvcnQgdHlwZSBQb3VjaFJlcG9zaXRvcnk8TSBleHRlbmRzIE1vZGVsPiA9IFJlcG9zaXRvcnk8XG4gIE0sXG4gIE1hbmdvUXVlcnksXG4gIEFkYXB0ZXI8RGF0YWJhc2UsIE1hbmdvUXVlcnk+XG4+O1xuIl19
@@ -1,7 +1,5 @@
1
1
  import { Model } from "@decaf-ts/decorator-validation";
2
2
  import { MangoQuery } from "@decaf-ts/for-couchdb";
3
- import { PouchAdapter } from "./adapter";
4
- import { Repository } from "@decaf-ts/core";
5
- export interface PouchRepository<M extends Model> extends Repository<M, MangoQuery> {
6
- adapter: PouchAdapter;
7
- }
3
+ import { Adapter, Repository } from "@decaf-ts/core";
4
+ import Database = PouchDB.Database;
5
+ export type PouchRepository<M extends Model> = Repository<M, MangoQuery, Adapter<Database, MangoQuery>>;
package/lib/adapter.cjs CHANGED
@@ -10,7 +10,7 @@ class PouchAdapter extends for_couchdb_1.CouchDBAdapter {
10
10
  super(scope, flavour);
11
11
  }
12
12
  async user() {
13
- const url = this.native.server.name;
13
+ const url = this.native.name;
14
14
  if (url) {
15
15
  const regexp = /https?:\/\/(.+?):.+?@/g;
16
16
  const m = regexp.exec(url);
@@ -22,43 +22,145 @@ class PouchAdapter extends for_couchdb_1.CouchDBAdapter {
22
22
  }
23
23
  throw new db_decorators_1.InternalError("Not implemented");
24
24
  }
25
+ async index(...models) {
26
+ const indexes = (0, for_couchdb_1.generateIndexes)(models);
27
+ for (const index of indexes) {
28
+ const res = await this.native.createIndex(index);
29
+ const { result } = res;
30
+ if (result === "existing")
31
+ throw new db_decorators_1.ConflictError(`Index ${index.name} already exists`);
32
+ }
33
+ }
34
+ async create(tableName, id, model) {
35
+ let response;
36
+ try {
37
+ response = await this.native.put(model);
38
+ }
39
+ catch (e) {
40
+ throw this.parseError(e);
41
+ }
42
+ if (!response.ok)
43
+ throw new db_decorators_1.InternalError(`Failed to insert doc id: ${id} in table ${tableName}`);
44
+ return this.assignMetadata(model, response.rev);
45
+ }
46
+ async createAll(tableName, ids, models) {
47
+ let response;
48
+ try {
49
+ response = await this.native.bulkDocs(models);
50
+ }
51
+ catch (e) {
52
+ throw this.parseError(e);
53
+ }
54
+ if (!response.every((r) => r.ok)) {
55
+ const errors = response.reduce((accum, el, i) => {
56
+ if (el.error)
57
+ accum.push(`el ${i}: ${el.error}${el.reason ? ` - ${el.reason}` : ""}`);
58
+ return accum;
59
+ }, []);
60
+ throw new db_decorators_1.InternalError(errors.join("\n"));
61
+ }
62
+ return this.assignMultipleMetadata(models, response.map((r) => r.rev));
63
+ }
64
+ async read(tableName, id) {
65
+ const _id = this.generateId(tableName, id);
66
+ let record;
67
+ try {
68
+ record = await this.native.get(_id);
69
+ }
70
+ catch (e) {
71
+ throw this.parseError(e);
72
+ }
73
+ return this.assignMetadata(record, record._rev);
74
+ }
25
75
  async readAll(tableName, ids) {
26
- const results = await this.native.fetch({ keys: ids.map((id) => this.generateId(tableName, id)) }, {});
27
- return results.rows.map((r) => {
28
- if (r instanceof Error)
29
- throw r;
30
- const res = Object.assign({}, r);
31
- Object.defineProperty(res, core_1.PersistenceKeys.METADATA, {
32
- enumerable: false,
33
- writable: false,
34
- value: r[for_couchdb_1.CouchDBKeys.REV],
35
- });
36
- return res;
76
+ const results = await this.native.bulkGet({
77
+ docs: ids.map((id) => ({ id: this.generateId(tableName, id) })),
37
78
  });
79
+ const res = results.results.reduce((accum, r) => {
80
+ r.docs.forEach((d) => {
81
+ if (d.error || !d.ok)
82
+ throw this.parseError(d.error ||
83
+ new db_decorators_1.InternalError("Missing valid response"));
84
+ const result = Object.assign({}, d.ok);
85
+ accum.push(this.assignMetadata(result, d.ok[for_couchdb_1.CouchDBKeys.REV]));
86
+ });
87
+ return accum;
88
+ }, []);
89
+ return res;
90
+ }
91
+ async update(tableName, id, model) {
92
+ let response;
93
+ try {
94
+ response = await this.native.put(model);
95
+ }
96
+ catch (e) {
97
+ throw this.parseError(e);
98
+ }
99
+ if (!response.ok)
100
+ throw new db_decorators_1.InternalError(`Failed to update doc id: ${id} in table ${tableName}`);
101
+ return this.assignMetadata(model, response.rev);
102
+ }
103
+ async updateAll(tableName, ids, models) {
104
+ let response;
105
+ try {
106
+ response = await this.native.bulkDocs(models);
107
+ }
108
+ catch (e) {
109
+ throw this.parseError(e);
110
+ }
111
+ if (!response.every((r) => !r.error)) {
112
+ const errors = response.reduce((accum, el, i) => {
113
+ if (el.error)
114
+ accum.push(`el ${i}: ${el.error}${el.reason ? ` - ${el.reason}` : ""}`);
115
+ return accum;
116
+ }, []);
117
+ throw new db_decorators_1.InternalError(errors.join("\n"));
118
+ }
119
+ return this.assignMultipleMetadata(models, response.map((r) => r.rev));
120
+ }
121
+ async delete(tableName, id) {
122
+ const _id = this.generateId(tableName, id);
123
+ let record;
124
+ try {
125
+ record = await this.native.get(_id);
126
+ await this.native.remove(_id, record._rev);
127
+ }
128
+ catch (e) {
129
+ throw this.parseError(e);
130
+ }
131
+ return this.assignMetadata(record, record._rev);
38
132
  }
39
133
  async deleteAll(tableName, ids) {
40
- const results = await this.native.fetch({ keys: ids.map((id) => this.generateId(tableName, id)) }, {});
41
- const deletion = await this.native.bulk({
42
- docs: results.rows.map((r) => {
43
- r[for_couchdb_1.CouchDBKeys.DELETED] = true;
44
- return r;
45
- }),
134
+ const results = await this.native.bulkGet({
135
+ docs: ids.map((id) => ({ id: this.generateId(tableName, id) })),
46
136
  });
47
- deletion.forEach((d) => {
48
- if (d.error)
49
- console.error(d.error);
50
- });
51
- return results.rows.map((r) => {
52
- if (r instanceof Error)
53
- throw r;
54
- const res = Object.assign({}, r);
55
- Object.defineProperty(res, core_1.PersistenceKeys.METADATA, {
56
- enumerable: false,
57
- writable: false,
58
- value: r[for_couchdb_1.CouchDBKeys.REV],
137
+ const deletion = await this.native.bulkDocs(results.results.map((r) => {
138
+ r[for_couchdb_1.CouchDBKeys.DELETED] = true;
139
+ return r;
140
+ }));
141
+ const errs = deletion.filter((d) => d.error);
142
+ if (errs.length)
143
+ throw new db_decorators_1.InternalError(errs.join("\n"));
144
+ return results.results.reduce((accum, r) => {
145
+ r.docs.forEach((d) => {
146
+ const result = Object.assign({}, d.ok);
147
+ accum.push(this.assignMetadata(result, d.ok[for_couchdb_1.CouchDBKeys.REV]));
59
148
  });
60
- return res;
61
- });
149
+ return accum;
150
+ }, []);
151
+ }
152
+ async raw(rawInput, process = true) {
153
+ try {
154
+ const response = await this.native.find(rawInput);
155
+ if (response.warning)
156
+ console.warn(response.warning);
157
+ if (process)
158
+ return response.docs;
159
+ return response;
160
+ }
161
+ catch (e) {
162
+ throw this.parseError(e);
163
+ }
62
164
  }
63
165
  parseError(err, reason) {
64
166
  return PouchAdapter.parseError(err, reason);
@@ -102,4 +204,4 @@ class PouchAdapter extends for_couchdb_1.CouchDBAdapter {
102
204
  }
103
205
  exports.PouchAdapter = PouchAdapter;
104
206
 
105
- //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0IsSUFBSSxHQUFJLEdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDM0IsTUFBTSxHQUFHLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDckIsQ0FBQztRQUVELFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDeEIsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksNkJBQWEsQ0FBQyxNQUFnQixDQUFDLENBQUM7WUFDN0MsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSw2QkFBYSxDQUFDLE1BQWdCLENBQUMsQ0FBQztZQUM3QyxLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDO29CQUM3QyxPQUFPLElBQUksd0JBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxJQUFJLDZCQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEM7Z0JBQ0UsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztvQkFDeEMsT0FBTyxJQUFJLHNCQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSw2QkFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF6R0Qsb0NBeUdDIiwiZmlsZSI6ImFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5pbXBvcnQge1xuICBDb3VjaERCQWRhcHRlcixcbiAgQ291Y2hEQktleXMsXG4gIERvY3VtZW50QnVsa1Jlc3BvbnNlLFxuICBEb2N1bWVudFNjb3BlLFxuICBJbmRleEVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIENvbmZsaWN0RXJyb3IsXG4gIEludGVybmFsRXJyb3IsXG4gIE5vdEZvdW5kRXJyb3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yLCBQZXJzaXN0ZW5jZUtleXMsIFVzZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcblxuZXhwb3J0IGNsYXNzIFBvdWNoQWRhcHRlciBleHRlbmRzIENvdWNoREJBZGFwdGVyIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IERvY3VtZW50U2NvcGU8YW55PiwgZmxhdm91cjogc3RyaW5nID0gXCJwb3VjaFwiKSB7XG4gICAgc3VwZXIoc2NvcGUsIGZsYXZvdXIpO1xuICB9XG5cbiAgYXN5bmMgdXNlcigpOiBQcm9taXNlPFVzZXI+IHtcbiAgICBjb25zdCB1cmwgPSAodGhpcy5uYXRpdmUuc2VydmVyIGFzIHVua25vd24gYXMgeyBuYW1lOiBzdHJpbmcgfSkubmFtZTtcbiAgICBpZiAodXJsKSB7XG4gICAgICBjb25zdCByZWdleHAgPSAvaHR0cHM/OlxcL1xcLyguKz8pOi4rP0AvZztcbiAgICAgIGNvbnN0IG0gPSByZWdleHAuZXhlYyh1cmwpO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVc2VyKHtcbiAgICAgICAgICBpZDogbVsxXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICB9XG5cbiAgYXN5bmMgcmVhZEFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZHM6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpW11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5uYXRpdmUuZmV0Y2goXG4gICAgICB7IGtleXM6IGlkcy5tYXAoKGlkKSA9PiB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCBhcyBhbnkpKSB9LFxuICAgICAge31cbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzLnJvd3MubWFwKChyKSA9PiB7XG4gICAgICBpZiAociBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyByO1xuICAgICAgY29uc3QgcmVzID0gT2JqZWN0LmFzc2lnbih7fSwgcik7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzLCBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEEsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IChyIGFzIGFueSlbQ291Y2hEQktleXMuUkVWXSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZHM6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpW11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5uYXRpdmUuZmV0Y2goXG4gICAgICB7IGtleXM6IGlkcy5tYXAoKGlkKSA9PiB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCBhcyBhbnkpKSB9LFxuICAgICAge31cbiAgICApO1xuICAgIGNvbnN0IGRlbGV0aW9uOiBEb2N1bWVudEJ1bGtSZXNwb25zZVtdID0gYXdhaXQgdGhpcy5uYXRpdmUuYnVsayh7XG4gICAgICBkb2NzOiByZXN1bHRzLnJvd3MubWFwKChyKSA9PiB7XG4gICAgICAgIChyIGFzIGFueSlbQ291Y2hEQktleXMuREVMRVRFRF0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIGRlbGV0aW9uLmZvckVhY2goKGQ6IERvY3VtZW50QnVsa1Jlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoZC5lcnJvcikgY29uc29sZS5lcnJvcihkLmVycm9yKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cy5yb3dzLm1hcCgocikgPT4ge1xuICAgICAgaWYgKHIgaW5zdGFuY2VvZiBFcnJvcikgdGhyb3cgcjtcbiAgICAgIGNvbnN0IHJlcyA9IE9iamVjdC5hc3NpZ24oe30sIHIpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcywgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiAociBhcyBhbnkpW0NvdWNoREJLZXlzLlJFVl0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH1cblxuICBwYXJzZUVycm9yKGVycjogRXJyb3IgfCBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IEJhc2VFcnJvciB7XG4gICAgcmV0dXJuIFBvdWNoQWRhcHRlci5wYXJzZUVycm9yKGVyciwgcmVhc29uKTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUVycm9yKGVycjogRXJyb3IgfCBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IEJhc2VFcnJvciB7XG4gICAgLy8gcmV0dXJuIHN1cGVyLnBhcnNlRXJyb3IoZXJyLCByZWFzb24pO1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IpIHJldHVybiBlcnIgYXMgYW55O1xuICAgIGxldCBjb2RlOiBzdHJpbmcgPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgZXJyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb2RlID0gZXJyO1xuICAgICAgaWYgKGNvZGUubWF0Y2goL2FscmVhZHkgZXhpc3R8dXBkYXRlIGNvbmZsaWN0L2cpKVxuICAgICAgICByZXR1cm4gbmV3IENvbmZsaWN0RXJyb3IoY29kZSk7XG4gICAgICBpZiAoY29kZS5tYXRjaCgvbWlzc2luZ3xkZWxldGVkL2cpKSByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IoY29kZSk7XG4gICAgfSBlbHNlIGlmICgoZXJyIGFzIGFueSkuc3RhdHVzKSB7XG4gICAgICBjb2RlID0gKGVyciBhcyBhbnkpLnN0YXR1cztcbiAgICAgIHJlYXNvbiA9IHJlYXNvbiB8fCBlcnIubWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZSA9IGVyci5tZXNzYWdlO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29kZS50b1N0cmluZygpKSB7XG4gICAgICBjYXNlIFwiNDAxXCI6XG4gICAgICBjYXNlIFwiNDEyXCI6XG4gICAgICBjYXNlIFwiNDA5XCI6XG4gICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihyZWFzb24gYXMgc3RyaW5nKTtcbiAgICAgIGNhc2UgXCI0MDRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RGb3VuZEVycm9yKHJlYXNvbiBhcyBzdHJpbmcpO1xuICAgICAgY2FzZSBcIjQwMFwiOlxuICAgICAgICBpZiAoY29kZS50b1N0cmluZygpLm1hdGNoKC9Ob1xcc2luZGV4XFxzZXhpc3RzL2cpKVxuICAgICAgICAgIHJldHVybiBuZXcgSW5kZXhFcnJvcihlcnIpO1xuICAgICAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChjb2RlLnRvU3RyaW5nKCkubWF0Y2goL0VDT05OUkVGVVNFRC9nKSlcbiAgICAgICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25FcnJvcihlcnIpO1xuICAgICAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
207
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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O1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDckIsQ0FBQztRQUVELFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDeEIsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksNkJBQWEsQ0FBQyxNQUFnQixDQUFDLENBQUM7WUFDN0MsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSw2QkFBYSxDQUFDLE1BQWdCLENBQUMsQ0FBQztZQUM3QyxLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDO29CQUM3QyxPQUFPLElBQUksd0JBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxJQUFJLDZCQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEM7Z0JBQ0UsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztvQkFDeEMsT0FBTyxJQUFJLHNCQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sSUFBSSw2QkFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFoUUQsb0NBZ1FDIiwiZmlsZSI6ImFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5pbXBvcnQge1xuICBDb3VjaERCQWRhcHRlcixcbiAgQ291Y2hEQktleXMsXG4gIENyZWF0ZUluZGV4UmVxdWVzdCxcbiAgZ2VuZXJhdGVJbmRleGVzLFxuICBJbmRleEVycm9yLFxuICBNYW5nb1F1ZXJ5LFxufSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIENvbmZsaWN0RXJyb3IsXG4gIEludGVybmFsRXJyb3IsXG4gIE5vdEZvdW5kRXJyb3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yLCBVc2VyIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgRGF0YWJhc2UgPSBQb3VjaERCLkRhdGFiYXNlO1xuaW1wb3J0IFJlc3BvbnNlID0gUG91Y2hEQi5Db3JlLlJlc3BvbnNlO1xuaW1wb3J0IEVyciA9IFBvdWNoREIuQ29yZS5FcnJvcjtcbmltcG9ydCBJZE1ldGEgPSBQb3VjaERCLkNvcmUuSWRNZXRhO1xuaW1wb3J0IEdldE1ldGEgPSBQb3VjaERCLkNvcmUuR2V0TWV0YTtcbmltcG9ydCBDcmVhdGVJbmRleFJlc3BvbnNlID0gUG91Y2hEQi5GaW5kLkNyZWF0ZUluZGV4UmVzcG9uc2U7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgQnVsa0dldFJlc3BvbnNlID0gUG91Y2hEQi5Db3JlLkJ1bGtHZXRSZXNwb25zZTtcbmltcG9ydCBGaW5kUmVzcG9uc2UgPSBQb3VjaERCLkZpbmQuRmluZFJlc3BvbnNlO1xuXG5leHBvcnQgY2xhc3MgUG91Y2hBZGFwdGVyIGV4dGVuZHMgQ291Y2hEQkFkYXB0ZXI8RGF0YWJhc2U+IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IERhdGFiYXNlLCBmbGF2b3VyOiBzdHJpbmcgPSBcInBvdWNoXCIpIHtcbiAgICBzdXBlcihzY29wZSwgZmxhdm91cik7XG4gIH1cblxuICBhc3luYyB1c2VyKCk6IFByb21pc2U8VXNlcj4ge1xuICAgIGNvbnN0IHVybCA9ICh0aGlzLm5hdGl2ZSBhcyB1bmtub3duIGFzIHsgbmFtZTogc3RyaW5nIH0pLm5hbWU7XG4gICAgaWYgKHVybCkge1xuICAgICAgY29uc3QgcmVnZXhwID0gL2h0dHBzPzpcXC9cXC8oLis/KTouKz9AL2c7XG4gICAgICBjb25zdCBtID0gcmVnZXhwLmV4ZWModXJsKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXNlcih7XG4gICAgICAgICAgaWQ6IG1bMV0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBpbmRleDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIC4uLm1vZGVsczogQ29uc3RydWN0b3I8TT5bXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbmRleGVzOiBDcmVhdGVJbmRleFJlcXVlc3RbXSA9IGdlbmVyYXRlSW5kZXhlcyhtb2RlbHMpO1xuICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kZXhlcykge1xuICAgICAgY29uc3QgcmVzOiBDcmVhdGVJbmRleFJlc3BvbnNlPGFueT4gPSBhd2FpdCB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChcbiAgICAgICAgaW5kZXggYXMgYW55XG4gICAgICApO1xuICAgICAgY29uc3QgeyByZXN1bHQgfSA9IHJlcztcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiZXhpc3RpbmdcIilcbiAgICAgICAgdGhyb3cgbmV3IENvbmZsaWN0RXJyb3IoYEluZGV4ICR7aW5kZXgubmFtZX0gYWxyZWFkeSBleGlzdHNgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMubmF0aXZlLnB1dChtb2RlbCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGluc2VydCBkb2MgaWQ6ICR7aWR9IGluIHRhYmxlICR7dGFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWduTWV0YWRhdGEobW9kZWwsIHJlc3BvbnNlLnJldik7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZVtdIHwgRXJyW107XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5uYXRpdmUuYnVsa0RvY3MobW9kZWxzKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gICAgaWYgKCFyZXNwb25zZS5ldmVyeSgocjogUmVzcG9uc2UgfCBFcnIpID0+IChyIGFzIFJlc3BvbnNlKS5vaykpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IHJlc3BvbnNlLnJlZHVjZSgoYWNjdW06IHN0cmluZ1tdLCBlbCwgaSkgPT4ge1xuICAgICAgICBpZiAoZWwuZXJyb3IpXG4gICAgICAgICAgYWNjdW0ucHVzaChcbiAgICAgICAgICAgIGBlbCAke2l9OiAke2VsLmVycm9yfSR7ZWwucmVhc29uID8gYCAtICR7ZWwucmVhc29ufWAgOiBcIlwifWBcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LCBbXSk7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlcnJvcnMuam9pbihcIlxcblwiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXNzaWduTXVsdGlwbGVNZXRhZGF0YShcbiAgICAgIG1vZGVscyxcbiAgICAgIHJlc3BvbnNlLm1hcCgocikgPT4gci5yZXYgYXMgc3RyaW5nKVxuICAgICk7XG4gIH1cblxuICBhc3luYyByZWFkKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgX2lkID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgIGxldCByZWNvcmQ6IElkTWV0YSAmIEdldE1ldGE7XG4gICAgdHJ5IHtcbiAgICAgIHJlY29yZCA9IGF3YWl0IHRoaXMubmF0aXZlLmdldChfaWQpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3NpZ25NZXRhZGF0YShyZWNvcmQsIHJlY29yZC5fcmV2KTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWRzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgY29uc3QgcmVzdWx0czogQnVsa0dldFJlc3BvbnNlPGFueT4gPSBhd2FpdCB0aGlzLm5hdGl2ZS5idWxrR2V0KHtcbiAgICAgIGRvY3M6IGlkcy5tYXAoKGlkKSA9PiAoeyBpZDogdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQgYXMgYW55KSB9KSksXG4gICAgfSk7XG4gICAgY29uc3QgcmVzID0gcmVzdWx0cy5yZXN1bHRzLnJlZHVjZSgoYWNjdW06IGFueVtdLCByKSA9PiB7XG4gICAgICByLmRvY3MuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICBpZiAoKGQgYXMgYW55KS5lcnJvciB8fCAhKGQgYXMgYW55KS5vaylcbiAgICAgICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoXG4gICAgICAgICAgICAoKGQgYXMgeyBlcnJvcjogRXJyIH0pLmVycm9yIGFzIEVycm9yKSB8fFxuICAgICAgICAgICAgICBuZXcgSW50ZXJuYWxFcnJvcihcIk1pc3NpbmcgdmFsaWQgcmVzcG9uc2VcIilcbiAgICAgICAgICApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCAoZCBhcyB7IG9rOiBhbnkgfSkub2spO1xuICAgICAgICBhY2N1bS5wdXNoKHRoaXMuYXNzaWduTWV0YWRhdGEocmVzdWx0LCAoZCBhcyBhbnkpLm9rW0NvdWNoREJLZXlzLlJFVl0pKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMubmF0aXZlLnB1dChtb2RlbCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHVwZGF0ZSBkb2MgaWQ6ICR7aWR9IGluIHRhYmxlICR7dGFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWduTWV0YWRhdGEobW9kZWwsIHJlc3BvbnNlLnJldik7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgbGV0IHJlc3BvbnNlOiAoUmVzcG9uc2UgfCBFcnIpW107XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5uYXRpdmUuYnVsa0RvY3MobW9kZWxzKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gICAgaWYgKCFyZXNwb25zZS5ldmVyeSgocikgPT4gIShyIGFzIGFueSkuZXJyb3IpKSB7XG4gICAgICBjb25zdCBlcnJvcnMgPSByZXNwb25zZS5yZWR1Y2UoKGFjY3VtOiBzdHJpbmdbXSwgZWwsIGkpID0+IHtcbiAgICAgICAgaWYgKChlbCBhcyBhbnkpLmVycm9yKVxuICAgICAgICAgIGFjY3VtLnB1c2goXG4gICAgICAgICAgICBgZWwgJHtpfTogJHsoZWwgYXMgYW55KS5lcnJvcn0keyhlbCBhcyBhbnkpLnJlYXNvbiA/IGAgLSAkeyhlbCBhcyBhbnkpLnJlYXNvbn1gIDogXCJcIn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSwgW10pO1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoZXJyb3JzLmpvaW4oXCJcXG5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFzc2lnbk11bHRpcGxlTWV0YWRhdGEoXG4gICAgICBtb2RlbHMsXG4gICAgICByZXNwb25zZS5tYXAoKHIpID0+IHIucmV2IGFzIHN0cmluZylcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgX2lkID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgIGxldCByZWNvcmQ6IElkTWV0YSAmIEdldE1ldGE7XG4gICAgdHJ5IHtcbiAgICAgIHJlY29yZCA9IGF3YWl0IHRoaXMubmF0aXZlLmdldChfaWQpO1xuICAgICAgYXdhaXQgdGhpcy5uYXRpdmUucmVtb3ZlKF9pZCwgcmVjb3JkLl9yZXYpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3NpZ25NZXRhZGF0YShyZWNvcmQsIHJlY29yZC5fcmV2KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZHM6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpW11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBjb25zdCByZXN1bHRzOiBCdWxrR2V0UmVzcG9uc2U8YW55PiA9IGF3YWl0IHRoaXMubmF0aXZlLmJ1bGtHZXQoe1xuICAgICAgZG9jczogaWRzLm1hcCgoaWQpID0+ICh7IGlkOiB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCBhcyBhbnkpIH0pKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlbGV0aW9uOiAoUmVzcG9uc2UgfCBFcnIpW10gPSBhd2FpdCB0aGlzLm5hdGl2ZS5idWxrRG9jcyhcbiAgICAgIHJlc3VsdHMucmVzdWx0cy5tYXAoKHIpID0+IHtcbiAgICAgICAgKHIgYXMgYW55KVtDb3VjaERCS2V5cy5ERUxFVEVEXSA9IHRydWU7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZXJycyA9IGRlbGV0aW9uLmZpbHRlcigoZCkgPT4gKGQgYXMgYW55KS5lcnJvcik7XG4gICAgaWYgKGVycnMubGVuZ3RoKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlcnJzLmpvaW4oXCJcXG5cIikpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0cy5yZWR1Y2UoKGFjY3VtOiBhbnlbXSwgcikgPT4ge1xuICAgICAgci5kb2NzLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgKGQgYXMgeyBvazogYW55IH0pLm9rKTtcbiAgICAgICAgYWNjdW0ucHVzaCh0aGlzLmFzc2lnbk1ldGFkYXRhKHJlc3VsdCwgKGQgYXMgYW55KS5va1tDb3VjaERCS2V5cy5SRVZdKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBhc3luYyByYXc8Vj4ocmF3SW5wdXQ6IE1hbmdvUXVlcnksIHByb2Nlc3MgPSB0cnVlKTogUHJvbWlzZTxWPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBGaW5kUmVzcG9uc2U8YW55PiA9IGF3YWl0IHRoaXMubmF0aXZlLmZpbmQoXG4gICAgICAgIHJhd0lucHV0IGFzIGFueVxuICAgICAgKTtcbiAgICAgIGlmIChyZXNwb25zZS53YXJuaW5nKSBjb25zb2xlLndhcm4ocmVzcG9uc2Uud2FybmluZyk7XG4gICAgICBpZiAocHJvY2VzcykgcmV0dXJuIHJlc3BvbnNlLmRvY3MgYXMgVjtcbiAgICAgIHJldHVybiByZXNwb25zZSBhcyBWO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlRXJyb3IoZXJyOiBFcnJvciB8IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogQmFzZUVycm9yIHtcbiAgICByZXR1cm4gUG91Y2hBZGFwdGVyLnBhcnNlRXJyb3IoZXJyLCByZWFzb24pO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRXJyb3IoZXJyOiBFcnJvciB8IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogQmFzZUVycm9yIHtcbiAgICAvLyByZXR1cm4gc3VwZXIucGFyc2VFcnJvcihlcnIsIHJlYXNvbik7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcikgcmV0dXJuIGVyciBhcyBhbnk7XG4gICAgbGV0IGNvZGU6IHN0cmluZyA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvZGUgPSBlcnI7XG4gICAgICBpZiAoY29kZS5tYXRjaCgvYWxyZWFkeSBleGlzdHx1cGRhdGUgY29uZmxpY3QvZykpXG4gICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihjb2RlKTtcbiAgICAgIGlmIChjb2RlLm1hdGNoKC9taXNzaW5nfGRlbGV0ZWQvZykpIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihjb2RlKTtcbiAgICB9IGVsc2UgaWYgKChlcnIgYXMgYW55KS5zdGF0dXMpIHtcbiAgICAgIGNvZGUgPSAoZXJyIGFzIGFueSkuc3RhdHVzO1xuICAgICAgcmVhc29uID0gcmVhc29uIHx8IGVyci5tZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb2RlLnRvU3RyaW5nKCkpIHtcbiAgICAgIGNhc2UgXCI0MDFcIjpcbiAgICAgIGNhc2UgXCI0MTJcIjpcbiAgICAgIGNhc2UgXCI0MDlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDb25mbGljdEVycm9yKHJlYXNvbiBhcyBzdHJpbmcpO1xuICAgICAgY2FzZSBcIjQwNFwiOlxuICAgICAgICByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IocmVhc29uIGFzIHN0cmluZyk7XG4gICAgICBjYXNlIFwiNDAwXCI6XG4gICAgICAgIGlmIChjb2RlLnRvU3RyaW5nKCkubWF0Y2goL05vXFxzaW5kZXhcXHNleGlzdHMvZykpXG4gICAgICAgICAgcmV0dXJuIG5ldyBJbmRleEVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGNvZGUudG9TdHJpbmcoKS5tYXRjaCgvRUNPTk5SRUZVU0VEL2cpKVxuICAgICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuIl19
package/lib/adapter.d.ts CHANGED
@@ -1,12 +1,22 @@
1
1
  import "reflect-metadata";
2
- import { CouchDBAdapter, DocumentScope } from "@decaf-ts/for-couchdb";
2
+ import { CouchDBAdapter, MangoQuery } from "@decaf-ts/for-couchdb";
3
3
  import { BaseError } from "@decaf-ts/db-decorators";
4
4
  import { User } from "@decaf-ts/core";
5
- export declare class PouchAdapter extends CouchDBAdapter {
6
- constructor(scope: DocumentScope<any>, flavour?: string);
5
+ import Database = PouchDB.Database;
6
+ import { Constructor, Model } from "@decaf-ts/decorator-validation";
7
+ export declare class PouchAdapter extends CouchDBAdapter<Database> {
8
+ constructor(scope: Database, flavour?: string);
7
9
  user(): Promise<User>;
10
+ protected index<M extends Model>(...models: Constructor<M>[]): Promise<void>;
11
+ create(tableName: string, id: string | number, model: Record<string, any>): Promise<Record<string, any>>;
12
+ createAll(tableName: string, ids: string[] | number[], models: Record<string, any>[]): Promise<Record<string, any>[]>;
13
+ read(tableName: string, id: string | number): Promise<Record<string, any>>;
8
14
  readAll(tableName: string, ids: (string | number | bigint)[]): Promise<Record<string, any>[]>;
15
+ update(tableName: string, id: string | number, model: Record<string, any>): Promise<Record<string, any>>;
16
+ updateAll(tableName: string, ids: string[] | number[], models: Record<string, any>[]): Promise<Record<string, any>[]>;
17
+ delete(tableName: string, id: string | number): Promise<Record<string, any>>;
9
18
  deleteAll(tableName: string, ids: (string | number | bigint)[]): Promise<Record<string, any>[]>;
19
+ raw<V>(rawInput: MangoQuery, process?: boolean): Promise<V>;
10
20
  parseError(err: Error | string, reason?: string): BaseError;
11
21
  static parseError(err: Error | string, reason?: string): BaseError;
12
22
  }
@@ -1,7 +1,5 @@
1
1
  import { Model } from "@decaf-ts/decorator-validation";
2
2
  import { MangoQuery } from "@decaf-ts/for-couchdb";
3
- import { PouchAdapter } from "./adapter";
4
- import { Repository } from "@decaf-ts/core";
5
- export interface PouchRepository<M extends Model> extends Repository<M, MangoQuery> {
6
- adapter: PouchAdapter;
7
- }
3
+ import { Adapter, Repository } from "@decaf-ts/core";
4
+ import Database = PouchDB.Database;
5
+ export type PouchRepository<M extends Model> = Repository<M, MangoQuery, Adapter<Database, MangoQuery>>;
@@ -1,3 +1,3 @@
1
1
  export {};
2
2
 
3
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9Qb3VjaFJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJQb3VjaFJlcG9zaXRvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE1hbmdvUXVlcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQgeyBQb3VjaEFkYXB0ZXIgfSBmcm9tIFwiLi9hZGFwdGVyXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG91Y2hSZXBvc2l0b3J5PE0gZXh0ZW5kcyBNb2RlbD5cbiAgZXh0ZW5kcyBSZXBvc2l0b3J5PE0sIE1hbmdvUXVlcnk+IHtcbiAgYWRhcHRlcjogUG91Y2hBZGFwdGVyO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9Qb3VjaFJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJQb3VjaFJlcG9zaXRvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE1hbmdvUXVlcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQgeyBBZGFwdGVyLCBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgRGF0YWJhc2UgPSBQb3VjaERCLkRhdGFiYXNlO1xuXG5leHBvcnQgdHlwZSBQb3VjaFJlcG9zaXRvcnk8TSBleHRlbmRzIE1vZGVsPiA9IFJlcG9zaXRvcnk8XG4gIE0sXG4gIE1hbmdvUXVlcnksXG4gIEFkYXB0ZXI8RGF0YWJhc2UsIE1hbmdvUXVlcnk+XG4+O1xuIl19
@@ -1,12 +1,22 @@
1
1
  import "reflect-metadata";
2
- import { CouchDBAdapter, DocumentScope } from "@decaf-ts/for-couchdb";
2
+ import { CouchDBAdapter, MangoQuery } from "@decaf-ts/for-couchdb";
3
3
  import { BaseError } from "@decaf-ts/db-decorators";
4
4
  import { User } from "@decaf-ts/core";
5
- export declare class PouchAdapter extends CouchDBAdapter {
6
- constructor(scope: DocumentScope<any>, flavour?: string);
5
+ import Database = PouchDB.Database;
6
+ import { Constructor, Model } from "@decaf-ts/decorator-validation";
7
+ export declare class PouchAdapter extends CouchDBAdapter<Database> {
8
+ constructor(scope: Database, flavour?: string);
7
9
  user(): Promise<User>;
10
+ protected index<M extends Model>(...models: Constructor<M>[]): Promise<void>;
11
+ create(tableName: string, id: string | number, model: Record<string, any>): Promise<Record<string, any>>;
12
+ createAll(tableName: string, ids: string[] | number[], models: Record<string, any>[]): Promise<Record<string, any>[]>;
13
+ read(tableName: string, id: string | number): Promise<Record<string, any>>;
8
14
  readAll(tableName: string, ids: (string | number | bigint)[]): Promise<Record<string, any>[]>;
15
+ update(tableName: string, id: string | number, model: Record<string, any>): Promise<Record<string, any>>;
16
+ updateAll(tableName: string, ids: string[] | number[], models: Record<string, any>[]): Promise<Record<string, any>[]>;
17
+ delete(tableName: string, id: string | number): Promise<Record<string, any>>;
9
18
  deleteAll(tableName: string, ids: (string | number | bigint)[]): Promise<Record<string, any>[]>;
19
+ raw<V>(rawInput: MangoQuery, process?: boolean): Promise<V>;
10
20
  parseError(err: Error | string, reason?: string): BaseError;
11
21
  static parseError(err: Error | string, reason?: string): BaseError;
12
22
  }
@@ -1,13 +1,13 @@
1
1
  import "reflect-metadata";
2
- import { CouchDBAdapter, CouchDBKeys, IndexError, } from "@decaf-ts/for-couchdb";
2
+ import { CouchDBAdapter, CouchDBKeys, generateIndexes, IndexError, } from "@decaf-ts/for-couchdb";
3
3
  import { BaseError, ConflictError, InternalError, NotFoundError, } from "@decaf-ts/db-decorators";
4
- import { ConnectionError, PersistenceKeys, User } from "@decaf-ts/core";
4
+ import { ConnectionError, User } from "@decaf-ts/core";
5
5
  export class PouchAdapter extends CouchDBAdapter {
6
6
  constructor(scope, flavour = "pouch") {
7
7
  super(scope, flavour);
8
8
  }
9
9
  async user() {
10
- const url = this.native.server.name;
10
+ const url = this.native.name;
11
11
  if (url) {
12
12
  const regexp = /https?:\/\/(.+?):.+?@/g;
13
13
  const m = regexp.exec(url);
@@ -19,43 +19,145 @@ export class PouchAdapter extends CouchDBAdapter {
19
19
  }
20
20
  throw new InternalError("Not implemented");
21
21
  }
22
+ async index(...models) {
23
+ const indexes = generateIndexes(models);
24
+ for (const index of indexes) {
25
+ const res = await this.native.createIndex(index);
26
+ const { result } = res;
27
+ if (result === "existing")
28
+ throw new ConflictError(`Index ${index.name} already exists`);
29
+ }
30
+ }
31
+ async create(tableName, id, model) {
32
+ let response;
33
+ try {
34
+ response = await this.native.put(model);
35
+ }
36
+ catch (e) {
37
+ throw this.parseError(e);
38
+ }
39
+ if (!response.ok)
40
+ throw new InternalError(`Failed to insert doc id: ${id} in table ${tableName}`);
41
+ return this.assignMetadata(model, response.rev);
42
+ }
43
+ async createAll(tableName, ids, models) {
44
+ let response;
45
+ try {
46
+ response = await this.native.bulkDocs(models);
47
+ }
48
+ catch (e) {
49
+ throw this.parseError(e);
50
+ }
51
+ if (!response.every((r) => r.ok)) {
52
+ const errors = response.reduce((accum, el, i) => {
53
+ if (el.error)
54
+ accum.push(`el ${i}: ${el.error}${el.reason ? ` - ${el.reason}` : ""}`);
55
+ return accum;
56
+ }, []);
57
+ throw new InternalError(errors.join("\n"));
58
+ }
59
+ return this.assignMultipleMetadata(models, response.map((r) => r.rev));
60
+ }
61
+ async read(tableName, id) {
62
+ const _id = this.generateId(tableName, id);
63
+ let record;
64
+ try {
65
+ record = await this.native.get(_id);
66
+ }
67
+ catch (e) {
68
+ throw this.parseError(e);
69
+ }
70
+ return this.assignMetadata(record, record._rev);
71
+ }
22
72
  async readAll(tableName, ids) {
23
- const results = await this.native.fetch({ keys: ids.map((id) => this.generateId(tableName, id)) }, {});
24
- return results.rows.map((r) => {
25
- if (r instanceof Error)
26
- throw r;
27
- const res = Object.assign({}, r);
28
- Object.defineProperty(res, PersistenceKeys.METADATA, {
29
- enumerable: false,
30
- writable: false,
31
- value: r[CouchDBKeys.REV],
32
- });
33
- return res;
73
+ const results = await this.native.bulkGet({
74
+ docs: ids.map((id) => ({ id: this.generateId(tableName, id) })),
34
75
  });
76
+ const res = results.results.reduce((accum, r) => {
77
+ r.docs.forEach((d) => {
78
+ if (d.error || !d.ok)
79
+ throw this.parseError(d.error ||
80
+ new InternalError("Missing valid response"));
81
+ const result = Object.assign({}, d.ok);
82
+ accum.push(this.assignMetadata(result, d.ok[CouchDBKeys.REV]));
83
+ });
84
+ return accum;
85
+ }, []);
86
+ return res;
87
+ }
88
+ async update(tableName, id, model) {
89
+ let response;
90
+ try {
91
+ response = await this.native.put(model);
92
+ }
93
+ catch (e) {
94
+ throw this.parseError(e);
95
+ }
96
+ if (!response.ok)
97
+ throw new InternalError(`Failed to update doc id: ${id} in table ${tableName}`);
98
+ return this.assignMetadata(model, response.rev);
99
+ }
100
+ async updateAll(tableName, ids, models) {
101
+ let response;
102
+ try {
103
+ response = await this.native.bulkDocs(models);
104
+ }
105
+ catch (e) {
106
+ throw this.parseError(e);
107
+ }
108
+ if (!response.every((r) => !r.error)) {
109
+ const errors = response.reduce((accum, el, i) => {
110
+ if (el.error)
111
+ accum.push(`el ${i}: ${el.error}${el.reason ? ` - ${el.reason}` : ""}`);
112
+ return accum;
113
+ }, []);
114
+ throw new InternalError(errors.join("\n"));
115
+ }
116
+ return this.assignMultipleMetadata(models, response.map((r) => r.rev));
117
+ }
118
+ async delete(tableName, id) {
119
+ const _id = this.generateId(tableName, id);
120
+ let record;
121
+ try {
122
+ record = await this.native.get(_id);
123
+ await this.native.remove(_id, record._rev);
124
+ }
125
+ catch (e) {
126
+ throw this.parseError(e);
127
+ }
128
+ return this.assignMetadata(record, record._rev);
35
129
  }
36
130
  async deleteAll(tableName, ids) {
37
- const results = await this.native.fetch({ keys: ids.map((id) => this.generateId(tableName, id)) }, {});
38
- const deletion = await this.native.bulk({
39
- docs: results.rows.map((r) => {
40
- r[CouchDBKeys.DELETED] = true;
41
- return r;
42
- }),
131
+ const results = await this.native.bulkGet({
132
+ docs: ids.map((id) => ({ id: this.generateId(tableName, id) })),
43
133
  });
44
- deletion.forEach((d) => {
45
- if (d.error)
46
- console.error(d.error);
47
- });
48
- return results.rows.map((r) => {
49
- if (r instanceof Error)
50
- throw r;
51
- const res = Object.assign({}, r);
52
- Object.defineProperty(res, PersistenceKeys.METADATA, {
53
- enumerable: false,
54
- writable: false,
55
- value: r[CouchDBKeys.REV],
134
+ const deletion = await this.native.bulkDocs(results.results.map((r) => {
135
+ r[CouchDBKeys.DELETED] = true;
136
+ return r;
137
+ }));
138
+ const errs = deletion.filter((d) => d.error);
139
+ if (errs.length)
140
+ throw new InternalError(errs.join("\n"));
141
+ return results.results.reduce((accum, r) => {
142
+ r.docs.forEach((d) => {
143
+ const result = Object.assign({}, d.ok);
144
+ accum.push(this.assignMetadata(result, d.ok[CouchDBKeys.REV]));
56
145
  });
57
- return res;
58
- });
146
+ return accum;
147
+ }, []);
148
+ }
149
+ async raw(rawInput, process = true) {
150
+ try {
151
+ const response = await this.native.find(rawInput);
152
+ if (response.warning)
153
+ console.warn(response.warning);
154
+ if (process)
155
+ return response.docs;
156
+ return response;
157
+ }
158
+ catch (e) {
159
+ throw this.parseError(e);
160
+ }
59
161
  }
60
162
  parseError(err, reason) {
61
163
  return PouchAdapter.parseError(err, reason);
@@ -98,4 +200,4 @@ export class PouchAdapter extends CouchDBAdapter {
98
200
  }
99
201
  }
100
202
 
101
- //# sourceMappingURL=data:application/json;charset=utf8;base64,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ImltcG9ydCBcInJlZmxlY3QtbWV0YWRhdGFcIjtcbmltcG9ydCB7XG4gIENvdWNoREJBZGFwdGVyLFxuICBDb3VjaERCS2V5cyxcbiAgRG9jdW1lbnRCdWxrUmVzcG9uc2UsXG4gIERvY3VtZW50U2NvcGUsXG4gIEluZGV4RXJyb3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcbmltcG9ydCB7XG4gIEJhc2VFcnJvcixcbiAgQ29uZmxpY3RFcnJvcixcbiAgSW50ZXJuYWxFcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBDb25uZWN0aW9uRXJyb3IsIFBlcnNpc3RlbmNlS2V5cywgVXNlciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgUG91Y2hBZGFwdGVyIGV4dGVuZHMgQ291Y2hEQkFkYXB0ZXIge1xuICBjb25zdHJ1Y3RvcihzY29wZTogRG9jdW1lbnRTY29wZTxhbnk+LCBmbGF2b3VyOiBzdHJpbmcgPSBcInBvdWNoXCIpIHtcbiAgICBzdXBlcihzY29wZSwgZmxhdm91cik7XG4gIH1cblxuICBhc3luYyB1c2VyKCk6IFByb21pc2U8VXNlcj4ge1xuICAgIGNvbnN0IHVybCA9ICh0aGlzLm5hdGl2ZS5zZXJ2ZXIgYXMgdW5rbm93biBhcyB7IG5hbWU6IHN0cmluZyB9KS5uYW1lO1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGNvbnN0IHJlZ2V4cCA9IC9odHRwcz86XFwvXFwvKC4rPyk6Lis/QC9nO1xuICAgICAgY29uc3QgbSA9IHJlZ2V4cC5leGVjKHVybCk7XG4gICAgICBpZiAobSkge1xuICAgICAgICByZXR1cm4gbmV3IFVzZXIoe1xuICAgICAgICAgIGlkOiBtWzFdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cblxuICBhc3luYyByZWFkQWxsKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkczogKHN0cmluZyB8IG51bWJlciB8IGJpZ2ludClbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLm5hdGl2ZS5mZXRjaChcbiAgICAgIHsga2V5czogaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkIGFzIGFueSkpIH0sXG4gICAgICB7fVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdHMucm93cy5tYXAoKHIpID0+IHtcbiAgICAgIGlmIChyIGluc3RhbmNlb2YgRXJyb3IpIHRocm93IHI7XG4gICAgICBjb25zdCByZXMgPSBPYmplY3QuYXNzaWduKHt9LCByKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXMsIFBlcnNpc3RlbmNlS2V5cy5NRVRBREFUQSwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogKHIgYXMgYW55KVtDb3VjaERCS2V5cy5SRVZdLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQWxsKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkczogKHN0cmluZyB8IG51bWJlciB8IGJpZ2ludClbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT5bXT4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLm5hdGl2ZS5mZXRjaChcbiAgICAgIHsga2V5czogaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2VuZXJhdGVJZCh0YWJsZU5hbWUsIGlkIGFzIGFueSkpIH0sXG4gICAgICB7fVxuICAgICk7XG4gICAgY29uc3QgZGVsZXRpb246IERvY3VtZW50QnVsa1Jlc3BvbnNlW10gPSBhd2FpdCB0aGlzLm5hdGl2ZS5idWxrKHtcbiAgICAgIGRvY3M6IHJlc3VsdHMucm93cy5tYXAoKHIpID0+IHtcbiAgICAgICAgKHIgYXMgYW55KVtDb3VjaERCS2V5cy5ERUxFVEVEXSA9IHRydWU7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSksXG4gICAgfSk7XG4gICAgZGVsZXRpb24uZm9yRWFjaCgoZDogRG9jdW1lbnRCdWxrUmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChkLmVycm9yKSBjb25zb2xlLmVycm9yKGQuZXJyb3IpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzLnJvd3MubWFwKChyKSA9PiB7XG4gICAgICBpZiAociBpbnN0YW5jZW9mIEVycm9yKSB0aHJvdyByO1xuICAgICAgY29uc3QgcmVzID0gT2JqZWN0LmFzc2lnbih7fSwgcik7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzLCBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEEsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IChyIGFzIGFueSlbQ291Y2hEQktleXMuUkVWXSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlRXJyb3IoZXJyOiBFcnJvciB8IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogQmFzZUVycm9yIHtcbiAgICByZXR1cm4gUG91Y2hBZGFwdGVyLnBhcnNlRXJyb3IoZXJyLCByZWFzb24pO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRXJyb3IoZXJyOiBFcnJvciB8IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogQmFzZUVycm9yIHtcbiAgICAvLyByZXR1cm4gc3VwZXIucGFyc2VFcnJvcihlcnIsIHJlYXNvbik7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcikgcmV0dXJuIGVyciBhcyBhbnk7XG4gICAgbGV0IGNvZGU6IHN0cmluZyA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvZGUgPSBlcnI7XG4gICAgICBpZiAoY29kZS5tYXRjaCgvYWxyZWFkeSBleGlzdHx1cGRhdGUgY29uZmxpY3QvZykpXG4gICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihjb2RlKTtcbiAgICAgIGlmIChjb2RlLm1hdGNoKC9taXNzaW5nfGRlbGV0ZWQvZykpIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihjb2RlKTtcbiAgICB9IGVsc2UgaWYgKChlcnIgYXMgYW55KS5zdGF0dXMpIHtcbiAgICAgIGNvZGUgPSAoZXJyIGFzIGFueSkuc3RhdHVzO1xuICAgICAgcmVhc29uID0gcmVhc29uIHx8IGVyci5tZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb2RlLnRvU3RyaW5nKCkpIHtcbiAgICAgIGNhc2UgXCI0MDFcIjpcbiAgICAgIGNhc2UgXCI0MTJcIjpcbiAgICAgIGNhc2UgXCI0MDlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDb25mbGljdEVycm9yKHJlYXNvbiBhcyBzdHJpbmcpO1xuICAgICAgY2FzZSBcIjQwNFwiOlxuICAgICAgICByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IocmVhc29uIGFzIHN0cmluZyk7XG4gICAgICBjYXNlIFwiNDAwXCI6XG4gICAgICAgIGlmIChjb2RlLnRvU3RyaW5nKCkubWF0Y2goL05vXFxzaW5kZXhcXHNleGlzdHMvZykpXG4gICAgICAgICAgcmV0dXJuIG5ldyBJbmRleEVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGNvZGUudG9TdHJpbmcoKS5tYXRjaCgvRUNPTk5SRUZVU0VEL2cpKVxuICAgICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuIl19
203
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsQ0FBQzthQUFNLElBQUssR0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9CLElBQUksR0FBSSxHQUFXLENBQUMsTUFBTSxDQUFDO1lBQzNCLE1BQU0sR0FBRyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFnQixDQUFDLENBQUM7WUFDN0MsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSxhQUFhLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO1lBQzdDLEtBQUssS0FBSztnQkFDUixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7b0JBQzdDLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEM7Z0JBQ0UsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQztvQkFDeEMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwiZmlsZSI6ImFkYXB0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5pbXBvcnQge1xuICBDb3VjaERCQWRhcHRlcixcbiAgQ291Y2hEQktleXMsXG4gIENyZWF0ZUluZGV4UmVxdWVzdCxcbiAgZ2VuZXJhdGVJbmRleGVzLFxuICBJbmRleEVycm9yLFxuICBNYW5nb1F1ZXJ5LFxufSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIENvbmZsaWN0RXJyb3IsXG4gIEludGVybmFsRXJyb3IsXG4gIE5vdEZvdW5kRXJyb3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yLCBVc2VyIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgRGF0YWJhc2UgPSBQb3VjaERCLkRhdGFiYXNlO1xuaW1wb3J0IFJlc3BvbnNlID0gUG91Y2hEQi5Db3JlLlJlc3BvbnNlO1xuaW1wb3J0IEVyciA9IFBvdWNoREIuQ29yZS5FcnJvcjtcbmltcG9ydCBJZE1ldGEgPSBQb3VjaERCLkNvcmUuSWRNZXRhO1xuaW1wb3J0IEdldE1ldGEgPSBQb3VjaERCLkNvcmUuR2V0TWV0YTtcbmltcG9ydCBDcmVhdGVJbmRleFJlc3BvbnNlID0gUG91Y2hEQi5GaW5kLkNyZWF0ZUluZGV4UmVzcG9uc2U7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgQnVsa0dldFJlc3BvbnNlID0gUG91Y2hEQi5Db3JlLkJ1bGtHZXRSZXNwb25zZTtcbmltcG9ydCBGaW5kUmVzcG9uc2UgPSBQb3VjaERCLkZpbmQuRmluZFJlc3BvbnNlO1xuXG5leHBvcnQgY2xhc3MgUG91Y2hBZGFwdGVyIGV4dGVuZHMgQ291Y2hEQkFkYXB0ZXI8RGF0YWJhc2U+IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IERhdGFiYXNlLCBmbGF2b3VyOiBzdHJpbmcgPSBcInBvdWNoXCIpIHtcbiAgICBzdXBlcihzY29wZSwgZmxhdm91cik7XG4gIH1cblxuICBhc3luYyB1c2VyKCk6IFByb21pc2U8VXNlcj4ge1xuICAgIGNvbnN0IHVybCA9ICh0aGlzLm5hdGl2ZSBhcyB1bmtub3duIGFzIHsgbmFtZTogc3RyaW5nIH0pLm5hbWU7XG4gICAgaWYgKHVybCkge1xuICAgICAgY29uc3QgcmVnZXhwID0gL2h0dHBzPzpcXC9cXC8oLis/KTouKz9AL2c7XG4gICAgICBjb25zdCBtID0gcmVnZXhwLmV4ZWModXJsKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXNlcih7XG4gICAgICAgICAgaWQ6IG1bMV0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBpbmRleDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIC4uLm1vZGVsczogQ29uc3RydWN0b3I8TT5bXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbmRleGVzOiBDcmVhdGVJbmRleFJlcXVlc3RbXSA9IGdlbmVyYXRlSW5kZXhlcyhtb2RlbHMpO1xuICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kZXhlcykge1xuICAgICAgY29uc3QgcmVzOiBDcmVhdGVJbmRleFJlc3BvbnNlPGFueT4gPSBhd2FpdCB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChcbiAgICAgICAgaW5kZXggYXMgYW55XG4gICAgICApO1xuICAgICAgY29uc3QgeyByZXN1bHQgfSA9IHJlcztcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiZXhpc3RpbmdcIilcbiAgICAgICAgdGhyb3cgbmV3IENvbmZsaWN0RXJyb3IoYEluZGV4ICR7aW5kZXgubmFtZX0gYWxyZWFkeSBleGlzdHNgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMubmF0aXZlLnB1dChtb2RlbCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGluc2VydCBkb2MgaWQ6ICR7aWR9IGluIHRhYmxlICR7dGFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWduTWV0YWRhdGEobW9kZWwsIHJlc3BvbnNlLnJldik7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZVtdIHwgRXJyW107XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5uYXRpdmUuYnVsa0RvY3MobW9kZWxzKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gICAgaWYgKCFyZXNwb25zZS5ldmVyeSgocjogUmVzcG9uc2UgfCBFcnIpID0+IChyIGFzIFJlc3BvbnNlKS5vaykpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IHJlc3BvbnNlLnJlZHVjZSgoYWNjdW06IHN0cmluZ1tdLCBlbCwgaSkgPT4ge1xuICAgICAgICBpZiAoZWwuZXJyb3IpXG4gICAgICAgICAgYWNjdW0ucHVzaChcbiAgICAgICAgICAgIGBlbCAke2l9OiAke2VsLmVycm9yfSR7ZWwucmVhc29uID8gYCAtICR7ZWwucmVhc29ufWAgOiBcIlwifWBcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LCBbXSk7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlcnJvcnMuam9pbihcIlxcblwiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXNzaWduTXVsdGlwbGVNZXRhZGF0YShcbiAgICAgIG1vZGVscyxcbiAgICAgIHJlc3BvbnNlLm1hcCgocikgPT4gci5yZXYgYXMgc3RyaW5nKVxuICAgICk7XG4gIH1cblxuICBhc3luYyByZWFkKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgX2lkID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgIGxldCByZWNvcmQ6IElkTWV0YSAmIEdldE1ldGE7XG4gICAgdHJ5IHtcbiAgICAgIHJlY29yZCA9IGF3YWl0IHRoaXMubmF0aXZlLmdldChfaWQpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3NpZ25NZXRhZGF0YShyZWNvcmQsIHJlY29yZC5fcmV2KTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWRzOiAoc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgY29uc3QgcmVzdWx0czogQnVsa0dldFJlc3BvbnNlPGFueT4gPSBhd2FpdCB0aGlzLm5hdGl2ZS5idWxrR2V0KHtcbiAgICAgIGRvY3M6IGlkcy5tYXAoKGlkKSA9PiAoeyBpZDogdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQgYXMgYW55KSB9KSksXG4gICAgfSk7XG4gICAgY29uc3QgcmVzID0gcmVzdWx0cy5yZXN1bHRzLnJlZHVjZSgoYWNjdW06IGFueVtdLCByKSA9PiB7XG4gICAgICByLmRvY3MuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICBpZiAoKGQgYXMgYW55KS5lcnJvciB8fCAhKGQgYXMgYW55KS5vaylcbiAgICAgICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoXG4gICAgICAgICAgICAoKGQgYXMgeyBlcnJvcjogRXJyIH0pLmVycm9yIGFzIEVycm9yKSB8fFxuICAgICAgICAgICAgICBuZXcgSW50ZXJuYWxFcnJvcihcIk1pc3NpbmcgdmFsaWQgcmVzcG9uc2VcIilcbiAgICAgICAgICApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCAoZCBhcyB7IG9rOiBhbnkgfSkub2spO1xuICAgICAgICBhY2N1bS5wdXNoKHRoaXMuYXNzaWduTWV0YWRhdGEocmVzdWx0LCAoZCBhcyBhbnkpLm9rW0NvdWNoREJLZXlzLlJFVl0pKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjY3VtO1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMubmF0aXZlLnB1dChtb2RlbCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyB0aGlzLnBhcnNlRXJyb3IoZSk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHVwZGF0ZSBkb2MgaWQ6ICR7aWR9IGluIHRhYmxlICR7dGFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYXNzaWduTWV0YWRhdGEobW9kZWwsIHJlc3BvbnNlLnJldik7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBbGwoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIG1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55PltdPiB7XG4gICAgbGV0IHJlc3BvbnNlOiAoUmVzcG9uc2UgfCBFcnIpW107XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5uYXRpdmUuYnVsa0RvY3MobW9kZWxzKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlKTtcbiAgICB9XG4gICAgaWYgKCFyZXNwb25zZS5ldmVyeSgocikgPT4gIShyIGFzIGFueSkuZXJyb3IpKSB7XG4gICAgICBjb25zdCBlcnJvcnMgPSByZXNwb25zZS5yZWR1Y2UoKGFjY3VtOiBzdHJpbmdbXSwgZWwsIGkpID0+IHtcbiAgICAgICAgaWYgKChlbCBhcyBhbnkpLmVycm9yKVxuICAgICAgICAgIGFjY3VtLnB1c2goXG4gICAgICAgICAgICBgZWwgJHtpfTogJHsoZWwgYXMgYW55KS5lcnJvcn0keyhlbCBhcyBhbnkpLnJlYXNvbiA/IGAgLSAkeyhlbCBhcyBhbnkpLnJlYXNvbn1gIDogXCJcIn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSwgW10pO1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoZXJyb3JzLmpvaW4oXCJcXG5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFzc2lnbk11bHRpcGxlTWV0YWRhdGEoXG4gICAgICBtb2RlbHMsXG4gICAgICByZXNwb25zZS5tYXAoKHIpID0+IHIucmV2IGFzIHN0cmluZylcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgX2lkID0gdGhpcy5nZW5lcmF0ZUlkKHRhYmxlTmFtZSwgaWQpO1xuICAgIGxldCByZWNvcmQ6IElkTWV0YSAmIEdldE1ldGE7XG4gICAgdHJ5IHtcbiAgICAgIHJlY29yZCA9IGF3YWl0IHRoaXMubmF0aXZlLmdldChfaWQpO1xuICAgICAgYXdhaXQgdGhpcy5uYXRpdmUucmVtb3ZlKF9pZCwgcmVjb3JkLl9yZXYpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hc3NpZ25NZXRhZGF0YShyZWNvcmQsIHJlY29yZC5fcmV2KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZHM6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpW11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+IHtcbiAgICBjb25zdCByZXN1bHRzOiBCdWxrR2V0UmVzcG9uc2U8YW55PiA9IGF3YWl0IHRoaXMubmF0aXZlLmJ1bGtHZXQoe1xuICAgICAgZG9jczogaWRzLm1hcCgoaWQpID0+ICh7IGlkOiB0aGlzLmdlbmVyYXRlSWQodGFibGVOYW1lLCBpZCBhcyBhbnkpIH0pKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlbGV0aW9uOiAoUmVzcG9uc2UgfCBFcnIpW10gPSBhd2FpdCB0aGlzLm5hdGl2ZS5idWxrRG9jcyhcbiAgICAgIHJlc3VsdHMucmVzdWx0cy5tYXAoKHIpID0+IHtcbiAgICAgICAgKHIgYXMgYW55KVtDb3VjaERCS2V5cy5ERUxFVEVEXSA9IHRydWU7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZXJycyA9IGRlbGV0aW9uLmZpbHRlcigoZCkgPT4gKGQgYXMgYW55KS5lcnJvcik7XG4gICAgaWYgKGVycnMubGVuZ3RoKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlcnJzLmpvaW4oXCJcXG5cIikpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0cy5yZWR1Y2UoKGFjY3VtOiBhbnlbXSwgcikgPT4ge1xuICAgICAgci5kb2NzLmZvckVhY2goKGQpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgKGQgYXMgeyBvazogYW55IH0pLm9rKTtcbiAgICAgICAgYWNjdW0ucHVzaCh0aGlzLmFzc2lnbk1ldGFkYXRhKHJlc3VsdCwgKGQgYXMgYW55KS5va1tDb3VjaERCS2V5cy5SRVZdKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBhc3luYyByYXc8Vj4ocmF3SW5wdXQ6IE1hbmdvUXVlcnksIHByb2Nlc3MgPSB0cnVlKTogUHJvbWlzZTxWPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBGaW5kUmVzcG9uc2U8YW55PiA9IGF3YWl0IHRoaXMubmF0aXZlLmZpbmQoXG4gICAgICAgIHJhd0lucHV0IGFzIGFueVxuICAgICAgKTtcbiAgICAgIGlmIChyZXNwb25zZS53YXJuaW5nKSBjb25zb2xlLndhcm4ocmVzcG9uc2Uud2FybmluZyk7XG4gICAgICBpZiAocHJvY2VzcykgcmV0dXJuIHJlc3BvbnNlLmRvY3MgYXMgVjtcbiAgICAgIHJldHVybiByZXNwb25zZSBhcyBWO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIHBhcnNlRXJyb3IoZXJyOiBFcnJvciB8IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogQmFzZUVycm9yIHtcbiAgICByZXR1cm4gUG91Y2hBZGFwdGVyLnBhcnNlRXJyb3IoZXJyLCByZWFzb24pO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRXJyb3IoZXJyOiBFcnJvciB8IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogQmFzZUVycm9yIHtcbiAgICAvLyByZXR1cm4gc3VwZXIucGFyc2VFcnJvcihlcnIsIHJlYXNvbik7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEJhc2VFcnJvcikgcmV0dXJuIGVyciBhcyBhbnk7XG4gICAgbGV0IGNvZGU6IHN0cmluZyA9IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBlcnIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvZGUgPSBlcnI7XG4gICAgICBpZiAoY29kZS5tYXRjaCgvYWxyZWFkeSBleGlzdHx1cGRhdGUgY29uZmxpY3QvZykpXG4gICAgICAgIHJldHVybiBuZXcgQ29uZmxpY3RFcnJvcihjb2RlKTtcbiAgICAgIGlmIChjb2RlLm1hdGNoKC9taXNzaW5nfGRlbGV0ZWQvZykpIHJldHVybiBuZXcgTm90Rm91bmRFcnJvcihjb2RlKTtcbiAgICB9IGVsc2UgaWYgKChlcnIgYXMgYW55KS5zdGF0dXMpIHtcbiAgICAgIGNvZGUgPSAoZXJyIGFzIGFueSkuc3RhdHVzO1xuICAgICAgcmVhc29uID0gcmVhc29uIHx8IGVyci5tZXNzYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb2RlLnRvU3RyaW5nKCkpIHtcbiAgICAgIGNhc2UgXCI0MDFcIjpcbiAgICAgIGNhc2UgXCI0MTJcIjpcbiAgICAgIGNhc2UgXCI0MDlcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDb25mbGljdEVycm9yKHJlYXNvbiBhcyBzdHJpbmcpO1xuICAgICAgY2FzZSBcIjQwNFwiOlxuICAgICAgICByZXR1cm4gbmV3IE5vdEZvdW5kRXJyb3IocmVhc29uIGFzIHN0cmluZyk7XG4gICAgICBjYXNlIFwiNDAwXCI6XG4gICAgICAgIGlmIChjb2RlLnRvU3RyaW5nKCkubWF0Y2goL05vXFxzaW5kZXhcXHNleGlzdHMvZykpXG4gICAgICAgICAgcmV0dXJuIG5ldyBJbmRleEVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGNvZGUudG9TdHJpbmcoKS5tYXRjaCgvRUNPTk5SRUZVU0VEL2cpKVxuICAgICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKGVycik7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJuYWxFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,6 +1,5 @@
1
1
  export * from "./adapter";
2
2
  export * from "./PouchRepository";
3
- export * from "./utils";
4
3
  /**
5
4
  * @summary Module summary
6
5
  * @description Module description
@@ -12,4 +11,4 @@ export * from "./utils";
12
11
  * @const VERSION
13
12
  * @memberOf module:ts-workspace
14
13
  */
15
- export declare const VERSION = "0.0.2";
14
+ export declare const VERSION = "0.0.3";