angular-odata 0.90.0 → 0.99.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 (223) hide show
  1. package/README.md +31 -25
  2. package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
  3. package/esm2020/lib/api.mjs +303 -0
  4. package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +3 -3
  5. package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
  6. package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +1 -1
  7. package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +2 -2
  8. package/esm2020/lib/client.mjs +271 -0
  9. package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +8 -3
  10. package/esm2020/lib/helper.mjs +268 -0
  11. package/esm2020/lib/index.mjs +19 -0
  12. package/esm2020/lib/models/collection.mjs +757 -0
  13. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  14. package/esm2020/lib/models/model.mjs +453 -0
  15. package/esm2020/lib/models/options.mjs +956 -0
  16. package/{esm2015/lib/module.js → esm2020/lib/module.mjs} +7 -7
  17. package/esm2020/lib/options.mjs +32 -0
  18. package/{esm2015/lib/resources/index.js → esm2020/lib/resources/index.mjs} +0 -0
  19. package/{esm2015/lib/resources/path/handlers.js → esm2020/lib/resources/path/handlers.mjs} +1 -1
  20. package/{esm2015/lib/resources/path/index.js → esm2020/lib/resources/path/index.mjs} +0 -0
  21. package/esm2020/lib/resources/path/segments.mjs +124 -0
  22. package/esm2020/lib/resources/query/builder.mjs +590 -0
  23. package/esm2020/lib/resources/query/expressions/base.mjs +20 -0
  24. package/esm2020/lib/resources/query/expressions/compute.mjs +38 -0
  25. package/esm2020/lib/resources/query/expressions/expand.mjs +57 -0
  26. package/esm2020/lib/resources/query/expressions/filter.mjs +154 -0
  27. package/esm2020/lib/resources/query/expressions/index.mjs +7 -0
  28. package/esm2020/lib/resources/query/expressions/orderby.mjs +54 -0
  29. package/esm2020/lib/resources/query/expressions/search.mjs +113 -0
  30. package/esm2020/lib/resources/query/expressions/select.mjs +32 -0
  31. package/esm2020/lib/resources/query/expressions/syntax.mjs +371 -0
  32. package/esm2020/lib/resources/query/handlers.mjs +188 -0
  33. package/{esm2015/lib/resources/query/index.js → esm2020/lib/resources/query/index.mjs} +0 -0
  34. package/esm2020/lib/resources/query/options.mjs +103 -0
  35. package/esm2020/lib/resources/request.mjs +167 -0
  36. package/esm2020/lib/resources/resource.mjs +318 -0
  37. package/esm2020/lib/resources/responses/annotations.mjs +119 -0
  38. package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
  39. package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
  40. package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
  41. package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
  42. package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
  43. package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
  44. package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
  45. package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
  46. package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
  47. package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
  48. package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
  49. package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
  50. package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
  51. package/esm2020/lib/resources/responses/metadata.mjs +547 -0
  52. package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +0 -0
  53. package/{esm2015/lib/resources/responses/response.js → esm2020/lib/resources/responses/response.mjs} +0 -0
  54. package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +0 -0
  55. package/esm2020/lib/resources/types/action.mjs +104 -0
  56. package/esm2020/lib/resources/types/batch.mjs +314 -0
  57. package/esm2020/lib/resources/types/count.mjs +30 -0
  58. package/esm2020/lib/resources/types/entity-set.mjs +97 -0
  59. package/esm2020/lib/resources/types/entity.mjs +109 -0
  60. package/esm2020/lib/resources/types/function.mjs +140 -0
  61. package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
  62. package/esm2020/lib/resources/types/media.mjs +44 -0
  63. package/esm2020/lib/resources/types/metadata.mjs +33 -0
  64. package/esm2020/lib/resources/types/navigation-property.mjs +229 -0
  65. package/esm2020/lib/resources/types/options.mjs +2 -0
  66. package/esm2020/lib/resources/types/property.mjs +186 -0
  67. package/esm2020/lib/resources/types/reference.mjs +88 -0
  68. package/esm2020/lib/resources/types/singleton.mjs +129 -0
  69. package/esm2020/lib/resources/types/value.mjs +44 -0
  70. package/esm2020/lib/schema/annotation.mjs +37 -0
  71. package/esm2020/lib/schema/callable.mjs +62 -0
  72. package/esm2020/lib/schema/element.mjs +61 -0
  73. package/esm2020/lib/schema/entity-container.mjs +9 -0
  74. package/esm2020/lib/schema/entity-set.mjs +9 -0
  75. package/esm2020/lib/schema/enum-type.mjs +71 -0
  76. package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +2 -1
  77. package/esm2020/lib/schema/parsers/callable.mjs +113 -0
  78. package/esm2020/lib/schema/parsers/edm.mjs +95 -0
  79. package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
  80. package/esm2020/lib/schema/parsers/index.mjs +5 -0
  81. package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
  82. package/esm2020/lib/schema/schema.mjs +61 -0
  83. package/esm2020/lib/schema/structured-type.mjs +207 -0
  84. package/esm2020/lib/services/base.mjs +29 -0
  85. package/esm2020/lib/services/entity-set.mjs +143 -0
  86. package/esm2020/lib/services/entity.mjs +12 -0
  87. package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
  88. package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
  89. package/{esm2015/lib/services/singleton.js → esm2020/lib/services/singleton.mjs} +1 -1
  90. package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
  91. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  92. package/esm2020/lib/types.mjs +37 -0
  93. package/{esm2015/lib/utils/arraybuffers.js → esm2020/lib/utils/arraybuffers.mjs} +0 -0
  94. package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
  95. package/{esm2015/lib/utils/durations.js → esm2020/lib/utils/durations.mjs} +0 -0
  96. package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
  97. package/{esm2015/lib/utils/http.js → esm2020/lib/utils/http.mjs} +0 -0
  98. package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
  99. package/{esm2015/lib/utils/objects.js → esm2020/lib/utils/objects.mjs} +13 -13
  100. package/esm2020/lib/utils/odata.mjs +22 -0
  101. package/esm2020/lib/utils/strings.mjs +20 -0
  102. package/{esm2015/lib/utils/types.js → esm2020/lib/utils/types.mjs} +0 -0
  103. package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
  104. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  105. package/fesm2015/{angular-odata.js → angular-odata.mjs} +3427 -2872
  106. package/fesm2015/angular-odata.mjs.map +1 -0
  107. package/fesm2020/angular-odata.mjs +10589 -0
  108. package/fesm2020/angular-odata.mjs.map +1 -0
  109. package/lib/api.d.ts +14 -14
  110. package/lib/cache/cache.d.ts +2 -2
  111. package/lib/cache/storage.d.ts +1 -1
  112. package/lib/client.d.ts +3 -3
  113. package/lib/constants.d.ts +5 -2
  114. package/lib/index.d.ts +0 -1
  115. package/lib/models/collection.d.ts +21 -21
  116. package/lib/models/model.d.ts +34 -22
  117. package/lib/models/options.d.ts +26 -29
  118. package/lib/module.d.ts +1 -1
  119. package/lib/options.d.ts +1 -0
  120. package/lib/resources/path/segments.d.ts +2 -2
  121. package/lib/resources/query/builder.d.ts +7 -3
  122. package/lib/resources/query/expressions/base.d.ts +19 -0
  123. package/lib/resources/query/expressions/compute.d.ts +26 -0
  124. package/lib/resources/query/expressions/expand.d.ts +40 -0
  125. package/lib/resources/query/expressions/filter.d.ts +58 -0
  126. package/lib/resources/query/expressions/index.d.ts +6 -0
  127. package/lib/resources/query/expressions/orderby.d.ts +37 -0
  128. package/lib/resources/query/expressions/search.d.ts +47 -0
  129. package/lib/resources/query/expressions/select.d.ts +21 -0
  130. package/lib/resources/query/{syntax.d.ts → expressions/syntax.d.ts} +74 -55
  131. package/lib/resources/query/handlers.d.ts +30 -19
  132. package/lib/resources/query/options.d.ts +3 -3
  133. package/lib/resources/request.d.ts +1 -1
  134. package/lib/resources/resource.d.ts +30 -12
  135. package/lib/resources/types/action.d.ts +12 -18
  136. package/lib/resources/types/batch.d.ts +10 -2
  137. package/lib/resources/types/count.d.ts +6 -4
  138. package/lib/resources/types/entity-set.d.ts +11 -14
  139. package/lib/resources/types/entity.d.ts +13 -15
  140. package/lib/resources/types/function.d.ts +11 -17
  141. package/lib/resources/types/media.d.ts +8 -6
  142. package/lib/resources/types/metadata.d.ts +3 -4
  143. package/lib/resources/types/navigation-property.d.ts +17 -22
  144. package/lib/resources/types/property.d.ts +13 -18
  145. package/lib/resources/types/reference.d.ts +41 -7
  146. package/lib/resources/types/singleton.d.ts +12 -15
  147. package/lib/resources/types/value.d.ts +9 -4
  148. package/lib/schema/annotation.d.ts +18 -0
  149. package/lib/schema/callable.d.ts +4 -20
  150. package/lib/schema/element.d.ts +45 -0
  151. package/lib/schema/entity-container.d.ts +2 -12
  152. package/lib/schema/entity-set.d.ts +2 -18
  153. package/lib/schema/enum-type.d.ts +3 -34
  154. package/lib/schema/index.d.ts +1 -0
  155. package/lib/{parsers → schema/parsers}/callable.d.ts +1 -1
  156. package/lib/{parsers → schema/parsers}/edm.d.ts +1 -1
  157. package/lib/{parsers → schema/parsers}/enum-type.d.ts +12 -11
  158. package/lib/{parsers → schema/parsers}/index.d.ts +0 -0
  159. package/lib/{parsers → schema/parsers}/structured-type.d.ts +12 -12
  160. package/lib/schema/schema.d.ts +3 -10
  161. package/lib/schema/structured-type.d.ts +12 -24
  162. package/lib/services/base.d.ts +2 -2
  163. package/lib/services/entity-set.d.ts +2 -2
  164. package/lib/services/entity.d.ts +1 -1
  165. package/lib/services/singleton.d.ts +2 -2
  166. package/lib/settings.d.ts +5 -5
  167. package/lib/types.d.ts +1 -0
  168. package/lib/utils/strings.d.ts +1 -0
  169. package/package.json +21 -8
  170. package/bundles/angular-odata.umd.js +0 -11694
  171. package/bundles/angular-odata.umd.js.map +0 -1
  172. package/esm2015/lib/api.js +0 -297
  173. package/esm2015/lib/client.js +0 -272
  174. package/esm2015/lib/helper.js +0 -271
  175. package/esm2015/lib/index.js +0 -21
  176. package/esm2015/lib/models/collection.js +0 -717
  177. package/esm2015/lib/models/model.js +0 -419
  178. package/esm2015/lib/models/options.js +0 -924
  179. package/esm2015/lib/options.js +0 -31
  180. package/esm2015/lib/parsers/callable.js +0 -107
  181. package/esm2015/lib/parsers/edm.js +0 -95
  182. package/esm2015/lib/parsers/enum-type.js +0 -102
  183. package/esm2015/lib/parsers/index.js +0 -5
  184. package/esm2015/lib/parsers/structured-type.js +0 -388
  185. package/esm2015/lib/resources/path/segments.js +0 -121
  186. package/esm2015/lib/resources/query/builder.js +0 -544
  187. package/esm2015/lib/resources/query/expressions.js +0 -194
  188. package/esm2015/lib/resources/query/handlers.js +0 -192
  189. package/esm2015/lib/resources/query/options.js +0 -103
  190. package/esm2015/lib/resources/query/syntax.js +0 -349
  191. package/esm2015/lib/resources/request.js +0 -168
  192. package/esm2015/lib/resources/resource.js +0 -243
  193. package/esm2015/lib/resources/responses/annotations.js +0 -121
  194. package/esm2015/lib/resources/responses/metadata.js +0 -548
  195. package/esm2015/lib/resources/types/action.js +0 -105
  196. package/esm2015/lib/resources/types/batch.js +0 -294
  197. package/esm2015/lib/resources/types/count.js +0 -33
  198. package/esm2015/lib/resources/types/entity-set.js +0 -101
  199. package/esm2015/lib/resources/types/entity.js +0 -137
  200. package/esm2015/lib/resources/types/function.js +0 -130
  201. package/esm2015/lib/resources/types/media.js +0 -47
  202. package/esm2015/lib/resources/types/metadata.js +0 -36
  203. package/esm2015/lib/resources/types/navigation-property.js +0 -205
  204. package/esm2015/lib/resources/types/options.js +0 -2
  205. package/esm2015/lib/resources/types/property.js +0 -151
  206. package/esm2015/lib/resources/types/reference.js +0 -73
  207. package/esm2015/lib/resources/types/singleton.js +0 -167
  208. package/esm2015/lib/resources/types/value.js +0 -35
  209. package/esm2015/lib/schema/annotation.js +0 -7
  210. package/esm2015/lib/schema/callable.js +0 -82
  211. package/esm2015/lib/schema/entity-container.js +0 -22
  212. package/esm2015/lib/schema/entity-set.js +0 -33
  213. package/esm2015/lib/schema/enum-type.js +0 -126
  214. package/esm2015/lib/schema/schema.js +0 -60
  215. package/esm2015/lib/schema/structured-type.js +0 -217
  216. package/esm2015/lib/services/base.js +0 -23
  217. package/esm2015/lib/services/entity-set.js +0 -146
  218. package/esm2015/lib/services/entity.js +0 -12
  219. package/esm2015/lib/types.js +0 -37
  220. package/esm2015/lib/utils/odata.js +0 -21
  221. package/esm2015/lib/utils/strings.js +0 -13
  222. package/fesm2015/angular-odata.js.map +0 -1
  223. package/lib/resources/query/expressions.d.ts +0 -50
