@decaf-ts/for-couchdb 0.3.1 → 0.3.2

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 (61) hide show
  1. package/LICENSE.md +646 -144
  2. package/README.md +371 -1
  3. package/dist/for-couchdb.cjs +733 -24
  4. package/dist/for-couchdb.esm.cjs +733 -24
  5. package/lib/adapter.cjs +186 -1
  6. package/lib/adapter.d.ts +234 -0
  7. package/lib/constants.cjs +29 -1
  8. package/lib/constants.d.ts +28 -0
  9. package/lib/errors.cjs +18 -1
  10. package/lib/errors.d.ts +17 -0
  11. package/lib/esm/adapter.d.ts +234 -0
  12. package/lib/esm/adapter.js +186 -1
  13. package/lib/esm/constants.d.ts +28 -0
  14. package/lib/esm/constants.js +29 -1
  15. package/lib/esm/errors.d.ts +17 -0
  16. package/lib/esm/errors.js +18 -1
  17. package/lib/esm/index.d.ts +6 -13
  18. package/lib/esm/index.js +7 -14
  19. package/lib/esm/indexes/generator.d.ts +47 -0
  20. package/lib/esm/indexes/generator.js +58 -1
  21. package/lib/esm/interfaces/CouchDBRepository.d.ts +10 -0
  22. package/lib/esm/interfaces/CouchDBRepository.js +1 -1
  23. package/lib/esm/model/CouchDBSequence.d.ts +19 -0
  24. package/lib/esm/model/CouchDBSequence.js +12 -1
  25. package/lib/esm/query/Paginator.d.ts +111 -0
  26. package/lib/esm/query/Paginator.js +117 -8
  27. package/lib/esm/query/Statement.d.ts +134 -0
  28. package/lib/esm/query/Statement.js +143 -1
  29. package/lib/esm/query/constants.d.ts +42 -0
  30. package/lib/esm/query/constants.js +43 -1
  31. package/lib/esm/query/translate.d.ts +31 -0
  32. package/lib/esm/query/translate.js +32 -1
  33. package/lib/esm/sequences/Sequence.d.ts +0 -2
  34. package/lib/esm/sequences/Sequence.js +2 -4
  35. package/lib/esm/types.d.ts +55 -12
  36. package/lib/esm/types.js +1 -1
  37. package/lib/esm/utils.d.ts +105 -0
  38. package/lib/esm/utils.js +106 -1
  39. package/lib/index.cjs +7 -14
  40. package/lib/index.d.ts +6 -13
  41. package/lib/indexes/generator.cjs +58 -1
  42. package/lib/indexes/generator.d.ts +47 -0
  43. package/lib/interfaces/CouchDBRepository.cjs +1 -1
  44. package/lib/interfaces/CouchDBRepository.d.ts +10 -0
  45. package/lib/model/CouchDBSequence.cjs +12 -1
  46. package/lib/model/CouchDBSequence.d.ts +19 -0
  47. package/lib/query/Paginator.cjs +117 -8
  48. package/lib/query/Paginator.d.ts +111 -0
  49. package/lib/query/Statement.cjs +143 -1
  50. package/lib/query/Statement.d.ts +134 -0
  51. package/lib/query/constants.cjs +43 -1
  52. package/lib/query/constants.d.ts +42 -0
  53. package/lib/query/translate.cjs +32 -1
  54. package/lib/query/translate.d.ts +31 -0
  55. package/lib/sequences/Sequence.cjs +2 -4
  56. package/lib/sequences/Sequence.d.ts +0 -2
  57. package/lib/types.cjs +1 -1
  58. package/lib/types.d.ts +55 -12
  59. package/lib/utils.cjs +106 -1
  60. package/lib/utils.d.ts +105 -0
  61. package/package.json +2 -2
@@ -2,11 +2,145 @@ import { Condition, Paginator, Statement } from "@decaf-ts/core";
2
2
  import { MangoQuery } from "../types";
3
3
  import { Model } from "@decaf-ts/decorator-validation";
4
4
  import { CouchDBAdapter } from "../adapter";
5
+ /**
6
+ * @description Statement builder for CouchDB Mango queries
7
+ * @summary Provides a fluent interface for building CouchDB Mango queries with type safety
8
+ * @template M - The model type that extends Model
9
+ * @template R - The result type
10
+ * @param adapter - The CouchDB adapter
11
+ * @class CouchDBStatement
12
+ * @example
13
+ * // Example of using CouchDBStatement
14
+ * const adapter = new MyCouchDBAdapter(scope);
15
+ * const statement = new CouchDBStatement<User, User[]>(adapter);
16
+ *
17
+ * // Build a query
18
+ * const users = await statement
19
+ * .from(User)
20
+ * .where(Condition.attribute<User>('age').gt(18))
21
+ * .orderBy('lastName', 'asc')
22
+ * .limit(10)
23
+ * .execute();
24
+ */
5
25
  export declare class CouchDBStatement<M extends Model, R> extends Statement<MangoQuery, M, R> {
6
26
  constructor(adapter: CouchDBAdapter<any, any, any>);
27
+ /**
28
+ * @description Builds a CouchDB Mango query from the statement
29
+ * @summary Converts the statement's conditions, selectors, and options into a CouchDB Mango query
30
+ * @return {MangoQuery} The built Mango query
31
+ * @throws {Error} If there are invalid query conditions
32
+ * @mermaid
33
+ * sequenceDiagram
34
+ * participant Statement
35
+ * participant Repository
36
+ * participant parseCondition
37
+ *
38
+ * Statement->>Statement: build()
39
+ * Note over Statement: Initialize selectors
40
+ * Statement->>Repository: Get table name
41
+ * Repository-->>Statement: Return table name
42
+ * Statement->>Statement: Create base query
43
+ *
44
+ * alt Has selectSelector
45
+ * Statement->>Statement: Add fields to query
46
+ * end
47
+ *
48
+ * alt Has whereCondition
49
+ * Statement->>Statement: Create combined condition with table
50
+ * Statement->>parseCondition: Parse condition
51
+ * parseCondition-->>Statement: Return parsed condition
52
+ *
53
+ * alt Is group operator
54
+ * alt Is AND operator
55
+ * Statement->>Statement: Flatten nested AND conditions
56
+ * else Is OR operator
57
+ * Statement->>Statement: Combine with table condition
58
+ * else
59
+ * Statement->>Statement: Throw error
60
+ * end
61
+ * else
62
+ * Statement->>Statement: Merge conditions with existing selector
63
+ * end
64
+ * end
65
+ *
66
+ * alt Has orderBySelector
67
+ * Statement->>Statement: Add sort to query
68
+ * Statement->>Statement: Ensure field exists in selector
69
+ * end
70
+ *
71
+ * alt Has limitSelector
72
+ * Statement->>Statement: Set limit
73
+ * else
74
+ * Statement->>Statement: Use default limit
75
+ * end
76
+ *
77
+ * alt Has offsetSelector
78
+ * Statement->>Statement: Set skip
79
+ * end
80
+ *
81
+ * Statement-->>Statement: Return query
82
+ */
7
83
  protected build(): MangoQuery;
84
+ /**
85
+ * @description Creates a paginator for the statement
86
+ * @summary Builds the query and returns a CouchDBPaginator for paginated results
87
+ * @template R - The result type
88
+ * @param {number} size - The page size
89
+ * @return {Promise<Paginator<M, R, MangoQuery>>} A promise that resolves to a paginator
90
+ * @throws {InternalError} If there's an error building the query
91
+ */
8
92
  paginate<R>(size: number): Promise<Paginator<M, R, MangoQuery>>;
93
+ /**
94
+ * @description Processes a record from CouchDB
95
+ * @summary Extracts the ID from a CouchDB document and reverts it to a model instance
96
+ * @param {any} r - The raw record from CouchDB
97
+ * @param pkAttr - The primary key attribute of the model
98
+ * @param {"Number" | "BigInt" | undefined} sequenceType - The type of the sequence
99
+ * @return {any} The processed record
100
+ */
9
101
  private processRecord;
102
+ /**
103
+ * @description Executes a raw Mango query
104
+ * @summary Sends a raw Mango query to CouchDB and processes the results
105
+ * @template R - The result type
106
+ * @param {MangoQuery} rawInput - The raw Mango query to execute
107
+ * @return {Promise<R>} A promise that resolves to the query results
108
+ */
10
109
  raw<R>(rawInput: MangoQuery): Promise<R>;
110
+ /**
111
+ * @description Parses a condition into a CouchDB Mango query selector
112
+ * @summary Converts a Condition object into a CouchDB Mango query selector structure
113
+ * @param {Condition<M>} condition - The condition to parse
114
+ * @return {MangoQuery} The Mango query with the parsed condition as its selector
115
+ * @mermaid
116
+ * sequenceDiagram
117
+ * participant Statement
118
+ * participant translateOperators
119
+ * participant merge
120
+ *
121
+ * Statement->>Statement: parseCondition(condition)
122
+ *
123
+ * Note over Statement: Extract condition parts
124
+ *
125
+ * alt Simple comparison operator
126
+ * Statement->>translateOperators: translateOperators(operator)
127
+ * translateOperators-->>Statement: Return CouchDB operator
128
+ * Statement->>Statement: Create selector with attribute and operator
129
+ * else NOT operator
130
+ * Statement->>Statement: parseCondition(attr1)
131
+ * Statement->>translateOperators: translateOperators(Operator.NOT)
132
+ * translateOperators-->>Statement: Return CouchDB NOT operator
133
+ * Statement->>Statement: Create negated selector
134
+ * else AND/OR operator
135
+ * Statement->>Statement: parseCondition(attr1)
136
+ * Statement->>Statement: parseCondition(comparison)
137
+ * Statement->>translateOperators: translateOperators(operator)
138
+ * translateOperators-->>Statement: Return CouchDB group operator
139
+ * Statement->>merge: merge(operator, op1, op2)
140
+ * merge-->>Statement: Return merged selector
141
+ * end
142
+ *
143
+ * Statement-->>Statement: Return query with selector
144
+ */
11
145
  protected parseCondition(condition: Condition<M>): MangoQuery;
12
146
  }
@@ -4,10 +4,86 @@ import { CouchDBKeys } from "../constants";
4
4
  import { CouchDBGroupOperator, CouchDBOperator, CouchDBQueryLimit, } from "./constants";
5
5
  import { CouchDBPaginator } from "./Paginator";
6
6
  import { findPrimaryKey, InternalError } from "@decaf-ts/db-decorators";
