@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
@@ -2,6 +2,62 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Paginator = void 0;
4
4
  const errors_1 = require("./errors.cjs");
5
+ /**
6
+ * @description Handles pagination for database queries
7
+ * @summary Provides functionality for navigating through paginated query results
8
+ *
9
+ * This abstract class manages the state and navigation of paginated database query results.
10
+ * It tracks the current page, total pages, and record count, and provides methods for
11
+ * moving between pages.
12
+ *
13
+ * @template M - The model type this paginator operates on
14
+ * @template R - The return type of the paginated query (defaults to M[])
15
+ * @template Q - The query type (defaults to any)
16
+ * @param {Adapter<any, Q, any, any>} adapter - The database adapter to use for executing queries
17
+ * @param {Q} query - The query to paginate
18
+ * @param {number} size - The number of records per page
19
+ * @param {Constructor<M>} clazz - The constructor for the model type
20
+ * @class Paginator
21
+ * @example
22
+ * // Create a paginator for a user query
23
+ * const userQuery = db.select().from(User);
24
+ * const paginator = await userQuery.paginate(10); // 10 users per page
25
+ *
26
+ * // Get the first page of results
27
+ * const firstPage = await paginator.page(1);
28
+ *
29
+ * // Navigate to the next page
30
+ * const secondPage = await paginator.next();
31
+ *
32
+ * // Get information about the pagination
33
+ * console.log(`Page ${paginator.current} of ${paginator.total}, ${paginator.count} total records`);
34
+ *
35
+ * @mermaid
36
+ * sequenceDiagram
37
+ * participant Client
38
+ * participant Paginator
39
+ * participant Adapter
40
+ * participant Database
41
+ *
42
+ * Client->>Paginator: new Paginator(adapter, query, size, clazz)
43
+ * Client->>Paginator: page(1)
44
+ * Paginator->>Paginator: validatePage(1)
45
+ * Paginator->>Paginator: prepare(query)
46
+ * Paginator->>Adapter: execute query with pagination
47
+ * Adapter->>Database: execute query
48
+ * Database-->>Adapter: return results
49
+ * Adapter-->>Paginator: return results
50
+ * Paginator-->>Client: return page results
51
+ *
52
+ * Client->>Paginator: next()
53
+ * Paginator->>Paginator: page(current + 1)
54
+ * Paginator->>Paginator: validatePage(current + 1)
55
+ * Paginator->>Adapter: execute query with pagination
56
+ * Adapter->>Database: execute query
57
+ * Database-->>Adapter: return results
58
+ * Adapter-->>Paginator: return results
59
+ * Paginator-->>Client: return page results
60
+ */
5
61
  class Paginator {
6
62
  get current() {
7
63
  return this._currentPage;
@@ -38,4 +94,4 @@ class Paginator {
38
94
  }
39
95
  }
40
96
  exports.Paginator = Paginator;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnaW5hdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L1BhZ2luYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBdUM7QUFJdkMsTUFBc0IsU0FBUztJQVE3QixJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFjLFNBQVM7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQ3FCLE9BQWtDLEVBQ2xDLEtBQVEsRUFDbEIsSUFBWSxFQUNGLEtBQXFCO1FBSHJCLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQ2xDLFVBQUssR0FBTCxLQUFLLENBQUc7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNGLFVBQUssR0FBTCxLQUFLLENBQWdCO0lBQ3ZDLENBQUM7SUFJSixLQUFLLENBQUMsSUFBSTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBWTtRQUNqQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNyQyxNQUFNLElBQUksb0JBQVcsQ0FDbkIsc0RBQXNELENBQ3ZELENBQUM7UUFDSixJQUFJLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXO1lBQ3BFLE1BQU0sSUFBSSxvQkFBVyxDQUNuQixRQUFRLElBQUksQ0FBQyxXQUFXLHFDQUFxQyxJQUFJLEVBQUUsQ0FDcEUsQ0FBQztRQUNKLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUdGO0FBdkRELDhCQXVEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2luZ0Vycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWdpbmF0b3I8TSBleHRlbmRzIE1vZGVsLCBSID0gTVtdLCBRID0gYW55PiB7XG4gIHByb3RlY3RlZCBfY3VycmVudFBhZ2UhOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfdG90YWxQYWdlcyE6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9yZWNvcmRDb3VudCE6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGxpbWl0ITogbnVtYmVyO1xuXG4gIHByaXZhdGUgX3N0YXRlbWVudD86IFE7XG5cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlO1xuICB9XG5cbiAgZ2V0IHRvdGFsKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbFBhZ2VzO1xuICB9XG5cbiAgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3JlY29yZENvdW50O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBzdGF0ZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLl9zdGF0ZW1lbnQpIHRoaXMuX3N0YXRlbWVudCA9IHRoaXMucHJlcGFyZSh0aGlzLnF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVtZW50O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBhZGFwdGVyOiBBZGFwdGVyPGFueSwgUSwgYW55LCBhbnk+LFxuICAgIHByb3RlY3RlZCByZWFkb25seSBxdWVyeTogUSxcbiAgICByZWFkb25seSBzaXplOiBudW1iZXIsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNsYXp6OiBDb25zdHJ1Y3RvcjxNPlxuICApIHt9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHByZXBhcmUocmF3U3RhdGVtZW50OiBRKTogUTtcblxuICBhc3luYyBuZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2UodGhpcy5jdXJyZW50ICsgMSk7XG4gIH1cblxuICBhc3luYyBwcmV2aW91cygpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlKHRoaXMuY3VycmVudCAtIDEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlUGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICBpZiAocGFnZSA8IDEgfHwgIU51bWJlci5pc0ludGVnZXIocGFnZSkpXG4gICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgIFwiUGFnZSBudW1iZXIgY2Fubm90IGJlIHVuZGVyIDEgYW5kIG11c3QgYmUgYW4gaW50ZWdlclwiXG4gICAgICApO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fdG90YWxQYWdlcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwYWdlID4gdGhpcy5fdG90YWxQYWdlcylcbiAgICAgIHRocm93IG5ldyBQYWdpbmdFcnJvcihcbiAgICAgICAgYE9ubHkgJHt0aGlzLl90b3RhbFBhZ2VzfSBhcmUgYXZhaWxhYmxlLiBDYW5ub3QgZ28gdG8gcGFnZSAke3BhZ2V9YFxuICAgICAgKTtcbiAgICByZXR1cm4gcGFnZTtcbiAgfVxuXG4gIGFic3RyYWN0IHBhZ2UocGFnZT86IG51bWJlcik6IFByb21pc2U8UltdPjtcbn1cbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnaW5hdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L1BhZ2luYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBdUM7QUFJdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1REc7QUFDSCxNQUFzQixTQUFTO0lBUTdCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQWMsU0FBUztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsWUFDcUIsT0FBa0MsRUFDbEMsS0FBUSxFQUNsQixJQUFZLEVBQ0YsS0FBcUI7UUFIckIsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBRztRQUNsQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ0YsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7SUFDdkMsQ0FBQztJQUlKLEtBQUssQ0FBQyxJQUFJO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVTLFlBQVksQ0FBQyxJQUFZO1FBQ2pDLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxvQkFBVyxDQUNuQixzREFBc0QsQ0FDdkQsQ0FBQztRQUNKLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVc7WUFDcEUsTUFBTSxJQUFJLG9CQUFXLENBQ25CLFFBQVEsSUFBSSxDQUFDLFdBQVcscUNBQXFDLElBQUksRUFBRSxDQUNwRSxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBR0Y7QUF2REQsOEJBdURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnaW5nRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBwYWdpbmF0aW9uIGZvciBkYXRhYmFzZSBxdWVyaWVzXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciBuYXZpZ2F0aW5nIHRocm91Z2ggcGFnaW5hdGVkIHF1ZXJ5IHJlc3VsdHNcbiAqIFxuICogVGhpcyBhYnN0cmFjdCBjbGFzcyBtYW5hZ2VzIHRoZSBzdGF0ZSBhbmQgbmF2aWdhdGlvbiBvZiBwYWdpbmF0ZWQgZGF0YWJhc2UgcXVlcnkgcmVzdWx0cy5cbiAqIEl0IHRyYWNrcyB0aGUgY3VycmVudCBwYWdlLCB0b3RhbCBwYWdlcywgYW5kIHJlY29yZCBjb3VudCwgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yXG4gKiBtb3ZpbmcgYmV0d2VlbiBwYWdlcy5cbiAqIFxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGlzIHBhZ2luYXRvciBvcGVyYXRlcyBvblxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIHBhZ2luYXRlZCBxdWVyeSAoZGVmYXVsdHMgdG8gTVtdKVxuICogQHRlbXBsYXRlIFEgLSBUaGUgcXVlcnkgdHlwZSAoZGVmYXVsdHMgdG8gYW55KVxuICogQHBhcmFtIHtBZGFwdGVyPGFueSwgUSwgYW55LCBhbnk+fSBhZGFwdGVyIC0gVGhlIGRhdGFiYXNlIGFkYXB0ZXIgdG8gdXNlIGZvciBleGVjdXRpbmcgcXVlcmllc1xuICogQHBhcmFtIHtRfSBxdWVyeSAtIFRoZSBxdWVyeSB0byBwYWdpbmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IHNpemUgLSBUaGUgbnVtYmVyIG9mIHJlY29yZHMgcGVyIHBhZ2VcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IGNsYXp6IC0gVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgbW9kZWwgdHlwZVxuICogQGNsYXNzIFBhZ2luYXRvclxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIHBhZ2luYXRvciBmb3IgYSB1c2VyIHF1ZXJ5XG4gKiBjb25zdCB1c2VyUXVlcnkgPSBkYi5zZWxlY3QoKS5mcm9tKFVzZXIpO1xuICogY29uc3QgcGFnaW5hdG9yID0gYXdhaXQgdXNlclF1ZXJ5LnBhZ2luYXRlKDEwKTsgLy8gMTAgdXNlcnMgcGVyIHBhZ2VcbiAqIFxuICogLy8gR2V0IHRoZSBmaXJzdCBwYWdlIG9mIHJlc3VsdHNcbiAqIGNvbnN0IGZpcnN0UGFnZSA9IGF3YWl0IHBhZ2luYXRvci5wYWdlKDEpO1xuICogXG4gKiAvLyBOYXZpZ2F0ZSB0byB0aGUgbmV4dCBwYWdlXG4gKiBjb25zdCBzZWNvbmRQYWdlID0gYXdhaXQgcGFnaW5hdG9yLm5leHQoKTtcbiAqIFxuICogLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWdpbmF0aW9uXG4gKiBjb25zb2xlLmxvZyhgUGFnZSAke3BhZ2luYXRvci5jdXJyZW50fSBvZiAke3BhZ2luYXRvci50b3RhbH0sICR7cGFnaW5hdG9yLmNvdW50fSB0b3RhbCByZWNvcmRzYCk7XG4gKiBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IFBhZ2luYXRvclxuICogICBwYXJ0aWNpcGFudCBBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IERhdGFiYXNlXG4gKiAgIFxuICogICBDbGllbnQtPj5QYWdpbmF0b3I6IG5ldyBQYWdpbmF0b3IoYWRhcHRlciwgcXVlcnksIHNpemUsIGNsYXp6KVxuICogICBDbGllbnQtPj5QYWdpbmF0b3I6IHBhZ2UoMSlcbiAqICAgUGFnaW5hdG9yLT4+UGFnaW5hdG9yOiB2YWxpZGF0ZVBhZ2UoMSlcbiAqICAgUGFnaW5hdG9yLT4+UGFnaW5hdG9yOiBwcmVwYXJlKHF1ZXJ5KVxuICogICBQYWdpbmF0b3ItPj5BZGFwdGVyOiBleGVjdXRlIHF1ZXJ5IHdpdGggcGFnaW5hdGlvblxuICogICBBZGFwdGVyLT4+RGF0YWJhc2U6IGV4ZWN1dGUgcXVlcnlcbiAqICAgRGF0YWJhc2UtLT4+QWRhcHRlcjogcmV0dXJuIHJlc3VsdHNcbiAqICAgQWRhcHRlci0tPj5QYWdpbmF0b3I6IHJldHVybiByZXN1bHRzXG4gKiAgIFBhZ2luYXRvci0tPj5DbGllbnQ6IHJldHVybiBwYWdlIHJlc3VsdHNcbiAqICAgXG4gKiAgIENsaWVudC0+PlBhZ2luYXRvcjogbmV4dCgpXG4gKiAgIFBhZ2luYXRvci0+PlBhZ2luYXRvcjogcGFnZShjdXJyZW50ICsgMSlcbiAqICAgUGFnaW5hdG9yLT4+UGFnaW5hdG9yOiB2YWxpZGF0ZVBhZ2UoY3VycmVudCArIDEpXG4gKiAgIFBhZ2luYXRvci0+PkFkYXB0ZXI6IGV4ZWN1dGUgcXVlcnkgd2l0aCBwYWdpbmF0aW9uXG4gKiAgIEFkYXB0ZXItPj5EYXRhYmFzZTogZXhlY3V0ZSBxdWVyeVxuICogICBEYXRhYmFzZS0tPj5BZGFwdGVyOiByZXR1cm4gcmVzdWx0c1xuICogICBBZGFwdGVyLS0+PlBhZ2luYXRvcjogcmV0dXJuIHJlc3VsdHNcbiAqICAgUGFnaW5hdG9yLS0+PkNsaWVudDogcmV0dXJuIHBhZ2UgcmVzdWx0c1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGFnaW5hdG9yPE0gZXh0ZW5kcyBNb2RlbCwgUiA9IE1bXSwgUSA9IGFueT4ge1xuICBwcm90ZWN0ZWQgX2N1cnJlbnRQYWdlITogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX3RvdGFsUGFnZXMhOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfcmVjb3JkQ291bnQhOiBudW1iZXI7XG4gIHByb3RlY3RlZCBsaW1pdCE6IG51bWJlcjtcblxuICBwcml2YXRlIF9zdGF0ZW1lbnQ/OiBRO1xuXG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGFnZTtcbiAgfVxuXG4gIGdldCB0b3RhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWxQYWdlcztcbiAgfVxuXG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWNvcmRDb3VudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc3RhdGVtZW50KCkge1xuICAgIGlmICghdGhpcy5fc3RhdGVtZW50KSB0aGlzLl9zdGF0ZW1lbnQgPSB0aGlzLnByZXBhcmUodGhpcy5xdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlbWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWRhcHRlcjogQWRhcHRlcjxhbnksIFEsIGFueSwgYW55PixcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnk6IFEsXG4gICAgcmVhZG9ubHkgc2l6ZTogbnVtYmVyLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjbGF6ejogQ29uc3RydWN0b3I8TT5cbiAgKSB7fVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwcmVwYXJlKHJhd1N0YXRlbWVudDogUSk6IFE7XG5cbiAgYXN5bmMgbmV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlKHRoaXMuY3VycmVudCArIDEpO1xuICB9XG5cbiAgYXN5bmMgcHJldmlvdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZSh0aGlzLmN1cnJlbnQgLSAxKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZVBhZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgaWYgKHBhZ2UgPCAxIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHBhZ2UpKVxuICAgICAgdGhyb3cgbmV3IFBhZ2luZ0Vycm9yKFxuICAgICAgICBcIlBhZ2UgbnVtYmVyIGNhbm5vdCBiZSB1bmRlciAxIGFuZCBtdXN0IGJlIGFuIGludGVnZXJcIlxuICAgICAgKTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3RvdGFsUGFnZXMgIT09IFwidW5kZWZpbmVkXCIgJiYgcGFnZSA+IHRoaXMuX3RvdGFsUGFnZXMpXG4gICAgICB0aHJvdyBuZXcgUGFnaW5nRXJyb3IoXG4gICAgICAgIGBPbmx5ICR7dGhpcy5fdG90YWxQYWdlc30gYXJlIGF2YWlsYWJsZS4gQ2Fubm90IGdvIHRvIHBhZ2UgJHtwYWdlfWBcbiAgICAgICk7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cblxuICBhYnN0cmFjdCBwYWdlKHBhZ2U/OiBudW1iZXIpOiBQcm9taXNlPFJbXT47XG59XG4iXX0=
@@ -1,5 +1,61 @@
1
1
  import { Adapter } from "../persistence";
2
2
  import { Constructor, Model } from "@decaf-ts/decorator-validation";
3
+ /**
4
+ * @description Handles pagination for database queries
5
+ * @summary Provides functionality for navigating through paginated query results
6
+ *
7
+ * This abstract class manages the state and navigation of paginated database query results.
8
+ * It tracks the current page, total pages, and record count, and provides methods for
9
+ * moving between pages.
10
+ *
11
+ * @template M - The model type this paginator operates on
12
+ * @template R - The return type of the paginated query (defaults to M[])
13
+ * @template Q - The query type (defaults to any)
14
+ * @param {Adapter<any, Q, any, any>} adapter - The database adapter to use for executing queries
15
+ * @param {Q} query - The query to paginate
16
+ * @param {number} size - The number of records per page
17
+ * @param {Constructor<M>} clazz - The constructor for the model type
18
+ * @class Paginator
19
+ * @example
20
+ * // Create a paginator for a user query
21
+ * const userQuery = db.select().from(User);
22
+ * const paginator = await userQuery.paginate(10); // 10 users per page
23
+ *
24
+ * // Get the first page of results
25
+ * const firstPage = await paginator.page(1);
26
+ *
27
+ * // Navigate to the next page
28
+ * const secondPage = await paginator.next();
29
+ *
30
+ * // Get information about the pagination
31
+ * console.log(`Page ${paginator.current} of ${paginator.total}, ${paginator.count} total records`);
32
+ *
33
+ * @mermaid
34
+ * sequenceDiagram
35
+ * participant Client
36
+ * participant Paginator
37
+ * participant Adapter
38
+ * participant Database
39
+ *
40
+ * Client->>Paginator: new Paginator(adapter, query, size, clazz)
41
+ * Client->>Paginator: page(1)
42
+ * Paginator->>Paginator: validatePage(1)
43
+ * Paginator->>Paginator: prepare(query)
44
+ * Paginator->>Adapter: execute query with pagination
45
+ * Adapter->>Database: execute query
46
+ * Database-->>Adapter: return results
47
+ * Adapter-->>Paginator: return results
48
+ * Paginator-->>Client: return page results
49
+ *
50
+ * Client->>Paginator: next()
51
+ * Paginator->>Paginator: page(current + 1)
52
+ * Paginator->>Paginator: validatePage(current + 1)
53
+ * Paginator->>Adapter: execute query with pagination
54
+ * Adapter->>Database: execute query
55
+ * Database-->>Adapter: return results
56
+ * Adapter-->>Paginator: return results
57
+ * Paginator-->>Client: return page results
58
+ */
3
59
  export declare abstract class Paginator<M extends Model, R = M[], Q = any> {
4
60
  protected readonly adapter: Adapter<any, Q, any, any>;
5
61
  protected readonly query: Q;
@@ -16,6 +16,57 @@ const Condition_1 = require("./Condition.cjs");
16
16
  const db_decorators_1 = require("@decaf-ts/db-decorators");
17
17
  const decorators_1 = require("./../utils/decorators.cjs");
18
18
  const errors_1 = require("./errors.cjs");
19
+ /**
20
+ * @description Base class for database query statements
21
+ * @summary Provides a foundation for building and executing database queries
22
+ *
23
+ * This abstract class implements the query builder pattern for constructing
24
+ * database queries. It supports various query operations like select, from,
25
+ * where, orderBy, groupBy, limit, and offset. It also provides methods for
26
+ * executing queries and handling pagination.
27
+ *
28
+ * @template Q - The query type specific to the database adapter
29
+ * @template M - The model type this statement operates on
30
+ * @template R - The return type of the query
31
+ * @param {Adapter<any, Q, any, any>} adapter - The database adapter to use for executing queries
32
+ * @class Statement
33
+ * @example
34
+ * // Create a statement to query users
35
+ * const statement = new SQLStatement(adapter);
36
+ * const users = await statement
37
+ * .select()
38
+ * .from(User)
39
+ * .where(Condition.attribute("status").eq("active"))
40
+ * .orderBy(["createdAt", "DESC"])
41
+ * .limit(10)
42
+ * .execute();
43
+ *
44
+ * // Use pagination
45
+ * const paginator = await statement
46
+ * .select()
47
+ * .from(User)
48
+ * .paginate(20); // 20 users per page
49
+ *
50
+ * @mermaid
51
+ * sequenceDiagram
52
+ * participant Client
53
+ * participant Statement
54
+ * participant Adapter
55
+ * participant Database
56
+ *
57
+ * Client->>Statement: select()
58
+ * Client->>Statement: from(Model)
59
+ * Client->>Statement: where(condition)
60
+ * Client->>Statement: orderBy([field, direction])
61
+ * Client->>Statement: limit(value)
62
+ * Client->>Statement: execute()
63
+ * Statement->>Statement: build()
64
+ * Statement->>Adapter: raw(query)
65
+ * Adapter->>Database: execute query
66
+ * Database-->>Adapter: return results
67
+ * Adapter-->>Statement: return processed results
68
+ * Statement-->>Client: return final results
69
+ */
19
70
  class Statement {
20
71
  constructor(adapter) {
21
72
  this.adapter = adapter;
@@ -165,4 +216,4 @@ __decorate([
165
216
  __metadata("design:paramtypes", []),
166
217
  __metadata("design:returntype", Promise)
167
218
  ], Statement.prototype, "execute", null);
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L1N0YXRlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEseUVBQXlFO0FBUXpFLCtDQUF3QztBQUN4QywyREFBd0U7QUFDeEUsMERBQTRDO0FBZTVDLHlDQUFzQztBQUV0QyxNQUFzQixTQUFTO0lBZTdCLFlBQWdDLE9BQWtDO1FBQWxDLFlBQU8sR0FBUCxPQUFPLENBQTJCO0lBQUcsQ0FBQztJQVd0RSxNQUFNLENBQ0osUUFBMEI7UUFFMUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDNUMsS0FBSyxFQUFFLFFBQVE7WUFDZixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFDSCxPQUFPLElBQW9FLENBQUM7SUFDOUUsQ0FBQztJQUdELFFBQVEsQ0FDTixRQUFXO1FBRVgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztRQUNqQyxPQUFPLElBQWlDLENBQUM7SUFDM0MsQ0FBQztJQUdELEdBQUcsQ0FBOEIsUUFBVztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUM1QixPQUFPLElBQTBCLENBQUM7SUFDcEMsQ0FBQztJQUdELEdBQUcsQ0FBOEIsUUFBVztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUM1QixPQUFPLElBQTBCLENBQUM7SUFDcEMsQ0FBQztJQUdELEtBQUssQ0FBOEIsUUFBWTtRQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUM5QixPQUFPLElBQThCLENBQUM7SUFDeEMsQ0FBQztJQUdNLElBQUksQ0FBQyxRQUF5QjtRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQ2xCLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsNEJBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxD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O0lBRE4sSUFBQSxrQkFBSyxHQUFFOzs7O3dDQU1QO0FBR007SUFETixJQUFBLGtCQUFLLEdBQUU7Ozs7d0NBSVA7QUFHTTtJQUROLElBQUEsa0JBQUssR0FBRTs7OztzQ0FJUDtBQUdNO0lBRE4sSUFBQSxrQkFBSyxHQUFFOzs7O3VDQUlQO0FBR0s7SUFETCxJQUFBLGtCQUFLLEdBQUU7Ozs7d0NBUVAiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRXhlY3V0b3IsIFJhd0V4ZWN1dG9yIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRnJvbVNlbGVjdG9yLFxuICBHcm91cEJ5U2VsZWN0b3IsXG4gIE9yZGVyQnlTZWxlY3RvcixcbiAgU2VsZWN0U2VsZWN0b3IsXG59IGZyb20gXCIuL3NlbGVjdG9yc1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4vQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBmaW5kUHJpbWFyeUtleSwgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgZmluYWwgfSBmcm9tIFwiLi4vdXRpbHMvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUge1xuICBDb3VudE9wdGlvbixcbiAgRGlzdGluY3RPcHRpb24sXG4gIExpbWl0T3B0aW9uLFxuICBNYXhPcHRpb24sXG4gIE1pbk9wdGlvbixcbiAgT2Zmc2V0T3B0aW9uLFxuICBPcmRlckFuZEdyb3VwT3B0aW9uLFxuICBTZWxlY3RPcHRpb24sXG4gIFdoZXJlT3B0aW9uLFxufSBmcm9tIFwiLi9vcHRpb25zXCI7XG5pbXBvcnQgeyBQYWdpbmF0YWJsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1BhZ2luYXRhYmxlXCI7XG5pbXBvcnQgeyBQYWdpbmF0b3IgfSBmcm9tIFwiLi9QYWdpbmF0b3JcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN0YXRlbWVudDxRLCBNIGV4dGVuZHMgTW9kZWwsIFI+XG4gIGltcGxlbWVudHMgRXhlY3V0b3I8Uj4sIFJhd0V4ZWN1dG9yPFE+LCBQYWdpbmF0YWJsZTxNLCBSLCBRPlxue1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0U2VsZWN0b3I/OiBTZWxlY3RTZWxlY3RvcjxNPltdO1xuICBwcm90ZWN0ZWQgZGlzdGluY3RTZWxlY3Rvcj86IFNlbGVjdFNlbGVjdG9yPE0+O1xuICBwcm90ZWN0ZWQgbWF4U2VsZWN0b3I/OiBTZWxlY3RTZWxlY3RvcjxNPjtcbiAgcHJvdGVjdGVkIG1pblNlbGVjdG9yPzogU2VsZWN0U2VsZWN0b3I8TT47XG4gIHByb3RlY3RlZCBjb3VudFNlbGVjdG9yPzogU2VsZWN0U2VsZWN0b3I8TT47XG4gIHByb3RlY3RlZCBmcm9tU2VsZWN0b3IhOiBDb25zdHJ1Y3RvcjxNPjtcbiAgcHJvdGVjdGVkIHdoZXJlQ29uZGl0aW9uPzogQ29uZGl0aW9uPE0+O1xuICBwcm90ZWN0ZWQgb3JkZXJCeVNlbGVjdG9yPzogT3JkZXJCeVNlbGVjdG9yPE0+O1xuICBwcm90ZWN0ZWQgZ3JvdXBCeVNlbGVjdG9yPzogR3JvdXBCeVNlbGVjdG9yPE0+O1xuICBwcm90ZWN0ZWQgbGltaXRTZWxlY3Rvcj86IG51bWJlcjtcbiAgcHJvdGVjdGVkIG9mZnNldFNlbGVjdG9yPzogbnVtYmVyO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYWRhcHRlcjogQWRhcHRlcjxhbnksIFEsIGFueSwgYW55Pikge31cblxuICBzZWxlY3Q8XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIFMgZXh0ZW5kcyByZWFkb25seSBTZWxlY3RTZWxlY3RvcjxNPltdLFxuICA+KCk6IFNlbGVjdE9wdGlvbjxNLCBNW10+O1xuICBzZWxlY3Q8UyBleHRlbmRzIHJlYWRvbmx5IFNlbGVjdFNlbGVjdG9yPE0+W10+KFxuICAgIHNlbGVjdG9yOiByZWFkb25seSBbLi4uU11cbiAgKTogU2VsZWN0T3B0aW9uPE0sIFBpY2s8TSwgU1tudW1iZXJdPltdPjtcblxuICBAZmluYWwoKVxuICBzZWxlY3Q8UyBleHRlbmRzIHJlYWRvbmx5IFNlbGVjdFNlbGVjdG9yPE0+W10+KFxuICAgIHNlbGVjdG9yPzogcmVhZG9ubHkgWy4uLlNdXG4gICk6IFNlbGVjdE9wdGlvbjxNLCBNW10+IHwgU2VsZWN0T3B0aW9uPE0sIFBpY2s8TSwgU1tudW1iZXJdPltdPiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwic2VsZWN0U2VsZWN0b3JcIiwge1xuICAgICAgdmFsdWU6IHNlbGVjdG9yLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzIGFzIFNlbGVjdE9wdGlvbjxNLCBNW10+IHwgU2VsZWN0T3B0aW9uPE0sIFBpY2s8TSwgU1tudW1iZXJdPltdPjtcbiAgfVxuXG4gIEBmaW5hbCgpXG4gIGRpc3RpbmN0PFMgZXh0ZW5kcyBTZWxlY3RTZWxlY3RvcjxNPj4oXG4gICAgc2VsZWN0b3I6IFNcbiAgKTogRGlzdGluY3RPcHRpb248TSwgTVtTXVtdPiB7XG4gICAgdGhpcy5kaXN0aW5jdFNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIHRoaXMgYXMgRGlzdGluY3RPcHRpb248TSwgTVtTXVtdPjtcbiAgfVxuXG4gIEBmaW5hbCgpXG4gIG1heDxTIGV4dGVuZHMgU2VsZWN0U2VsZWN0b3I8TT4+KHNlbGVjdG9yOiBTKTogTWF4T3B0aW9uPE0sIE1bU10+IHtcbiAgICB0aGlzLm1heFNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIHRoaXMgYXMgTWF4T3B0aW9uPE0sIE1bU10+O1xuICB9XG5cbiAgQGZpbmFsKClcbiAgbWluPFMgZXh0ZW5kcyBTZWxlY3RTZWxlY3RvcjxNPj4oc2VsZWN0b3I6IFMpOiBNaW5PcHRpb248TSwgTVtTXT4ge1xuICAgIHRoaXMubWluU2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gdGhpcyBhcyBNaW5PcHRpb248TSwgTVtTXT47XG4gIH1cblxuICBAZmluYWwoKVxuICBjb3VudDxTIGV4dGVuZHMgU2VsZWN0U2VsZWN0b3I8TT4+KHNlbGVjdG9yPzogUyk6IENvdW50T3B0aW9uPE0sIG51bWJlcj4ge1xuICAgIHRoaXMuY291bnRTZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgIHJldHVybiB0aGlzIGFzIENvdW50T3B0aW9uPE0sIG51bWJlcj47XG4gIH1cblxuICBAZmluYWwoKVxuICBwdWJsaWMgZnJvbShzZWxlY3RvcjogRnJvbVNlbGVjdG9yPE0+KTogV2hlcmVPcHRpb248TSwgUj4ge1xuICAgIHRoaXMuZnJvbVNlbGVjdG9yID0gKFxuICAgICAgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiID8gTW9kZWwuZ2V0KHNlbGVjdG9yKSA6IHNlbGVjdG9yXG4gICAgKSBhcyBDb25zdHJ1Y3RvcjxNPjtcbiAgICBpZiAoIXRoaXMuZnJvbVNlbGVjdG9yKVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoYENvdWxkIG5vdCBmaW5kIHNlbGVjdG9yIG1vZGVsOiAke3NlbGVjdG9yfWApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgQGZpbmFsKClcbiAgcHVibGljIHdoZXJlKGNvbmRpdGlvbjogQ29uZGl0aW9uPE0+KTogT3JkZXJBbmRHcm91cE9wdGlvbjxNLCBSPiB7XG4gICAgdGhpcy53aGVyZUNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIEBmaW5hbCgpXG4gIHB1YmxpYyBvcmRlckJ5KFxuICAgIHNlbGVjdG9yOiBPcmRlckJ5U2VsZWN0b3I8TT5cbiAgKTogTGltaXRPcHRpb248TSwgUj4gJiBPZmZzZXRPcHRpb248Uj4ge1xuICAgIHRoaXMub3JkZXJCeVNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBAZmluYWwoKVxuICBwdWJsaWMgZ3JvdXBCeShzZWxlY3RvcjogR3JvdXBCeVNlbGVjdG9yPE0+KTogTGltaXRPcHRpb248TSwgUj4ge1xuICAgIHRoaXMuZ3JvdXBCeVNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBAZmluYWwoKVxuICBwdWJsaWMgbGltaXQodmFsdWU6IG51bWJlcik6IE9mZnNldE9wdGlvbjxSPiB7XG4gICAgdGhpcy5saW1pdFNlbGVjdG9yID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBAZmluYWwoKVxuICBwdWJsaWMgb2Zmc2V0KHZhbHVlOiBudW1iZXIpOiBFeGVjdXRvcjxSPiB7XG4gICAgdGhpcy5vZmZzZXRTZWxlY3RvciA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgQGZpbmFsKClcbiAgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFI+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnk6IFEgPSB0aGlzLmJ1aWxkKCk7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMucmF3KHF1ZXJ5KSkgYXMgUjtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByYXc8Uj4ocmF3SW5wdXQ6IFEpOiBQcm9taXNlPFI+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5hZGFwdGVyLnJhdzxSPihyYXdJbnB1dCk7XG4gICAgaWYgKCF0aGlzLnNlbGVjdFNlbGVjdG9yKSByZXR1cm4gcmVzdWx0cztcbiAgICBjb25zdCBwa0F0dHIgPSBmaW5kUHJpbWFyeUtleShcbiAgICAgIG5ldyAodGhpcy5mcm9tU2VsZWN0b3IgYXMgQ29uc3RydWN0b3I8TT4pKClcbiAgICApLmlkO1xuXG4gICAgY29uc3QgcHJvY2Vzc29yID0gZnVuY3Rpb24gcmVjb3JkUHJvY2Vzc29yKFxuICAgICAgdGhpczogU3RhdGVtZW50PFEsIE0sIFI+LFxuICAgICAgcjogYW55XG4gICAgKSB7XG4gICAgICBjb25zdCBpZCA9IHJbcGtBdHRyXTtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0KFxuICAgICAgICByLFxuICAgICAgICB0aGlzLmZyb21TZWxlY3RvciBhcyBDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgICAgICBwa0F0dHIsXG4gICAgICAgIGlkXG4gICAgICApIGFzIGFueTtcbiAgICB9LmJpbmQodGhpcyBhcyBhbnkpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0cykpIHJldHVybiByZXN1bHRzLm1hcChwcm9jZXNzb3IpIGFzIFI7XG4gICAgcmV0dXJuIHByb2Nlc3NvcihyZXN1bHRzKSBhcyBSO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJ1aWxkKCk6IFE7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYXJzZUNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbjxNPik6IFE7XG4gIGFic3RyYWN0IHBhZ2luYXRlKHNpemU6IG51bWJlcik6IFByb21pc2U8UGFnaW5hdG9yPE0sIFIsIFE+Pjtcbn1cbiJdfQ==
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L1N0YXRlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEseUVBQXlFO0FBUXpFLCtDQUF3QztBQUN4QywyREFBd0U7QUFDeEUsMERBQTRDO0FBZTVDLHlDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFDSCxNQUFzQixTQUFTO0lBZTdCLFlBQWdDLE9BQWtDO1FBQWxDLFlBQU8sR0FBUCxPQUFPLENBQTJCO0lBQUcsQ0FBQztJQVd0RSxNQUFNLENBQ0osUUFBMEI7UUFFMUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDNUMsS0FBSyxFQUFFLFFBQVE7WUFDZixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFDSCxPQUFPLElBQW9FLENBQUM7SUFDOUUsQ0FBQztJQUdELFFBQVEsQ0FDTixRQUFXO1FBRVgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztRQUNqQyxPQUFPLElBQWlDLENBQUM7SUFDM0MsQ0FBQztJQUdELEdBQUcsQ0FBOEIsUUFBVztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUM1QixPQUFPLElBQTBCLENBQUM7SUFDcEMsQ0FBQztJQUdELEdBQUcsQ0FBOEIsUUFBVztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUM1QixPQUFPLElBQTBCLENBQUM7SUFDcEMsQ0FBQztJQUdELEtBQUssQ0FBOEIsUUFBWTtRQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUM5QixPQUFPLElBQThCLENBQUM7SUFDeEMsQ0FBQztJQUdNLElBQUksQ0FBQyxRQUF5QjtRQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQ2xCLE9B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OztxQ0FRUDtBQUdNO0lBRE4sSUFBQSxrQkFBSyxHQUFFOztxQ0FDZ0IscUJBQVM7O3NDQUdoQztBQUdNO0lBRE4sSUFBQSxrQkFBSyxHQUFFOzs7O3dDQU1QO0FBR007SUFETixJQUFBLGtCQUFLLEdBQUU7Ozs7d0NBSVA7QUFHTTtJQUROLElBQUEsa0JBQUssR0FBRTs7OztzQ0FJUDtBQUdNO0lBRE4sSUFBQSxrQkFBSyxHQUFFOzs7O3VDQUlQO0FBR0s7SUFETCxJQUFBLGtCQUFLLEdBQUU7Ozs7d0NBUVAiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgRXhlY3V0b3IsIFJhd0V4ZWN1dG9yIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRnJvbVNlbGVjdG9yLFxuICBHcm91cEJ5U2VsZWN0b3IsXG4gIE9yZGVyQnlTZWxlY3RvcixcbiAgU2VsZWN0U2VsZWN0b3IsXG59IGZyb20gXCIuL3NlbGVjdG9yc1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4vQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBmaW5kUHJpbWFyeUtleSwgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgZmluYWwgfSBmcm9tIFwiLi4vdXRpbHMvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHR5cGUge1xuICBDb3VudE9wdGlvbixcbiAgRGlzdGluY3RPcHRpb24sXG4gIExpbWl0T3B0aW9uLFxuICBNYXhPcHRpb24sXG4gIE1pbk9wdGlvbixcbiAgT2Zmc2V0T3B0aW9uLFxuICBPcmRlckFuZEdyb3VwT3B0aW9uLFxuICBTZWxlY3RPcHRpb24sXG4gIFdoZXJlT3B0aW9uLFxufSBmcm9tIFwiLi9vcHRpb25zXCI7XG5pbXBvcnQgeyBQYWdpbmF0YWJsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1BhZ2luYXRhYmxlXCI7XG5pbXBvcnQgeyBQYWdpbmF0b3IgfSBmcm9tIFwiLi9QYWdpbmF0b3JcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tIFwiLi9lcnJvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBjbGFzcyBmb3IgZGF0YWJhc2UgcXVlcnkgc3RhdGVtZW50c1xuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBmb3VuZGF0aW9uIGZvciBidWlsZGluZyBhbmQgZXhlY3V0aW5nIGRhdGFiYXNlIHF1ZXJpZXNcbiAqIFxuICogVGhpcyBhYnN0cmFjdCBjbGFzcyBpbXBsZW1lbnRzIHRoZSBxdWVyeSBidWlsZGVyIHBhdHRlcm4gZm9yIGNvbnN0cnVjdGluZ1xuICogZGF0YWJhc2UgcXVlcmllcy4gSXQgc3VwcG9ydHMgdmFyaW91cyBxdWVyeSBvcGVyYXRpb25zIGxpa2Ugc2VsZWN0LCBmcm9tLFxuICogd2hlcmUsIG9yZGVyQnksIGdyb3VwQnksIGxpbWl0LCBhbmQgb2Zmc2V0LiBJdCBhbHNvIHByb3ZpZGVzIG1ldGhvZHMgZm9yXG4gKiBleGVjdXRpbmcgcXVlcmllcyBhbmQgaGFuZGxpbmcgcGFnaW5hdGlvbi5cbiAqIFxuICogQHRlbXBsYXRlIFEgLSBUaGUgcXVlcnkgdHlwZSBzcGVjaWZpYyB0byB0aGUgZGF0YWJhc2UgYWRhcHRlclxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGlzIHN0YXRlbWVudCBvcGVyYXRlcyBvblxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIHF1ZXJ5XG4gKiBAcGFyYW0ge0FkYXB0ZXI8YW55LCBRLCBhbnksIGFueT59IGFkYXB0ZXIgLSBUaGUgZGF0YWJhc2UgYWRhcHRlciB0byB1c2UgZm9yIGV4ZWN1dGluZyBxdWVyaWVzXG4gKiBAY2xhc3MgU3RhdGVtZW50XG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgc3RhdGVtZW50IHRvIHF1ZXJ5IHVzZXJzXG4gKiBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgU1FMU3RhdGVtZW50KGFkYXB0ZXIpO1xuICogY29uc3QgdXNlcnMgPSBhd2FpdCBzdGF0ZW1lbnRcbiAqICAgLnNlbGVjdCgpXG4gKiAgIC5mcm9tKFVzZXIpXG4gKiAgIC53aGVyZShDb25kaXRpb24uYXR0cmlidXRlKFwic3RhdHVzXCIpLmVxKFwiYWN0aXZlXCIpKVxuICogICAub3JkZXJCeShbXCJjcmVhdGVkQXRcIiwgXCJERVNDXCJdKVxuICogICAubGltaXQoMTApXG4gKiAgIC5leGVjdXRlKCk7XG4gKiBcbiAqIC8vIFVzZSBwYWdpbmF0aW9uXG4gKiBjb25zdCBwYWdpbmF0b3IgPSBhd2FpdCBzdGF0ZW1lbnRcbiAqICAgLnNlbGVjdCgpXG4gKiAgIC5mcm9tKFVzZXIpXG4gKiAgIC5wYWdpbmF0ZSgyMCk7IC8vIDIwIHVzZXJzIHBlciBwYWdlXG4gKiBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IFN0YXRlbWVudFxuICogICBwYXJ0aWNpcGFudCBBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IERhdGFiYXNlXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGF0ZW1lbnQ6IHNlbGVjdCgpXG4gKiAgIENsaWVudC0+PlN0YXRlbWVudDogZnJvbShNb2RlbClcbiAqICAgQ2xpZW50LT4+U3RhdGVtZW50OiB3aGVyZShjb25kaXRpb24pXG4gKiAgIENsaWVudC0+PlN0YXRlbWVudDogb3JkZXJCeShbZmllbGQsIGRpcmVjdGlvbl0pXG4gKiAgIENsaWVudC0+PlN0YXRlbWVudDogbGltaXQodmFsdWUpXG4gKiAgIENsaWVudC0+PlN0YXRlbWVudDogZXhlY3V0ZSgpXG4gKiAgIFN0YXRlbWVudC0+PlN0YXRlbWVudDogYnVpbGQoKVxuICogICBTdGF0ZW1lbnQtPj5BZGFwdGVyOiByYXcocXVlcnkpXG4gKiAgIEFkYXB0ZXItPj5EYXRhYmFzZTogZXhlY3V0ZSBxdWVyeVxuICogICBEYXRhYmFzZS0tPj5BZGFwdGVyOiByZXR1cm4gcmVzdWx0c1xuICogICBBZGFwdGVyLS0+PlN0YXRlbWVudDogcmV0dXJuIHByb2Nlc3NlZCByZXN1bHRzXG4gKiAgIFN0YXRlbWVudC0tPj5DbGllbnQ6IHJldHVybiBmaW5hbCByZXN1bHRzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTdGF0ZW1lbnQ8USwgTSBleHRlbmRzIE1vZGVsLCBSPlxuICBpbXBsZW1lbnRzIEV4ZWN1dG9yPFI+LCBSYXdFeGVjdXRvcjxRPiwgUGFnaW5hdGFibGU8TSwgUiwgUT5cbntcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdFNlbGVjdG9yPzogU2VsZWN0U2VsZWN0b3I8TT5bXTtcbiAgcHJvdGVjdGVkIGRpc3RpbmN0U2VsZWN0b3I/OiBTZWxlY3RTZWxlY3RvcjxNPjtcbiAgcHJvdGVjdGVkIG1heFNlbGVjdG9yPzogU2VsZWN0U2VsZWN0b3I8TT47XG4gIHByb3RlY3RlZCBtaW5TZWxlY3Rvcj86IFNlbGVjdFNlbGVjdG9yPE0+O1xuICBwcm90ZWN0ZWQgY291bnRTZWxlY3Rvcj86IFNlbGVjdFNlbGVjdG9yPE0+O1xuICBwcm90ZWN0ZWQgZnJvbVNlbGVjdG9yITogQ29uc3RydWN0b3I8TT47XG4gIHByb3RlY3RlZCB3aGVyZUNvbmRpdGlvbj86IENvbmRpdGlvbjxNPjtcbiAgcHJvdGVjdGVkIG9yZGVyQnlTZWxlY3Rvcj86IE9yZGVyQnlTZWxlY3RvcjxNPjtcbiAgcHJvdGVjdGVkIGdyb3VwQnlTZWxlY3Rvcj86IEdyb3VwQnlTZWxlY3RvcjxNPjtcbiAgcHJvdGVjdGVkIGxpbWl0U2VsZWN0b3I/OiBudW1iZXI7XG4gIHByb3RlY3RlZCBvZmZzZXRTZWxlY3Rvcj86IG51bWJlcjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIGFkYXB0ZXI6IEFkYXB0ZXI8YW55LCBRLCBhbnksIGFueT4pIHt9XG5cbiAgc2VsZWN0PFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBTIGV4dGVuZHMgcmVhZG9ubHkgU2VsZWN0U2VsZWN0b3I8TT5bXSxcbiAgPigpOiBTZWxlY3RPcHRpb248TSwgTVtdPjtcbiAgc2VsZWN0PFMgZXh0ZW5kcyByZWFkb25seSBTZWxlY3RTZWxlY3RvcjxNPltdPihcbiAgICBzZWxlY3RvcjogcmVhZG9ubHkgWy4uLlNdXG4gICk6IFNlbGVjdE9wdGlvbjxNLCBQaWNrPE0sIFNbbnVtYmVyXT5bXT47XG5cbiAgQGZpbmFsKClcbiAgc2VsZWN0PFMgZXh0ZW5kcyByZWFkb25seSBTZWxlY3RTZWxlY3RvcjxNPltdPihcbiAgICBzZWxlY3Rvcj86IHJlYWRvbmx5IFsuLi5TXVxuICApOiBTZWxlY3RPcHRpb248TSwgTVtdPiB8IFNlbGVjdE9wdGlvbjxNLCBQaWNrPE0sIFNbbnVtYmVyXT5bXT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNlbGVjdFNlbGVjdG9yXCIsIHtcbiAgICAgIHZhbHVlOiBzZWxlY3RvcixcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcyBhcyBTZWxlY3RPcHRpb248TSwgTVtdPiB8IFNlbGVjdE9wdGlvbjxNLCBQaWNrPE0sIFNbbnVtYmVyXT5bXT47XG4gIH1cblxuICBAZmluYWwoKVxuICBkaXN0aW5jdDxTIGV4dGVuZHMgU2VsZWN0U2VsZWN0b3I8TT4+KFxuICAgIHNlbGVjdG9yOiBTXG4gICk6IERpc3RpbmN0T3B0aW9uPE0sIE1bU11bXT4ge1xuICAgIHRoaXMuZGlzdGluY3RTZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgIHJldHVybiB0aGlzIGFzIERpc3RpbmN0T3B0aW9uPE0sIE1bU11bXT47XG4gIH1cblxuICBAZmluYWwoKVxuICBtYXg8UyBleHRlbmRzIFNlbGVjdFNlbGVjdG9yPE0+PihzZWxlY3RvcjogUyk6IE1heE9wdGlvbjxNLCBNW1NdPiB7XG4gICAgdGhpcy5tYXhTZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgIHJldHVybiB0aGlzIGFzIE1heE9wdGlvbjxNLCBNW1NdPjtcbiAgfVxuXG4gIEBmaW5hbCgpXG4gIG1pbjxTIGV4dGVuZHMgU2VsZWN0U2VsZWN0b3I8TT4+KHNlbGVjdG9yOiBTKTogTWluT3B0aW9uPE0sIE1bU10+IHtcbiAgICB0aGlzLm1pblNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgcmV0dXJuIHRoaXMgYXMgTWluT3B0aW9uPE0sIE1bU10+O1xuICB9XG5cbiAgQGZpbmFsKClcbiAgY291bnQ8UyBleHRlbmRzIFNlbGVjdFNlbGVjdG9yPE0+PihzZWxlY3Rvcj86IFMpOiBDb3VudE9wdGlvbjxNLCBudW1iZXI+IHtcbiAgICB0aGlzLmNvdW50U2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICByZXR1cm4gdGhpcyBhcyBDb3VudE9wdGlvbjxNLCBudW1iZXI+O1xuICB9XG5cbiAgQGZpbmFsKClcbiAgcHVibGljIGZyb20oc2VsZWN0b3I6IEZyb21TZWxlY3RvcjxNPik6IFdoZXJlT3B0aW9uPE0sIFI+IHtcbiAgICB0aGlzLmZyb21TZWxlY3RvciA9IChcbiAgICAgIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiA/IE1vZGVsLmdldChzZWxlY3RvcikgOiBzZWxlY3RvclxuICAgICkgYXMgQ29uc3RydWN0b3I8TT47XG4gICAgaWYgKCF0aGlzLmZyb21TZWxlY3RvcilcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKGBDb3VsZCBub3QgZmluZCBzZWxlY3RvciBtb2RlbDogJHtzZWxlY3Rvcn1gKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIEBmaW5hbCgpXG4gIHB1YmxpYyB3aGVyZShjb25kaXRpb246IENvbmRpdGlvbjxNPik6IE9yZGVyQW5kR3JvdXBPcHRpb248TSwgUj4ge1xuICAgIHRoaXMud2hlcmVDb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBAZmluYWwoKVxuICBwdWJsaWMgb3JkZXJCeShcbiAgICBzZWxlY3RvcjogT3JkZXJCeVNlbGVjdG9yPE0+XG4gICk6IExpbWl0T3B0aW9uPE0sIFI+ICYgT2Zmc2V0T3B0aW9uPFI+IHtcbiAgICB0aGlzLm9yZGVyQnlTZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgQGZpbmFsKClcbiAgcHVibGljIGdyb3VwQnkoc2VsZWN0b3I6IEdyb3VwQnlTZWxlY3RvcjxNPik6IExpbWl0T3B0aW9uPE0sIFI+IHtcbiAgICB0aGlzLmdyb3VwQnlTZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgQGZpbmFsKClcbiAgcHVibGljIGxpbWl0KHZhbHVlOiBudW1iZXIpOiBPZmZzZXRPcHRpb248Uj4ge1xuICAgIHRoaXMubGltaXRTZWxlY3RvciA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgQGZpbmFsKClcbiAgcHVibGljIG9mZnNldCh2YWx1ZTogbnVtYmVyKTogRXhlY3V0b3I8Uj4ge1xuICAgIHRoaXMub2Zmc2V0U2VsZWN0b3IgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIEBmaW5hbCgpXG4gIGFzeW5jIGV4ZWN1dGUoKTogUHJvbWlzZTxSPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5OiBRID0gdGhpcy5idWlsZCgpO1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLnJhdyhxdWVyeSkpIGFzIFI7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmF3PFI+KHJhd0lucHV0OiBRKTogUHJvbWlzZTxSPiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuYWRhcHRlci5yYXc8Uj4ocmF3SW5wdXQpO1xuICAgIGlmICghdGhpcy5zZWxlY3RTZWxlY3RvcikgcmV0dXJuIHJlc3VsdHM7XG4gICAgY29uc3QgcGtBdHRyID0gZmluZFByaW1hcnlLZXkoXG4gICAgICBuZXcgKHRoaXMuZnJvbVNlbGVjdG9yIGFzIENvbnN0cnVjdG9yPE0+KSgpXG4gICAgKS5pZDtcblxuICAgIGNvbnN0IHByb2Nlc3NvciA9IGZ1bmN0aW9uIHJlY29yZFByb2Nlc3NvcihcbiAgICAgIHRoaXM6IFN0YXRlbWVudDxRLCBNLCBSPixcbiAgICAgIHI6IGFueVxuICAgICkge1xuICAgICAgY29uc3QgaWQgPSByW3BrQXR0cl07XG4gICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnJldmVydChcbiAgICAgICAgcixcbiAgICAgICAgdGhpcy5mcm9tU2VsZWN0b3IgYXMgQ29uc3RydWN0b3I8YW55PixcbiAgICAgICAgcGtBdHRyLFxuICAgICAgICBpZFxuICAgICAgKSBhcyBhbnk7XG4gICAgfS5iaW5kKHRoaXMgYXMgYW55KTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMpKSByZXR1cm4gcmVzdWx0cy5tYXAocHJvY2Vzc29yKSBhcyBSO1xuICAgIHJldHVybiBwcm9jZXNzb3IocmVzdWx0cykgYXMgUjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBidWlsZCgpOiBRO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcGFyc2VDb25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb248TT4pOiBRO1xuICBhYnN0cmFjdCBwYWdpbmF0ZShzaXplOiBudW1iZXIpOiBQcm9taXNlPFBhZ2luYXRvcjxNLCBSLCBRPj47XG59XG4iXX0=
@@ -6,6 +6,57 @@ import type { CountOption, DistinctOption, LimitOption, MaxOption, MinOption, Of
6
6
  import { Paginatable } from "../interfaces/Paginatable";
7
7
  import { Paginator } from "./Paginator";
8
8
  import { Adapter } from "../persistence";
9
+ /**
10
+ * @description Base class for database query statements
11
+ * @summary Provides a foundation for building and executing database queries
12
+ *
13
+ * This abstract class implements the query builder pattern for constructing
14
+ * database queries. It supports various query operations like select, from,
15
+ * where, orderBy, groupBy, limit, and offset. It also provides methods for
16
+ * executing queries and handling pagination.
17
+ *
18
+ * @template Q - The query type specific to the database adapter
19
+ * @template M - The model type this statement operates on
20
+ * @template R - The return type of the query
21
+ * @param {Adapter<any, Q, any, any>} adapter - The database adapter to use for executing queries
22
+ * @class Statement
23
+ * @example
24
+ * // Create a statement to query users
25
+ * const statement = new SQLStatement(adapter);
26
+ * const users = await statement
27
+ * .select()
28
+ * .from(User)
29
+ * .where(Condition.attribute("status").eq("active"))
30
+ * .orderBy(["createdAt", "DESC"])
31
+ * .limit(10)
32
+ * .execute();
33
+ *
34
+ * // Use pagination
35
+ * const paginator = await statement
36
+ * .select()
37
+ * .from(User)
38
+ * .paginate(20); // 20 users per page
39
+ *
40
+ * @mermaid
41
+ * sequenceDiagram
42
+ * participant Client
43
+ * participant Statement
44
+ * participant Adapter
45
+ * participant Database
46
+ *
47
+ * Client->>Statement: select()
48
+ * Client->>Statement: from(Model)
49
+ * Client->>Statement: where(condition)
50
+ * Client->>Statement: orderBy([field, direction])
51
+ * Client->>Statement: limit(value)
52
+ * Client->>Statement: execute()
53
+ * Statement->>Statement: build()
54
+ * Statement->>Adapter: raw(query)
55
+ * Adapter->>Database: execute query
56
+ * Database-->>Adapter: return results
57
+ * Adapter-->>Statement: return processed results
58
+ * Statement-->>Client: return final results
59
+ */
9
60
  export declare abstract class Statement<Q, M extends Model, R> implements Executor<R>, RawExecutor<Q>, Paginatable<M, R, Q> {
10
61
  protected adapter: Adapter<any, Q, any, any>;
11
62
  protected readonly selectSelector?: SelectSelector<M>[];
@@ -1,23 +1,48 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GroupOperator = exports.Operator = void 0;
4
+ /**
5
+ * @description Comparison operators for query conditions
6
+ * @summary Enum defining the available operators for comparing values in database queries
7
+ * @enum {string}
8
+ * @readonly
9
+ * @memberOf module:core
10
+ */
4
11
  var Operator;
5
12
  (function (Operator) {
13
+ /** Equal comparison (=) */
6
14
  Operator["EQUAL"] = "EQUAL";
15
+ /** Not equal comparison (!=) */
7
16
  Operator["DIFFERENT"] = "DIFFERENT";
17
+ /** Greater than comparison (>) */
8
18
  Operator["BIGGER"] = "BIGGER";
19
+ /** Greater than or equal comparison (>=) */
9
20
  Operator["BIGGER_EQ"] = "BIGGER_EQ";
21
+ /** Less than comparison (<) */
10
22
  Operator["SMALLER"] = "SMALLER";
23
+ /** Less than or equal comparison (<=) */
11
24
  Operator["SMALLER_EQ"] = "SMALLER_EQ";
12
25
  // BETWEEN = "BETWEEN",
26
+ /** Negation operator (NOT) */
13
27
  Operator["NOT"] = "NOT";
28
+ /** Inclusion operator (IN) */
14
29
  Operator["IN"] = "IN";
15
30
  // IS = "IS",
31
+ /** Regular expression matching */
16
32
  Operator["REGEXP"] = "REGEXP";
17
33
  })(Operator || (exports.Operator = Operator = {}));
34
+ /**
35
+ * @description Logical operators for combining query conditions
36
+ * @summary Enum defining the available operators for grouping multiple conditions in database queries
37
+ * @enum {string}
38
+ * @readonly
39
+ * @memberOf module:core
40
+ */
18
41
  var GroupOperator;
19
42
  (function (GroupOperator) {
43
+ /** Logical AND operator - all conditions must be true */
20
44
  GroupOperator["AND"] = "AND";
45
+ /** Logical OR operator - at least one condition must be true */
21
46
  GroupOperator["OR"] = "OR";
22
47
  })(GroupOperator || (exports.GroupOperator = GroupOperator = {}));
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLFFBWVg7QUFaRCxXQUFZLFFBQVE7SUFDbEIsMkJBQWUsQ0FBQTtJQUNmLG1DQUF1QixDQUFBO0lBQ3ZCLDZCQUFpQixDQUFBO0lBQ2pCLG1DQUF1QixDQUFBO0lBQ3ZCLCtCQUFtQixDQUFBO0lBQ25CLHFDQUF5QixDQUFBO0lBQ3pCLHVCQUF1QjtJQUN2Qix1QkFBVyxDQUFBO0lBQ1gscUJBQVMsQ0FBQTtJQUNULGFBQWE7SUFDYiw2QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBWlcsUUFBUSx3QkFBUixRQUFRLFFBWW5CO0FBRUQsSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3ZCLDRCQUFXLENBQUE7SUFDWCwwQkFBUyxDQUFBO0FBQ1gsQ0FBQyxFQUhXLGFBQWEsNkJBQWIsYUFBYSxRQUd4QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIE9wZXJhdG9yIHtcbiAgRVFVQUwgPSBcIkVRVUFMXCIsXG4gIERJRkZFUkVOVCA9IFwiRElGRkVSRU5UXCIsXG4gIEJJR0dFUiA9IFwiQklHR0VSXCIsXG4gIEJJR0dFUl9FUSA9IFwiQklHR0VSX0VRXCIsXG4gIFNNQUxMRVIgPSBcIlNNQUxMRVJcIixcbiAgU01BTExFUl9FUSA9IFwiU01BTExFUl9FUVwiLFxuICAvLyBCRVRXRUVOID0gXCJCRVRXRUVOXCIsXG4gIE5PVCA9IFwiTk9UXCIsXG4gIElOID0gXCJJTlwiLFxuICAvLyBJUyA9IFwiSVNcIixcbiAgUkVHRVhQID0gXCJSRUdFWFBcIixcbn1cblxuZXhwb3J0IGVudW0gR3JvdXBPcGVyYXRvciB7XG4gIEFORCA9IFwiQU5EXCIsXG4gIE9SID0gXCJPUlwiLFxufVxuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxJQUFZLFFBcUJYO0FBckJELFdBQVksUUFBUTtJQUNsQiwyQkFBMkI7SUFDM0IsMkJBQWUsQ0FBQTtJQUNmLGdDQUFnQztJQUNoQyxtQ0FBdUIsQ0FBQTtJQUN2QixrQ0FBa0M7SUFDbEMsNkJBQWlCLENBQUE7SUFDakIsNENBQTRDO0lBQzVDLG1DQUF1QixDQUFBO0lBQ3ZCLCtCQUErQjtJQUMvQiwrQkFBbUIsQ0FBQTtJQUNuQix5Q0FBeUM7SUFDekMscUNBQXlCLENBQUE7SUFDekIsdUJBQXVCO0lBQ3ZCLDhCQUE4QjtJQUM5Qix1QkFBVyxDQUFBO0lBQ1gsOEJBQThCO0lBQzlCLHFCQUFTLENBQUE7SUFDVCxhQUFhO0lBQ2Isa0NBQWtDO0lBQ2xDLDZCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFyQlcsUUFBUSx3QkFBUixRQUFRLFFBcUJuQjtBQUVEOzs7Ozs7R0FNRztBQUNILElBQVksYUFLWDtBQUxELFdBQVksYUFBYTtJQUN2Qix5REFBeUQ7SUFDekQsNEJBQVcsQ0FBQTtJQUNYLGdFQUFnRTtJQUNoRSwwQkFBUyxDQUFBO0FBQ1gsQ0FBQyxFQUxXLGFBQWEsNkJBQWIsYUFBYSxRQUt4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBhcmlzb24gb3BlcmF0b3JzIGZvciBxdWVyeSBjb25kaXRpb25zXG4gKiBAc3VtbWFyeSBFbnVtIGRlZmluaW5nIHRoZSBhdmFpbGFibGUgb3BlcmF0b3JzIGZvciBjb21wYXJpbmcgdmFsdWVzIGluIGRhdGFiYXNlIHF1ZXJpZXNcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgZW51bSBPcGVyYXRvciB7XG4gIC8qKiBFcXVhbCBjb21wYXJpc29uICg9KSAqL1xuICBFUVVBTCA9IFwiRVFVQUxcIixcbiAgLyoqIE5vdCBlcXVhbCBjb21wYXJpc29uICghPSkgKi9cbiAgRElGRkVSRU5UID0gXCJESUZGRVJFTlRcIixcbiAgLyoqIEdyZWF0ZXIgdGhhbiBjb21wYXJpc29uICg+KSAqL1xuICBCSUdHRVIgPSBcIkJJR0dFUlwiLFxuICAvKiogR3JlYXRlciB0aGFuIG9yIGVxdWFsIGNvbXBhcmlzb24gKD49KSAqL1xuICBCSUdHRVJfRVEgPSBcIkJJR0dFUl9FUVwiLFxuICAvKiogTGVzcyB0aGFuIGNvbXBhcmlzb24gKDwpICovXG4gIFNNQUxMRVIgPSBcIlNNQUxMRVJcIixcbiAgLyoqIExlc3MgdGhhbiBvciBlcXVhbCBjb21wYXJpc29uICg8PSkgKi9cbiAgU01BTExFUl9FUSA9IFwiU01BTExFUl9FUVwiLFxuICAvLyBCRVRXRUVOID0gXCJCRVRXRUVOXCIsXG4gIC8qKiBOZWdhdGlvbiBvcGVyYXRvciAoTk9UKSAqL1xuICBOT1QgPSBcIk5PVFwiLFxuICAvKiogSW5jbHVzaW9uIG9wZXJhdG9yIChJTikgKi9cbiAgSU4gPSBcIklOXCIsXG4gIC8vIElTID0gXCJJU1wiLFxuICAvKiogUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nICovXG4gIFJFR0VYUCA9IFwiUkVHRVhQXCIsXG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIExvZ2ljYWwgb3BlcmF0b3JzIGZvciBjb21iaW5pbmcgcXVlcnkgY29uZGl0aW9uc1xuICogQHN1bW1hcnkgRW51bSBkZWZpbmluZyB0aGUgYXZhaWxhYmxlIG9wZXJhdG9ycyBmb3IgZ3JvdXBpbmcgbXVsdGlwbGUgY29uZGl0aW9ucyBpbiBkYXRhYmFzZSBxdWVyaWVzXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGVudW0gR3JvdXBPcGVyYXRvciB7XG4gIC8qKiBMb2dpY2FsIEFORCBvcGVyYXRvciAtIGFsbCBjb25kaXRpb25zIG11c3QgYmUgdHJ1ZSAqL1xuICBBTkQgPSBcIkFORFwiLFxuICAvKiogTG9naWNhbCBPUiBvcGVyYXRvciAtIGF0IGxlYXN0IG9uZSBjb25kaXRpb24gbXVzdCBiZSB0cnVlICovXG4gIE9SID0gXCJPUlwiLFxufVxuIl19
@@ -1,15 +1,40 @@
1
+ /**
2
+ * @description Comparison operators for query conditions
3
+ * @summary Enum defining the available operators for comparing values in database queries
4
+ * @enum {string}
5
+ * @readonly
6
+ * @memberOf module:core
7
+ */
1
8
  export declare enum Operator {
9
+ /** Equal comparison (=) */
2
10
  EQUAL = "EQUAL",
11
+ /** Not equal comparison (!=) */
3
12
  DIFFERENT = "DIFFERENT",
13
+ /** Greater than comparison (>) */
4
14
  BIGGER = "BIGGER",
15
+ /** Greater than or equal comparison (>=) */
5
16
  BIGGER_EQ = "BIGGER_EQ",
17
+ /** Less than comparison (<) */
6
18
  SMALLER = "SMALLER",
19
+ /** Less than or equal comparison (<=) */
7
20
  SMALLER_EQ = "SMALLER_EQ",
21
+ /** Negation operator (NOT) */
8
22
  NOT = "NOT",
23
+ /** Inclusion operator (IN) */
9
24
  IN = "IN",
25
+ /** Regular expression matching */
10
26
  REGEXP = "REGEXP"
11
27
  }
28
+ /**
29
+ * @description Logical operators for combining query conditions
30
+ * @summary Enum defining the available operators for grouping multiple conditions in database queries
31
+ * @enum {string}
32
+ * @readonly
33
+ * @memberOf module:core
34
+ */
12
35
  export declare enum GroupOperator {
36
+ /** Logical AND operator - all conditions must be true */
13
37
  AND = "AND",
38
+ /** Logical OR operator - at least one condition must be true */
14
39
  OR = "OR"
15
40
  }
@@ -2,16 +2,30 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PagingError = exports.QueryError = void 0;
4
4
  const db_decorators_1 = require("@decaf-ts/db-decorators");
5
+ /**
6
+ * @description Error thrown during query operations
7
+ * @summary Represents errors that occur during query building or execution
8
+ * @param {string | Error} msg - The error message or Error object
9
+ * @class QueryError
10
+ * @category Errors
11
+ */
5
12
  class QueryError extends db_decorators_1.BaseError {
6
13
  constructor(msg) {
7
14
  super(QueryError.name, msg, 500);
8
15
  }
9
16
  }
10
17
  exports.QueryError = QueryError;
18
+ /**
19
+ * @description Error thrown during pagination operations
20
+ * @summary Represents errors that occur during pagination setup or execution
21
+ * @param {string | Error} msg - The error message or Error object
22
+ * @class PagingError
23
+ * @category Errors
24
+ */
11
25
  class PagingError extends db_decorators_1.BaseError {
12
26
  constructor(msg) {
13
27
  super(PagingError.name, msg, 500);
14
28
  }
15
29
  }
16
30
  exports.PagingError = PagingError;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBb0Q7QUFFcEQsTUFBYSxVQUFXLFNBQVEseUJBQVM7SUFDdkMsWUFBWSxHQUFtQjtRQUM3QixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBSkQsZ0NBSUM7QUFFRCxNQUFhLFdBQVksU0FBUSx5QkFBUztJQUN4QyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFKRCxrQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgY2xhc3MgUXVlcnlFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihRdWVyeUVycm9yLm5hbWUsIG1zZywgNTAwKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFnaW5nRXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihtc2c6IHN0cmluZyB8IEVycm9yKSB7XG4gICAgc3VwZXIoUGFnaW5nRXJyb3IubmFtZSwgbXNnLCA1MDApO1xuICB9XG59XG4iXX0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBb0Q7QUFFcEQ7Ozs7OztHQU1HO0FBQ0gsTUFBYSxVQUFXLFNBQVEseUJBQVM7SUFDdkMsWUFBWSxHQUFtQjtRQUM3QixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBSkQsZ0NBSUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSx5QkFBUztJQUN4QyxZQUFZLEdBQW1CO1FBQzdCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFKRCxrQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFcnJvciB0aHJvd24gZHVyaW5nIHF1ZXJ5IG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIHF1ZXJ5IGJ1aWxkaW5nIG9yIGV4ZWN1dGlvblxuICogQHBhcmFtIHtzdHJpbmcgfCBFcnJvcn0gbXNnIC0gVGhlIGVycm9yIG1lc3NhZ2Ugb3IgRXJyb3Igb2JqZWN0XG4gKiBAY2xhc3MgUXVlcnlFcnJvclxuICogQGNhdGVnb3J5IEVycm9yc1xuICovXG5leHBvcnQgY2xhc3MgUXVlcnlFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihRdWVyeUVycm9yLm5hbWUsIG1zZywgNTAwKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFcnJvciB0aHJvd24gZHVyaW5nIHBhZ2luYXRpb24gb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgUmVwcmVzZW50cyBlcnJvcnMgdGhhdCBvY2N1ciBkdXJpbmcgcGFnaW5hdGlvbiBzZXR1cCBvciBleGVjdXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nIHwgRXJyb3J9IG1zZyAtIFRoZSBlcnJvciBtZXNzYWdlIG9yIEVycm9yIG9iamVjdFxuICogQGNsYXNzIFBhZ2luZ0Vycm9yXG4gKiBAY2F0ZWdvcnkgRXJyb3JzXG4gKi9cbmV4cG9ydCBjbGFzcyBQYWdpbmdFcnJvciBleHRlbmRzIEJhc2VFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBzdXBlcihQYWdpbmdFcnJvci5uYW1lLCBtc2csIDUwMCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,21 @@
1
1
  import { BaseError } from "@decaf-ts/db-decorators";
2
+ /**
3
+ * @description Error thrown during query operations
4
+ * @summary Represents errors that occur during query building or execution
5
+ * @param {string | Error} msg - The error message or Error object
6
+ * @class QueryError
7
+ * @category Errors
8
+ */
2
9
  export declare class QueryError extends BaseError {
3
10
  constructor(msg: string | Error);
4
11
  }
12
+ /**
13
+ * @description Error thrown during pagination operations
14
+ * @summary Represents errors that occur during pagination setup or execution
15
+ * @param {string | Error} msg - The error message or Error object
16
+ * @class PagingError
17
+ * @category Errors
18
+ */
5
19
  export declare class PagingError extends BaseError {
6
20
  constructor(msg: string | Error);
7
21
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGUgKi9cbmltcG9ydCB7XG4gIEdyb3VwQnlTZWxlY3RvcixcbiAgTGltaXRTZWxlY3RvcixcbiAgT2Zmc2V0U2VsZWN0b3IsXG4gIE9yZGVyQnlTZWxlY3RvcixcbiAgU2VsZWN0U2VsZWN0b3IsXG59IGZyb20gXCIuL3NlbGVjdG9yc1wiO1xuaW1wb3J0IHsgRXhlY3V0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4vQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBQYWdpbmF0YWJsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1BhZ2luYXRhYmxlXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgR3JvdXBCeSBPcHRpb24gaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgR1JPVVAgQlkgbWV0aG9kIGFuZCByZW1haW5pbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgR3JvdXBCeU9wdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQnlPcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPiBleHRlbmRzIEV4ZWN1dG9yPFI+IHtcbiAgZ3JvdXBCeShzZWxlY3RvcjogR3JvdXBCeVNlbGVjdG9yPE0+KTogRXhlY3V0b3I8Uj47XG59XG4vKipcbiAqIEBzdW1tYXJ5IE9mZnNldCBPcHRpb24gaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgT0ZGU0VUIG1ldGhvZCBhbmQgcmVtYWluaW5nIG9wdGlvbnNcbiAqXG4gKiBAaW50ZXJmYWNlIEdyb3VwQnlPcHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPZmZzZXRPcHRpb248Uj4gZXh0ZW5kcyBFeGVjdXRvcjxSPiB7XG4gIG9mZnNldChzZWxlY3RvcjogT2Zmc2V0U2VsZWN0b3IpOiBFeGVjdXRvcjxSPjtcbn1cbi8qKlxuICogQHN1bW1hcnkgTGltaXQgT3B0aW9uIGludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIExJTUlUIG1ldGhvZCBhbmQgcmVtYWluaW5nIG9wdGlvbnNcbiAqXG4gKiBAaW50ZXJmYWNlIExpbWl0T3B0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGltaXRPcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPlxuICBleHRlbmRzIEV4ZWN1dG9yPFI+LFxuICAgIFBhZ2luYXRhYmxlPE0sIFIsIGFueT4ge1xuICBsaW1pdChzZWxlY3RvcjogTGltaXRTZWxlY3Rvcik6IE9mZnNldE9wdGlvbjxSPjtcbn1cbi8qKlxuICogQHN1bW1hcnkgT3JkZXJCeSBPcHRpb24gaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgT1JERVIgQlkgbWV0aG9kIGFuZCByZW1haW5pbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgT3JkZXJCeU9wdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yZGVyQnlPcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPlxuICBleHRlbmRzIEV4ZWN1dG9yPFI+LFxuICAgIFBhZ2luYXRhYmxlPE0sIFIsIGFueT4ge1xuICBvcmRlckJ5KHNlbGVjdG9yOiBPcmRlckJ5U2VsZWN0b3I8TT4pOiBMaW1pdE9wdGlvbjxNLCBSPiAmIE9mZnNldE9wdGlvbjxSPjtcbn1cbi8qKlxuICogQHN1bW1hcnkgT3JkZXJCeSBPcHRpb24gaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgT1JERVIgQlkgbWV0aG9kIGFuZCByZW1haW5pbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgVGhlbkJ5T3B0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbkJ5T3B0aW9uPE0gZXh0ZW5kcyBNb2RlbCwgUj5cbiAgZXh0ZW5kcyBMaW1pdE9wdGlvbjxNLCBSPixcbiAgICBPZmZzZXRPcHRpb248Uj4sXG4gICAgRXhlY3V0b3I8Uj4sXG4gICAgUGFnaW5hdGFibGU8TSwgUiwgYW55PiB7XG4gIHRoZW5CeShzZWxlY3RvcjogT3JkZXJCeVNlbGVjdG9yPE0+KTogVGhlbkJ5T3B0aW9uPE0sIFI+O1xufVxuLyoqXG4gKiBAc3VtbWFyeSBHcm91cHMgc2V2ZXJhbCBvcmRlciBhbmQgZ3JvdXBpbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgT3JkZXJBbmRHcm91cE9wdGlvblxuICogQGV4dGVuZHMgT3JkZXJCeU9wdGlvblxuICogQGV4dGVuZHMgR3JvdXBCeU9wdGlvblxuICogQGV4dGVuZHMgTGltaXRPcHRpb25cbiAqIEBleHRlbmRzIE9mZnNldE9wdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yZGVyQW5kR3JvdXBPcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPlxuICBleHRlbmRzIE9yZGVyQnlPcHRpb248TSwgUj4sXG4gICAgRXhlY3V0b3I8Uj4sXG4gICAgR3JvdXBCeU9wdGlvbjxNLCBSPixcbiAgICBMaW1pdE9wdGlvbjxNLCBSPixcbiAgICBPZmZzZXRPcHRpb248Uj4ge31cbi8qKlxuICogQHN1bW1hcnkgV2hlcmUgT3B0aW9uIGludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIFdIRVJFIG1ldGhvZCBhbmQgcmVtYWluaW5nIG9wdGlvbnNcbiAqXG4gKiBAaW50ZXJmYWNlIFdoZXJlT3B0aW9uXG4gKiBAZXh0ZW5kcyBPcmRlckFuZEdyb3VwT3B0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2hlcmVPcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPlxuICBleHRlbmRzIE9yZGVyQW5kR3JvdXBPcHRpb248TSwgUj4ge1xuICAvKipcbiAgICogQHN1bW1hcnkgZmlsdGVyIHRoZSByZWNvcmRzIGJ5IGEgY29uZGl0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9ufSBjb25kaXRpb25cbiAgICogQG1ldGhvZFxuICAgKi9cbiAgd2hlcmUoY29uZGl0aW9uOiBDb25kaXRpb248TT4pOiBPcmRlckFuZEdyb3VwT3B0aW9uPE0sIFI+O1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEZyb20gT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIEZST00gbWV0aG9kIGFuZCByZW1haW5pbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgRnJvbU9wdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyb21PcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPiB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBzZWxlY3RzIHJlY29yZHMgZnJvbSBhIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3J9IHRhYmxlTmFtZVxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBmcm9tKHRhYmxlTmFtZTogQ29uc3RydWN0b3I8TT4gfCBzdHJpbmcpOiBXaGVyZU9wdGlvbjxNLCBSPjtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEaXN0aW5jdCBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgYWZ0ZXIgYSBESVNUSU5DVFxuICpcbiAqIEBpbnRlcmZhY2UgRGlzdGluY3RPcHRpb25cbiAqIEBleHRlbmRzIEZyb21PcHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXN0aW5jdE9wdGlvbjxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgRnJvbU9wdGlvbjxNLCBSPiB7fVxuXG4vKipcbiAqIEBzdW1tYXJ5IE1heCBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgYWZ0ZXIgYSBNQVhcbiAqXG4gKiBAaW50ZXJmYWNlIE1heE9wdGlvblxuICogQGV4dGVuZHMgRnJvbU9wdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1heE9wdGlvbjxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgRnJvbU9wdGlvbjxNLCBSPiB7fVxuXG4vKipcbiAqIEBzdW1tYXJ5IE1pbiBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgYWZ0ZXIgYSBNSU5cbiAqXG4gKiBAaW50ZXJmYWNlIE1pbk9wdGlvblxuICogQGV4dGVuZHMgRnJvbU9wdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbk9wdGlvbjxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgRnJvbU9wdGlvbjxNLCBSPiB7fVxuXG4vKipcbiAqIEBzdW1tYXJ5IENvdW50IE9wdGlvbiBJbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhZnRlciBhIENPVU5UXG4gKlxuICogQGludGVyZmFjZSBDb3VudE9wdGlvblxuICogQGV4dGVuZHMgRnJvbU9wdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvdW50T3B0aW9uPE0gZXh0ZW5kcyBNb2RlbCwgUj4gZXh0ZW5kcyBGcm9tT3B0aW9uPE0sIFI+IHt9XG5cbi8qKlxuICogQHN1bW1hcnkgU2VsZWN0IE9wdGlvbiBJbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhZnRlciBhIFNFTEVDVFxuICpcbiAqIEBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uXG4gKiBAZXh0ZW5kcyBGcm9tT3B0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uPE0gZXh0ZW5kcyBNb2RlbCwgUj4gZXh0ZW5kcyBGcm9tT3B0aW9uPE0sIFI+IHtcbiAgZGlzdGluY3Q8UyBleHRlbmRzIFNlbGVjdFNlbGVjdG9yPE0+PihzZWxlY3RvcjogUyk6IERpc3RpbmN0T3B0aW9uPE0sIE1bU11bXT47XG5cbiAgbWF4PFMgZXh0ZW5kcyBTZWxlY3RTZWxlY3RvcjxNPj4oc2VsZWN0b3I6IFMpOiBNYXhPcHRpb248TSwgTVtTXT47XG5cbiAgbWluPFMgZXh0ZW5kcyBTZWxlY3RTZWxlY3RvcjxNPj4oc2VsZWN0b3I6IFMpOiBNaW5PcHRpb248TSwgTVtTXT47XG5cbiAgY291bnQ8UyBleHRlbmRzIFNlbGVjdFNlbGVjdG9yPE0+PihzZWxlY3Rvcj86IFMpOiBDb3VudE9wdGlvbjxNLCBudW1iZXI+O1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEludG8gT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIHJlbWFpbmluZyBvcHRpb25zIGFmdGVyIGFuIElOVE9cbiAqXG4gKiBAaW50ZXJmYWNlIEludG9PcHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRvT3B0aW9uPE0gZXh0ZW5kcyBNb2RlbCwgUj4ge1xuICB2YWx1ZXMoLi4ubW9kZWxzOiBNW10pOiBFeGVjdXRvcjxSPjtcblxuICB3aGVyZShjb25kaXRpb246IENvbmRpdGlvbjxNPik6IEV4ZWN1dG9yPFI+O1xufVxuLyoqXG4gKiBAc3VtbWFyeSBWYWx1ZXN0IE9wdGlvbiBJbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhZnRlciBhIFZBTFVFU1xuICpcbiAqIEBpbnRlcmZhY2UgVmFsdWVzT3B0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWVzT3B0aW9uPE0gZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBFeGVjdXRvcjxNPiB7fVxuLyoqXG4gKiBAc3VtbWFyeSBJbnNlcnQgT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIHJlbWFpbmluZyBvcHRpb25zIGFmdGVyIGFuIElOU0VSVFxuICpcbiAqIEBpbnRlcmZhY2UgSW5zZXJ0T3B0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zZXJ0T3B0aW9uPE0gZXh0ZW5kcyBNb2RlbCwgUiA9IHZvaWQ+IHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IHNlbGVjdHMgdGhlIHRhYmxlIHRvIGluc2VydCByZWNvcmRzIGludG9cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBDb25zdHJ1Y3Rvcn0gdGFibGVcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgaW50byh0YWJsZTogQ29uc3RydWN0b3I8TT4pOiBJbnRvT3B0aW9uPE0sIFI+O1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IHtAbGluayBPcGVyYXRvcn0gT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIGF2YWlsYWJsZSBvcGVyYXRvcnMgZm9yIGEge0BsaW5rIENvbmRpdGlvbn1cbiAqXG4gKiBAaW50ZXJmYWNlIEF0dHJpYnV0ZU9wdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZU9wdGlvbjxNIGV4dGVuZHMgTW9kZWw+IHtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRlc3QgZXF1YWxpdHlcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbCB0aGUgdmFsdWUgdG8gdGVzdFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBlcSh2YWw6IGFueSk6IENvbmRpdGlvbjxNPjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRlc3QgZGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsIHRoZSB2YWx1ZSB0byB0ZXN0XG4gICAqIEBtZXRob2RcbiAgICovXG4gIGRpZih2YWw6IGFueSk6IENvbmRpdGlvbjxNPjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRlc3QgZ3JlYXRlciB0aGFuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgdGhlIHZhbHVlIHRvIHRlc3RcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgZ3QodmFsOiBhbnkpOiBDb25kaXRpb248TT47XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBUZXN0IGxvd2VyIHRoYW5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbCB0aGUgdmFsdWUgdG8gdGVzdFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBsdCh2YWw6IGFueSk6IENvbmRpdGlvbjxNPjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRlc3QgZ3JlYXRlciBvciBlcXVhbCB0b1xuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsIHRoZSB2YWx1ZSB0byB0ZXN0XG4gICAqIEBtZXRob2RcbiAgICovXG4gIGd0ZSh2YWw6IGFueSk6IENvbmRpdGlvbjxNPjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRlc3QgbG93ZXIgb3IgZXF1YWwgdG9cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbCB0aGUgdmFsdWUgdG8gdGVzdFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBsdGUodmFsOiBhbnkpOiBDb25kaXRpb248TT47XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBUZXN0IHZhbHVlIGluIGEgcmFuZ2Ugb2YgdmFsdWVzXG4gICAqIEBwYXJhbSB7YW55W119IHZhbFxuICAgKi9cbiAgaW4odmFsOiBhbnlbXSk6IENvbmRpdGlvbjxNPjtcbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFRlc3QgbWF0Y2hlcyB7QGxpbmsgUmVnRXhwfVxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsIHRoZSB2YWx1ZSB0byB0ZXN0XG4gICAqIEBtZXRob2RcbiAgICovXG4gIHJlZ2V4cCh2YWw6IHN0cmluZyB8IFJlZ0V4cCk6IENvbmRpdGlvbjxNPjtcbn1cbi8qKlxuICogQHN1bW1hcnkgVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBjcmVhdGluZyBDb25kaXRpb25zXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgYXZhaWxhYmxlIG9wZXJhdGlvbnMgZm9yIGEge0BsaW5rIENvbmRpdGlvbn1cbiAqXG4gKiBAaW50ZXJmYWNlIENvbmRpdGlvbkJ1aWxkZXJPcHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25CdWlsZGVyT3B0aW9uPE0gZXh0ZW5kcyBNb2RlbD4ge1xuICBhdHRyaWJ1dGUoYXR0cjoga2V5b2YgTSk6IEF0dHJpYnV0ZU9wdGlvbjxNPjtcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGUgKi9cbmltcG9ydCB7XG4gIEdyb3VwQnlTZWxlY3RvcixcbiAgTGltaXRTZWxlY3RvcixcbiAgT2Zmc2V0U2VsZWN0b3IsXG4gIE9yZGVyQnlTZWxlY3RvcixcbiAgU2VsZWN0U2VsZWN0b3IsXG59IGZyb20gXCIuL3NlbGVjdG9yc1wiO1xuaW1wb3J0IHsgRXhlY3V0b3IgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4vQ29uZGl0aW9uXCI7XG5pbXBvcnQgeyBQYWdpbmF0YWJsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1BhZ2luYXRhYmxlXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgR3JvdXBCeSBPcHRpb24gaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgR1JPVVAgQlkgbWV0aG9kIGFuZCByZW1haW5pbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgR3JvdXBCeU9wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBCeU9wdGlvbjxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgRXhlY3V0b3I8Uj4ge1xuICBncm91cEJ5KHNlbGVjdG9yOiBHcm91cEJ5U2VsZWN0b3I8TT4pOiBFeGVjdXRvcjxSPjtcbn1cbi8qKlxuICogQHN1bW1hcnkgT2Zmc2V0IE9wdGlvbiBpbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSBPRkZTRVQgbWV0aG9kIGFuZCByZW1haW5pbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgR3JvdXBCeU9wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2Zmc2V0T3B0aW9uPFI+IGV4dGVuZHMgRXhlY3V0b3I8Uj4ge1xuICBvZmZzZXQoc2VsZWN0b3I6IE9mZnNldFNlbGVjdG9yKTogRXhlY3V0b3I8Uj47XG59XG4vKipcbiAqIEBzdW1tYXJ5IExpbWl0IE9wdGlvbiBpbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSBMSU1JVCBtZXRob2QgYW5kIHJlbWFpbmluZyBvcHRpb25zXG4gKlxuICogQGludGVyZmFjZSBMaW1pdE9wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGltaXRPcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPlxuICBleHRlbmRzIEV4ZWN1dG9yPFI+LFxuICAgIFBhZ2luYXRhYmxlPE0sIFIsIGFueT4ge1xuICBsaW1pdChzZWxlY3RvcjogTGltaXRTZWxlY3Rvcik6IE9mZnNldE9wdGlvbjxSPjtcbn1cbi8qKlxuICogQHN1bW1hcnkgT3JkZXJCeSBPcHRpb24gaW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgT1JERVIgQlkgbWV0aG9kIGFuZCByZW1haW5pbmcgb3B0aW9uc1xuICpcbiAqIEBpbnRlcmZhY2UgT3JkZXJCeU9wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJCeU9wdGlvbjxNIGV4dGVuZHMgTW9kZWwsIFI+XG4gIGV4dGVuZHMgRXhlY3V0b3I8Uj4sXG4gICAgUGFnaW5hdGFibGU8TSwgUiwgYW55PiB7XG4gIG9yZGVyQnkoc2VsZWN0b3I6IE9yZGVyQnlTZWxlY3RvcjxNPik6IExpbWl0T3B0aW9uPE0sIFI+ICYgT2Zmc2V0T3B0aW9uPFI+O1xufVxuLyoqXG4gKiBAc3VtbWFyeSBPcmRlckJ5IE9wdGlvbiBpbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSBPUkRFUiBCWSBtZXRob2QgYW5kIHJlbWFpbmluZyBvcHRpb25zXG4gKlxuICogQGludGVyZmFjZSBUaGVuQnlPcHRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRoZW5CeU9wdGlvbjxNIGV4dGVuZHMgTW9kZWwsIFI+XG4gIGV4dGVuZHMgTGltaXRPcHRpb248TSwgUj4sXG4gICAgT2Zmc2V0T3B0aW9uPFI+LFxuICAgIEV4ZWN1dG9yPFI+LFxuICAgIFBhZ2luYXRhYmxlPE0sIFIsIGFueT4ge1xuICB0aGVuQnkoc2VsZWN0b3I6IE9yZGVyQnlTZWxlY3RvcjxNPik6IFRoZW5CeU9wdGlvbjxNLCBSPjtcbn1cbi8qKlxuICogQHN1bW1hcnkgR3JvdXBzIHNldmVyYWwgb3JkZXIgYW5kIGdyb3VwaW5nIG9wdGlvbnNcbiAqXG4gKiBAaW50ZXJmYWNlIE9yZGVyQW5kR3JvdXBPcHRpb25cbiAqIEBleHRlbmRzIE9yZGVyQnlPcHRpb25cbiAqIEBleHRlbmRzIEdyb3VwQnlPcHRpb25cbiAqIEBleHRlbmRzIExpbWl0T3B0aW9uXG4gKiBAZXh0ZW5kcyBPZmZzZXRPcHRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yZGVyQW5kR3JvdXBPcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPlxuICBleHRlbmRzIE9yZGVyQnlPcHRpb248TSwgUj4sXG4gICAgRXhlY3V0b3I8Uj4sXG4gICAgR3JvdXBCeU9wdGlvbjxNLCBSPixcbiAgICBMaW1pdE9wdGlvbjxNLCBSPixcbiAgICBPZmZzZXRPcHRpb248Uj4ge31cbi8qKlxuICogQHN1bW1hcnkgV2hlcmUgT3B0aW9uIGludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIFdIRVJFIG1ldGhvZCBhbmQgcmVtYWluaW5nIG9wdGlvbnNcbiAqXG4gKiBAaW50ZXJmYWNlIFdoZXJlT3B0aW9uXG4gKiBAZXh0ZW5kcyBPcmRlckFuZEdyb3VwT3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaGVyZU9wdGlvbjxNIGV4dGVuZHMgTW9kZWwsIFI+XG4gIGV4dGVuZHMgT3JkZXJBbmRHcm91cE9wdGlvbjxNLCBSPiB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBmaWx0ZXIgdGhlIHJlY29yZHMgYnkgYSBjb25kaXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtDb25kaXRpb259IGNvbmRpdGlvblxuICAgKiBAbWV0aG9kXG4gICAqL1xuICB3aGVyZShjb25kaXRpb246IENvbmRpdGlvbjxNPik6IE9yZGVyQW5kR3JvdXBPcHRpb248TSwgUj47XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRnJvbSBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgRlJPTSBtZXRob2QgYW5kIHJlbWFpbmluZyBvcHRpb25zXG4gKlxuICogQGludGVyZmFjZSBGcm9tT3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9tT3B0aW9uPE0gZXh0ZW5kcyBNb2RlbCwgUj4ge1xuICAvKipcbiAgICogQHN1bW1hcnkgc2VsZWN0cyByZWNvcmRzIGZyb20gYSB0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yfSB0YWJsZU5hbWVcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgZnJvbSh0YWJsZU5hbWU6IENvbnN0cnVjdG9yPE0+IHwgc3RyaW5nKTogV2hlcmVPcHRpb248TSwgUj47XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGlzdGluY3QgT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIHJlbWFpbmluZyBvcHRpb25zIGFmdGVyIGEgRElTVElOQ1RcbiAqXG4gKiBAaW50ZXJmYWNlIERpc3RpbmN0T3B0aW9uXG4gKiBAZXh0ZW5kcyBGcm9tT3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXN0aW5jdE9wdGlvbjxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgRnJvbU9wdGlvbjxNLCBSPiB7fVxuXG4vKipcbiAqIEBzdW1tYXJ5IE1heCBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgYWZ0ZXIgYSBNQVhcbiAqXG4gKiBAaW50ZXJmYWNlIE1heE9wdGlvblxuICogQGV4dGVuZHMgRnJvbU9wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF4T3B0aW9uPE0gZXh0ZW5kcyBNb2RlbCwgUj4gZXh0ZW5kcyBGcm9tT3B0aW9uPE0sIFI+IHt9XG5cbi8qKlxuICogQHN1bW1hcnkgTWluIE9wdGlvbiBJbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhZnRlciBhIE1JTlxuICpcbiAqIEBpbnRlcmZhY2UgTWluT3B0aW9uXG4gKiBAZXh0ZW5kcyBGcm9tT3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW5PcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPiBleHRlbmRzIEZyb21PcHRpb248TSwgUj4ge31cblxuLyoqXG4gKiBAc3VtbWFyeSBDb3VudCBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgYWZ0ZXIgYSBDT1VOVFxuICpcbiAqIEBpbnRlcmZhY2UgQ291bnRPcHRpb25cbiAqIEBleHRlbmRzIEZyb21PcHRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvdW50T3B0aW9uPE0gZXh0ZW5kcyBNb2RlbCwgUj4gZXh0ZW5kcyBGcm9tT3B0aW9uPE0sIFI+IHt9XG5cbi8qKlxuICogQHN1bW1hcnkgU2VsZWN0IE9wdGlvbiBJbnRlcmZhY2VcbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhZnRlciBhIFNFTEVDVFxuICpcbiAqIEBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uXG4gKiBAZXh0ZW5kcyBGcm9tT3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb248TSBleHRlbmRzIE1vZGVsLCBSPiBleHRlbmRzIEZyb21PcHRpb248TSwgUj4ge1xuICBkaXN0aW5jdDxTIGV4dGVuZHMgU2VsZWN0U2VsZWN0b3I8TT4+KHNlbGVjdG9yOiBTKTogRGlzdGluY3RPcHRpb248TSwgTVtTXVtdPjtcblxuICBtYXg8UyBleHRlbmRzIFNlbGVjdFNlbGVjdG9yPE0+PihzZWxlY3RvcjogUyk6IE1heE9wdGlvbjxNLCBNW1NdPjtcblxuICBtaW48UyBleHRlbmRzIFNlbGVjdFNlbGVjdG9yPE0+PihzZWxlY3RvcjogUyk6IE1pbk9wdGlvbjxNLCBNW1NdPjtcblxuICBjb3VudDxTIGV4dGVuZHMgU2VsZWN0U2VsZWN0b3I8TT4+KHNlbGVjdG9yPzogUyk6IENvdW50T3B0aW9uPE0sIG51bWJlcj47XG59XG5cbi8qKlxuICogQHN1bW1hcnkgSW50byBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgYWZ0ZXIgYW4gSU5UT1xuICpcbiAqIEBpbnRlcmZhY2UgSW50b09wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50b09wdGlvbjxNIGV4dGVuZHMgTW9kZWwsIFI+IHtcbiAgdmFsdWVzKC4uLm1vZGVsczogTVtdKTogRXhlY3V0b3I8Uj47XG5cbiAgd2hlcmUoY29uZGl0aW9uOiBDb25kaXRpb248TT4pOiBFeGVjdXRvcjxSPjtcbn1cbi8qKlxuICogQHN1bW1hcnkgVmFsdWVzdCBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgYWZ0ZXIgYSBWQUxVRVNcbiAqXG4gKiBAaW50ZXJmYWNlIFZhbHVlc09wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWVzT3B0aW9uPE0gZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBFeGVjdXRvcjxNPiB7fVxuLyoqXG4gKiBAc3VtbWFyeSBJbnNlcnQgT3B0aW9uIEludGVyZmFjZVxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMgdGhlIHJlbWFpbmluZyBvcHRpb25zIGFmdGVyIGFuIElOU0VSVFxuICpcbiAqIEBpbnRlcmZhY2UgSW5zZXJ0T3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnNlcnRPcHRpb248TSBleHRlbmRzIE1vZGVsLCBSID0gdm9pZD4ge1xuICAvKipcbiAgICogQHN1bW1hcnkgc2VsZWN0cyB0aGUgdGFibGUgdG8gaW5zZXJ0IHJlY29yZHMgaW50b1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IENvbnN0cnVjdG9yfSB0YWJsZVxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBpbnRvKHRhYmxlOiBDb25zdHJ1Y3RvcjxNPik6IEludG9PcHRpb248TSwgUj47XG59XG5cbi8qKlxuICogQHN1bW1hcnkge0BsaW5rIE9wZXJhdG9yfSBPcHRpb24gSW50ZXJmYWNlXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aGUgYXZhaWxhYmxlIG9wZXJhdG9ycyBmb3IgYSB7QGxpbmsgQ29uZGl0aW9ufVxuICpcbiAqIEBpbnRlcmZhY2UgQXR0cmlidXRlT3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGVPcHRpb248TSBleHRlbmRzIE1vZGVsPiB7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBUZXN0IGVxdWFsaXR5XG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgdGhlIHZhbHVlIHRvIHRlc3RcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgZXEodmFsOiBhbnkpOiBDb25kaXRpb248TT47XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBUZXN0IGRpZmZlcmVuY2VcbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbCB0aGUgdmFsdWUgdG8gdGVzdFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBkaWYodmFsOiBhbnkpOiBDb25kaXRpb248TT47XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBUZXN0IGdyZWF0ZXIgdGhhblxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsIHRoZSB2YWx1ZSB0byB0ZXN0XG4gICAqIEBtZXRob2RcbiAgICovXG4gIGd0KHZhbDogYW55KTogQ29uZGl0aW9uPE0+O1xuICAvKipcbiAgICogQHN1bW1hcnkgVGVzdCBsb3dlciB0aGFuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgdGhlIHZhbHVlIHRvIHRlc3RcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgbHQodmFsOiBhbnkpOiBDb25kaXRpb248TT47XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBUZXN0IGdyZWF0ZXIgb3IgZXF1YWwgdG9cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbCB0aGUgdmFsdWUgdG8gdGVzdFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICBndGUodmFsOiBhbnkpOiBDb25kaXRpb248TT47XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBUZXN0IGxvd2VyIG9yIGVxdWFsIHRvXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSB2YWwgdGhlIHZhbHVlIHRvIHRlc3RcbiAgICogQG1ldGhvZFxuICAgKi9cbiAgbHRlKHZhbDogYW55KTogQ29uZGl0aW9uPE0+O1xuICAvKipcbiAgICogQHN1bW1hcnkgVGVzdCB2YWx1ZSBpbiBhIHJhbmdlIG9mIHZhbHVlc1xuICAgKiBAcGFyYW0ge2FueVtdfSB2YWxcbiAgICovXG4gIGluKHZhbDogYW55W10pOiBDb25kaXRpb248TT47XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBUZXN0IG1hdGNoZXMge0BsaW5rIFJlZ0V4cH1cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHZhbCB0aGUgdmFsdWUgdG8gdGVzdFxuICAgKiBAbWV0aG9kXG4gICAqL1xuICByZWdleHAodmFsOiBzdHJpbmcgfCBSZWdFeHApOiBDb25kaXRpb248TT47XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGNyZWF0aW5nIHF1ZXJ5IGNvbmRpdGlvbnNcbiAqIEBzdW1tYXJ5IEV4cG9zZXMgdGhlIGF2YWlsYWJsZSBvcGVyYXRpb25zIGZvciBidWlsZGluZyBkYXRhYmFzZSBxdWVyeSBjb25kaXRpb25zXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoaXMgY29uZGl0aW9uIGJ1aWxkZXIgb3BlcmF0ZXMgb25cbiAqIEBpbnRlcmZhY2UgQ29uZGl0aW9uQnVpbGRlck9wdGlvblxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uQnVpbGRlck9wdGlvbjxNIGV4dGVuZHMgTW9kZWw+IHtcbiAgYXR0cmlidXRlKGF0dHI6IGtleW9mIE0pOiBBdHRyaWJ1dGVPcHRpb248TT47XG59XG4iXX0=