angular-odata 0.92.0 → 0.95.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 (196) hide show
  1. package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
  2. package/esm2020/lib/api.mjs +303 -0
  3. package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +3 -3
  4. package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
  5. package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +1 -1
  6. package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +2 -2
  7. package/esm2020/lib/client.mjs +271 -0
  8. package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +3 -1
  9. package/esm2020/lib/helper.mjs +268 -0
  10. package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
  11. package/esm2020/lib/models/collection.mjs +741 -0
  12. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  13. package/esm2020/lib/models/model.mjs +453 -0
  14. package/esm2020/lib/models/options.mjs +945 -0
  15. package/{esm2015/lib/module.js → esm2020/lib/module.mjs} +7 -7
  16. package/esm2020/lib/options.mjs +32 -0
  17. package/{esm2015/lib/resources/index.js → esm2020/lib/resources/index.mjs} +0 -0
  18. package/{esm2015/lib/resources/path/handlers.js → esm2020/lib/resources/path/handlers.mjs} +1 -1
  19. package/{esm2015/lib/resources/path/index.js → esm2020/lib/resources/path/index.mjs} +0 -0
  20. package/esm2020/lib/resources/path/segments.mjs +124 -0
  21. package/esm2020/lib/resources/query/builder.mjs +590 -0
  22. package/esm2020/lib/resources/query/expressions.mjs +207 -0
  23. package/esm2020/lib/resources/query/handlers.mjs +186 -0
  24. package/{esm2015/lib/resources/query/index.js → esm2020/lib/resources/query/index.mjs} +0 -0
  25. package/esm2020/lib/resources/query/options.mjs +103 -0
  26. package/esm2020/lib/resources/query/syntax.mjs +406 -0
  27. package/esm2020/lib/resources/request.mjs +167 -0
  28. package/esm2020/lib/resources/resource.mjs +326 -0
  29. package/esm2020/lib/resources/responses/annotations.mjs +119 -0
  30. package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
  31. package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
  32. package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
  33. package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
  34. package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
  35. package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
  36. package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
  37. package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
  38. package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
  39. package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
  40. package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
  41. package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
  42. package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
  43. package/esm2020/lib/resources/responses/metadata.mjs +547 -0
  44. package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +0 -0
  45. package/{esm2015/lib/resources/responses/response.js → esm2020/lib/resources/responses/response.mjs} +0 -0
  46. package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +0 -0
  47. package/esm2020/lib/resources/types/action.mjs +101 -0
  48. package/esm2020/lib/resources/types/batch.mjs +288 -0
  49. package/esm2020/lib/resources/types/count.mjs +27 -0
  50. package/esm2020/lib/resources/types/entity-set.mjs +94 -0
  51. package/esm2020/lib/resources/types/entity.mjs +106 -0
  52. package/esm2020/lib/resources/types/function.mjs +137 -0
  53. package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
  54. package/esm2020/lib/resources/types/media.mjs +41 -0
  55. package/esm2020/lib/resources/types/metadata.mjs +30 -0
  56. package/esm2020/lib/resources/types/navigation-property.mjs +226 -0
  57. package/esm2020/lib/resources/types/options.mjs +2 -0
  58. package/esm2020/lib/resources/types/property.mjs +183 -0
  59. package/esm2020/lib/resources/types/reference.mjs +85 -0
  60. package/esm2020/lib/resources/types/singleton.mjs +126 -0
  61. package/esm2020/lib/resources/types/value.mjs +41 -0
  62. package/esm2020/lib/schema/annotation.mjs +37 -0
  63. package/esm2020/lib/schema/callable.mjs +62 -0
  64. package/esm2020/lib/schema/element.mjs +51 -0
  65. package/esm2020/lib/schema/entity-container.mjs +9 -0
  66. package/esm2020/lib/schema/entity-set.mjs +9 -0
  67. package/esm2020/lib/schema/enum-type.mjs +71 -0
  68. package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +0 -0
  69. package/esm2020/lib/schema/parsers/callable.mjs +113 -0
  70. package/{esm2015/lib/schema/parsers/edm.js → esm2020/lib/schema/parsers/edm.mjs} +2 -2
  71. package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
  72. package/{esm2015/lib/schema/parsers/index.js → esm2020/lib/schema/parsers/index.mjs} +0 -0
  73. package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
  74. package/esm2020/lib/schema/schema.mjs +61 -0
  75. package/esm2020/lib/schema/structured-type.mjs +198 -0
  76. package/esm2020/lib/services/base.mjs +29 -0
  77. package/esm2020/lib/services/entity-set.mjs +143 -0
  78. package/esm2020/lib/services/entity.mjs +12 -0
  79. package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
  80. package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
  81. package/{esm2015/lib/services/singleton.js → esm2020/lib/services/singleton.mjs} +1 -1
  82. package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
  83. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  84. package/esm2020/lib/types.mjs +37 -0
  85. package/{esm2015/lib/utils/arraybuffers.js → esm2020/lib/utils/arraybuffers.mjs} +0 -0
  86. package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
  87. package/{esm2015/lib/utils/durations.js → esm2020/lib/utils/durations.mjs} +0 -0
  88. package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
  89. package/{esm2015/lib/utils/http.js → esm2020/lib/utils/http.mjs} +0 -0
  90. package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
  91. package/{esm2015/lib/utils/objects.js → esm2020/lib/utils/objects.mjs} +0 -0
  92. package/esm2020/lib/utils/odata.mjs +22 -0
  93. package/{esm2015/lib/utils/strings.js → esm2020/lib/utils/strings.mjs} +0 -0
  94. package/{esm2015/lib/utils/types.js → esm2020/lib/utils/types.mjs} +0 -0
  95. package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
  96. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  97. package/fesm2015/{angular-odata.js → angular-odata.mjs} +849 -750
  98. package/fesm2015/angular-odata.mjs.map +1 -0
  99. package/fesm2020/angular-odata.mjs +10274 -0
  100. package/fesm2020/angular-odata.mjs.map +1 -0
  101. package/lib/api.d.ts +10 -10
  102. package/lib/cache/cache.d.ts +2 -2
  103. package/lib/cache/storage.d.ts +1 -1
  104. package/lib/client.d.ts +3 -3
  105. package/lib/constants.d.ts +1 -0
  106. package/lib/models/collection.d.ts +11 -19
  107. package/lib/models/model.d.ts +22 -18
  108. package/lib/models/options.d.ts +16 -21
  109. package/lib/module.d.ts +1 -1
  110. package/lib/options.d.ts +1 -0
  111. package/lib/resources/path/segments.d.ts +1 -1
  112. package/lib/resources/query/expressions.d.ts +37 -27
  113. package/lib/resources/query/handlers.d.ts +7 -11
  114. package/lib/resources/query/options.d.ts +2 -2
  115. package/lib/resources/query/syntax.d.ts +52 -54
  116. package/lib/resources/request.d.ts +1 -1
  117. package/lib/resources/resource.d.ts +25 -8
  118. package/lib/resources/types/action.d.ts +12 -19
  119. package/lib/resources/types/batch.d.ts +1 -3
  120. package/lib/resources/types/count.d.ts +5 -4
  121. package/lib/resources/types/entity-set.d.ts +11 -15
  122. package/lib/resources/types/entity.d.ts +12 -15
  123. package/lib/resources/types/function.d.ts +11 -18
  124. package/lib/resources/types/media.d.ts +6 -5
  125. package/lib/resources/types/metadata.d.ts +3 -5
  126. package/lib/resources/types/navigation-property.d.ts +15 -21
  127. package/lib/resources/types/property.d.ts +13 -19
  128. package/lib/resources/types/reference.d.ts +39 -6
  129. package/lib/resources/types/singleton.d.ts +12 -16
  130. package/lib/resources/types/value.d.ts +9 -5
  131. package/lib/schema/{base.d.ts → annotation.d.ts} +0 -0
  132. package/lib/schema/callable.d.ts +2 -18
  133. package/lib/schema/element.d.ts +39 -0
  134. package/lib/schema/entity-container.d.ts +2 -12
  135. package/lib/schema/entity-set.d.ts +2 -18
  136. package/lib/schema/enum-type.d.ts +2 -26
  137. package/lib/schema/parsers/enum-type.d.ts +4 -4
  138. package/lib/schema/parsers/structured-type.d.ts +4 -4
  139. package/lib/schema/schema.d.ts +2 -2
  140. package/lib/schema/structured-type.d.ts +8 -26
  141. package/lib/services/base.d.ts +2 -2
  142. package/lib/services/entity-set.d.ts +2 -2
  143. package/lib/services/entity.d.ts +1 -1
  144. package/lib/services/singleton.d.ts +2 -2
  145. package/lib/settings.d.ts +5 -5
  146. package/lib/types.d.ts +1 -0
  147. package/package.json +21 -8
  148. package/bundles/angular-odata.umd.js +0 -11861
  149. package/bundles/angular-odata.umd.js.map +0 -1
  150. package/esm2015/lib/api.js +0 -296
  151. package/esm2015/lib/client.js +0 -272
  152. package/esm2015/lib/helper.js +0 -268
  153. package/esm2015/lib/models/collection.js +0 -734
  154. package/esm2015/lib/models/model.js +0 -438
  155. package/esm2015/lib/models/options.js +0 -942
  156. package/esm2015/lib/options.js +0 -31
  157. package/esm2015/lib/resources/path/segments.js +0 -124
  158. package/esm2015/lib/resources/query/builder.js +0 -591
  159. package/esm2015/lib/resources/query/expressions.js +0 -194
  160. package/esm2015/lib/resources/query/handlers.js +0 -192
  161. package/esm2015/lib/resources/query/options.js +0 -103
  162. package/esm2015/lib/resources/query/syntax.js +0 -367
  163. package/esm2015/lib/resources/request.js +0 -168
  164. package/esm2015/lib/resources/resource.js +0 -243
  165. package/esm2015/lib/resources/responses/annotations.js +0 -121
  166. package/esm2015/lib/resources/responses/metadata.js +0 -548
  167. package/esm2015/lib/resources/types/action.js +0 -105
  168. package/esm2015/lib/resources/types/batch.js +0 -294
  169. package/esm2015/lib/resources/types/count.js +0 -33
  170. package/esm2015/lib/resources/types/entity-set.js +0 -101
  171. package/esm2015/lib/resources/types/entity.js +0 -137
  172. package/esm2015/lib/resources/types/function.js +0 -130
  173. package/esm2015/lib/resources/types/media.js +0 -47
  174. package/esm2015/lib/resources/types/metadata.js +0 -36
  175. package/esm2015/lib/resources/types/navigation-property.js +0 -205
  176. package/esm2015/lib/resources/types/options.js +0 -2
  177. package/esm2015/lib/resources/types/property.js +0 -151
  178. package/esm2015/lib/resources/types/reference.js +0 -74
  179. package/esm2015/lib/resources/types/singleton.js +0 -167
  180. package/esm2015/lib/resources/types/value.js +0 -35
  181. package/esm2015/lib/schema/base.js +0 -37
  182. package/esm2015/lib/schema/callable.js +0 -82
  183. package/esm2015/lib/schema/entity-container.js +0 -24
  184. package/esm2015/lib/schema/entity-set.js +0 -35
  185. package/esm2015/lib/schema/enum-type.js +0 -102
  186. package/esm2015/lib/schema/parsers/callable.js +0 -107
  187. package/esm2015/lib/schema/parsers/enum-type.js +0 -107
  188. package/esm2015/lib/schema/parsers/structured-type.js +0 -392
  189. package/esm2015/lib/schema/schema.js +0 -52
  190. package/esm2015/lib/schema/structured-type.js +0 -220
  191. package/esm2015/lib/services/base.js +0 -23
  192. package/esm2015/lib/services/entity-set.js +0 -146
  193. package/esm2015/lib/services/entity.js +0 -12
  194. package/esm2015/lib/types.js +0 -37
  195. package/esm2015/lib/utils/odata.js +0 -21
  196. package/fesm2015/angular-odata.js.map +0 -1
