angular-odata 0.128.0 → 0.131.0

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 (246) hide show
  1. package/README.md +27 -244
  2. package/fesm2022/angular-odata.mjs +2320 -1118
  3. package/fesm2022/angular-odata.mjs.map +1 -1
  4. package/lib/api.d.ts +10 -11
  5. package/lib/cache/cache.d.ts +2 -2
  6. package/lib/cache/memory.d.ts +2 -2
  7. package/lib/cache/storage.d.ts +2 -2
  8. package/lib/index.d.ts +1 -0
  9. package/lib/loaders.d.ts +8 -8
  10. package/lib/metadata/csdl/csdl-annotation.d.ts +62 -26
  11. package/lib/metadata/csdl/csdl-entity-container.d.ts +8 -3
  12. package/lib/metadata/csdl/csdl-entity-set.d.ts +7 -2
  13. package/lib/metadata/csdl/csdl-enum-type.d.ts +11 -3
  14. package/lib/metadata/csdl/csdl-function-action.d.ts +54 -11
  15. package/lib/metadata/csdl/csdl-navigation-property-binding.d.ts +4 -0
  16. package/lib/metadata/csdl/csdl-reference.d.ts +26 -3
  17. package/lib/metadata/csdl/csdl-schema.d.ts +5 -2
  18. package/lib/metadata/csdl/csdl-singleton.d.ts +5 -0
  19. package/lib/metadata/csdl/csdl-structural-property.d.ts +19 -3
  20. package/lib/metadata/csdl/csdl-structured-type.d.ts +28 -7
  21. package/lib/metadata/csdl/csdl-type-definition.d.ts +3 -0
  22. package/lib/metadata/metadata.d.ts +16 -3
  23. package/lib/models/collection.d.ts +2 -1
  24. package/lib/models/model.d.ts +6 -5
  25. package/lib/models/options.d.ts +11 -4
  26. package/lib/module.d.ts +3 -3
  27. package/lib/options.d.ts +3 -3
  28. package/lib/resources/path/segments.d.ts +3 -3
  29. package/lib/resources/query/builder.d.ts +3 -2
  30. package/lib/resources/query/expressions/apply.d.ts +1 -1
  31. package/lib/resources/query/expressions/compute.d.ts +1 -1
  32. package/lib/resources/query/expressions/count.d.ts +1 -1
  33. package/lib/resources/query/expressions/expand.d.ts +5 -2
  34. package/lib/resources/query/expressions/filter.d.ts +2 -1
  35. package/lib/resources/query/expressions/orderby.d.ts +2 -1
  36. package/lib/resources/query/expressions/search.d.ts +2 -1
  37. package/lib/resources/query/expressions/select.d.ts +2 -1
  38. package/lib/resources/query/expressions/syntax.d.ts +2 -2
  39. package/lib/resources/query/handlers.d.ts +17 -5
  40. package/lib/resources/query/options.d.ts +3 -3
  41. package/lib/resources/resource.d.ts +36 -8
  42. package/lib/resources/types/action.d.ts +4 -4
  43. package/lib/resources/types/entity-set.d.ts +15 -8
  44. package/lib/resources/types/entity.d.ts +5 -1
  45. package/lib/resources/types/function.d.ts +4 -4
  46. package/lib/resources/types/navigation-property.d.ts +12 -3
  47. package/lib/resources/types/property.d.ts +14 -3
  48. package/lib/resources/types/singleton.d.ts +5 -1
  49. package/lib/schema/annotation.d.ts +3 -3
  50. package/lib/schema/callable.d.ts +3 -3
  51. package/lib/schema/element.d.ts +3 -3
  52. package/lib/schema/entity-container.d.ts +2 -2
  53. package/lib/schema/entity-set.d.ts +2 -2
  54. package/lib/schema/enum-type.d.ts +10 -10
  55. package/lib/schema/parsers/callable.d.ts +4 -4
  56. package/lib/schema/parsers/enum-type.d.ts +15 -15
  57. package/lib/schema/parsers/structured-type.d.ts +8 -5
  58. package/lib/schema/schema.d.ts +3 -3
  59. package/lib/schema/singleton.d.ts +2 -2
  60. package/lib/schema/structured-type.d.ts +7 -4
  61. package/lib/services/entity-set.d.ts +9 -6
  62. package/lib/services/entity.d.ts +1 -1
  63. package/lib/services/singleton.d.ts +1 -1
  64. package/lib/settings.d.ts +2 -2
  65. package/lib/types.d.ts +82 -69
  66. package/lib/utils/enums.d.ts +12 -12
  67. package/lib/utils/http.d.ts +1 -1
  68. package/lib/utils/objects.d.ts +1 -1
  69. package/lib/utils/odata.d.ts +2 -2
  70. package/lib/utils/strings.d.ts +2 -2
  71. package/package.json +3 -5
  72. package/schematics/apigen/angular/api-config.js +7 -1
  73. package/schematics/apigen/angular/api-config.js.map +1 -1
  74. package/schematics/apigen/angular/base.d.ts +22 -2
  75. package/schematics/apigen/angular/base.js +82 -42
  76. package/schematics/apigen/angular/base.js.map +1 -1
  77. package/schematics/apigen/angular/entity.js +7 -1
  78. package/schematics/apigen/angular/entity.js.map +1 -1
  79. package/schematics/apigen/angular/enum.js +1 -0
  80. package/schematics/apigen/angular/enum.js.map +1 -1
  81. package/schematics/apigen/angular/module.js.map +1 -1
  82. package/schematics/apigen/angular/service.js +3 -2
  83. package/schematics/apigen/angular/service.js.map +1 -1
  84. package/schematics/apigen/files/api-config/__fileName__.ts +8 -6
  85. package/schematics/apigen/files/entity/__fileName__.ts +2 -2
  86. package/schematics/apigen/files/entitycontainer-service/__fileName__.ts +1 -1
  87. package/schematics/apigen/files/entityset-service/__fileName__.ts +1 -1
  88. package/schematics/apigen/files/enum/__fileName__.ts +1 -1
  89. package/schematics/apigen/files/metadata/metadata.json +1 -0
  90. package/schematics/apigen/files/singleton-service/__fileName__.ts +1 -1
  91. package/schematics/apigen/index.js +56 -12
  92. package/schematics/apigen/index.js.map +1 -1
  93. package/schematics/apigen/metadata/csdl/csdl-annotation.d.ts +56 -23
  94. package/schematics/apigen/metadata/csdl/csdl-annotation.js +143 -13
  95. package/schematics/apigen/metadata/csdl/csdl-annotation.js.map +1 -1
  96. package/schematics/apigen/metadata/csdl/csdl-entity-container.d.ts +3 -0
  97. package/schematics/apigen/metadata/csdl/csdl-entity-container.js +19 -0
  98. package/schematics/apigen/metadata/csdl/csdl-entity-container.js.map +1 -1
  99. package/schematics/apigen/metadata/csdl/csdl-entity-set.d.ts +3 -0
  100. package/schematics/apigen/metadata/csdl/csdl-entity-set.js +11 -0
  101. package/schematics/apigen/metadata/csdl/csdl-entity-set.js.map +1 -1
  102. package/schematics/apigen/metadata/csdl/csdl-enum-type.d.ts +6 -0
  103. package/schematics/apigen/metadata/csdl/csdl-enum-type.js +17 -0
  104. package/schematics/apigen/metadata/csdl/csdl-enum-type.js.map +1 -1
  105. package/schematics/apigen/metadata/csdl/csdl-function-action.d.ts +37 -0
  106. package/schematics/apigen/metadata/csdl/csdl-function-action.js +52 -0
  107. package/schematics/apigen/metadata/csdl/csdl-function-action.js.map +1 -1
  108. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.d.ts +4 -0
  109. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js +6 -0
  110. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js.map +1 -1
  111. package/schematics/apigen/metadata/csdl/csdl-reference.d.ts +15 -3
  112. package/schematics/apigen/metadata/csdl/csdl-reference.js +26 -2
  113. package/schematics/apigen/metadata/csdl/csdl-reference.js.map +1 -1
  114. package/schematics/apigen/metadata/csdl/csdl-schema.d.ts +3 -0
  115. package/schematics/apigen/metadata/csdl/csdl-schema.js +37 -0
  116. package/schematics/apigen/metadata/csdl/csdl-schema.js.map +1 -1
  117. package/schematics/apigen/metadata/csdl/csdl-singleton.d.ts +3 -0
  118. package/schematics/apigen/metadata/csdl/csdl-singleton.js +8 -0
  119. package/schematics/apigen/metadata/csdl/csdl-singleton.js.map +1 -1
  120. package/schematics/apigen/metadata/csdl/csdl-structural-property.d.ts +16 -0
  121. package/schematics/apigen/metadata/csdl/csdl-structural-property.js +53 -0
  122. package/schematics/apigen/metadata/csdl/csdl-structural-property.js.map +1 -1
  123. package/schematics/apigen/metadata/csdl/csdl-structured-type.d.ts +22 -3
  124. package/schematics/apigen/metadata/csdl/csdl-structured-type.js +47 -2
  125. package/schematics/apigen/metadata/csdl/csdl-structured-type.js.map +1 -1
  126. package/schematics/apigen/metadata/csdl/csdl-type-definition.d.ts +3 -0
  127. package/schematics/apigen/metadata/csdl/csdl-type-definition.js +19 -0
  128. package/schematics/apigen/metadata/csdl/csdl-type-definition.js.map +1 -1
  129. package/schematics/apigen/metadata/metadata.d.ts +10 -0
  130. package/schematics/apigen/metadata/metadata.js +12 -6
  131. package/schematics/apigen/metadata/metadata.js.map +1 -1
  132. package/schematics/apigen/metadata/parser.js.map +1 -1
  133. package/schematics/apigen/schema.d.ts +2 -1
  134. package/schematics/apigen/schema.json +15 -14
  135. package/schematics/apigen/utils.d.ts +1 -0
  136. package/schematics/apigen/utils.js +25 -1
  137. package/schematics/apigen/utils.js.map +1 -1
  138. package/schematics/ng-add/index.js +1 -2
  139. package/schematics/ng-add/index.js.map +1 -1
  140. package/esm2022/angular-odata.mjs +0 -5
  141. package/esm2022/lib/annotations.mjs +0 -140
  142. package/esm2022/lib/api.mjs +0 -419
  143. package/esm2022/lib/cache/cache.mjs +0 -175
  144. package/esm2022/lib/cache/index.mjs +0 -4
  145. package/esm2022/lib/cache/memory.mjs +0 -30
  146. package/esm2022/lib/cache/storage.mjs +0 -55
  147. package/esm2022/lib/client.mjs +0 -212
  148. package/esm2022/lib/constants.mjs +0 -95
  149. package/esm2022/lib/helper.mjs +0 -280
  150. package/esm2022/lib/index.mjs +0 -21
  151. package/esm2022/lib/loaders.mjs +0 -39
  152. package/esm2022/lib/metadata/csdl/csdl-annotation.mjs +0 -95
  153. package/esm2022/lib/metadata/csdl/csdl-entity-container.mjs +0 -27
  154. package/esm2022/lib/metadata/csdl/csdl-entity-set.mjs +0 -24
  155. package/esm2022/lib/metadata/csdl/csdl-enum-type.mjs +0 -37
  156. package/esm2022/lib/metadata/csdl/csdl-function-action.mjs +0 -94
  157. package/esm2022/lib/metadata/csdl/csdl-navigation-property-binding.mjs +0 -7
  158. package/esm2022/lib/metadata/csdl/csdl-reference.mjs +0 -23
  159. package/esm2022/lib/metadata/csdl/csdl-schema.mjs +0 -39
  160. package/esm2022/lib/metadata/csdl/csdl-singleton.mjs +0 -15
  161. package/esm2022/lib/metadata/csdl/csdl-structural-property.mjs +0 -70
  162. package/esm2022/lib/metadata/csdl/csdl-structured-type.mjs +0 -92
  163. package/esm2022/lib/metadata/csdl/csdl-type-definition.mjs +0 -15
  164. package/esm2022/lib/metadata/index.mjs +0 -3
  165. package/esm2022/lib/metadata/metadata.mjs +0 -14
  166. package/esm2022/lib/metadata/parser.mjs +0 -563
  167. package/esm2022/lib/models/collection.mjs +0 -814
  168. package/esm2022/lib/models/index.mjs +0 -4
  169. package/esm2022/lib/models/model.mjs +0 -553
  170. package/esm2022/lib/models/options.mjs +0 -1179
  171. package/esm2022/lib/module.mjs +0 -55
  172. package/esm2022/lib/options.mjs +0 -36
  173. package/esm2022/lib/resources/index.mjs +0 -7
  174. package/esm2022/lib/resources/options.mjs +0 -56
  175. package/esm2022/lib/resources/path/handlers.mjs +0 -79
  176. package/esm2022/lib/resources/path/index.mjs +0 -3
  177. package/esm2022/lib/resources/path/segments.mjs +0 -148
  178. package/esm2022/lib/resources/query/builder.mjs +0 -636
  179. package/esm2022/lib/resources/query/expressions/apply.mjs +0 -236
  180. package/esm2022/lib/resources/query/expressions/base.mjs +0 -25
  181. package/esm2022/lib/resources/query/expressions/compute.mjs +0 -54
  182. package/esm2022/lib/resources/query/expressions/count.mjs +0 -116
  183. package/esm2022/lib/resources/query/expressions/expand.mjs +0 -147
  184. package/esm2022/lib/resources/query/expressions/filter.mjs +0 -178
  185. package/esm2022/lib/resources/query/expressions/index.mjs +0 -10
  186. package/esm2022/lib/resources/query/expressions/orderby.mjs +0 -79
  187. package/esm2022/lib/resources/query/expressions/search.mjs +0 -141
  188. package/esm2022/lib/resources/query/expressions/select.mjs +0 -47
  189. package/esm2022/lib/resources/query/expressions/syntax.mjs +0 -751
  190. package/esm2022/lib/resources/query/handlers.mjs +0 -420
  191. package/esm2022/lib/resources/query/index.mjs +0 -5
  192. package/esm2022/lib/resources/query/options.mjs +0 -139
  193. package/esm2022/lib/resources/request.mjs +0 -196
  194. package/esm2022/lib/resources/resource.mjs +0 -311
  195. package/esm2022/lib/resources/response.mjs +0 -174
  196. package/esm2022/lib/resources/types/action.mjs +0 -116
  197. package/esm2022/lib/resources/types/batch.mjs +0 -428
  198. package/esm2022/lib/resources/types/count.mjs +0 -33
  199. package/esm2022/lib/resources/types/entity-set.mjs +0 -131
  200. package/esm2022/lib/resources/types/entity.mjs +0 -112
  201. package/esm2022/lib/resources/types/function.mjs +0 -146
  202. package/esm2022/lib/resources/types/index.mjs +0 -15
  203. package/esm2022/lib/resources/types/media.mjs +0 -44
  204. package/esm2022/lib/resources/types/metadata.mjs +0 -35
  205. package/esm2022/lib/resources/types/navigation-property.mjs +0 -256
  206. package/esm2022/lib/resources/types/options.mjs +0 -2
  207. package/esm2022/lib/resources/types/property.mjs +0 -197
  208. package/esm2022/lib/resources/types/reference.mjs +0 -87
  209. package/esm2022/lib/resources/types/singleton.mjs +0 -130
  210. package/esm2022/lib/resources/types/value.mjs +0 -48
  211. package/esm2022/lib/schema/annotation.mjs +0 -37
  212. package/esm2022/lib/schema/callable.mjs +0 -66
  213. package/esm2022/lib/schema/element.mjs +0 -67
  214. package/esm2022/lib/schema/entity-container.mjs +0 -11
  215. package/esm2022/lib/schema/entity-set.mjs +0 -9
  216. package/esm2022/lib/schema/enum-type.mjs +0 -68
  217. package/esm2022/lib/schema/index.mjs +0 -9
  218. package/esm2022/lib/schema/parsers/callable.mjs +0 -110
  219. package/esm2022/lib/schema/parsers/edm.mjs +0 -101
  220. package/esm2022/lib/schema/parsers/enum-type.mjs +0 -130
  221. package/esm2022/lib/schema/parsers/index.mjs +0 -5
  222. package/esm2022/lib/schema/parsers/structured-type.mjs +0 -514
  223. package/esm2022/lib/schema/schema.mjs +0 -45
  224. package/esm2022/lib/schema/singleton.mjs +0 -9
  225. package/esm2022/lib/schema/structured-type.mjs +0 -213
  226. package/esm2022/lib/services/base.mjs +0 -29
  227. package/esm2022/lib/services/entity-set.mjs +0 -155
  228. package/esm2022/lib/services/entity.mjs +0 -12
  229. package/esm2022/lib/services/factory.mjs +0 -44
  230. package/esm2022/lib/services/index.mjs +0 -5
  231. package/esm2022/lib/services/singleton.mjs +0 -54
  232. package/esm2022/lib/settings.mjs +0 -112
  233. package/esm2022/lib/types.mjs +0 -118
  234. package/esm2022/lib/utils/arraybuffers.mjs +0 -46
  235. package/esm2022/lib/utils/arrays.mjs +0 -10
  236. package/esm2022/lib/utils/dates.mjs +0 -18
  237. package/esm2022/lib/utils/durations.mjs +0 -40
  238. package/esm2022/lib/utils/enums.mjs +0 -61
  239. package/esm2022/lib/utils/http.mjs +0 -95
  240. package/esm2022/lib/utils/index.mjs +0 -10
  241. package/esm2022/lib/utils/objects.mjs +0 -204
  242. package/esm2022/lib/utils/odata.mjs +0 -22
  243. package/esm2022/lib/utils/strings.mjs +0 -20
  244. package/esm2022/lib/utils/types.mjs +0 -136
  245. package/esm2022/lib/utils/urls.mjs +0 -24
  246. package/esm2022/public-api.mjs +0 -5
