@decaf-ts/core 0.5.1 → 0.5.3

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 (206) hide show
  1. package/LICENSE.md +21 -157
  2. package/README.md +652 -15
  3. package/dist/core.cjs +2111 -133
  4. package/dist/core.esm.cjs +2112 -134
  5. package/lib/esm/identity/decorators.d.ts +52 -7
  6. package/lib/esm/identity/decorators.js +58 -13
  7. package/lib/esm/identity/index.js +3 -3
  8. package/lib/esm/identity/utils.d.ts +19 -0
  9. package/lib/esm/identity/utils.js +22 -3
  10. package/lib/esm/index.d.ts +10 -3
  11. package/lib/esm/index.js +19 -12
  12. package/lib/esm/interfaces/ErrorParser.d.ts +12 -0
  13. package/lib/esm/interfaces/ErrorParser.js +1 -1
  14. package/lib/esm/interfaces/Executor.d.ts +13 -0
  15. package/lib/esm/interfaces/Executor.js +1 -1
  16. package/lib/esm/interfaces/Observable.d.ts +27 -0
  17. package/lib/esm/interfaces/Observable.js +1 -1
  18. package/lib/esm/interfaces/Observer.d.ts +12 -0
  19. package/lib/esm/interfaces/Observer.js +1 -1
  20. package/lib/esm/interfaces/Paginatable.d.ts +15 -0
  21. package/lib/esm/interfaces/Paginatable.js +1 -1
  22. package/lib/esm/interfaces/Queriable.d.ts +34 -9
  23. package/lib/esm/interfaces/Queriable.js +1 -1
  24. package/lib/esm/interfaces/RawExecutor.d.ts +14 -0
  25. package/lib/esm/interfaces/RawExecutor.js +1 -1
  26. package/lib/esm/interfaces/SequenceOptions.d.ts +52 -0
  27. package/lib/esm/interfaces/SequenceOptions.js +19 -1
  28. package/lib/esm/interfaces/index.js +8 -8
  29. package/lib/esm/model/BaseModel.d.ts +31 -0
  30. package/lib/esm/model/BaseModel.js +24 -1
  31. package/lib/esm/model/construction.d.ts +433 -0
  32. package/lib/esm/model/construction.js +444 -5
  33. package/lib/esm/model/decorators.d.ts +159 -29
  34. package/lib/esm/model/decorators.js +167 -37
  35. package/lib/esm/model/index.js +5 -5
  36. package/lib/esm/model/types.d.ts +9 -0
  37. package/lib/esm/model/types.js +1 -1
  38. package/lib/esm/persistence/Adapter.d.ts +358 -17
  39. package/lib/esm/persistence/Adapter.js +292 -24
  40. package/lib/esm/persistence/Dispatch.d.ts +114 -1
  41. package/lib/esm/persistence/Dispatch.js +104 -6
  42. package/lib/esm/persistence/ObserverHandler.d.ts +95 -0
  43. package/lib/esm/persistence/ObserverHandler.js +96 -1
  44. package/lib/esm/persistence/Sequence.d.ts +89 -0
  45. package/lib/esm/persistence/Sequence.js +71 -2
  46. package/lib/esm/persistence/constants.d.ts +22 -0
  47. package/lib/esm/persistence/constants.js +23 -1
  48. package/lib/esm/persistence/decorators.d.ts +10 -0
  49. package/lib/esm/persistence/decorators.js +13 -3
  50. package/lib/esm/persistence/errors.d.ts +23 -0
  51. package/lib/esm/persistence/errors.js +24 -1
  52. package/lib/esm/persistence/index.js +9 -9
  53. package/lib/esm/persistence/types.d.ts +18 -0
  54. package/lib/esm/persistence/types.js +1 -1
  55. package/lib/esm/query/Condition.d.ts +78 -31
  56. package/lib/esm/query/Condition.js +134 -55
  57. package/lib/esm/query/Paginator.d.ts +56 -0
  58. package/lib/esm/query/Paginator.js +58 -2
  59. package/lib/esm/query/Statement.d.ts +51 -0
  60. package/lib/esm/query/Statement.js +55 -4
  61. package/lib/esm/query/constants.d.ts +25 -0
  62. package/lib/esm/query/constants.js +26 -1
  63. package/lib/esm/query/errors.d.ts +14 -0
  64. package/lib/esm/query/errors.js +15 -1
  65. package/lib/esm/query/index.js +8 -8
  66. package/lib/esm/query/options.d.ts +21 -3
  67. package/lib/esm/query/options.js +1 -1
  68. package/lib/esm/query/selectors.d.ts +26 -0
  69. package/lib/esm/query/selectors.js +1 -1
  70. package/lib/esm/ram/RamAdapter.d.ts +311 -0
  71. package/lib/esm/ram/RamAdapter.js +319 -8
  72. package/lib/esm/ram/RamContext.d.ts +16 -1
  73. package/lib/esm/ram/RamContext.js +18 -3
  74. package/lib/esm/ram/RamPaginator.d.ts +43 -0
  75. package/lib/esm/ram/RamPaginator.js +55 -3
  76. package/lib/esm/ram/RamSequence.d.ts +61 -0
  77. package/lib/esm/ram/RamSequence.js +66 -5
  78. package/lib/esm/ram/RamStatement.d.ts +74 -0
  79. package/lib/esm/ram/RamStatement.js +78 -4
  80. package/lib/esm/ram/constants.d.ts +8 -0
  81. package/lib/esm/ram/constants.js +9 -1
  82. package/lib/esm/ram/handlers.d.ts +19 -0
  83. package/lib/esm/ram/handlers.js +21 -2
  84. package/lib/esm/ram/index.js +11 -11
  85. package/lib/esm/ram/model/RamSequence.d.ts +25 -0
  86. package/lib/esm/ram/model/RamSequence.js +21 -3
  87. package/lib/esm/ram/model/index.js +2 -2
  88. package/lib/esm/ram/types.d.ts +42 -0
  89. package/lib/esm/ram/types.js +1 -1
  90. package/lib/esm/repository/Repository.d.ts +363 -8
  91. package/lib/esm/repository/Repository.js +369 -24
  92. package/lib/esm/repository/constants.d.ts +25 -0
  93. package/lib/esm/repository/constants.js +26 -1
  94. package/lib/esm/repository/decorators.d.ts +27 -0
  95. package/lib/esm/repository/decorators.js +29 -2
  96. package/lib/esm/repository/errors.d.ts +12 -5
  97. package/lib/esm/repository/errors.js +13 -6
  98. package/lib/esm/repository/index.js +8 -8
  99. package/lib/esm/repository/injectables.d.ts +18 -0
  100. package/lib/esm/repository/injectables.js +23 -5
  101. package/lib/esm/repository/types.d.ts +15 -0
  102. package/lib/esm/repository/types.js +1 -1
  103. package/lib/esm/repository/utils.d.ts +11 -0
  104. package/lib/esm/repository/utils.js +15 -4
  105. package/lib/esm/utils/decorators.d.ts +8 -0
  106. package/lib/esm/utils/decorators.js +9 -1
  107. package/lib/esm/utils/errors.d.ts +46 -0
  108. package/lib/esm/utils/errors.js +47 -1
  109. package/lib/esm/utils/index.js +3 -3
  110. package/lib/identity/decorators.cjs +53 -8
  111. package/lib/identity/decorators.d.ts +52 -7
  112. package/lib/identity/utils.cjs +20 -1
  113. package/lib/identity/utils.d.ts +19 -0
  114. package/lib/index.cjs +11 -4
  115. package/lib/index.d.ts +10 -3
  116. package/lib/interfaces/ErrorParser.cjs +1 -1
  117. package/lib/interfaces/ErrorParser.d.ts +12 -0
  118. package/lib/interfaces/Executor.cjs +1 -1
  119. package/lib/interfaces/Executor.d.ts +13 -0
  120. package/lib/interfaces/Observable.cjs +1 -1
  121. package/lib/interfaces/Observable.d.ts +27 -0
  122. package/lib/interfaces/Observer.cjs +1 -1
  123. package/lib/interfaces/Observer.d.ts +12 -0
  124. package/lib/interfaces/Paginatable.cjs +1 -1
  125. package/lib/interfaces/Paginatable.d.ts +15 -0
  126. package/lib/interfaces/Queriable.cjs +1 -1
  127. package/lib/interfaces/Queriable.d.ts +34 -9
  128. package/lib/interfaces/RawExecutor.cjs +1 -1
  129. package/lib/interfaces/RawExecutor.d.ts +14 -0
  130. package/lib/interfaces/SequenceOptions.cjs +19 -1
  131. package/lib/interfaces/SequenceOptions.d.ts +52 -0
  132. package/lib/model/BaseModel.cjs +24 -1
  133. package/lib/model/BaseModel.d.ts +31 -0
  134. package/lib/model/construction.cjs +441 -2
  135. package/lib/model/construction.d.ts +433 -0
  136. package/lib/model/decorators.cjs +160 -30
  137. package/lib/model/decorators.d.ts +159 -29
  138. package/lib/model/types.cjs +1 -1
  139. package/lib/model/types.d.ts +9 -0
  140. package/lib/persistence/Adapter.cjs +287 -19
  141. package/lib/persistence/Adapter.d.ts +358 -17
  142. package/lib/persistence/Dispatch.cjs +102 -4
  143. package/lib/persistence/Dispatch.d.ts +114 -1
  144. package/lib/persistence/ObserverHandler.cjs +96 -1
  145. package/lib/persistence/ObserverHandler.d.ts +95 -0
  146. package/lib/persistence/Sequence.cjs +70 -1
  147. package/lib/persistence/Sequence.d.ts +89 -0
  148. package/lib/persistence/constants.cjs +23 -1
  149. package/lib/persistence/constants.d.ts +22 -0
  150. package/lib/persistence/decorators.cjs +11 -1
  151. package/lib/persistence/decorators.d.ts +10 -0
  152. package/lib/persistence/errors.cjs +24 -1
  153. package/lib/persistence/errors.d.ts +23 -0
  154. package/lib/persistence/types.cjs +1 -1
  155. package/lib/persistence/types.d.ts +18 -0
  156. package/lib/query/Condition.cjs +132 -53
  157. package/lib/query/Condition.d.ts +78 -31
  158. package/lib/query/Paginator.cjs +57 -1
  159. package/lib/query/Paginator.d.ts +56 -0
  160. package/lib/query/Statement.cjs +52 -1
  161. package/lib/query/Statement.d.ts +51 -0
  162. package/lib/query/constants.cjs +26 -1
  163. package/lib/query/constants.d.ts +25 -0
  164. package/lib/query/errors.cjs +15 -1
  165. package/lib/query/errors.d.ts +14 -0
  166. package/lib/query/options.cjs +1 -1
  167. package/lib/query/options.d.ts +21 -3
  168. package/lib/query/selectors.cjs +1 -1
  169. package/lib/query/selectors.d.ts +26 -0
  170. package/lib/ram/RamAdapter.cjs +312 -1
  171. package/lib/ram/RamAdapter.d.ts +311 -0
  172. package/lib/ram/RamContext.cjs +18 -3
  173. package/lib/ram/RamContext.d.ts +16 -1
  174. package/lib/ram/RamPaginator.cjs +54 -2
  175. package/lib/ram/RamPaginator.d.ts +43 -0
  176. package/lib/ram/RamSequence.cjs +63 -2
  177. package/lib/ram/RamSequence.d.ts +61 -0
  178. package/lib/ram/RamStatement.cjs +75 -1
  179. package/lib/ram/RamStatement.d.ts +74 -0
  180. package/lib/ram/constants.cjs +9 -1
  181. package/lib/ram/constants.d.ts +8 -0
  182. package/lib/ram/handlers.cjs +20 -1
  183. package/lib/ram/handlers.d.ts +19 -0
  184. package/lib/ram/model/RamSequence.cjs +19 -1
  185. package/lib/ram/model/RamSequence.d.ts +25 -0
  186. package/lib/ram/types.cjs +1 -1
  187. package/lib/ram/types.d.ts +42 -0
  188. package/lib/repository/Repository.cjs +360 -15
  189. package/lib/repository/Repository.d.ts +363 -8
  190. package/lib/repository/constants.cjs +26 -1
  191. package/lib/repository/constants.d.ts +25 -0
  192. package/lib/repository/decorators.cjs +28 -1
  193. package/lib/repository/decorators.d.ts +27 -0
  194. package/lib/repository/errors.cjs +13 -6
  195. package/lib/repository/errors.d.ts +12 -5
  196. package/lib/repository/injectables.cjs +19 -1
  197. package/lib/repository/injectables.d.ts +18 -0
  198. package/lib/repository/types.cjs +1 -1
  199. package/lib/repository/types.d.ts +15 -0
  200. package/lib/repository/utils.cjs +12 -1
  201. package/lib/repository/utils.d.ts +11 -0
  202. package/lib/utils/decorators.cjs +9 -1
  203. package/lib/utils/decorators.d.ts +8 -0
  204. package/lib/utils/errors.cjs +47 -1
  205. package/lib/utils/errors.d.ts +46 -0
  206. package/package.json +5 -5
