angular-odata 0.121.0 → 0.123.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 (148) hide show
  1. package/esm2022/lib/client.mjs +253 -0
  2. package/esm2022/lib/models/collection.mjs +862 -0
  3. package/esm2022/lib/models/model.mjs +519 -0
  4. package/esm2022/lib/models/options.mjs +1110 -0
  5. package/esm2022/lib/module.mjs +43 -0
  6. package/esm2022/lib/resources/query/builder.mjs +619 -0
  7. package/{esm2020 → esm2022}/lib/resources/query/expressions/base.mjs +1 -1
  8. package/{esm2020 → esm2022}/lib/resources/query/expressions/compute.mjs +1 -1
  9. package/{esm2020 → esm2022}/lib/resources/query/expressions/count.mjs +1 -1
  10. package/esm2022/lib/resources/query/expressions/expand.mjs +119 -0
  11. package/esm2022/lib/resources/query/expressions/filter.mjs +161 -0
  12. package/{esm2020 → esm2022}/lib/resources/query/expressions/orderby.mjs +1 -1
  13. package/{esm2020 → esm2022}/lib/resources/query/expressions/search.mjs +1 -1
  14. package/{esm2020 → esm2022}/lib/resources/query/expressions/select.mjs +1 -1
  15. package/esm2022/lib/resources/query/expressions/syntax.mjs +409 -0
  16. package/{esm2020 → esm2022}/lib/resources/query/handlers.mjs +1 -1
  17. package/esm2022/lib/resources/query/options.mjs +115 -0
  18. package/esm2022/lib/resources/responses/metadata.mjs +548 -0
  19. package/esm2022/lib/schema/parsers/edm.mjs +99 -0
  20. package/{esm2020 → esm2022}/lib/schema/parsers/enum-type.mjs +2 -2
  21. package/esm2022/lib/services/factory.mjs +34 -0
  22. package/esm2022/lib/utils/enums.mjs +61 -0
  23. package/{fesm2020 → fesm2022}/angular-odata.mjs +643 -614
  24. package/fesm2022/angular-odata.mjs.map +1 -0
  25. package/lib/helper.d.ts +1 -1
  26. package/lib/models/model.d.ts +7 -16
  27. package/lib/models/options.d.ts +51 -33
  28. package/lib/resources/path/segments.d.ts +1 -1
  29. package/lib/resources/query/builder.d.ts +21 -20
  30. package/lib/resources/query/expressions/base.d.ts +3 -3
  31. package/lib/resources/query/expressions/compute.d.ts +2 -2
  32. package/lib/resources/query/expressions/count.d.ts +3 -3
  33. package/lib/resources/query/expressions/expand.d.ts +13 -12
  34. package/lib/resources/query/expressions/filter.d.ts +15 -15
  35. package/lib/resources/query/expressions/orderby.d.ts +3 -3
  36. package/lib/resources/query/expressions/search.d.ts +3 -3
  37. package/lib/resources/query/expressions/select.d.ts +2 -2
  38. package/lib/resources/query/expressions/syntax.d.ts +59 -58
  39. package/lib/resources/query/handlers.d.ts +2 -2
  40. package/lib/resources/query/options.d.ts +1 -1
  41. package/lib/resources/resource.d.ts +1 -1
  42. package/lib/resources/responses/types.d.ts +3 -3
  43. package/lib/resources/types/options.d.ts +7 -7
  44. package/lib/schema/parsers/structured-type.d.ts +5 -5
  45. package/lib/types.d.ts +15 -15
  46. package/lib/utils/durations.d.ts +1 -1
  47. package/lib/utils/enums.d.ts +3 -0
  48. package/package.json +9 -15
  49. package/esm2020/lib/client.mjs +0 -252
  50. package/esm2020/lib/models/collection.mjs +0 -857
  51. package/esm2020/lib/models/model.mjs +0 -518
  52. package/esm2020/lib/models/options.mjs +0 -1130
  53. package/esm2020/lib/module.mjs +0 -42
  54. package/esm2020/lib/resources/query/builder.mjs +0 -588
  55. package/esm2020/lib/resources/query/expressions/expand.mjs +0 -115
  56. package/esm2020/lib/resources/query/expressions/filter.mjs +0 -161
  57. package/esm2020/lib/resources/query/expressions/syntax.mjs +0 -409
  58. package/esm2020/lib/resources/query/options.mjs +0 -115
  59. package/esm2020/lib/resources/responses/metadata.mjs +0 -547
  60. package/esm2020/lib/schema/parsers/edm.mjs +0 -104
  61. package/esm2020/lib/services/factory.mjs +0 -33
  62. package/esm2020/lib/utils/enums.mjs +0 -45
  63. package/fesm2015/angular-odata.mjs +0 -11841
  64. package/fesm2015/angular-odata.mjs.map +0 -1
  65. package/fesm2020/angular-odata.mjs.map +0 -1
  66. /package/{esm2020 → esm2022}/angular-odata.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/api.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/cache/cache.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/cache/index.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/cache/memory.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/cache/storage.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/constants.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/helper.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
  75. /package/{esm2020 → esm2022}/lib/loaders.mjs +0 -0
  76. /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
  77. /package/{esm2020 → esm2022}/lib/options.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/resources/index.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/resources/path/handlers.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/resources/path/index.mjs +0 -0
  81. /package/{esm2020 → esm2022}/lib/resources/path/segments.mjs +0 -0
  82. /package/{esm2020 → esm2022}/lib/resources/query/expressions/index.mjs +0 -0
  83. /package/{esm2020 → esm2022}/lib/resources/query/index.mjs +0 -0
  84. /package/{esm2020 → esm2022}/lib/resources/request.mjs +0 -0
  85. /package/{esm2020 → esm2022}/lib/resources/resource.mjs +0 -0
  86. /package/{esm2020 → esm2022}/lib/resources/responses/annotations.mjs +0 -0
  87. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-annotation.mjs +0 -0
  88. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-container.mjs +0 -0
  89. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-set.mjs +0 -0
  90. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-enum-type.mjs +0 -0
  91. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-function-action.mjs +0 -0
  92. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +0 -0
  93. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-reference.mjs +0 -0
  94. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-schema.mjs +0 -0
  95. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-singleton.mjs +0 -0
  96. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structural-property.mjs +0 -0
  97. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structured-type.mjs +0 -0
  98. /package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-type-definition.mjs +0 -0
  99. /package/{esm2020 → esm2022}/lib/resources/responses/index.mjs +0 -0
  100. /package/{esm2020 → esm2022}/lib/resources/responses/options.mjs +0 -0
  101. /package/{esm2020 → esm2022}/lib/resources/responses/response.mjs +0 -0
  102. /package/{esm2020 → esm2022}/lib/resources/responses/types.mjs +0 -0
  103. /package/{esm2020 → esm2022}/lib/resources/types/action.mjs +0 -0
  104. /package/{esm2020 → esm2022}/lib/resources/types/batch.mjs +0 -0
  105. /package/{esm2020 → esm2022}/lib/resources/types/count.mjs +0 -0
  106. /package/{esm2020 → esm2022}/lib/resources/types/entity-set.mjs +0 -0
  107. /package/{esm2020 → esm2022}/lib/resources/types/entity.mjs +0 -0
  108. /package/{esm2020 → esm2022}/lib/resources/types/function.mjs +0 -0
  109. /package/{esm2020 → esm2022}/lib/resources/types/index.mjs +0 -0
  110. /package/{esm2020 → esm2022}/lib/resources/types/media.mjs +0 -0
  111. /package/{esm2020 → esm2022}/lib/resources/types/metadata.mjs +0 -0
  112. /package/{esm2020 → esm2022}/lib/resources/types/navigation-property.mjs +0 -0
  113. /package/{esm2020 → esm2022}/lib/resources/types/options.mjs +0 -0
  114. /package/{esm2020 → esm2022}/lib/resources/types/property.mjs +0 -0
  115. /package/{esm2020 → esm2022}/lib/resources/types/reference.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/resources/types/singleton.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/resources/types/value.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/schema/annotation.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/schema/callable.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/schema/element.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/schema/entity-container.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/schema/entity-set.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/schema/enum-type.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/schema/index.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/schema/parsers/callable.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/schema/parsers/index.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/schema/parsers/structured-type.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/schema/schema.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/schema/structured-type.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/services/base.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/services/entity-set.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/services/entity.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/services/singleton.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/settings.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/types.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/utils/arraybuffers.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/utils/arrays.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/utils/dates.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/utils/durations.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/utils/http.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/utils/objects.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/utils/odata.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/utils/strings.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/utils/types.mjs +0 -0
  147. /package/{esm2020 → esm2022}/lib/utils/urls.mjs +0 -0
  148. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,409 +0,0 @@