@@ -1,367 +0,0 @@
1
- import { normalizeValue } from './builder';
2
- function applyMixins(derivedCtor, constructors) {
3
- constructors.forEach((baseCtor) => {
4
- Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
5
- Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
6
- Object.create(null));
7
- });
8
- });
9
- }
10
- function render(value, { aliases, normalize, escape, } = {}) {
11
- if (typeof value === 'function') {
12
- return render(value(syntax), { aliases, normalize });
13
- }
14
- if (typeof value === 'object' && value !== null && 'render' in value) {
15
- return render(value.render({ aliases, escape }), {
16
- aliases,
17
- normalize,
18
- escape,
19
- });
20
- }
21
- return normalize ? normalizeValue(value, { aliases, escape }) : value;
22
- }
23
- export class Function {
24
- constructor(name, values, normalize = true, escape = false) {
25
- this.name = name;
26
- this.values = values;
27
- this.normalize = normalize;
28
- this.escape = escape;
29
- }
30
- get [Symbol.toStringTag]() {
31
- return 'Function';
32
- }
33
- toJSON() {
34
- return {
35
- name: this.name,
36
- values: this.values,
37
- normalize: this.normalize,
38
- };
39
- }
40
- render({ aliases, escape, }) {
41
- let [field, ...values] = this.values;
42
- field = render(field);
43
- let params = [
44
- field,
45
- ...values.map((v) => render(v, { aliases, escape, normalize: this.normalize })),
46
- ];
47
- return `${this.name}(${params.join(', ')})`;
48
- }
49
- }
50
- export class StringAndCollectionFunctions {
51
- concat(field, value, normalize) {
52
- return new Function('concat', [field, value], normalize);
53
- }
54
- contains(field, value, normalize) {
55
- return new Function('contains', [field, value], normalize);
56
- }
57
- endsWith(field, value, normalize) {
58
- return new Function('endswith', [field, value], normalize);
59
- }
60
- indexOf(field, value, normalize) {
61
- return new Function('indexof', [field, value], normalize);
62
- }
63
- length(value, normalize) {
64
- return new Function('length', [value], normalize);
65
- }
66
- startsWith(field, value, normalize) {
67
- return new Function('startswith', [field, value], normalize);
68
- }
69
- subString(field, start, length) {
70
- let values = [field, start];
71
- if (length !== undefined) {
72
- values.push(length);
73
- }
74
- return new Function('substring', values);
75
- }
76
- }
77
- export class CollectionFunctions {
78
- hasSubset(s1, s2) {
79
- return new Function('hassubset', [s1, s2]);
80
- }
81
- hasSubsequence(s1, s2) {
82
- return new Function('hassubsequence', [s1, s2]);
83
- }
84
- }
85
- export class StringFunctions {
86
- matchesPattern(value, pattern) {
87
- return new Function('matchesPattern', [value, pattern]);
88
- }
89
- toLower(value) {
90
- return new Function('tolower', [value]);
91
- }
92
- toUpper(value) {
93
- return new Function('toupper', [value]);
94
- }
95
- trim(value) {
96
- return new Function('trim', [value]);
97
- }
98
- }
99
- export class DateAndTimeFunctions {
100
- date(value) {
101
- return new Function('date', [value]);
102
- }
103
- day(value) {
104
- return new Function('day', [value]);
105
- }
106
- fractionalseconds(value) {
107
- return new Function('fractionalseconds', [value]);
108
- }
109
- hour(value) {
110
- return new Function('hour', [value]);
111
- }
112
- maxdatetime(value) {
113
- return new Function('maxdatetime', [value]);
114
- }
115
- mindatetime(value) {
116
- return new Function('mindatetime', [value]);
117
- }
118
- minute(value) {
119
- return new Function('minute', [value]);
120
- }
121
- month(value) {
122
- return new Function('month', [value]);
123
- }
124
- now() {
125
- return new Function('now', []);
126
- }
127
- second(value) {
128
- return new Function('second', [value]);
129
- }
130
- time(value) {
131
- return new Function('time', [value]);
132
- }
133
- totaloffsetminutes(value) {
134
- return new Function('totaloffsetminutes', [value]);
135
- }
136
- totalseconds(value) {
137
- return new Function('totalseconds', [value]);
138
- }
139
- year(value) {
140
- return new Function('year', [value]);
141
- }
142
- }
143
- export class ArithmeticFunctions {
144
- ceiling(value) {
145
- return new Function('ceiling', [value]);
146
- }
147
- floor(value) {
148
- return new Function('floor', [value]);
149
- }
150
- round(value) {
151
- return new Function('round', [value]);
152
- }
153
- }
154
- export class TypeFunctions {
155
- cast(value, type) {
156
- return new Function('cast', [value, type]);
157
- }
158
- isof(value, type) {
159
- return new Function('isof', [value, type]);
160
- }
161
- }
162
- export class GeoFunctions {
163
- geoDistance(value, point, normalize) {
164
- return new Function('geo.distance', [value, point], normalize);
165
- }
166
- geoIntersects(value, polygon, normalize) {
167
- return new Function('geo.intersects', [value, polygon], normalize);
168
- }
169
- geoLength(line, normalize) {
170
- return new Function('geo.length', [line], normalize);
171
- }
172
- }
173
- export class ConditionalFunctions {
174
- case(condition, value) {
175
- return new Function('case', [condition, value]);
176
- }
177
- }
178
- export class Operator {
179
- constructor(op, values, normalize = true) {
180
- this.op = op;
181
- this.values = values;
182
- this.normalize = normalize;
183
- }
184
- get [Symbol.toStringTag]() {
185
- return 'Operator';
186
- }
187
- toJSON() {
188
- return {
189
- op: this.op,
190
- values: this.values,
191
- normalize: this.normalize,
192
- };
193
- }
194
- render({ aliases, escape, }) {
195
- let [left, right] = this.values;
196
- left = render(left, { aliases, escape });
197
- if (right !== undefined) {
198
- right = Array.isArray(right)
199
- ? `(${right
200
- .map((v) => render(v, {
201
- aliases,
202
- escape,
203
- normalize: this.normalize,
204
- }))
205
- .join(',')})`
206
- : render(right, {
207
- aliases,
208
- escape,
209
- normalize: this.normalize,
210
- });
211
- return `${left} ${this.op} ${right}`;
212
- }
213
- return `${this.op}(${left})`;
214
- }
215
- }
216
- export class LogicalOperators {
217
- eq(left, right, normalize) {
218
- return new Operator('eq', [left, right], normalize);
219
- }
220
- ne(left, right, normalize) {
221
- return new Operator('ne', [left, right], normalize);
222
- }
223
- gt(left, right, normalize) {
224
- return new Operator('gt', [left, right], normalize);
225
- }
226
- ge(left, right, normalize) {
227
- return new Operator('ge', [left, right], normalize);
228
- }
229
- lt(left, right, normalize) {
230
- return new Operator('lt', [left, right], normalize);
231
- }
232
- le(left, right, normalize) {
233
- return new Operator('le', [left, right], normalize);
234
- }
235
- and(left, right, normalize) {
236
- return new Operator('and', [left, right], normalize);
237
- }
238
- or(left, right, normalize) {
239
- return new Operator('or', [left, right], normalize);
240
- }
241
- not(value, normalize) {
242
- return new Operator('not', [value], normalize);
243
- }
244
- has(left, right, normalize) {
245
- return new Operator('has', [left, right], normalize);
246
- }
247
- in(left, right, normalize) {
248
- return new Operator('in', [left, right], normalize);
249
- }
250
- }
251
- export class ArithmeticOperators {
252
- add(left, right, normalize) {
253
- return new Operator('add', [left, right], normalize);
254
- }
255
- sub(left, right, normalize) {
256
- return new Operator('sub', [left, right], normalize);
257
- }
258
- mul(left, right, normalize) {
259
- return new Operator('mul', [left, right], normalize);
260
- }
261
- div(left, right, normalize) {
262
- return new Operator('div', [left, right], normalize);
263
- }
264
- mod(left, right, normalize) {
265
- return new Operator('mod', [left, right], normalize);
266
- }
267
- neg(value, normalize) {
268
- return new Operator('-', [value], normalize);
269
- }
270
- }
271
- export class Grouping {
272
- constructor(group) {
273
- this.group = group;
274
- }
275
- get [Symbol.toStringTag]() {
276
- return 'Grouping';
277
- }
278
- toJSON() {
279
- return {
280
- group: this.group.toJSON(),
281
- };
282
- }
283
- render({ aliases, escape, }) {
284
- return `(${render(this.group, { aliases })})`;
285
- }
286
- }
287
- export class Navigation {
288
- constructor(field, value) {
289
- this.field = field;
290
- this.value = value;
291
- }
292
- get [Symbol.toStringTag]() {
293
- return 'Navigation';
294
- }
295
- toJSON() {
296
- return {
297
- field: this.field,
298
- value: this.value,
299
- };
300
- }
301
- render({ aliases, escape, }) {
302
- return `${this.field}/${render(this.value, { aliases, escape })}`;
303
- }
304
- }
305
- export class GroupingAndNavigationOperators {
306
- grouping(value) {
307
- return new Grouping(value);
308
- }
309
- navigation(field, value) {
310
- return new Navigation(field, value);
311
- }
312
- }
313
- export class Lambda extends Operator {
314
- constructor(op, values, normalize = true) {
315
- super(op, values, normalize);
316
- this.op = op;
317
- this.values = values;
318
- this.normalize = normalize;
319
- }
320
- get [Symbol.toStringTag]() {
321
- return 'Lambda';
322
- }
323
- render({ aliases, escape, }) {
324
- let [left, right] = this.values;
325
- left = render(left, { aliases, escape });
326
- let alias = left.split('/').pop().toLowerCase();
327
- return `${left}/${this.op}(${alias}:${alias}/${render(right, {
328
- aliases,
329
- escape,
330
- })})`;
331
- }
332
- }
333
- export class LambdaOperators {
334
- any(field, value) {
335
- return new Lambda('any', [field, value]);
336
- }
337
- all(field, value) {
338
- return new Lambda('all', [field, value]);
339
- }
340
- }
341
- export class ODataOperators {
342
- }
343
- applyMixins(ODataOperators, [
344
- LogicalOperators,
345
- ArithmeticOperators,
346
- GroupingAndNavigationOperators,
347
- LambdaOperators,
348
- ]);
349
- export const operators = new ODataOperators();
350
- export class ODataFunctions {
351
- }
352
- applyMixins(ODataFunctions, [
353
- StringAndCollectionFunctions,
354
- CollectionFunctions,
355
- StringFunctions,
356
- DateAndTimeFunctions,
357
- ArithmeticFunctions,
358
- TypeFunctions,
359
- GeoFunctions,
360
- ConditionalFunctions,
361
- ]);
362
- export const functions = new ODataFunctions();
363
- export class ODataSyntax {
364
- }
365
- applyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);
366
- export const syntax = new ODataSyntax();
367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQW9CM0MsU0FBUyxXQUFXLENBQUMsV0FBZ0IsRUFBRSxZQUFtQjtJQUN4RCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDaEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM5RCxNQUFNLENBQUMsY0FBYyxDQUNuQixXQUFXLENBQUMsU0FBUyxFQUNyQixJQUFJLEVBQ0osTUFBTSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO2dCQUN2RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUN0QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FDYixLQUFVLEVBQ1YsRUFDRSxPQUFPLEVBQ1AsU0FBUyxFQUNULE1BQU0sTUFLSixFQUFFO0lBRU4sSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLEVBQUU7UUFDL0IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7S0FDdEQ7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUU7UUFDcEUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxN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LElBQVMsRUFBRSxLQUFVLEVBQUUsU0FBbUI7UUFDM0MsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELEVBQUUsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLFNBQW1CO1FBQzNDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxFQUFFLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxTQUFtQjtRQUMzQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsU0FBbUI7UUFDM0MsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELEVBQUUsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLFNBQW1CO1FBQzNDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFDRCxHQUFHLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxTQUFtQjtRQUM1QyxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsU0FBbUI7UUFDM0MsT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFD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QUFNLENBQUMsTUFBTSxNQUFNLEdBQXFCLElBQUksV0FBVyxFQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3JtYWxpemVWYWx1ZSB9IGZyb20gJy4vYnVpbGRlcic7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5Q3VzdG9tVHlwZSB9IGZyb20gJy4vYnVpbGRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyYWJsZSB7XG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgfSk6IHN0cmluZztcbiAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICB0b0pTT04oKTogYW55O1xufVxuXG5leHBvcnQgdHlwZSBGdW5jczxUPiA9IChcbiAgeDogT0RhdGFTeW50YXg8VD5cbikgPT4gRnVuY3Rpb248VD4gfCBPcGVyYXRvcjxUPiB8IEdyb3VwaW5nPFQ+IHwgTmF2aWdhdGlvbjxULCBhbnk+O1xuZXhwb3J0IHR5cGUgRmllbGQ8VD4gPSBrZXlvZiBUIHwgRnVuY3M8a2V5b2YgVD47XG5cbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKGRlcml2ZWRDdG9yOiBhbnksIGNvbnN0cnVjdG9yczogYW55W10pIHtcbiAgY29uc3RydWN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYmFzZUN0b3IucHJvdG90eXBlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGRlcml2ZWRDdG9yLnByb3RvdHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlQ3Rvci5wcm90b3R5cGUsIG5hbWUpIHx8XG4gICAgICAgICAgT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcihcbiAgdmFsdWU6IGFueSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgbm9ybWFsaXplLFxuICAgIGVzY2FwZSxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBub3JtYWxpemU/OiBib29sZWFuO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gIH0gPSB7fVxuKTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHJlbmRlcih2YWx1ZShzeW50YXgpLCB7IGFsaWFzZXMsIG5vcm1hbGl6ZSB9KTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAncmVuZGVyJyBpbiB2YWx1ZSkge1xuICAgIHJldHVybiByZW5kZXIodmFsdWUucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlIH0pLCB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgbm9ybWFsaXplLFxuICAgICAgZXNjYXBlLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemUgPyBub3JtYWxpemVWYWx1ZSh2YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUgfSkgOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHZhbHVlczogYW55W10sXG4gICAgcHJvdGVjdGVkIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWUsXG4gICAgcHJvdGVjdGVkIGVzY2FwZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdGdW5jdGlvbic7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXMsXG4gICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbZmllbGQsIC4uLnZhbHVlc10gPSB0aGlzLnZhbHVlcztcblxuICAgIGZpZWxkID0gcmVuZGVyKGZpZWxkKTtcbiAgICBsZXQgcGFyYW1zID0gW1xuICAgICAgZmllbGQsXG4gICAgICAuLi52YWx1ZXMubWFwKCh2KSA9PlxuICAgICAgICByZW5kZXIodiwgeyBhbGlhc2VzLCBlc2NhcGUsIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUgfSlcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSgke3BhcmFtcy5qb2luKCcsICcpfSlgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+IHtcbiAgY29uY2F0KGZpZWxkOiBULCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29uY2F0JywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBjb250YWlucyhmaWVsZDogVCwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NvbnRhaW5zJywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBlbmRzV2l0aChmaWVsZDogVCwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2VuZHN3aXRoJywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBpbmRleE9mKGZpZWxkOiBULCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaW5kZXhvZicsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgbGVuZ3RoKHZhbHVlOiBULCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbGVuZ3RoJywgW3ZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIHN0YXJ0c1dpdGgoZmllbGQ6IFQsIHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdzdGFydHN3aXRoJywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBzdWJTdHJpbmcoZmllbGQ6IFQsIHN0YXJ0OiBudW1iZXIsIGxlbmd0aD86IG51bWJlcikge1xuICAgIGxldCB2YWx1ZXMgPSBbZmllbGQsIHN0YXJ0XTtcbiAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlcy5wdXNoKGxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N1YnN0cmluZycsIHZhbHVlcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25GdW5jdGlvbnM8VD4ge1xuICBoYXNTdWJzZXQoczE6IFQsIHMyOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXQnLCBbczEsIHMyXSk7XG4gIH1cbiAgaGFzU3Vic2VxdWVuY2UoczE6IFQsIHMyOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXF1ZW5jZScsIFtzMSwgczJdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nRnVuY3Rpb25zPFQ+IHtcbiAgbWF0Y2hlc1BhdHRlcm4odmFsdWU6IFQgfCBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21hdGNoZXNQYXR0ZXJuJywgW3ZhbHVlLCBwYXR0ZXJuXSk7XG4gIH1cbiAgdG9Mb3dlcih2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvbG93ZXInLCBbdmFsdWVdKTtcbiAgfVxuICB0b1VwcGVyKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG91cHBlcicsIFt2YWx1ZV0pO1xuICB9XG4gIHRyaW0odmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0cmltJywgW3ZhbHVlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVBbmRUaW1lRnVuY3Rpb25zPFQ+IHtcbiAgZGF0ZSh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RhdGUnLCBbdmFsdWVdKTtcbiAgfVxuICBkYXkodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdkYXknLCBbdmFsdWVdKTtcbiAgfVxuICBmcmFjdGlvbmFsc2Vjb25kcyh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2ZyYWN0aW9uYWxzZWNvbmRzJywgW3ZhbHVlXSk7XG4gIH1cbiAgaG91cih2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hvdXInLCBbdmFsdWVdKTtcbiAgfVxuICBtYXhkYXRldGltZSh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21heGRhdGV0aW1lJywgW3ZhbHVlXSk7XG4gIH1cbiAgbWluZGF0ZXRpbWUodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtaW5kYXRldGltZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1pbnV0ZSh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21pbnV0ZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1vbnRoKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbW9udGgnLCBbdmFsdWVdKTtcbiAgfVxuICBub3coKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbm93JywgW10pO1xuICB9XG4gIHNlY29uZCh2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3NlY29uZCcsIFt2YWx1ZV0pO1xuICB9XG4gIHRpbWUodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0aW1lJywgW3ZhbHVlXSk7XG4gIH1cbiAgdG90YWxvZmZzZXRtaW51dGVzKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG90YWxvZmZzZXRtaW51dGVzJywgW3ZhbHVlXSk7XG4gIH1cbiAgdG90YWxzZWNvbmRzKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG90YWxzZWNvbmRzJywgW3ZhbHVlXSk7XG4gIH1cbiAgeWVhcih2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3llYXInLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY0Z1bmN0aW9uczxUPiB7XG4gIGNlaWxpbmcodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjZWlsaW5nJywgW3ZhbHVlXSk7XG4gIH1cbiAgZmxvb3IodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdmbG9vcicsIFt2YWx1ZV0pO1xuICB9XG4gIHJvdW5kKHZhbHVlOiBUIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigncm91bmQnLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwZUZ1bmN0aW9uczxUPiB7XG4gIGNhc3QodmFsdWU6IFQgfCBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjYXN0JywgW3ZhbHVlLCB0eXBlXSk7XG4gIH1cblxuICBpc29mKHZhbHVlOiBUIHwgc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaXNvZicsIFt2YWx1ZSwgdHlwZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZW9GdW5jdGlvbnM8VD4ge1xuICBnZW9EaXN0YW5jZSh2YWx1ZTogVCwgcG9pbnQ6IHN0cmluZywgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5kaXN0YW5jZScsIFt2YWx1ZSwgcG9pbnRdLCBub3JtYWxpemUpO1xuICB9XG4gIGdlb0ludGVyc2VjdHModmFsdWU6IFQsIHBvbHlnb246IHN0cmluZywgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5pbnRlcnNlY3RzJywgW3ZhbHVlLCBwb2x5Z29uXSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZW9MZW5ndGgobGluZTogVCwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5sZW5ndGgnLCBbbGluZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbmFsRnVuY3Rpb25zPFQ+IHtcbiAgY2FzZShjb25kaXRpb246IFQgfCBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjYXNlJywgW2NvbmRpdGlvbiwgdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlcmF0b3I8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG9wOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHZhbHVlczogYW55W10sXG4gICAgcHJvdGVjdGVkIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWVcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ09wZXJhdG9yJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU6IGJvb2xlYW47XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbbGVmdCwgcmlnaHRdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQsIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByaWdodCA9IEFycmF5LmlzQXJyYXkocmlnaHQpXG4gICAgICAgID8gYCgke3JpZ2h0XG4gICAgICAgICAgICAubWFwKCh2KSA9PlxuICAgICAgICAgICAgICByZW5kZXIodiwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbignLCcpfSlgXG4gICAgICAgIDogcmVuZGVyKHJpZ2h0LCB7XG4gICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICAgICAgICB9KTtcbiAgICAgIHJldHVybiBgJHtsZWZ0fSAke3RoaXMub3B9ICR7cmlnaHR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMub3B9KCR7bGVmdH0pYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naWNhbE9wZXJhdG9yczxUPiB7XG4gIGVxKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2VxJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBuZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCduZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ3QobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZ3QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGdlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2dlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBsdChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdsdCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbGUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbGUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGFuZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdhbmQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG9yKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ29yJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBub3QodmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3I8VD4oJ25vdCcsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaGFzKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2hhcycsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaW4obGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignaW4nLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcml0aG1ldGljT3BlcmF0b3JzPFQ+IHtcbiAgYWRkKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3I8VD4oJ2FkZCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgc3ViKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ3N1YicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbXVsKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ211bCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZGl2KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2RpdicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbW9kKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ21vZCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbmVnKHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCctJywgW3ZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3JvdXBpbmc8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGdyb3VwOiBSZW5kZXJhYmxlKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0dyb3VwaW5nJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAudG9KU09OKCksXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlOiBib29sZWFuO1xuICB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke3JlbmRlcih0aGlzLmdyb3VwLCB7IGFsaWFzZXMgfSl9KWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5hdmlnYXRpb248VCwgTj4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGZpZWxkOiBULCBwcm90ZWN0ZWQgdmFsdWU6IEZpZWxkPE4+KSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ05hdmlnYXRpb24nO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZTogYm9vbGVhbjtcbiAgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZmllbGR9LyR7cmVuZGVyKHRoaXMudmFsdWUsIHsgYWxpYXNlcywgZXNjYXBlIH0pfWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwaW5nQW5kTmF2aWdhdGlvbk9wZXJhdG9yczxUPiB7XG4gIGdyb3VwaW5nKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEdyb3VwaW5nKHZhbHVlKTtcbiAgfVxuXG4gIG5hdmlnYXRpb248Tj4oZmllbGQ6IFQsIHZhbHVlOiBGaWVsZDxOPikge1xuICAgIHJldHVybiBuZXcgTmF2aWdhdGlvbjxULCBOPihmaWVsZCwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGE8VD4gZXh0ZW5kcyBPcGVyYXRvcjxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBub3JtYWxpemU6IGJvb2xlYW4gPSB0cnVlXG4gICkge1xuICAgIHN1cGVyKG9wLCB2YWx1ZXMsIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdMYW1iZGEnO1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU6IGJvb2xlYW47XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbbGVmdCwgcmlnaHRdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQsIHsgYWxpYXNlcywgZXNjYXBlIH0pO1xuICAgIGxldCBhbGlhcyA9IGxlZnQuc3BsaXQoJy8nKS5wb3AoKS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBgJHtsZWZ0fS8ke3RoaXMub3B9KCR7YWxpYXN9OiR7YWxpYXN9LyR7cmVuZGVyKHJpZ2h0LCB7XG4gICAgICBhbGlhc2VzLFxuICAgICAgZXNjYXBlLFxuICAgIH0pfSlgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFPcGVyYXRvcnM8VD4ge1xuICBhbnkoZmllbGQ6IFQsIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYSgnYW55JywgW2ZpZWxkLCB2YWx1ZV0pO1xuICB9XG5cbiAgYWxsKGZpZWxkOiBULCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FsbCcsIFtmaWVsZCwgdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFPcGVyYXRvcnM8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFPcGVyYXRvcnM8VD5cbiAgZXh0ZW5kcyBMb2dpY2FsT3BlcmF0b3JzPFQ+LFxuICAgIEFyaXRobWV0aWNPcGVyYXRvcnM8VD4sXG4gICAgR3JvdXBpbmdBbmROYXZpZ2F0aW9uT3BlcmF0b3JzPFQ+LFxuICAgIExhbWJkYU9wZXJhdG9yczxUPiB7fVxuXG5hcHBseU1peGlucyhPRGF0YU9wZXJhdG9ycywgW1xuICBMb2dpY2FsT3BlcmF0b3JzLFxuICBBcml0aG1ldGljT3BlcmF0b3JzLFxuICBHcm91cGluZ0FuZE5hdmlnYXRpb25PcGVyYXRvcnMsXG4gIExhbWJkYU9wZXJhdG9ycyxcbl0pO1xuZXhwb3J0IGNvbnN0IG9wZXJhdG9yczogT0RhdGFPcGVyYXRvcnM8YW55PiA9IG5ldyBPRGF0YU9wZXJhdG9yczxhbnk+KCk7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUZ1bmN0aW9uczxUPiB7fVxuZXhwb3J0IGludGVyZmFjZSBPRGF0YUZ1bmN0aW9uczxUPlxuICBleHRlbmRzIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnM8VD4sXG4gICAgQ29sbGVjdGlvbkZ1bmN0aW9uczxUPixcbiAgICBTdHJpbmdGdW5jdGlvbnM8VD4sXG4gICAgRGF0ZUFuZFRpbWVGdW5jdGlvbnM8VD4sXG4gICAgQXJpdGhtZXRpY0Z1bmN0aW9uczxUPixcbiAgICBUeXBlRnVuY3Rpb25zPFQ+LFxuICAgIEdlb0Z1bmN0aW9uczxUPixcbiAgICBDb25kaXRpb25hbEZ1bmN0aW9uczxUPiB7fVxuXG5hcHBseU1peGlucyhPRGF0YUZ1bmN0aW9ucywgW1xuICBTdHJpbmdBbmRDb2xsZWN0aW9uRnVuY3Rpb25zLFxuICBDb2xsZWN0aW9uRnVuY3Rpb25zLFxuICBTdHJpbmdGdW5jdGlvbnMsXG4gIERhdGVBbmRUaW1lRnVuY3Rpb25zLFxuICBBcml0aG1ldGljRnVuY3Rpb25zLFxuICBUeXBlRnVuY3Rpb25zLFxuICBHZW9GdW5jdGlvbnMsXG4gIENvbmRpdGlvbmFsRnVuY3Rpb25zLFxuXSk7XG5leHBvcnQgY29uc3QgZnVuY3Rpb25zOiBPRGF0YUZ1bmN0aW9uczxhbnk+ID0gbmV3IE9EYXRhRnVuY3Rpb25zPGFueT4oKTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhU3ludGF4PFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhU3ludGF4PFQ+IGV4dGVuZHMgT0RhdGFPcGVyYXRvcnM8VD4sIE9EYXRhRnVuY3Rpb25zPFQ+IHt9XG5hcHBseU1peGlucyhPRGF0YVN5bnRheCwgW09EYXRhT3BlcmF0b3JzLCBPRGF0YUZ1bmN0aW9uc10pO1xuXG5leHBvcnQgY29uc3Qgc3ludGF4OiBPRGF0YVN5bnRheDxhbnk+ID0gbmV3IE9EYXRhU3ludGF4PGFueT4oKTtcbiJdfQ==
@@ -1,168 +0,0 @@
1
- import { $BATCH, $QUERY, ACCEPT, IF_MATCH_HEADER, IF_NONE_MATCH_HEADER, PREFER, TEXT_PLAIN, } from '../constants';
2
- import { Http } from '../utils';
3
- export class ODataRequest {
4
- constructor(init) {
5
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
6
- this._method = init.method;
7
- this.resource = init.resource;
8
- this.api = init.api;
9
- this.reportProgress = init.reportProgress;
10
- this.observe = init.observe;
11
- // Response Type
12
- this._responseType = init.responseType;
13
- // The Body
14
- this._body = init.body !== undefined ? init.body : null;
15
- if (this._body !== null)
16
- this._body = this.resource.serialize(this._body);
17
- this.withCredentials =
18
- init.withCredentials === undefined
19
- ? this.api.options.withCredentials
20
- : init.withCredentials;
21
- this.fetchPolicy = init.fetchPolicy || this.api.options.fetchPolicy;
22
- this.bodyQueryOptions =
23
- init.bodyQueryOptions || this.api.options.bodyQueryOptions;
24
- // The Path and Params from resource
25
- const [resourcePath, resourceParams] = this.resource.pathAndParams();
26
- this._path = resourcePath;
27
- //#region Headers
28
- const customHeaders = {};
29
- if (typeof init.etag === 'string') {
30
- if (this.api.options.etag.ifMatch &&
31
- ['PUT', 'PATCH', 'DELETE'].indexOf(this._method) !== -1)
32
- customHeaders[IF_MATCH_HEADER] = init.etag;
33
- else if (this.api.options.etag.ifNoneMatch &&
34
- ['GET'].indexOf(this._method) !== -1)
35
- customHeaders[IF_NONE_MATCH_HEADER] = init.etag;
36
- }
37
- const accept = [];
38
- // Metadata
39
- if (((_a = this.api.options.accept) === null || _a === void 0 ? void 0 : _a.metadata) !== undefined)
40
- accept.push(`odata.metadata=${(_b = this.api.options.accept) === null || _b === void 0 ? void 0 : _b.metadata}`);
41
- // IEEE754
42
- if (((_c = this.api.options.accept) === null || _c === void 0 ? void 0 : _c.ieee754Compatible) !== undefined)
43
- accept.push(`IEEE754Compatible=${(_d = this.api.options.accept) === null || _d === void 0 ? void 0 : _d.ieee754Compatible}`);
44
- // streaming
45
- if (((_e = this.api.options.accept) === null || _e === void 0 ? void 0 : _e.streaming) !== undefined)
46
- accept.push(`streaming=${(_f = this.api.options.accept) === null || _f === void 0 ? void 0 : _f.streaming}`);
47
- // ExponentialDecimals
48
- if (((_g = this.api.options.accept) === null || _g === void 0 ? void 0 : _g.exponentialDecimals) !== undefined)
49
- accept.push(`ExponentialDecimals=${(_h = this.api.options.accept) === null || _h === void 0 ? void 0 : _h.exponentialDecimals}`);
50
- if (accept.length > 0)
51
- customHeaders[ACCEPT] = [
52
- `application/json;${accept.join(';')}`,
53
- 'text/plain',
54
- '*/*',
55
- ];
56
- const prefer = [];
57
- // Return
58
- if (((_j = this.api.options.prefer) === null || _j === void 0 ? void 0 : _j.return) !== undefined &&
59
- ['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1)
60
- prefer.push(`return=${(_k = this.api.options.prefer) === null || _k === void 0 ? void 0 : _k.return}`);
61
- // MaxPageSize
62
- if (((_l = this.api.options.prefer) === null || _l === void 0 ? void 0 : _l.maxPageSize) !== undefined &&
63
- ['GET'].indexOf(this._method) !== -1)
64
- prefer.push(`odata.maxpagesize=${(_m = this.api.options.prefer) === null || _m === void 0 ? void 0 : _m.maxPageSize}`);
65
- // Annotations
66
- if (((_o = this.api.options.prefer) === null || _o === void 0 ? void 0 : _o.includeAnnotations) !== undefined &&
67
- ['GET'].indexOf(this._method) !== -1)
68
- prefer.push(`odata.include-annotations=${(_p = this.api.options.prefer) === null || _p === void 0 ? void 0 : _p.includeAnnotations}`);
69
- if (((_q = this.api.options.prefer) === null || _q === void 0 ? void 0 : _q.continueOnError) === true &&
70
- ['POST'].indexOf(this._method) !== -1)
71
- prefer.push(`odata.continue-on-error`);
72
- if (prefer.length > 0)
73
- customHeaders[PREFER] = prefer;
74
- this._headers = Http.mergeHttpHeaders(this.api.options.headers, customHeaders, init.headers || {});
75
- //#endregion
76
- //#region Params
77
- const customParams = {};
78
- if (['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1 &&
79
- '$select' in resourceParams) {
80
- customParams['$select'] = resourceParams['$select'];
81
- }
82
- if (['POST'].indexOf(this._method) !== -1 && '$expand' in resourceParams) {
83
- customParams['$expand'] = resourceParams['$expand'];
84
- }
85
- if (['GET'].indexOf(this._method) !== -1) {
86
- Object.assign(customParams, resourceParams);
87
- }
88
- const params = Http.mergeHttpParams(this.api.options.params, customParams, init.params || {});
89
- this._params =
90
- this._responseType === 'entity'
91
- ? Http.withoutHttpParams(params, [
92
- '$filter',
93
- '$orderby',
94
- '$count',
95
- '$skip',
96
- '$top',
97
- ])
98
- : params;
99
- //#endregion
100
- this._queryBody =
101
- this._method === 'GET' &&
102
- this.bodyQueryOptions.length > 0 &&
103
- this.bodyQueryOptions.some((name) => this._params.has(`$${name}`));
104
- }
105
- get responseType() {
106
- return this._responseType &&
107
- ['property', 'entity', 'entities'].indexOf(this._responseType) !== -1
108
- ? 'json'
109
- : this._responseType === 'value'
110
- ? 'text'
111
- : this._responseType;
112
- }
113
- get path() {
114
- return this._queryBody ? `${this._path}/${$QUERY}` : this._path;
115
- }
116
- get method() {
117
- return this._queryBody ? 'POST' : this._method;
118
- }
119
- get body() {
120
- if (this._queryBody) {
121
- let [, bodyParams] = Http.splitHttpParams(this._params, this.bodyQueryOptions.map((name) => `$${name}`));
122
- return bodyParams.toString();
123
- }
124
- else {
125
- return this._body;
126
- }
127
- }
128
- get params() {
129
- if (this._queryBody) {
130
- let [queryParams] = Http.splitHttpParams(this._params, this.bodyQueryOptions.map((name) => `$${name}`));
131
- return queryParams;
132
- }
133
- else {
134
- return this._params;
135
- }
136
- }
137
- get headers() {
138
- if (this._queryBody) {
139
- return Http.mergeHttpHeaders(this._headers, { CONTENT_TYPE: TEXT_PLAIN });
140
- }
141
- else {
142
- return this._headers;
143
- }
144
- }
145
- get pathWithParams() {
146
- let path = this._path;
147
- if (this._params.keys().length > 0) {
148
- path = `${path}?${this._params}`;
149
- }
150
- return path;
151
- }
152
- get url() {
153
- return `${this.api.serviceRootUrl}${this._path}`;
154
- }
155
- get urlWithParams() {
156
- return `${this.api.serviceRootUrl}${this.pathWithParams}`;
157
- }
158
- isBatch() {
159
- return this._path.endsWith($BATCH);
160
- }
161
- isFetch() {
162
- return ['GET'].indexOf(this._method) !== -1;
163
- }
164
- isMutate() {
165
- return ['PUT', 'PATCH', 'POST', 'DELETE'].indexOf(this._method) !== -1;
166
- }
167
- }
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sZUFBZSxFQUNmLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sVUFBVSxHQUNYLE1BQU0sY0FBYyxDQUFDO0FBR3RCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFLaEMsTUFBTSxPQUFPLFlBQVk7SUE2QnZCLFlBQVksSUEyQlg7O1FBQ0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUU5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU1QixnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXZDLFdBQVc7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUk7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxRSxJQUFJLENBQUMsZUFBZTtZQUNsQixJQUFJLENBQUMsZUFBZSxL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Q3RCO0lBQ0gsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLElBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgJEJBVENILFxuICAkUVVFUlksXG4gIEFDQ0VQVCxcbiAgSUZfTUFUQ0hfSEVBREVSLFxuICBJRl9OT05FX01BVENIX0hFQURFUixcbiAgUFJFRkVSLFxuICBURVhUX1BMQUlOLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IEh0dHAgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBPRGF0YVJlc291cmNlIH0gZnJvbSAnLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFSZXF1ZXN0PFQ+IHtcbiAgcmVhZG9ubHkgYXBpOiBPRGF0YUFwaTtcbiAgcmVhZG9ubHkgb2JzZXJ2ZTogJ2V2ZW50cycgfCAncmVzcG9uc2UnO1xuICByZWFkb25seSByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGJvZHlRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgcmVhZG9ubHkgZmV0Y2hQb2xpY3k6XG4gICAgfCAnY2FjaGUtZmlyc3QnXG4gICAgfCAnY2FjaGUtYW5kLW5ldHdvcmsnXG4gICAgfCAnbmV0d29yay1vbmx5J1xuICAgIHwgJ25vLWNhY2hlJ1xuICAgIHwgJ2NhY2hlLW9ubHknO1xuICByZWFkb25seSByZXNvdXJjZTogT0RhdGFSZXNvdXJjZTxUPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzcG9uc2VUeXBlPzpcbiAgICB8ICdhcnJheWJ1ZmZlcidcbiAgICB8ICdibG9iJ1xuICAgIHwgJ2pzb24nXG4gICAgfCAndGV4dCdcbiAgICB8ICd2YWx1ZSdcbiAgICB8ICdwcm9wZXJ0eSdcbiAgICB8ICdlbnRpdHknXG4gICAgfCAnZW50aXRpZXMnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRob2Q6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYm9keTogYW55IHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVhZGVyczogSHR0cEhlYWRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhcmFtczogSHR0cFBhcmFtcztcbiAgcHJpdmF0ZSByZWFkb25seSBfcGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9xdWVyeUJvZHk6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoaW5pdDoge1xuICAgIG1ldGhvZDogc3RyaW5nO1xuICAgIGFwaTogT0RhdGFBcGk7XG4gICAgcmVzb3VyY2U6IE9EYXRhUmVzb3VyY2U8VD47XG4gICAgYm9keTogYW55O1xuICAgIG9ic2VydmU6ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfTtcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xuICAgIHJlc3BvbnNlVHlwZT86XG4gICAgICB8ICdhcnJheWJ1ZmZlcidcbiAgICAgIHwgJ2Jsb2InXG4gICAgICB8ICdqc29uJ1xuICAgICAgfCAndGV4dCdcbiAgICAgIHwgJ3ZhbHVlJ1xuICAgICAgfCAncHJvcGVydHknXG4gICAgICB8ICdlbnRpdHknXG4gICAgICB8ICdlbnRpdGllcyc7XG4gICAgZmV0Y2hQb2xpY3k/OlxuICAgICAgfCAnY2FjaGUtZmlyc3QnXG4gICAgICB8ICdjYWNoZS1hbmQtbmV0d29yaydcbiAgICAgIHwgJ25ldHdvcmstb25seSdcbiAgICAgIHwgJ25vLWNhY2hlJ1xuICAgICAgfCAnY2FjaGUtb25seSc7XG4gICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25OYW1lc1tdO1xuICB9KSB7XG4gICAgdGhpcy5fbWV0aG9kID0gaW5pdC5tZXRob2Q7XG4gICAgdGhpcy5yZXNvdXJjZSA9IGluaXQucmVzb3VyY2U7XG5cbiAgICB0aGlzLmFwaSA9IGluaXQuYXBpO1xuICAgIHRoaXMucmVwb3J0UHJvZ3Jlc3MgPSBpbml0LnJlcG9ydFByb2dyZXNzO1xuICAgIHRoaXMub2JzZXJ2ZSA9IGluaXQub2JzZXJ2ZTtcblxuICAgIC8vIFJlc3BvbnNlIFR5cGVcbiAgICB0aGlzLl9yZXNwb25zZVR5cGUgPSBpbml0LnJlc3BvbnNlVHlwZTtcblxuICAgIC8vIFRoZSBCb2R5XG4gICAgdGhpcy5fYm9keSA9IGluaXQuYm9keSAhPT0gdW5kZWZpbmVkID8gaW5pdC5ib2R5IDogbnVsbDtcbiAgICBpZiAodGhpcy5fYm9keSAhPT0gbnVsbCkgdGhpcy5fYm9keSA9IHRoaXMucmVzb3VyY2Uuc2VyaWFsaXplKHRoaXMuX2JvZHkpO1xuXG4gICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPVxuICAgICAgaW5pdC53aXRoQ3JlZGVudGlhbHMgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMuYXBpLm9wdGlvbnMud2l0aENyZWRlbnRpYWxzXG4gICAgICAgIDogaW5pdC53aXRoQ3JlZGVudGlhbHM7XG4gICAgdGhpcy5mZXRjaFBvbGljeSA9IGluaXQuZmV0Y2hQb2xpY3kgfHwgdGhpcy5hcGkub3B0aW9ucy5mZXRjaFBvbGljeTtcbiAgICB0aGlzLmJvZHlRdWVyeU9wdGlvbnMgPVxuICAgICAgaW5pdC5ib2R5UXVlcnlPcHRpb25zIHx8IHRoaXMuYXBpLm9wdGlvbnMuYm9keVF1ZXJ5T3B0aW9ucztcblxuICAgIC8vIFRoZSBQYXRoIGFuZCBQYXJhbXMgZnJvbSByZXNvdXJjZVxuICAgIGNvbnN0IFtyZXNvdXJjZVBhdGgsIHJlc291cmNlUGFyYW1zXSA9IHRoaXMucmVzb3VyY2UucGF0aEFuZFBhcmFtcygpO1xuICAgIHRoaXMuX3BhdGggPSByZXNvdXJjZVBhdGg7XG5cbiAgICAvLyNyZWdpb24gSGVhZGVyc1xuICAgIGNvbnN0IGN1c3RvbUhlYWRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH0gPSB7fTtcbiAgICBpZiAodHlwZW9mIGluaXQuZXRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hcGkub3B0aW9ucy5ldGFnLmlmTWF0Y2ggJiZcbiAgICAgICAgWydQVVQnLCAnUEFUQ0gnLCAnREVMRVRFJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMVxuICAgICAgKVxuICAgICAgICBjdXN0b21IZWFkZXJzW0lGX01BVENIX0hFQURFUl0gPSBpbml0LmV0YWc7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5hcGkub3B0aW9ucy5ldGFnLmlmTm9uZU1hdGNoICYmXG4gICAgICAgIFsnR0VUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMVxuICAgICAgKVxuICAgICAgICBjdXN0b21IZWFkZXJzW0lGX05PTkVfTUFUQ0hfSEVBREVSXSA9IGluaXQuZXRhZztcbiAgICB9XG5cbiAgICBjb25zdCBhY2NlcHQgPSBbXTtcbiAgICAvLyBNZXRhZGF0YVxuICAgIGlmICh0aGlzLmFwaS5vcHRpb25zLmFjY2VwdD8ubWV0YWRhdGEgIT09IHVuZGVmaW5lZClcbiAgICAgIGFjY2VwdC5wdXNoKGBvZGF0YS5tZXRhZGF0YT0ke3RoaXMuYXBpLm9wdGlvbnMuYWNjZXB0Py5tZXRhZGF0YX1gKTtcbiAgICAvLyBJRUVFNzU0XG4gICAgaWYgKHRoaXMuYXBpLm9wdGlvbnMuYWNjZXB0Py5pZWVlNzU0Q29tcGF0aWJsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgYWNjZXB0LnB1c2goXG4gICAgICAgIGBJRUVFNzU0Q29tcGF0aWJsZT0ke3RoaXMuYXBpLm9wdGlvbnMuYWNjZXB0Py5pZWVlNzU0Q29tcGF0aWJsZX1gXG4gICAgICApO1xuICAgIC8vIHN0cmVhbWluZ1xuICAgIGlmICh0aGlzLmFwaS5vcHRpb25zLmFjY2VwdD8uc3RyZWFtaW5nICE9PSB1bmRlZmluZWQpXG4gICAgICBhY2NlcHQucHVzaChgc3RyZWFtaW5nPSR7dGhpcy5hcGkub3B0aW9ucy5hY2NlcHQ/LnN0cmVhbWluZ31gKTtcbiAgICAvLyBFeHBvbmVudGlhbERlY2ltYWxzXG4gICAgaWYgKHRoaXMuYXBpLm9wdGlvbnMuYWNjZXB0Py5leHBvbmVudGlhbERlY2ltYWxzICE9PSB1bmRlZmluZWQpXG4gICAgICBhY2NlcHQucHVzaChcbiAgICAgICAgYEV4cG9uZW50aWFsRGVjaW1hbHM9JHt0aGlzLmFwaS5vcHRpb25zLmFjY2VwdD8uZXhwb25lbnRpYWxEZWNpbWFsc31gXG4gICAgICApO1xuICAgIGlmIChhY2NlcHQubGVuZ3RoID4gMClcbiAgICAgIGN1c3RvbUhlYWRlcnNbQUNDRVBUXSA9IFtcbiAgICAgICAgYGFwcGxpY2F0aW9uL2pzb247JHthY2NlcHQuam9pbignOycpfWAsXG4gICAgICAgICd0ZXh0L3BsYWluJyxcbiAgICAgICAgJyovKicsXG4gICAgICBdO1xuXG4gICAgY29uc3QgcHJlZmVyID0gW107XG4gICAgLy8gUmV0dXJuXG4gICAgaWYgKFxuICAgICAgdGhpcy5hcGkub3B0aW9ucy5wcmVmZXI/LnJldHVybiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMVxuICAgIClcbiAgICAgIHByZWZlci5wdXNoKGByZXR1cm49JHt0aGlzLmFwaS5vcHRpb25zLnByZWZlcj8ucmV0dXJufWApO1xuICAgIC8vIE1heFBhZ2VTaXplXG4gICAgaWYgKFxuICAgICAgdGhpcy5hcGkub3B0aW9ucy5wcmVmZXI/Lm1heFBhZ2VTaXplICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIFsnR0VUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMVxuICAgIClcbiAgICAgIHByZWZlci5wdXNoKGBvZGF0YS5tYXhwYWdlc2l6ZT0ke3RoaXMuYXBpLm9wdGlvbnMucHJlZmVyPy5tYXhQYWdlU2l6ZX1gKTtcbiAgICAvLyBBbm5vdGF0aW9uc1xuICAgIGlmIChcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMucHJlZmVyPy5pbmNsdWRlQW5ub3RhdGlvbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgWydHRVQnXS5pbmRleE9mKHRoaXMuX21ldGhvZCkgIT09IC0xXG4gICAgKVxuICAgICAgcHJlZmVyLnB1c2goXG4gICAgICAgIGBvZGF0YS5pbmNsdWRlLWFubm90YXRpb25zPSR7dGhpcy5hcGkub3B0aW9ucy5wcmVmZXI/LmluY2x1ZGVBbm5vdGF0aW9uc31gXG4gICAgICApO1xuICAgIGlmIChcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMucHJlZmVyPy5jb250aW51ZU9uRXJyb3IgPT09IHRydWUgJiZcbiAgICAgIFsnUE9TVCddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTFcbiAgICApXG4gICAgICBwcmVmZXIucHVzaChgb2RhdGEuY29udGludWUtb24tZXJyb3JgKTtcbiAgICBpZiAocHJlZmVyLmxlbmd0aCA+IDApIGN1c3RvbUhlYWRlcnNbUFJFRkVSXSA9IHByZWZlcjtcbiAgICB0aGlzLl9oZWFkZXJzID0gSHR0cC5tZXJnZUh0dHBIZWFkZXJzKFxuICAgICAgdGhpcy5hcGkub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgY3VzdG9tSGVhZGVycyxcbiAgICAgIGluaXQuaGVhZGVycyB8fCB7fVxuICAgICk7XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICAvLyNyZWdpb24gUGFyYW1zXG4gICAgY29uc3QgY3VzdG9tUGFyYW1zOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9ID0ge307XG4gICAgaWYgKFxuICAgICAgWydQT1NUJywgJ1BVVCcsICdQQVRDSCddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTEgJiZcbiAgICAgICckc2VsZWN0JyBpbiByZXNvdXJjZVBhcmFtc1xuICAgICkge1xuICAgICAgY3VzdG9tUGFyYW1zWyckc2VsZWN0J10gPSByZXNvdXJjZVBhcmFtc1snJHNlbGVjdCddO1xuICAgIH1cbiAgICBpZiAoWydQT1NUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMSAmJiAnJGV4cGFuZCcgaW4gcmVzb3VyY2VQYXJhbXMpIHtcbiAgICAgIGN1c3RvbVBhcmFtc1snJGV4cGFuZCddID0gcmVzb3VyY2VQYXJhbXNbJyRleHBhbmQnXTtcbiAgICB9XG4gICAgaWYgKFsnR0VUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihjdXN0b21QYXJhbXMsIHJlc291cmNlUGFyYW1zKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXMgPSBIdHRwLm1lcmdlSHR0cFBhcmFtcyhcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMucGFyYW1zLFxuICAgICAgY3VzdG9tUGFyYW1zLFxuICAgICAgaW5pdC5wYXJhbXMgfHwge31cbiAgICApO1xuXG4gICAgdGhpcy5fcGFyYW1zID1cbiAgICAgIHRoaXMuX3Jlc3BvbnNlVHlwZSA9PT0gJ2VudGl0eSdcbiAgICAgICAgPyBIdHRwLndpdGhvdXRIdHRwUGFyYW1zKHBhcmFtcywgW1xuICAgICAgICAgICAgJyRmaWx0ZXInLFxuICAgICAgICAgICAgJyRvcmRlcmJ5JyxcbiAgICAgICAgICAgICckY291bnQnLFxuICAgICAgICAgICAgJyRza2lwJyxcbiAgICAgICAgICAgICckdG9wJyxcbiAgICAgICAgICBdKVxuICAgICAgICA6IHBhcmFtcztcbiAgICAvLyNlbmRyZWdpb25cblxuICAgIHRoaXMuX3F1ZXJ5Qm9keSA9XG4gICAgICB0aGlzLl9tZXRob2QgPT09ICdHRVQnICYmXG4gICAgICB0aGlzLmJvZHlRdWVyeU9wdGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5ib2R5UXVlcnlPcHRpb25zLnNvbWUoKG5hbWUpID0+IHRoaXMuX3BhcmFtcy5oYXMoYCQke25hbWV9YCkpO1xuICB9XG5cbiAgZ2V0IHJlc3BvbnNlVHlwZSgpOiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VUeXBlICYmXG4gICAgICBbJ3Byb3BlcnR5JywgJ2VudGl0eScsICdlbnRpdGllcyddLmluZGV4T2YodGhpcy5fcmVzcG9uc2VUeXBlKSAhPT0gLTFcbiAgICAgID8gJ2pzb24nXG4gICAgICA6IHRoaXMuX3Jlc3BvbnNlVHlwZSA9PT0gJ3ZhbHVlJ1xuICAgICAgPyAndGV4dCdcbiAgICAgIDogPCdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc+dGhpcy5fcmVzcG9uc2VUeXBlO1xuICB9XG5cbiAgZ2V0IHBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5Qm9keSA/IGAke3RoaXMuX3BhdGh9LyR7JFFVRVJZfWAgOiB0aGlzLl9wYXRoO1xuICB9XG5cbiAgZ2V0IG1ldGhvZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlCb2R5ID8gJ1BPU1QnIDogdGhpcy5fbWV0aG9kO1xuICB9XG5cbiAgZ2V0IGJvZHkoKSB7XG4gICAgaWYgKHRoaXMuX3F1ZXJ5Qm9keSkge1xuICAgICAgbGV0IFssIGJvZHlQYXJhbXNdID0gSHR0cC5zcGxpdEh0dHBQYXJhbXMoXG4gICAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgICAgdGhpcy5ib2R5UXVlcnlPcHRpb25zLm1hcCgobmFtZSkgPT4gYCQke25hbWV9YClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYm9keVBhcmFtcy50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fYm9keTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFyYW1zKCkge1xuICAgIGlmICh0aGlzLl9xdWVyeUJvZHkpIHtcbiAgICAgIGxldCBbcXVlcnlQYXJhbXNdID0gSHR0cC5zcGxpdEh0dHBQYXJhbXMoXG4gICAgICAgIHRoaXMuX3BhcmFtcyxcbiAgICAgICAgdGhpcy5ib2R5UXVlcnlPcHRpb25zLm1hcCgobmFtZSkgPT4gYCQke25hbWV9YClcbiAgICAgICk7XG4gICAgICByZXR1cm4gcXVlcnlQYXJhbXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJhbXM7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGhlYWRlcnMoKSB7XG4gICAgaWYgKHRoaXMuX3F1ZXJ5Qm9keSkge1xuICAgICAgcmV0dXJuIEh0dHAubWVyZ2VIdHRwSGVhZGVycyh0aGlzLl9oZWFkZXJzLCB7IENPTlRFTlRfVFlQRTogVEVYVF9QTEFJTiB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnM7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhdGhXaXRoUGFyYW1zKCkge1xuICAgIGxldCBwYXRoID0gdGhpcy5fcGF0aDtcbiAgICBpZiAodGhpcy5fcGFyYW1zLmtleXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXRoID0gYCR7cGF0aH0/JHt0aGlzLl9wYXJhbXN9YDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBnZXQgdXJsKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmFwaS5zZXJ2aWNlUm9vdFVybH0ke3RoaXMuX3BhdGh9YDtcbiAgfVxuXG4gIGdldCB1cmxXaXRoUGFyYW1zKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmFwaS5zZXJ2aWNlUm9vdFVybH0ke3RoaXMucGF0aFdpdGhQYXJhbXN9YDtcbiAgfVxuXG4gIGlzQmF0Y2goKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdGguZW5kc1dpdGgoJEJBVENIKTtcbiAgfVxuXG4gIGlzRmV0Y2goKSB7XG4gICAgcmV0dXJuIFsnR0VUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMTtcbiAgfVxuXG4gIGlzTXV0YXRlKCkge1xuICAgIHJldHVybiBbJ1BVVCcsICdQQVRDSCcsICdQT1NUJywgJ0RFTEVURSddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTE7XG4gIH1cbn1cbiJdfQ==