@@ -14,14 +14,27 @@ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
14
14
  const constants_1 = require("./constants.cjs");
15
15
  const errors_1 = require("./errors.cjs");
16
16
  /**
17
- * @summary Condition Class
18
- * @description Represents a logical condition
17
+ * @description Represents a logical condition for database queries
18
+ * @summary A class that encapsulates query conditions with support for complex logical operations.
19
+ * This class allows for building and combining query conditions using logical operators (AND, OR, NOT)
20
+ * and comparison operators (equals, not equals, greater than, etc.).
21
+ * @template M - The model type this condition operates on
22
+ * @param {string | Condition<M>} attr1 - The attribute name or a nested condition
23
+ * @param {Operator | GroupOperator} operator - The operator to use for the condition
24
+ * @param {any} comparison - The value to compare against or another condition
25
+ * @class Condition
26
+ * @example
27
+ * // Create a simple condition
28
+ * const nameCondition = Condition.attribute("name").eq("John");
19
29
  *
20
- * @param {string | Condition} attr1
21
- * @param {Operator | GroupOperator} operator
22
- * @param {string | Condition} comparison
30
+ * // Create a complex condition
31
+ * const complexCondition = Condition.attribute("age").gt(18)
32
+ * .and(Condition.attribute("status").eq("active"));
23
33
  *
24
- * @class Condition
34
+ * // Use the builder pattern
35
+ * const userQuery = Condition.builder()
36
+ * .attribute("email").regexp(".*@example.com")
37
+ * .and(Condition.attribute("lastLogin").gt(new Date("2023-01-01")));
25
38
  */
