@decaf-ts/core 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/LICENSE.md +21 -157
  2. package/README.md +652 -15
  3. package/dist/core.cjs +2110 -132
  4. package/dist/core.esm.cjs +2111 -133
  5. package/lib/esm/identity/decorators.d.ts +52 -7
  6. package/lib/esm/identity/decorators.js +53 -8
  7. package/lib/esm/identity/utils.d.ts +19 -0
  8. package/lib/esm/identity/utils.js +20 -1
  9. package/lib/esm/index.d.ts +9 -2
  10. package/lib/esm/index.js +10 -3
  11. package/lib/esm/interfaces/ErrorParser.d.ts +12 -0
  12. package/lib/esm/interfaces/ErrorParser.js +1 -1
  13. package/lib/esm/interfaces/Executor.d.ts +13 -0
  14. package/lib/esm/interfaces/Executor.js +1 -1
  15. package/lib/esm/interfaces/Observable.d.ts +27 -0
  16. package/lib/esm/interfaces/Observable.js +1 -1
  17. package/lib/esm/interfaces/Observer.d.ts +12 -0
  18. package/lib/esm/interfaces/Observer.js +1 -1
  19. package/lib/esm/interfaces/Paginatable.d.ts +15 -0
  20. package/lib/esm/interfaces/Paginatable.js +1 -1
  21. package/lib/esm/interfaces/Queriable.d.ts +34 -9
  22. package/lib/esm/interfaces/Queriable.js +1 -1
  23. package/lib/esm/interfaces/RawExecutor.d.ts +14 -0
  24. package/lib/esm/interfaces/RawExecutor.js +1 -1
  25. package/lib/esm/interfaces/SequenceOptions.d.ts +52 -0
  26. package/lib/esm/interfaces/SequenceOptions.js +19 -1
  27. package/lib/esm/model/BaseModel.d.ts +31 -0
  28. package/lib/esm/model/BaseModel.js +24 -1
  29. package/lib/esm/model/construction.d.ts +433 -0
  30. package/lib/esm/model/construction.js +441 -2
  31. package/lib/esm/model/decorators.d.ts +159 -29
  32. package/lib/esm/model/decorators.js +160 -30
  33. package/lib/esm/model/types.d.ts +9 -0
  34. package/lib/esm/model/types.js +1 -1
  35. package/lib/esm/persistence/Adapter.d.ts +358 -17
  36. package/lib/esm/persistence/Adapter.js +287 -19
  37. package/lib/esm/persistence/Dispatch.d.ts +114 -1
  38. package/lib/esm/persistence/Dispatch.js +102 -4
  39. package/lib/esm/persistence/ObserverHandler.d.ts +95 -0
  40. package/lib/esm/persistence/ObserverHandler.js +96 -1
  41. package/lib/esm/persistence/Sequence.d.ts +89 -0
  42. package/lib/esm/persistence/Sequence.js +70 -1
  43. package/lib/esm/persistence/constants.d.ts +22 -0
  44. package/lib/esm/persistence/constants.js +23 -1
  45. package/lib/esm/persistence/decorators.d.ts +10 -0
  46. package/lib/esm/persistence/decorators.js +11 -1
  47. package/lib/esm/persistence/errors.d.ts +23 -0
  48. package/lib/esm/persistence/errors.js +24 -1
  49. package/lib/esm/persistence/types.d.ts +18 -0
  50. package/lib/esm/persistence/types.js +1 -1
  51. package/lib/esm/query/Condition.d.ts +78 -31
  52. package/lib/esm/query/Condition.js +132 -53
  53. package/lib/esm/query/Paginator.d.ts +56 -0
  54. package/lib/esm/query/Paginator.js +57 -1
  55. package/lib/esm/query/Statement.d.ts +51 -0
  56. package/lib/esm/query/Statement.js +52 -1
  57. package/lib/esm/query/constants.d.ts +25 -0
  58. package/lib/esm/query/constants.js +26 -1
  59. package/lib/esm/query/errors.d.ts +14 -0
  60. package/lib/esm/query/errors.js +15 -1
  61. package/lib/esm/query/options.d.ts +21 -3
  62. package/lib/esm/query/options.js +1 -1
  63. package/lib/esm/query/selectors.d.ts +26 -0
  64. package/lib/esm/query/selectors.js +1 -1
  65. package/lib/esm/ram/RamAdapter.d.ts +311 -0
  66. package/lib/esm/ram/RamAdapter.js +312 -1
  67. package/lib/esm/ram/RamContext.d.ts +16 -1
  68. package/lib/esm/ram/RamContext.js +18 -3
  69. package/lib/esm/ram/RamPaginator.d.ts +43 -0
  70. package/lib/esm/ram/RamPaginator.js +54 -2
  71. package/lib/esm/ram/RamSequence.d.ts +61 -0
  72. package/lib/esm/ram/RamSequence.js +63 -2
  73. package/lib/esm/ram/RamStatement.d.ts +74 -0
  74. package/lib/esm/ram/RamStatement.js +75 -1
  75. package/lib/esm/ram/constants.d.ts +8 -0
  76. package/lib/esm/ram/constants.js +9 -1
  77. package/lib/esm/ram/handlers.d.ts +19 -0
  78. package/lib/esm/ram/handlers.js +20 -1
  79. package/lib/esm/ram/model/RamSequence.d.ts +25 -0
  80. package/lib/esm/ram/model/RamSequence.js +19 -1
  81. package/lib/esm/ram/types.d.ts +42 -0
  82. package/lib/esm/ram/types.js +1 -1
  83. package/lib/esm/repository/Repository.d.ts +363 -8
  84. package/lib/esm/repository/Repository.js +361 -16
  85. package/lib/esm/repository/constants.d.ts +25 -0
  86. package/lib/esm/repository/constants.js +26 -1
  87. package/lib/esm/repository/decorators.d.ts +27 -0
  88. package/lib/esm/repository/decorators.js +28 -1
  89. package/lib/esm/repository/errors.d.ts +12 -5
  90. package/lib/esm/repository/errors.js +13 -6
  91. package/lib/esm/repository/injectables.d.ts +18 -0
  92. package/lib/esm/repository/injectables.js +19 -1
  93. package/lib/esm/repository/types.d.ts +15 -0
  94. package/lib/esm/repository/types.js +1 -1
  95. package/lib/esm/repository/utils.d.ts +11 -0
  96. package/lib/esm/repository/utils.js +12 -1
  97. package/lib/esm/utils/decorators.d.ts +8 -0
  98. package/lib/esm/utils/decorators.js +9 -1
  99. package/lib/esm/utils/errors.d.ts +46 -0
  100. package/lib/esm/utils/errors.js +47 -1
  101. package/lib/identity/decorators.cjs +53 -8
  102. package/lib/identity/decorators.d.ts +52 -7
  103. package/lib/identity/utils.cjs +20 -1
  104. package/lib/identity/utils.d.ts +19 -0
  105. package/lib/index.cjs +10 -3
  106. package/lib/index.d.ts +9 -2
  107. package/lib/interfaces/ErrorParser.cjs +1 -1
  108. package/lib/interfaces/ErrorParser.d.ts +12 -0
  109. package/lib/interfaces/Executor.cjs +1 -1
  110. package/lib/interfaces/Executor.d.ts +13 -0
  111. package/lib/interfaces/Observable.cjs +1 -1
  112. package/lib/interfaces/Observable.d.ts +27 -0
  113. package/lib/interfaces/Observer.cjs +1 -1
  114. package/lib/interfaces/Observer.d.ts +12 -0
  115. package/lib/interfaces/Paginatable.cjs +1 -1
  116. package/lib/interfaces/Paginatable.d.ts +15 -0
  117. package/lib/interfaces/Queriable.cjs +1 -1
  118. package/lib/interfaces/Queriable.d.ts +34 -9
  119. package/lib/interfaces/RawExecutor.cjs +1 -1
  120. package/lib/interfaces/RawExecutor.d.ts +14 -0
  121. package/lib/interfaces/SequenceOptions.cjs +19 -1
  122. package/lib/interfaces/SequenceOptions.d.ts +52 -0
  123. package/lib/model/BaseModel.cjs +24 -1
  124. package/lib/model/BaseModel.d.ts +31 -0
  125. package/lib/model/construction.cjs +441 -2
  126. package/lib/model/construction.d.ts +433 -0
  127. package/lib/model/decorators.cjs +160 -30
  128. package/lib/model/decorators.d.ts +159 -29
  129. package/lib/model/types.cjs +1 -1
  130. package/lib/model/types.d.ts +9 -0
  131. package/lib/persistence/Adapter.cjs +287 -19
  132. package/lib/persistence/Adapter.d.ts +358 -17
  133. package/lib/persistence/Dispatch.cjs +102 -4
  134. package/lib/persistence/Dispatch.d.ts +114 -1
  135. package/lib/persistence/ObserverHandler.cjs +96 -1
  136. package/lib/persistence/ObserverHandler.d.ts +95 -0
  137. package/lib/persistence/Sequence.cjs +70 -1
  138. package/lib/persistence/Sequence.d.ts +89 -0
  139. package/lib/persistence/constants.cjs +23 -1
  140. package/lib/persistence/constants.d.ts +22 -0
  141. package/lib/persistence/decorators.cjs +11 -1
  142. package/lib/persistence/decorators.d.ts +10 -0
  143. package/lib/persistence/errors.cjs +24 -1
  144. package/lib/persistence/errors.d.ts +23 -0
  145. package/lib/persistence/types.cjs +1 -1
  146. package/lib/persistence/types.d.ts +18 -0
  147. package/lib/query/Condition.cjs +132 -53
  148. package/lib/query/Condition.d.ts +78 -31
  149. package/lib/query/Paginator.cjs +57 -1
  150. package/lib/query/Paginator.d.ts +56 -0
  151. package/lib/query/Statement.cjs +52 -1
  152. package/lib/query/Statement.d.ts +51 -0
  153. package/lib/query/constants.cjs +26 -1
  154. package/lib/query/constants.d.ts +25 -0
  155. package/lib/query/errors.cjs +15 -1
  156. package/lib/query/errors.d.ts +14 -0
  157. package/lib/query/options.cjs +1 -1
  158. package/lib/query/options.d.ts +21 -3
  159. package/lib/query/selectors.cjs +1 -1
  160. package/lib/query/selectors.d.ts +26 -0
  161. package/lib/ram/RamAdapter.cjs +312 -1
  162. package/lib/ram/RamAdapter.d.ts +311 -0
  163. package/lib/ram/RamContext.cjs +18 -3
  164. package/lib/ram/RamContext.d.ts +16 -1
  165. package/lib/ram/RamPaginator.cjs +54 -2
  166. package/lib/ram/RamPaginator.d.ts +43 -0
  167. package/lib/ram/RamSequence.cjs +63 -2
  168. package/lib/ram/RamSequence.d.ts +61 -0
  169. package/lib/ram/RamStatement.cjs +75 -1
  170. package/lib/ram/RamStatement.d.ts +74 -0
  171. package/lib/ram/constants.cjs +9 -1
  172. package/lib/ram/constants.d.ts +8 -0
  173. package/lib/ram/handlers.cjs +20 -1
  174. package/lib/ram/handlers.d.ts +19 -0
  175. package/lib/ram/model/RamSequence.cjs +19 -1
  176. package/lib/ram/model/RamSequence.d.ts +25 -0
  177. package/lib/ram/types.cjs +1 -1
  178. package/lib/ram/types.d.ts +42 -0
  179. package/lib/repository/Repository.cjs +360 -15
  180. package/lib/repository/Repository.d.ts +363 -8
  181. package/lib/repository/constants.cjs +26 -1
  182. package/lib/repository/constants.d.ts +25 -0
  183. package/lib/repository/decorators.cjs +28 -1
  184. package/lib/repository/decorators.d.ts +27 -0
  185. package/lib/repository/errors.cjs +13 -6
  186. package/lib/repository/errors.d.ts +12 -5
  187. package/lib/repository/injectables.cjs +19 -1
  188. package/lib/repository/injectables.d.ts +18 -0
  189. package/lib/repository/types.cjs +1 -1
  190. package/lib/repository/types.d.ts +15 -0
  191. package/lib/repository/utils.cjs +12 -1
  192. package/lib/repository/utils.d.ts +11 -0
  193. package/lib/utils/decorators.cjs +9 -1
  194. package/lib/utils/decorators.d.ts +8 -0
  195. package/lib/utils/errors.cjs +47 -1
  196. package/lib/utils/errors.d.ts +46 -0
  197. package/package.json +5 -5
@@ -5,11 +5,43 @@ const RamSequence_1 = require("./model/RamSequence.cjs");
5
5
  const db_decorators_1 = require("@decaf-ts/db-decorators");
6
6
  const persistence_1 = require("./../persistence/index.cjs");
7
7
  const repository_1 = require("./../repository/index.cjs");