@@ -1,194 +0,0 @@
1
- import { syntax } from './syntax';
2
- export var Connector;
3
- (function (Connector) {
4
- Connector["AND"] = "and";
5
- Connector["OR"] = "or";
6
- })(Connector || (Connector = {}));
7
- export class Expression {
8
- constructor({ children, connector, negated, } = {}) {
9
- this._children = children || [];
10
- this._connector = connector || Connector.AND;
11
- this._negated = negated || false;
12
- }
13
- get [Symbol.toStringTag]() {
14
- return 'Expression';
15
- }
16
- static e() {
17
- return new Expression({ connector: Connector.AND });
18
- }
19
- static and() {
20
- return new Expression({ connector: Connector.AND });
21
- }
22
- static or() {
23
- return new Expression({ connector: Connector.OR });
24
- }
25
- static not(exp) {
26
- return new Expression({
27
- children: exp.children(),
28
- connector: exp.connector(),
29
- negated: true,
30
- });
31
- }
32
- toJSON() {
33
- return {
34
- children: this._children.map((c) => c.toJSON()),
35
- connector: this._connector,
36
- negated: this._negated,
37
- };
38
- }
39
- children() {
40
- return this._children;
41
- }
42
- connector() {
43
- return this._connector;
44
- }
45
- negated() {
46
- return this._negated;
47
- }
48
- length() {
49
- return this._children.length;
50
- }
51
- render(aliases) {
52
- let content = this._children
53
- .map((n) => n.render(aliases))
54
- .join(` ${this._connector} `);
55
- if (this._negated) {
56
- content = `not (${content})`;
57
- }
58
- return content;
59
- }
60
- _add(node, connector) {
61
- if (connector !== undefined && this._connector !== connector) {
62
- let children = [];
63
- if (this._children.length > 0) {
64
- if (this._children.length === 1) {
65
- children = [...this._children];
66
- }
67
- else {
68
- let exp = new Expression({
69
- children: this._children,
70
- connector: this._connector,
71
- negated: this._negated,
72
- });
73
- if (exp.length() > 1) {
74
- children.push(syntax.grouping(exp));
75
- }
76
- else {
77
- children.push(exp);
78
- }
79
- }
80
- }
81
- if (node instanceof Expression &&
82
- (node.connector() === connector || node.length() === 1)) {
83
- children = [...children, ...node.children()];
84
- }
85
- else {
86
- children.push(syntax.grouping(node));
87
- }
88
- this._connector = connector;
89
- this._children = children;
90
- }
91
- else if (node instanceof Expression &&
92
- !node.negated() &&
93
- (node.connector() === connector || node.length() === 1)) {
94
- this._children = [...this._children, ...node.children()];
95
- }
96
- else {
97
- this._children.push(node instanceof Expression && !node.negated()
98
- ? syntax.grouping(node)
99
- : node);
100
- }
101
- return this;
102
- }
103
- or(exp) {
104
- return this._add(typeof exp === 'function' ? exp(new Expression()) : exp, Connector.OR);
105
- }
106
- and(exp) {
107
- return this._add(typeof exp === 'function' ? exp(new Expression()) : exp, Connector.AND);
108
- }
109
- not(exp) {
110
- return this._add(Expression.not(typeof exp === 'function' ? exp(new Expression()) : exp), this._connector);
111
- }
112
- eq(left, right, normalize) {
113
- return this._add(syntax.eq(left, right, normalize));
114
- }
115
- ne(left, right, normalize) {
116
- return this._add(syntax.ne(left, right, normalize));
117
- }
118
- gt(left, right, normalize) {
119
- return this._add(syntax.gt(left, right, normalize));
120
- }
121
- ge(left, right, normalize) {
122
- return this._add(syntax.ge(left, right, normalize));
123
- }
124
- lt(left, right, normalize) {
125
- return this._add(syntax.lt(left, right, normalize));
126
- }
127
- le(left, right, normalize) {
128
- return this._add(syntax.le(left, right, normalize));
129
- }
130
- has(left, right, normalize) {
131
- return this._add(syntax.has(left, right, normalize));
132
- }
133
- in(left, right, normalize) {
134
- return this._add(syntax.in(left, right, normalize));
135
- }
136
- contains(left, right, normalize) {
137
- return this._add(syntax.contains(left, right, normalize));
138
- }
139
- startsWith(left, right, normalize) {
140
- return this._add(syntax.startsWith(left, right, normalize));
141
- }
142
- endsWith(left, right, normalize) {
143
- return this._add(syntax.endsWith(left, right, normalize));
144
- }
145
- any(left, exp) {
146
- return this._add(syntax.any(left, typeof exp === 'function' ? exp(new Expression()) : exp));
147
- }
148
- all(left, exp) {
149
- return this._add(syntax.all(left, typeof exp === 'function' ? exp(new Expression()) : exp));
150
- }
151
- isof(left, type) {
152
- return this._add(syntax.isof(left, type));
153
- }
154
- }
155
- /*
156
- export class FilterExpression<T> extends Expression<T> {
157
- constructor({
158
- children,
159
- connector,
160
- negated,
161
- }: {
162
- children?: Renderable[];
163
- connector?: Connector;
164
- negated?: boolean;
165
- } = {}) {
166
- super({ children, connector, negated });
167
- }
168
-
169
- get [Symbol.toStringTag]() {
170
- return 'FilterExpression';
171
- }
172
-
173
- static e<T>() {
174
- return new FilterExpression<T>({ connector: Connector.AND });
175
- }
176
-
177
- static and<T>() {
178
- return new FilterExpression<T>({ connector: Connector.AND });
179
- }
180
-
181
- static or<T>() {
182
- return new FilterExpression<T>({ connector: Connector.OR });
183
- }
184
-
185
- static not<T>(exp: FilterExpression<T>) {
186
- return new FilterExpression<T>({
187
- children: exp.children(),
188
- connector: exp.connector(),
189
- negated: true,
190
- });
191
- }
192
- }
193
- */
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2V4cHJlc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbEMsTUFBTSxDQUFOLElBQVksU0FHWDtBQUhELFdBQVksU0FBUztJQUNuQix3QkFBVyxDQUFBO0lBQ1gsc0JBQVMsQ0FBQTtBQUNYLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVELE1BQU0sT0FBTyxVQUFVO0lBSXJCLFlBQVksRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULE9BQU8sTUFLTCxFQUFFO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLENBQUM7UUFDTixPQUFPLElBQUksVUFBVSxDQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRztRQUNSLE9BQU8sSUFBSSxVQUFVLENBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFFO1FBQ1AsT0FBTyxJQUFJLFVBQVUsQ0FBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENB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QUFNLENBQUMsR0FBRyxDQUNSLElBQUksRUFDSixPQUFPLEdBQUcsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsRUFBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDM0QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEdBQUcsQ0FDRCxJQUFjLEVBQ2QsR0FBMEQ7UUFFMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLE1BQU0sQ0FBQyxHQUFHLENBQ1IsSUFBSSxFQUNKLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxFQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUMzRCxDQUNGLENBQUM7SUFDSixDQUFDO0lBSUQsSUFBSSxDQUFDLElBQVMsRUFBRSxJQUFhO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNDRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB0eXBlIHsgRmllbGQsIFJlbmRlcmFibGUgfSBmcm9tICcuL3N5bnRheCc7XG5pbXBvcnQgeyBzeW50YXggfSBmcm9tICcuL3N5bnRheCc7XG5cbmV4cG9ydCBlbnVtIENvbm5lY3RvciB7XG4gIEFORCA9ICdhbmQnLFxuICBPUiA9ICdvcicsXG59XG5cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIHByaXZhdGUgX2Nvbm5lY3RvcjogQ29ubmVjdG9yO1xuICBwcml2YXRlIF9uZWdhdGVkOiBib29sZWFuO1xuICBwcml2YXRlIF9jaGlsZHJlbjogUmVuZGVyYWJsZVtdO1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgY2hpbGRyZW4sXG4gICAgY29ubmVjdG9yLFxuICAgIG5lZ2F0ZWQsXG4gIH06IHtcbiAgICBjaGlsZHJlbj86IFJlbmRlcmFibGVbXTtcbiAgICBjb25uZWN0b3I/OiBDb25uZWN0b3I7XG4gICAgbmVnYXRlZD86IGJvb2xlYW47XG4gIH0gPSB7fSkge1xuICAgIHRoaXMuX2NoaWxkcmVuID0gY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy5fY29ubmVjdG9yID0gY29ubmVjdG9yIHx8IENvbm5lY3Rvci5BTkQ7XG4gICAgdGhpcy5fbmVnYXRlZCA9IG5lZ2F0ZWQgfHwgZmFsc2U7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdFeHByZXNzaW9uJztcbiAgfVxuXG4gIHN0YXRpYyBlPFQ+KCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbjxUPih7IGNvbm5lY3RvcjogQ29ubmVjdG9yLkFORCB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbmQ8VD4oKSB7XG4gICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uPFQ+KHsgY29ubmVjdG9yOiBDb25uZWN0b3IuQU5EIH0pO1xuICB9XG5cbiAgc3RhdGljIG9yPFQ+KCkge1xuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbjxUPih7IGNvbm5lY3RvcjogQ29ubmVjdG9yLk9SIH0pO1xuICB9XG5cbiAgc3RhdGljIG5vdDxUPihleHA6IEV4cHJlc3Npb248VD4pIHtcbiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb248VD4oe1xuICAgICAgY2hpbGRyZW46IGV4cC5jaGlsZHJlbigpLFxuICAgICAgY29ubmVjdG9yOiBleHAuY29ubmVjdG9yKCksXG4gICAgICBuZWdhdGVkOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogdGhpcy5fY2hpbGRyZW4ubWFwKChjKSA9PiBjLnRvSlNPTigpKSxcbiAgICAgIGNvbm5lY3RvcjogdGhpcy5fY29ubmVjdG9yLFxuICAgICAgbmVnYXRlZDogdGhpcy5fbmVnYXRlZCxcbiAgICB9O1xuICB9XG5cbiAgY2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICB9XG5cbiAgY29ubmVjdG9yKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3I7XG4gIH1cblxuICBuZWdhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9uZWdhdGVkO1xuICB9XG5cbiAgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbi5sZW5ndGg7XG4gIH1cblxuICByZW5kZXIoYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdKTogc3RyaW5nIHtcbiAgICBsZXQgY29udGVudCA9IHRoaXMuX2NoaWxkcmVuXG4gICAgICAubWFwKChuKSA9PiBuLnJlbmRlcihhbGlhc2VzKSlcbiAgICAgIC5qb2luKGAgJHt0aGlzLl9jb25uZWN0b3J9IGApO1xuICAgIGlmICh0aGlzLl9uZWdhdGVkKSB7XG4gICAgICBjb250ZW50ID0gYG5vdCAoJHtjb250ZW50fSlgO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIHByaXZhdGUgX2FkZChub2RlOiBSZW5kZXJhYmxlLCBjb25uZWN0b3I/OiBDb25uZWN0b3IpOiBFeHByZXNzaW9uPFQ+IHtcbiAgICBpZiAoY29ubmVjdG9yICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fY29ubmVjdG9yICE9PSBjb25uZWN0b3IpIHtcbiAgICAgIGxldCBjaGlsZHJlbjogUmVuZGVyYWJsZVtdID0gW107XG4gICAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5fY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY2hpbGRyZW4gPSBbLi4udGhpcy5fY2hpbGRyZW5dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBleHAgPSBuZXcgRXhwcmVzc2lvbjxUPih7XG4gICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5fY2hpbGRyZW4sXG4gICAgICAgICAgICBjb25uZWN0b3I6IHRoaXMuX2Nvbm5lY3RvcixcbiAgICAgICAgICAgIG5lZ2F0ZWQ6IHRoaXMuX25lZ2F0ZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGV4cC5sZW5ndGgoKSA+IDEpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goc3ludGF4Lmdyb3VwaW5nKGV4cCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGV4cCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUgaW5zdGFuY2VvZiBFeHByZXNzaW9uICYmXG4gICAgICAgIChub2RlLmNvbm5lY3RvcigpID09PSBjb25uZWN0b3IgfHwgbm9kZS5sZW5ndGgoKSA9PT0gMSlcbiAgICAgICkge1xuICAgICAgICBjaGlsZHJlbiA9IFsuLi5jaGlsZHJlbiwgLi4ubm9kZS5jaGlsZHJlbigpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goc3ludGF4Lmdyb3VwaW5nKG5vZGUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nvbm5lY3RvciA9IGNvbm5lY3RvcjtcbiAgICAgIHRoaXMuX2NoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG5vZGUgaW5zdGFuY2VvZiBFeHByZXNzaW9uICYmXG4gICAgICAhbm9kZS5uZWdhdGVkKCkgJiZcbiAgICAgIChub2RlLmNvbm5lY3RvcigpID09PSBjb25uZWN0b3IgfHwgbm9kZS5sZW5ndGgoKSA9PT0gMSlcbiAgICApIHtcbiAgICAgIHRoaXMuX2NoaWxkcmVuID0gWy4uLnRoaXMuX2NoaWxkcmVuLCAuLi5ub2RlLmNoaWxkcmVuKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKFxuICAgICAgICBub2RlIGluc3RhbmNlb2YgRXhwcmVzc2lvbiAmJiAhbm9kZS5uZWdhdGVkKClcbiAgICAgICAgICA/IHN5bnRheC5ncm91cGluZyhub2RlKVxuICAgICAgICAgIDogbm9kZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcihcbiAgICBleHA6IEV4cHJlc3Npb248VD4gfCAoKHg6IEV4cHJlc3Npb248VD4pID0+IEV4cHJlc3Npb248VD4pXG4gICk6IEV4cHJlc3Npb248VD4ge1xuICAgIHJldHVybiB0aGlzLl9hZGQoXG4gICAgICB0eXBlb2YgZXhwID09PSAnZnVuY3Rpb24nID8gZXhwKG5ldyBFeHByZXNzaW9uPFQ+KCkpIDogZXhwLFxuICAgICAgQ29ubmVjdG9yLk9SXG4gICAgKTtcbiAgfVxuXG4gIGFuZChcbiAgICBleHA6IEV4cHJlc3Npb248VD4gfCAoKHg6IEV4cHJlc3Npb248VD4pID0+IEV4cHJlc3Npb248VD4pXG4gICk6IEV4cHJlc3Npb248VD4ge1xuICAgIHJldHVybiB0aGlzLl9hZGQoXG4gICAgICB0eXBlb2YgZXhwID09PSAnZnVuY3Rpb24nID8gZXhwKG5ldyBFeHByZXNzaW9uPFQ+KCkpIDogZXhwLFxuICAgICAgQ29ubmVjdG9yLkFORFxuICAgICk7XG4gIH1cblxuICBub3QoXG4gICAgZXhwOiBFeHByZXNzaW9uPFQ+IHwgKCh4OiBFeHByZXNzaW9uPFQ+KSA9PiBFeHByZXNzaW9uPFQ+KVxuICApOiBFeHByZXNzaW9uPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKFxuICAgICAgRXhwcmVzc2lvbi5ub3QoXG4gICAgICAgIHR5cGVvZiBleHAgPT09ICdmdW5jdGlvbicgPyBleHAobmV3IEV4cHJlc3Npb248VD4oKSkgOiBleHBcbiAgICAgICksXG4gICAgICB0aGlzLl9jb25uZWN0b3JcbiAgICApO1xuICB9XG5cbiAgZXEobGVmdDogRmllbGQ8VD4sIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKHN5bnRheC5lcShsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBuZShsZWZ0OiBGaWVsZDxUPiwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiB0aGlzLl9hZGQoc3ludGF4Lm5lKGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIGd0KGxlZnQ6IEZpZWxkPFQ+LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChzeW50YXguZ3QobGVmdCwgcmlnaHQsIG5vcm1hbGl6ZSkpO1xuICB9XG5cbiAgZ2UobGVmdDogRmllbGQ8VD4sIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKHN5bnRheC5nZShsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBsdChsZWZ0OiBGaWVsZDxUPiwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiB0aGlzLl9hZGQoc3ludGF4Lmx0KGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIGxlKGxlZnQ6IEZpZWxkPFQ+LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChzeW50YXgubGUobGVmdCwgcmlnaHQsIG5vcm1hbGl6ZSkpO1xuICB9XG5cbiAgaGFzKGxlZnQ6IEZpZWxkPFQ+LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChzeW50YXguaGFzKGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIGluKGxlZnQ6IEZpZWxkPFQ+LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChzeW50YXguaW4obGVmdCwgcmlnaHQsIG5vcm1hbGl6ZSkpO1xuICB9XG5cbiAgY29udGFpbnMobGVmdDogRmllbGQ8VD4sIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKHN5bnRheC5jb250YWlucyhsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBzdGFydHNXaXRoKGxlZnQ6IEZpZWxkPFQ+LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChzeW50YXguc3RhcnRzV2l0aChsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBlbmRzV2l0aChsZWZ0OiBGaWVsZDxUPiwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiB0aGlzLl9hZGQoc3ludGF4LmVuZHNXaXRoKGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIGFueTxOPihcbiAgICBsZWZ0OiBGaWVsZDxUPixcbiAgICBleHA6IEV4cHJlc3Npb248Tj4gfCAoKHg6IEV4cHJlc3Npb248Tj4pID0+IEV4cHJlc3Npb248Tj4pXG4gICkge1xuICAgIHJldHVybiB0aGlzLl9hZGQoXG4gICAgICBzeW50YXguYW55KFxuICAgICAgICBsZWZ0LFxuICAgICAgICB0eXBlb2YgZXhwID09PSAnZnVuY3Rpb24nID8gZXhwKG5ldyBFeHByZXNzaW9uPE4+KCkpIDogZXhwXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGFsbDxOPihcbiAgICBsZWZ0OiBGaWVsZDxUPixcbiAgICBleHA6IEV4cHJlc3Npb248Tj4gfCAoKHg6IEV4cHJlc3Npb248Tj4pID0+IEV4cHJlc3Npb248Tj4pXG4gICkge1xuICAgIHJldHVybiB0aGlzLl9hZGQoXG4gICAgICBzeW50YXguYWxsKFxuICAgICAgICBsZWZ0LFxuICAgICAgICB0eXBlb2YgZXhwID09PSAnZnVuY3Rpb24nID8gZXhwKG5ldyBFeHByZXNzaW9uPE4+KCkpIDogZXhwXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlzb2YodHlwZTogc3RyaW5nKTogRXhwcmVzc2lvbjxUPjtcbiAgaXNvZihsZWZ0OiBGaWVsZDxUPiwgdHlwZTogc3RyaW5nKTogRXhwcmVzc2lvbjxUPjtcbiAgaXNvZihsZWZ0OiBhbnksIHR5cGU/OiBzdHJpbmcpOiBFeHByZXNzaW9uPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKHN5bnRheC5pc29mKGxlZnQsIHR5cGUpKTtcbiAgfVxufVxuXG4vKlxuZXhwb3J0IGNsYXNzIEZpbHRlckV4cHJlc3Npb248VD4gZXh0ZW5kcyBFeHByZXNzaW9uPFQ+IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbm5lY3RvcixcbiAgICBuZWdhdGVkLFxuICB9OiB7XG4gICAgY2hpbGRyZW4/OiBSZW5kZXJhYmxlW107XG4gICAgY29ubmVjdG9yPzogQ29ubmVjdG9yO1xuICAgIG5lZ2F0ZWQ/OiBib29sZWFuO1xuICB9ID0ge30pIHtcbiAgICBzdXBlcih7IGNoaWxkcmVuLCBjb25uZWN0b3IsIG5lZ2F0ZWQgfSk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdGaWx0ZXJFeHByZXNzaW9uJztcbiAgfVxuXG4gIHN0YXRpYyBlPFQ+KCkge1xuICAgIHJldHVybiBuZXcgRmlsdGVyRXhwcmVzc2lvbjxUPih7IGNvbm5lY3RvcjogQ29ubmVjdG9yLkFORCB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbmQ8VD4oKSB7XG4gICAgcmV0dXJuIG5ldyBGaWx0ZXJFeHByZXNzaW9uPFQ+KHsgY29ubmVjdG9yOiBDb25uZWN0b3IuQU5EIH0pO1xuICB9XG5cbiAgc3RhdGljIG9yPFQ+KCkge1xuICAgIHJldHVybiBuZXcgRmlsdGVyRXhwcmVzc2lvbjxUPih7IGNvbm5lY3RvcjogQ29ubmVjdG9yLk9SIH0pO1xuICB9XG5cbiAgc3RhdGljIG5vdDxUPihleHA6IEZpbHRlckV4cHJlc3Npb248VD4pIHtcbiAgICByZXR1cm4gbmV3IEZpbHRlckV4cHJlc3Npb248VD4oe1xuICAgICAgY2hpbGRyZW46IGV4cC5jaGlsZHJlbigpLFxuICAgICAgY29ubmVjdG9yOiBleHAuY29ubmVjdG9yKCksXG4gICAgICBuZWdhdGVkOiB0cnVlLFxuICAgIH0pO1xuICB9XG59XG4qL1xuIl19
@@ -1,192 +0,0 @@
1
- import { Objects, Types } from '../../utils';
2
- import { alias } from './builder';
3
- import { QueryOptionNames } from '../../types';
4
- import { Expression } from './expressions';
5
- export class ODataQueryOptionHandler {
6
- constructor(o, n) {
7
- this.o = o;
8
- this.n = n;
9
- }
10
- get name() {
11
- return this.n;
12
- }
13
- toJSON() {
14
- return this.o[this.n];
15
- }
16
- empty() {
17
- return Types.isEmpty(this.o[this.n]);
18
- }
19
- //#region Primitive Value
20
- value(v) {
21
- return (v !== undefined && (this.o[this.n] = v)) || this.o[this.n];
22
- }
23
- //#endregion
24
- //#region Array Value
25
- assertArray() {
26
- if (!Types.isArray(this.o[this.n]))
27
- this.o[this.n] = this.o[this.n] !== undefined ? [this.o[this.n]] : [];
28
- return this.o[this.n];
29
- }
30
- push(value) {
31
- this.assertArray().push(value);
32
- }
33
- remove(value) {
34
- this.o[this.n] = this.assertArray().filter((v) => v !== value);
35
- // If only one... down to value
36
- if (this.o[this.n].length === 1)
37
- this.o[this.n] = this.o[this.n][0];
38
- }
39
- at(index) {
40
- return this.assertArray()[index];
41
- }
42
- //#endregion
43
- //#region HashMap Value
44
- assertObject(create) {
45
- if (!Types.isArray(this.o[this.n]) && Types.isPlainObject(this.o[this.n])) {
46
- return this.o[this.n];
47
- }
48
- let arr = this.assertArray();
49
- let obj = arr.find((v) => Types.isPlainObject(v));
50
- if (!obj && create) {
51
- obj = {};
52
- arr.push(obj);
53
- }
54
- return obj;
55
- }
56
- set(path, value) {
57
- let obj = this.assertObject(true);
58
- Objects.set(obj, path, value);
59
- }
60
- get(path, def) {
61
- let obj = this.assertObject(false) || {};
62
- return Objects.get(obj, path, def);
63
- }
64
- unset(path) {
65
- let obj = this.assertObject(true);
66
- Objects.unset(obj, path);
67
- if (Types.isArray(this.o[this.n])) {
68
- this.o[this.n] = this.o[this.n].filter((v) => !Types.isEmpty(v));
69
- if (this.o[this.n].length === 1)
70
- this.o[this.n] = this.o[this.n][0];
71
- }
72
- }
73
- has(path) {
74
- let obj = this.assertObject(false) || {};
75
- return Objects.has(obj, path);
76
- }
77
- assign(values) {
78
- let obj = this.assertObject(true);
79
- return Objects.merge(obj, values);
80
- }
81
- //#endregion
82
- clear() {
83
- delete this.o[this.n];
84
- }
85
- }
86
- export class ODataQueryOptionsHandler {
87
- constructor(options) {
88
- this.options = options;
89
- }
90
- /**
91
- * Create a new odata alias parameter
92
- * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_ParameterAliases
93
- * @param value The value of the alias
94
- * @param name The name of the alias
95
- * @returns The alias
96
- */
97
- alias(value, name) {
98
- return alias(value, name);
99
- }
100
- select(opts) {
101
- return this.options.option(QueryOptionNames.select, opts);
102
- }
103
- expand(opts) {
104
- return this.options.option(QueryOptionNames.expand, opts);
105
- }
106
- compute(opts) {
107
- if (Types.isFunction(opts)) {
108
- return this.options.expression(QueryOptionNames.compute, opts({
109
- e: () => Expression.e(),
110
- and: () => Expression.and(),
111
- or: () => Expression.or(),
112
- not: (e) => Expression.not(e),
113
- }));
114
- }
115
- return this.options.option(QueryOptionNames.compute, opts);
116
- }
117
- format(opts) {
118
- return this.options.option(QueryOptionNames.format, opts);
119
- }
120
- transform(opts) {
121
- return this.options.option(QueryOptionNames.transform, opts);
122
- }
123
- search(opts) {
124
- return this.options.option(QueryOptionNames.search, opts);
125
- }
126
- filter(opts) {
127
- if (Types.isFunction(opts)) {
128
- return this.options.expression(QueryOptionNames.filter, opts({
129
- e: () => Expression.e(),
130
- and: () => Expression.and(),
131
- or: () => Expression.or(),
132
- not: (e) => Expression.not(e),
133
- }));
134
- }
135
- return this.options.option(QueryOptionNames.filter, opts);
136
- }
137
- orderBy(opts) {
138
- if (Types.isFunction(opts)) {
139
- return this.options.expression(QueryOptionNames.orderBy, opts({
140
- e: () => Expression.e(),
141
- and: () => Expression.and(),
142
- or: () => Expression.or(),
143
- not: (e) => Expression.not(e),
144
- }));
145
- }
146
- return this.options.option(QueryOptionNames.orderBy, opts);
147
- }
148
- top(opts) {
149
- return this.options.option(QueryOptionNames.top, opts);
150
- }
151
- skip(opts) {
152
- return this.options.option(QueryOptionNames.skip, opts);
153
- }
154
- skiptoken(opts) {
155
- return this.options.option(QueryOptionNames.skiptoken, opts);
156
- }
157
- paging({ skip, skiptoken, top, } = {}) {
158
- if (skiptoken !== undefined)
159
- this.skiptoken(skiptoken);
160
- else if (skip !== undefined)
161
- this.skip(skip);
162
- if (top !== undefined)
163
- this.top(top);
164
- }
165
- clearPaging() {
166
- this.skip().clear();
167
- this.top().clear();
168
- this.skiptoken().clear();
169
- }
170
- apply(query) {
171
- if (query.select !== undefined) {
172
- this.select(query.select);
173
- }
174
- if (query.expand !== undefined) {
175
- this.expand(query.expand);
176
- }
177
- if (query.transform !== undefined) {
178
- this.transform(query.transform);
179
- }
180
- if (query.search !== undefined) {
181
- this.search(query.search);
182
- }
183
- if (query.filter !== undefined) {
184
- this.filter(query.filter);
185
- }
186
- if (query.orderBy !== undefined) {
187
- this.orderBy(query.orderBy);
188
- }
189
- this.paging(query);
190
- }
191
- }
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQThDLE1BQU0sV0FBVyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFDVSxDQUEwQixFQUMxQixDQUFtQjtRQURuQixNQUFDLEdBQUQsQ0FBQyxDQUF5QjtRQUMxQixNQUFDLEdBQUQsQ0FBQyxDQUFrQjtJQUMxQixDQUFDO0lBRUosSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsS0FBSyxDQUFDLENBQU87UUFDWCxPQUFPLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELFlBQVk7SUFFWixx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Q0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RzLCBUeXBlcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGFsaWFzLCBFeHBhbmQsIEZpbHRlciwgT3JkZXJCeSwgU2VsZWN0LCBUcmFuc2Zvcm0gfSBmcm9tICcuL2J1aWxkZXInO1xuXG5pbXBvcnQgeyBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4vZXhwcmVzc2lvbnMnO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVF1ZXJ5QXJndW1lbnRzLCBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbzogeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAgcHJpdmF0ZSBuOiBRdWVyeU9wdGlvbk5hbWVzXG4gICkge31cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLm9bdGhpcy5uXTtcbiAgfVxuXG4gIGVtcHR5KCkge1xuICAgIHJldHVybiBUeXBlcy5pc0VtcHR5KHRoaXMub1t0aGlzLm5dKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBQcmltaXRpdmUgVmFsdWVcbiAgdmFsdWUodj86IGFueSkge1xuICAgIHJldHVybiAodiAhPT0gdW5kZWZpbmVkICYmICh0aGlzLm9bdGhpcy5uXSA9IHYpKSB8fCB0aGlzLm9bdGhpcy5uXTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gQXJyYXkgVmFsdWVcbiAgcHJpdmF0ZSBhc3NlcnRBcnJheSgpOiBhbnlbXSB7XG4gICAgaWYgKCFUeXBlcy5pc0FycmF5KHRoaXMub1t0aGlzLm5dKSlcbiAgICAgIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl0gIT09IHVuZGVmaW5lZCA/IFt0aGlzLm9bdGhpcy5uXV0gOiBbXTtcbiAgICByZXR1cm4gdGhpcy5vW3RoaXMubl07XG4gIH1cblxuICBwdXNoKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmFzc2VydEFycmF5KCkucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZW1vdmUodmFsdWU6IGFueSkge1xuICAgIHRoaXMub1t0aGlzLm5dID0gdGhpcy5hc3NlcnRBcnJheSgpLmZpbHRlcigodikgPT4gdiAhPT0gdmFsdWUpO1xuICAgIC8vIElmIG9ubHkgb25lLi4uIGRvd24gdG8gdmFsdWVcbiAgICBpZiAodGhpcy5vW3RoaXMubl0ubGVuZ3RoID09PSAxKSB0aGlzLm9bdGhpcy5uXSA9IHRoaXMub1t0aGlzLm5dWzBdO1xuICB9XG5cbiAgYXQoaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmFzc2VydEFycmF5KClbaW5kZXhdO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBIYXNoTWFwIFZhbHVlXG4gIHByaXZhdGUgYXNzZXJ0T2JqZWN0KGNyZWF0ZTogYm9vbGVhbik6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIVR5cGVzLmlzQXJyYXkodGhpcy5vW3RoaXMubl0pICYmIFR5cGVzLmlzUGxhaW5PYmplY3QodGhpcy5vW3RoaXMubl0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5vW3RoaXMubl07XG4gICAgfVxuICAgIGxldCBhcnIgPSB0aGlzLmFzc2VydEFycmF5KCk7XG4gICAgbGV0IG9iaiA9IGFyci5maW5kKCh2KSA9PiBUeXBlcy5pc1BsYWluT2JqZWN0KHYpKTtcbiAgICBpZiAoIW9iaiAmJiBjcmVhdGUpIHtcbiAgICAgIG9iaiA9IHt9O1xuICAgICAgYXJyLnB1c2gob2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHNldChwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgT2JqZWN0cy5zZXQob2JqLCBwYXRoLCB2YWx1ZSk7XG4gIH1cblxuICBnZXQocGF0aDogc3RyaW5nLCBkZWY/OiBhbnkpOiBhbnkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuZ2V0KG9iaiwgcGF0aCwgZGVmKTtcbiAgfVxuXG4gIHVuc2V0KHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICBPYmplY3RzLnVuc2V0KG9iaiwgcGF0aCk7XG5cbiAgICBpZiAoVHlwZXMuaXNBcnJheSh0aGlzLm9bdGhpcy5uXSkpIHtcbiAgICAgIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl0uZmlsdGVyKCh2OiBhbnkpID0+ICFUeXBlcy5pc0VtcHR5KHYpKTtcbiAgICAgIGlmICh0aGlzLm9bdGhpcy5uXS5sZW5ndGggPT09IDEpIHRoaXMub1t0aGlzLm5dID0gdGhpcy5vW3RoaXMubl1bMF07XG4gICAgfVxuICB9XG5cbiAgaGFzKHBhdGg6IHN0cmluZykge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdChmYWxzZSkgfHwge307XG4gICAgcmV0dXJuIE9iamVjdHMuaGFzKG9iaiwgcGF0aCk7XG4gIH1cblxuICBhc3NpZ24odmFsdWVzOiB7IFthdHRyOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGxldCBvYmogPSB0aGlzLmFzc2VydE9iamVjdCh0cnVlKTtcbiAgICByZXR1cm4gT2JqZWN0cy5tZXJnZShvYmosIHZhbHVlcyk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgY2xlYXIoKSB7XG4gICAgZGVsZXRlIHRoaXMub1t0aGlzLm5dO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4ge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgb3B0aW9uczogT0RhdGFRdWVyeU9wdGlvbnM8VD4pIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBvZGF0YSBhbGlhcyBwYXJhbWV0ZXJcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL29kYXRhL29kYXRhL3Y0LjAxL29kYXRhLXY0LjAxLXBhcnQyLXVybC1jb252ZW50aW9ucy5odG1sI3NlY19QYXJhbWV0ZXJBbGlhc2VzXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGFsaWFzXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBhbGlhc1xuICAgKiBAcmV0dXJucyBUaGUgYWxpYXNcbiAgICovXG4gIGFsaWFzKHZhbHVlOiBhbnksIG5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYWxpYXModmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgc2VsZWN0KG9wdHM6IFNlbGVjdDxUPik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWxlY3QoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlbGVjdChvcHRzPzogU2VsZWN0PFQ+KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxTZWxlY3Q8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LCBvcHRzKTtcbiAgfVxuXG4gIGV4cGFuZChvcHRzOiBFeHBhbmQ8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZXhwYW5kKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBleHBhbmQob3B0cz86IEV4cGFuZDxUPik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248RXhwYW5kPFQ+PihRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCwgb3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogVXJsOiBodHRwczovL2RvY3Mub2FzaXMtb3Blbi5vcmcvb2RhdGEvb2RhdGEvdjQuMDEvb2RhdGEtdjQuMDEtcGFydDItdXJsLWNvbnZlbnRpb25zLmh0bWwjc2VjX1N5c3RlbVF1ZXJ5T3B0aW9uY29tcHV0ZVxuICAgKi9cbiAgY29tcHV0ZShcbiAgICBvcHRzOiAoZToge1xuICAgICAgZTogRXhwcmVzc2lvbjxUPjtcbiAgICAgIGFuZDogRXhwcmVzc2lvbjxUPjtcbiAgICAgIG9yOiBFeHByZXNzaW9uPFQ+O1xuICAgICAgbm90OiB0eXBlb2YgRXhwcmVzc2lvbi5ub3Q7XG4gICAgfSkgPT4gRXhwcmVzc2lvbjxUPlxuICApOiBFeHByZXNzaW9uPFQ+O1xuICBjb21wdXRlKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBjb21wdXRlKG9wdHM/OiBhbnkpOiBhbnkge1xuICAgIGlmIChUeXBlcy5pc0Z1bmN0aW9uKG9wdHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmV4cHJlc3Npb24oXG4gICAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZSxcbiAgICAgICAgb3B0cyh7XG4gICAgICAgICAgZTogKCkgPT4gRXhwcmVzc2lvbi5lPFQ+KCksXG4gICAgICAgICAgYW5kOiAoKSA9PiBFeHByZXNzaW9uLmFuZDxUPigpLFxuICAgICAgICAgIG9yOiAoKSA9PiBFeHByZXNzaW9uLm9yPFQ+KCksXG4gICAgICAgICAgbm90OiAoZTogRXhwcmVzc2lvbjxUPikgPT4gRXhwcmVzc2lvbi5ub3QoZSksXG4gICAgICAgIH0pIGFzIEV4cHJlc3Npb248VD5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5jb21wdXRlLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcmw6IGh0dHBzOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9vZGF0YS9vZGF0YS92NC4wMS9vZGF0YS12NC4wMS1wYXJ0Mi11cmwtY29udmVudGlvbnMuaHRtbCNzZWNfU3lzdGVtUXVlcnlPcHRpb25mb3JtYXRcbiAgICovXG4gIGZvcm1hdChvcHRzOiBzdHJpbmcpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZm9ybWF0KCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmb3JtYXQob3B0cz86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248c3RyaW5nPihRdWVyeU9wdGlvbk5hbWVzLmZvcm1hdCwgb3B0cyk7XG4gIH1cblxuICB0cmFuc2Zvcm0ob3B0czogVHJhbnNmb3JtPFQ+KTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHRyYW5zZm9ybSgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgdHJhbnNmb3JtKG9wdHM/OiBUcmFuc2Zvcm08VD4pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3B0aW9uPFRyYW5zZm9ybTxUPj4oUXVlcnlPcHRpb25OYW1lcy50cmFuc2Zvcm0sIG9wdHMpO1xuICB9XG5cbiAgc2VhcmNoKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBzZWFyY2goKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNlYXJjaChvcHRzPzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uTmFtZXMuc2VhcmNoLCBvcHRzKTtcbiAgfVxuXG4gIGZpbHRlcihcbiAgICBvcHRzOiAoZToge1xuICAgICAgZTogKCkgPT4gRXhwcmVzc2lvbjxUPjtcbiAgICAgIGFuZDogKCkgPT4gRXhwcmVzc2lvbjxUPjtcbiAgICAgIG9yOiAoKSA9PiBFeHByZXNzaW9uPFQ+O1xuICAgICAgbm90OiAoZTogRXhwcmVzc2lvbjxUPikgPT4gRXhwcmVzc2lvbjxUPjtcbiAgICB9KSA9PiBFeHByZXNzaW9uPFQ+XG4gICk6IEV4cHJlc3Npb248VD47XG4gIGZpbHRlcihvcHRzOiBGaWx0ZXI8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgZmlsdGVyKCk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBmaWx0ZXIob3B0cz86IGFueSk6IGFueSB7XG4gICAgaWYgKFR5cGVzLmlzRnVuY3Rpb24ob3B0cykpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXhwcmVzc2lvbihcbiAgICAgICAgUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsXG4gICAgICAgIG9wdHMoe1xuICAgICAgICAgIGU6ICgpID0+IEV4cHJlc3Npb24uZTxUPigpLFxuICAgICAgICAgIGFuZDogKCkgPT4gRXhwcmVzc2lvbi5hbmQ8VD4oKSxcbiAgICAgICAgICBvcjogKCkgPT4gRXhwcmVzc2lvbi5vcjxUPigpLFxuICAgICAgICAgIG5vdDogKGU6IEV4cHJlc3Npb248VD4pID0+IEV4cHJlc3Npb24ubm90KGUpLFxuICAgICAgICB9KSBhcyBFeHByZXNzaW9uPFQ+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxGaWx0ZXI8VD4+KFF1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyLCBvcHRzKTtcbiAgfVxuXG4gIG9yZGVyQnkoXG4gICAgb3B0czogKGU6IHtcbiAgICAgIGU6ICgpID0+IEV4cHJlc3Npb248VD47XG4gICAgICBhbmQ6ICgpID0+IEV4cHJlc3Npb248VD47XG4gICAgICBvcjogKCkgPT4gRXhwcmVzc2lvbjxUPjtcbiAgICAgIG5vdDogKGU6IEV4cHJlc3Npb248VD4pID0+IEV4cHJlc3Npb248VD47XG4gICAgfSkgPT4gRXhwcmVzc2lvbjxUPlxuICApOiBFeHByZXNzaW9uPFQ+O1xuICBvcmRlckJ5KG9wdHM6IE9yZGVyQnk8VD4pOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgb3JkZXJCeSgpOiBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxUPjtcbiAgb3JkZXJCeShvcHRzPzogYW55KTogYW55IHtcbiAgICBpZiAoVHlwZXMuaXNGdW5jdGlvbihvcHRzKSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5leHByZXNzaW9uKFxuICAgICAgICBRdWVyeU9wdGlvbk5hbWVzLm9yZGVyQnksXG4gICAgICAgIG9wdHMoe1xuICAgICAgICAgIGU6ICgpID0+IEV4cHJlc3Npb24uZTxUPigpLFxuICAgICAgICAgIGFuZDogKCkgPT4gRXhwcmVzc2lvbi5hbmQ8VD4oKSxcbiAgICAgICAgICBvcjogKCkgPT4gRXhwcmVzc2lvbi5vcjxUPigpLFxuICAgICAgICAgIG5vdDogKGU6IEV4cHJlc3Npb248VD4pID0+IEV4cHJlc3Npb24ubm90KGUpLFxuICAgICAgICB9KSBhcyBFeHByZXNzaW9uPFQ+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxPcmRlckJ5PFQ+PihRdWVyeU9wdGlvbk5hbWVzLm9yZGVyQnksIG9wdHMpO1xuICB9XG5cbiAgdG9wKG9wdHM6IG51bWJlcik6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICB0b3AoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHRvcChvcHRzPzogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxudW1iZXI+KFF1ZXJ5T3B0aW9uTmFtZXMudG9wLCBvcHRzKTtcbiAgfVxuXG4gIHNraXAob3B0czogbnVtYmVyKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXAoKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXAob3B0cz86IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5vcHRpb248bnVtYmVyPihRdWVyeU9wdGlvbk5hbWVzLnNraXAsIG9wdHMpO1xuICB9XG5cbiAgc2tpcHRva2VuKG9wdHM6IHN0cmluZyk6IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyPFQ+O1xuICBza2lwdG9rZW4oKTogT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXI8VD47XG4gIHNraXB0b2tlbihvcHRzPzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9wdGlvbjxzdHJpbmc+KFF1ZXJ5T3B0aW9uTmFtZXMuc2tpcHRva2VuLCBvcHRzKTtcbiAgfVxuXG4gIHBhZ2luZyh7XG4gICAgc2tpcCxcbiAgICBza2lwdG9rZW4sXG4gICAgdG9wLFxuICB9OiB7IHNraXA/OiBudW1iZXI7IHNraXB0b2tlbj86IHN0cmluZzsgdG9wPzogbnVtYmVyIH0gPSB7fSkge1xuICAgIGlmIChza2lwdG9rZW4gIT09IHVuZGVmaW5lZCkgdGhpcy5za2lwdG9rZW4oc2tpcHRva2VuKTtcbiAgICBlbHNlIGlmIChza2lwICE9PSB1bmRlZmluZWQpIHRoaXMuc2tpcChza2lwKTtcbiAgICBpZiAodG9wICE9PSB1bmRlZmluZWQpIHRoaXMudG9wKHRvcCk7XG4gIH1cblxuICBjbGVhclBhZ2luZygpIHtcbiAgICB0aGlzLnNraXAoKS5jbGVhcigpO1xuICAgIHRoaXMudG9wKCkuY2xlYXIoKTtcbiAgICB0aGlzLnNraXB0b2tlbigpLmNsZWFyKCk7XG4gIH1cblxuICBhcHBseShxdWVyeTogT0RhdGFRdWVyeUFyZ3VtZW50czxUPikge1xuICAgIGlmIChxdWVyeS5zZWxlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QocXVlcnkuc2VsZWN0KTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LmV4cGFuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmV4cGFuZChxdWVyeS5leHBhbmQpO1xuICAgIH1cbiAgICBpZiAocXVlcnkudHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtKHF1ZXJ5LnRyYW5zZm9ybSk7XG4gICAgfVxuICAgIGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWFyY2gocXVlcnkuc2VhcmNoKTtcbiAgICB9XG4gICAgaWYgKHF1ZXJ5LmZpbHRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZpbHRlcihxdWVyeS5maWx0ZXIpO1xuICAgIH1cbiAgICBpZiAocXVlcnkub3JkZXJCeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9yZGVyQnkocXVlcnkub3JkZXJCeSk7XG4gICAgfVxuICAgIHRoaXMucGFnaW5nKHF1ZXJ5KTtcbiAgfVxufVxuIl19
@@ -1,103 +0,0 @@
1
- import { Objects, Types } from '../../utils';
2
- import { buildPathAndQuery, } from './builder';
3
- import { QueryOptionNames } from '../../types';
4
- import { ODataQueryOptionHandler } from './handlers';
5
- export class ODataQueryOptions {
6
- constructor(options) {
7
- this.options = options || {};
8
- }
9
- // Params
10
- pathAndParams() {
11
- let aliases = [];
12
- let options = [
13
- QueryOptionNames.select,
14
- QueryOptionNames.filter,
15
- QueryOptionNames.search,
16
- QueryOptionNames.compute,
17
- QueryOptionNames.transform,
18
- QueryOptionNames.orderBy,
19
- QueryOptionNames.top,
20
- QueryOptionNames.skip,
21
- QueryOptionNames.skiptoken,
22
- QueryOptionNames.expand,
23
- QueryOptionNames.format,
24
- ]
25
- .filter((key) => !Types.isEmpty(this.options[key]))
26
- .reduce((acc, key) => {
27
- let value = this.options[key];
28
- if (Types.rawType(value) === 'Expression') {
29
- value = value.render(aliases);
30
- }
31
- return Object.assign(acc, { [key]: value });
32
- }, {});
33
- return buildPathAndQuery(Object.assign(Object.assign({}, options), { aliases }));
34
- }
35
- toString() {
36
- const [path, params] = this.pathAndParams();
37
- return (path +
38
- Object.entries(params)
39
- .filter(([, value]) => !Types.isEmpty(value))
40
- .map(([key, value]) => `${key}=${value}`)
41
- .join('&'));
42
- }
43
- toJSON() {
44
- return Object.keys(this.options).reduce((acc, key) => {
45
- let value = this.options[key];
46
- if (Types.rawType(value) === 'Expression') {
47
- value = value.toJSON();
48
- }
49
- return Object.assign(acc, { [key]: value });
50
- }, {});
51
- }
52
- toQueryArguments() {
53
- return {
54
- select: this.options[QueryOptionNames.select],
55
- expand: this.options[QueryOptionNames.expand],
56
- transform: this.options[QueryOptionNames.transform],
57
- compute: this.options[QueryOptionNames.compute],
58
- search: this.options[QueryOptionNames.search],
59
- filter: this.options[QueryOptionNames.filter],
60
- orderBy: this.options[QueryOptionNames.orderBy],
61
- top: this.options[QueryOptionNames.top],
62
- skip: this.options[QueryOptionNames.skip],
63
- skiptoken: this.options[QueryOptionNames.skiptoken],
64
- };
65
- }
66
- clone() {
67
- const options = Object.keys(this.options).reduce((acc, key) => {
68
- let value = this.options[key];
69
- if (Types.rawType(value) !== 'Expression') {
70
- value = Objects.clone(value);
71
- }
72
- return Object.assign(acc, { [key]: value });
73
- }, {});
74
- return new ODataQueryOptions(options);
75
- }
76
- // Set Expression
77
- expression(name, exp) {
78
- return (this.options[name] = exp);
79
- }
80
- // Option Handler
81
- option(name, opts) {
82
- if (opts !== undefined)
83
- this.options[name] = opts;
84
- return new ODataQueryOptionHandler(this.options, name);
85
- }
86
- // Query Options tools
87
- has(name) {
88
- return this.options[name] !== undefined;
89
- }
90
- remove(...names) {
91
- names.forEach((name) => this.option(name).clear());
92
- }
93
- keep(...names) {
94
- this.options = Object.keys(this.options)
95
- .filter((k) => names.indexOf(k) !== -1)
96
- .reduce((acc, k) => Object.assign(acc, { [k]: this.options[k] }), {});
97
- }
98
- // Clear
99
- clear() {
100
- this.options = {};
101
- }
102
- }
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBTUwsaUJBQWlCLEdBR2xCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFpQnJELE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsWUFBWSxPQUFpQztRQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVM7SUFDVCxhQUFhO1FBQ1gsSUFBSSxPQUFPLEdBQXNCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLE9BQU8sR0FBRztZQUNaLGdCQUFnQixDQUFDLE1BQU07WUFDdkIsZ0JBQWdCLENBQUMsTUFBTTtZQUN2QixnQkFBZ0IsQ0FBQyxNQUFNO1lBQ3ZCLGdCQUFnQixDQUFDLE9BQU87WUFDeEIsZ0JBQWdCLENBQUMsU0FBUztZQUMxQixnQkFBZ0IsQ0FBQyxPQUFPO1lBQ3hCLGdCQUFnQixDQUFDLEdBQUc7WUFDcEIsZ0JBQWdCLENBQUMsSUFBSTtZQUNyQixnQkFBZ0IsQ0FBQyxTQUFTO1lBQzFCLGdCQUFnQixDQUFDLE1BQU07WUFDdkIsZ0JBQWdCLENBQUMsTUFBTTtTQUN4QjthQUNFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNsRCxNQUFNLENBQUMsQ0FBQyxHQUFH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Q0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQUcsS0FBeUI7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUMxRCxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELFFBQVE7SUFDUixLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JqZWN0cywgVHlwZXMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge1xuICBFeHBhbmQsXG4gIEZpbHRlcixcbiAgT3JkZXJCeSxcbiAgU2VsZWN0LFxuICBUcmFuc2Zvcm0sXG4gIGJ1aWxkUGF0aEFuZFF1ZXJ5LFxuICBRdWVyeUN1c3RvbVR5cGUsXG4gIGFsaWFzLFxufSBmcm9tICcuL2J1aWxkZXInO1xuXG5pbXBvcnQgeyBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT0RhdGFRdWVyeU9wdGlvbkhhbmRsZXIgfSBmcm9tICcuL2hhbmRsZXJzJztcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuL2V4cHJlc3Npb25zJztcblxuZXhwb3J0IHR5cGUgT0RhdGFRdWVyeUFyZ3VtZW50czxUPiA9IHtcbiAgW1F1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0XT86IFNlbGVjdDxUPjtcbiAgW1F1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyXT86IEZpbHRlcjxUPjtcbiAgW1F1ZXJ5T3B0aW9uTmFtZXMuc2VhcmNoXT86IHN0cmluZztcbiAgW1F1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZV0/OiBzdHJpbmc7XG4gIFtRdWVyeU9wdGlvbk5hbWVzLnRyYW5zZm9ybV0/OiBUcmFuc2Zvcm08VD47XG4gIFtRdWVyeU9wdGlvbk5hbWVzLm9yZGVyQnldPzogT3JkZXJCeTxUPjtcbiAgW1F1ZXJ5T3B0aW9uTmFtZXMudG9wXT86IG51bWJlcjtcbiAgW1F1ZXJ5T3B0aW9uTmFtZXMuc2tpcF0/OiBudW1iZXI7XG4gIFtRdWVyeU9wdGlvbk5hbWVzLnNraXB0b2tlbl0/OiBzdHJpbmc7XG4gIFtRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZF0/OiBFeHBhbmQ8VD47XG4gIFtRdWVyeU9wdGlvbk5hbWVzLmZvcm1hdF0/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgT0RhdGFRdWVyeU9wdGlvbnM8VD4ge1xuICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB9XG5cbiAgLy8gUGFyYW1zXG4gIHBhdGhBbmRQYXJhbXMoKTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dIHtcbiAgICBsZXQgYWxpYXNlczogUXVlcnlDdXN0b21UeXBlW10gPSBbXTtcbiAgICBsZXQgb3B0aW9ucyA9IFtcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLnNlYXJjaCxcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZSxcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMudHJhbnNmb3JtLFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5LFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy50b3AsXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLnNraXAsXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLnNraXB0b2tlbixcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuZXhwYW5kLFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy5mb3JtYXQsXG4gICAgXVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiAhVHlwZXMuaXNFbXB0eSh0aGlzLm9wdGlvbnNba2V5XSkpXG4gICAgICAucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLm9wdGlvbnNba2V5XTtcbiAgICAgICAgaWYgKFR5cGVzLnJhd1R5cGUodmFsdWUpID09PSAnRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlbmRlcihhbGlhc2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2tleV06IHZhbHVlIH0pO1xuICAgICAgfSwge30pO1xuXG4gICAgcmV0dXJuIGJ1aWxkUGF0aEFuZFF1ZXJ5PGFueT4oeyAuLi5vcHRpb25zLCBhbGlhc2VzIH0pO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBbcGF0aCwgcGFyYW1zXSA9IHRoaXMucGF0aEFuZFBhcmFtcygpO1xuICAgIHJldHVybiAoXG4gICAgICBwYXRoICtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHBhcmFtcylcbiAgICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhVHlwZXMuaXNFbXB0eSh2YWx1ZSkpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcmJylcbiAgICApO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMub3B0aW9uc1trZXldO1xuICAgICAgaWYgKFR5cGVzLnJhd1R5cGUodmFsdWUpID09PSAnRXhwcmVzc2lvbicpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTT04oKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBba2V5XTogdmFsdWUgfSk7XG4gICAgfSwge30pO1xuICB9XG5cbiAgdG9RdWVyeUFyZ3VtZW50cygpOiBPRGF0YVF1ZXJ5QXJndW1lbnRzPFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VsZWN0OiB0aGlzLm9wdGlvbnNbUXVlcnlPcHRpb25OYW1lcy5zZWxlY3RdLFxuICAgICAgZXhwYW5kOiB0aGlzLm9wdGlvbnNbUXVlcnlPcHRpb25OYW1lcy5leHBhbmRdLFxuICAgICAgdHJhbnNmb3JtOiB0aGlzLm9wdGlvbnNbUXVlcnlPcHRpb25OYW1lcy50cmFuc2Zvcm1dLFxuICAgICAgY29tcHV0ZTogdGhpcy5vcHRpb25zW1F1ZXJ5T3B0aW9uTmFtZXMuY29tcHV0ZV0sXG4gICAgICBzZWFyY2g6IHRoaXMub3B0aW9uc1tRdWVyeU9wdGlvbk5hbWVzLnNlYXJjaF0sXG4gICAgICBmaWx0ZXI6IHRoaXMub3B0aW9uc1tRdWVyeU9wdGlvbk5hbWVzLmZpbHRlcl0sXG4gICAgICBvcmRlckJ5OiB0aGlzLm9wdGlvbnNbUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5XSxcbiAgICAgIHRvcDogdGhpcy5vcHRpb25zW1F1ZXJ5T3B0aW9uTmFtZXMudG9wXSxcbiAgICAgIHNraXA6IHRoaXMub3B0aW9uc1tRdWVyeU9wdGlvbk5hbWVzLnNraXBdLFxuICAgICAgc2tpcHRva2VuOiB0aGlzLm9wdGlvbnNbUXVlcnlPcHRpb25OYW1lcy5za2lwdG9rZW5dLFxuICAgIH0gYXMgT0RhdGFRdWVyeUFyZ3VtZW50czxUPjtcbiAgfVxuXG4gIGNsb25lPE8+KCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMub3B0aW9uc1trZXldO1xuICAgICAgaWYgKFR5cGVzLnJhd1R5cGUodmFsdWUpICE9PSAnRXhwcmVzc2lvbicpIHtcbiAgICAgICAgdmFsdWUgPSBPYmplY3RzLmNsb25lKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBba2V5XTogdmFsdWUgfSk7XG4gICAgfSwge30pO1xuICAgIHJldHVybiBuZXcgT0RhdGFRdWVyeU9wdGlvbnM8Tz4ob3B0aW9ucyk7XG4gIH1cblxuICAvLyBTZXQgRXhwcmVzc2lvblxuICBleHByZXNzaW9uKG5hbWU6IFF1ZXJ5T3B0aW9uTmFtZXMsIGV4cDogRXhwcmVzc2lvbjxUPikge1xuICAgIHJldHVybiAodGhpcy5vcHRpb25zW25hbWVdID0gZXhwKTtcbiAgfVxuXG4gIC8vIE9wdGlvbiBIYW5kbGVyXG4gIG9wdGlvbjxPPihuYW1lOiBRdWVyeU9wdGlvbk5hbWVzLCBvcHRzPzogTykge1xuICAgIGlmIChvcHRzICE9PSB1bmRlZmluZWQpIHRoaXMub3B0aW9uc1tuYW1lXSA9IG9wdHM7XG4gICAgcmV0dXJuIG5ldyBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxPPih0aGlzLm9wdGlvbnMsIG5hbWUpO1xuICB9XG5cbiAgLy8gUXVlcnkgT3B0aW9ucyB0b29sc1xuICBoYXMobmFtZTogUXVlcnlPcHRpb25OYW1lcykge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnNbbmFtZV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlbW92ZSguLi5uYW1lczogUXVlcnlPcHRpb25OYW1lc1tdKSB7XG4gICAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4gdGhpcy5vcHRpb24obmFtZSkuY2xlYXIoKSk7XG4gIH1cblxuICBrZWVwKC4uLm5hbWVzOiBRdWVyeU9wdGlvbk5hbWVzW10pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMpXG4gICAgICAuZmlsdGVyKChrKSA9PiBuYW1lcy5pbmRleE9mKGsgYXMgUXVlcnlPcHRpb25OYW1lcykgIT09IC0xKVxuICAgICAgLnJlZHVjZSgoYWNjLCBrKSA9PiBPYmplY3QuYXNzaWduKGFjYywgeyBba106IHRoaXMub3B0aW9uc1trXSB9KSwge30pO1xuICB9XG5cbiAgLy8gQ2xlYXJcbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gIH1cbn1cbiJdfQ==