1
- import { Objects, Types } from '../../../utils';
2
- import { normalizeValue } from '../builder';
3
- export class Field {
4
- constructor(name = '') {
5
- this.name = name;
6
- }
7
- static factory(name = '') {
8
- return new Proxy({ _name: name }, new Field());
9
- }
10
- get(target, key) {
11
- let name = target['_name'];
12
- if (key === 'render') {
13
- return ({ prefix }) => prefix ? `${prefix}/${name}` : name;
14
- }
15
- else if (key === 'clone') {
16
- return () => Field.factory(name);
17
- }
18
- else if (key === Symbol.toStringTag) {
19
- return () => 'Field';
20
- }
21
- else if (key === 'toJSON') {
22
- return () => ({
23
- $type: Types.rawType(this),
24
- name: name,
25
- });
26
- }
27
- else {
28
- name = name ? `${name}/${key}` : key;
29
- return new Proxy({ _name: name }, this);
30
- }
31
- }
32
- has(target, key) {
33
- return ['toJSON', 'clone', 'render'].includes(key) || key in target;
34
- }
35
- }
36
- function applyMixins(derivedCtor, constructors) {
37
- constructors.forEach((baseCtor) => {
38
- Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
39
- Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
40
- Object.create(null));
41
- });
42
- });
43
- }
44
- export function render(value, { aliases, normalize, escape, prefix, } = {}) {
45
- if (typeof value === 'function') {
46
- return render(value(syntax), { aliases, normalize, prefix });
47
- }
48
- if (typeof value === 'object' &&
49
- value !== null &&
50
- value.render !== undefined) {
51
- return render(value.render({ aliases, escape, prefix }), {
52
- aliases,
53
- normalize,
54
- escape,
55
- prefix,
56
- });
57
- }
58
- return normalize ? normalizeValue(value, { aliases, escape }) : value;
59
- }
60
- export class Function {
61
- constructor(name, values, normalize = true, escape = false) {
62
- this.name = name;
63
- this.values = values;
64
- this.normalize = normalize;
65
- this.escape = escape;
66
- }
67
- get [Symbol.toStringTag]() {
68
- return 'Function';
69
- }
70
- toJSON() {
71
- return {
72
- $type: Types.rawType(this),
73
- name: this.name,
74
- values: this.values,
75
- normalize: this.normalize,
76
- };
77
- }
78
- render({ aliases, escape, prefix, }) {
79
- let [field, ...values] = this.values;
80
- field = render(field, { aliases, escape, prefix });
81
- const params = [
82
- field,
83
- ...values.map((v) => render(v, { aliases, escape, prefix, normalize: this.normalize })),
84
- ];
85
- return `${this.name}(${params.join(', ')})`;
86
- }
87
- clone() {
88
- return new Function(this.name, this.values.map((v) => Objects.clone(v)), this.normalize, this.escape);
89
- }
90
- }
91
- export class StringAndCollectionFunctions {
92
- concat(field, value, normalize) {
93
- return new Function('concat', [field, value], normalize);
94
- }
95
- contains(field, value, normalize) {
96
- return new Function('contains', [field, value], normalize);
97
- }
98
- endsWith(field, value, normalize) {
99
- return new Function('endswith', [field, value], normalize);
100
- }
101
- indexOf(field, value, normalize) {
102
- return new Function('indexof', [field, value], normalize);
103
- }
104
- length(value, normalize) {
105
- return new Function('length', [value], normalize);
106
- }
107
- startsWith(field, value, normalize) {
108
- return new Function('startswith', [field, value], normalize);
109
- }
110
- subString(field, start, length) {
111
- let values = [field, start];
112
- if (length !== undefined) {
113
- values.push(length);
114
- }
115
- return new Function('substring', values);
116
- }
117
- }
118
- export class CollectionFunctions {
119
- hasSubset(s1, s2) {
120
- return new Function('hassubset', [s1, s2]);
121
- }
122
- hasSubsequence(s1, s2) {
123
- return new Function('hassubsequence', [s1, s2]);
124
- }
125
- }
126
- export class StringFunctions {
127
- matchesPattern(value, pattern) {
128
- return new Function('matchesPattern', [value, pattern]);
129
- }
130
- toLower(value) {
131
- return new Function('tolower', [value]);
132
- }
133
- toUpper(value) {
134
- return new Function('toupper', [value]);
135
- }
136
- trim(value) {
137
- return new Function('trim', [value]);
138
- }
139
- }
140
- export class DateAndTimeFunctions {
141
- date(value) {
142
- return new Function('date', [value]);
143
- }
144
- day(value) {
145
- return new Function('day', [value]);
146
- }
147
- fractionalseconds(value) {
148
- return new Function('fractionalseconds', [value]);
149
- }
150
- hour(value) {
151
- return new Function('hour', [value]);
152
- }
153
- maxdatetime(value) {
154
- return new Function('maxdatetime', [value]);
155
- }
156
- mindatetime(value) {
157
- return new Function('mindatetime', [value]);
158
- }
159
- minute(value) {
160
- return new Function('minute', [value]);
161
- }
162
- month(value) {
163
- return new Function('month', [value]);
164
- }
165
- now() {
166
- return new Function('now', []);
167
- }
168
- second(value) {
169
- return new Function('second', [value]);
170
- }
171
- time(value) {
172
- return new Function('time', [value]);
173
- }
174
- totaloffsetminutes(value) {
175
- return new Function('totaloffsetminutes', [value]);
176
- }
177
- totalseconds(value) {
178
- return new Function('totalseconds', [value]);
179
- }
180
- year(value) {
181
- return new Function('year', [value]);
182
- }
183
- }
184
- export class ArithmeticFunctions {
185
- ceiling(value) {
186
- return new Function('ceiling', [value]);
187
- }
188
- floor(value) {
189
- return new Function('floor', [value]);
190
- }
191
- round(value) {
192
- return new Function('round', [value]);
193
- }
194
- }
195
- export class TypeFunctions {
196
- cast(value, type) {
197
- return new Function('cast', [value, type]);
198
- }
199
- isof(value, type) {
200
- return new Function('isof', [value, type]);
201
- }
202
- }
203
- export class GeoFunctions {
204
- geoDistance(value, point, normalize) {
205
- return new Function('geo.distance', [value, point], normalize);
206
- }
207
- geoIntersects(value, polygon, normalize) {
208
- return new Function('geo.intersects', [value, polygon], normalize);
209
- }
210
- geoLength(line, normalize) {
211
- return new Function('geo.length', [line], normalize);
212
- }
213
- }
214
- export class ConditionalFunctions {
215
- case(condition, value) {
216
- return new Function('case', [condition, value]);
217
- }
218
- }
219
- export class Operator {
220
- constructor(op, values, normalize = true) {
221
- this.op = op;
222
- this.values = values;
223
- this.normalize = normalize;
224
- }
225
- get [Symbol.toStringTag]() {
226
- return 'Operator';
227
- }
228
- toJSON() {
229
- return {
230
- $type: Types.rawType(this),
231
- op: this.op,
232
- values: this.values,
233
- normalize: this.normalize,
234
- };
235
- }
236
- render({ aliases, escape, prefix, }) {
237
- let [left, right] = this.values;
238
- left = render(left, { aliases, escape, prefix });
239
- if (right !== undefined) {
240
- right = Array.isArray(right)
241
- ? `(${right
242
- .map((v) => render(v, {
243
- aliases,
244
- escape,
245
- prefix,
246
- normalize: this.normalize,
247
- }))
248
- .join(',')})`
249
- : render(right, {
250
- aliases,
251
- escape,
252
- prefix,
253
- normalize: this.normalize,
254
- });
255
- return `${left} ${this.op} ${right}`;
256
- }
257
- return `${this.op}(${left})`;
258
- }
259
- clone() {
260
- return new Operator(this.op, this.values.map((v) => Objects.clone(v)), this.normalize);
261
- }
262
- }
263
- export class LogicalOperators {
264
- eq(left, right, normalize) {
265
- return new Operator('eq', [left, right], normalize);
266
- }
267
- ne(left, right, normalize) {
268
- return new Operator('ne', [left, right], normalize);
269
- }
270
- gt(left, right, normalize) {
271
- return new Operator('gt', [left, right], normalize);
272
- }
273
- ge(left, right, normalize) {
274
- return new Operator('ge', [left, right], normalize);
275
- }
276
- lt(left, right, normalize) {
277
- return new Operator('lt', [left, right], normalize);
278
- }
279
- le(left, right, normalize) {
280
- return new Operator('le', [left, right], normalize);
281
- }
282
- /*
283
- and(left: any, right: any, normalize?: boolean) {
284
- return new Operator('and', [left, right], normalize);
285
- }
286
- or(left: any, right: any, normalize?: boolean) {
287
- return new Operator('or', [left, right], normalize);
288
- }
289
- */
290
- not(value, normalize) {
291
- return new Operator('not', [value], normalize);
292
- }
293
- has(left, right, normalize) {
294
- return new Operator('has', [left, right], normalize);
295
- }
296
- in(left, right, normalize) {
297
- return new Operator('in', [left, right], normalize);
298
- }
299
- }
300
- export class ArithmeticOperators {
301
- add(left, right, normalize) {
302
- return new Operator('add', [left, right], normalize);
303
- }
304
- sub(left, right, normalize) {
305
- return new Operator('sub', [left, right], normalize);
306
- }
307
- mul(left, right, normalize) {
308
- return new Operator('mul', [left, right], normalize);
309
- }
310
- div(left, right, normalize) {
311
- return new Operator('div', [left, right], normalize);
312
- }
313
- mod(left, right, normalize) {
314
- return new Operator('mod', [left, right], normalize);
315
- }
316
- neg(value, normalize) {
317
- return new Operator('-', [value], normalize);
318
- }
319
- }
320
- export class Grouping {
321
- constructor(group) {
322
- this.group = group;
323
- }
324
- get [Symbol.toStringTag]() {
325
- return 'Grouping';
326
- }
327
- toJSON() {
328
- return {
329
- $type: Types.rawType(this),
330
- group: this.group.toJSON(),
331
- };
332
- }
333
- render({ aliases, escape, prefix, }) {
334
- return `(${render(this.group, { aliases, escape, prefix })})`;
335
- }
336
- clone() {
337
- return new Grouping(Objects.clone(this.group));
338
- }
339
- }
340
- export class Lambda {
341
- constructor(op, values, alias) {
342
- this.op = op;
343
- this.values = values;
344
- this.alias = alias;
345
- }
346
- get [Symbol.toStringTag]() {
347
- return 'Lambda';
348
- }
349
- toJSON() {
350
- return {
351
- $type: Types.rawType(this),
352
- op: this.op,
353
- values: this.values,
354
- alias: this.alias,
355
- };
356
- }
357
- render({ aliases, escape, prefix, }) {
358
- let [left, right] = this.values;
359
- left = render(left, { aliases, escape, prefix });
360
- if (right) {
361
- let alias = this.alias || left.split('/').pop().toLowerCase()[0];
362
- return `${left}/${this.op}(${alias}:${render(right, {
363
- aliases,
364
- escape,
365
- prefix: alias,
366
- })})`;
367
- }
368
- else {
369
- return `${left}/${this.op}()`;
370
- }
371
- }
372
- clone() {
373
- return new Lambda(this.op, this.values.map((v) => Objects.clone(v)), this.alias);
374
- }
375
- }
376
- export class LambdaOperators {
377
- any(field, value, alias) {
378
- return new Lambda('any', [field, value], alias);
379
- }
380
- all(field, value, alias) {
381
- return new Lambda('all', [field, value], alias);
382
- }
383
- }
384
- export class ODataOperators {
385
- }
386
- applyMixins(ODataOperators, [
387
- LogicalOperators,
388
- ArithmeticOperators,
389
- LambdaOperators,
390
- ]);
391
- export const operators = new ODataOperators();
392
- export class ODataFunctions {
393
- }
394
- applyMixins(ODataFunctions, [
395
- StringAndCollectionFunctions,
396
- CollectionFunctions,
397
- StringFunctions,
398
- DateAndTimeFunctions,
399
- ArithmeticFunctions,
400
- TypeFunctions,
401
- GeoFunctions,
402
- ConditionalFunctions,
403
- ]);
404
- export const functions = new ODataFunctions();
405
- export class ODataSyntax {
406
- }
407
- applyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);
408
- export const syntax = new ODataSyntax();
409
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBaUI1QyxNQUFNLE9BQU8sS0FBSztJQUNoQixZQUFtQixPQUFlLEVBQUU7UUFBakIsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUFHLENBQUM7SUFFeEMsTUFBTSxDQUFDLE9BQU8sQ0FBbUIsT0FBZSxFQUFFO1FBQ2hELE9BQU8sSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxHQUFHLENBQUMsTUFBUyxFQUFFLEdBQW9CO1FBQ2pDLElBQUksSUFBSSxHQUFJLE1BQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDcEIsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUF1QixFQUFFLEVBQUUsQ0FDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQzFCLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQzthQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDckMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDdEI7YUFBTSxJQUFJLEdB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S0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxHQUFHLENBQUMsS0FBUSxFQUFFLEtBQVUsRUFBRSxLQUFjO1FBQ3RDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxjQUFjO0NBQU07QUFNakMsV0FBVyxDQUFDLGNBQWMsRUFBRTtJQUMxQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLGVBQWU7Q0FDaEIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUF3QixJQUFJLGNBQWMsRUFBTyxDQUFDO0FBRXhFLE1BQU0sT0FBTyxjQUFjO0NBQU07QUFXakMsV0FBVyxDQUFDLGNBQWMsRUFBRTtJQUMxQiw0QkFBNEI7SUFDNUIsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixZQUFZO0lBQ1osb0JBQW9CO0NBQ3JCLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBd0IsSUFBSSxjQUFjLEVBQU8sQ0FBQztBQUV4RSxNQUFNLE9BQU8sV0FBVztDQUFNO0FBRTlCLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUUzRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQXFCLElBQUksV0FBVyxFQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RzLCBUeXBlcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBub3JtYWxpemVWYWx1ZSB9IGZyb20gJy4uL2J1aWxkZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlcmFibGUge1xuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSk6IHN0cmluZztcbiAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICB0b0pTT04oKTogYW55O1xuICBjbG9uZSgpOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZDxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIFByb3h5SGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcgPSAnJykge31cblxuICBzdGF0aWMgZmFjdG9yeTxUIGV4dGVuZHMgb2JqZWN0PihuYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIHJldHVybiBuZXcgUHJveHkoeyBfbmFtZTogbmFtZSB9IGFzIFQsIG5ldyBGaWVsZDxUPigpKTtcbiAgfVxuXG4gIGdldCh0YXJnZXQ6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKTogYW55IHtcbiAgICBsZXQgbmFtZSA9ICh0YXJnZXQgYXMgYW55KVsnX25hbWUnXTtcbiAgICBpZiAoa2V5ID09PSAncmVuZGVyJykge1xuICAgICAgcmV0dXJuICh7IHByZWZpeCB9OiB7IHByZWZpeD86IHN0cmluZyB9KSA9PlxuICAgICAgICBwcmVmaXggPyBgJHtwcmVmaXh9LyR7bmFtZX1gIDogbmFtZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2Nsb25lJykge1xuICAgICAgcmV0dXJuICgpID0+IEZpZWxkLmZhY3RvcnkobmFtZSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFN5bWJvbC50b1N0cmluZ1RhZykge1xuICAgICAgcmV0dXJuICgpID0+ICdGaWVsZCc7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICd0b0pTT04nKSB7XG4gICAgICByZXR1cm4gKCkgPT4gKHtcbiAgICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUgPyBgJHtuYW1lfS8ke2tleSBhcyBzdHJpbmd9YCA6IGtleTtcbiAgICAgIHJldHVybiBuZXcgUHJveHkoeyBfbmFtZTogbmFtZSB9IGFzIGFueSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgaGFzKHRhcmdldDogVCwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBbJ3RvSlNPTicsICdjbG9uZScsICdyZW5kZXInXS5pbmNsdWRlcyhrZXkpIHx8IGtleSBpbiB0YXJnZXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlNaXhpbnMoZGVyaXZlZEN0b3I6IGFueSwgY29uc3RydWN0b3JzOiBhbnlbXSkge1xuICBjb25zdHJ1Y3RvcnMuZm9yRWFjaCgoYmFzZUN0b3IpID0+IHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiYXNlQ3Rvci5wcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgZGVyaXZlZEN0b3IucHJvdG90eXBlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2VDdG9yLnByb3RvdHlwZSwgbmFtZSkgfHxcbiAgICAgICAgICBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcihcbiAgdmFsdWU6IGFueSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgbm9ybWFsaXplLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgbm9ybWFsaXplPzogYm9vbGVhbjtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSA9IHt9XG4pOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlKHN5bnRheCksIHsgYWxpYXNlcywgbm9ybWFsaXplLCBwcmVmaXggfSk7XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHZhbHVlLnJlbmRlciAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiByZW5kZXIodmFsdWUucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSksIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBub3JtYWxpemUsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXgsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZSA/IG5vcm1hbGl6ZVZhbHVlKHZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSA6IHZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb248VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZSxcbiAgICBwcm90ZWN0ZWQgZXNjYXBlOiBib29sZWFuID0gZmFsc2VcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbZmllbGQsIC4uLnZhbHVlc10gPSB0aGlzLnZhbHVlcztcblxuICAgIGZpZWxkID0gcmVuZGVyKGZpZWxkLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgIGZpZWxkLFxuICAgICAgLi4udmFsdWVzLm1hcCgodikgPT5cbiAgICAgICAgcmVuZGVyKHYsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXgsIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUgfSlcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSgke3BhcmFtcy5qb2luKCcsICcpfSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPihcbiAgICAgIHRoaXMubmFtZSxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLm5vcm1hbGl6ZSxcbiAgICAgIHRoaXMuZXNjYXBlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9uczxUPiB7XG4gIGNvbmNhdChmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29uY2F0JywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBjb250YWlucyhmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29udGFpbnMnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGVuZHNXaXRoKGZpZWxkOiBhbnksIHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdlbmRzd2l0aCcsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgaW5kZXhPZihmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaW5kZXhvZicsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgbGVuZ3RoKHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdsZW5ndGgnLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgc3RhcnRzV2l0aChmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignc3RhcnRzd2l0aCcsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgc3ViU3RyaW5nKGZpZWxkOiBhbnksIHN0YXJ0OiBudW1iZXIsIGxlbmd0aD86IG51bWJlcikge1xuICAgIGxldCB2YWx1ZXMgPSBbZmllbGQsIHN0YXJ0XTtcbiAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlcy5wdXNoKGxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N1YnN0cmluZycsIHZhbHVlcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25GdW5jdGlvbnM8VD4ge1xuICBoYXNTdWJzZXQoczE6IFQsIHMyOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXQnLCBbczEsIHMyXSk7XG4gIH1cbiAgaGFzU3Vic2VxdWVuY2UoczE6IFQsIHMyOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXF1ZW5jZScsIFtzMSwgczJdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nRnVuY3Rpb25zPFQ+IHtcbiAgbWF0Y2hlc1BhdHRlcm4odmFsdWU6IFQgfCBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21hdGNoZXNQYXR0ZXJuJywgW3ZhbHVlLCBwYXR0ZXJuXSk7XG4gIH1cbiAgdG9Mb3dlcih2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvbG93ZXInLCBbdmFsdWVdKTtcbiAgfVxuICB0b1VwcGVyKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG91cHBlcicsIFt2YWx1ZV0pO1xuICB9XG4gIHRyaW0odmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0cmltJywgW3ZhbHVlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVBbmRUaW1lRnVuY3Rpb25zPFQ+IHtcbiAgZGF0ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZGF0ZScsIFt2YWx1ZV0pO1xuICB9XG4gIGRheSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZGF5JywgW3ZhbHVlXSk7XG4gIH1cbiAgZnJhY3Rpb25hbHNlY29uZHModmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2ZyYWN0aW9uYWxzZWNvbmRzJywgW3ZhbHVlXSk7XG4gIH1cbiAgaG91cih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaG91cicsIFt2YWx1ZV0pO1xuICB9XG4gIG1heGRhdGV0aW1lKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtYXhkYXRldGltZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1pbmRhdGV0aW1lKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtaW5kYXRldGltZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1pbnV0ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWludXRlJywgW3ZhbHVlXSk7XG4gIH1cbiAgbW9udGgodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21vbnRoJywgW3ZhbHVlXSk7XG4gIH1cbiAgbm93KCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ25vdycsIFtdKTtcbiAgfVxuICBzZWNvbmQodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3NlY29uZCcsIFt2YWx1ZV0pO1xuICB9XG4gIHRpbWUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICB0b3RhbG9mZnNldG1pbnV0ZXModmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdGFsb2Zmc2V0bWludXRlcycsIFt2YWx1ZV0pO1xuICB9XG4gIHRvdGFsc2Vjb25kcyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG90YWxzZWNvbmRzJywgW3ZhbHVlXSk7XG4gIH1cbiAgeWVhcih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigneWVhcicsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcml0aG1ldGljRnVuY3Rpb25zPFQ+IHtcbiAgY2VpbGluZyh2YWx1ZTogVCB8IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NlaWxpbmcnLCBbdmFsdWVdKTtcbiAgfVxuICBmbG9vcih2YWx1ZTogVCB8IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Zsb29yJywgW3ZhbHVlXSk7XG4gIH1cbiAgcm91bmQodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdyb3VuZCcsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlRnVuY3Rpb25zPFQ+IHtcbiAgY2FzdCh2YWx1ZTogVCB8IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Nhc3QnLCBbdmFsdWUsIHR5cGVdKTtcbiAgfVxuXG4gIGlzb2YodmFsdWU6IFQgfCBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdpc29mJywgW3ZhbHVlLCB0eXBlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlb0Z1bmN0aW9uczxUPiB7XG4gIGdlb0Rpc3RhbmNlKHZhbHVlOiBULCBwb2ludDogc3RyaW5nLCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmRpc3RhbmNlJywgW3ZhbHVlLCBwb2ludF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ2VvSW50ZXJzZWN0cyh2YWx1ZTogVCwgcG9seWdvbjogc3RyaW5nLCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmludGVyc2VjdHMnLCBbdmFsdWUsIHBvbHlnb25dLCBub3JtYWxpemUpO1xuICB9XG4gIGdlb0xlbmd0aChsaW5lOiBULCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmxlbmd0aCcsIFtsaW5lXSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uYWxGdW5jdGlvbnM8VD4ge1xuICBjYXNlKGNvbmRpdGlvbjogVCB8IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Nhc2UnLCBbY29uZGl0aW9uLCB2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcGVyYXRvcjxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3A6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZVxuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnT3BlcmF0b3InO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdHlwZTogVHlwZXMucmF3VHlwZSh0aGlzKSxcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcyxcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IHRoaXMudmFsdWVzO1xuXG4gICAgbGVmdCA9IHJlbmRlcihsZWZ0LCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByaWdodCA9IEFycmF5LmlzQXJyYXkocmlnaHQpXG4gICAgICAgID8gYCgke3JpZ2h0XG4gICAgICAgICAgICAubWFwKCh2KSA9PlxuICAgICAgICAgICAgICByZW5kZXIodiwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmpvaW4oJywnKX0pYFxuICAgICAgICA6IHJlbmRlcihyaWdodCwge1xuICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgICAgICAgfSk7XG4gICAgICByZXR1cm4gYCR7bGVmdH0gJHt0aGlzLm9wfSAke3JpZ2h0fWA7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLm9wfSgke2xlZnR9KWA7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKFxuICAgICAgdGhpcy5vcCxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLm5vcm1hbGl6ZVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvZ2ljYWxPcGVyYXRvcnM8VD4ge1xuICBlcShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdlcScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbmUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbmUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGd0KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2d0JywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdnZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbHQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbHQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGxlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2xlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICAvKlxuICBhbmQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignYW5kJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBvcihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdvcicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgKi9cbiAgbm90KHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdub3QnLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG4gIGhhcyhsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdoYXMnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGluKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2luJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY09wZXJhdG9yczxUPiB7XG4gIGFkZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdhZGQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIHN1YihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdzdWInLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG11bChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtdWwnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGRpdihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdkaXYnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG1vZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtb2QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG5lZyh2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignLScsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwaW5nPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBncm91cDogUmVuZGVyYWJsZSkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdHcm91cGluZyc7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0eXBlOiBUeXBlcy5yYXdUeXBlKHRoaXMpLFxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAudG9KU09OKCksXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke3JlbmRlcih0aGlzLmdyb3VwLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pfSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBHcm91cGluZyhPYmplY3RzLmNsb25lKHRoaXMuZ3JvdXApKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBhbGlhcz86IHN0cmluZ1xuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTGFtYmRhJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXMsXG4gICAgICBhbGlhczogdGhpcy5hbGlhcyxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbbGVmdCwgcmlnaHRdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSk7XG4gICAgaWYgKHJpZ2h0KSB7XG4gICAgICBsZXQgYWxpYXMgPSB0aGlzLmFsaWFzIHx8IGxlZnQuc3BsaXQoJy8nKS5wb3AoKS50b0xvd2VyQ2FzZSgpWzBdO1xuICAgICAgcmV0dXJuIGAke2xlZnR9LyR7dGhpcy5vcH0oJHthbGlhc306JHtyZW5kZXIocmlnaHQsIHtcbiAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgZXNjYXBlLFxuICAgICAgICBwcmVmaXg6IGFsaWFzLFxuICAgICAgfSl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtsZWZ0fS8ke3RoaXMub3B9KClgO1xuICAgIH1cbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKFxuICAgICAgdGhpcy5vcCxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLmFsaWFzXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhT3BlcmF0b3JzPFQ+IHtcbiAgYW55KGZpZWxkOiBULCB2YWx1ZTogYW55LCBhbGlhcz86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKCdhbnknLCBbZmllbGQsIHZhbHVlXSwgYWxpYXMpO1xuICB9XG5cbiAgYWxsKGZpZWxkOiBULCB2YWx1ZTogYW55LCBhbGlhcz86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKCdhbGwnLCBbZmllbGQsIHZhbHVlXSwgYWxpYXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YU9wZXJhdG9yczxUPiB7fVxuZXhwb3J0IGludGVyZmFjZSBPRGF0YU9wZXJhdG9yczxUPlxuICBleHRlbmRzIExvZ2ljYWxPcGVyYXRvcnM8VD4sXG4gICAgQXJpdGhtZXRpY09wZXJhdG9yczxUPixcbiAgICBMYW1iZGFPcGVyYXRvcnM8VD4ge31cblxuYXBwbHlNaXhpbnMoT0RhdGFPcGVyYXRvcnMsIFtcbiAgTG9naWNhbE9wZXJhdG9ycyxcbiAgQXJpdGhtZXRpY09wZXJhdG9ycyxcbiAgTGFtYmRhT3BlcmF0b3JzLFxuXSk7XG5leHBvcnQgY29uc3Qgb3BlcmF0b3JzOiBPRGF0YU9wZXJhdG9yczxhbnk+ID0gbmV3IE9EYXRhT3BlcmF0b3JzPGFueT4oKTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhRnVuY3Rpb25zPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhRnVuY3Rpb25zPFQ+XG4gIGV4dGVuZHMgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9uczxUPixcbiAgICBDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+LFxuICAgIFN0cmluZ0Z1bmN0aW9uczxUPixcbiAgICBEYXRlQW5kVGltZUZ1bmN0aW9uczxUPixcbiAgICBBcml0aG1ldGljRnVuY3Rpb25zPFQ+LFxuICAgIFR5cGVGdW5jdGlvbnM8VD4sXG4gICAgR2VvRnVuY3Rpb25zPFQ+LFxuICAgIENvbmRpdGlvbmFsRnVuY3Rpb25zPFQ+IHt9XG5cbmFwcGx5TWl4aW5zKE9EYXRhRnVuY3Rpb25zLCBbXG4gIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIFN0cmluZ0Z1bmN0aW9ucyxcbiAgRGF0ZUFuZFRpbWVGdW5jdGlvbnMsXG4gIEFyaXRobWV0aWNGdW5jdGlvbnMsXG4gIFR5cGVGdW5jdGlvbnMsXG4gIEdlb0Z1bmN0aW9ucyxcbiAgQ29uZGl0aW9uYWxGdW5jdGlvbnMsXG5dKTtcbmV4cG9ydCBjb25zdCBmdW5jdGlvbnM6IE9EYXRhRnVuY3Rpb25zPGFueT4gPSBuZXcgT0RhdGFGdW5jdGlvbnM8YW55PigpO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFTeW50YXg8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFTeW50YXg8VD4gZXh0ZW5kcyBPRGF0YU9wZXJhdG9yczxUPiwgT0RhdGFGdW5jdGlvbnM8VD4ge31cbmFwcGx5TWl4aW5zKE9EYXRhU3ludGF4LCBbT0RhdGFPcGVyYXRvcnMsIE9EYXRhRnVuY3Rpb25zXSk7XG5cbmV4cG9ydCBjb25zdCBzeW50YXg6IE9EYXRhU3ludGF4PGFueT4gPSBuZXcgT0RhdGFTeW50YXg8YW55PigpO1xuIl19
@@ -1,115 +0,0 @@
1
- import { QueryOption } from '../../types';
2
- import { Objects, Types } from '../../utils';
3
- import { buildPathAndQuery, } from './builder';
4
- import { ODataQueryOptionHandler } from './handlers';
5
- export class ODataQueryOptions {
6
- constructor(values) {
7
- this.values =
8
- values instanceof Map
9
- ? values
10
- : new Map(Object.entries(values || {}));
11
- }
12
- // Params
13
- pathAndParams(escape = false) {
14
- let aliases = [];
15
- let options = [
16
- QueryOption.select,
17
- QueryOption.filter,
18
- QueryOption.search,
19
- QueryOption.compute,
20
- QueryOption.transform,
21
- QueryOption.orderBy,
22
- QueryOption.top,
23
- QueryOption.skip,
24
- QueryOption.skiptoken,
25
- QueryOption.expand,
26
- QueryOption.format,
27
- QueryOption.levels,
28
- QueryOption.count,
29
- ]
30
- .filter((key) => !Types.isEmpty(this.values.get(key)))
31
- .reduce((acc, key) => {
32
- let value = this.values.get(key);
33
- if (Types.rawType(value).endsWith('Expression') ||
34
- (Types.isArray(value) &&
35
- value.some((v) => Types.rawType(v).endsWith('Expression')))) {
36
- value = Types.isArray(value)
37
- ? value.map((v) => Types.rawType(v).endsWith('Expression')
38
- ? v.render({ aliases })
39
- : v)
40
- : value.render({ aliases });
41
- }
42
- return Object.assign(acc, { [key]: value });
43
- }, {});
44
- return buildPathAndQuery({ ...options, aliases, escape });
45
- }
46
- toString() {
47
- const [path, params] = this.pathAndParams();
48
- return (path +
49
- Object.entries(params)
50
- .filter(([, value]) => !Types.isEmpty(value))
51
- .map(([key, value]) => `${key}=${value}`)
52
- .join('&'));
53
- }
54
- toJSON() {
55
- return [...this.values.keys()].reduce((acc, key) => {
56
- let value = this.values.get(key);
57
- value = 'toJSON' in value ? value.toJSON() : value;
58
- return Object.assign(acc, { [key]: value });
59
- }, {});
60
- }
61
- toQueryArguments() {
62
- return {
63
- select: this.values.get(QueryOption.select) || null,
64
- expand: this.values.get(QueryOption.expand) || null,
65
- transform: this.values.get(QueryOption.transform) || null,
66
- compute: this.values.get(QueryOption.compute) || null,
67
- search: this.values.get(QueryOption.search) || null,
68
- filter: this.values.get(QueryOption.filter) || null,
69
- orderBy: this.values.get(QueryOption.orderBy) || null,
70
- top: this.values.get(QueryOption.top) || null,
71
- skip: this.values.get(QueryOption.skip) || null,
72
- skiptoken: this.values.get(QueryOption.skiptoken) || null,
73
- levels: this.values.get(QueryOption.levels) || null,
74
- count: this.values.get(QueryOption.count) || null,
75
- };
76
- }
77
- clone() {
78
- return new ODataQueryOptions(Objects.clone(this.values));
79
- }
80
- // Set Renderable
81
- expression(key, exp) {
82
- if (exp !== undefined)
83
- this.values.set(key, exp);
84
- return this.values.get(key);
85
- }
86
- // Option Handler
87
- option(key, opts) {
88
- if (opts !== undefined)
89
- this.values.set(key, opts);
90
- return new ODataQueryOptionHandler(this.values, key);
91
- }
92
- // Query Options tools
93
- has(key) {
94
- return this.values.has(key);
95
- }
96
- remove(...keys) {
97
- [...this.values.keys()]
98
- .filter((k) => keys.indexOf(k) !== -1)
99
- .forEach((key) => {
100
- this.values.delete(key);
101
- });
102
- }
103
- keep(...keys) {
104
- [...this.values.keys()]
105
- .filter((k) => keys.indexOf(k) === -1)
106
- .forEach((key) => {
107
- this.values.delete(key);
108
- });
109
- }
110
- // Clear
111
- clear() {
112
- this.values.clear();
113
- }
114
- }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnkvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFDTCxpQkFBaUIsR0FPbEIsTUFBTSxXQUFXLENBQUM7QUFVbkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBa0JyRCxNQUFNLE9BQU8saUJBQWlCO0lBRzVCLFlBQVksTUFBd0Q7UUFDbEUsSUFBSSxDQUFDLE1BQU07WUFDVCxNQUFNLFlBQVksR0FBRztnQkFDbkIsQ0FBQyxDQUFDLE1BQU07Z0JBQ1IsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBOEIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxTQUFTO0lBQ1QsYUFBYSxDQUFDLFNBQWtCLEtBQUs7UUFDbkMsSUFBSSxPQUFPLEdBQXNCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLE9BQU8sR0FBRztZQUNaLFdBQVcsQ0FBQyxNQUFNO1lBQ2xCLFdBQVcsQ0FBQyxNQUFNO1lBQ2xCLFdBQVcsQ0FBQyxNQUFNO1lBQ2xCLFdBQVcsQ0FBQyxPQUFPO1lBQ25CLFdBQVcsQ0FBQyxTQUFTO1lBQ3JCLFdBQVcsQ0FBQyxPQUFPO1lBQ25CLFdBQVcsQ0FBQyxHQUFHO1lBQ2YsV0FBVyxDQUFDLElBQUk7WUFDaEIsV0FBVyxDQUFDLFNBQVM7WUFDckIsV0FBVyxDQUFDLE1BQU07WUFDbEIsV0FBVyxDQUFDLE1BQU07WUFDbEIsV0FBVyxDQUFDLE1BQU07WUFDbEIsV0FBVyxDQUFDLEtBQUs7U0FD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QUFtQjtRQUN6QixDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNwQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDckMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxRQUFRO0lBQ1IsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXVlcnlPcHRpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBPYmplY3RzLCBUeXBlcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGJ1aWxkUGF0aEFuZFF1ZXJ5LFxuICBFeHBhbmQsXG4gIEZpbHRlcixcbiAgT3JkZXJCeSxcbiAgUXVlcnlDdXN0b21UeXBlLFxuICBTZWxlY3QsXG4gIFRyYW5zZm9ybSxcbn0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7XG4gIENvbXB1dGVFeHByZXNzaW9uLFxuICBFeHByZXNzaW9uLFxuICBGaWx0ZXJFeHByZXNzaW9uLFxuICBPcmRlckJ5RXhwcmVzc2lvbixcbiAgU2VhcmNoRXhwcmVzc2lvbixcbn0gZnJvbSAnLi9leHByZXNzaW9ucyc7XG5pbXBvcnQgeyBFeHBhbmRFeHByZXNzaW9uIH0gZnJvbSAnLi9leHByZXNzaW9ucy9leHBhbmQnO1xuaW1wb3J0IHsgU2VsZWN0RXhwcmVzc2lvbiB9IGZyb20gJy4vZXhwcmVzc2lvbnMvc2VsZWN0JztcbmltcG9ydCB7IE9EYXRhUXVlcnlPcHRpb25IYW5kbGVyIH0gZnJvbSAnLi9oYW5kbGVycyc7XG5cbmV4cG9ydCB0eXBlIE9EYXRhUXVlcnlBcmd1bWVudHM8VD4gPSB7XG4gIFtRdWVyeU9wdGlvbi5zZWxlY3RdPzogU2VsZWN0PFQ+IHwgU2VsZWN0RXhwcmVzc2lvbjxUPiB8IG51bGw7XG4gIFtRdWVyeU9wdGlvbi5leHBhbmRdPzogRXhwYW5kPFQ+IHwgRXhwYW5kRXhwcmVzc2lvbjxUPiB8IG51bGw7XG4gIFtRdWVyeU9wdGlvbi5jb21wdXRlXT86IHN0cmluZyB8IENvbXB1dGVFeHByZXNzaW9uPFQ+IHwgbnVsbDtcbiAgW1F1ZXJ5T3B0aW9uLmZpbHRlcl0/OiBGaWx0ZXI8VD4gfCBGaWx0ZXJFeHByZXNzaW9uPFQ+IHwgbnVsbDtcbiAgW1F1ZXJ5T3B0aW9uLnNlYXJjaF0/OiBzdHJpbmcgfCBTZWFyY2hFeHByZXNzaW9uPFQ+IHwgbnVsbDtcbiAgW1F1ZXJ5T3B0aW9uLnRyYW5zZm9ybV0/OiBUcmFuc2Zvcm08VD4gfCBudWxsO1xuICBbUXVlcnlPcHRpb24ub3JkZXJCeV0/OiBPcmRlckJ5PFQ+IHwgT3JkZXJCeUV4cHJlc3Npb248VD4gfCBudWxsO1xuICBbUXVlcnlPcHRpb24udG9wXT86IG51bWJlciB8IG51bGw7XG4gIFtRdWVyeU9wdGlvbi5za2lwXT86IG51bWJlciB8IG51bGw7XG4gIFtRdWVyeU9wdGlvbi5za2lwdG9rZW5dPzogc3RyaW5nIHwgbnVsbDtcbiAgW1F1ZXJ5T3B0aW9uLmZvcm1hdF0/OiBzdHJpbmcgfCBudWxsO1xuICBbUXVlcnlPcHRpb24ubGV2ZWxzXT86IG51bWJlciB8ICdtYXgnIHwgbnVsbDtcbiAgW1F1ZXJ5T3B0aW9uLmNvdW50XT86IGJvb2xlYW4gfCBudWxsO1xufTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhUXVlcnlPcHRpb25zPFQ+IHtcbiAgdmFsdWVzOiBNYXA8UXVlcnlPcHRpb24sIGFueT47XG5cbiAgY29uc3RydWN0b3IodmFsdWVzPzogTWFwPFF1ZXJ5T3B0aW9uLCBhbnk+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICB0aGlzLnZhbHVlcyA9XG4gICAgICB2YWx1ZXMgaW5zdGFuY2VvZiBNYXBcbiAgICAgICAgPyB2YWx1ZXNcbiAgICAgICAgOiBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHZhbHVlcyB8fCB7fSkgYXMgQXJyYXk8W1F1ZXJ5T3B0aW9uLCBhbnldPik7XG4gIH1cblxuICAvLyBQYXJhbXNcbiAgcGF0aEFuZFBhcmFtcyhlc2NhcGU6IGJvb2xlYW4gPSBmYWxzZSk6IFtzdHJpbmcsIHsgW25hbWU6IHN0cmluZ106IGFueSB9XSB7XG4gICAgbGV0IGFsaWFzZXM6IFF1ZXJ5Q3VzdG9tVHlwZVtdID0gW107XG4gICAgbGV0IG9wdGlvbnMgPSBbXG4gICAgICBRdWVyeU9wdGlvbi5zZWxlY3QsXG4gICAgICBRdWVyeU9wdGlvbi5maWx0ZXIsXG4gICAgICBRdWVyeU9wdGlvbi5zZWFyY2gsXG4gICAgICBRdWVyeU9wdGlvbi5jb21wdXRlLFxuICAgICAgUXVlcnlPcHRpb24udHJhbnNmb3JtLFxuICAgICAgUXVlcnlPcHRpb24ub3JkZXJCeSxcbiAgICAgIFF1ZXJ5T3B0aW9uLnRvcCxcbiAgICAgIFF1ZXJ5T3B0aW9uLnNraXAsXG4gICAgICBRdWVyeU9wdGlvbi5za2lwdG9rZW4sXG4gICAgICBRdWVyeU9wdGlvbi5leHBhbmQsXG4gICAgICBRdWVyeU9wdGlvbi5mb3JtYXQsXG4gICAgICBRdWVyeU9wdGlvbi5sZXZlbHMsXG4gICAgICBRdWVyeU9wdGlvbi5jb3VudCxcbiAgICBdXG4gICAgICAuZmlsdGVyKChrZXkpID0+ICFUeXBlcy5pc0VtcHR5KHRoaXMudmFsdWVzLmdldChrZXkpKSlcbiAgICAgIC5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWVzLmdldChrZXkpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgVHlwZXMucmF3VHlwZSh2YWx1ZSkuZW5kc1dpdGgoJ0V4cHJlc3Npb24nKSB8fFxuICAgICAgICAgIChUeXBlcy5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgICAgICAgdmFsdWUuc29tZSgodjogYW55KSA9PiBUeXBlcy5yYXdUeXBlKHYpLmVuZHNXaXRoKCdFeHByZXNzaW9uJykpKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZSA9IFR5cGVzLmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlLm1hcCgodjogRXhwcmVzc2lvbjxUPikgPT5cbiAgICAgICAgICAgICAgICBUeXBlcy5yYXdUeXBlKHYpLmVuZHNXaXRoKCdFeHByZXNzaW9uJylcbiAgICAgICAgICAgICAgICAgID8gdi5yZW5kZXIoeyBhbGlhc2VzIH0pXG4gICAgICAgICAgICAgICAgICA6IHZcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiAodmFsdWUgYXMgRXhwcmVzc2lvbjxUPikucmVuZGVyKHsgYWxpYXNlcyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2tleV06IHZhbHVlIH0pO1xuICAgICAgfSwge30pO1xuXG4gICAgcmV0dXJuIGJ1aWxkUGF0aEFuZFF1ZXJ5PGFueT4oeyAuLi5vcHRpb25zLCBhbGlhc2VzLCBlc2NhcGUgfSk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtwYXRoLCBwYXJhbXNdID0gdGhpcy5wYXRoQW5kUGFyYW1zKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHBhdGggK1xuICAgICAgT2JqZWN0LmVudHJpZXMocGFyYW1zKVxuICAgICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+ICFUeXBlcy5pc0VtcHR5KHZhbHVlKSlcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YClcbiAgICAgICAgLmpvaW4oJyYnKVxuICAgICk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnZhbHVlcy5rZXlzKCldLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMudmFsdWVzLmdldChrZXkpO1xuICAgICAgdmFsdWUgPSAndG9KU09OJyBpbiB2YWx1ZSA/IHZhbHVlLnRvSlNPTigpIDogdmFsdWU7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2tleV06IHZhbHVlIH0pO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHRvUXVlcnlBcmd1bWVudHMoKTogT0RhdGFRdWVyeUFyZ3VtZW50czxUPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdDogdGhpcy52YWx1ZXMuZ2V0KFF1ZXJ5T3B0aW9uLnNlbGVjdCkgfHwgbnVsbCxcbiAgICAgIGV4cGFuZDogdGhpcy52YWx1ZXMuZ2V0KFF1ZXJ5T3B0aW9uLmV4cGFuZCkgfHwgbnVsbCxcbiAgICAgIHRyYW5zZm9ybTogdGhpcy52YWx1ZXMuZ2V0KFF1ZXJ5T3B0aW9uLnRyYW5zZm9ybSkgfHwgbnVsbCxcbiAgICAgIGNvbXB1dGU6IHRoaXMudmFsdWVzLmdldChRdWVyeU9wdGlvbi5jb21wdXRlKSB8fCBudWxsLFxuICAgICAgc2VhcmNoOiB0aGlzLnZhbHVlcy5nZXQoUXVlcnlPcHRpb24uc2VhcmNoKSB8fCBudWxsLFxuICAgICAgZmlsdGVyOiB0aGlzLnZhbHVlcy5nZXQoUXVlcnlPcHRpb24uZmlsdGVyKSB8fCBudWxsLFxuICAgICAgb3JkZXJCeTogdGhpcy52YWx1ZXMuZ2V0KFF1ZXJ5T3B0aW9uLm9yZGVyQnkpIHx8IG51bGwsXG4gICAgICB0b3A6IHRoaXMudmFsdWVzLmdldChRdWVyeU9wdGlvbi50b3ApIHx8IG51bGwsXG4gICAgICBza2lwOiB0aGlzLnZhbHVlcy5nZXQoUXVlcnlPcHRpb24uc2tpcCkgfHwgbnVsbCxcbiAgICAgIHNraXB0b2tlbjogdGhpcy52YWx1ZXMuZ2V0KFF1ZXJ5T3B0aW9uLnNraXB0b2tlbikgfHwgbnVsbCxcbiAgICAgIGxldmVsczogdGhpcy52YWx1ZXMuZ2V0KFF1ZXJ5T3B0aW9uLmxldmVscykgfHwgbnVsbCxcbiAgICAgIGNvdW50OiB0aGlzLnZhbHVlcy5nZXQoUXVlcnlPcHRpb24uY291bnQpIHx8IG51bGwsXG4gICAgfSBhcyBPRGF0YVF1ZXJ5QXJndW1lbnRzPFQ+O1xuICB9XG5cbiAgY2xvbmU8Tz4oKSB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YVF1ZXJ5T3B0aW9uczxPPihPYmplY3RzLmNsb25lKHRoaXMudmFsdWVzKSk7XG4gIH1cblxuICAvLyBTZXQgUmVuZGVyYWJsZVxuICBleHByZXNzaW9uKGtleTogUXVlcnlPcHRpb24sIGV4cD86IEV4cHJlc3Npb248VD4pIHtcbiAgICBpZiAoZXhwICE9PSB1bmRlZmluZWQpIHRoaXMudmFsdWVzLnNldChrZXksIGV4cCk7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLmdldChrZXkpO1xuICB9XG5cbiAgLy8gT3B0aW9uIEhhbmRsZXJcbiAgb3B0aW9uPE8+KGtleTogUXVlcnlPcHRpb24sIG9wdHM/OiBPKSB7XG4gICAgaWYgKG9wdHMgIT09IHVuZGVmaW5lZCkgdGhpcy52YWx1ZXMuc2V0KGtleSwgb3B0cyk7XG4gICAgcmV0dXJuIG5ldyBPRGF0YVF1ZXJ5T3B0aW9uSGFuZGxlcjxPPih0aGlzLnZhbHVlcywga2V5KTtcbiAgfVxuXG4gIC8vIFF1ZXJ5IE9wdGlvbnMgdG9vbHNcbiAgaGFzKGtleTogUXVlcnlPcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMuaGFzKGtleSk7XG4gIH1cblxuICByZW1vdmUoLi4ua2V5czogUXVlcnlPcHRpb25bXSkge1xuICAgIFsuLi50aGlzLnZhbHVlcy5rZXlzKCldXG4gICAgICAuZmlsdGVyKChrKSA9PiBrZXlzLmluZGV4T2YoaykgIT09IC0xKVxuICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB0aGlzLnZhbHVlcy5kZWxldGUoa2V5KTtcbiAgICAgIH0pO1xuICB9XG5cbiAga2VlcCguLi5rZXlzOiBRdWVyeU9wdGlvbltdKSB7XG4gICAgWy4uLnRoaXMudmFsdWVzLmtleXMoKV1cbiAgICAgIC5maWx0ZXIoKGspID0+IGtleXMuaW5kZXhPZihrKSA9PT0gLTEpXG4gICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWVzLmRlbGV0ZShrZXkpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBDbGVhclxuICBjbGVhcigpIHtcbiAgICB0aGlzLnZhbHVlcy5jbGVhcigpO1xuICB9XG59XG4iXX0=