8
+ /**
9
+ * @description RAM-specific sequence implementation
10
+ * @summary Extends the base Sequence class to provide auto-incrementing sequence functionality
11
+ * for the RAM adapter. This class manages sequences stored in memory, allowing for the generation
12
+ * of sequential identifiers for entities.
13
+ * @param {SequenceOptions} options - Configuration options for the sequence
14
+ * @param {RamAdapter} adapter - The RAM adapter instance to use for storage
15
+ * @class RamSequence
16
+ * @category Ram
17
+ * @example
18
+ * ```typescript
19
+ * // Create a new numeric sequence starting at 1
20
+ * const sequence = new RamSequence({
21
+ * name: 'order_sequence',
22
+ * type: 'Number',
23
+ * startWith: 1,
24
+ * incrementBy: 1
25
+ * }, ramAdapter);
26
+ *
27
+ * // Get the next value in the sequence
28
+ * const nextId = await sequence.next();
29
+ *
30
+ * // Get a range of values
31
+ * const idRange = await sequence.range(5); // Returns 5 sequential values
32
+ * ```
33
+ */
8
34
  class RamSequence extends persistence_1.Sequence {
9
35
  constructor(options, adapter) {
10
36
  super(options);
11
- this.repo = repository_1.Repository.forModel(RamSequence_1.Sequence, adapter.flavour);
37
+ this.repo = repository_1.Repository.forModel(RamSequence_1.Sequence, adapter.alias);
12
38
  }
39
+ /**
40
+ * @description Retrieves the current value of the sequence
41
+ * @summary Gets the current value of the sequence from storage. If the sequence
42
+ * doesn't exist yet, it returns the configured starting value.
43
+ * @return A promise that resolves to the current sequence value
44
+ */
13
45
  async current() {
14
46
  const { name, startWith } = this.options;
15
47
  try {
@@ -30,9 +62,24 @@ class RamSequence extends persistence_1.Sequence {
30
62
  throw new db_decorators_1.InternalError(`Failed to retrieve current value for sequence ${name}: ${e}`);
31
63
  }
32
64
  }
65
+ /**
66
+ * @description Parses a value according to the sequence type
67
+ * @summary Converts a value to the appropriate type for the sequence (string, number, or bigint)
68
+ * using the base Sequence class's parseValue method.
69
+ * @param {string | number | bigint} value - The value to parse
70
+ * @return {string | number | bigint} The parsed value in the correct type
71
+ */
33
72
  parse(value) {
34
73
  return persistence_1.Sequence.parseValue(this.options.type, value);
35
74
  }
75
+ /**
76
+ * @description Increments the sequence value
77
+ * @summary Increases the current sequence value by the specified amount and persists
78
+ * the new value to storage. This method handles both numeric and BigInt sequence types.
79
+ * @param {string | number | bigint} current - The current value of the sequence
80
+ * @param {number} [count] - Optional amount to increment by, defaults to the sequence's incrementBy value
81
+ * @return A promise that resolves to the new sequence value after incrementing
82
+ */
36
83
  async increment(current, count) {
37
84
  const { type, incrementBy, name } = this.options;
38
85
  let next;
@@ -64,10 +111,24 @@ class RamSequence extends persistence_1.Sequence {
64
111
  }
65
112
  return seq.current;
66
113
  }
114
+ /**
115
+ * @description Gets the next value in the sequence
116
+ * @summary Retrieves the current value of the sequence and increments it by the
117
+ * configured increment amount. This is the main method used to get a new sequential value.
118
+ * @return A promise that resolves to the next value in the sequence
119
+ */
67
120
  async next() {
68
121
  const current = await this.current();
69
122
  return this.increment(current);
70
123
  }
124
+ /**
125
+ * @description Generates a range of sequential values
126
+ * @summary Retrieves a specified number of sequential values from the sequence.
127
+ * This is useful when you need to allocate multiple IDs at once.
128
+ * The method increments the sequence by the total amount needed and returns all values in the range.
129
+ * @param {number} count - The number of sequential values to generate
130
+ * @return A promise that resolves to an array of sequential values
131
+ */
71
132
  async range(count) {
72
133
  const current = (await this.current());
73
134
  const incrementBy = this.parse(this.options.incrementBy);
@@ -82,4 +143,4 @@ class RamSequence extends persistence_1.Sequence {
82
143
  }
83
144
  }
84
145
  exports.RamSequence = RamSequence;
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmFtL1JhbVNlcXVlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlEQUFzRDtBQUN0RCwyREFBdUU7QUFDdkUsNERBQTBDO0FBRzFDLDBEQUFpRDtBQUVqRCxNQUFhLFdBQVksU0FBUSxzQkFBUTtJQUd2QyxZQUFZLE9BQXdCLEVBQUUsT0FBbUI7UUFDdkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyx1QkFBVSxDQUFDLFFBQVEsQ0FBQyxzQkFBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQVEsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFjLENBQUMsQ0FBQztZQUMzRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQTBCLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsWUFBWSw2QkFBYSxFQUFFLENBQUM7Z0JBQy9CLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVztvQkFDbEMsTUFBTSxJQUFJLDZCQUFhLENBQ3JCLDJEQUEyRCxDQUM1RCxDQUFDO2dCQUNKLElBQUksQ0FBQztvQkFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztvQkFDaEIsTUFBTSxJQUFJLDZCQUFhLENBQ3JCLDhDQUE4QyxTQUFTLEtBQUssQ0FBQyxFQUFFLENBQ2hFLENBQUM7Z0JBQ0os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QztZQUN4QyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQVksQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUk7WUFDbEMsTUFBTSxJQUFJLDZCQUFhLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUNyRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQTlGRCxrQ0E4RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZXF1ZW5jZSBhcyBTZXEgfSBmcm9tIFwiLi9tb2RlbC9SYW1TZXF1ZW5jZVwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciwgTm90Rm91bmRFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU2VxdWVuY2UgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBSYW1BZGFwdGVyIH0gZnJvbSBcIi4vUmFtQWRhcHRlclwiO1xuaW1wb3J0IHsgUmVwbywgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBSYW1TZXF1ZW5jZSBleHRlbmRzIFNlcXVlbmNlIHtcbiAgcHJvdGVjdGVkIHJlcG86IFJlcG88U2VxPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMsIGFkYXB0ZXI6IFJhbUFkYXB0ZXIpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLnJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKFNlcSwgYWRhcHRlci5mbGF2b3VyKTtcbiAgfVxuXG4gIGFzeW5jIGN1cnJlbnQoKTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+IHtcbiAgICBjb25zdCB7IG5hbWUsIHN0YXJ0V2l0aCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzZXF1ZW5jZTogU2VxID0gYXdhaXQgdGhpcy5yZXBvLnJlYWQobmFtZSBhcyBzdHJpbmcpO1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2Uoc2VxdWVuY2UuY3VycmVudCBhcyBzdHJpbmcgfCBudW1iZXIpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhcnRXaXRoID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgXCJTdGFydGluZyB2YWx1ZSBpcyBub3QgZGVmaW5lZCBmb3IgYSBub24gZXhpc3Rpbmcgc2VxdWVuY2VcIlxuICAgICAgICAgICk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2Uoc3RhcnRXaXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIGluaXRpYWwgdmFsdWUgZm9yIHNlcXVlbmNlICR7c3RhcnRXaXRofTogJHtlfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byByZXRyaWV2ZSBjdXJyZW50IHZhbHVlIGZvciBzZXF1ZW5jZSAke25hbWV9OiAke2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQpOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQge1xuICAgIHJldHVybiBTZXF1ZW5jZS5wYXJzZVZhbHVlKHRoaXMub3B0aW9ucy50eXBlLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluY3JlbWVudChcbiAgICBjdXJyZW50OiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQsXG4gICAgY291bnQ/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+IHtcbiAgICBjb25zdCB7IHR5cGUsIGluY3JlbWVudEJ5LCBuYW1lIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgbGV0IG5leHQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludDtcbiAgICBjb25zdCB0b0luY3JlbWVudEJ5ID0gY291bnQgfHwgaW5jcmVtZW50Qnk7XG4gICAgaWYgKHRvSW5jcmVtZW50QnkgJSBpbmNyZW1lbnRCeSAhPT0gMClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgVmFsdWUgdG8gaW5jcmVtZW50IGRvZXMgbm90IGNvbnNpZGVyIHRoZSBpbmNyZW1lbnRCeSBzZXR0aW5nOiAke2luY3JlbWVudEJ5fWBcbiAgICAgICk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiTnVtYmVyXCI6XG4gICAgICAgIG5leHQgPSAodGhpcy5wYXJzZShjdXJyZW50KSBhcyBudW1iZXIpICsgdG9JbmNyZW1lbnRCeTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQmlnSW50XCI6XG4gICAgICAgIG5leHQgPSAodGhpcy5wYXJzZShjdXJyZW50KSBhcyBiaWdpbnQpICsgQmlnSW50KHRvSW5jcmVtZW50QnkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiU2hvdWxkIG5ldmVyIGhhcHBlblwiKTtcbiAgICB9XG4gICAgbGV0IHNlcTogU2VxO1xuICAgIGNvbnN0IHJlcG8gPSB0aGlzLnJlcG8ub3ZlcnJpZGUoe1xuICAgICAgaWdub3JlZFZhbGlkYXRpb25Qcm9wZXJ0aWVzOiBbXCJ1cGRhdGVkT25cIl0sXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHNlcSA9IGF3YWl0IHJlcG8udXBkYXRlKG5ldyBTZXEoeyBpZDogbmFtZSwgY3VycmVudDogbmV4dCB9KSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoIShlIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIHNlcSA9IGF3YWl0IHJlcG8uY3JlYXRlKG5ldyBTZXEoeyBpZDogbmFtZSwgY3VycmVudDogbmV4dCB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcS5jdXJyZW50IGFzIHN0cmluZyB8IG51bWJlciB8IGJpZ2ludDtcbiAgfVxuXG4gIGFzeW5jIG5leHQoKTogUHJvbWlzZTxudW1iZXIgfCBzdHJpbmcgfCBiaWdpbnQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5jdXJyZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuaW5jcmVtZW50KGN1cnJlbnQpO1xuICB9XG5cbiAgYXN5bmMgcmFuZ2UoY291bnQ6IG51bWJlcik6IFByb21pc2U8KG51bWJlciB8IHN0cmluZyB8IGJpZ2ludClbXT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSAoYXdhaXQgdGhpcy5jdXJyZW50KCkpIGFzIG51bWJlcjtcbiAgICBjb25zdCBpbmNyZW1lbnRCeSA9IHRoaXMucGFyc2UodGhpcy5vcHRpb25zLmluY3JlbWVudEJ5KSBhcyBudW1iZXI7XG4gICAgY29uc3QgbmV4dDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50ID0gYXdhaXQgdGhpcy5pbmNyZW1lbnQoXG4gICAgICBjdXJyZW50LFxuICAgICAgKHRoaXMucGFyc2UoY291bnQpIGFzIG51bWJlcikgKiBpbmNyZW1lbnRCeVxuICAgICk7XG4gICAgY29uc3QgcmFuZ2U6IChudW1iZXIgfCBzdHJpbmcgfCBiaWdpbnQpW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDw9IGNvdW50OyBpKyspIHtcbiAgICAgIHJhbmdlLnB1c2goY3VycmVudCArIGluY3JlbWVudEJ5ICogKHRoaXMucGFyc2UoaSkgYXMgbnVtYmVyKSk7XG4gICAgfVxuICAgIGlmIChyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSAhPT0gbmV4dClcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTWlzY2FsY3VsYXRpb24gb2YgcmFuZ2VcIik7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG59XG4iXX0=
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmFtL1JhbVNlcXVlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlEQUFzRDtBQUN0RCwyREFBdUU7QUFDdkUsNERBQTBDO0FBRzFDLDBEQUFpRDtBQUVqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFRO0lBR3ZDLFlBQVksT0FBd0IsRUFBRSxPQUFtQjtRQUN2RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLHVCQUFVLENBQUMsUUFBUSxDQUFDLHNCQUFHLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3pDLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFRLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBYyxDQUFDLENBQUM7WUFDM0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUEwQixDQUFDLENBQUM7UUFDekQsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVksNkJBQWEsRUFBRSxDQUFDO2dCQUMvQixJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVc7b0JBQ2xDLE1BQU0sSUFBSSw2QkFBYSxDQUNyQiwyREFBMkQsQ0FDNUQsQ0FBQztnQkFDSixJQUFJLENBQUM7b0JBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMvQixDQUFDO2dCQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7b0JBQ2hCLE1BQU0sSUFBSSw2QkFBYSxDQUNyQiw4Q0FBOEMsU0FBUyxLQUFLLENBQUMsRUFBRSxDQUNoRSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxJQUFJLDZCQUFhLENBQ3JCLGlEQUFpRCxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQzlELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLEtBQUssQ0FBQyxLQUErQjtRQUMzQyxPQUFPLHNCQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssS0FBSyxDQUFDLFNBQVMsQ0FDckIsT0FBaUMsRUFDakMsS0FBYztRQUVkLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDakQsSUFBSSxJQUE4QixDQUFDO1FBQ25DLE1BQU0sYUFBYSxHQUFHLEtBQUssSUFBSSxXQUFXLENBQUM7UUFDM0MsSUFBSSxhQUFhLEdBQUcsV0FBVyxLQUFLLENBQUM7WUFDbkMsTUFBTSxJQUFJLDZCQUFhLENBQ3JCLGlFQUFpRSxXQUFXLEVBQUUsQ0FDL0UsQ0FBQztRQUNKLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLFFBQVE7Z0JBQ1gsSUFBSSxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFZLEdBQUcsYUFBYSxDQUFDO2dCQUN2RCxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLElBQUksR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBWSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDL0QsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSw2QkFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksR0FBUSxDQUFDO1FBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUIsMkJBQTJCLEVBQUUsQ0FBQyxXQUFXLENBQUM7U0FDM0MsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDO1lBQ0gsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLHNCQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLDZCQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLENBQUMsQ0FBQztZQUNWLENBQUM7WUFDRCxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksc0JBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsT0FBbUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBYTtRQUN2QixNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFXLENBQUM7UUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBVyxDQUFDO1FBQ25FLE1BQU0sSUFBSSxHQUE2QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQ3pELE9BQU8sRUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBWSxHQUFHLFdBQVcsQ0FDNUMsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFpQyxFQUFFLENBQUM7UUFDL0MsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBWSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSTtZQUNsQyxNQUFNLElBQUksNkJBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBaklELGtDQWlJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcXVlbmNlIGFzIFNlcSB9IGZyb20gXCIuL21vZGVsL1JhbVNlcXVlbmNlXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yLCBOb3RGb3VuZEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZSB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZVwiO1xuaW1wb3J0IHsgU2VxdWVuY2VPcHRpb25zIH0gZnJvbSBcIi4uL2ludGVyZmFjZXNcIjtcbmltcG9ydCB7IFJhbUFkYXB0ZXIgfSBmcm9tIFwiLi9SYW1BZGFwdGVyXCI7XG5pbXBvcnQgeyBSZXBvLCBSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnlcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUkFNLXNwZWNpZmljIHNlcXVlbmNlIGltcGxlbWVudGF0aW9uXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBiYXNlIFNlcXVlbmNlIGNsYXNzIHRvIHByb3ZpZGUgYXV0by1pbmNyZW1lbnRpbmcgc2VxdWVuY2UgZnVuY3Rpb25hbGl0eVxuICogZm9yIHRoZSBSQU0gYWRhcHRlci4gVGhpcyBjbGFzcyBtYW5hZ2VzIHNlcXVlbmNlcyBzdG9yZWQgaW4gbWVtb3J5LCBhbGxvd2luZyBmb3IgdGhlIGdlbmVyYXRpb25cbiAqIG9mIHNlcXVlbnRpYWwgaWRlbnRpZmllcnMgZm9yIGVudGl0aWVzLlxuICogQHBhcmFtIHtTZXF1ZW5jZU9wdGlvbnN9IG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzZXF1ZW5jZVxuICogQHBhcmFtIHtSYW1BZGFwdGVyfSBhZGFwdGVyIC0gVGhlIFJBTSBhZGFwdGVyIGluc3RhbmNlIHRvIHVzZSBmb3Igc3RvcmFnZVxuICogQGNsYXNzIFJhbVNlcXVlbmNlXG4gKiBAY2F0ZWdvcnkgUmFtXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGEgbmV3IG51bWVyaWMgc2VxdWVuY2Ugc3RhcnRpbmcgYXQgMVxuICogY29uc3Qgc2VxdWVuY2UgPSBuZXcgUmFtU2VxdWVuY2Uoe1xuICogICBuYW1lOiAnb3JkZXJfc2VxdWVuY2UnLFxuICogICB0eXBlOiAnTnVtYmVyJyxcbiAqICAgc3RhcnRXaXRoOiAxLFxuICogICBpbmNyZW1lbnRCeTogMVxuICogfSwgcmFtQWRhcHRlcik7XG4gKlxuICogLy8gR2V0IHRoZSBuZXh0IHZhbHVlIGluIHRoZSBzZXF1ZW5jZVxuICogY29uc3QgbmV4dElkID0gYXdhaXQgc2VxdWVuY2UubmV4dCgpO1xuICpcbiAqIC8vIEdldCBhIHJhbmdlIG9mIHZhbHVlc1xuICogY29uc3QgaWRSYW5nZSA9IGF3YWl0IHNlcXVlbmNlLnJhbmdlKDUpOyAvLyBSZXR1cm5zIDUgc2VxdWVudGlhbCB2YWx1ZXNcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmFtU2VxdWVuY2UgZXh0ZW5kcyBTZXF1ZW5jZSB7XG4gIHByb3RlY3RlZCByZXBvOiBSZXBvPFNlcT47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU2VxdWVuY2VPcHRpb25zLCBhZGFwdGVyOiBSYW1BZGFwdGVyKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5yZXBvID0gUmVwb3NpdG9yeS5mb3JNb2RlbChTZXEsIGFkYXB0ZXIuYWxpYXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlXG4gICAqIEBzdW1tYXJ5IEdldHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlIGZyb20gc3RvcmFnZS4gSWYgdGhlIHNlcXVlbmNlXG4gICAqIGRvZXNuJ3QgZXhpc3QgeWV0LCBpdCByZXR1cm5zIHRoZSBjb25maWd1cmVkIHN0YXJ0aW5nIHZhbHVlLlxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjdXJyZW50IHNlcXVlbmNlIHZhbHVlXG4gICAqL1xuICBhc3luYyBjdXJyZW50KCk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50PiB7XG4gICAgY29uc3QgeyBuYW1lLCBzdGFydFdpdGggfSA9IHRoaXMub3B0aW9ucztcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2VxdWVuY2U6IFNlcSA9IGF3YWl0IHRoaXMucmVwby5yZWFkKG5hbWUgYXMgc3RyaW5nKTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHNlcXVlbmNlLmN1cnJlbnQgYXMgc3RyaW5nIHwgbnVtYmVyKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIHN0YXJ0V2l0aCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIFwiU3RhcnRpbmcgdmFsdWUgaXMgbm90IGRlZmluZWQgZm9yIGEgbm9uIGV4aXN0aW5nIHNlcXVlbmNlXCJcbiAgICAgICAgICApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlKHN0YXJ0V2l0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBwYXJzZSBpbml0aWFsIHZhbHVlIGZvciBzZXF1ZW5jZSAke3N0YXJ0V2l0aH06ICR7ZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmV0cmlldmUgY3VycmVudCB2YWx1ZSBmb3Igc2VxdWVuY2UgJHtuYW1lfTogJHtlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHNlcXVlbmNlIHR5cGVcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYSB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgdHlwZSBmb3IgdGhlIHNlcXVlbmNlIChzdHJpbmcsIG51bWJlciwgb3IgYmlnaW50KVxuICAgKiB1c2luZyB0aGUgYmFzZSBTZXF1ZW5jZSBjbGFzcydzIHBhcnNlVmFsdWUgbWV0aG9kLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IGJpZ2ludH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gcGFyc2VcbiAgICogQHJldHVybiB7c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50fSBUaGUgcGFyc2VkIHZhbHVlIGluIHRoZSBjb3JyZWN0IHR5cGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2UodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCk6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCB7XG4gICAgcmV0dXJuIFNlcXVlbmNlLnBhcnNlVmFsdWUodGhpcy5vcHRpb25zLnR5cGUsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5jcmVtZW50cyB0aGUgc2VxdWVuY2UgdmFsdWVcbiAgICogQHN1bW1hcnkgSW5jcmVhc2VzIHRoZSBjdXJyZW50IHNlcXVlbmNlIHZhbHVlIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50IGFuZCBwZXJzaXN0c1xuICAgKiB0aGUgbmV3IHZhbHVlIHRvIHN0b3JhZ2UuIFRoaXMgbWV0aG9kIGhhbmRsZXMgYm90aCBudW1lcmljIGFuZCBCaWdJbnQgc2VxdWVuY2UgdHlwZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50fSBjdXJyZW50IC0gVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY291bnRdIC0gT3B0aW9uYWwgYW1vdW50IHRvIGluY3JlbWVudCBieSwgZGVmYXVsdHMgdG8gdGhlIHNlcXVlbmNlJ3MgaW5jcmVtZW50QnkgdmFsdWVcbiAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbmV3IHNlcXVlbmNlIHZhbHVlIGFmdGVyIGluY3JlbWVudGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbmNyZW1lbnQoXG4gICAgY3VycmVudDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LFxuICAgIGNvdW50PzogbnVtYmVyXG4gICk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50PiB7XG4gICAgY29uc3QgeyB0eXBlLCBpbmNyZW1lbnRCeSwgbmFtZSB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGxldCBuZXh0OiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ7XG4gICAgY29uc3QgdG9JbmNyZW1lbnRCeSA9IGNvdW50IHx8IGluY3JlbWVudEJ5O1xuICAgIGlmICh0b0luY3JlbWVudEJ5ICUgaW5jcmVtZW50QnkgIT09IDApXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYFZhbHVlIHRvIGluY3JlbWVudCBkb2VzIG5vdCBjb25zaWRlciB0aGUgaW5jcmVtZW50Qnkgc2V0dGluZzogJHtpbmNyZW1lbnRCeX1gXG4gICAgICApO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIk51bWJlclwiOlxuICAgICAgICBuZXh0ID0gKHRoaXMucGFyc2UoY3VycmVudCkgYXMgbnVtYmVyKSArIHRvSW5jcmVtZW50Qnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkJpZ0ludFwiOlxuICAgICAgICBuZXh0ID0gKHRoaXMucGFyc2UoY3VycmVudCkgYXMgYmlnaW50KSArIEJpZ0ludCh0b0luY3JlbWVudEJ5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIlNob3VsZCBuZXZlciBoYXBwZW5cIik7XG4gICAgfVxuICAgIGxldCBzZXE6IFNlcTtcbiAgICBjb25zdCByZXBvID0gdGhpcy5yZXBvLm92ZXJyaWRlKHtcbiAgICAgIGlnbm9yZWRWYWxpZGF0aW9uUHJvcGVydGllczogW1widXBkYXRlZE9uXCJdLFxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBzZXEgPSBhd2FpdCByZXBvLnVwZGF0ZShuZXcgU2VxKHsgaWQ6IG5hbWUsIGN1cnJlbnQ6IG5leHQgfSkpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBzZXEgPSBhd2FpdCByZXBvLmNyZWF0ZShuZXcgU2VxKHsgaWQ6IG5hbWUsIGN1cnJlbnQ6IG5leHQgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXEuY3VycmVudCBhcyBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIG5leHQgdmFsdWUgaW4gdGhlIHNlcXVlbmNlXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc2VxdWVuY2UgYW5kIGluY3JlbWVudHMgaXQgYnkgdGhlXG4gICAqIGNvbmZpZ3VyZWQgaW5jcmVtZW50IGFtb3VudC4gVGhpcyBpcyB0aGUgbWFpbiBtZXRob2QgdXNlZCB0byBnZXQgYSBuZXcgc2VxdWVudGlhbCB2YWx1ZS5cbiAgICogQHJldHVybiBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbmV4dCB2YWx1ZSBpbiB0aGUgc2VxdWVuY2VcbiAgICovXG4gIGFzeW5jIG5leHQoKTogUHJvbWlzZTxudW1iZXIgfCBzdHJpbmcgfCBiaWdpbnQ+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5jdXJyZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuaW5jcmVtZW50KGN1cnJlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSByYW5nZSBvZiBzZXF1ZW50aWFsIHZhbHVlc1xuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNlcXVlbnRpYWwgdmFsdWVzIGZyb20gdGhlIHNlcXVlbmNlLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIGFsbG9jYXRlIG11bHRpcGxlIElEcyBhdCBvbmNlLlxuICAgKiBUaGUgbWV0aG9kIGluY3JlbWVudHMgdGhlIHNlcXVlbmNlIGJ5IHRoZSB0b3RhbCBhbW91bnQgbmVlZGVkIGFuZCByZXR1cm5zIGFsbCB2YWx1ZXMgaW4gdGhlIHJhbmdlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgLSBUaGUgbnVtYmVyIG9mIHNlcXVlbnRpYWwgdmFsdWVzIHRvIGdlbmVyYXRlXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Ygc2VxdWVudGlhbCB2YWx1ZXNcbiAgICovXG4gIGFzeW5jIHJhbmdlKGNvdW50OiBudW1iZXIpOiBQcm9taXNlPChudW1iZXIgfCBzdHJpbmcgfCBiaWdpbnQpW10+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gKGF3YWl0IHRoaXMuY3VycmVudCgpKSBhcyBudW1iZXI7XG4gICAgY29uc3QgaW5jcmVtZW50QnkgPSB0aGlzLnBhcnNlKHRoaXMub3B0aW9ucy5pbmNyZW1lbnRCeSkgYXMgbnVtYmVyO1xuICAgIGNvbnN0IG5leHQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCA9IGF3YWl0IHRoaXMuaW5jcmVtZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgICh0aGlzLnBhcnNlKGNvdW50KSBhcyBudW1iZXIpICogaW5jcmVtZW50QnlcbiAgICApO1xuICAgIGNvbnN0IHJhbmdlOiAobnVtYmVyIHwgc3RyaW5nIHwgYmlnaW50KVtdID0gW107XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8PSBjb3VudDsgaSsrKSB7XG4gICAgICByYW5nZS5wdXNoKGN1cnJlbnQgKyBpbmNyZW1lbnRCeSAqICh0aGlzLnBhcnNlKGkpIGFzIG51bWJlcikpO1xuICAgIH1cbiAgICBpZiAocmFuZ2VbcmFuZ2UubGVuZ3RoIC0gMV0gIT09IG5leHQpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIk1pc2NhbGN1bGF0aW9uIG9mIHJhbmdlXCIpO1xuICAgIHJldHVybiByYW5nZTtcbiAgfVxufVxuXG4iXX0=
@@ -3,12 +3,73 @@ import { Sequence } from "../persistence";
3
3
  import { SequenceOptions } from "../interfaces";
4
4
  import { RamAdapter } from "./RamAdapter";
5
5
  import { Repo } from "../repository";
6
+ /**
7
+ * @description RAM-specific sequence implementation
8
+ * @summary Extends the base Sequence class to provide auto-incrementing sequence functionality
9
+ * for the RAM adapter. This class manages sequences stored in memory, allowing for the generation
10
+ * of sequential identifiers for entities.
11
+ * @param {SequenceOptions} options - Configuration options for the sequence
12
+ * @param {RamAdapter} adapter - The RAM adapter instance to use for storage
13
+ * @class RamSequence
14
+ * @category Ram
15
+ * @example
16
+ * ```typescript
17
+ * // Create a new numeric sequence starting at 1
18
+ * const sequence = new RamSequence({
19
+ * name: 'order_sequence',
20
+ * type: 'Number',
21
+ * startWith: 1,
22
+ * incrementBy: 1
23
+ * }, ramAdapter);
24
+ *
25
+ * // Get the next value in the sequence
26
+ * const nextId = await sequence.next();
27
+ *
28
+ * // Get a range of values
29
+ * const idRange = await sequence.range(5); // Returns 5 sequential values
30
+ * ```
31
+ */
6
32
  export declare class RamSequence extends Sequence {
7
33
  protected repo: Repo<Seq>;
8
34
  constructor(options: SequenceOptions, adapter: RamAdapter);
35
+ /**
36
+ * @description Retrieves the current value of the sequence
37
+ * @summary Gets the current value of the sequence from storage. If the sequence
38
+ * doesn't exist yet, it returns the configured starting value.
39
+ * @return A promise that resolves to the current sequence value
40
+ */
9
41
  current(): Promise<string | number | bigint>;
42
+ /**
43
+ * @description Parses a value according to the sequence type
44
+ * @summary Converts a value to the appropriate type for the sequence (string, number, or bigint)
45
+ * using the base Sequence class's parseValue method.
46
+ * @param {string | number | bigint} value - The value to parse
47
+ * @return {string | number | bigint} The parsed value in the correct type
48
+ */
10
49
  private parse;
50
+ /**
51
+ * @description Increments the sequence value
52
+ * @summary Increases the current sequence value by the specified amount and persists
53
+ * the new value to storage. This method handles both numeric and BigInt sequence types.
54
+ * @param {string | number | bigint} current - The current value of the sequence
55
+ * @param {number} [count] - Optional amount to increment by, defaults to the sequence's incrementBy value
56
+ * @return A promise that resolves to the new sequence value after incrementing
57
+ */
11
58
  private increment;
59
+ /**
60
+ * @description Gets the next value in the sequence
61
+ * @summary Retrieves the current value of the sequence and increments it by the
62
+ * configured increment amount. This is the main method used to get a new sequential value.
63
+ * @return A promise that resolves to the next value in the sequence
64
+ */
12
65
  next(): Promise<number | string | bigint>;
66
+ /**
67
+ * @description Generates a range of sequential values
68
+ * @summary Retrieves a specified number of sequential values from the sequence.
69
+ * This is useful when you need to allocate multiple IDs at once.
70
+ * The method increments the sequence by the total amount needed and returns all values in the range.
71
+ * @param {number} count - The number of sequential values to generate
72
+ * @return A promise that resolves to an array of sequential values
73
+ */
13
74
  range(count: number): Promise<(number | string | bigint)[]>;
14
75
  }
@@ -6,10 +6,43 @@ const RamPaginator_1 = require("./RamPaginator.cjs");
6
6
  const db_decorators_1 = require("@decaf-ts/db-decorators");
7
7
  const Statement_1 = require("./../query/Statement.cjs");
8
8
  const reflection_1 = require("@decaf-ts/reflection");
9
+ /**
10
+ * @description RAM-specific query statement builder
11
+ * @summary Extends the base Statement class to provide query building functionality for the RAM adapter.
12
+ * This class translates high-level query operations into predicates that can filter and sort
13
+ * in-memory data structures.
14
+ * @template M - The model type being queried
15
+ * @template R - The result type returned by the query
16
+ * @param {RamAdapter} adapter - The RAM adapter instance to use for executing queries
17
+ * @class RamStatement
18
+ * @category Ram
19
+ * @example
20
+ * ```typescript
21
+ * // Create a statement for querying User models
22
+ * const statement = new RamStatement<User, User>(ramAdapter);
23
+ *
24
+ * // Build a query to find active users with age > 18
25
+ * const results = await statement
26
+ * .from(User)
27
+ * .where(Condition.and(
28
+ * Condition.eq('active', true),
29
+ * Condition.gt('age', 18)
30
+ * ))
31
+ * .orderBy('lastName', 'asc')
32
+ * .limit(10)
33
+ * .execute();
34
+ * ```
35
+ */
9
36
  class RamStatement extends Statement_1.Statement {
10
37
  constructor(adapter) {
11
38
  super(adapter);
12
39
  }
40
+ /**
41
+ * @description Creates a sort comparator function
42
+ * @summary Generates a function that compares two model instances based on the orderBy criteria.
43
+ * This method handles different data types (string, number, date) and sort directions (asc, desc).
44
+ * @return {function(Model, Model): number} A comparator function for sorting model instances
45
+ */
13
46
  getSort() {
14
47
  return (el1, el2) => {
15
48
  if (!this.orderBySelector)
@@ -42,6 +75,13 @@ class RamStatement extends Statement_1.Statement {
42
75
  }
43
76
  };
44
77
  }
78
+ /**
79
+ * @description Builds a RAM query from the statement
80
+ * @summary Converts the statement's selectors and conditions into a RawRamQuery object
81
+ * that can be executed by the RAM adapter. This method assembles all query components
82
+ * (select, from, where, limit, offset, sort) into the final query structure.
83
+ * @return {RawRamQuery<M>} The constructed RAM query object
84
+ */
45
85
  build() {
46
86
  const result = {
47
87
  select: this.selectSelector,
@@ -59,6 +99,13 @@ class RamStatement extends Statement_1.Statement {
59
99
  result.sort = this.getSort();
60
100
  return result;
61
101
  }
102
+ /**
103
+ * @description Creates a paginator for the query
104
+ * @summary Builds the query and wraps it in a RamPaginator to enable pagination of results.
105
+ * This allows retrieving large result sets in smaller chunks.
106
+ * @param {number} size - The page size (number of results per page)
107
+ * @return {Promise<Paginator<M, R, RawRamQuery<M>>>} A promise that resolves to a paginator for the query
108
+ */
62
109
  async paginate(size) {
63
110
  try {
64
111
  const query = this.build();
@@ -68,6 +115,33 @@ class RamStatement extends Statement_1.Statement {
68
115
  throw new db_decorators_1.InternalError(e);
69
116
  }
70
117
  }
118
+ /**
119
+ * @description Parses a condition into a RAM query predicate
120
+ * @summary Converts a Condition object into a predicate function that can be used
121
+ * to filter model instances in memory. This method handles both simple conditions
122
+ * (equals, greater than, etc.) and complex conditions with logical operators (AND, OR).
123
+ * @template M - The model type for the condition
124
+ * @param {Condition<M>} condition - The condition to parse
125
+ * @return {RawRamQuery<M>} A RAM query object with a where predicate function
126
+ * @mermaid
127
+ * sequenceDiagram
128
+ * participant Caller
129
+ * participant RamStatement
130
+ * participant SimpleCondition
131
+ * participant ComplexCondition
132
+ *
133
+ * Caller->>RamStatement: parseCondition(condition)
134
+ * alt Simple condition (eq, gt, lt, etc.)
135
+ * RamStatement->>SimpleCondition: Extract attr1, operator, comparison
136
+ * SimpleCondition-->>RamStatement: Return predicate function
137
+ * else Logical operator (AND, OR)
138
+ * RamStatement->>ComplexCondition: Extract nested conditions
139
+ * RamStatement->>RamStatement: parseCondition(leftCondition)
140
+ * RamStatement->>RamStatement: parseCondition(rightCondition)
141
+ * ComplexCondition-->>RamStatement: Combine predicates with logical operator
142
+ * end
143
+ * RamStatement-->>Caller: Return query with where predicate
144
+ */
71
145
  parseCondition(condition) {
72
146
  return {
73
147
  where: (m) => {
@@ -114,4 +188,4 @@ class RamStatement extends Statement_1.Statement {
114
188
  }
115
189
  }
116
190
  exports.RamStatement = RamStatement;
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JhbS9SYW1TdGF0ZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBTWtCO0FBR2xCLHFEQUE4QztBQUM5QywyREFBd0Q7QUFDeEQsd0RBQStDO0FBQy9DLHFEQUFrRDtBQUdsRCxNQUFhLFlBQWlDLFNBQVEscUJBSXJEO0lBQ0MsWUFBWSxPQUFtQjtRQUM3QixLQUFLLENBQUMsT0FBYyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVPLE9BQU87UUFDYixPQUFPLENBQUMsR0FBVSxFQUFFLEdBQVUsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZTtnQkFDdkIsTUFBTSxJQUFJLDZCQUFhLENBQ3JCLCtDQUErQyxDQUNoRCxDQUFDO1lBQ0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUN0QyxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUNsQyxNQUFNLElBQUksR0FBRyx1QkFBVSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxHQUFhLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsSUFBSTtnQkFDUCxNQUFNLElBQUksa0JBQVUsQ0FBQyxxQ0FBcUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUVwRSxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssUUFBUSxDQUFDO2dCQUNkLEtBQUssUUFBUTtvQkFDWCxPQUFPLENBQ0wsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixHQUFHLENBQUMsR0FBa0IsQ0FBdUIsQ0FBQyxhQUFhLENBQzFELEdBQUcsQ0FBQyxHQUFrQixDQUFzQixDQUM3QyxDQUNGLENBQUM7Z0JBQ0osS0FBSyxRQUFRLENBQUM7Z0JBQ2QsS0FB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LENBQUM7d0JBQ2pCLEtBQUsscUJBQWEsQ0FBQyxHQUFHOzRCQUNwQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdEMsS0FBSyxxQkFBYSxDQUFDLEVBQUU7NEJBQ25CLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN0Qzs0QkFDRSxNQUFNLElBQUksNkJBQWEsQ0FDckIsNENBQTRDLFFBQVEsRUFBRSxDQUN2RCxDQUFDO29CQUNOLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7U0FDa0IsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFySkQsb0NBcUpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29uZGl0aW9uLFxuICBHcm91cE9wZXJhdG9yLFxuICBPcGVyYXRvcixcbiAgUGFnaW5hdG9yLFxuICBRdWVyeUVycm9yLFxufSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IFJhd1JhbVF1ZXJ5IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUmFtUGFnaW5hdG9yIH0gZnJvbSBcIi4vUmFtUGFnaW5hdG9yXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBTdGF0ZW1lbnQgfSBmcm9tIFwiLi4vcXVlcnkvU3RhdGVtZW50XCI7XG5pbXBvcnQgeyBSZWZsZWN0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyBSYW1BZGFwdGVyIH0gZnJvbSBcIi4vUmFtQWRhcHRlclwiO1xuXG5leHBvcnQgY2xhc3MgUmFtU3RhdGVtZW50PE0gZXh0ZW5kcyBNb2RlbCwgUj4gZXh0ZW5kcyBTdGF0ZW1lbnQ8XG4gIFJhd1JhbVF1ZXJ5PE0+LFxuICBNLFxuICBSXG4+IHtcbiAgY29uc3RydWN0b3IoYWRhcHRlcjogUmFtQWRhcHRlcikge1xuICAgIHN1cGVyKGFkYXB0ZXIgYXMgYW55KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydCgpIHtcbiAgICByZXR1cm4gKGVsMTogTW9kZWwsIGVsMjogTW9kZWwpID0+IHtcbiAgICAgIGlmICghdGhpcy5vcmRlckJ5U2VsZWN0b3IpXG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgIFwib3JkZXJCeVNlbGVjdG9yIG5vdCBzZXQuIFNob3VsZCBiZSBpbXBvc3NpYmxlXCJcbiAgICAgICAgKTtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5vcmRlckJ5U2VsZWN0b3I7XG4gICAgICBjb25zdCBba2V5LCBkaXJlY3Rpb25dID0gc2VsZWN0b3I7XG4gICAgICBjb25zdCB0eXBlID0gUmVmbGVjdGlvbi5nZXRUeXBlRnJvbURlY29yYXRvcihlbDEsIGtleSBhcyBzdHJpbmcpO1xuICAgICAgaWYgKCF0eXBlKVxuICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihgdHlwZSBub3QgY29tcGF0aWJsZSB3aXRoIHNvcnRpbmc6ICR7dHlwZX1gKTtcblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZGlyZWN0aW9uID09PSBcImFzY1wiID8gMSA6IC0xKSAqXG4gICAgICAgICAgICAoZWwxW2tleSBhcyBrZXlvZiBNb2RlbF0gYXMgdW5rbm93biBhcyBzdHJpbmcpLmxvY2FsZUNvbXBhcmUoXG4gICAgICAgICAgICAgIGVsMltrZXkgYXMga2V5b2YgTW9kZWxdIGFzIHVua25vd24gYXMgc3RyaW5nXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICBjYXNlIFwiTnVtYmVyXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChkaXJlY3Rpb24gPT09IFwiYXNjXCIgPyAxIDogLTEpICpcbiAgICAgICAgICAgICgoZWwxW2tleSBhcyBrZXlvZiBNb2RlbF0gYXMgdW5rbm93biBhcyBudW1iZXIpIC1cbiAgICAgICAgICAgICAgKGVsMltrZXkgYXMga2V5b2YgTW9kZWxdIGFzIHVua25vd24gYXMgbnVtYmVyKSlcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIGNhc2UgXCJPYmplY3RcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBlbDFba2V5IGFzIGtleW9mIE1vZGVsXSBpbnN0YW5jZW9mIERhdGUgJiZcbiAgICAgICAgICAgIGVsMltrZXkgYXMga2V5b2YgTW9kZWxdIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChkaXJlY3Rpb24gPT09IFwiYXNjXCIgPyAxIDogLTEpICpcbiAgICAgICAgICAgICAgKChlbDFba2V5IGFzIGtleW9mIE1vZGVsXSBhcyB1bmtub3duIGFzIERhdGUpLnZhbHVlT2YoKSAtXG4gICAgICAgICAgICAgICAgKGVsMltrZXkgYXMga2V5b2YgTW9kZWxdIGFzIHVua25vd24gYXMgRGF0ZSkudmFsdWVPZigpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihgU29ydGluZyBub3Qgc3VwcG9ydGVkIGZvciBub3QgZGF0ZSBjbGFzc2VzYCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoYHNvcnRpbmcgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAke3R5cGV9YCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZCgpOiBSYXdSYW1RdWVyeTxNPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSYXdSYW1RdWVyeTxNPiA9IHtcbiAgICAgIHNlbGVjdDogdGhpcy5zZWxlY3RTZWxlY3RvcixcbiAgICAgIGZyb206IHRoaXMuZnJvbVNlbGVjdG9yLFxuICAgICAgd2hlcmU6IHRoaXMud2hlcmVDb25kaXRpb25cbiAgICAgICAgPyB0aGlzLnBhcnNlQ29uZGl0aW9uKHRoaXMud2hlcmVDb25kaXRpb24pLndoZXJlXG4gICAgICAgIDogLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgIChlbDogTSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSxcbiAgICAgIGxpbWl0OiB0aGlzLmxpbWl0U2VsZWN0b3IsXG4gICAgICBza2lwOiB0aGlzLm9mZnNldFNlbGVjdG9yLFxuICAgIH07XG4gICAgaWYgKHRoaXMub3JkZXJCeVNlbGVjdG9yKSByZXN1bHQuc29ydCA9IHRoaXMuZ2V0U29ydCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBwYWdpbmF0ZShzaXplOiBudW1iZXIpOiBQcm9taXNlPFBhZ2luYXRvcjxNLCBSLCBSYXdSYW1RdWVyeTxNPj4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmJ1aWxkKCk7XG4gICAgICByZXR1cm4gbmV3IFJhbVBhZ2luYXRvcjxNLCBSPihcbiAgICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGhpcy5mcm9tU2VsZWN0b3JcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZUNvbmRpdGlvbjxNIGV4dGVuZHMgTW9kZWw+KGNvbmRpdGlvbjogQ29uZGl0aW9uPE0+KTogUmF3UmFtUXVlcnk8TT4ge1xuICAgIHJldHVybiB7XG4gICAgICB3aGVyZTogKG06IE1vZGVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYXR0cjEsIG9wZXJhdG9yLCBjb21wYXJpc29uIH0gPSBjb25kaXRpb24gYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgYXR0cjE6IHN0cmluZyB8IENvbmRpdGlvbjxNPjtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IgfCBHcm91cE9wZXJhdG9yO1xuICAgICAgICAgIGNvbXBhcmlzb246IGFueTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgW0dyb3VwT3BlcmF0b3IuQU5ELCBHcm91cE9wZXJhdG9yLk9SLCBPcGVyYXRvci5OT1RdLmluZGV4T2YoXG4gICAgICAgICAgICBvcGVyYXRvciBhcyBHcm91cE9wZXJhdG9yXG4gICAgICAgICAgKSA9PT0gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5CSUdHRVI6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA+IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkJJR0dFUl9FUTpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdID49IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkRJRkZFUkVOVDpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdICE9PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5FUVVBTDpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdID09PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5SRUdFWFA6XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgbVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoXG4gICAgICAgICAgICAgICAgICBgSW52YWxpZCByZWdleHAgY29tcGFyaXNvbiBvbiBhIG5vbiBzdHJpbmcgYXR0cmlidXRlOiAke21bYXR0cjEgYXMga2V5b2YgTW9kZWxdfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gISEobVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gYXMgdW5rbm93biBhcyBzdHJpbmcpLm1hdGNoKFxuICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoY29tcGFyaXNvbiwgXCJnXCIpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlNNQUxMRVI6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA8IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlNNQUxMRVJfRVE6XG4gICAgICAgICAgICAgIHJldHVybiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSA8PSBjb21wYXJpc29uO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICAgICAgYEludmFsaWQgb3BlcmF0b3IgZm9yIHN0YW5kYXJkIGNvbXBhcmlzb25zOiAke29wZXJhdG9yfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09IE9wZXJhdG9yLk5PVCkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG9wMTogUmF3UmFtUXVlcnk8YW55PiA9IHRoaXMucGFyc2VDb25kaXRpb24oXG4gICAgICAgICAgICBhdHRyMSBhcyBDb25kaXRpb248TT5cbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG9wMjogUmF3UmFtUXVlcnk8YW55PiA9IHRoaXMucGFyc2VDb25kaXRpb24oXG4gICAgICAgICAgICBjb21wYXJpc29uIGFzIENvbmRpdGlvbjxNPlxuICAgICAgICAgICk7XG4gICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSBHcm91cE9wZXJhdG9yLkFORDpcbiAgICAgICAgICAgICAgcmV0dXJuIG9wMS53aGVyZShtKSAmJiBvcDIud2hlcmUobSk7XG4gICAgICAgICAgICBjYXNlIEdyb3VwT3BlcmF0b3IuT1I6XG4gICAgICAgICAgICAgIHJldHVybiBvcDEud2hlcmUobSkgfHwgb3AyLndoZXJlKG0pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICAgICAgYEludmFsaWQgb3BlcmF0b3IgZm9yIEFuZC9PciBjb21wYXJpc29uczogJHtvcGVyYXRvcn1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0gYXMgUmF3UmFtUXVlcnk8YW55PjtcbiAgfVxufVxuIl19
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtU3RhdGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JhbS9SYW1TdGF0ZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBTWtCO0FBR2xCLHFEQUE4QztBQUM5QywyREFBd0Q7QUFDeEQsd0RBQStDO0FBQy9DLHFEQUFrRDtBQUdsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFhLFlBQWlDLFNBQVEscUJBSXJEO0lBQ0MsWUFBWSxPQUFtQjtRQUM3QixLQUFLLENBQUMsT0FBYyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssT0FBTztRQUNiLE9BQU8sQ0FBQyxHQUFVLEVBQUUsR0FBVSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO2dCQUN2QixNQUFNLElBQUksNkJBQWEsQ0FDckIsK0NBQStDLENBQ2hELENBQUM7WUFDSixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLHVCQUFVLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLEdBQWEsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxJQUFJO2dCQUNQLE1BQU0sSUFBSSxrQkFBVSxDQUFDLHFDQUFxQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRXBFLFFBQVEsSUFBSSxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxRQUFRLENBQUM7Z0JBQ2QsS0FBSyxRQUFRO29CQUNYLE9BQU8sQ0FDTCxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzdCLEdBQUcsQ0FBQyxHQUFrQixDQUF1QixDQUFDLGFBQWEsQ0FDMUQsR0FBRyxDQUFDLEdBQWtCLENB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QUksQ0FBQyxjQUFjLENBQy9DLEtBQXFCLENBQ3RCLENBQUM7b0JBQ0YsTUFBTSxHQUFHLEdBQXFCLElBQUksQ0FBQyxjQUFjLENBQy9DLFVBQTBCLENBQzNCLENBQUM7b0JBQ0YsUUFBUSxRQUFRLEVBQUUsQ0FBQzt3QkFDakIsS0FBSyxxQkFBYSxDQUFDLEdBQUc7NEJBQ3BCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxLQUFLLHFCQUFhLENBQUMsRUFBRTs0QkFDbkIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3RDOzRCQUNFLE1BQU0sSUFBSSw2QkFBYSxDQUNyQiw0Q0FBNEMsUUFBUSxFQUFFLENBQ3ZELENBQUM7b0JBQ04sQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztTQUNrQixDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQXBNRCxvQ0FvTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb25kaXRpb24sXG4gIEdyb3VwT3BlcmF0b3IsXG4gIE9wZXJhdG9yLFxuICBQYWdpbmF0b3IsXG4gIFF1ZXJ5RXJyb3IsXG59IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgUmF3UmFtUXVlcnkgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSYW1QYWdpbmF0b3IgfSBmcm9tIFwiLi9SYW1QYWdpbmF0b3JcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFN0YXRlbWVudCB9IGZyb20gXCIuLi9xdWVyeS9TdGF0ZW1lbnRcIjtcbmltcG9ydCB7IFJlZmxlY3Rpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IFJhbUFkYXB0ZXIgfSBmcm9tIFwiLi9SYW1BZGFwdGVyXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJBTS1zcGVjaWZpYyBxdWVyeSBzdGF0ZW1lbnQgYnVpbGRlclxuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgYmFzZSBTdGF0ZW1lbnQgY2xhc3MgdG8gcHJvdmlkZSBxdWVyeSBidWlsZGluZyBmdW5jdGlvbmFsaXR5IGZvciB0aGUgUkFNIGFkYXB0ZXIuXG4gKiBUaGlzIGNsYXNzIHRyYW5zbGF0ZXMgaGlnaC1sZXZlbCBxdWVyeSBvcGVyYXRpb25zIGludG8gcHJlZGljYXRlcyB0aGF0IGNhbiBmaWx0ZXIgYW5kIHNvcnRcbiAqIGluLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMuXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGJlaW5nIHF1ZXJpZWRcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlIHJldHVybmVkIGJ5IHRoZSBxdWVyeVxuICogQHBhcmFtIHtSYW1BZGFwdGVyfSBhZGFwdGVyIC0gVGhlIFJBTSBhZGFwdGVyIGluc3RhbmNlIHRvIHVzZSBmb3IgZXhlY3V0aW5nIHF1ZXJpZXNcbiAqIEBjbGFzcyBSYW1TdGF0ZW1lbnRcbiAqIEBjYXRlZ29yeSBSYW1cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgYSBzdGF0ZW1lbnQgZm9yIHF1ZXJ5aW5nIFVzZXIgbW9kZWxzXG4gKiBjb25zdCBzdGF0ZW1lbnQgPSBuZXcgUmFtU3RhdGVtZW50PFVzZXIsIFVzZXI+KHJhbUFkYXB0ZXIpO1xuICpcbiAqIC8vIEJ1aWxkIGEgcXVlcnkgdG8gZmluZCBhY3RpdmUgdXNlcnMgd2l0aCBhZ2UgPiAxOFxuICogY29uc3QgcmVzdWx0cyA9IGF3YWl0IHN0YXRlbWVudFxuICogICAuZnJvbShVc2VyKVxuICogICAud2hlcmUoQ29uZGl0aW9uLmFuZChcbiAqICAgICBDb25kaXRpb24uZXEoJ2FjdGl2ZScsIHRydWUpLFxuICogICAgIENvbmRpdGlvbi5ndCgnYWdlJywgMTgpXG4gKiAgICkpXG4gKiAgIC5vcmRlckJ5KCdsYXN0TmFtZScsICdhc2MnKVxuICogICAubGltaXQoMTApXG4gKiAgIC5leGVjdXRlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFJhbVN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWwsIFI+IGV4dGVuZHMgU3RhdGVtZW50PFxuICBSYXdSYW1RdWVyeTxNPixcbiAgTSxcbiAgUlxuPiB7XG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXI6IFJhbUFkYXB0ZXIpIHtcbiAgICBzdXBlcihhZGFwdGVyIGFzIGFueSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBzb3J0IGNvbXBhcmF0b3IgZnVuY3Rpb25cbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgZnVuY3Rpb24gdGhhdCBjb21wYXJlcyB0d28gbW9kZWwgaW5zdGFuY2VzIGJhc2VkIG9uIHRoZSBvcmRlckJ5IGNyaXRlcmlhLlxuICAgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGRpZmZlcmVudCBkYXRhIHR5cGVzIChzdHJpbmcsIG51bWJlciwgZGF0ZSkgYW5kIHNvcnQgZGlyZWN0aW9ucyAoYXNjLCBkZXNjKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb24oTW9kZWwsIE1vZGVsKTogbnVtYmVyfSBBIGNvbXBhcmF0b3IgZnVuY3Rpb24gZm9yIHNvcnRpbmcgbW9kZWwgaW5zdGFuY2VzXG4gICAqL1xuICBwcml2YXRlIGdldFNvcnQoKSB7XG4gICAgcmV0dXJuIChlbDE6IE1vZGVsLCBlbDI6IE1vZGVsKSA9PiB7XG4gICAgICBpZiAoIXRoaXMub3JkZXJCeVNlbGVjdG9yKVxuICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICBcIm9yZGVyQnlTZWxlY3RvciBub3Qgc2V0LiBTaG91bGQgYmUgaW1wb3NzaWJsZVwiXG4gICAgICAgICk7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMub3JkZXJCeVNlbGVjdG9yO1xuICAgICAgY29uc3QgW2tleSwgZGlyZWN0aW9uXSA9IHNlbGVjdG9yO1xuICAgICAgY29uc3QgdHlwZSA9IFJlZmxlY3Rpb24uZ2V0VHlwZUZyb21EZWNvcmF0b3IoZWwxLCBrZXkgYXMgc3RyaW5nKTtcbiAgICAgIGlmICghdHlwZSlcbiAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoYHR5cGUgbm90IGNvbXBhdGlibGUgd2l0aCBzb3J0aW5nOiAke3R5cGV9YCk7XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIGNhc2UgXCJTdHJpbmdcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGRpcmVjdGlvbiA9PT0gXCJhc2NcIiA/IDEgOiAtMSkgKlxuICAgICAgICAgICAgKGVsMVtrZXkgYXMga2V5b2YgTW9kZWxdIGFzIHVua25vd24gYXMgc3RyaW5nKS5sb2NhbGVDb21wYXJlKFxuICAgICAgICAgICAgICBlbDJba2V5IGFzIGtleW9mIE1vZGVsXSBhcyB1bmtub3duIGFzIHN0cmluZ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgY2FzZSBcIk51bWJlclwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZGlyZWN0aW9uID09PSBcImFzY1wiID8gMSA6IC0xKSAqXG4gICAgICAgICAgICAoKGVsMVtrZXkgYXMga2V5b2YgTW9kZWxdIGFzIHVua25vd24gYXMgbnVtYmVyKSAtXG4gICAgICAgICAgICAgIChlbDJba2V5IGFzIGtleW9mIE1vZGVsXSBhcyB1bmtub3duIGFzIG51bWJlcikpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZWwxW2tleSBhcyBrZXlvZiBNb2RlbF0gaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgICAgICBlbDJba2V5IGFzIGtleW9mIE1vZGVsXSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoZGlyZWN0aW9uID09PSBcImFzY1wiID8gMSA6IC0xKSAqXG4gICAgICAgICAgICAgICgoZWwxW2tleSBhcyBrZXlvZiBNb2RlbF0gYXMgdW5rbm93biBhcyBEYXRlKS52YWx1ZU9mKCkgLVxuICAgICAgICAgICAgICAgIChlbDJba2V5IGFzIGtleW9mIE1vZGVsXSBhcyB1bmtub3duIGFzIERhdGUpLnZhbHVlT2YoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5RXJyb3IoYFNvcnRpbmcgbm90IHN1cHBvcnRlZCBmb3Igbm90IGRhdGUgY2xhc3Nlc2ApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKGBzb3J0aW5nIG5vdCBzdXBwb3J0ZWQgZm9yIHR5cGUgJHt0eXBlfWApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEJ1aWxkcyBhIFJBTSBxdWVyeSBmcm9tIHRoZSBzdGF0ZW1lbnRcbiAgICogQHN1bW1hcnkgQ29udmVydHMgdGhlIHN0YXRlbWVudCdzIHNlbGVjdG9ycyBhbmQgY29uZGl0aW9ucyBpbnRvIGEgUmF3UmFtUXVlcnkgb2JqZWN0XG4gICAqIHRoYXQgY2FuIGJlIGV4ZWN1dGVkIGJ5IHRoZSBSQU0gYWRhcHRlci4gVGhpcyBtZXRob2QgYXNzZW1ibGVzIGFsbCBxdWVyeSBjb21wb25lbnRzXG4gICAqIChzZWxlY3QsIGZyb20sIHdoZXJlLCBsaW1pdCwgb2Zmc2V0LCBzb3J0KSBpbnRvIHRoZSBmaW5hbCBxdWVyeSBzdHJ1Y3R1cmUuXG4gICAqIEByZXR1cm4ge1Jhd1JhbVF1ZXJ5PE0+fSBUaGUgY29uc3RydWN0ZWQgUkFNIHF1ZXJ5IG9iamVjdFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkKCk6IFJhd1JhbVF1ZXJ5PE0+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJhd1JhbVF1ZXJ5PE0+ID0ge1xuICAgICAgc2VsZWN0OiB0aGlzLnNlbGVjdFNlbGVjdG9yLFxuICAgICAgZnJvbTogdGhpcy5mcm9tU2VsZWN0b3IsXG4gICAgICB3aGVyZTogdGhpcy53aGVyZUNvbmRpdGlvblxuICAgICAgICA/IHRoaXMucGFyc2VDb25kaXRpb24odGhpcy53aGVyZUNvbmRpdGlvbikud2hlcmVcbiAgICAgICAgOiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgKGVsOiBNKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgbGltaXQ6IHRoaXMubGltaXRTZWxlY3RvcixcbiAgICAgIHNraXA6IHRoaXMub2Zmc2V0U2VsZWN0b3IsXG4gICAgfTtcbiAgICBpZiAodGhpcy5vcmRlckJ5U2VsZWN0b3IpIHJlc3VsdC5zb3J0ID0gdGhpcy5nZXRTb3J0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHBhZ2luYXRvciBmb3IgdGhlIHF1ZXJ5XG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUgcXVlcnkgYW5kIHdyYXBzIGl0IGluIGEgUmFtUGFnaW5hdG9yIHRvIGVuYWJsZSBwYWdpbmF0aW9uIG9mIHJlc3VsdHMuXG4gICAqIFRoaXMgYWxsb3dzIHJldHJpZXZpbmcgbGFyZ2UgcmVzdWx0IHNldHMgaW4gc21hbGxlciBjaHVua3MuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIC0gVGhlIHBhZ2Ugc2l6ZSAobnVtYmVyIG9mIHJlc3VsdHMgcGVyIHBhZ2UpXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UGFnaW5hdG9yPE0sIFIsIFJhd1JhbVF1ZXJ5PE0+Pj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgcGFnaW5hdG9yIGZvciB0aGUgcXVlcnlcbiAgICovXG4gIGFzeW5jIHBhZ2luYXRlKHNpemU6IG51bWJlcik6IFByb21pc2U8UGFnaW5hdG9yPE0sIFIsIFJhd1JhbVF1ZXJ5PE0+Pj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuYnVpbGQoKTtcbiAgICAgIHJldHVybiBuZXcgUmFtUGFnaW5hdG9yPE0sIFI+KFxuICAgICAgICB0aGlzLmFkYXB0ZXIsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBzaXplLFxuICAgICAgICB0aGlzLmZyb21TZWxlY3RvclxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGEgY29uZGl0aW9uIGludG8gYSBSQU0gcXVlcnkgcHJlZGljYXRlXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIGEgQ29uZGl0aW9uIG9iamVjdCBpbnRvIGEgcHJlZGljYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWRcbiAgICogdG8gZmlsdGVyIG1vZGVsIGluc3RhbmNlcyBpbiBtZW1vcnkuIFRoaXMgbWV0aG9kIGhhbmRsZXMgYm90aCBzaW1wbGUgY29uZGl0aW9uc1xuICAgKiAoZXF1YWxzLCBncmVhdGVyIHRoYW4sIGV0Yy4pIGFuZCBjb21wbGV4IGNvbmRpdGlvbnMgd2l0aCBsb2dpY2FsIG9wZXJhdG9ycyAoQU5ELCBPUikuXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZm9yIHRoZSBjb25kaXRpb25cbiAgICogQHBhcmFtIHtDb25kaXRpb248TT59IGNvbmRpdGlvbiAtIFRoZSBjb25kaXRpb24gdG8gcGFyc2VcbiAgICogQHJldHVybiB7UmF3UmFtUXVlcnk8TT59IEEgUkFNIHF1ZXJ5IG9iamVjdCB3aXRoIGEgd2hlcmUgcHJlZGljYXRlIGZ1bmN0aW9uXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IFJhbVN0YXRlbWVudFxuICAgKiAgIHBhcnRpY2lwYW50IFNpbXBsZUNvbmRpdGlvblxuICAgKiAgIHBhcnRpY2lwYW50IENvbXBsZXhDb25kaXRpb25cbiAgICpcbiAgICogICBDYWxsZXItPj5SYW1TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKGNvbmRpdGlvbilcbiAgICogICBhbHQgU2ltcGxlIGNvbmRpdGlvbiAoZXEsIGd0LCBsdCwgZXRjLilcbiAgICogICAgIFJhbVN0YXRlbWVudC0+PlNpbXBsZUNvbmRpdGlvbjogRXh0cmFjdCBhdHRyMSwgb3BlcmF0b3IsIGNvbXBhcmlzb25cbiAgICogICAgIFNpbXBsZUNvbmRpdGlvbi0tPj5SYW1TdGF0ZW1lbnQ6IFJldHVybiBwcmVkaWNhdGUgZnVuY3Rpb25cbiAgICogICBlbHNlIExvZ2ljYWwgb3BlcmF0b3IgKEFORCwgT1IpXG4gICAqICAgICBSYW1TdGF0ZW1lbnQtPj5Db21wbGV4Q29uZGl0aW9uOiBFeHRyYWN0IG5lc3RlZCBjb25kaXRpb25zXG4gICAqICAgICBSYW1TdGF0ZW1lbnQtPj5SYW1TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKGxlZnRDb25kaXRpb24pXG4gICAqICAgICBSYW1TdGF0ZW1lbnQtPj5SYW1TdGF0ZW1lbnQ6IHBhcnNlQ29uZGl0aW9uKHJpZ2h0Q29uZGl0aW9uKVxuICAgKiAgICAgQ29tcGxleENvbmRpdGlvbi0tPj5SYW1TdGF0ZW1lbnQ6IENvbWJpbmUgcHJlZGljYXRlcyB3aXRoIGxvZ2ljYWwgb3BlcmF0b3JcbiAgICogICBlbmRcbiAgICogICBSYW1TdGF0ZW1lbnQtLT4+Q2FsbGVyOiBSZXR1cm4gcXVlcnkgd2l0aCB3aGVyZSBwcmVkaWNhdGVcbiAgICovXG4gIHBhcnNlQ29uZGl0aW9uPE0gZXh0ZW5kcyBNb2RlbD4oY29uZGl0aW9uOiBDb25kaXRpb248TT4pOiBSYXdSYW1RdWVyeTxNPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdoZXJlOiAobTogTW9kZWwpID0+IHtcbiAgICAgICAgY29uc3QgeyBhdHRyMSwgb3BlcmF0b3IsIGNvbXBhcmlzb24gfSA9IGNvbmRpdGlvbiBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICBhdHRyMTogc3RyaW5nIHwgQ29uZGl0aW9uPE0+O1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvciB8IEdyb3VwT3BlcmF0b3I7XG4gICAgICAgICAgY29tcGFyaXNvbjogYW55O1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBbR3JvdXBPcGVyYXRvci5BTkQsIEdyb3VwT3BlcmF0b3IuT1IsIE9wZXJhdG9yLk5PVF0uaW5kZXhPZihcbiAgICAgICAgICAgIG9wZXJhdG9yIGFzIEdyb3VwT3BlcmF0b3JcbiAgICAgICAgICApID09PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkJJR0dFUjpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdID4gY29tcGFyaXNvbjtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuQklHR0VSX0VROlxuICAgICAgICAgICAgICByZXR1cm4gbVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gPj0gY29tcGFyaXNvbjtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuRElGRkVSRU5UOlxuICAgICAgICAgICAgICByZXR1cm4gbVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gIT09IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLkVRVUFMOlxuICAgICAgICAgICAgICByZXR1cm4gbVthdHRyMSBhcyBrZXlvZiBNb2RlbF0gPT09IGNvbXBhcmlzb247XG4gICAgICAgICAgICBjYXNlIE9wZXJhdG9yLlJFR0VYUDpcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSAhPT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihcbiAgICAgICAgICAgICAgICAgIGBJbnZhbGlkIHJlZ2V4cCBjb21wYXJpc29uIG9uIGEgbm9uIHN0cmluZyBhdHRyaWJ1dGU6ICR7bVthdHRyMSBhcyBrZXlvZiBNb2RlbF19YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiAhIShtW2F0dHIxIGFzIGtleW9mIE1vZGVsXSBhcyB1bmtub3duIGFzIHN0cmluZykubWF0Y2goXG4gICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChjb21wYXJpc29uLCBcImdcIilcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuU01BTExFUjpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdIDwgY29tcGFyaXNvbjtcbiAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuU01BTExFUl9FUTpcbiAgICAgICAgICAgICAgcmV0dXJuIG1bYXR0cjEgYXMga2V5b2YgTW9kZWxdIDw9IGNvbXBhcmlzb247XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgICAgICBgSW52YWxpZCBvcGVyYXRvciBmb3Igc3RhbmRhcmQgY29tcGFyaXNvbnM6ICR7b3BlcmF0b3J9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gT3BlcmF0b3IuTk9UKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgb3AxOiBSYXdSYW1RdWVyeTxhbnk+ID0gdGhpcy5wYXJzZUNvbmRpdGlvbihcbiAgICAgICAgICAgIGF0dHIxIGFzIENvbmRpdGlvbjxNPlxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgb3AyOiBSYXdSYW1RdWVyeTxhbnk+ID0gdGhpcy5wYXJzZUNvbmRpdGlvbihcbiAgICAgICAgICAgIGNvbXBhcmlzb24gYXMgQ29uZGl0aW9uPE0+XG4gICAgICAgICAgKTtcbiAgICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlIEdyb3VwT3BlcmF0b3IuQU5EOlxuICAgICAgICAgICAgICByZXR1cm4gb3AxLndoZXJlKG0pICYmIG9wMi53aGVyZShtKTtcbiAgICAgICAgICAgIGNhc2UgR3JvdXBPcGVyYXRvci5PUjpcbiAgICAgICAgICAgICAgcmV0dXJuIG9wMS53aGVyZShtKSB8fCBvcDIud2hlcmUobSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgICAgICBgSW52YWxpZCBvcGVyYXRvciBmb3IgQW5kL09yIGNvbXBhcmlzb25zOiAke29wZXJhdG9yfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSBhcyBSYXdSYW1RdWVyeTxhbnk+O1xuICB9XG59XG4iXX0=
@@ -3,10 +3,84 @@ import { RawRamQuery } from "./types";
3
3
  import { Model } from "@decaf-ts/decorator-validation";
4
4
  import { Statement } from "../query/Statement";
5
5
  import { RamAdapter } from "./RamAdapter";
6
+ /**
7
+ * @description RAM-specific query statement builder
8
+ * @summary Extends the base Statement class to provide query building functionality for the RAM adapter.
9
+ * This class translates high-level query operations into predicates that can filter and sort
10
+ * in-memory data structures.
11
+ * @template M - The model type being queried
12
+ * @template R - The result type returned by the query
13
+ * @param {RamAdapter} adapter - The RAM adapter instance to use for executing queries
14
+ * @class RamStatement
15
+ * @category Ram
16
+ * @example
17
+ * ```typescript
18
+ * // Create a statement for querying User models
19
+ * const statement = new RamStatement<User, User>(ramAdapter);
20
+ *
21
+ * // Build a query to find active users with age > 18
22
+ * const results = await statement
23
+ * .from(User)
24
+ * .where(Condition.and(
25
+ * Condition.eq('active', true),
26
+ * Condition.gt('age', 18)
27
+ * ))
28
+ * .orderBy('lastName', 'asc')
29
+ * .limit(10)
30
+ * .execute();
31
+ * ```
32
+ */
6
33
  export declare class RamStatement<M extends Model, R> extends Statement<RawRamQuery<M>, M, R> {
7
34
  constructor(adapter: RamAdapter);
35
+ /**
36
+ * @description Creates a sort comparator function
37
+ * @summary Generates a function that compares two model instances based on the orderBy criteria.
38
+ * This method handles different data types (string, number, date) and sort directions (asc, desc).
39
+ * @return {function(Model, Model): number} A comparator function for sorting model instances
40
+ */
8
41
  private getSort;
42
+ /**
43
+ * @description Builds a RAM query from the statement
44
+ * @summary Converts the statement's selectors and conditions into a RawRamQuery object
45
+ * that can be executed by the RAM adapter. This method assembles all query components
46
+ * (select, from, where, limit, offset, sort) into the final query structure.
47
+ * @return {RawRamQuery<M>} The constructed RAM query object
48
+ */
9
49
  protected build(): RawRamQuery<M>;
50
+ /**
51
+ * @description Creates a paginator for the query
52
+ * @summary Builds the query and wraps it in a RamPaginator to enable pagination of results.
53
+ * This allows retrieving large result sets in smaller chunks.
54
+ * @param {number} size - The page size (number of results per page)
55
+ * @return {Promise<Paginator<M, R, RawRamQuery<M>>>} A promise that resolves to a paginator for the query
56
+ */
10
57
  paginate(size: number): Promise<Paginator<M, R, RawRamQuery<M>>>;
58
+ /**
59
+ * @description Parses a condition into a RAM query predicate
60
+ * @summary Converts a Condition object into a predicate function that can be used
61
+ * to filter model instances in memory. This method handles both simple conditions
62
+ * (equals, greater than, etc.) and complex conditions with logical operators (AND, OR).
63
+ * @template M - The model type for the condition
64
+ * @param {Condition<M>} condition - The condition to parse
65
+ * @return {RawRamQuery<M>} A RAM query object with a where predicate function
66
+ * @mermaid
67
+ * sequenceDiagram
68
+ * participant Caller
69
+ * participant RamStatement
70
+ * participant SimpleCondition
71
+ * participant ComplexCondition
72
+ *
73
+ * Caller->>RamStatement: parseCondition(condition)
74
+ * alt Simple condition (eq, gt, lt, etc.)
75
+ * RamStatement->>SimpleCondition: Extract attr1, operator, comparison
76
+ * SimpleCondition-->>RamStatement: Return predicate function
77
+ * else Logical operator (AND, OR)
78
+ * RamStatement->>ComplexCondition: Extract nested conditions
79
+ * RamStatement->>RamStatement: parseCondition(leftCondition)
80
+ * RamStatement->>RamStatement: parseCondition(rightCondition)
81
+ * ComplexCondition-->>RamStatement: Combine predicates with logical operator
82
+ * end
83
+ * RamStatement-->>Caller: Return query with where predicate
84
+ */
11
85
  parseCondition<M extends Model>(condition: Condition<M>): RawRamQuery<M>;
12
86
  }
@@ -1,5 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RamFlavour = void 0;
4
+ /**
5
+ * @description Identifier for the RAM adapter
6
+ * @summary A constant string that uniquely identifies the RAM adapter in the system.
7
+ * Used for adapter type identification and configuration.
8
+ * @const RamFlavour
9
+ * @memberOf module:core
10
+ * @category Ram
11
+ */
4
12
  exports.RamFlavour = "ram";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JhbS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxVQUFVLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFJhbUZsYXZvdXIgPSBcInJhbVwiO1xuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JhbS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7R0FPRztBQUNVLFFBQUEsVUFBVSxHQUFHLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIElkZW50aWZpZXIgZm9yIHRoZSBSQU0gYWRhcHRlclxuICogQHN1bW1hcnkgQSBjb25zdGFudCBzdHJpbmcgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBSQU0gYWRhcHRlciBpbiB0aGUgc3lzdGVtLlxuICogVXNlZCBmb3IgYWRhcHRlciB0eXBlIGlkZW50aWZpY2F0aW9uIGFuZCBjb25maWd1cmF0aW9uLlxuICogQGNvbnN0IFJhbUZsYXZvdXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQGNhdGVnb3J5IFJhbVxuICovXG5leHBvcnQgY29uc3QgUmFtRmxhdm91ciA9IFwicmFtXCI7XG4iXX0=
@@ -1 +1,9 @@
1
+ /**
2
+ * @description Identifier for the RAM adapter
3
+ * @summary A constant string that uniquely identifies the RAM adapter in the system.
4
+ * Used for adapter type identification and configuration.
5
+ * @const RamFlavour
6
+ * @memberOf module:core
7
+ * @category Ram
8
+ */
1
9
  export declare const RamFlavour = "ram";
@@ -2,10 +2,29 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createdByOnRamCreateUpdate = createdByOnRamCreateUpdate;
4
4
  const persistence_1 = require("./../persistence/index.cjs");
5
+ /**
6
+ * @description Sets the created by field on a model during RAM create/update operations
7
+ * @summary Automatically populates a model field with the UUID from the context during create or update operations.
8
+ * This function is designed to be used as a handler for RAM operations to track entity creation.
9
+ * @template M - Type of the model being created/updated
10
+ * @template R - Type of the repository handling the model
11
+ * @template V - Type of the relations metadata
12
+ * @template F - Type of the RAM flags
13
+ * @template C - Type of the context
14
+ * @param {R} this - The repository instance
15
+ * @param {Context<F>} context - The operation context containing user identification
16
+ * @param {V} data - The relations metadata
17
+ * @param key - The property key to set with the UUID
18
+ * @param {M} model - The model instance being created/updated
19
+ * @return {Promise<void>} A promise that resolves when the field has been set
20
+ * @function createdByOnRamCreateUpdate
21
+ * @memberOf module:core
22
+ * @category Ram
23
+ */
5
24
  async function createdByOnRamCreateUpdate(context, data, key, model) {
6
25
  const uuid = context.get("UUID");
7
26
  if (!uuid)
8
27
  throw new persistence_1.UnsupportedError("This adapter does not support user identification");
9
28
  model[key] = uuid;
10
29
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmFtL2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0EsZ0VBbUJDO0FBckJELDREQUFrRDtBQUUzQyxLQUFLLFVBQVUsMEJBQTBCLENBUTlDLE9BQW1CLEVBQ25CLElBQU8sRUFDUCxHQUFZLEVBQ1osS0FBUTtJQUVSLE1BQU0sSUFBSSxHQUFXLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLElBQUk7UUFDUCxNQUFNLElBQUksOEJBQWdCLENBQ3hCLG1EQUFtRCxDQUNwRCxDQUFDO0lBQ0osS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQWtCLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgUmVwbyB9IGZyb20gXCIuLi9yZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBSZWxhdGlvbnNNZXRhZGF0YSB9IGZyb20gXCIuLi9tb2RlbFwiO1xuaW1wb3J0IHsgUmFtRmxhZ3MgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgVW5zdXBwb3J0ZWRFcnJvciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlZEJ5T25SYW1DcmVhdGVVcGRhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG88TSwgRiwgQz4sXG4gIFYgZXh0ZW5kcyBSZWxhdGlvbnNNZXRhZGF0YSxcbiAgRiBleHRlbmRzIFJhbUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHQ8Rj4sXG4gIGRhdGE6IFYsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB1dWlkOiBzdHJpbmcgPSBjb250ZXh0LmdldChcIlVVSURcIik7XG4gIGlmICghdXVpZClcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcbiAgICAgIFwiVGhpcyBhZGFwdGVyIGRvZXMgbm90IHN1cHBvcnQgdXNlciBpZGVudGlmaWNhdGlvblwiXG4gICAgKTtcbiAgbW9kZWxba2V5XSA9IHV1aWQgYXMgTVtrZXlvZiBNXTtcbn1cbiJdfQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmFtL2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEJBLGdFQW1CQztBQXhDRCw0REFBa0Q7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNJLEtBQUssVUFBVSwwQkFBMEIsQ0FROUMsT0FBbUIsRUFDbkIsSUFBTyxFQUNQLEdBQVksRUFDWixLQUFRO0lBRVIsTUFBTSxJQUFJLEdBQVcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsSUFBSTtRQUNQLE1BQU0sSUFBSSw4QkFBZ0IsQ0FDeEIsbURBQW1ELENBQ3BELENBQUM7SUFDSixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBa0IsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZXBvIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IFJlbGF0aW9uc01ldGFkYXRhIH0gZnJvbSBcIi4uL21vZGVsXCI7XG5pbXBvcnQgeyBSYW1GbGFncyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZEVycm9yIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGNyZWF0ZWQgYnkgZmllbGQgb24gYSBtb2RlbCBkdXJpbmcgUkFNIGNyZWF0ZS91cGRhdGUgb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgQXV0b21hdGljYWxseSBwb3B1bGF0ZXMgYSBtb2RlbCBmaWVsZCB3aXRoIHRoZSBVVUlEIGZyb20gdGhlIGNvbnRleHQgZHVyaW5nIGNyZWF0ZSBvciB1cGRhdGUgb3BlcmF0aW9ucy5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIGhhbmRsZXIgZm9yIFJBTSBvcGVyYXRpb25zIHRvIHRyYWNrIGVudGl0eSBjcmVhdGlvbi5cbiAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBvZiB0aGUgbW9kZWwgYmVpbmcgY3JlYXRlZC91cGRhdGVkXG4gKiBAdGVtcGxhdGUgUiAtIFR5cGUgb2YgdGhlIHJlcG9zaXRvcnkgaGFuZGxpbmcgdGhlIG1vZGVsXG4gKiBAdGVtcGxhdGUgViAtIFR5cGUgb2YgdGhlIHJlbGF0aW9ucyBtZXRhZGF0YVxuICogQHRlbXBsYXRlIEYgLSBUeXBlIG9mIHRoZSBSQU0gZmxhZ3NcbiAqIEB0ZW1wbGF0ZSBDIC0gVHlwZSBvZiB0aGUgY29udGV4dFxuICogQHBhcmFtIHtSfSB0aGlzIC0gVGhlIHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7Q29udGV4dDxGPn0gY29udGV4dCAtIFRoZSBvcGVyYXRpb24gY29udGV4dCBjb250YWluaW5nIHVzZXIgaWRlbnRpZmljYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGFcbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkga2V5IHRvIHNldCB3aXRoIHRoZSBVVUlEXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIGJlaW5nIGNyZWF0ZWQvdXBkYXRlZFxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmllbGQgaGFzIGJlZW4gc2V0XG4gKiBAZnVuY3Rpb24gY3JlYXRlZEJ5T25SYW1DcmVhdGVVcGRhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQGNhdGVnb3J5IFJhbVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlZEJ5T25SYW1DcmVhdGVVcGRhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG88TSwgRiwgQz4sXG4gIFYgZXh0ZW5kcyBSZWxhdGlvbnNNZXRhZGF0YSxcbiAgRiBleHRlbmRzIFJhbUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHQ8Rj4sXG4gIGRhdGE6IFYsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB1dWlkOiBzdHJpbmcgPSBjb250ZXh0LmdldChcIlVVSURcIik7XG4gIGlmICghdXVpZClcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcbiAgICAgIFwiVGhpcyBhZGFwdGVyIGRvZXMgbm90IHN1cHBvcnQgdXNlciBpZGVudGlmaWNhdGlvblwiXG4gICAgKTtcbiAgbW9kZWxba2V5XSA9IHV1aWQgYXMgTVtrZXlvZiBNXTtcbn1cbiJdfQ==
@@ -3,4 +3,23 @@ import { Repo } from "../repository";
3
3
  import { RelationsMetadata } from "../model";
4
4
  import { RamFlags } from "./types";
5
5
  import { Context } from "@decaf-ts/db-decorators";
6
+ /**
7
+ * @description Sets the created by field on a model during RAM create/update operations
8
+ * @summary Automatically populates a model field with the UUID from the context during create or update operations.
9
+ * This function is designed to be used as a handler for RAM operations to track entity creation.
10
+ * @template M - Type of the model being created/updated
11
+ * @template R - Type of the repository handling the model
12
+ * @template V - Type of the relations metadata
13
+ * @template F - Type of the RAM flags
14
+ * @template C - Type of the context
15
+ * @param {R} this - The repository instance
16
+ * @param {Context<F>} context - The operation context containing user identification
17
+ * @param {V} data - The relations metadata
18
+ * @param key - The property key to set with the UUID
19
+ * @param {M} model - The model instance being created/updated
20
+ * @return {Promise<void>} A promise that resolves when the field has been set
21
+ * @function createdByOnRamCreateUpdate
22
+ * @memberOf module:core
23
+ * @category Ram
24
+ */
6
25
  export declare function createdByOnRamCreateUpdate<M extends Model, R extends Repo<M, F, C>, V extends RelationsMetadata, F extends RamFlags, C extends Context<F>>(this: R, context: Context<F>, data: V, key: keyof M, model: M): Promise<void>;
@@ -13,6 +13,24 @@ exports.Sequence = void 0;
13
13
  const decorator_validation_1 = require("@decaf-ts/decorator-validation");
14
14
  const model_1 = require("./../../model/index.cjs");
15
15
  const identity_1 = require("./../../identity/index.cjs");
16
+ /**
17
+ * @description RAM sequence model for auto-incrementing values
18
+ * @summary A model class that represents a sequence in the RAM adapter. It stores the current value
19
+ * of a sequence that can be used for generating sequential identifiers for entities.
20
+ * The sequence is identified by its ID and maintains the current value.
21
+ * @param {ModelArg<Sequence>} seq - Initial sequence data
22
+ * @class Sequence
23
+ * @category Ram
24
+ * @example
25
+ * ```typescript
26
+ * // Create a new sequence
27
+ * const orderSequence = new Sequence({ id: 'order_seq', current: 1 });
28
+ *
29
+ * // Use the sequence to get the next value
30
+ * const nextOrderId = parseInt(orderSequence.current.toString()) + 1;
31
+ * orderSequence.current = nextOrderId;
32
+ * ```
33
+ */
16
34
  let Sequence = class Sequence extends model_1.BaseModel {
17
35
  constructor(seq) {
18
36
  super(seq);
@@ -33,4 +51,4 @@ exports.Sequence = Sequence = __decorate([
33
51
  (0, decorator_validation_1.model)(),
34
52
  __metadata("design:paramtypes", [Object])
35
53
  ], Sequence);
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmFtL21vZGVsL1JhbVNlcXVlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHlFQUFpRTtBQUVqRSxtREFBc0Q7QUFDdEQseURBQW9DO0FBSTdCLElBQU0sUUFBUSxHQUFkLE1BQU0sUUFBUyxTQUFRLGlCQUFTO0lBUXJDLFlBQVksR0FBd0I7UUFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztDQUNGLENBQUE7QUFYWSw0QkFBUTtBQUVuQjtJQURDLElBQUEsYUFBRSxHQUFFOztvQ0FDTztBQUlaO0lBRkMsSUFBQSwrQkFBUSxHQUFFO0lBQ1YsSUFBQSxhQUFLLEdBQUU7O3lDQUNrQjttQkFOZixRQUFRO0lBRnBCLElBQUEsYUFBSyxFQUFDLGVBQWUsQ0FBQztJQUN0QixJQUFBLDRCQUFLLEdBQUU7O0dBQ0ssUUFBUSxDQVdwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZGVsLCByZXF1aXJlZCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgTW9kZWxBcmcgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBCYXNlTW9kZWwsIGluZGV4LCB0YWJsZSB9IGZyb20gXCIuLi8uLi9tb2RlbFwiO1xuaW1wb3J0IHsgcGsgfSBmcm9tIFwiLi4vLi4vaWRlbnRpdHlcIjtcblxuQHRhYmxlKFwiX19SYW1TZXF1ZW5jZVwiKVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBTZXF1ZW5jZSBleHRlbmRzIEJhc2VNb2RlbCB7XG4gIEBwaygpXG4gIGlkITogc3RyaW5nO1xuXG4gIEByZXF1aXJlZCgpXG4gIEBpbmRleCgpXG4gIGN1cnJlbnQhOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2VxPzogTW9kZWxBcmc8U2VxdWVuY2U+KSB7XG4gICAgc3VwZXIoc2VxKTtcbiAgfVxufVxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmFtL21vZGVsL1JhbVNlcXVlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHlFQUFpRTtBQUVqRSxtREFBc0Q7QUFDdEQseURBQW9DO0FBRXBDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUdJLElBQU0sUUFBUSxHQUFkLE1BQU0sUUFBUyxTQUFRLGlCQUFTO0lBZXJDLFlBQVksR0FBd0I7UUFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztDQUNGLENBQUE7QUFsQlksNEJBQVE7QUFLbkI7SUFEQyxJQUFBLGFBQUUsR0FBRTs7b0NBQ087QUFRWjtJQUZDLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEsYUFBSyxHQUFFOzt5Q0FDa0I7bUJBYmYsUUFBUTtJQUZwQixJQUFBLGFBQUssRUFBQyxlQUFlLENBQUM7SUFDdEIsSUFBQSw0QkFBSyxHQUFFOztHQUNLLFFBQVEsQ0FrQnBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9kZWwsIHJlcXVpcmVkIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbEFyZyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEJhc2VNb2RlbCwgaW5kZXgsIHRhYmxlIH0gZnJvbSBcIi4uLy4uL21vZGVsXCI7XG5pbXBvcnQgeyBwayB9IGZyb20gXCIuLi8uLi9pZGVudGl0eVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSQU0gc2VxdWVuY2UgbW9kZWwgZm9yIGF1dG8taW5jcmVtZW50aW5nIHZhbHVlc1xuICogQHN1bW1hcnkgQSBtb2RlbCBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBzZXF1ZW5jZSBpbiB0aGUgUkFNIGFkYXB0ZXIuIEl0IHN0b3JlcyB0aGUgY3VycmVudCB2YWx1ZVxuICogb2YgYSBzZXF1ZW5jZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBnZW5lcmF0aW5nIHNlcXVlbnRpYWwgaWRlbnRpZmllcnMgZm9yIGVudGl0aWVzLlxuICogVGhlIHNlcXVlbmNlIGlzIGlkZW50aWZpZWQgYnkgaXRzIElEIGFuZCBtYWludGFpbnMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gKiBAcGFyYW0ge01vZGVsQXJnPFNlcXVlbmNlPn0gc2VxIC0gSW5pdGlhbCBzZXF1ZW5jZSBkYXRhXG4gKiBAY2xhc3MgU2VxdWVuY2VcbiAqIEBjYXRlZ29yeSBSYW1cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgYSBuZXcgc2VxdWVuY2VcbiAqIGNvbnN0IG9yZGVyU2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoeyBpZDogJ29yZGVyX3NlcScsIGN1cnJlbnQ6IDEgfSk7XG4gKlxuICogLy8gVXNlIHRoZSBzZXF1ZW5jZSB0byBnZXQgdGhlIG5leHQgdmFsdWVcbiAqIGNvbnN0IG5leHRPcmRlcklkID0gcGFyc2VJbnQob3JkZXJTZXF1ZW5jZS5jdXJyZW50LnRvU3RyaW5nKCkpICsgMTtcbiAqIG9yZGVyU2VxdWVuY2UuY3VycmVudCA9IG5leHRPcmRlcklkO1xuICogYGBgXG4gKi9cbkB0YWJsZShcIl9fUmFtU2VxdWVuY2VcIilcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgU2VxdWVuY2UgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByaW1hcnkga2V5IGlkZW50aWZpZXIgZm9yIHRoZSBzZXF1ZW5jZVxuICAgKi9cbiAgQHBrKClcbiAgaWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZhbHVlIG9mIHRoZSBzZXF1ZW5jZVxuICAgKiBVc2VkIHRvIGdlbmVyYXRlIHRoZSBuZXh0IHNlcXVlbnRpYWwgdmFsdWVcbiAgICovXG4gIEByZXF1aXJlZCgpXG4gIEBpbmRleCgpXG4gIGN1cnJlbnQhOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2VxPzogTW9kZWxBcmc8U2VxdWVuY2U+KSB7XG4gICAgc3VwZXIoc2VxKTtcbiAgfVxufVxuIl19