7
+ /**
8
+ * @description Statement builder for CouchDB Mango queries
9
+ * @summary Provides a fluent interface for building CouchDB Mango queries with type safety
10
+ * @template M - The model type that extends Model
11
+ * @template R - The result type
12
+ * @param adapter - The CouchDB adapter
13
+ * @class CouchDBStatement
14
+ * @example
15
+ * // Example of using CouchDBStatement
16
+ * const adapter = new MyCouchDBAdapter(scope);
17
+ * const statement = new CouchDBStatement<User, User[]>(adapter);
18
+ *
19
+ * // Build a query
20
+ * const users = await statement
21
+ * .from(User)
22
+ * .where(Condition.attribute<User>('age').gt(18))
23
+ * .orderBy('lastName', 'asc')
24
+ * .limit(10)
25
+ * .execute();
26
+ */
7
27
  export class CouchDBStatement extends Statement {
8
28
  constructor(adapter) {
9
29
  super(adapter);
10
30
  }
31
+ /**
32
+ * @description Builds a CouchDB Mango query from the statement
33
+ * @summary Converts the statement's conditions, selectors, and options into a CouchDB Mango query
34
+ * @return {MangoQuery} The built Mango query
35
+ * @throws {Error} If there are invalid query conditions
36
+ * @mermaid
37
+ * sequenceDiagram
38
+ * participant Statement
39
+ * participant Repository
40
+ * participant parseCondition
41
+ *
42
+ * Statement->>Statement: build()
43
+ * Note over Statement: Initialize selectors
44
+ * Statement->>Repository: Get table name
45
+ * Repository-->>Statement: Return table name
46
+ * Statement->>Statement: Create base query
47
+ *
48
+ * alt Has selectSelector
49
+ * Statement->>Statement: Add fields to query
50
+ * end
51
+ *
52
+ * alt Has whereCondition
53
+ * Statement->>Statement: Create combined condition with table
54
+ * Statement->>parseCondition: Parse condition
55
+ * parseCondition-->>Statement: Return parsed condition
56
+ *
57
+ * alt Is group operator
58
+ * alt Is AND operator
59
+ * Statement->>Statement: Flatten nested AND conditions
60
+ * else Is OR operator
61
+ * Statement->>Statement: Combine with table condition
62
+ * else
63
+ * Statement->>Statement: Throw error
64
+ * end
65
+ * else
66
+ * Statement->>Statement: Merge conditions with existing selector
67
+ * end
68
+ * end
69
+ *
70
+ * alt Has orderBySelector
71
+ * Statement->>Statement: Add sort to query
72
+ * Statement->>Statement: Ensure field exists in selector
73
+ * end
74
+ *
75
+ * alt Has limitSelector
76
+ * Statement->>Statement: Set limit
77
+ * else
78
+ * Statement->>Statement: Use default limit
79
+ * end
80
+ *
81
+ * alt Has offsetSelector
82
+ * Statement->>Statement: Set skip
83
+ * end
84
+ *
85
+ * Statement-->>Statement: Return query
86
+ */
11
87
  build() {
12
88
  const selectors = {};
13
89
  selectors[CouchDBKeys.TABLE] = {};
@@ -85,6 +161,14 @@ export class CouchDBStatement extends Statement {
85
161
  query.skip = this.offsetSelector;
86
162
  return query;
87
163
  }
164
+ /**
165
+ * @description Creates a paginator for the statement
166
+ * @summary Builds the query and returns a CouchDBPaginator for paginated results
167
+ * @template R - The result type
168
+ * @param {number} size - The page size
169
+ * @return {Promise<Paginator<M, R, MangoQuery>>} A promise that resolves to a paginator
170
+ * @throws {InternalError} If there's an error building the query
171
+ */
88
172
  async paginate(size) {
89
173
  try {
90
174
  const query = this.build();
@@ -94,6 +178,14 @@ export class CouchDBStatement extends Statement {
94
178
  throw new InternalError(e);
95
179
  }
96
180
  }
181
+ /**
182
+ * @description Processes a record from CouchDB
183
+ * @summary Extracts the ID from a CouchDB document and reverts it to a model instance
184
+ * @param {any} r - The raw record from CouchDB
185
+ * @param pkAttr - The primary key attribute of the model
186
+ * @param {"Number" | "BigInt" | undefined} sequenceType - The type of the sequence
187
+ * @return {any} The processed record
188
+ */
97
189
  processRecord(r, pkAttr, sequenceType) {
98
190
  if (r[CouchDBKeys.ID]) {
99
191
  const [, ...keyArgs] = r[CouchDBKeys.ID].split(CouchDBKeys.SEPARATOR);
@@ -102,6 +194,13 @@ export class CouchDBStatement extends Statement {
102
194
  }
103
195
  return r;
104
196
  }
197
+ /**
198
+ * @description Executes a raw Mango query
199
+ * @summary Sends a raw Mango query to CouchDB and processes the results
200
+ * @template R - The result type
201
+ * @param {MangoQuery} rawInput - The raw Mango query to execute
202
+ * @return {Promise<R>} A promise that resolves to the query results
203
+ */
105
204
  async raw(rawInput) {
106
205
  const results = await this.adapter.raw(rawInput, true);
107
206
  const pkDef = findPrimaryKey(new this.fromSelector());
@@ -111,7 +210,50 @@ export class CouchDBStatement extends Statement {
111
210
  return results.map((r) => this.processRecord(r, pkAttr, type));
112
211
  return results;
113
212
  }
213
+ /**
214
+ * @description Parses a condition into a CouchDB Mango query selector
215
+ * @summary Converts a Condition object into a CouchDB Mango query selector structure
216
+ * @param {Condition<M>} condition - The condition to parse
217
+ * @return {MangoQuery} The Mango query with the parsed condition as its selector
218
+ * @mermaid
219
+ * sequenceDiagram
220
+ * participant Statement
221
+ * participant translateOperators
222
+ * participant merge
223
+ *
224
+ * Statement->>Statement: parseCondition(condition)
225
+ *
226
+ * Note over Statement: Extract condition parts
227
+ *
228
+ * alt Simple comparison operator
229
+ * Statement->>translateOperators: translateOperators(operator)
230
+ * translateOperators-->>Statement: Return CouchDB operator
231
+ * Statement->>Statement: Create selector with attribute and operator
232
+ * else NOT operator
233
+ * Statement->>Statement: parseCondition(attr1)
234
+ * Statement->>translateOperators: translateOperators(Operator.NOT)
235
+ * translateOperators-->>Statement: Return CouchDB NOT operator
236
+ * Statement->>Statement: Create negated selector
237
+ * else AND/OR operator
238
+ * Statement->>Statement: parseCondition(attr1)
239
+ * Statement->>Statement: parseCondition(comparison)
240
+ * Statement->>translateOperators: translateOperators(operator)
241
+ * translateOperators-->>Statement: Return CouchDB group operator
242
+ * Statement->>merge: merge(operator, op1, op2)
243
+ * merge-->>Statement: Return merged selector
244
+ * end
245
+ *
246
+ * Statement-->>Statement: Return query with selector
247
+ */
114
248
  parseCondition(condition) {
249
+ /**
250
+ * @description Merges two selectors with a logical operator
251
+ * @summary Helper function to combine two selectors with a logical operator
252
+ * @param {MangoOperator} op - The operator to use for merging
253
+ * @param {MangoSelector} obj1 - The first selector
254
+ * @param {MangoSelector} obj2 - The second selector
255
+ * @return {MangoQuery} The merged query
256
+ */
115
257
  function merge(op, obj1, obj2) {
116
258
  const result = { selector: {} };
117
259
  result.selector[op] = [obj1, obj2];
@@ -137,4 +279,4 @@ export class CouchDBStatement extends Statement {
137
279
  return { selector: op };
138
280
  }
139
281
  }
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L1N0YXRlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFDYixRQUFRLEVBR1IsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixpQkFBaUIsR0FDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEUsTUFBTSxPQUFPLGdCQUFxQyxTQUFRLFNBSXpEO0lBQ0MsWUFBWSxPQUFzQztRQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVTLEtBQUs7UUFDYixNQUFNLFNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBQ3BDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQTBCLENBQUM7UUFFeEUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxT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QUFFLENBQUM7WUFDckMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBcUIsQ0FBQyxDQUFDLFFBQXlCLENBQUM7WUFDMUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQW1CLENBQUM7WUFDMUQsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBbUIsQ0FDcEQsS0FBc0MsQ0FBQyxLQUFLLENBQzlDLEdBQUcsVUFBVSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLEdBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3JFLE1BQU0sR0FBRyxHQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBMEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUMxRSxFQUFFLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDOUQsQ0FBQztRQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uZGl0aW9uLFxuICBHcm91cE9wZXJhdG9yLFxuICBPcGVyYXRvcixcbiAgT3JkZXJEaXJlY3Rpb24sXG4gIFBhZ2luYXRvcixcbiAgUmVwb3NpdG9yeSxcbiAgU2VxdWVuY2UsXG4gIFN0YXRlbWVudCxcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBNYW5nb09wZXJhdG9yLCBNYW5nb1F1ZXJ5LCBNYW5nb1NlbGVjdG9yIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IENvdWNoREJBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7IHRyYW5zbGF0ZU9wZXJhdG9ycyB9IGZyb20gXCIuL3RyYW5zbGF0ZVwiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBDb3VjaERCR3JvdXBPcGVyYXRvcixcbiAgQ291Y2hEQk9wZXJhdG9yLFxuICBDb3VjaERCUXVlcnlMaW1pdCxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDb3VjaERCUGFnaW5hdG9yIH0gZnJvbSBcIi4vUGFnaW5hdG9yXCI7XG5pbXBvcnQgeyBmaW5kUHJpbWFyeUtleSwgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgY2xhc3MgQ291Y2hEQlN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgU3RhdGVtZW50PFxuICBNYW5nb1F1ZXJ5LFxuICBNLFxuICBSXG4+IHtcbiAgY29uc3RydWN0b3IoYWRhcHRlcjogQ291Y2hEQkFkYXB0ZXI8YW55LCBhbnksIGFueT4pIHtcbiAgICBzdXBlcihhZGFwdGVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZCgpOiBNYW5nb1F1ZXJ5IHtcbiAgICBjb25zdCBzZWxlY3RvcnM6IE1hbmdvU2VsZWN0b3IgPSB7fTtcbiAgICBzZWxlY3RvcnNbQ291Y2hEQktleXMuVEFCTEVdID0ge307XG4gICAgc2VsZWN0b3JzW0NvdWNoREJLZXlzLlRBQkxFXSA9IFJlcG9zaXRvcnkudGFibGUodGhpcy5mcm9tU2VsZWN0b3IpO1xuICAgIGNvbnN0IHF1ZXJ5OiBNYW5nb1F1ZXJ5ID0geyBzZWxlY3Rvcjogc2VsZWN0b3JzIH07XG4gICAgaWYgKHRoaXMuc2VsZWN0U2VsZWN0b3IpIHF1ZXJ5LmZpZWxkcyA9IHRoaXMuc2VsZWN0U2VsZWN0b3IgYXMgc3RyaW5nW107XG5cbiAgICBpZiAodGhpcy53aGVyZUNvbmRpdGlvbikge1xuICAgICAgY29uc3QgY29uZGl0aW9uOiBNYW5nb1NlbGVjdG9yID0gdGhpcy5wYXJzZUNvbmRpdGlvbihcbiAgICAgICAgQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICB0aGlzLndoZXJlQ29uZGl0aW9uLFxuICAgICAgICAgIENvbmRpdGlvbi5hdHRyaWJ1dGU8TT4oQ291Y2hEQktleXMuVEFCTEUgYXMga2V5b2YgTSkuZXEoXG4gICAgICAgICAgICBxdWVyeS5zZWxlY3RvcltDb3VjaERCS2V5cy5UQUJMRV1cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkuc2VsZWN0b3I7XG4gICAgICBjb25zdCBzZWxlY3RvcktleXMgPSBPYmplY3Qua2V5cyhjb25kaXRpb24pIGFzIE1hbmdvT3BlcmF0b3JbXTtcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0b3JLZXlzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBPYmplY3QudmFsdWVzKENvdWNoREJHcm91cE9wZXJhdG9yKS5pbmRleE9mKHNlbGVjdG9yS2V5c1swXSkgIT09IC0xXG4gICAgICApXG4gICAgICAgIHN3aXRjaCAoc2VsZWN0b3JLZXlzWzBdKSB7XG4gICAgICAgICAgY2FzZSBDb3VjaERCR3JvdXBPcGVyYXRvci5BTkQ6XG4gICAgICAgICAgICBjb25kaXRpb25bQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EXSA9IFtcbiAgICAgICAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgICAgICAgICBjb25kaXRpb25bQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EXSBhcyBNYW5nb1NlbGVjdG9yXG4gICAgICAgICAgICAgICkucmVkdWNlKChhY2N1bTogTWFuZ29TZWxlY3RvcltdLCB2YWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gMSlcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJUb28gbWFueSBrZXlzIGluIHF1ZXJ5IHNlbGVjdG9yLiBzaG91bGQgYmUgb25lXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgayA9IGtleXNbMF07XG4gICAgICAgICAgICAgICAgaWYgKGsgPT09IENvdWNoREJHcm91cE9wZXJhdG9yLkFORClcbiAgICAgICAgICAgICAgICAgIGFjY3VtLnB1c2goLi4uKHZhbFtrXSBhcyBhbnlbXSkpO1xuICAgICAgICAgICAgICAgIGVsc2UgYWNjdW0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgICAgICAgfSwgW10pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yID0gY29uZGl0aW9uO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb3VjaERCR3JvdXBPcGVyYXRvci5PUjoge1xuICAgICAgICAgICAgY29uc3QgczogUmVjb3JkPGFueSwgYW55PiA9IHt9O1xuICAgICAgICAgICAgc1tDb3VjaERCR3JvdXBPcGVyYXRvci5BTkRdID0gW1xuICAgICAgICAgICAgICBjb25kaXRpb24sXG4gICAgICAgICAgICAgIC4uLk9iamVjdC5lbnRyaWVzKHF1ZXJ5LnNlbGVjdG9yKS5tYXAoKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxhbnksIGFueT4gPSB7fTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBxdWVyeS5zZWxlY3RvciA9IHM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgc2hvdWxkIGJlIGltcG9zc2libGVcIik7XG4gICAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBPYmplY3QuZW50cmllcyhjb25kaXRpb24pLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgICBpZiAocXVlcnkuc2VsZWN0b3Jba2V5XSlcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgYEEgJHtrZXl9IHF1ZXJ5IHBhcmFtIGlzIGFib3V0IHRvIGJlIG92ZXJyaWRkZW46ICR7cXVlcnkuc2VsZWN0b3Jba2V5XX0gYnkgJHt2YWx9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBxdWVyeS5zZWxlY3RvcltrZXldID0gdmFsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcmRlckJ5U2VsZWN0b3IpIHtcbiAgICAgIHF1ZXJ5LnNvcnQgPSBxdWVyeS5zb3J0IHx8IFtdO1xuICAgICAgcXVlcnkuc2VsZWN0b3IgPSBxdWVyeS5zZWxlY3RvciB8fCAoe30gYXMgTWFuZ29TZWxlY3Rvcik7XG4gICAgICBjb25zdCBbc2VsZWN0b3IsIHZhbHVlXSA9IHRoaXMub3JkZXJCeVNlbGVjdG9yIGFzIFtcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBPcmRlckRpcmVjdGlvbixcbiAgICAgIF07XG4gICAgICBjb25zdCByZWM6IGFueSA9IHt9O1xuICAgICAgcmVjW3NlbGVjdG9yXSA9IHZhbHVlO1xuICAgICAgKHF1ZXJ5LnNvcnQgYXMgYW55W10pLnB1c2gocmVjIGFzIGFueSk7XG4gICAgICBpZiAoIXF1ZXJ5LnNlbGVjdG9yW3NlbGVjdG9yXSkge1xuICAgICAgICBxdWVyeS5zZWxlY3RvcltzZWxlY3Rvcl0gPSB7fSBhcyBNYW5nb1NlbGVjdG9yO1xuICAgICAgICAocXVlcnkuc2VsZWN0b3Jbc2VsZWN0b3JdIGFzIE1hbmdvU2VsZWN0b3IpW0NvdWNoREJPcGVyYXRvci5CSUdHRVJdID1cbiAgICAgICAgICBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxpbWl0U2VsZWN0b3IpIHtcbiAgICAgIHF1ZXJ5LmxpbWl0ID0gdGhpcy5saW1pdFNlbGVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBObyBsaW1pdCBzZWxlY3RvciBkZWZpbmVkLiBVc2luZyBkZWZhdWx0IGNvdWNoZGIgbGltaXQgb2YgJHtDb3VjaERCUXVlcnlMaW1pdH1gXG4gICAgICApO1xuICAgICAgcXVlcnkubGltaXQgPSBDb3VjaERCUXVlcnlMaW1pdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vZmZzZXRTZWxlY3RvcikgcXVlcnkuc2tpcCA9IHRoaXMub2Zmc2V0U2VsZWN0b3I7XG5cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICBhc3luYyBwYWdpbmF0ZTxSPihzaXplOiBudW1iZXIpOiBQcm9taXNlPFBhZ2luYXRvcjxNLCBSLCBNYW5nb1F1ZXJ5Pj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeTogTWFuZ29RdWVyeSA9IHRoaXMuYnVpbGQoKTtcbiAgICAgIHJldHVybiBuZXcgQ291Y2hEQlBhZ2luYXRvcihcbiAgICAgICAgdGhpcy5hZGFwdGVyIGFzIGFueSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIHNpemUsXG4gICAgICAgIHRoaXMuZnJvbVNlbGVjdG9yXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUmVjb3JkKFxuICAgIHI6IGFueSxcbiAgICBwa0F0dHI6IGtleW9mIE0sXG4gICAgc2VxdWVuY2VUeXBlOiBcIk51bWJlclwiIHwgXCJCaWdJbnRcIiB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAocltDb3VjaERCS2V5cy5JRF0pIHtcbiAgICAgIGNvbnN0IFssIC4uLmtleUFyZ3NdID0gcltDb3VjaERCS2V5cy5JRF0uc3BsaXQoQ291Y2hEQktleXMuU0VQQVJBVE9SKTtcblxuICAgICAgY29uc3QgaWQgPSBrZXlBcmdzLmpvaW4oXCJfXCIpO1xuICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQoXG4gICAgICAgIHIsXG4gICAgICAgIHRoaXMuZnJvbVNlbGVjdG9yLFxuICAgICAgICBwa0F0dHIsXG4gICAgICAgIFNlcXVlbmNlLnBhcnNlVmFsdWUoc2VxdWVuY2VUeXBlLCBpZClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgcmF3PFI+KHJhd0lucHV0OiBNYW5nb1F1ZXJ5KTogUHJvbWlzZTxSPiB7XG4gICAgY29uc3QgcmVzdWx0czogYW55W10gPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmF3KHJhd0lucHV0LCB0cnVlKTtcblxuICAgIGNvbnN0IHBrRGVmID0gZmluZFByaW1hcnlLZXkobmV3IHRoaXMuZnJvbVNlbGVjdG9yKCkpO1xuICAgIGNvbnN0IHBrQXR0ciA9IHBrRGVmLmlkO1xuICAgIGNvbnN0IHR5cGUgPSBwa0RlZi5wcm9wcy50eXBlO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdFNlbGVjdG9yKVxuICAgICAgcmV0dXJuIHJlc3VsdHMubWFwKChyKSA9PiB0aGlzLnByb2Nlc3NSZWNvcmQociwgcGtBdHRyLCB0eXBlKSkgYXMgUjtcbiAgICByZXR1cm4gcmVzdWx0cyBhcyBSO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29uZGl0aW9uPE0+KTogTWFuZ29RdWVyeSB7XG4gICAgZnVuY3Rpb24gbWVyZ2UoXG4gICAgICBvcDogTWFuZ29PcGVyYXRvcixcbiAgICAgIG9iajE6IE1hbmdvU2VsZWN0b3IsXG4gICAgICBvYmoyOiBNYW5nb1NlbGVjdG9yXG4gICAgKTogTWFuZ29RdWVyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IE1hbmdvUXVlcnkgPSB7IHNlbGVjdG9yOiB7fSBhcyBNYW5nb1NlbGVjdG9yIH07XG4gICAgICByZXN1bHQuc2VsZWN0b3Jbb3BdID0gW29iajEsIG9iajJdO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGF0dHIxLCBvcGVyYXRvciwgY29tcGFyaXNvbiB9ID0gY29uZGl0aW9uIGFzIHVua25vd24gYXMge1xuICAgICAgYXR0cjE6IHN0cmluZyB8IENvbmRpdGlvbjxNPjtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3I7XG4gICAgICBjb21wYXJpc29uOiBhbnk7XG4gICAgfTtcblxuICAgIGxldCBvcDogTWFuZ29TZWxlY3RvciA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgaWYgKFxuICAgICAgW0dyb3VwT3BlcmF0b3IuQU5ELCBHcm91cE9wZXJhdG9yLk9SLCBPcGVyYXRvci5OT1RdLmluZGV4T2YoXG4gICAgICAgIG9wZXJhdG9yIGFzIEdyb3VwT3BlcmF0b3JcbiAgICAgICkgPT09IC0xXG4gICAgKSB7XG4gICAgICBvcFthdHRyMSBhcyBzdHJpbmddID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgIChvcFthdHRyMSBhcyBzdHJpbmddIGFzIE1hbmdvU2VsZWN0b3IpW3RyYW5zbGF0ZU9wZXJhdG9ycyhvcGVyYXRvcildID1cbiAgICAgICAgY29tcGFyaXNvbjtcbiAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSBPcGVyYXRvci5OT1QpIHtcbiAgICAgIG9wID0gdGhpcy5wYXJzZUNvbmRpdGlvbihhdHRyMSBhcyBDb25kaXRpb248TT4pLnNlbGVjdG9yIGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICBvcFt0cmFuc2xhdGVPcGVyYXRvcnMoT3BlcmF0b3IuTk9UKV0gPSB7fSBhcyBNYW5nb1NlbGVjdG9yO1xuICAgICAgKG9wW3RyYW5zbGF0ZU9wZXJhdG9ycyhPcGVyYXRvci5OT1QpXSBhcyBNYW5nb1NlbGVjdG9yKVtcbiAgICAgICAgKGF0dHIxIGFzIHVua25vd24gYXMgeyBhdHRyMTogc3RyaW5nIH0pLmF0dHIxXG4gICAgICBdID0gY29tcGFyaXNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3AxOiBhbnkgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKGF0dHIxIGFzIENvbmRpdGlvbjxNPikuc2VsZWN0b3I7XG4gICAgICBjb25zdCBvcDI6IGFueSA9IHRoaXMucGFyc2VDb25kaXRpb24oY29tcGFyaXNvbiBhcyBDb25kaXRpb248TT4pLnNlbGVjdG9yO1xuICAgICAgb3AgPSBtZXJnZSh0cmFuc2xhdGVPcGVyYXRvcnMob3BlcmF0b3IpLCBvcDEsIG9wMikuc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2VsZWN0b3I6IG9wIH07XG4gIH1cbn1cbiJdfQ==
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L1N0YXRlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGFBQWEsRUFDYixRQUFRLEVBR1IsVUFBVSxFQUNWLFFBQVEsRUFDUixTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixpQkFBaUIsR0FDbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLE9BQU8sZ0JBQXFDLFNBQVEsU0FJekQ7SUFDQyxZQUFZLE9BQXNDO1FBQ2hELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F1REc7SUFDTyxLQUFLO1FBQ2IsTUFBTSxTQUFTLEdBQWtCLEVBQUUsQ0FBQztRQUNwQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25FLE1BQU0sS0FBSyxHQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ2xELElBQUksSUFBSSxDQUFDLGNBQWM7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LFFBQXlCLENBQzFCLEtBQUssQ0FBQyxDQUFDLEVBQ1IsQ0FBQztZQUNELEVBQUUsQ0FBQyxLQUFlLENBQUMsR0FBRyxFQUFtQixDQUFDO1lBQ3pDLEVBQUUsQ0FBQyxLQUFlLENBQW1CLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xFLFVBQVUsQ0FBQztRQUNmLENBQUM7YUFBTSxJQUFJLFFBQVEsS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBcUIsQ0FBQyxDQUFDLFFBQXlCLENBQUM7WUFDMUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQW1CLENBQUM7WUFDMUQsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBbUIsQ0FDcEQsS0FBc0MsQ0FBQyxLQUFLLENBQzlDLEdBQUcsVUFBVSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLEdBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3JFLE1BQU0sR0FBRyxHQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBMEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUMxRSxFQUFFLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDOUQsQ0FBQztRQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uZGl0aW9uLFxuICBHcm91cE9wZXJhdG9yLFxuICBPcGVyYXRvcixcbiAgT3JkZXJEaXJlY3Rpb24sXG4gIFBhZ2luYXRvcixcbiAgUmVwb3NpdG9yeSxcbiAgU2VxdWVuY2UsXG4gIFN0YXRlbWVudCxcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBNYW5nb09wZXJhdG9yLCBNYW5nb1F1ZXJ5LCBNYW5nb1NlbGVjdG9yIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IENvdWNoREJBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7IHRyYW5zbGF0ZU9wZXJhdG9ycyB9IGZyb20gXCIuL3RyYW5zbGF0ZVwiO1xuaW1wb3J0IHsgQ291Y2hEQktleXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBDb3VjaERCR3JvdXBPcGVyYXRvcixcbiAgQ291Y2hEQk9wZXJhdG9yLFxuICBDb3VjaERCUXVlcnlMaW1pdCxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDb3VjaERCUGFnaW5hdG9yIH0gZnJvbSBcIi4vUGFnaW5hdG9yXCI7XG5pbXBvcnQgeyBmaW5kUHJpbWFyeUtleSwgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdGF0ZW1lbnQgYnVpbGRlciBmb3IgQ291Y2hEQiBNYW5nbyBxdWVyaWVzXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhIGZsdWVudCBpbnRlcmZhY2UgZm9yIGJ1aWxkaW5nIENvdWNoREIgTWFuZ28gcXVlcmllcyB3aXRoIHR5cGUgc2FmZXR5XG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbFxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmVzdWx0IHR5cGVcbiAqIEBwYXJhbSBhZGFwdGVyIC0gVGhlIENvdWNoREIgYWRhcHRlclxuICogQGNsYXNzIENvdWNoREJTdGF0ZW1lbnRcbiAqIEBleGFtcGxlXG4gKiAvLyBFeGFtcGxlIG9mIHVzaW5nIENvdWNoREJTdGF0ZW1lbnRcbiAqIGNvbnN0IGFkYXB0ZXIgPSBuZXcgTXlDb3VjaERCQWRhcHRlcihzY29wZSk7XG4gKiBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgQ291Y2hEQlN0YXRlbWVudDxVc2VyLCBVc2VyW10+KGFkYXB0ZXIpO1xuICpcbiAqIC8vIEJ1aWxkIGEgcXVlcnlcbiAqIGNvbnN0IHVzZXJzID0gYXdhaXQgc3RhdGVtZW50XG4gKiAgIC5mcm9tKFVzZXIpXG4gKiAgIC53aGVyZShDb25kaXRpb24uYXR0cmlidXRlPFVzZXI+KCdhZ2UnKS5ndCgxOCkpXG4gKiAgIC5vcmRlckJ5KCdsYXN0TmFtZScsICdhc2MnKVxuICogICAubGltaXQoMTApXG4gKiAgIC5leGVjdXRlKCk7XG4gKi9cbmV4cG9ydCBjbGFzcyBDb3VjaERCU3RhdGVtZW50PE0gZXh0ZW5kcyBNb2RlbCwgUj4gZXh0ZW5kcyBTdGF0ZW1lbnQ8XG4gIE1hbmdvUXVlcnksXG4gIE0sXG4gIFJcbj4ge1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyOiBDb3VjaERCQWRhcHRlcjxhbnksIGFueSwgYW55Pikge1xuICAgIHN1cGVyKGFkYXB0ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBCdWlsZHMgYSBDb3VjaERCIE1hbmdvIHF1ZXJ5IGZyb20gdGhlIHN0YXRlbWVudFxuICAgKiBAc3VtbWFyeSBDb252ZXJ0cyB0aGUgc3RhdGVtZW50J3MgY29uZGl0aW9ucywgc2VsZWN0b3JzLCBhbmQgb3B0aW9ucyBpbnRvIGEgQ291Y2hEQiBNYW5nbyBxdWVyeVxuICAgKiBAcmV0dXJuIHtNYW5nb1F1ZXJ5fSBUaGUgYnVpbHQgTWFuZ28gcXVlcnlcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGFyZSBpbnZhbGlkIHF1ZXJ5IGNvbmRpdGlvbnNcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgU3RhdGVtZW50XG4gICAqICAgcGFydGljaXBhbnQgUmVwb3NpdG9yeVxuICAgKiAgIHBhcnRpY2lwYW50IHBhcnNlQ29uZGl0aW9uXG4gICAqXG4gICAqICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBidWlsZCgpXG4gICAqICAgTm90ZSBvdmVyIFN0YXRlbWVudDogSW5pdGlhbGl6ZSBzZWxlY3RvcnNcbiAgICogICBTdGF0ZW1lbnQtPj5SZXBvc2l0b3J5OiBHZXQgdGFibGUgbmFtZVxuICAgKiAgIFJlcG9zaXRvcnktLT4+U3RhdGVtZW50OiBSZXR1cm4gdGFibGUgbmFtZVxuICAgKiAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogQ3JlYXRlIGJhc2UgcXVlcnlcbiAgICpcbiAgICogICBhbHQgSGFzIHNlbGVjdFNlbGVjdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IEFkZCBmaWVsZHMgdG8gcXVlcnlcbiAgICogICBlbmRcbiAgICpcbiAgICogICBhbHQgSGFzIHdoZXJlQ29uZGl0aW9uXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IENyZWF0ZSBjb21iaW5lZCBjb25kaXRpb24gd2l0aCB0YWJsZVxuICAgKiAgICAgU3RhdGVtZW50LT4+cGFyc2VDb25kaXRpb246IFBhcnNlIGNvbmRpdGlvblxuICAgKiAgICAgcGFyc2VDb25kaXRpb24tLT4+U3RhdGVtZW50OiBSZXR1cm4gcGFyc2VkIGNvbmRpdGlvblxuICAgKlxuICAgKiAgICAgYWx0IElzIGdyb3VwIG9wZXJhdG9yXG4gICAqICAgICAgIGFsdCBJcyBBTkQgb3BlcmF0b3JcbiAgICogICAgICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IEZsYXR0ZW4gbmVzdGVkIEFORCBjb25kaXRpb25zXG4gICAqICAgICAgIGVsc2UgSXMgT1Igb3BlcmF0b3JcbiAgICogICAgICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IENvbWJpbmUgd2l0aCB0YWJsZSBjb25kaXRpb25cbiAgICogICAgICAgZWxzZVxuICAgKiAgICAgICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogVGhyb3cgZXJyb3JcbiAgICogICAgICAgZW5kXG4gICAqICAgICBlbHNlXG4gICAqICAgICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogTWVyZ2UgY29uZGl0aW9ucyB3aXRoIGV4aXN0aW5nIHNlbGVjdG9yXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICpcbiAgICogICBhbHQgSGFzIG9yZGVyQnlTZWxlY3RvclxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBBZGQgc29ydCB0byBxdWVyeVxuICAgKiAgICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBFbnN1cmUgZmllbGQgZXhpc3RzIGluIHNlbGVjdG9yXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgYWx0IEhhcyBsaW1pdFNlbGVjdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IFNldCBsaW1pdFxuICAgKiAgIGVsc2VcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogVXNlIGRlZmF1bHQgbGltaXRcbiAgICogICBlbmRcbiAgICpcbiAgICogICBhbHQgSGFzIG9mZnNldFNlbGVjdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IFNldCBza2lwXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgU3RhdGVtZW50LS0+PlN0YXRlbWVudDogUmV0dXJuIHF1ZXJ5XG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGQoKTogTWFuZ29RdWVyeSB7XG4gICAgY29uc3Qgc2VsZWN0b3JzOiBNYW5nb1NlbGVjdG9yID0ge307XG4gICAgc2VsZWN0b3JzW0NvdWNoREJLZXlzLlRBQkxFXSA9IHt9O1xuICAgIHNlbGVjdG9yc1tDb3VjaERCS2V5cy5UQUJMRV0gPSBSZXBvc2l0b3J5LnRhYmxlKHRoaXMuZnJvbVNlbGVjdG9yKTtcbiAgICBjb25zdCBxdWVyeTogTWFuZ29RdWVyeSA9IHsgc2VsZWN0b3I6IHNlbGVjdG9ycyB9O1xuICAgIGlmICh0aGlzLnNlbGVjdFNlbGVjdG9yKSBxdWVyeS5maWVsZHMgPSB0aGlzLnNlbGVjdFNlbGVjdG9yIGFzIHN0cmluZ1tdO1xuXG4gICAgaWYgKHRoaXMud2hlcmVDb25kaXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbjogTWFuZ29TZWxlY3RvciA9IHRoaXMucGFyc2VDb25kaXRpb24oXG4gICAgICAgIENvbmRpdGlvbi5hbmQoXG4gICAgICAgICAgdGhpcy53aGVyZUNvbmRpdGlvbixcbiAgICAgICAgICBDb25kaXRpb24uYXR0cmlidXRlPE0+KENvdWNoREJLZXlzLlRBQkxFIGFzIGtleW9mIE0pLmVxKFxuICAgICAgICAgICAgcXVlcnkuc2VsZWN0b3JbQ291Y2hEQktleXMuVEFCTEVdXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApLnNlbGVjdG9yO1xuICAgICAgY29uc3Qgc2VsZWN0b3JLZXlzID0gT2JqZWN0LmtleXMoY29uZGl0aW9uKSBhcyBNYW5nb09wZXJhdG9yW107XG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdG9yS2V5cy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhDb3VjaERCR3JvdXBPcGVyYXRvcikuaW5kZXhPZihzZWxlY3RvcktleXNbMF0pICE9PSAtMVxuICAgICAgKVxuICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yS2V5c1swXSkge1xuICAgICAgICAgIGNhc2UgQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EOlxuICAgICAgICAgICAgY29uZGl0aW9uW0NvdWNoREJHcm91cE9wZXJhdG9yLkFORF0gPSBbXG4gICAgICAgICAgICAgIC4uLk9iamVjdC52YWx1ZXMoXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uW0NvdWNoREJHcm91cE9wZXJhdG9yLkFORF0gYXMgTWFuZ29TZWxlY3RvclxuICAgICAgICAgICAgICApLnJlZHVjZSgoYWNjdW06IE1hbmdvU2VsZWN0b3JbXSwgdmFsOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVG9vIG1hbnkga2V5cyBpbiBxdWVyeSBzZWxlY3Rvci4gc2hvdWxkIGJlIG9uZVwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGsgPSBrZXlzWzBdO1xuICAgICAgICAgICAgICAgIGlmIChrID09PSBDb3VjaERCR3JvdXBPcGVyYXRvci5BTkQpXG4gICAgICAgICAgICAgICAgICBhY2N1bS5wdXNoKC4uLih2YWxba10gYXMgYW55W10pKTtcbiAgICAgICAgICAgICAgICBlbHNlIGFjY3VtLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgICAgICAgIH0sIFtdKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBxdWVyeS5zZWxlY3RvciA9IGNvbmRpdGlvbjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ291Y2hEQkdyb3VwT3BlcmF0b3IuT1I6IHtcbiAgICAgICAgICAgIGNvbnN0IHM6IFJlY29yZDxhbnksIGFueT4gPSB7fTtcbiAgICAgICAgICAgIHNbQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EXSA9IFtcbiAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAuLi5PYmplY3QuZW50cmllcyhxdWVyeS5zZWxlY3RvcikubWFwKChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8YW55LCBhbnk+ID0ge307XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcXVlcnkuc2VsZWN0b3IgPSBzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNob3VsZCBiZSBpbXBvc3NpYmxlXCIpO1xuICAgICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY29uZGl0aW9uKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgaWYgKHF1ZXJ5LnNlbGVjdG9yW2tleV0pXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGBBICR7a2V5fSBxdWVyeSBwYXJhbSBpcyBhYm91dCB0byBiZSBvdmVycmlkZGVuOiAke3F1ZXJ5LnNlbGVjdG9yW2tleV19IGJ5ICR7dmFsfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcXVlcnkuc2VsZWN0b3Jba2V5XSA9IHZhbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3JkZXJCeVNlbGVjdG9yKSB7XG4gICAgICBxdWVyeS5zb3J0ID0gcXVlcnkuc29ydCB8fCBbXTtcbiAgICAgIHF1ZXJ5LnNlbGVjdG9yID0gcXVlcnkuc2VsZWN0b3IgfHwgKHt9IGFzIE1hbmdvU2VsZWN0b3IpO1xuICAgICAgY29uc3QgW3NlbGVjdG9yLCB2YWx1ZV0gPSB0aGlzLm9yZGVyQnlTZWxlY3RvciBhcyBbXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgT3JkZXJEaXJlY3Rpb24sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVjOiBhbnkgPSB7fTtcbiAgICAgIHJlY1tzZWxlY3Rvcl0gPSB2YWx1ZTtcbiAgICAgIChxdWVyeS5zb3J0IGFzIGFueVtdKS5wdXNoKHJlYyBhcyBhbnkpO1xuICAgICAgaWYgKCFxdWVyeS5zZWxlY3RvcltzZWxlY3Rvcl0pIHtcbiAgICAgICAgcXVlcnkuc2VsZWN0b3Jbc2VsZWN0b3JdID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgICAgKHF1ZXJ5LnNlbGVjdG9yW3NlbGVjdG9yXSBhcyBNYW5nb1NlbGVjdG9yKVtDb3VjaERCT3BlcmF0b3IuQklHR0VSXSA9XG4gICAgICAgICAgbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5saW1pdFNlbGVjdG9yKSB7XG4gICAgICBxdWVyeS5saW1pdCA9IHRoaXMubGltaXRTZWxlY3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTm8gbGltaXQgc2VsZWN0b3IgZGVmaW5lZC4gVXNpbmcgZGVmYXVsdCBjb3VjaGRiIGxpbWl0IG9mICR7Q291Y2hEQlF1ZXJ5TGltaXR9YFxuICAgICAgKTtcbiAgICAgIHF1ZXJ5LmxpbWl0ID0gQ291Y2hEQlF1ZXJ5TGltaXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub2Zmc2V0U2VsZWN0b3IpIHF1ZXJ5LnNraXAgPSB0aGlzLm9mZnNldFNlbGVjdG9yO1xuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgcGFnaW5hdG9yIGZvciB0aGUgc3RhdGVtZW50XG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUgcXVlcnkgYW5kIHJldHVybnMgYSBDb3VjaERCUGFnaW5hdG9yIGZvciBwYWdpbmF0ZWQgcmVzdWx0c1xuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSByZXN1bHQgdHlwZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSAtIFRoZSBwYWdlIHNpemVcbiAgICogQHJldHVybiB7UHJvbWlzZTxQYWdpbmF0b3I8TSwgUiwgTWFuZ29RdWVyeT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIHBhZ2luYXRvclxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiB0aGVyZSdzIGFuIGVycm9yIGJ1aWxkaW5nIHRoZSBxdWVyeVxuICAgKi9cbiAgYXN5bmMgcGFnaW5hdGU8Uj4oc2l6ZTogbnVtYmVyKTogUHJvbWlzZTxQYWdpbmF0b3I8TSwgUiwgTWFuZ29RdWVyeT4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnk6IE1hbmdvUXVlcnkgPSB0aGlzLmJ1aWxkKCk7XG4gICAgICByZXR1cm4gbmV3IENvdWNoREJQYWdpbmF0b3IoXG4gICAgICAgIHRoaXMuYWRhcHRlciBhcyBhbnksXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBzaXplLFxuICAgICAgICB0aGlzLmZyb21TZWxlY3RvclxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJvY2Vzc2VzIGEgcmVjb3JkIGZyb20gQ291Y2hEQlxuICAgKiBAc3VtbWFyeSBFeHRyYWN0cyB0aGUgSUQgZnJvbSBhIENvdWNoREIgZG9jdW1lbnQgYW5kIHJldmVydHMgaXQgdG8gYSBtb2RlbCBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge2FueX0gciAtIFRoZSByYXcgcmVjb3JkIGZyb20gQ291Y2hEQlxuICAgKiBAcGFyYW0gcGtBdHRyIC0gVGhlIHByaW1hcnkga2V5IGF0dHJpYnV0ZSBvZiB0aGUgbW9kZWxcbiAgICogQHBhcmFtIHtcIk51bWJlclwiIHwgXCJCaWdJbnRcIiB8IHVuZGVmaW5lZH0gc2VxdWVuY2VUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIHNlcXVlbmNlXG4gICAqIEByZXR1cm4ge2FueX0gVGhlIHByb2Nlc3NlZCByZWNvcmRcbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc1JlY29yZChcbiAgICByOiBhbnksXG4gICAgcGtBdHRyOiBrZXlvZiBNLFxuICAgIHNlcXVlbmNlVHlwZTogXCJOdW1iZXJcIiB8IFwiQmlnSW50XCIgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKHJbQ291Y2hEQktleXMuSURdKSB7XG4gICAgICBjb25zdCBbLCAuLi5rZXlBcmdzXSA9IHJbQ291Y2hEQktleXMuSURdLnNwbGl0KENvdWNoREJLZXlzLlNFUEFSQVRPUik7XG5cbiAgICAgIGNvbnN0IGlkID0ga2V5QXJncy5qb2luKFwiX1wiKTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KFxuICAgICAgICByLFxuICAgICAgICB0aGlzLmZyb21TZWxlY3RvcixcbiAgICAgICAgcGtBdHRyLFxuICAgICAgICBTZXF1ZW5jZS5wYXJzZVZhbHVlKHNlcXVlbmNlVHlwZSwgaWQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSByYXcgTWFuZ28gcXVlcnlcbiAgICogQHN1bW1hcnkgU2VuZHMgYSByYXcgTWFuZ28gcXVlcnkgdG8gQ291Y2hEQiBhbmQgcHJvY2Vzc2VzIHRoZSByZXN1bHRzXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlXG4gICAqIEBwYXJhbSB7TWFuZ29RdWVyeX0gcmF3SW5wdXQgLSBUaGUgcmF3IE1hbmdvIHF1ZXJ5IHRvIGV4ZWN1dGVcbiAgICogQHJldHVybiB7UHJvbWlzZTxSPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHF1ZXJ5IHJlc3VsdHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHJhdzxSPihyYXdJbnB1dDogTWFuZ29RdWVyeSk6IFByb21pc2U8Uj4ge1xuICAgIGNvbnN0IHJlc3VsdHM6IGFueVtdID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJhdyhyYXdJbnB1dCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBwa0RlZiA9IGZpbmRQcmltYXJ5S2V5KG5ldyB0aGlzLmZyb21TZWxlY3RvcigpKTtcbiAgICBjb25zdCBwa0F0dHIgPSBwa0RlZi5pZDtcbiAgICBjb25zdCB0eXBlID0gcGtEZWYucHJvcHMudHlwZTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RTZWxlY3RvcilcbiAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocikgPT4gdGhpcy5wcm9jZXNzUmVjb3JkKHIsIHBrQXR0ciwgdHlwZSkpIGFzIFI7XG4gICAgcmV0dXJuIHJlc3VsdHMgYXMgUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGEgY29uZGl0aW9uIGludG8gYSBDb3VjaERCIE1hbmdvIHF1ZXJ5IHNlbGVjdG9yXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGEgQ29uZGl0aW9uIG9iamVjdCBpbnRvIGEgQ291Y2hEQiBNYW5nbyBxdWVyeSBzZWxlY3RvciBzdHJ1Y3R1cmVcbiAgICogQHBhcmFtIHtDb25kaXRpb248TT59IGNvbmRpdGlvbiAtIFRoZSBjb25kaXRpb24gdG8gcGFyc2VcbiAgICogQHJldHVybiB7TWFuZ29RdWVyeX0gVGhlIE1hbmdvIHF1ZXJ5IHdpdGggdGhlIHBhcnNlZCBjb25kaXRpb24gYXMgaXRzIHNlbGVjdG9yXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFN0YXRlbWVudFxuICAgKiAgIHBhcnRpY2lwYW50IHRyYW5zbGF0ZU9wZXJhdG9yc1xuICAgKiAgIHBhcnRpY2lwYW50IG1lcmdlXG4gICAqXG4gICAqICAgU3RhdGVtZW50LT4+U3RhdGVtZW50OiBwYXJzZUNvbmRpdGlvbihjb25kaXRpb24pXG4gICAqXG4gICAqICAgTm90ZSBvdmVyIFN0YXRlbWVudDogRXh0cmFjdCBjb25kaXRpb24gcGFydHNcbiAgICpcbiAgICogICBhbHQgU2ltcGxlIGNvbXBhcmlzb24gb3BlcmF0b3JcbiAgICogICAgIFN0YXRlbWVudC0+PnRyYW5zbGF0ZU9wZXJhdG9yczogdHJhbnNsYXRlT3BlcmF0b3JzKG9wZXJhdG9yKVxuICAgKiAgICAgdHJhbnNsYXRlT3BlcmF0b3JzLS0+PlN0YXRlbWVudDogUmV0dXJuIENvdWNoREIgb3BlcmF0b3JcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogQ3JlYXRlIHNlbGVjdG9yIHdpdGggYXR0cmlidXRlIGFuZCBvcGVyYXRvclxuICAgKiAgIGVsc2UgTk9UIG9wZXJhdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKGF0dHIxKVxuICAgKiAgICAgU3RhdGVtZW50LT4+dHJhbnNsYXRlT3BlcmF0b3JzOiB0cmFuc2xhdGVPcGVyYXRvcnMoT3BlcmF0b3IuTk9UKVxuICAgKiAgICAgdHJhbnNsYXRlT3BlcmF0b3JzLS0+PlN0YXRlbWVudDogUmV0dXJuIENvdWNoREIgTk9UIG9wZXJhdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IENyZWF0ZSBuZWdhdGVkIHNlbGVjdG9yXG4gICAqICAgZWxzZSBBTkQvT1Igb3BlcmF0b3JcbiAgICogICAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogcGFyc2VDb25kaXRpb24oYXR0cjEpXG4gICAqICAgICBTdGF0ZW1lbnQtPj5TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKGNvbXBhcmlzb24pXG4gICAqICAgICBTdGF0ZW1lbnQtPj50cmFuc2xhdGVPcGVyYXRvcnM6IHRyYW5zbGF0ZU9wZXJhdG9ycyhvcGVyYXRvcilcbiAgICogICAgIHRyYW5zbGF0ZU9wZXJhdG9ycy0tPj5TdGF0ZW1lbnQ6IFJldHVybiBDb3VjaERCIGdyb3VwIG9wZXJhdG9yXG4gICAqICAgICBTdGF0ZW1lbnQtPj5tZXJnZTogbWVyZ2Uob3BlcmF0b3IsIG9wMSwgb3AyKVxuICAgKiAgICAgbWVyZ2UtLT4+U3RhdGVtZW50OiBSZXR1cm4gbWVyZ2VkIHNlbGVjdG9yXG4gICAqICAgZW5kXG4gICAqXG4gICAqICAgU3RhdGVtZW50LS0+PlN0YXRlbWVudDogUmV0dXJuIHF1ZXJ5IHdpdGggc2VsZWN0b3JcbiAgICovXG4gIHByb3RlY3RlZCBwYXJzZUNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbjxNPik6IE1hbmdvUXVlcnkge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBNZXJnZXMgdHdvIHNlbGVjdG9ycyB3aXRoIGEgbG9naWNhbCBvcGVyYXRvclxuICAgICAqIEBzdW1tYXJ5IEhlbHBlciBmdW5jdGlvbiB0byBjb21iaW5lIHR3byBzZWxlY3RvcnMgd2l0aCBhIGxvZ2ljYWwgb3BlcmF0b3JcbiAgICAgKiBAcGFyYW0ge01hbmdvT3BlcmF0b3J9IG9wIC0gVGhlIG9wZXJhdG9yIHRvIHVzZSBmb3IgbWVyZ2luZ1xuICAgICAqIEBwYXJhbSB7TWFuZ29TZWxlY3Rvcn0gb2JqMSAtIFRoZSBmaXJzdCBzZWxlY3RvclxuICAgICAqIEBwYXJhbSB7TWFuZ29TZWxlY3Rvcn0gb2JqMiAtIFRoZSBzZWNvbmQgc2VsZWN0b3JcbiAgICAgKiBAcmV0dXJuIHtNYW5nb1F1ZXJ5fSBUaGUgbWVyZ2VkIHF1ZXJ5XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVyZ2UoXG4gICAgICBvcDogTWFuZ29PcGVyYXRvcixcbiAgICAgIG9iajE6IE1hbmdvU2VsZWN0b3IsXG4gICAgICBvYmoyOiBNYW5nb1NlbGVjdG9yXG4gICAgKTogTWFuZ29RdWVyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6IE1hbmdvUXVlcnkgPSB7IHNlbGVjdG9yOiB7fSBhcyBNYW5nb1NlbGVjdG9yIH07XG4gICAgICByZXN1bHQuc2VsZWN0b3Jbb3BdID0gW29iajEsIG9iajJdO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCB7IGF0dHIxLCBvcGVyYXRvciwgY29tcGFyaXNvbiB9ID0gY29uZGl0aW9uIGFzIHVua25vd24gYXMge1xuICAgICAgYXR0cjE6IHN0cmluZyB8IENvbmRpdGlvbjxNPjtcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3I7XG4gICAgICBjb21wYXJpc29uOiBhbnk7XG4gICAgfTtcblxuICAgIGxldCBvcDogTWFuZ29TZWxlY3RvciA9IHt9IGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgaWYgKFxuICAgICAgW0dyb3VwT3BlcmF0b3IuQU5ELCBHcm91cE9wZXJhdG9yLk9SLCBPcGVyYXRvci5OT1RdLmluZGV4T2YoXG4gICAgICAgIG9wZXJhdG9yIGFzIEdyb3VwT3BlcmF0b3JcbiAgICAgICkgPT09IC0xXG4gICAgKSB7XG4gICAgICBvcFthdHRyMSBhcyBzdHJpbmddID0ge30gYXMgTWFuZ29TZWxlY3RvcjtcbiAgICAgIChvcFthdHRyMSBhcyBzdHJpbmddIGFzIE1hbmdvU2VsZWN0b3IpW3RyYW5zbGF0ZU9wZXJhdG9ycyhvcGVyYXRvcildID1cbiAgICAgICAgY29tcGFyaXNvbjtcbiAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSBPcGVyYXRvci5OT1QpIHtcbiAgICAgIG9wID0gdGhpcy5wYXJzZUNvbmRpdGlvbihhdHRyMSBhcyBDb25kaXRpb248TT4pLnNlbGVjdG9yIGFzIE1hbmdvU2VsZWN0b3I7XG4gICAgICBvcFt0cmFuc2xhdGVPcGVyYXRvcnMoT3BlcmF0b3IuTk9UKV0gPSB7fSBhcyBNYW5nb1NlbGVjdG9yO1xuICAgICAgKG9wW3RyYW5zbGF0ZU9wZXJhdG9ycyhPcGVyYXRvci5OT1QpXSBhcyBNYW5nb1NlbGVjdG9yKVtcbiAgICAgICAgKGF0dHIxIGFzIHVua25vd24gYXMgeyBhdHRyMTogc3RyaW5nIH0pLmF0dHIxXG4gICAgICBdID0gY29tcGFyaXNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3AxOiBhbnkgPSB0aGlzLnBhcnNlQ29uZGl0aW9uKGF0dHIxIGFzIENvbmRpdGlvbjxNPikuc2VsZWN0b3I7XG4gICAgICBjb25zdCBvcDI6IGFueSA9IHRoaXMucGFyc2VDb25kaXRpb24oY29tcGFyaXNvbiBhcyBDb25kaXRpb248TT4pLnNlbGVjdG9yO1xuICAgICAgb3AgPSBtZXJnZSh0cmFuc2xhdGVPcGVyYXRvcnMob3BlcmF0b3IpLCBvcDEsIG9wMikuc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2VsZWN0b3I6IG9wIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,47 @@
1
1
  import { MangoOperator } from "../types";
2
+ /**
3
+ * @description Default query limit for CouchDB queries
4
+ * @summary Maximum number of documents to return in a single query
5
+ * @const CouchDBQueryLimit
6
+ * @memberOf module:for-couchdb
7
+ */
2
8
  export declare const CouchDBQueryLimit = 250;
9
+ /**
10
+ * @description Mapping of operator names to CouchDB Mango query operators
11
+ * @summary Constants for CouchDB comparison operators used in Mango queries
12
+ * @typedef {Object} CouchDBOperatorType
13
+ * @property {string} EQUAL - Equality operator ($eq)
14
+ * @property {string} DIFFERENT - Inequality operator ($ne)
15
+ * @property {string} BIGGER - Greater than operator ($gt)
16
+ * @property {string} BIGGER_EQ - Greater than or equal operator ($gte)
17
+ * @property {string} SMALLER - Less than operator ($lt)
18
+ * @property {string} SMALLER_EQ - Less than or equal operator ($lte)
19
+ * @property {string} NOT - Negation operator ($not)
20
+ * @property {string} IN - In array operator ($in)
21
+ * @property {string} REGEXP - Regular expression operator ($regex)
22
+ * @const CouchDBOperator
23
+ * @type {CouchDBOperatorType}
24
+ * @memberOf module:for-couchdb
25
+ */
3
26
  export declare const CouchDBOperator: Record<string, MangoOperator>;
27
+ /**
28
+ * @description Mapping of logical operator names to CouchDB Mango query operators
29
+ * @summary Constants for CouchDB logical operators used in Mango queries
30
+ * @typedef {Object} CouchDBGroupOperatorType
31
+ * @property {string} AND - Logical AND operator ($and)
32
+ * @property {string} OR - Logical OR operator ($or)
33
+ * @const CouchDBGroupOperator
34
+ * @type {CouchDBGroupOperatorType}
35
+ * @memberOf module:for-couchdb
36
+ */
4
37
  export declare const CouchDBGroupOperator: Record<string, MangoOperator>;
38
+ /**
39
+ * @description Special constant values used in CouchDB queries
40
+ * @summary String constants representing special values in CouchDB
41
+ * @typedef {Object} CouchDBConstType
42
+ * @property {string} NULL - String representation of null value
43
+ * @const CouchDBConst
44
+ * @type {CouchDBConstType}
45
+ * @memberOf module:for-couchdb
46
+ */
5
47
  export declare const CouchDBConst: Record<string, string>;
@@ -1,4 +1,27 @@
1
+ /**
2
+ * @description Default query limit for CouchDB queries
3
+ * @summary Maximum number of documents to return in a single query
4
+ * @const CouchDBQueryLimit
5
+ * @memberOf module:for-couchdb
6
+ */
1
7
  export const CouchDBQueryLimit = 250;
8
+ /**
9
+ * @description Mapping of operator names to CouchDB Mango query operators
10
+ * @summary Constants for CouchDB comparison operators used in Mango queries
11
+ * @typedef {Object} CouchDBOperatorType
12
+ * @property {string} EQUAL - Equality operator ($eq)
13
+ * @property {string} DIFFERENT - Inequality operator ($ne)
14
+ * @property {string} BIGGER - Greater than operator ($gt)
15
+ * @property {string} BIGGER_EQ - Greater than or equal operator ($gte)
16
+ * @property {string} SMALLER - Less than operator ($lt)
17
+ * @property {string} SMALLER_EQ - Less than or equal operator ($lte)
18
+ * @property {string} NOT - Negation operator ($not)
19
+ * @property {string} IN - In array operator ($in)
20
+ * @property {string} REGEXP - Regular expression operator ($regex)
21
+ * @const CouchDBOperator
22
+ * @type {CouchDBOperatorType}
23
+ * @memberOf module:for-couchdb
24
+ */
2
25
  export const CouchDBOperator = {
3
26
  EQUAL: "$eq",
4
27
  DIFFERENT: "$ne",
@@ -12,11 +35,30 @@ export const CouchDBOperator = {
12
35
  // IS = "IS",
13
36
  REGEXP: "$regex",
14
37
  };
38
+ /**
39
+ * @description Mapping of logical operator names to CouchDB Mango query operators
40
+ * @summary Constants for CouchDB logical operators used in Mango queries
41
+ * @typedef {Object} CouchDBGroupOperatorType
42
+ * @property {string} AND - Logical AND operator ($and)
43
+ * @property {string} OR - Logical OR operator ($or)
44
+ * @const CouchDBGroupOperator
45
+ * @type {CouchDBGroupOperatorType}
46
+ * @memberOf module:for-couchdb
47
+ */
15
48
  export const CouchDBGroupOperator = {
16
49
  AND: "$and",
17
50
  OR: "$or",
18
51
  };
52
+ /**
53
+ * @description Special constant values used in CouchDB queries
54
+ * @summary String constants representing special values in CouchDB
55
+ * @typedef {Object} CouchDBConstType
56
+ * @property {string} NULL - String representation of null value
57
+ * @const CouchDBConst
58
+ * @type {CouchDBConstType}
59
+ * @memberOf module:for-couchdb
60
+ */
19
61
  export const CouchDBConst = {
20
62
  NULL: "null",
21
63
  };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFrQztJQUM1RCxLQUFLLEVBQUUsS0FBSztJQUNaLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLE1BQU0sRUFBRSxLQUFLO0lBQ2IsU0FBUyxFQUFFLE1BQU07SUFDakIsT0FBTyxFQUFFLEtBQUs7SUFDZCxVQUFVLEVBQUUsTUFBTTtJQUNsQix1QkFBdUI7SUFDdkIsR0FBRyxFQUFFLE1BQU07SUFDWCxFQUFFLEVBQUUsS0FBSztJQUNULGFBQWE7SUFDYixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWtDO0lBQ2pFLEdBQUcsRUFBRSxNQUFNO0lBQ1gsRUFBRSxFQUFFLEtBQUs7Q0FDVixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEyQjtJQUNsRCxJQUFJLEVBQUUsTUFBTTtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYW5nb09wZXJhdG9yIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBDb3VjaERCUXVlcnlMaW1pdCA9IDI1MDtcblxuZXhwb3J0IGNvbnN0IENvdWNoREJPcGVyYXRvcjogUmVjb3JkPHN0cmluZywgTWFuZ29PcGVyYXRvcj4gPSB7XG4gIEVRVUFMOiBcIiRlcVwiLFxuICBESUZGRVJFTlQ6IFwiJG5lXCIsXG4gIEJJR0dFUjogXCIkZ3RcIixcbiAgQklHR0VSX0VROiBcIiRndGVcIixcbiAgU01BTExFUjogXCIkbHRcIixcbiAgU01BTExFUl9FUTogXCIkbHRlXCIsXG4gIC8vIEJFVFdFRU4gPSBcIkJFVFdFRU5cIixcbiAgTk9UOiBcIiRub3RcIixcbiAgSU46IFwiJGluXCIsXG4gIC8vIElTID0gXCJJU1wiLFxuICBSRUdFWFA6IFwiJHJlZ2V4XCIsXG59O1xuXG5leHBvcnQgY29uc3QgQ291Y2hEQkdyb3VwT3BlcmF0b3I6IFJlY29yZDxzdHJpbmcsIE1hbmdvT3BlcmF0b3I+ID0ge1xuICBBTkQ6IFwiJGFuZFwiLFxuICBPUjogXCIkb3JcIixcbn07XG5cbmV4cG9ydCBjb25zdCBDb3VjaERCQ29uc3Q6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIE5VTEw6IFwibnVsbFwiLFxufTtcbiJdfQ==
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUVyQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBa0M7SUFDNUQsS0FBSyxFQUFFLEtBQUs7SUFDWixTQUFTLEVBQUUsS0FBSztJQUNoQixNQUFNLEVBQUUsS0FBSztJQUNiLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLE9BQU8sRUFBRSxLQUFLO0lBQ2QsVUFBVSxFQUFFLE1BQU07SUFDbEIsdUJBQXVCO0lBQ3ZCLEdBQUcsRUFBRSxNQUFNO0lBQ1gsRUFBRSxFQUFFLEtBQUs7SUFDVCxhQUFhO0lBQ2IsTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFrQztJQUNqRSxHQUFHLEVBQUUsTUFBTTtJQUNYLEVBQUUsRUFBRSxLQUFLO0NBQ1YsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEyQjtJQUNsRCxJQUFJLEVBQUUsTUFBTTtDQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYW5nb09wZXJhdG9yIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgcXVlcnkgbGltaXQgZm9yIENvdWNoREIgcXVlcmllc1xuICogQHN1bW1hcnkgTWF4aW11bSBudW1iZXIgb2YgZG9jdW1lbnRzIHRvIHJldHVybiBpbiBhIHNpbmdsZSBxdWVyeVxuICogQGNvbnN0IENvdWNoREJRdWVyeUxpbWl0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1jb3VjaGRiXG4gKi9cbmV4cG9ydCBjb25zdCBDb3VjaERCUXVlcnlMaW1pdCA9IDI1MDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWFwcGluZyBvZiBvcGVyYXRvciBuYW1lcyB0byBDb3VjaERCIE1hbmdvIHF1ZXJ5IG9wZXJhdG9yc1xuICogQHN1bW1hcnkgQ29uc3RhbnRzIGZvciBDb3VjaERCIGNvbXBhcmlzb24gb3BlcmF0b3JzIHVzZWQgaW4gTWFuZ28gcXVlcmllc1xuICogQHR5cGVkZWYge09iamVjdH0gQ291Y2hEQk9wZXJhdG9yVHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVRVUFMIC0gRXF1YWxpdHkgb3BlcmF0b3IgKCRlcSlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBESUZGRVJFTlQgLSBJbmVxdWFsaXR5IG9wZXJhdG9yICgkbmUpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQklHR0VSIC0gR3JlYXRlciB0aGFuIG9wZXJhdG9yICgkZ3QpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQklHR0VSX0VRIC0gR3JlYXRlciB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yICgkZ3RlKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNNQUxMRVIgLSBMZXNzIHRoYW4gb3BlcmF0b3IgKCRsdClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTTUFMTEVSX0VRIC0gTGVzcyB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yICgkbHRlKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5PVCAtIE5lZ2F0aW9uIG9wZXJhdG9yICgkbm90KVxuICogQHByb3BlcnR5IHtzdHJpbmd9IElOIC0gSW4gYXJyYXkgb3BlcmF0b3IgKCRpbilcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUdFWFAgLSBSZWd1bGFyIGV4cHJlc3Npb24gb3BlcmF0b3IgKCRyZWdleClcbiAqIEBjb25zdCBDb3VjaERCT3BlcmF0b3JcbiAqIEB0eXBlIHtDb3VjaERCT3BlcmF0b3JUeXBlfVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItY291Y2hkYlxuICovXG5leHBvcnQgY29uc3QgQ291Y2hEQk9wZXJhdG9yOiBSZWNvcmQ8c3RyaW5nLCBNYW5nb09wZXJhdG9yPiA9IHtcbiAgRVFVQUw6IFwiJGVxXCIsXG4gIERJRkZFUkVOVDogXCIkbmVcIixcbiAgQklHR0VSOiBcIiRndFwiLFxuICBCSUdHRVJfRVE6IFwiJGd0ZVwiLFxuICBTTUFMTEVSOiBcIiRsdFwiLFxuICBTTUFMTEVSX0VROiBcIiRsdGVcIixcbiAgLy8gQkVUV0VFTiA9IFwiQkVUV0VFTlwiLFxuICBOT1Q6IFwiJG5vdFwiLFxuICBJTjogXCIkaW5cIixcbiAgLy8gSVMgPSBcIklTXCIsXG4gIFJFR0VYUDogXCIkcmVnZXhcIixcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1hcHBpbmcgb2YgbG9naWNhbCBvcGVyYXRvciBuYW1lcyB0byBDb3VjaERCIE1hbmdvIHF1ZXJ5IG9wZXJhdG9yc1xuICogQHN1bW1hcnkgQ29uc3RhbnRzIGZvciBDb3VjaERCIGxvZ2ljYWwgb3BlcmF0b3JzIHVzZWQgaW4gTWFuZ28gcXVlcmllc1xuICogQHR5cGVkZWYge09iamVjdH0gQ291Y2hEQkdyb3VwT3BlcmF0b3JUeXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQU5EIC0gTG9naWNhbCBBTkQgb3BlcmF0b3IgKCRhbmQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gT1IgLSBMb2dpY2FsIE9SIG9wZXJhdG9yICgkb3IpXG4gKiBAY29uc3QgQ291Y2hEQkdyb3VwT3BlcmF0b3JcbiAqIEB0eXBlIHtDb3VjaERCR3JvdXBPcGVyYXRvclR5cGV9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1jb3VjaGRiXG4gKi9cbmV4cG9ydCBjb25zdCBDb3VjaERCR3JvdXBPcGVyYXRvcjogUmVjb3JkPHN0cmluZywgTWFuZ29PcGVyYXRvcj4gPSB7XG4gIEFORDogXCIkYW5kXCIsXG4gIE9SOiBcIiRvclwiLFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3BlY2lhbCBjb25zdGFudCB2YWx1ZXMgdXNlZCBpbiBDb3VjaERCIHF1ZXJpZXNcbiAqIEBzdW1tYXJ5IFN0cmluZyBjb25zdGFudHMgcmVwcmVzZW50aW5nIHNwZWNpYWwgdmFsdWVzIGluIENvdWNoREJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvdWNoREJDb25zdFR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBOVUxMIC0gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG51bGwgdmFsdWVcbiAqIEBjb25zdCBDb3VjaERCQ29uc3RcbiAqIEB0eXBlIHtDb3VjaERCQ29uc3RUeXBlfVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItY291Y2hkYlxuICovXG5leHBvcnQgY29uc3QgQ291Y2hEQkNvbnN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBOVUxMOiBcIm51bGxcIixcbn07XG4iXX0=
@@ -1,3 +1,34 @@
1
1
  import { GroupOperator, Operator } from "@decaf-ts/core";
2
2
  import { MangoOperator } from "../types";
3
+ /**
4
+ * @description Translates core operators to CouchDB Mango operators
5
+ * @summary Converts Decaf.ts core operators to their equivalent CouchDB Mango query operators
6
+ * @param {GroupOperator | Operator} operator - The core operator to translate
7
+ * @return {MangoOperator} The equivalent CouchDB Mango operator
8
+ * @throws {QueryError} If no translation exists for the given operator
9
+ * @function translateOperators
10
+ * @memberOf module:for-couchdb
11
+ * @mermaid
12
+ * sequenceDiagram
13
+ * participant Caller
14
+ * participant translateOperators
15
+ * participant CouchDBOperator
16
+ * participant CouchDBGroupOperator
17
+ *
18
+ * Caller->>translateOperators: operator
19
+ *
20
+ * translateOperators->>CouchDBOperator: Check for match
21
+ * alt Found in CouchDBOperator
22
+ * CouchDBOperator-->>translateOperators: Return matching operator
23
+ * translateOperators-->>Caller: Return MangoOperator
24
+ * else Not found
25
+ * translateOperators->>CouchDBGroupOperator: Check for match
26
+ * alt Found in CouchDBGroupOperator
27
+ * CouchDBGroupOperator-->>translateOperators: Return matching operator
28
+ * translateOperators-->>Caller: Return MangoOperator
29
+ * else Not found
30
+ * translateOperators-->>Caller: Throw QueryError
31
+ * end
32
+ * end
33
+ */
3
34
  export declare function translateOperators(operator: GroupOperator | Operator): MangoOperator;
@@ -1,5 +1,36 @@
1
1
  import { CouchDBGroupOperator, CouchDBOperator } from "./constants";
2
2
  import { QueryError } from "@decaf-ts/core";
3
+ /**
4
+ * @description Translates core operators to CouchDB Mango operators
5
+ * @summary Converts Decaf.ts core operators to their equivalent CouchDB Mango query operators
6
+ * @param {GroupOperator | Operator} operator - The core operator to translate
7
+ * @return {MangoOperator} The equivalent CouchDB Mango operator
8
+ * @throws {QueryError} If no translation exists for the given operator
9
+ * @function translateOperators
10
+ * @memberOf module:for-couchdb
11
+ * @mermaid
12
+ * sequenceDiagram
13
+ * participant Caller
14
+ * participant translateOperators
15
+ * participant CouchDBOperator
16
+ * participant CouchDBGroupOperator
17
+ *
18
+ * Caller->>translateOperators: operator
19
+ *
20
+ * translateOperators->>CouchDBOperator: Check for match
21
+ * alt Found in CouchDBOperator
22
+ * CouchDBOperator-->>translateOperators: Return matching operator
23
+ * translateOperators-->>Caller: Return MangoOperator
24
+ * else Not found
25
+ * translateOperators->>CouchDBGroupOperator: Check for match
26
+ * alt Found in CouchDBGroupOperator
27
+ * CouchDBGroupOperator-->>translateOperators: Return matching operator
28
+ * translateOperators-->>Caller: Return MangoOperator
29
+ * else Not found
30
+ * translateOperators-->>Caller: Throw QueryError
31
+ * end
32
+ * end
33
+ */
3
34
  export function translateOperators(operator) {
4
35
  for (const operators of [CouchDBOperator, CouchDBGroupOperator]) {
5
36
  const el = Object.keys(operators).find((k) => k === operator);
@@ -8,4 +39,4 @@ export function translateOperators(operator) {
8
39
  }
9
40
  throw new QueryError(`Could not find adapter translation for operator ${operator}`);
10
41
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L3RyYW5zbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1QyxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFFBQWtDO0lBRWxDLEtBQUssTUFBTSxTQUFTLElBQUksQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDOUQsSUFBSSxFQUFFO1lBQUUsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELE1BQU0sSUFBSSxVQUFVLENBQ2xCLG1EQUFtRCxRQUFRLEVBQUUsQ0FDOUQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcm91cE9wZXJhdG9yLCBPcGVyYXRvciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ291Y2hEQkdyb3VwT3BlcmF0b3IsIENvdWNoREJPcGVyYXRvciB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUXVlcnlFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgTWFuZ29PcGVyYXRvciB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlT3BlcmF0b3JzKFxuICBvcGVyYXRvcjogR3JvdXBPcGVyYXRvciB8IE9wZXJhdG9yXG4pOiBNYW5nb09wZXJhdG9yIHtcbiAgZm9yIChjb25zdCBvcGVyYXRvcnMgb2YgW0NvdWNoREJPcGVyYXRvciwgQ291Y2hEQkdyb3VwT3BlcmF0b3JdKSB7XG4gICAgY29uc3QgZWwgPSBPYmplY3Qua2V5cyhvcGVyYXRvcnMpLmZpbmQoKGspID0+IGsgPT09IG9wZXJhdG9yKTtcbiAgICBpZiAoZWwpIHJldHVybiBvcGVyYXRvcnNbZWxdO1xuICB9XG4gIHRocm93IG5ldyBRdWVyeUVycm9yKFxuICAgIGBDb3VsZCBub3QgZmluZCBhZGFwdGVyIHRyYW5zbGF0aW9uIGZvciBvcGVyYXRvciAke29wZXJhdG9yfWBcbiAgKTtcbn1cbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3F1ZXJ5L3RyYW5zbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxRQUFrQztJQUVsQyxLQUFLLE1BQU0sU0FBUyxJQUFJLENBQUMsZUFBZSxFQUFFLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztRQUNoRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQzlELElBQUksRUFBRTtZQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxNQUFNLElBQUksVUFBVSxDQUNsQixtREFBbUQsUUFBUSxFQUFFLENBQzlELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JvdXBPcGVyYXRvciwgT3BlcmF0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IENvdWNoREJHcm91cE9wZXJhdG9yLCBDb3VjaERCT3BlcmF0b3IgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IE1hbmdvT3BlcmF0b3IgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHJhbnNsYXRlcyBjb3JlIG9wZXJhdG9ycyB0byBDb3VjaERCIE1hbmdvIG9wZXJhdG9yc1xuICogQHN1bW1hcnkgQ29udmVydHMgRGVjYWYudHMgY29yZSBvcGVyYXRvcnMgdG8gdGhlaXIgZXF1aXZhbGVudCBDb3VjaERCIE1hbmdvIHF1ZXJ5IG9wZXJhdG9yc1xuICogQHBhcmFtIHtHcm91cE9wZXJhdG9yIHwgT3BlcmF0b3J9IG9wZXJhdG9yIC0gVGhlIGNvcmUgb3BlcmF0b3IgdG8gdHJhbnNsYXRlXG4gKiBAcmV0dXJuIHtNYW5nb09wZXJhdG9yfSBUaGUgZXF1aXZhbGVudCBDb3VjaERCIE1hbmdvIG9wZXJhdG9yXG4gKiBAdGhyb3dzIHtRdWVyeUVycm9yfSBJZiBubyB0cmFuc2xhdGlvbiBleGlzdHMgZm9yIHRoZSBnaXZlbiBvcGVyYXRvclxuICogQGZ1bmN0aW9uIHRyYW5zbGF0ZU9wZXJhdG9yc1xuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItY291Y2hkYlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgdHJhbnNsYXRlT3BlcmF0b3JzXG4gKiAgIHBhcnRpY2lwYW50IENvdWNoREJPcGVyYXRvclxuICogICBwYXJ0aWNpcGFudCBDb3VjaERCR3JvdXBPcGVyYXRvclxuICogICBcbiAqICAgQ2FsbGVyLT4+dHJhbnNsYXRlT3BlcmF0b3JzOiBvcGVyYXRvclxuICogICBcbiAqICAgdHJhbnNsYXRlT3BlcmF0b3JzLT4+Q291Y2hEQk9wZXJhdG9yOiBDaGVjayBmb3IgbWF0Y2hcbiAqICAgYWx0IEZvdW5kIGluIENvdWNoREJPcGVyYXRvclxuICogICAgIENvdWNoREJPcGVyYXRvci0tPj50cmFuc2xhdGVPcGVyYXRvcnM6IFJldHVybiBtYXRjaGluZyBvcGVyYXRvclxuICogICAgIHRyYW5zbGF0ZU9wZXJhdG9ycy0tPj5DYWxsZXI6IFJldHVybiBNYW5nb09wZXJhdG9yXG4gKiAgIGVsc2UgTm90IGZvdW5kXG4gKiAgICAgdHJhbnNsYXRlT3BlcmF0b3JzLT4+Q291Y2hEQkdyb3VwT3BlcmF0b3I6IENoZWNrIGZvciBtYXRjaFxuICogICAgIGFsdCBGb3VuZCBpbiBDb3VjaERCR3JvdXBPcGVyYXRvclxuICogICAgICAgQ291Y2hEQkdyb3VwT3BlcmF0b3ItLT4+dHJhbnNsYXRlT3BlcmF0b3JzOiBSZXR1cm4gbWF0Y2hpbmcgb3BlcmF0b3JcbiAqICAgICAgIHRyYW5zbGF0ZU9wZXJhdG9ycy0tPj5DYWxsZXI6IFJldHVybiBNYW5nb09wZXJhdG9yXG4gKiAgICAgZWxzZSBOb3QgZm91bmRcbiAqICAgICAgIHRyYW5zbGF0ZU9wZXJhdG9ycy0tPj5DYWxsZXI6IFRocm93IFF1ZXJ5RXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVPcGVyYXRvcnMoXG4gIG9wZXJhdG9yOiBHcm91cE9wZXJhdG9yIHwgT3BlcmF0b3Jcbik6IE1hbmdvT3BlcmF0b3Ige1xuICBmb3IgKGNvbnN0IG9wZXJhdG9ycyBvZiBbQ291Y2hEQk9wZXJhdG9yLCBDb3VjaERCR3JvdXBPcGVyYXRvcl0pIHtcbiAgICBjb25zdCBlbCA9IE9iamVjdC5rZXlzKG9wZXJhdG9ycykuZmluZCgoaykgPT4gayA9PT0gb3BlcmF0b3IpO1xuICAgIGlmIChlbCkgcmV0dXJuIG9wZXJhdG9yc1tlbF07XG4gIH1cbiAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgYENvdWxkIG5vdCBmaW5kIGFkYXB0ZXIgdHJhbnNsYXRpb24gZm9yIG9wZXJhdG9yICR7b3BlcmF0b3J9YFxuICApO1xufVxuIl19
@@ -11,8 +11,6 @@ import { CouchDBRepository } from "../interfaces";
11
11
  *
12
12
  * @class CouchDBSequence
13
13
  * @implements Sequence
14
- *
15
- * @category Sequences
16
14
  */
17
15
  export declare class CouchDBSequence extends Sequence {
18
16
  protected repo: CouchDBRepository<Seq, any, any, any>;