26
39
  class Condition extends decorator_validation_1.Model {
27
40
  constructor(attr1, operator, comparison) {
@@ -34,28 +47,37 @@ class Condition extends decorator_validation_1.Model {
34
47
  this.comparison = comparison;
35
48
  }
36
49
  /**
37
- * @summary Joins 2 {@link Condition}s on an {@link Operator#AND} operation
38
- * @param {Condition} condition
50
+ * @description Combines this condition with another using logical AND
51
+ * @summary Joins two conditions with an AND operator, requiring both to be true
52
+ * @param {Condition<M>} condition - The condition to combine with this one
53
+ * @return {Condition<M>} A new condition representing the AND operation
39
54
  */
40
55
  and(condition) {
41
56
  return Condition.and(this, condition);
42
57
  }
43
58
  /**
44
- * @summary Joins 2 {@link Condition}s on an {@link Operator#OR} operation
45
- * @param {Condition} condition
59
+ * @description Combines this condition with another using logical OR
60
+ * @summary Joins two conditions with an OR operator, requiring at least one to be true
61
+ * @param {Condition<M>} condition - The condition to combine with this one
62
+ * @return {Condition<M>} A new condition representing the OR operation
46
63
  */
47
64
  or(condition) {
48
65
  return Condition.or(this, condition);
49
66
  }
50
67
  /**
51
- * @summary excludes a valut from the result
52
- * @param val
68
+ * @description Creates a negation condition
69
+ * @summary Excludes a value from the result by applying a NOT operator
70
+ * @param {any} val - The value to negate
71
+ * @return {Condition<M>} A new condition representing the NOT operation
53
72
  */
54
73
  not(val) {
55
74
  return new Condition(this, constants_1.Operator.NOT, val);
56
75
  }
57
76
  /**
58
- * @inheritDoc
77
+ * @description Validates the condition and checks for errors
78
+ * @summary Extends the base validation to ensure the condition is properly formed
79
+ * @param {...string[]} exceptions - Fields to exclude from validation
80
+ * @return {ModelErrorDefinition | undefined} Error definition if validation fails, undefined otherwise
59
81
  */
60
82
  hasErrors(...exceptions) {
61
83
  const errors = super.hasErrors(...exceptions);
@@ -101,46 +123,65 @@ class Condition extends decorator_validation_1.Model {
101
123
  }
102
124
  }
103
125
  /**
104
- * @summary Joins 2 {@link Condition}s on an {@link Operator#AND} operation
105
- * @param {Condition} condition1
106
- * @param {Condition} condition2
126
+ * @description Creates a new condition that combines two conditions with logical AND
127
+ * @summary Static method that joins two conditions with an AND operator, requiring both to be true
128
+ * @template M - The model type this condition operates on
129
+ * @param {Condition<M>} condition1 - The first condition
130
+ * @param {Condition<M>} condition2 - The second condition
131
+ * @return {Condition<M>} A new condition representing the AND operation
107
132
  */
108
133
  static and(condition1, condition2) {
109
134
  return Condition.group(condition1, constants_1.GroupOperator.AND, condition2);
110
135
  }
111
136
  /**
112
- * @summary Joins 2 {@link Condition}s on an {@link Operator#OR} operation
113
- * @param {Condition} condition1
114
- * @param {Condition} condition2
137
+ * @description Creates a new condition that combines two conditions with logical OR
138
+ * @summary Static method that joins two conditions with an OR operator, requiring at least one to be true
139
+ * @template M - The model type this condition operates on
140
+ * @param {Condition<M>} condition1 - The first condition
141
+ * @param {Condition<M>} condition2 - The second condition
142
+ * @return {Condition<M>} A new condition representing the OR operation
115
143
  */
116
144
  static or(condition1, condition2) {
117
145
  return Condition.group(condition1, constants_1.GroupOperator.OR, condition2);
118
146
  }
119
147
  /**
120
- * @summary Groups 2 {@link Condition}s by the specified {@link GroupOperator}
121
- * @param {Condition} condition1
122
- * @param {GroupOperator} operator
123
- * @param {Condition} condition2
148
+ * @description Creates a new condition that groups two conditions with a specified operator
149
+ * @summary Private static method that combines two conditions using the specified group operator
150
+ * @template M - The model type this condition operates on
151
+ * @param {Condition<M>} condition1 - The first condition
152
+ * @param {GroupOperator} operator - The group operator to use (AND, OR)
153
+ * @param {Condition<M>} condition2 - The second condition
154
+ * @return {Condition<M>} A new condition representing the grouped operation
124
155
  */
125
156
  static group(condition1, operator, condition2) {
126
157
  return new Condition(condition1, operator, condition2);
127
158
  }
159
+ /**
160
+ * @description Creates a condition builder for a specific model attribute
161
+ * @summary Static method that initializes a condition builder with the specified attribute
162
+ * @template M - The model type this condition operates on
163
+ * @param attr - The model attribute to build a condition for
164
+ * @return {AttributeOption<M>} A condition builder initialized with the attribute
165
+ */
128
166
  static attribute(attr) {
129
167
  return new Condition.Builder().attribute(attr);
130
168
  }
169
+ /**
170
+ * @description Alias for the attribute method
171
+ * @summary Shorthand method that initializes a condition builder with the specified attribute
172
+ * @template M - The model type this condition operates on
173
+ * @param attr - The model attribute to build a condition for
174
+ * @return {AttributeOption<M>} A condition builder initialized with the attribute
175
+ */
131
176
  static attr(attr) {
132
177
  return this.attribute(attr);
133
178
  }
134
179
  /**
135
- * @summary Condition Builder Class
136
- * @description provides a simple API to build {@link Condition}s
137
- *
180
+ * @description Provides a fluent API to build query conditions
181
+ * @summary A builder class that simplifies the creation of database query conditions
182
+ * with a chainable interface for setting attributes and operators
183
+ * @template M - The model type this condition builder operates on
138
184
  * @class ConditionBuilder
139
- * @implements Builder
140
- * @implements AttributeOption
141
- *
142
- * @category Query
143
- * @subcategory Conditions
144
185
  */
145
186
  static { this.Builder = class ConditionBuilder {
146
187
  constructor() {
@@ -149,71 +190,102 @@ class Condition extends decorator_validation_1.Model {
149
190
  this.comparison = undefined;
150
191
  }
151
192
  /**
152
- * @inheritDoc
193
+ * @description Sets the attribute for the condition
194
+ * @summary Specifies which model attribute the condition will operate on
195
+ * @param attr - The model attribute to use in the condition
196
+ * @return {AttributeOption<M>} This builder instance for method chaining
153
197
  */
154
198
  attribute(attr) {
155
199
  this.attr1 = attr;
156
200
  return this;
157
201
  }
202
+ /**
203
+ * @description Alias for the attribute method
204
+ * @summary Shorthand method to specify which model attribute the condition will operate on
205
+ * @param attr - The model attribute to use in the condition
206
+ * @return {AttributeOption<M>} This builder instance for method chaining
207
+ */
158
208
  attr(attr) {
159
209
  return this.attribute(attr);
160
210
  }
161
211
  /**
162
- * @summary Creates an Equality Comparison
163
- * @param {any} val
212
+ * @description Creates an equality condition
213
+ * @summary Builds a condition that checks if the attribute equals the specified value
214
+ * @param {any} val - The value to compare the attribute against
215
+ * @return {Condition<M>} A new condition representing the equality comparison
164
216
  */
165
217
  eq(val) {
166
218
  return this.setOp(constants_1.Operator.EQUAL, val);
167
219
  }
168
220
  /**
169
- * @summary Creates a Different Comparison
170
- * @param {any} val
221
+ * @description Creates an inequality condition
222
+ * @summary Builds a condition that checks if the attribute is different from the specified value
223
+ * @param {any} val - The value to compare the attribute against
224
+ * @return {Condition<M>} A new condition representing the inequality comparison
171
225
  */
172
226
  dif(val) {
173
227
  return this.setOp(constants_1.Operator.DIFFERENT, val);
174
228
  }
175
229
  /**
176
- * @summary Creates a Greater Than Comparison
177
- * @param {any} val
230
+ * @description Creates a greater than condition
231
+ * @summary Builds a condition that checks if the attribute is greater than the specified value
232
+ * @param {any} val - The value to compare the attribute against
233
+ * @return {Condition<M>} A new condition representing the greater than comparison
178
234
  */
179
235
  gt(val) {
180
236
  return this.setOp(constants_1.Operator.BIGGER, val);
181
237
  }
182
238
  /**
183
- * @summary Creates a Lower Than Comparison
184
- * @param {any} val
239
+ * @description Creates a less than condition
240
+ * @summary Builds a condition that checks if the attribute is less than the specified value
241
+ * @param {any} val - The value to compare the attribute against
242
+ * @return {Condition<M>} A new condition representing the less than comparison
185
243
  */
186
244
  lt(val) {
187
245
  return this.setOp(constants_1.Operator.SMALLER, val);
188
246
  }
189
247
  /**
190
- * @summary Creates a Greater or Equal to Comparison
191
- * @param {any} val
248
+ * @description Creates a greater than or equal to condition
249
+ * @summary Builds a condition that checks if the attribute is greater than or equal to the specified value
250
+ * @param {any} val - The value to compare the attribute against
251
+ * @return {Condition<M>} A new condition representing the greater than or equal comparison
192
252
  */
193
253
  gte(val) {
194
254
  return this.setOp(constants_1.Operator.BIGGER_EQ, val);
195
255
  }
196
256
  /**
197
- * @summary Creates a Lower or Equal to Comparison
198
- * @param {any} val
257
+ * @description Creates a less than or equal to condition
258
+ * @summary Builds a condition that checks if the attribute is less than or equal to the specified value
259
+ * @param {any} val - The value to compare the attribute against
260
+ * @return {Condition<M>} A new condition representing the less than or equal comparison
199
261
  */
200
262
  lte(val) {
201
263
  return this.setOp(constants_1.Operator.SMALLER_EQ, val);
202
264
  }
265
+ /**
266
+ * @description Creates an inclusion condition
267
+ * @summary Builds a condition that checks if the attribute value is included in the specified array
268
+ * @param {any[]} arr - The array of values to check against
269
+ * @return {Condition<M>} A new condition representing the inclusion comparison
270
+ */
203
271
  in(arr) {
204
272
  return this.setOp(constants_1.Operator.IN, arr);
205
273
  }
206
274
  /**
207
- * @summary Creates a Regexpo Comparison
208
- * @param {any} val
275
+ * @description Creates a regular expression condition
276
+ * @summary Builds a condition that checks if the attribute matches the specified regular expression pattern
277
+ * @param {any} val - The regular expression pattern to match against
278
+ * @return {Condition<M>} A new condition representing the regular expression comparison
209
279
  */
210
280
  regexp(val) {
211
281
  return this.setOp(constants_1.Operator.REGEXP, new RegExp(val).source);
212
282
  }
213
283
  /**
214
- * @summary Creates an {@link Operator} based Comparison
215
- * @param {Operator} op
216
- * @param {any} val
284
+ * @description Sets the operator and comparison value for the condition
285
+ * @summary Private method that configures the condition with the specified operator and value
286
+ * @param {Operator} op - The operator to use for the condition
287
+ * @param {any} val - The value to compare against
288
+ * @return {Condition<M>} A new condition with the specified operator and value
217
289
  */
218
290
  setOp(op, val) {
219
291
  this.operator = op;
@@ -221,9 +293,10 @@ class Condition extends decorator_validation_1.Model {
221
293
  return this.build();
222
294
  }
223
295
  /**
224
- * @summary Builds the Database Object
225
- * @throws {QueryError} if it fails to build the {@link Condition}
226
- * @private
296
+ * @description Constructs a Condition instance from the builder's state
297
+ * @summary Finalizes the condition building process by creating a new Condition instance
298
+ * @throws {QueryError} If the condition cannot be built due to invalid parameters
299
+ * @return {Condition<M>} A new condition instance with the configured attributes
227
300
  */
228
301
  build() {
229
302
  try {
@@ -234,6 +307,12 @@ class Condition extends decorator_validation_1.Model {
234
307
  }
235
308
  }
236
309
  }; }
310
+ /**
311
+ * @description Creates a new condition builder
312
+ * @summary Factory method that returns a new instance of the condition builder
313
+ * @template M - The model type this condition builder will operate on
314
+ * @return {ConditionBuilderOption<M>} A new condition builder instance
315
+ */
237
316
  static builder() {
238
317
  return new Condition.Builder();
239
318
  }
@@ -251,4 +330,4 @@ __decorate([
251
330
  (0, decorator_validation_1.required)(),
252
331
  __metadata("design:type", Object)
253
332
  ], Condition.prototype, "comparison", void 0);
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZGl0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L0NvbmRpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSx5RUFJd0M7QUFDeEMsK0NBQXNEO0FBQ3RELHlDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLFNBQTJCLFNBQVEsNEJBQUs7SUFRbkQsWUFDRSxLQUE0QixFQUM1QixRQUFrQyxFQUNsQyxVQUFlO1FBRWYsS0FBSyxFQUFFLENBQUM7UUFYQSxVQUFLLEdBQTJCLFNBQVMsQ0FBQztRQUUxQyxhQUFRLEdBQThCLFNBQVMsQ0FBQztRQUVoRCxlQUFVLEdBQVMsU0FBUyxDQUFDO1FBUXJDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxHQUFHLENBQUMsU0FBdUI7UUFDekIsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsRUFBRSxDQUFDLFNBQXVCO1FBQ3hCLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxHQUFRO1FBQ1YsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsb0JBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ00sU0FBUyxDQUNoQixHQUFHLFVBQW9CO1FBRXZCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUM5QyxJQUFJLE1BQU07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TUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRDs7OztXQUlHO1FBQ0ssS0FBSyxDQUFDLEVBQVksRUFBRSxHQUFRO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRDs7OztXQUlHO1FBQ0ssS0FBSztZQUNYLElBQUksQ0FBQztnQkFDSCxPQUFPLElBQUksU0FBUyxDQUNsQixJQUFJLENBQUMsS0FBOEIsRUFDbkMsSUFBSSxDQUFDLFFBQW9CLEVBQ3pCLElBQUksQ0FBQyxVQUFpQixDQUN2QixDQUFDO1lBQ0osQ0FBQztZQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sSUFBSSxtQkFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO0tBQ0YsQUExR3FCLENBMEdwQjtJQUVGLE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUssQ0FBQztJQUNwQyxDQUFDOztBQXpRSCw4QkEwUUM7QUF4UVc7SUFEVCxJQUFBLCtCQUFRLEdBQUU7O3dDQUN5QztBQUUxQztJQURULElBQUEsK0JBQVEsR0FBRTs7MkNBQytDO0FBRWhEO0lBRFQsSUFBQSwrQkFBUSxHQUFFOzs2Q0FDNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGVPcHRpb24sIENvbmRpdGlvbkJ1aWxkZXJPcHRpb24gfSBmcm9tIFwiLi9vcHRpb25zXCI7XG5pbXBvcnQge1xuICBNb2RlbCxcbiAgTW9kZWxFcnJvckRlZmluaXRpb24sXG4gIHJlcXVpcmVkLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBHcm91cE9wZXJhdG9yLCBPcGVyYXRvciB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUXVlcnlFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IENvbmRpdGlvbiBDbGFzc1xuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSBsb2dpY2FsIGNvbmRpdGlvblxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgQ29uZGl0aW9ufSBhdHRyMVxuICogQHBhcmFtIHtPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3J9IG9wZXJhdG9yXG4gKiBAcGFyYW0ge3N0cmluZyB8IENvbmRpdGlvbn0gY29tcGFyaXNvblxuICpcbiAqIEBjbGFzcyBDb25kaXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIENvbmRpdGlvbjxNIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBwcm90ZWN0ZWQgYXR0cjE/OiBzdHJpbmcgfCBDb25kaXRpb248TT4gPSB1bmRlZmluZWQ7XG4gIEByZXF1aXJlZCgpXG4gIHByb3RlY3RlZCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgR3JvdXBPcGVyYXRvciA9IHVuZGVmaW5lZDtcbiAgQHJlcXVpcmVkKClcbiAgcHJvdGVjdGVkIGNvbXBhcmlzb24/OiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICBhdHRyMTogc3RyaW5nIHwgQ29uZGl0aW9uPE0+LFxuICAgIG9wZXJhdG9yOiBPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3IsXG4gICAgY29tcGFyaXNvbjogYW55XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hdHRyMSA9IGF0dHIxO1xuICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICB0aGlzLmNvbXBhcmlzb24gPSBjb21wYXJpc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEpvaW5zIDIge0BsaW5rIENvbmRpdGlvbn1zIG9uIGFuIHtAbGluayBPcGVyYXRvciNBTkR9IG9wZXJhdGlvblxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbn0gY29uZGl0aW9uXG4gICAqL1xuICBhbmQoY29uZGl0aW9uOiBDb25kaXRpb248TT4pOiBDb25kaXRpb248TT4ge1xuICAgIHJldHVybiBDb25kaXRpb24uYW5kKHRoaXMsIGNvbmRpdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgSm9pbnMgMiB7QGxpbmsgQ29uZGl0aW9ufXMgb24gYW4ge0BsaW5rIE9wZXJhdG9yI09SfSBvcGVyYXRpb25cbiAgICogQHBhcmFtIHtDb25kaXRpb259IGNvbmRpdGlvblxuICAgKi9cbiAgb3IoY29uZGl0aW9uOiBDb25kaXRpb248TT4pOiBDb25kaXRpb248TT4ge1xuICAgIHJldHVybiBDb25kaXRpb24ub3IodGhpcywgY29uZGl0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBleGNsdWRlcyBhIHZhbHV0IGZyb20gdGhlIHJlc3VsdFxuICAgKiBAcGFyYW0gdmFsXG4gICAqL1xuICBub3QodmFsOiBhbnkpOiBDb25kaXRpb248TT4ge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uKHRoaXMsIE9wZXJhdG9yLk5PVCwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgb3ZlcnJpZGUgaGFzRXJyb3JzKFxuICAgIC4uLmV4Y2VwdGlvbnM6IHN0cmluZ1tdXG4gICk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlcnJvcnMgPSBzdXBlci5oYXNFcnJvcnMoLi4uZXhjZXB0aW9ucyk7XG4gICAgaWYgKGVycm9ycykgcmV0dXJuIGVycm9ycztcblxuICAgIGNvbnN0IGludmFsaWRPcE1lc3NhZ2UgPSBgSW52YWxpZCBvcGVyYXRvciAke3RoaXMub3BlcmF0b3J9fWA7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuYXR0cjEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmICh0aGlzLmNvbXBhcmlzb24gaW5zdGFuY2VvZiBDb25kaXRpb24pXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29tcGFyaXNvbjoge1xuICAgICAgICAgICAgY29uZGl0aW9uOiBcIkJvdGggc2lkZXMgb2YgdGhlIGNvbXBhcmlzb24gbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBNb2RlbEVycm9yRGVmaW5pdGlvbjtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKE9wZXJhdG9yKS5pbmRleE9mKHRoaXMub3BlcmF0b3IgYXMgT3BlcmF0b3IpID09PSAtMSlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvcGVyYXRvcjoge1xuICAgICAgICAgICAgY29uZGl0aW9uOiBpbnZhbGlkT3BNZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgTW9kZWxFcnJvckRlZmluaXRpb247XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXR0cjEgaW5zdGFuY2VvZiBDb25kaXRpb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgISh0aGlzLmNvbXBhcmlzb24gaW5zdGFuY2VvZiBDb25kaXRpb24pICYmXG4gICAgICAgIHRoaXMub3BlcmF0b3IgIT09IE9wZXJhdG9yLk5PVFxuICAgICAgKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbXBhcmlzb246IHtcbiAgICAgICAgICAgIGNvbmRpdGlvbjogaW52YWxpZE9wTWVzc2FnZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIE1vZGVsRXJyb3JEZWZpbml0aW9uO1xuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QudmFsdWVzKEdyb3VwT3BlcmF0b3IpLmluZGV4T2YodGhpcy5vcGVyYXRvciBhcyBHcm91cE9wZXJhdG9yKSA9PT1cbiAgICAgICAgICAtMSAmJlxuICAgICAgICB0aGlzLm9wZXJhdG9yICE9PSBPcGVyYXRvci5OT1RcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvcGVyYXRvcjoge1xuICAgICAgICAgICAgY29uZGl0aW9uOiBpbnZhbGlkT3BNZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgTW9kZWxFcnJvckRlZmluaXRpb247XG4gICAgICAvLyBpZiAodGhpcy5vcGVyYXRvciAhPT0gT3BlcmF0b3IuTk9UICYmIHR5cGVvZiB0aGlzLmF0dHIxLmF0dHIxICE9PSBcInN0cmluZ1wiKVxuICAgICAgLy8gICAgIHJldHVybiB7XG4gICAgICAvLyAgICAgICAgIGF0dHIxOiB7XG4gICAgICAvLyAgICAgICAgICAgICBjb25kaXRpb246IHN0cmluZ0Zvcm1hdChcIlBhcmVudCBjb25kaXRpb24gYXR0cmlidXRlIG11c3QgYmUgYSBzdHJpbmdcIilcbiAgICAgIC8vICAgICAgICAgfVxuICAgICAgLy8gICAgIH0gYXMgTW9kZWxFcnJvckRlZmluaXRpb25cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgSm9pbnMgMiB7QGxpbmsgQ29uZGl0aW9ufXMgb24gYW4ge0BsaW5rIE9wZXJhdG9yI0FORH0gb3BlcmF0aW9uXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9ufSBjb25kaXRpb24xXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9ufSBjb25kaXRpb24yXG4gICAqL1xuICBzdGF0aWMgYW5kPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY29uZGl0aW9uMTogQ29uZGl0aW9uPE0+LFxuICAgIGNvbmRpdGlvbjI6IENvbmRpdGlvbjxNPlxuICApOiBDb25kaXRpb248TT4ge1xuICAgIHJldHVybiBDb25kaXRpb24uZ3JvdXAoY29uZGl0aW9uMSwgR3JvdXBPcGVyYXRvci5BTkQsIGNvbmRpdGlvbjIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEpvaW5zIDIge0BsaW5rIENvbmRpdGlvbn1zIG9uIGFuIHtAbGluayBPcGVyYXRvciNPUn0gb3BlcmF0aW9uXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9ufSBjb25kaXRpb24xXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9ufSBjb25kaXRpb24yXG4gICAqL1xuICBzdGF0aWMgb3I8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjb25kaXRpb24xOiBDb25kaXRpb248TT4sXG4gICAgY29uZGl0aW9uMjogQ29uZGl0aW9uPE0+XG4gICk6IENvbmRpdGlvbjxNPiB7XG4gICAgcmV0dXJuIENvbmRpdGlvbi5ncm91cChjb25kaXRpb24xLCBHcm91cE9wZXJhdG9yLk9SLCBjb25kaXRpb24yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBHcm91cHMgMiB7QGxpbmsgQ29uZGl0aW9ufXMgYnkgdGhlIHNwZWNpZmllZCB7QGxpbmsgR3JvdXBPcGVyYXRvcn1cbiAgICogQHBhcmFtIHtDb25kaXRpb259IGNvbmRpdGlvbjFcbiAgICogQHBhcmFtIHtHcm91cE9wZXJhdG9yfSBvcGVyYXRvclxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbn0gY29uZGl0aW9uMlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ3JvdXA8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjb25kaXRpb24xOiBDb25kaXRpb248TT4sXG4gICAgb3BlcmF0b3I6IEdyb3VwT3BlcmF0b3IsXG4gICAgY29uZGl0aW9uMjogQ29uZGl0aW9uPE0+XG4gICk6IENvbmRpdGlvbjxNPiB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb24oY29uZGl0aW9uMSwgb3BlcmF0b3IsIGNvbmRpdGlvbjIpO1xuICB9XG5cbiAgc3RhdGljIGF0dHJpYnV0ZTxNIGV4dGVuZHMgTW9kZWw+KGF0dHI6IGtleW9mIE0pIHtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbi5CdWlsZGVyPE0+KCkuYXR0cmlidXRlKGF0dHIpO1xuICB9XG5cbiAgc3RhdGljIGF0dHI8TSBleHRlbmRzIE1vZGVsPihhdHRyOiBrZXlvZiBNKSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlKGF0dHIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENvbmRpdGlvbiBCdWlsZGVyIENsYXNzXG4gICAqIEBkZXNjcmlwdGlvbiBwcm92aWRlcyBhIHNpbXBsZSBBUEkgdG8gYnVpbGQge0BsaW5rIENvbmRpdGlvbn1zXG4gICAqXG4gICAqIEBjbGFzcyBDb25kaXRpb25CdWlsZGVyXG4gICAqIEBpbXBsZW1lbnRzIEJ1aWxkZXJcbiAgICogQGltcGxlbWVudHMgQXR0cmlidXRlT3B0aW9uXG4gICAqXG4gICAqIEBjYXRlZ29yeSBRdWVyeVxuICAgKiBAc3ViY2F0ZWdvcnkgQ29uZGl0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgQnVpbGRlciA9IGNsYXNzIENvbmRpdGlvbkJ1aWxkZXI8TSBleHRlbmRzIE1vZGVsPlxuICAgIGltcGxlbWVudHMgQ29uZGl0aW9uQnVpbGRlck9wdGlvbjxNPiwgQXR0cmlidXRlT3B0aW9uPE0+XG4gIHtcbiAgICBhdHRyMT86IGtleW9mIE0gfCBDb25kaXRpb248TT4gPSB1bmRlZmluZWQ7XG4gICAgb3BlcmF0b3I/OiBPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3IgPSB1bmRlZmluZWQ7XG4gICAgY29tcGFyaXNvbj86IGFueSA9IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgYXR0cmlidXRlKGF0dHI6IGtleW9mIE0pOiBBdHRyaWJ1dGVPcHRpb248TT4ge1xuICAgICAgdGhpcy5hdHRyMSA9IGF0dHI7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBhdHRyKGF0dHI6IGtleW9mIE0pIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZShhdHRyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBDcmVhdGVzIGFuIEVxdWFsaXR5IENvbXBhcmlzb25cbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAgICovXG4gICAgZXEodmFsOiBhbnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldE9wKE9wZXJhdG9yLkVRVUFMLCB2YWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBEaWZmZXJlbnQgQ29tcGFyaXNvblxuICAgICAqIEBwYXJhbSB7YW55fSB2YWxcbiAgICAgKi9cbiAgICBkaWYodmFsOiBhbnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldE9wKE9wZXJhdG9yLkRJRkZFUkVOVCwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgR3JlYXRlciBUaGFuIENvbXBhcmlzb25cbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAgICovXG4gICAgZ3QodmFsOiBhbnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldE9wKE9wZXJhdG9yLkJJR0dFUiwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgTG93ZXIgVGhhbiBDb21wYXJpc29uXG4gICAgICogQHBhcmFtIHthbnl9IHZhbFxuICAgICAqL1xuICAgIGx0KHZhbDogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRPcChPcGVyYXRvci5TTUFMTEVSLCB2YWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBHcmVhdGVyIG9yIEVxdWFsIHRvIENvbXBhcmlzb25cbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAgICovXG4gICAgZ3RlKHZhbDogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRPcChPcGVyYXRvci5CSUdHRVJfRVEsIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIExvd2VyIG9yIEVxdWFsIHRvIENvbXBhcmlzb25cbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAgICovXG4gICAgbHRlKHZhbDogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRPcChPcGVyYXRvci5TTUFMTEVSX0VRLCB2YWwpO1xuICAgIH1cblxuICAgIGluKGFycjogYW55W10pIHtcbiAgICAgIHJldHVybiB0aGlzLnNldE9wKE9wZXJhdG9yLklOLCBhcnIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBSZWdleHBvIENvbXBhcmlzb25cbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAgICovXG4gICAgcmVnZXhwKHZhbDogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRPcChPcGVyYXRvci5SRUdFWFAsIG5ldyBSZWdFeHAodmFsKS5zb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IENyZWF0ZXMgYW4ge0BsaW5rIE9wZXJhdG9yfSBiYXNlZCBDb21wYXJpc29uXG4gICAgICogQHBhcmFtIHtPcGVyYXRvcn0gb3BcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRPcChvcDogT3BlcmF0b3IsIHZhbDogYW55KSB7XG4gICAgICB0aGlzLm9wZXJhdG9yID0gb3A7XG4gICAgICB0aGlzLmNvbXBhcmlzb24gPSB2YWw7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUgRGF0YWJhc2UgT2JqZWN0XG4gICAgICogQHRocm93cyB7UXVlcnlFcnJvcn0gaWYgaXQgZmFpbHMgdG8gYnVpbGQgdGhlIHtAbGluayBDb25kaXRpb259XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGJ1aWxkKCk6IENvbmRpdGlvbjxNPiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICB0aGlzLmF0dHIxIGFzIHN0cmluZyB8IENvbmRpdGlvbjxNPixcbiAgICAgICAgICB0aGlzLm9wZXJhdG9yIGFzIE9wZXJhdG9yLFxuICAgICAgICAgIHRoaXMuY29tcGFyaXNvbiBhcyBhbnlcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGJ1aWxkZXI8TSBleHRlbmRzIE1vZGVsPigpOiBDb25kaXRpb25CdWlsZGVyT3B0aW9uPE0+IHtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbi5CdWlsZGVyPE0+KCk7XG4gIH1cbn1cbiJdfQ==
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZGl0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L0NvbmRpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSx5RUFJd0M7QUFDeEMsK0NBQXNEO0FBQ3RELHlDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQWEsU0FBMkIsU0FBUSw0QkFBSztJQVFuRCxZQUNFLEtBQTRCLEVBQzVCLFFBQWtDLEVBQ2xDLFVBQWU7UUFFZixLQUFLLEVBQUUsQ0FBQztRQVhBLFVBQUssR0FBMkIsU0FBUyxDQUFDO1FBRTFDLGFBQVEsR0FBOEIsU0FBUyxDQUFDO1FBRWhELGVBQVUsR0FBUyxTQUFTLENBQUM7UUFRckMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUFDLFNBQXVCO1FBQ3pCLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsRUFBRSxDQUFDLFNBQXVCO1FBQ3hCLE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUFDLEdBQVE7UUFDVixPQUFPLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxvQkFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTSxTQUFTLENBQ2hCLEdBQUcsVUFBb0I7UUFFdkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FB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QztRQUN0QyxDQUFDO1FBRUQ7Ozs7O1dBS0c7UUFDSCxNQUFNLENBQUMsR0FBUTtZQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQ7Ozs7OztXQU1HO1FBQ0ssS0FBSyxDQUFDLEVBQVksRUFBRSxHQUFRO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFFRDs7Ozs7V0FLRztRQUNLLEtBQUs7WUFDWCxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxJQUFJLFNBQVMsQ0FDbEIsSUFBSSxDQUFDLEtBQThCLEVBQ25DLElBQUksQ0FBQyxRQUFvQixFQUN6QixJQUFJLENBQUMsVUFBaUIsQ0FDdkIsQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO2dCQUNoQixNQUFNLElBQUksbUJBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztLQUNGLEFBMUlxQixDQTBJcEI7SUFFRjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUssQ0FBQztJQUNwQyxDQUFDOztBQTNVSCw4QkE0VUM7QUExVVc7SUFEVCxJQUFBLCtCQUFRLEdBQUU7O3dDQUN5QztBQUUxQztJQURULElBQUEsK0JBQVEsR0FBRTs7MkNBQytDO0FBRWhEO0lBRFQsSUFBQSwrQkFBUSxHQUFFOzs2Q0FDNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGVPcHRpb24sIENvbmRpdGlvbkJ1aWxkZXJPcHRpb24gfSBmcm9tIFwiLi9vcHRpb25zXCI7XG5pbXBvcnQge1xuICBNb2RlbCxcbiAgTW9kZWxFcnJvckRlZmluaXRpb24sXG4gIHJlcXVpcmVkLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBHcm91cE9wZXJhdG9yLCBPcGVyYXRvciB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgUXVlcnlFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIGEgbG9naWNhbCBjb25kaXRpb24gZm9yIGRhdGFiYXNlIHF1ZXJpZXNcbiAqIEBzdW1tYXJ5IEEgY2xhc3MgdGhhdCBlbmNhcHN1bGF0ZXMgcXVlcnkgY29uZGl0aW9ucyB3aXRoIHN1cHBvcnQgZm9yIGNvbXBsZXggbG9naWNhbCBvcGVyYXRpb25zLlxuICogVGhpcyBjbGFzcyBhbGxvd3MgZm9yIGJ1aWxkaW5nIGFuZCBjb21iaW5pbmcgcXVlcnkgY29uZGl0aW9ucyB1c2luZyBsb2dpY2FsIG9wZXJhdG9ycyAoQU5ELCBPUiwgTk9UKVxuICogYW5kIGNvbXBhcmlzb24gb3BlcmF0b3JzIChlcXVhbHMsIG5vdCBlcXVhbHMsIGdyZWF0ZXIgdGhhbiwgZXRjLikuXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoaXMgY29uZGl0aW9uIG9wZXJhdGVzIG9uXG4gKiBAcGFyYW0ge3N0cmluZyB8IENvbmRpdGlvbjxNPn0gYXR0cjEgLSBUaGUgYXR0cmlidXRlIG5hbWUgb3IgYSBuZXN0ZWQgY29uZGl0aW9uXG4gKiBAcGFyYW0ge09wZXJhdG9yIHwgR3JvdXBPcGVyYXRvcn0gb3BlcmF0b3IgLSBUaGUgb3BlcmF0b3IgdG8gdXNlIGZvciB0aGUgY29uZGl0aW9uXG4gKiBAcGFyYW0ge2FueX0gY29tcGFyaXNvbiAtIFRoZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3Qgb3IgYW5vdGhlciBjb25kaXRpb25cbiAqIEBjbGFzcyBDb25kaXRpb25cbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBzaW1wbGUgY29uZGl0aW9uXG4gKiBjb25zdCBuYW1lQ29uZGl0aW9uID0gQ29uZGl0aW9uLmF0dHJpYnV0ZShcIm5hbWVcIikuZXEoXCJKb2huXCIpO1xuICpcbiAqIC8vIENyZWF0ZSBhIGNvbXBsZXggY29uZGl0aW9uXG4gKiBjb25zdCBjb21wbGV4Q29uZGl0aW9uID0gQ29uZGl0aW9uLmF0dHJpYnV0ZShcImFnZVwiKS5ndCgxOClcbiAqICAgLmFuZChDb25kaXRpb24uYXR0cmlidXRlKFwic3RhdHVzXCIpLmVxKFwiYWN0aXZlXCIpKTtcbiAqXG4gKiAvLyBVc2UgdGhlIGJ1aWxkZXIgcGF0dGVyblxuICogY29uc3QgdXNlclF1ZXJ5ID0gQ29uZGl0aW9uLmJ1aWxkZXIoKVxuICogICAuYXR0cmlidXRlKFwiZW1haWxcIikucmVnZXhwKFwiLipAZXhhbXBsZS5jb21cIilcbiAqICAgLmFuZChDb25kaXRpb24uYXR0cmlidXRlKFwibGFzdExvZ2luXCIpLmd0KG5ldyBEYXRlKFwiMjAyMy0wMS0wMVwiKSkpO1xuICovXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uPE0gZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIHByb3RlY3RlZCBhdHRyMT86IHN0cmluZyB8IENvbmRpdGlvbjxNPiA9IHVuZGVmaW5lZDtcbiAgQHJlcXVpcmVkKClcbiAgcHJvdGVjdGVkIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBHcm91cE9wZXJhdG9yID0gdW5kZWZpbmVkO1xuICBAcmVxdWlyZWQoKVxuICBwcm90ZWN0ZWQgY29tcGFyaXNvbj86IGFueSA9IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIGF0dHIxOiBzdHJpbmcgfCBDb25kaXRpb248TT4sXG4gICAgb3BlcmF0b3I6IE9wZXJhdG9yIHwgR3JvdXBPcGVyYXRvcixcbiAgICBjb21wYXJpc29uOiBhbnlcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dHIxID0gYXR0cjE7XG4gICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgIHRoaXMuY29tcGFyaXNvbiA9IGNvbXBhcmlzb247XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbWJpbmVzIHRoaXMgY29uZGl0aW9uIHdpdGggYW5vdGhlciB1c2luZyBsb2dpY2FsIEFORFxuICAgKiBAc3VtbWFyeSBKb2lucyB0d28gY29uZGl0aW9ucyB3aXRoIGFuIEFORCBvcGVyYXRvciwgcmVxdWlyaW5nIGJvdGggdG8gYmUgdHJ1ZVxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbjxNPn0gY29uZGl0aW9uIC0gVGhlIGNvbmRpdGlvbiB0byBjb21iaW5lIHdpdGggdGhpcyBvbmVcbiAgICogQHJldHVybiB7Q29uZGl0aW9uPE0+fSBBIG5ldyBjb25kaXRpb24gcmVwcmVzZW50aW5nIHRoZSBBTkQgb3BlcmF0aW9uXG4gICAqL1xuICBhbmQoY29uZGl0aW9uOiBDb25kaXRpb248TT4pOiBDb25kaXRpb248TT4ge1xuICAgIHJldHVybiBDb25kaXRpb24uYW5kKHRoaXMsIGNvbmRpdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbWJpbmVzIHRoaXMgY29uZGl0aW9uIHdpdGggYW5vdGhlciB1c2luZyBsb2dpY2FsIE9SXG4gICAqIEBzdW1tYXJ5IEpvaW5zIHR3byBjb25kaXRpb25zIHdpdGggYW4gT1Igb3BlcmF0b3IsIHJlcXVpcmluZyBhdCBsZWFzdCBvbmUgdG8gYmUgdHJ1ZVxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbjxNPn0gY29uZGl0aW9uIC0gVGhlIGNvbmRpdGlvbiB0byBjb21iaW5lIHdpdGggdGhpcyBvbmVcbiAgICogQHJldHVybiB7Q29uZGl0aW9uPE0+fSBBIG5ldyBjb25kaXRpb24gcmVwcmVzZW50aW5nIHRoZSBPUiBvcGVyYXRpb25cbiAgICovXG4gIG9yKGNvbmRpdGlvbjogQ29uZGl0aW9uPE0+KTogQ29uZGl0aW9uPE0+IHtcbiAgICByZXR1cm4gQ29uZGl0aW9uLm9yKHRoaXMsIGNvbmRpdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZWdhdGlvbiBjb25kaXRpb25cbiAgICogQHN1bW1hcnkgRXhjbHVkZXMgYSB2YWx1ZSBmcm9tIHRoZSByZXN1bHQgYnkgYXBwbHlpbmcgYSBOT1Qgb3BlcmF0b3JcbiAgICogQHBhcmFtIHthbnl9IHZhbCAtIFRoZSB2YWx1ZSB0byBuZWdhdGVcbiAgICogQHJldHVybiB7Q29uZGl0aW9uPE0+fSBBIG5ldyBjb25kaXRpb24gcmVwcmVzZW50aW5nIHRoZSBOT1Qgb3BlcmF0aW9uXG4gICAqL1xuICBub3QodmFsOiBhbnkpOiBDb25kaXRpb248TT4ge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uKHRoaXMsIE9wZXJhdG9yLk5PVCwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVmFsaWRhdGVzIHRoZSBjb25kaXRpb24gYW5kIGNoZWNrcyBmb3IgZXJyb3JzXG4gICAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGJhc2UgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIGNvbmRpdGlvbiBpcyBwcm9wZXJseSBmb3JtZWRcbiAgICogQHBhcmFtIHsuLi5zdHJpbmdbXX0gZXhjZXB0aW9ucyAtIEZpZWxkcyB0byBleGNsdWRlIGZyb20gdmFsaWRhdGlvblxuICAgKiBAcmV0dXJuIHtNb2RlbEVycm9yRGVmaW5pdGlvbiB8IHVuZGVmaW5lZH0gRXJyb3IgZGVmaW5pdGlvbiBpZiB2YWxpZGF0aW9uIGZhaWxzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gICAqL1xuICBvdmVycmlkZSBoYXNFcnJvcnMoXG4gICAgLi4uZXhjZXB0aW9uczogc3RyaW5nW11cbiAgKTogTW9kZWxFcnJvckRlZmluaXRpb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHN1cGVyLmhhc0Vycm9ycyguLi5leGNlcHRpb25zKTtcbiAgICBpZiAoZXJyb3JzKSByZXR1cm4gZXJyb3JzO1xuXG4gICAgY29uc3QgaW52YWxpZE9wTWVzc2FnZSA9IGBJbnZhbGlkIG9wZXJhdG9yICR7dGhpcy5vcGVyYXRvcn19YDtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5hdHRyMSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKHRoaXMuY29tcGFyaXNvbiBpbnN0YW5jZW9mIENvbmRpdGlvbilcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb21wYXJpc29uOiB7XG4gICAgICAgICAgICBjb25kaXRpb246IFwiQm90aCBzaWRlcyBvZiB0aGUgY29tcGFyaXNvbiBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGVcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIE1vZGVsRXJyb3JEZWZpbml0aW9uO1xuICAgICAgaWYgKE9iamVjdC52YWx1ZXMoT3BlcmF0b3IpLmluZGV4T2YodGhpcy5vcGVyYXRvciBhcyBPcGVyYXRvcikgPT09IC0xKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9wZXJhdG9yOiB7XG4gICAgICAgICAgICBjb25kaXRpb246IGludmFsaWRPcE1lc3NhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBNb2RlbEVycm9yRGVmaW5pdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hdHRyMSBpbnN0YW5jZW9mIENvbmRpdGlvbikge1xuICAgICAgaWYgKFxuICAgICAgICAhKHRoaXMuY29tcGFyaXNvbiBpbnN0YW5jZW9mIENvbmRpdGlvbikgJiZcbiAgICAgICAgdGhpcy5vcGVyYXRvciAhPT0gT3BlcmF0b3IuTk9UXG4gICAgICApXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29tcGFyaXNvbjoge1xuICAgICAgICAgICAgY29uZGl0aW9uOiBpbnZhbGlkT3BNZXNzYWdlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgTW9kZWxFcnJvckRlZmluaXRpb247XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC52YWx1ZXMoR3JvdXBPcGVyYXRvcikuaW5kZXhPZih0aGlzLm9wZXJhdG9yIGFzIEdyb3VwT3BlcmF0b3IpID09PVxuICAgICAgICAgIC0xICYmXG4gICAgICAgIHRoaXMub3BlcmF0b3IgIT09IE9wZXJhdG9yLk5PVFxuICAgICAgKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9wZXJhdG9yOiB7XG4gICAgICAgICAgICBjb25kaXRpb246IGludmFsaWRPcE1lc3NhZ2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBNb2RlbEVycm9yRGVmaW5pdGlvbjtcbiAgICAgIC8vIGlmICh0aGlzLm9wZXJhdG9yICE9PSBPcGVyYXRvci5OT1QgJiYgdHlwZW9mIHRoaXMuYXR0cjEuYXR0cjEgIT09IFwic3RyaW5nXCIpXG4gICAgICAvLyAgICAgcmV0dXJuIHtcbiAgICAgIC8vICAgICAgICAgYXR0cjE6IHtcbiAgICAgIC8vICAgICAgICAgICAgIGNvbmRpdGlvbjogc3RyaW5nRm9ybWF0KFwiUGFyZW50IGNvbmRpdGlvbiBhdHRyaWJ1dGUgbXVzdCBiZSBhIHN0cmluZ1wiKVxuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgfSBhcyBNb2RlbEVycm9yRGVmaW5pdGlvblxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBjb25kaXRpb24gdGhhdCBjb21iaW5lcyB0d28gY29uZGl0aW9ucyB3aXRoIGxvZ2ljYWwgQU5EXG4gICAqIEBzdW1tYXJ5IFN0YXRpYyBtZXRob2QgdGhhdCBqb2lucyB0d28gY29uZGl0aW9ucyB3aXRoIGFuIEFORCBvcGVyYXRvciwgcmVxdWlyaW5nIGJvdGggdG8gYmUgdHJ1ZVxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoaXMgY29uZGl0aW9uIG9wZXJhdGVzIG9uXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9uPE0+fSBjb25kaXRpb24xIC0gVGhlIGZpcnN0IGNvbmRpdGlvblxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbjxNPn0gY29uZGl0aW9uMiAtIFRoZSBzZWNvbmQgY29uZGl0aW9uXG4gICAqIEByZXR1cm4ge0NvbmRpdGlvbjxNPn0gQSBuZXcgY29uZGl0aW9uIHJlcHJlc2VudGluZyB0aGUgQU5EIG9wZXJhdGlvblxuICAgKi9cbiAgc3RhdGljIGFuZDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIGNvbmRpdGlvbjE6IENvbmRpdGlvbjxNPixcbiAgICBjb25kaXRpb24yOiBDb25kaXRpb248TT5cbiAgKTogQ29uZGl0aW9uPE0+IHtcbiAgICByZXR1cm4gQ29uZGl0aW9uLmdyb3VwKGNvbmRpdGlvbjEsIEdyb3VwT3BlcmF0b3IuQU5ELCBjb25kaXRpb24yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBjb25kaXRpb24gdGhhdCBjb21iaW5lcyB0d28gY29uZGl0aW9ucyB3aXRoIGxvZ2ljYWwgT1JcbiAgICogQHN1bW1hcnkgU3RhdGljIG1ldGhvZCB0aGF0IGpvaW5zIHR3byBjb25kaXRpb25zIHdpdGggYW4gT1Igb3BlcmF0b3IsIHJlcXVpcmluZyBhdCBsZWFzdCBvbmUgdG8gYmUgdHJ1ZVxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoaXMgY29uZGl0aW9uIG9wZXJhdGVzIG9uXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9uPE0+fSBjb25kaXRpb24xIC0gVGhlIGZpcnN0IGNvbmRpdGlvblxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbjxNPn0gY29uZGl0aW9uMiAtIFRoZSBzZWNvbmQgY29uZGl0aW9uXG4gICAqIEByZXR1cm4ge0NvbmRpdGlvbjxNPn0gQSBuZXcgY29uZGl0aW9uIHJlcHJlc2VudGluZyB0aGUgT1Igb3BlcmF0aW9uXG4gICAqL1xuICBzdGF0aWMgb3I8TSBleHRlbmRzIE1vZGVsPihcbiAgICBjb25kaXRpb24xOiBDb25kaXRpb248TT4sXG4gICAgY29uZGl0aW9uMjogQ29uZGl0aW9uPE0+XG4gICk6IENvbmRpdGlvbjxNPiB7XG4gICAgcmV0dXJuIENvbmRpdGlvbi5ncm91cChjb25kaXRpb24xLCBHcm91cE9wZXJhdG9yLk9SLCBjb25kaXRpb24yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBjb25kaXRpb24gdGhhdCBncm91cHMgdHdvIGNvbmRpdGlvbnMgd2l0aCBhIHNwZWNpZmllZCBvcGVyYXRvclxuICAgKiBAc3VtbWFyeSBQcml2YXRlIHN0YXRpYyBtZXRob2QgdGhhdCBjb21iaW5lcyB0d28gY29uZGl0aW9ucyB1c2luZyB0aGUgc3BlY2lmaWVkIGdyb3VwIG9wZXJhdG9yXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhpcyBjb25kaXRpb24gb3BlcmF0ZXMgb25cbiAgICogQHBhcmFtIHtDb25kaXRpb248TT59IGNvbmRpdGlvbjEgLSBUaGUgZmlyc3QgY29uZGl0aW9uXG4gICAqIEBwYXJhbSB7R3JvdXBPcGVyYXRvcn0gb3BlcmF0b3IgLSBUaGUgZ3JvdXAgb3BlcmF0b3IgdG8gdXNlIChBTkQsIE9SKVxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbjxNPn0gY29uZGl0aW9uMiAtIFRoZSBzZWNvbmQgY29uZGl0aW9uXG4gICAqIEByZXR1cm4ge0NvbmRpdGlvbjxNPn0gQSBuZXcgY29uZGl0aW9uIHJlcHJlc2VudGluZyB0aGUgZ3JvdXBlZCBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdyb3VwPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgY29uZGl0aW9uMTogQ29uZGl0aW9uPE0+LFxuICAgIG9wZXJhdG9yOiBHcm91cE9wZXJhdG9yLFxuICAgIGNvbmRpdGlvbjI6IENvbmRpdGlvbjxNPlxuICApOiBDb25kaXRpb248TT4ge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uKGNvbmRpdGlvbjEsIG9wZXJhdG9yLCBjb25kaXRpb24yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGNvbmRpdGlvbiBidWlsZGVyIGZvciBhIHNwZWNpZmljIG1vZGVsIGF0dHJpYnV0ZVxuICAgKiBAc3VtbWFyeSBTdGF0aWMgbWV0aG9kIHRoYXQgaW5pdGlhbGl6ZXMgYSBjb25kaXRpb24gYnVpbGRlciB3aXRoIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhpcyBjb25kaXRpb24gb3BlcmF0ZXMgb25cbiAgICogQHBhcmFtIGF0dHIgLSBUaGUgbW9kZWwgYXR0cmlidXRlIHRvIGJ1aWxkIGEgY29uZGl0aW9uIGZvclxuICAgKiBAcmV0dXJuIHtBdHRyaWJ1dGVPcHRpb248TT59IEEgY29uZGl0aW9uIGJ1aWxkZXIgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYXR0cmlidXRlXG4gICAqL1xuICBzdGF0aWMgYXR0cmlidXRlPE0gZXh0ZW5kcyBNb2RlbD4oYXR0cjoga2V5b2YgTSkge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uLkJ1aWxkZXI8TT4oKS5hdHRyaWJ1dGUoYXR0cik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFsaWFzIGZvciB0aGUgYXR0cmlidXRlIG1ldGhvZFxuICAgKiBAc3VtbWFyeSBTaG9ydGhhbmQgbWV0aG9kIHRoYXQgaW5pdGlhbGl6ZXMgYSBjb25kaXRpb24gYnVpbGRlciB3aXRoIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhpcyBjb25kaXRpb24gb3BlcmF0ZXMgb25cbiAgICogQHBhcmFtIGF0dHIgLSBUaGUgbW9kZWwgYXR0cmlidXRlIHRvIGJ1aWxkIGEgY29uZGl0aW9uIGZvclxuICAgKiBAcmV0dXJuIHtBdHRyaWJ1dGVPcHRpb248TT59IEEgY29uZGl0aW9uIGJ1aWxkZXIgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYXR0cmlidXRlXG4gICAqL1xuICBzdGF0aWMgYXR0cjxNIGV4dGVuZHMgTW9kZWw+KGF0dHI6IGtleW9mIE0pIHtcbiAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGUoYXR0cik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGEgZmx1ZW50IEFQSSB0byBidWlsZCBxdWVyeSBjb25kaXRpb25zXG4gICAqIEBzdW1tYXJ5IEEgYnVpbGRlciBjbGFzcyB0aGF0IHNpbXBsaWZpZXMgdGhlIGNyZWF0aW9uIG9mIGRhdGFiYXNlIHF1ZXJ5IGNvbmRpdGlvbnNcbiAgICogd2l0aCBhIGNoYWluYWJsZSBpbnRlcmZhY2UgZm9yIHNldHRpbmcgYXR0cmlidXRlcyBhbmQgb3BlcmF0b3JzXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhpcyBjb25kaXRpb24gYnVpbGRlciBvcGVyYXRlcyBvblxuICAgKiBAY2xhc3MgQ29uZGl0aW9uQnVpbGRlclxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgQnVpbGRlciA9IGNsYXNzIENvbmRpdGlvbkJ1aWxkZXI8TSBleHRlbmRzIE1vZGVsPlxuICAgIGltcGxlbWVudHMgQ29uZGl0aW9uQnVpbGRlck9wdGlvbjxNPiwgQXR0cmlidXRlT3B0aW9uPE0+XG4gIHtcbiAgICBhdHRyMT86IGtleW9mIE0gfCBDb25kaXRpb248TT4gPSB1bmRlZmluZWQ7XG4gICAgb3BlcmF0b3I/OiBPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3IgPSB1bmRlZmluZWQ7XG4gICAgY29tcGFyaXNvbj86IGFueSA9IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBhdHRyaWJ1dGUgZm9yIHRoZSBjb25kaXRpb25cbiAgICAgKiBAc3VtbWFyeSBTcGVjaWZpZXMgd2hpY2ggbW9kZWwgYXR0cmlidXRlIHRoZSBjb25kaXRpb24gd2lsbCBvcGVyYXRlIG9uXG4gICAgICogQHBhcmFtIGF0dHIgLSBUaGUgbW9kZWwgYXR0cmlidXRlIHRvIHVzZSBpbiB0aGUgY29uZGl0aW9uXG4gICAgICogQHJldHVybiB7QXR0cmlidXRlT3B0aW9uPE0+fSBUaGlzIGJ1aWxkZXIgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICAgICAqL1xuICAgIGF0dHJpYnV0ZShhdHRyOiBrZXlvZiBNKTogQXR0cmlidXRlT3B0aW9uPE0+IHtcbiAgICAgIHRoaXMuYXR0cjEgPSBhdHRyO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFsaWFzIGZvciB0aGUgYXR0cmlidXRlIG1ldGhvZFxuICAgICAqIEBzdW1tYXJ5IFNob3J0aGFuZCBtZXRob2QgdG8gc3BlY2lmeSB3aGljaCBtb2RlbCBhdHRyaWJ1dGUgdGhlIGNvbmRpdGlvbiB3aWxsIG9wZXJhdGUgb25cbiAgICAgKiBAcGFyYW0gYXR0ciAtIFRoZSBtb2RlbCBhdHRyaWJ1dGUgdG8gdXNlIGluIHRoZSBjb25kaXRpb25cbiAgICAgKiBAcmV0dXJuIHtBdHRyaWJ1dGVPcHRpb248TT59IFRoaXMgYnVpbGRlciBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nXG4gICAgICovXG4gICAgYXR0cihhdHRyOiBrZXlvZiBNKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGUoYXR0cik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW4gZXF1YWxpdHkgY29uZGl0aW9uXG4gICAgICogQHN1bW1hcnkgQnVpbGRzIGEgY29uZGl0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZSBhdHRyaWJ1dGUgZXF1YWxzIHRoZSBzcGVjaWZpZWQgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsIC0gVGhlIHZhbHVlIHRvIGNvbXBhcmUgdGhlIGF0dHJpYnV0ZSBhZ2FpbnN0XG4gICAgICogQHJldHVybiB7Q29uZGl0aW9uPE0+fSBBIG5ldyBjb25kaXRpb24gcmVwcmVzZW50aW5nIHRoZSBlcXVhbGl0eSBjb21wYXJpc29uXG4gICAgICovXG4gICAgZXEodmFsOiBhbnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldE9wKE9wZXJhdG9yLkVRVUFMLCB2YWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIGluZXF1YWxpdHkgY29uZGl0aW9uXG4gICAgICogQHN1bW1hcnkgQnVpbGRzIGEgY29uZGl0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZSBhdHRyaWJ1dGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNwZWNpZmllZCB2YWx1ZVxuICAgICAqIEBwYXJhbSB7YW55fSB2YWwgLSBUaGUgdmFsdWUgdG8gY29tcGFyZSB0aGUgYXR0cmlidXRlIGFnYWluc3RcbiAgICAgKiBAcmV0dXJuIHtDb25kaXRpb248TT59IEEgbmV3IGNvbmRpdGlvbiByZXByZXNlbnRpbmcgdGhlIGluZXF1YWxpdHkgY29tcGFyaXNvblxuICAgICAqL1xuICAgIGRpZih2YWw6IGFueSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0T3AoT3BlcmF0b3IuRElGRkVSRU5ULCB2YWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgZ3JlYXRlciB0aGFuIGNvbmRpdGlvblxuICAgICAqIEBzdW1tYXJ5IEJ1aWxkcyBhIGNvbmRpdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUgYXR0cmlidXRlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkIHZhbHVlXG4gICAgICogQHBhcmFtIHthbnl9IHZhbCAtIFRoZSB2YWx1ZSB0byBjb21wYXJlIHRoZSBhdHRyaWJ1dGUgYWdhaW5zdFxuICAgICAqIEByZXR1cm4ge0NvbmRpdGlvbjxNPn0gQSBuZXcgY29uZGl0aW9uIHJlcHJlc2VudGluZyB0aGUgZ3JlYXRlciB0aGFuIGNvbXBhcmlzb25cbiAgICAgKi9cbiAgICBndCh2YWw6IGFueSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0T3AoT3BlcmF0b3IuQklHR0VSLCB2YWwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbGVzcyB0aGFuIGNvbmRpdGlvblxuICAgICAqIEBzdW1tYXJ5IEJ1aWxkcyBhIGNvbmRpdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGUgYXR0cmlidXRlIGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkIHZhbHVlXG4gICAgICogQHBhcmFtIHthbnl9IHZhbCAtIFRoZSB2YWx1ZSB0byBjb21wYXJlIHRoZSBhdHRyaWJ1dGUgYWdhaW5zdFxuICAgICAqIEByZXR1cm4ge0NvbmRpdGlvbjxNPn0gQSBuZXcgY29uZGl0aW9uIHJlcHJlc2VudGluZyB0aGUgbGVzcyB0aGFuIGNvbXBhcmlzb25cbiAgICAgKi9cbiAgICBsdCh2YWw6IGFueSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0T3AoT3BlcmF0b3IuU01BTExFUiwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBjb25kaXRpb25cbiAgICAgKiBAc3VtbWFyeSBCdWlsZHMgYSBjb25kaXRpb24gdGhhdCBjaGVja3MgaWYgdGhlIGF0dHJpYnV0ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZVxuICAgICAqIEBwYXJhbSB7YW55fSB2YWwgLSBUaGUgdmFsdWUgdG8gY29tcGFyZSB0aGUgYXR0cmlidXRlIGFnYWluc3RcbiAgICAgKiBAcmV0dXJuIHtDb25kaXRpb248TT59IEEgbmV3IGNvbmRpdGlvbiByZXByZXNlbnRpbmcgdGhlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBjb21wYXJpc29uXG4gICAgICovXG4gICAgZ3RlKHZhbDogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRPcChPcGVyYXRvci5CSUdHRVJfRVEsIHZhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gY29uZGl0aW9uXG4gICAgICogQHN1bW1hcnkgQnVpbGRzIGEgY29uZGl0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWVcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsIC0gVGhlIHZhbHVlIHRvIGNvbXBhcmUgdGhlIGF0dHJpYnV0ZSBhZ2FpbnN0XG4gICAgICogQHJldHVybiB7Q29uZGl0aW9uPE0+fSBBIG5ldyBjb25kaXRpb24gcmVwcmVzZW50aW5nIHRoZSBsZXNzIHRoYW4gb3IgZXF1YWwgY29tcGFyaXNvblxuICAgICAqL1xuICAgIGx0ZSh2YWw6IGFueSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0T3AoT3BlcmF0b3IuU01BTExFUl9FUSwgdmFsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhbiBpbmNsdXNpb24gY29uZGl0aW9uXG4gICAgICogQHN1bW1hcnkgQnVpbGRzIGEgY29uZGl0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaXMgaW5jbHVkZWQgaW4gdGhlIHNwZWNpZmllZCBhcnJheVxuICAgICAqIEBwYXJhbSB7YW55W119IGFyciAtIFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gY2hlY2sgYWdhaW5zdFxuICAgICAqIEByZXR1cm4ge0NvbmRpdGlvbjxNPn0gQSBuZXcgY29uZGl0aW9uIHJlcHJlc2VudGluZyB0aGUgaW5jbHVzaW9uIGNvbXBhcmlzb25cbiAgICAgKi9cbiAgICBpbihhcnI6IGFueVtdKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRPcChPcGVyYXRvci5JTiwgYXJyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb25kaXRpb25cbiAgICAgKiBAc3VtbWFyeSBCdWlsZHMgYSBjb25kaXRpb24gdGhhdCBjaGVja3MgaWYgdGhlIGF0dHJpYnV0ZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5cbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3RcbiAgICAgKiBAcmV0dXJuIHtDb25kaXRpb248TT59IEEgbmV3IGNvbmRpdGlvbiByZXByZXNlbnRpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb21wYXJpc29uXG4gICAgICovXG4gICAgcmVnZXhwKHZhbDogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRPcChPcGVyYXRvci5SRUdFWFAsIG5ldyBSZWdFeHAodmFsKS5zb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBvcGVyYXRvciBhbmQgY29tcGFyaXNvbiB2YWx1ZSBmb3IgdGhlIGNvbmRpdGlvblxuICAgICAqIEBzdW1tYXJ5IFByaXZhdGUgbWV0aG9kIHRoYXQgY29uZmlndXJlcyB0aGUgY29uZGl0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBvcGVyYXRvciBhbmQgdmFsdWVcbiAgICAgKiBAcGFyYW0ge09wZXJhdG9yfSBvcCAtIFRoZSBvcGVyYXRvciB0byB1c2UgZm9yIHRoZSBjb25kaXRpb25cbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsIC0gVGhlIHZhbHVlIHRvIGNvbXBhcmUgYWdhaW5zdFxuICAgICAqIEByZXR1cm4ge0NvbmRpdGlvbjxNPn0gQSBuZXcgY29uZGl0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBvcGVyYXRvciBhbmQgdmFsdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldE9wKG9wOiBPcGVyYXRvciwgdmFsOiBhbnkpIHtcbiAgICAgIHRoaXMub3BlcmF0b3IgPSBvcDtcbiAgICAgIHRoaXMuY29tcGFyaXNvbiA9IHZhbDtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdHMgYSBDb25kaXRpb24gaW5zdGFuY2UgZnJvbSB0aGUgYnVpbGRlcidzIHN0YXRlXG4gICAgICogQHN1bW1hcnkgRmluYWxpemVzIHRoZSBjb25kaXRpb24gYnVpbGRpbmcgcHJvY2VzcyBieSBjcmVhdGluZyBhIG5ldyBDb25kaXRpb24gaW5zdGFuY2VcbiAgICAgKiBAdGhyb3dzIHtRdWVyeUVycm9yfSBJZiB0aGUgY29uZGl0aW9uIGNhbm5vdCBiZSBidWlsdCBkdWUgdG8gaW52YWxpZCBwYXJhbWV0ZXJzXG4gICAgICogQHJldHVybiB7Q29uZGl0aW9uPE0+fSBBIG5ldyBjb25kaXRpb24gaW5zdGFuY2Ugd2l0aCB0aGUgY29uZmlndXJlZCBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZCgpOiBDb25kaXRpb248TT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgdGhpcy5hdHRyMSBhcyBzdHJpbmcgfCBDb25kaXRpb248TT4sXG4gICAgICAgICAgdGhpcy5vcGVyYXRvciBhcyBPcGVyYXRvcixcbiAgICAgICAgICB0aGlzLmNvbXBhcmlzb24gYXMgYW55XG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBjb25kaXRpb24gYnVpbGRlclxuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IHJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbmRpdGlvbiBidWlsZGVyXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhpcyBjb25kaXRpb24gYnVpbGRlciB3aWxsIG9wZXJhdGUgb25cbiAgICogQHJldHVybiB7Q29uZGl0aW9uQnVpbGRlck9wdGlvbjxNPn0gQSBuZXcgY29uZGl0aW9uIGJ1aWxkZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBidWlsZGVyPE0gZXh0ZW5kcyBNb2RlbD4oKTogQ29uZGl0aW9uQnVpbGRlck9wdGlvbjxNPiB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb24uQnVpbGRlcjxNPigpO1xuICB9XG59XG4iXX0=
@@ -2,14 +2,27 @@ import { AttributeOption, ConditionBuilderOption } from "./options";
2
2
  import { Model, ModelErrorDefinition } from "@decaf-ts/decorator-validation";
3
3
  import { GroupOperator, Operator } from "./constants";
4
4
  /**
5
- * @summary Condition Class
6
- * @description Represents a logical condition
5
+ * @description Represents a logical condition for database queries
6
+ * @summary A class that encapsulates query conditions with support for complex logical operations.
7
+ * This class allows for building and combining query conditions using logical operators (AND, OR, NOT)
8
+ * and comparison operators (equals, not equals, greater than, etc.).
9
+ * @template M - The model type this condition operates on
10
+ * @param {string | Condition<M>} attr1 - The attribute name or a nested condition
11
+ * @param {Operator | GroupOperator} operator - The operator to use for the condition
12
+ * @param {any} comparison - The value to compare against or another condition
13
+ * @class Condition
14
+ * @example
15
+ * // Create a simple condition
16
+ * const nameCondition = Condition.attribute("name").eq("John");
7
17
  *
8
- * @param {string | Condition} attr1
9
- * @param {Operator | GroupOperator} operator
10
- * @param {string | Condition} comparison
18
+ * // Create a complex condition
19
+ * const complexCondition = Condition.attribute("age").gt(18)
20
+ * .and(Condition.attribute("status").eq("active"));
11
21
  *
12
- * @class Condition
22
+ * // Use the builder pattern
23
+ * const userQuery = Condition.builder()
24
+ * .attribute("email").regexp(".*@example.com")
25
+ * .and(Condition.attribute("lastLogin").gt(new Date("2023-01-01")));
13
26
  */
14
27
  export declare class Condition<M extends Model> extends Model {
15
28
  protected attr1?: string | Condition<M>;
@@ -17,56 +30,90 @@ export declare class Condition<M extends Model> extends Model {
17
30
  protected comparison?: any;
18
31
  private constructor();
19
32
  /**
20
- * @summary Joins 2 {@link Condition}s on an {@link Operator#AND} operation
21
- * @param {Condition} condition
33
+ * @description Combines this condition with another using logical AND
34
+ * @summary Joins two conditions with an AND operator, requiring both to be true
35
+ * @param {Condition<M>} condition - The condition to combine with this one
36
+ * @return {Condition<M>} A new condition representing the AND operation
22
37
  */
23
38
  and(condition: Condition<M>): Condition<M>;
24
39
  /**
25
- * @summary Joins 2 {@link Condition}s on an {@link Operator#OR} operation
26
- * @param {Condition} condition
40
+ * @description Combines this condition with another using logical OR
41
+ * @summary Joins two conditions with an OR operator, requiring at least one to be true
42
+ * @param {Condition<M>} condition - The condition to combine with this one
43
+ * @return {Condition<M>} A new condition representing the OR operation
27
44
  */
28
45
  or(condition: Condition<M>): Condition<M>;
29
46
  /**
30
- * @summary excludes a valut from the result
31
- * @param val
47
+ * @description Creates a negation condition
48
+ * @summary Excludes a value from the result by applying a NOT operator
49
+ * @param {any} val - The value to negate
50
+ * @return {Condition<M>} A new condition representing the NOT operation
32
51
  */
33
52
  not(val: any): Condition<M>;
34
53
  /**
35
- * @inheritDoc
54
+ * @description Validates the condition and checks for errors
55
+ * @summary Extends the base validation to ensure the condition is properly formed
56
+ * @param {...string[]} exceptions - Fields to exclude from validation
57
+ * @return {ModelErrorDefinition | undefined} Error definition if validation fails, undefined otherwise
36
58
  */
37
59
  hasErrors(...exceptions: string[]): ModelErrorDefinition | undefined;
38
60
  /**
39
- * @summary Joins 2 {@link Condition}s on an {@link Operator#AND} operation
40
- * @param {Condition} condition1
41
- * @param {Condition} condition2
61
+ * @description Creates a new condition that combines two conditions with logical AND
62
+ * @summary Static method that joins two conditions with an AND operator, requiring both to be true
63
+ * @template M - The model type this condition operates on
64
+ * @param {Condition<M>} condition1 - The first condition
65
+ * @param {Condition<M>} condition2 - The second condition
66
+ * @return {Condition<M>} A new condition representing the AND operation
42
67
  */
43
68
  static and<M extends Model>(condition1: Condition<M>, condition2: Condition<M>): Condition<M>;
44
69
  /**
45
- * @summary Joins 2 {@link Condition}s on an {@link Operator#OR} operation
46
- * @param {Condition} condition1
47
- * @param {Condition} condition2
70
+ * @description Creates a new condition that combines two conditions with logical OR
71
+ * @summary Static method that joins two conditions with an OR operator, requiring at least one to be true
72
+ * @template M - The model type this condition operates on
73
+ * @param {Condition<M>} condition1 - The first condition
74
+ * @param {Condition<M>} condition2 - The second condition
75
+ * @return {Condition<M>} A new condition representing the OR operation
48
76
  */
49
77
  static or<M extends Model>(condition1: Condition<M>, condition2: Condition<M>): Condition<M>;
50
78
  /**
51
- * @summary Groups 2 {@link Condition}s by the specified {@link GroupOperator}
52
- * @param {Condition} condition1
53
- * @param {GroupOperator} operator
54
- * @param {Condition} condition2
79
+ * @description Creates a new condition that groups two conditions with a specified operator
80
+ * @summary Private static method that combines two conditions using the specified group operator
81
+ * @template M - The model type this condition operates on
82
+ * @param {Condition<M>} condition1 - The first condition
83
+ * @param {GroupOperator} operator - The group operator to use (AND, OR)
84
+ * @param {Condition<M>} condition2 - The second condition
85
+ * @return {Condition<M>} A new condition representing the grouped operation
55
86
  */
56
87
  private static group;
88
+ /**
89
+ * @description Creates a condition builder for a specific model attribute
90
+ * @summary Static method that initializes a condition builder with the specified attribute
91
+ * @template M - The model type this condition operates on
92
+ * @param attr - The model attribute to build a condition for
93
+ * @return {AttributeOption<M>} A condition builder initialized with the attribute
94
+ */
57
95
  static attribute<M extends Model>(attr: keyof M): AttributeOption<M>;
96
+ /**
97
+ * @description Alias for the attribute method
98
+ * @summary Shorthand method that initializes a condition builder with the specified attribute
99
+ * @template M - The model type this condition operates on
100
+ * @param attr - The model attribute to build a condition for
101
+ * @return {AttributeOption<M>} A condition builder initialized with the attribute
102
+ */
58
103
  static attr<M extends Model>(attr: keyof M): AttributeOption<M>;
59
104
  /**
60
- * @summary Condition Builder Class
61
- * @description provides a simple API to build {@link Condition}s
62
- *
105
+ * @description Provides a fluent API to build query conditions
106
+ * @summary A builder class that simplifies the creation of database query conditions
107
+ * with a chainable interface for setting attributes and operators
108
+ * @template M - The model type this condition builder operates on
63
109
  * @class ConditionBuilder
64
- * @implements Builder
65
- * @implements AttributeOption
66
- *
67
- * @category Query
68
- * @subcategory Conditions
69
110
  */
70
111
  private static Builder;
112
+ /**
113
+ * @description Creates a new condition builder
114
+ * @summary Factory method that returns a new instance of the condition builder
115
+ * @template M - The model type this condition builder will operate on
116
+ * @return {ConditionBuilderOption<M>} A new condition builder instance
117
+ */
71
118
  static builder<M extends Model>(): ConditionBuilderOption<M>;
72
119
  }