@@ -1,420 +0,0 @@
1
- import { QueryOption } from '../../types';
2
- import { Objects, Types } from '../../utils';
3
- import { alias, normalizeValue, raw, duration, binary, } from './builder';
4
- import { ComputeExpression, FilterExpression, OrderByExpression, SearchExpression, ExpandExpression, SelectExpression, ApplyExpression, } from './expressions';
5
- import { pathAndParamsFromQueryOptions, } from './options';
6
- export class ODataQueryOptionHandler {
7
- constructor(o, n) {
8
- this.o = o;
9
- this.n = n;
10
- }
11
- /**
12
- * The name of the managed odata query option.
13
- */
14
- get name() {
15
- return this.n;
16
- }
17
- /**
18
- * Converts the managed odata query option to a json object.
19
- * @returns {any}
20
- */
21
- toJson() {
22
- return this.o.get(this.n);
23
- }
24
- /**
25
- * Returns a boolean indicating if the managed odata query option is empty.
26
- * @returns True if the managed odata query option is empty.
27
- */
28
- empty() {
29
- return Types.isEmpty(this.o.get(this.n));
30
- }
31
- //#region Primitive Value
32
- /**
33
- * Get or Set the value of the managed odata query option.
34
- * @param v The value to set.
35
- * @returns
36
- */
37
- value(v) {
38
- if (v !== undefined)
39
- this.o.set(this.n, v);
40
- return this.o.get(this.n);
41
- }
42
- //#endregion
43
- //#region Array Value
44
- assertArray() {
45
- if (!Types.isArray(this.o.get(this.n)))
46
- this.o.set(this.n, this.o.has(this.n) ? [this.o.get(this.n)] : []);
47
- return this.o.get(this.n);
48
- }
49
- /**
50
- * Push value to the managed odata query option.
51
- * @param value Value to push
52
- */
53
- push(value) {
54
- this.assertArray().push(value);
55
- }
56
- /**
57
- * Remove value from the managed odata query option.
58
- * @param value Value to remove
59
- */
60
- remove(value) {
61
- this.o.set(this.n, this.assertArray().filter((v) => v !== value));
62
- // If only one and not is array... down to value
63
- if (this.o.get(this.n).length === 1 &&
64
- !Types.isArray(this.o.get(this.n)[0]))
65
- this.o.set(this.n, this.o.get(this.n)[0]);
66
- }
67
- /**
68
- * Return value at index of the managed odata query option.
69
- * @param index Index of the value
70
- * @returns The value
71
- */
72
- at(index) {
73
- return this.assertArray()[index];
74
- }
75
- some(predicate) {
76
- return this.assertArray().some(predicate);
77
- }
78
- every(predicate) {
79
- return this.assertArray().every(predicate);
80
- }
81
- find(predicate) {
82
- return this.assertArray().find(predicate);
83
- }
84
- //#endregion
85
- //#region HashMap Value
86
- assertObject(create) {
87
- if (!Types.isArray(this.o.get(this.n)) &&
88
- Types.isPlainObject(this.o.get(this.n))) {
89
- return this.o.get(this.n);
90
- }
91
- let arr = this.assertArray();
92
- let obj = arr.find((v) => Types.isPlainObject(v));
93
- if (!obj && create) {
94
- obj = {};
95
- arr.push(obj);
96
- }
97
- return obj;
98
- }
99
- /**
100
- * Set the value for path in the managed odata query option.
101
- * @param path Path for set the value
102
- * @param value Value to set
103
- */
104
- set(path, value) {
105
- let obj = this.assertObject(true);
106
- Objects.set(obj, path, value);
107
- }
108
- /**
109
- * Get the value for path from the managed odata query option.
110
- * @param path The path from get the value
111
- * @param def Default if not found
112
- * @returns
113
- */
114
- get(path, def) {
115
- let obj = this.assertObject(false) || {};
116
- return Objects.get(obj, path, def);
117
- }
118
- /**
119
- * Unset the value for path in the managed odata query option.
120
- * @param path
121
- */
122
- unset(path) {
123
- let obj = this.assertObject(true);
124
- Objects.unset(obj, path);
125
- if (Types.isArray(this.o.get(this.n))) {
126
- this.o.set(this.n, this.o.get(this.n).filter((v) => !Types.isEmpty(v)));
127
- if (this.o.get(this.n).length === 1)
128
- this.o.set(this.n, this.o.get(this.n)[0]);
129
- }
130
- }
131
- /**
132
- * Test if the managed odata query option has the value.
133
- * @param path The path fot test if the value is set
134
- * @returns Boolean indicating if the value is set
135
- */
136
- has(path) {
137
- let obj = this.assertObject(false) || {};
138
- return Objects.has(obj, path);
139
- }
140
- /**
141
- * Merge values from object into the managed odata query option.
142
- * @param values Object to merge
143
- * @returns
144
- */
145
- assign(values) {
146
- let obj = this.assertObject(true);
147
- return Objects.merge(obj, values);
148
- }
149
- //#endregion
150
- /**
151
- * Clear the managed odata query option.
152
- */
153
- clear() {
154
- this.o.delete(this.n);
155
- }
156
- toString({ escape, parser, } = {}) {
157
- const [_, params] = pathAndParamsFromQueryOptions(new Map([[this.n, this.o.get(this.n)]]), { escape, parser });
158
- return params[`$${this.n}`];
159
- }
160
- }
161
- export class ODataQueryOptionsHandler {
162
- constructor(options) {
163
- this.options = options;
164
- }
165
- /**
166
- * Create a raw odata value
167
- * @param value The value to raw
168
- * @returns The raw value
169
- */
170
- raw(value) {
171
- return raw(value);
172
- }
173
- /**
174
- * Create a new odata alias parameter
175
- * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_ParameterAliases
176
- * @param value The value of the alias
177
- * @param name The name of the alias
178
- * @returns The alias
179
- */
180
- alias(value, name) {
181
- return alias(value, name);
182
- }
183
- /**
184
- * Create a duration odata value
185
- * @param value The value to duration
186
- * @returns The duration value
187
- */
188
- duration(value) {
189
- return duration(value);
190
- }
191
- /**
192
- * Create a binary odata value
193
- * @param value The value to binary
194
- * @returns The binary value
195
- */
196
- binary(value) {
197
- return binary(value);
198
- }
199
- /**
200
- * Normalize the given value to a valid odata value
201
- * @param value The value to normalize
202
- * @returns The normalized value
203
- */
204
- normalize(value) {
205
- return normalizeValue(value);
206
- }
207
- select(opts) {
208
- if (Types.isFunction(opts)) {
209
- return this.options.expression(QueryOption.select, SelectExpression.factory(opts, this.options.expression(QueryOption.select)));
210
- }
211
- return this.options.option(QueryOption.select, opts);
212
- }
213
- expand(opts) {
214
- if (Types.isFunction(opts)) {
215
- return this.options.expression(QueryOption.expand, ExpandExpression.factory(opts, this.options.expression(QueryOption.expand)));
216
- }
217
- return this.options.option(QueryOption.expand, opts);
218
- }
219
- compute(opts) {
220
- if (Types.isFunction(opts)) {
221
- return this.options.expression(QueryOption.compute, ComputeExpression.factory(opts, this.options.expression(QueryOption.compute)));
222
- }
223
- return this.options.option(QueryOption.compute, opts);
224
- }
225
- apply(opts) {
226
- if (Types.isFunction(opts)) {
227
- return this.options.expression(QueryOption.apply, ApplyExpression.factory(opts, this.options.expression(QueryOption.apply)));
228
- }
229
- return this.options.option(QueryOption.apply, opts);
230
- }
231
- format(opts) {
232
- return this.options.option(QueryOption.format, opts);
233
- }
234
- transform(opts) {
235
- return this.options.option(QueryOption.transform, opts);
236
- }
237
- search(opts) {
238
- if (Types.isFunction(opts)) {
239
- return this.options.expression(QueryOption.search, SearchExpression.factory(opts, this.options.expression(QueryOption.search)));
240
- }
241
- return this.options.option(QueryOption.search, opts);
242
- }
243
- filter(opts) {
244
- if (Types.isFunction(opts)) {
245
- return this.options.expression(QueryOption.filter, FilterExpression.factory(opts, this.options.expression(QueryOption.filter)));
246
- }
247
- return this.options.option(QueryOption.filter, opts);
248
- }
249
- orderBy(opts) {
250
- if (Types.isFunction(opts)) {
251
- return this.options.option(QueryOption.orderBy, OrderByExpression.factory(opts, this.options.expression(QueryOption.orderBy)));
252
- }
253
- return this.options.option(QueryOption.orderBy, opts);
254
- }
255
- top(opts) {
256
- return this.options.option(QueryOption.top, opts);
257
- }
258
- skip(opts) {
259
- return this.options.option(QueryOption.skip, opts);
260
- }
261
- skiptoken(opts) {
262
- return this.options.option(QueryOption.skiptoken, opts);
263
- }
264
- remove(...keys) {
265
- this.options.remove(...keys);
266
- }
267
- keep(...keys) {
268
- this.options.keep(...keys);
269
- }
270
- /**
271
- * Shortcut for set $top, $skip, $skiptoken.
272
- * @param param0 skip or top or skiptoken
273
- */
274
- paging({ skip, skiptoken, top, } = {}) {
275
- if (skiptoken !== undefined) {
276
- if (skiptoken !== null) {
277
- this.skiptoken(skiptoken);
278
- }
279
- else {
280
- this.remove(QueryOption.skiptoken);
281
- }
282
- }
283
- if (skip !== undefined) {
284
- if (skip !== null) {
285
- this.skip(skip);
286
- }
287
- else {
288
- this.remove(QueryOption.skip);
289
- }
290
- }
291
- if (top !== undefined) {
292
- if (top !== null) {
293
- this.top(top);
294
- }
295
- else {
296
- this.remove(QueryOption.top);
297
- }
298
- }
299
- }
300
- /**
301
- * Shortcut for clear pagination by unset $top, $skip, $skiptoken.
302
- */
303
- removePaging() {
304
- this.remove(QueryOption.skip, QueryOption.top, QueryOption.skiptoken);
305
- }
306
- /**
307
- * Shortcut for clear query.
308
- */
309
- clear() {
310
- this.options.clear();
311
- }
312
- /**
313
- * Store the query options from the current query.
314
- */
315
- store() {
316
- return this.options.toQueryArguments();
317
- }
318
- /**
319
- * Restore the given query options to the current query.
320
- * @param options The query to be applied.
321
- */
322
- restore(options) {
323
- if (options.select !== undefined) {
324
- if (options.select instanceof SelectExpression) {
325
- this.options.expression(QueryOption.select, options.select);
326
- }
327
- else if (options.select !== null) {
328
- this.options.option(QueryOption.select, options.select);
329
- }
330
- else {
331
- this.options.remove(QueryOption.select);
332
- }
333
- }
334
- if (options.expand !== undefined) {
335
- if (options.expand instanceof ExpandExpression) {
336
- this.options.expression(QueryOption.expand, options.expand);
337
- }
338
- else if (options.expand !== null) {
339
- this.options.option(QueryOption.expand, options.expand);
340
- }
341
- else {
342
- this.options.remove(QueryOption.expand);
343
- }
344
- }
345
- if (options.compute !== undefined) {
346
- if (options.compute instanceof ComputeExpression) {
347
- this.options.expression(QueryOption.compute, options.compute);
348
- }
349
- else if (options.compute !== null) {
350
- this.options.option(QueryOption.compute, options.compute);
351
- }
352
- else {
353
- this.options.remove(QueryOption.compute);
354
- }
355
- }
356
- if (options.apply !== undefined) {
357
- if (options.apply instanceof ApplyExpression) {
358
- this.options.expression(QueryOption.apply, options.apply);
359
- }
360
- else if (options.apply !== null) {
361
- this.options.option(QueryOption.apply, options.apply);
362
- }
363
- else {
364
- this.options.remove(QueryOption.apply);
365
- }
366
- }
367
- if (options.transform !== undefined) {
368
- if (options.transform !== null) {
369
- this.options.option(QueryOption.transform, options.transform);
370
- }
371
- else {
372
- this.options.remove(QueryOption.transform);
373
- }
374
- }
375
- if (options.search !== undefined) {
376
- if (options.search instanceof SearchExpression) {
377
- this.options.expression(QueryOption.search, options.search);
378
- }
379
- else if (options.search !== null) {
380
- this.options.option(QueryOption.search, options.search);
381
- }
382
- else {
383
- this.options.remove(QueryOption.search);
384
- }
385
- }
386
- if (options.filter !== undefined) {
387
- if (options.filter instanceof FilterExpression) {
388
- this.options.expression(QueryOption.filter, options.filter);
389
- }
390
- else if (options.filter !== null) {
391
- this.options.option(QueryOption.filter, options.filter);
392
- }
393
- else {
394
- this.options.remove(QueryOption.filter);
395
- }
396
- }
397
- if (options.orderBy !== undefined) {
398
- if (options.orderBy instanceof OrderByExpression) {
399
- this.options.expression(QueryOption.orderBy, options.orderBy);
400
- }
401
- else if (options.orderBy !== null) {
402
- this.options.option(QueryOption.orderBy, options.orderBy);
403
- }
404
- else {
405
- this.options.remove(QueryOption.orderBy);
406
- }
407
- }
408
- this.paging(options);
409
- }
410
- toJson() {
411
- return this.options.toJson();
412
- }
413
- fromJson(json) {
414
- this.options.fromJson(json);
415
- }
416
- toString({ escape, parser, } = {}) {
417
- return this.options.toString({ escape, parser });
418
- }
419
- }
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBVSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUNMLEtBQUssRUFNTCxjQUFjLEVBQ2QsR0FBRyxFQUNILFFBQVEsRUFDUixNQUFNLEdBQ1AsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFFaEIsaUJBQWlCLEVBRWpCLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFFaEIsZ0JBQWdCLEVBRWhCLGVBQWUsR0FFaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUdMLDZCQUE2QixHQUM5QixNQUFNLFdBQVcsQ0FBQztBQUVuQixNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDLFlBQ1UsQ0FBd0IsRUFDeEIsQ0FBYztRQURkLE1BQUMsR0FBRCxDQUFDLENBQXVCO1FBQ3hCLE1BQUMsR0FBRCxDQUFDLENBQWE7SUFDckIsQ0FBQztJQUVKOztPQUVHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUs7UUFDSCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FB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QyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ2pDLElBQUksT0FBTyxDQUFDLE9BQU8sWUFBWSxpQkFBaUIsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQ3JCLFdBQVcsQ0FBQyxPQUFPLEVBQ25CLE9BQU8sQ0FBQyxPQUErQixDQUN4QyxDQUFDO2FBQ0g7aUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDM0Q7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzFDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBNkI7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUNQLE1BQU0sRUFDTixNQUFNLE1BQ3NDLEVBQUU7UUFDOUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9EYXRhU3RydWN0dXJlZFR5cGUgfSBmcm9tICcuLi8uLi9zY2hlbWEnO1xuaW1wb3J0IHsgUGFyc2VyLCBRdWVyeU9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9iamVjdHMsIFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgYWxpYXMsXG4gIEV4cGFuZCxcbiAgRmlsdGVyLFxuICBPcmRlckJ5LFxuICBTZWxlY3QsXG4gIFRyYW5zZm9ybSxcbiAgbm9ybWFsaXplVmFsdWUsXG4gIHJhdyxcbiAgZHVyYXRpb24sXG4gIGJpbmFyeSxcbn0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7XG4gIENvbXB1dGVFeHByZXNzaW9uLFxuICBDb21wdXRlRXhwcmVzc2lvbkJ1aWxkZXIsXG4gIEZpbHRlckV4cHJlc3Npb24sXG4gIEZpbHRlckV4cHJlc3Npb25CdWlsZGVyLFxuICBPcmRlckJ5RXhwcmVzc2lvbixcbiAgT3JkZXJCeUV4cHJlc3Npb25CdWlsZGVyLFxuICBTZWFyY2hFeHByZXNzaW9uLFxuICBTZWFyY2hFeHByZXNzaW9uQnVpbGRlcixcbiAgRXhwYW5kRXhwcmVzc2lvbixcbiAgRXhwYW5kRXhwcmVzc2lvbkJ1aWxkZXIsXG4gIFNlbGVjdEV4cHJlc3Npb24sXG4gIFNlbGVjdEV4cHJlc3Npb25CdWlsZGVyLFxuICBBcHBseUV4cHJlc3Npb24sXG4gIEFwcGx5RXhwcmVzc2lvbkJ1aWxkZXIsXG59IGZyb20gJy4vZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHtcbiAgT0RhdGFRdWVyeUFyZ3VtZW50cyxcbiAgT0RhdGFRdWVyeU9wdGlvbnMsXG4gIHBhdGhBbmRQYXJhbXNGcm9tUXVlcnlPcHRpb25zLFxufSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG86IE1hcDxRdWVyeU9wdGlvbiwgYW55PixcbiAgICBwcml2YXRlIG46IFF1ZXJ5T3B0aW9uLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi5cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm47XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uIHRvIGEganNvbiBvYmplY3QuXG4gICAqIEByZXR1cm5zIHthbnl9XG4gICAqL1xuICB0b0pzb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuby5nZXQodGhpcy5uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbiBpcyBlbXB0eS5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24gaXMgZW1wdHkuXG4gICAqL1xuICBlbXB0eSgpIHtcbiAgICByZXR1cm4gVHlwZXMuaXNFbXB0eSh0aGlzLm8uZ2V0KHRoaXMubikpO1xuICB9XG5cbiAgLy8jcmVnaW9uIFByaW1pdGl2ZSBWYWx1ZVxuICAvKipcbiAgICogR2V0IG9yIFNldCB0aGUgdmFsdWUgb2YgdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKiBAcGFyYW0gdiBUaGUgdmFsdWUgdG8gc2V0LlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdmFsdWUodj86IGFueSkge1xuICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHRoaXMuby5zZXQodGhpcy5uLCB2KTtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBBcnJheSBWYWx1ZVxuICBwcml2YXRlIGFzc2VydEFycmF5KCk6IGFueVtdIHtcbiAgICBpZiAoIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSlcbiAgICAgIHRoaXMuby5zZXQodGhpcy5uLCB0aGlzLm8uaGFzKHRoaXMubikgPyBbdGhpcy5vLmdldCh0aGlzLm4pXSA6IFtdKTtcbiAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1c2ggdmFsdWUgdG8gdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gcHVzaFxuICAgKi9cbiAgcHVzaCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5hc3NlcnRBcnJheSgpLnB1c2godmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB2YWx1ZSBmcm9tIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi5cbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm8uc2V0KFxuICAgICAgdGhpcy5uLFxuICAgICAgdGhpcy5hc3NlcnRBcnJheSgpLmZpbHRlcigodikgPT4gdiAhPT0gdmFsdWUpLFxuICAgICk7XG4gICAgLy8gSWYgb25seSBvbmUgYW5kIG5vdCBpcyBhcnJheS4uLiBkb3duIHRvIHZhbHVlXG4gICAgaWYgKFxuICAgICAgdGhpcy5vLmdldCh0aGlzLm4pLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pWzBdKVxuICAgIClcbiAgICAgIHRoaXMuby5zZXQodGhpcy5uLCB0aGlzLm8uZ2V0KHRoaXMubilbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB2YWx1ZSBhdCBpbmRleCBvZiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24uXG4gICAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgdmFsdWVcbiAgICogQHJldHVybnMgVGhlIHZhbHVlXG4gICAqL1xuICBhdChpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzZXJ0QXJyYXkoKVtpbmRleF07XG4gIH1cblxuICBzb21lKHByZWRpY2F0ZTogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRBcnJheSgpLnNvbWUocHJlZGljYXRlKTtcbiAgfVxuXG4gIGV2ZXJ5KHByZWRpY2F0ZTogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRBcnJheSgpLmV2ZXJ5KHByZWRpY2F0ZSk7XG4gIH1cblxuICBmaW5kKHByZWRpY2F0ZTogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRBcnJheSgpLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSGFzaE1hcCBWYWx1ZVxuICBwcml2YXRlIGFzc2VydE9iamVjdChjcmVhdGU6IGJvb2xlYW4pOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKFxuICAgICAgIVR5cGVzLmlzQXJyYXkodGhpcy5vLmdldCh0aGlzLm4pKSAmJlxuICAgICAgVHlwZXMuaXNQbGFpbk9iamVjdCh0aGlzLm8uZ2V0KHRoaXMubikpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5vLmdldCh0aGlzLm4pO1xuICAgIH1cbiAgICBsZXQgYXJyID0gdGhpcy5hc3NlcnRBcnJheSgpO1xuICAgIGxldCBvYmogPSBhcnIuZmluZCgodikgPT4gVHlwZXMuaXNQbGFpbk9iamVjdCh2KSk7XG4gICAgaWYgKCFvYmogJiYgY3JlYXRlKSB7XG4gICAgICBvYmogPSB7fTtcbiAgICAgIGFyci5wdXNoKG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBmb3IgcGF0aCBpbiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24uXG4gICAqIEBwYXJhbSBwYXRoIFBhdGggZm9yIHNldCB0aGUgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHNldFxuICAgKi9cbiAgc2V0KHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICBPYmplY3RzLnNldChvYmosIHBhdGgsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHZhbHVlIGZvciBwYXRoIGZyb20gdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBmcm9tIGdldCB0aGUgdmFsdWVcbiAgICogQHBhcmFtIGRlZiBEZWZhdWx0IGlmIG5vdCBmb3VuZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0KHBhdGg6IHN0cmluZywgZGVmPzogYW55KTogYW55IHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QoZmFsc2UpIHx8IHt9O1xuICAgIHJldHVybiBPYmplY3RzLmdldChvYmosIHBhdGgsIGRlZik7XG4gIH1cblxuICAvKipcbiAgICogVW5zZXQgdGhlIHZhbHVlIGZvciBwYXRoIGluIHRoZSBtYW5hZ2VkIG9kYXRhIHF1ZXJ5IG9wdGlvbi5cbiAgICogQHBhcmFtIHBhdGhcbiAgICovXG4gIHVuc2V0KHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICBPYmplY3RzLnVuc2V0KG9iaiwgcGF0aCk7XG5cbiAgICBpZiAoVHlwZXMuaXNBcnJheSh0aGlzLm8uZ2V0KHRoaXMubikpKSB7XG4gICAgICB0aGlzLm8uc2V0KFxuICAgICAgICB0aGlzLm4sXG4gICAgICAgIHRoaXMuby5nZXQodGhpcy5uKS5maWx0ZXIoKHY6IGFueSkgPT4gIVR5cGVzLmlzRW1wdHkodikpLFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLm8uZ2V0KHRoaXMubikubGVuZ3RoID09PSAxKVxuICAgICAgICB0aGlzLm8uc2V0KHRoaXMubiwgdGhpcy5vLmdldCh0aGlzLm4pWzBdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24gaGFzIHRoZSB2YWx1ZS5cbiAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggZm90IHRlc3QgaWYgdGhlIHZhbHVlIGlzIHNldFxuICAgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHZhbHVlIGlzIHNldFxuICAgKi9cbiAgaGFzKHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuaGFzKG9iaiwgcGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgdmFsdWVzIGZyb20gb2JqZWN0IGludG8gdGhlIG1hbmFnZWQgb2RhdGEgcXVlcnkgb3B0aW9uLlxuICAgKiBAcGFyYW0gdmFsdWVzIE9iamVjdCB0byBtZXJnZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXNzaWduKHZhbHVlczogeyBbYXR0cjogc3RyaW5nXTogYW55IH0pIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgcmV0dXJuIE9iamVjdHMubWVyZ2Uob2JqLCB2YWx1ZXMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgbWFuYWdlZCBvZGF0YSBxdWVyeSBvcHRpb24uXG4gICAqL1xuICBjbGVhcigpIHtcbiAgICB0aGlzLm8uZGVsZXRlKHRoaXMubik7XG4gIH1cbiAgdG9TdHJpbmcoe1xuICAgIGVzY2FwZSxcbiAgICBwYXJzZXIsXG4gIH06IHsgZXNjYXBlPzogYm9vbGVhbjsgcGFyc2VyPzogUGFyc2VyPFQ+IH0gPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgW18sIHBhcmFtc10gPSBwYXRoQW5kUGFyYW1zRnJvbVF1ZXJ5T3B0aW9ucyhcbiAgICAgIG5ldyBNYXA8UXVlcnlPcHRpb24sIGFueT4oW1t0aGlzLm4sIHRoaXMuby5nZXQodGhpcy5uKV1dKSxcbiAgICAgIHsgZXNjYXBlLCBwYXJzZXIgfSxcbiAgICApO1xuICAgIHJldHVybiBwYXJhbXNbYCQke3RoaXMubn1gXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFRdWVyeU9wdGlvbnNIYW5kbGVyPFQ+IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG9wdGlvbnM6IE9EYXRhUXVlcnlPcHRpb25zPFQ+KSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYXcgb2RhdGEgdmFsdWVcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byByYXdcbiAgICogQHJldHVybnMgVGhlIHJhdyB2YWx1ZVxuICAgKi9cbiAgcmF3KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gcmF3KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgb2RhdGEgYWxpYXMgcGFyYW1ldGVyXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfUGFyYW1ldGVyQWxpYXNlc1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBhbGlhc1xuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgYWxpYXNcbiAgICogQHJldHVybnMgVGhlIGFsaWFzXG4gICAqL1xuICBhbGlhcyh2YWx1ZTogYW55LCBuYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFsaWFzKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBkdXJhdGlvbiBvZGF0YSB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGR1cmF0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBkdXJhdGlvbiB2YWx1ZVxuICAgKi9cbiAgZHVyYXRpb24odmFsdWU6IGFueSkge1xuICAgIHJldHVybiBkdXJhdGlvbih2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYmluYXJ5IG9kYXRhIHZhbHVlXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmluYXJ5XG4gICAqIEByZXR1cm5zIFRoZSBiaW5hcnkgdmFsdWVcbiAgICovXG4gIGJpbmFyeSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGJpbmFyeSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIHRoZSBnaXZlbiB2YWx1ZSB0byBhIHZhbGlkIG9kYXRhIHZhbHVlXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gbm9ybWFsaXplXG4gICAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHZhbHVlXG4gICAqL1xuICBub3JtYWxpemUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJHNlbGVjdCBvcHRpb24uXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkc2VsZWN0LlxuICAgKiBAcGFyYW0gb3B0cyBTZWxlY3Q8VD4gdmFsdWUgb3IgYnVpbGRlciBmdW5jdGlvbiBmb3IgU2VsZWN0RXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgc2VsZWN0KFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IFNlbGVjdEV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IFNlbGVjdEV4cHJlc3Npb248VD4sXG4gICAgKSA9PiBTZWxlY3RFeHByZXNzaW9uPFQ+LFxuICApOiBTZWxlY3RFeHByZXNzaW9uPFQ+O1xuICBzZWxlY3Qob3B0czogU2VsZWN0PFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlbGVjdCgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgc2VsZWN0KG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uLnNlbGVjdCxcbiAgICAgICAgU2VsZWN0RXhwcmVzc2lvbi5mYWN0b3J5KFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb24uc2VsZWN0KSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPFNlbGVjdDxUPj4oUXVlcnlPcHRpb24uc2VsZWN0LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgcmV0dXJuIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIHRoZSAkZXhwYW5kIG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRleHBhbmQuXG4gICAqIEBwYXJhbSBvcHRzIEV4cGFuZDxUPiB2YWx1ZSBvciBidWlsZGVyIGZ1bmN0aW9uIGZvciBFeHBhbmRFeHByZXNzaW9uPFQ+XG4gICAqL1xuICBleHBhbmQoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogRXhwYW5kRXhwcmVzc2lvbkJ1aWxkZXI8VD4sXG4gICAgICBjdXJyZW50PzogRXhwYW5kRXhwcmVzc2lvbjxUPixcbiAgICApID0+IEV4cGFuZEV4cHJlc3Npb248VD4sXG4gICk6IEV4cGFuZEV4cHJlc3Npb248VD47XG4gIGV4cGFuZChvcHRzOiBFeHBhbmQ8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZXhwYW5kKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBleHBhbmQob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb24uZXhwYW5kLFxuICAgICAgICBFeHBhbmRFeHByZXNzaW9uLmZhY3RvcnkoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbi5leHBhbmQpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248RXhwYW5kPFQ+PihRdWVyeU9wdGlvbi5leHBhbmQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRjb21wdXRlIG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRjb21wdXRlLlxuICAgKiBAbGluayBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1N5c3RlbVF1ZXJ5T3B0aW9uY29tcHV0ZVxuICAgKiBAcGFyYW0gb3B0cyBzdHJpbmcgdmFsdWUgb3IgYnVpbGRlciBmdW5jdGlvbiBmb3IgQ29tcHV0ZUV4cHJlc3Npb248VD5cbiAgICovXG4gIGNvbXB1dGUoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogQ29tcHV0ZUV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IENvbXB1dGVFeHByZXNzaW9uPFQ+LFxuICAgICkgPT4gQ29tcHV0ZUV4cHJlc3Npb248VD4sXG4gICk6IENvbXB1dGVFeHByZXNzaW9uPFQ+O1xuICBjb21wdXRlKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uLmNvbXB1dGUsXG4gICAgICAgIENvbXB1dGVFeHByZXNzaW9uLmZhY3RvcnkoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbi5jb21wdXRlKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb24uY29tcHV0ZSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJGFwcGx5IG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRjb21wdXRlLlxuICAgKiBAbGluayBodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS1kYXRhLWFnZ3JlZ2F0aW9uLWV4dC92NC4wL2NzMDIvb2RhdGEtZGF0YS1hZ2dyZWdhdGlvbi1leHQtdjQuMC1jczAyLmh0bWxcbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlIG9yIGJ1aWxkZXIgZnVuY3Rpb24gZm9yIEFwcGx5RXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgYXBwbHkoXG4gICAgb3B0czogKFxuICAgICAgYnVpbGRlcjogQXBwbHlFeHByZXNzaW9uQnVpbGRlcjxUPixcbiAgICAgIGN1cnJlbnQ/OiBBcHBseUV4cHJlc3Npb248VD4sXG4gICAgKSA9PiBBcHBseUV4cHJlc3Npb248VD4sXG4gICk6IEFwcGx5RXhwcmVzc2lvbjxUPjtcbiAgYXBwbHkob3B0czogc3RyaW5nKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGFwcGx5KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBhcHBseShvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbi5hcHBseSxcbiAgICAgICAgQXBwbHlFeHByZXNzaW9uLmZhY3RvcnkoXG4gICAgICAgICAgb3B0cyxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihRdWVyeU9wdGlvbi5hcHBseSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uLmFwcGx5LCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgcmV0dXJuIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIHRoZSAkZm9ybWF0IG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRmb3JtYXQuXG4gICAqIEBsaW5rIGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfU3lzdGVtUXVlcnlPcHRpb25mb3JtYXRcbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlIGZvciBmb3JtYXRcbiAgICovXG4gIGZvcm1hdChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZm9ybWF0KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmb3JtYXQob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbi5mb3JtYXQsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICR0cmFuc2Zvcm0gb3B0aW9uLlxuICAgKiBJZiBvcHRzIGlzIGdpdmVuIHRoZW4gc2V0IHRlIHZhbHVlIGFzIG5ldyB2YWx1ZSBmb3IgJHRyYW5zZm9ybS5cbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlIGZvciB0cmFuc2Zvcm1cbiAgICovXG4gIHRyYW5zZm9ybShvcHRzOiBUcmFuc2Zvcm08VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdHJhbnNmb3JtKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0cmFuc2Zvcm0ob3B0cz86IFRyYW5zZm9ybTxUPik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248VHJhbnNmb3JtPFQ+PihRdWVyeU9wdGlvbi50cmFuc2Zvcm0sIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRzZWFyY2ggb3B0aW9uLlxuICAgKiBJZiBvcHRzIGlzIGdpdmVuIHRoZW4gc2V0IHRlIHZhbHVlIGFzIG5ldyB2YWx1ZSBmb3IgJHNlYXJjaC5cbiAgICogQHBhcmFtIG9wdHMgc3RyaW5nIHZhbHVlIG9yIGJ1aWxkZXIgZnVuY3Rpb24gZm9yIFNlYXJjaEV4cHJlc3Npb248VD5cbiAgICovXG4gIHNlYXJjaChcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiBTZWFyY2hFeHByZXNzaW9uQnVpbGRlcjxUPixcbiAgICAgIGN1cnJlbnQ/OiBTZWFyY2hFeHByZXNzaW9uPFQ+LFxuICAgICkgPT4gU2VhcmNoRXhwcmVzc2lvbjxUPixcbiAgKTogU2VhcmNoRXhwcmVzc2lvbjxUPjtcbiAgc2VhcmNoKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWFyY2goKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlYXJjaChvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbi5zZWFyY2gsXG4gICAgICAgIFNlYXJjaEV4cHJlc3Npb24uZmFjdG9yeShcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uLnNlYXJjaCksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uLnNlYXJjaCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJGZpbHRlciBvcHRpb24uXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkZmlsdGVyLlxuICAgKiBAcGFyYW0gb3B0cyBGaWx0ZXI8VD4gdmFsdWUgb3IgYnVpbGRlciBmdW5jdGlvbiBmb3IgRmlsdGVyRXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgZmlsdGVyKFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IEZpbHRlckV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IEZpbHRlckV4cHJlc3Npb248VD4sXG4gICAgKSA9PiBGaWx0ZXJFeHByZXNzaW9uPFQ+LFxuICApOiBGaWx0ZXJFeHByZXNzaW9uPFQ+O1xuICBmaWx0ZXIob3B0czogRmlsdGVyPFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIGZpbHRlcigpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZmlsdGVyKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uLmZpbHRlcixcbiAgICAgICAgRmlsdGVyRXhwcmVzc2lvbi5mYWN0b3J5KFxuICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oUXVlcnlPcHRpb24uZmlsdGVyKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPEZpbHRlcjxUPj4oUXVlcnlPcHRpb24uZmlsdGVyLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgcmV0dXJuIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIHRoZSAkb3JkZXJieSBvcHRpb24uXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkb3JkZXJieS5cbiAgICogQHBhcmFtIG9wdHMgT3JkZXJCeTxUPiB2YWx1ZSBvciBidWlsZGVyIGZ1bmN0aW9uIGZvciBPcmRlckJ5RXhwcmVzc2lvbjxUPlxuICAgKi9cbiAgb3JkZXJCeShcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiBPcmRlckJ5RXhwcmVzc2lvbkJ1aWxkZXI8VD4sXG4gICAgICBjdXJyZW50PzogT3JkZXJCeUV4cHJlc3Npb248VD4sXG4gICAgKSA9PiBPcmRlckJ5RXhwcmVzc2lvbjxUPixcbiAgKTogT3JkZXJCeUV4cHJlc3Npb248VD47XG4gIG9yZGVyQnkob3B0czogT3JkZXJCeTxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBvcmRlckJ5KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBvcmRlckJ5KG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbihcbiAgICAgICAgUXVlcnlPcHRpb24ub3JkZXJCeSxcbiAgICAgICAgT3JkZXJCeUV4cHJlc3Npb24uZmFjdG9yeShcbiAgICAgICAgICBvcHRzLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFF1ZXJ5T3B0aW9uLm9yZGVyQnkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248T3JkZXJCeTxUPj4oUXVlcnlPcHRpb24ub3JkZXJCeSwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5kIHJldHVybiBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyB0aGUgJHRvcCBvcHRpb24uXG4gICAqIElmIG9wdHMgaXMgZ2l2ZW4gdGhlbiBzZXQgdGUgdmFsdWUgYXMgbmV3IHZhbHVlIGZvciAkdG9wLlxuICAgKiBAcGFyYW0gb3B0cyBudW1iZXIgdmFsdWVcbiAgICovXG4gIHRvcChvcHRzOiBudW1iZXIpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdG9wKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0b3Aob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbi50b3AsIG9wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuZCByZXR1cm4gYSBoYW5kbGVyIGZvciBtb2RpZnlpbmcgdGhlICRza2lwIG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRza2lwLlxuICAgKiBAcGFyYW0gb3B0cyBudW1iZXIgdmFsdWVcbiAgICovXG4gIHNraXAob3B0czogbnVtYmVyKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXAoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXAob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbi5za2lwLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbmQgcmV0dXJuIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIHRoZSAkc2tpcHRva2VuIG9wdGlvbi5cbiAgICogSWYgb3B0cyBpcyBnaXZlbiB0aGVuIHNldCB0ZSB2YWx1ZSBhcyBuZXcgdmFsdWUgZm9yICRza2lwdG9rZW4uXG4gICAqIEBwYXJhbSBvcHRzIHN0cmluZyB2YWx1ZVxuICAgKi9cbiAgc2tpcHRva2VuKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwdG9rZW4oKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXB0b2tlbihvcHRzPzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uLnNraXB0b2tlbiwgb3B0cyk7XG4gIH1cblxuICByZW1vdmUoLi4ua2V5czogUXVlcnlPcHRpb25bXSkge1xuICAgIHRoaXMub3B0aW9ucy5yZW1vdmUoLi4ua2V5cyk7XG4gIH1cblxuICBrZWVwKC4uLmtleXM6IFF1ZXJ5T3B0aW9uW10pIHtcbiAgICB0aGlzLm9wdGlvbnMua2VlcCguLi5rZXlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBmb3Igc2V0ICR0b3AsICRza2lwLCAkc2tpcHRva2VuLlxuICAgKiBAcGFyYW0gcGFyYW0wIHNraXAgb3IgdG9wIG9yIHNraXB0b2tlblxuICAgKi9cbiAgcGFnaW5nKHtcbiAgICBza2lwLFxuICAgIHNraXB0b2tlbixcbiAgICB0b3AsXG4gIH06IHtcbiAgICBza2lwPzogbnVtYmVyIHwgbnVsbDtcbiAgICBza2lwdG9rZW4/OiBzdHJpbmcgfCBudWxsO1xuICAgIHRvcD86IG51bWJlciB8IG51bGw7XG4gIH0gPSB7fSkge1xuICAgIGlmIChza2lwdG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHNraXB0b2tlbiAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNraXB0b2tlbihza2lwdG9rZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoUXVlcnlPcHRpb24uc2tpcHRva2VuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNraXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHNraXAgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5za2lwKHNraXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoUXVlcnlPcHRpb24uc2tpcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0b3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRvcCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnRvcCh0b3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoUXVlcnlPcHRpb24udG9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgZm9yIGNsZWFyIHBhZ2luYXRpb24gYnkgdW5zZXQgJHRvcCwgJHNraXAsICRza2lwdG9rZW4uXG4gICAqL1xuICByZW1vdmVQYWdpbmcoKSB7XG4gICAgdGhpcy5yZW1vdmUoUXVlcnlPcHRpb24uc2tpcCwgUXVlcnlPcHRpb24udG9wLCBRdWVyeU9wdGlvbi5za2lwdG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IGZvciBjbGVhciBxdWVyeS5cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMub3B0aW9ucy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHRoZSBxdWVyeSBvcHRpb25zIGZyb20gdGhlIGN1cnJlbnQgcXVlcnkuXG4gICAqL1xuICBzdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvUXVlcnlBcmd1bWVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBnaXZlbiBxdWVyeSBvcHRpb25zIHRvIHRoZSBjdXJyZW50IHF1ZXJ5LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgcXVlcnkgdG8gYmUgYXBwbGllZC5cbiAgICovXG4gIHJlc3RvcmUob3B0aW9uczogT0RhdGFRdWVyeUFyZ3VtZW50czxUPikge1xuICAgIGlmIChvcHRpb25zLnNlbGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5zZWxlY3QgaW5zdGFuY2VvZiBTZWxlY3RFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICAgIFF1ZXJ5T3B0aW9uLnNlbGVjdCxcbiAgICAgICAgICBvcHRpb25zLnNlbGVjdCBhcyBTZWxlY3RFeHByZXNzaW9uPFQ+LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnNlbGVjdCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLnNlbGVjdCwgb3B0aW9ucy5zZWxlY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnJlbW92ZShRdWVyeU9wdGlvbi5zZWxlY3QpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5leHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuZXhwYW5kIGluc3RhbmNlb2YgRXhwYW5kRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgICBRdWVyeU9wdGlvbi5leHBhbmQsXG4gICAgICAgICAgb3B0aW9ucy5leHBhbmQgYXMgRXhwYW5kRXhwcmVzc2lvbjxUPixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5leHBhbmQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbi5leHBhbmQsIG9wdGlvbnMuZXhwYW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5yZW1vdmUoUXVlcnlPcHRpb24uZXhwYW5kKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY29tcHV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5jb21wdXRlIGluc3RhbmNlb2YgQ29tcHV0ZUV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgICAgUXVlcnlPcHRpb24uY29tcHV0ZSxcbiAgICAgICAgICBvcHRpb25zLmNvbXB1dGUgYXMgQ29tcHV0ZUV4cHJlc3Npb248VD4sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY29tcHV0ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLmNvbXB1dGUsIG9wdGlvbnMuY29tcHV0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMucmVtb3ZlKFF1ZXJ5T3B0aW9uLmNvbXB1dGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hcHBseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5hcHBseSBpbnN0YW5jZW9mIEFwcGx5RXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgICBRdWVyeU9wdGlvbi5hcHBseSxcbiAgICAgICAgICBvcHRpb25zLmFwcGx5IGFzIEFwcGx5RXhwcmVzc2lvbjxUPixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hcHBseSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLmFwcGx5LCBvcHRpb25zLmFwcGx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5yZW1vdmUoUXVlcnlPcHRpb24uYXBwbHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy50cmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMudHJhbnNmb3JtICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5vcHRpb24oUXVlcnlPcHRpb24udHJhbnNmb3JtLCBvcHRpb25zLnRyYW5zZm9ybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMucmVtb3ZlKFF1ZXJ5T3B0aW9uLnRyYW5zZm9ybSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5zZWFyY2ggaW5zdGFuY2VvZiBTZWFyY2hFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICAgIFF1ZXJ5T3B0aW9uLnNlYXJjaCxcbiAgICAgICAgICBvcHRpb25zLnNlYXJjaCBhcyBTZWFyY2hFeHByZXNzaW9uPFQ+LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnNlYXJjaCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLnNlYXJjaCwgb3B0aW9ucy5zZWFyY2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLnJlbW92ZShRdWVyeU9wdGlvbi5zZWFyY2gpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5maWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyIGluc3RhbmNlb2YgRmlsdGVyRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgICBRdWVyeU9wdGlvbi5maWx0ZXIsXG4gICAgICAgICAgb3B0aW9ucy5maWx0ZXIgYXMgRmlsdGVyRXhwcmVzc2lvbjxUPixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5maWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm9wdGlvbihRdWVyeU9wdGlvbi5maWx0ZXIsIG9wdGlvbnMuZmlsdGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5yZW1vdmUoUXVlcnlPcHRpb24uZmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9wdGlvbnMub3JkZXJCeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAob3B0aW9ucy5vcmRlckJ5IGluc3RhbmNlb2YgT3JkZXJCeUV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgICAgUXVlcnlPcHRpb24ub3JkZXJCeSxcbiAgICAgICAgICBvcHRpb25zLm9yZGVyQnkgYXMgT3JkZXJCeUV4cHJlc3Npb248VD4sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMub3JkZXJCeSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3B0aW9uKFF1ZXJ5T3B0aW9uLm9yZGVyQnksIG9wdGlvbnMub3JkZXJCeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wdGlvbnMucmVtb3ZlKFF1ZXJ5T3B0aW9uLm9yZGVyQnkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhZ2luZyhvcHRpb25zKTtcbiAgfVxuXG4gIHRvSnNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvSnNvbigpO1xuICB9XG5cbiAgZnJvbUpzb24oanNvbjogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICB0aGlzLm9wdGlvbnMuZnJvbUpzb24oanNvbik7XG4gIH1cblxuICB0b1N0cmluZyh7XG4gICAgZXNjYXBlLFxuICAgIHBhcnNlcixcbiAgfTogeyBlc2NhcGU/OiBib29sZWFuOyBwYXJzZXI/OiBQYXJzZXI8VD4gfSA9IHt9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvU3RyaW5nKHsgZXNjYXBlLCBwYXJzZXIgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +0,0 @@
1
- export * from './builder';
2
- export * from './options';
3
- export * from './handlers';
4
- export * from './expressions';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9idWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2hhbmRsZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vZXhwcmVzc2lvbnMnO1xuIl19