angular-odata 0.78.1 → 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 (224) hide show
  1. package/README.md +133 -62
  2. package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
  3. package/esm2020/lib/api.mjs +303 -0
  4. package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +12 -5
  5. package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
  6. package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +0 -0
  7. package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +1 -1
  8. package/esm2020/lib/client.mjs +271 -0
  9. package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +9 -3
  10. package/esm2020/lib/helper.mjs +268 -0
  11. package/esm2020/lib/index.mjs +19 -0
  12. package/esm2020/lib/models/collection.mjs +741 -0
  13. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  14. package/esm2020/lib/models/model.mjs +453 -0
  15. package/esm2020/lib/models/options.mjs +945 -0
  16. package/{esm2015/lib/module.js → esm2020/lib/module.mjs} +6 -6
  17. package/esm2020/lib/options.mjs +32 -0
  18. package/esm2020/lib/resources/index.mjs +7 -0
  19. package/esm2020/lib/resources/path/handlers.mjs +69 -0
  20. package/esm2020/lib/resources/path/index.mjs +3 -0
  21. package/esm2020/lib/resources/path/segments.mjs +124 -0
  22. package/esm2020/lib/resources/query/builder.mjs +590 -0
  23. package/esm2020/lib/resources/query/expressions.mjs +207 -0
  24. package/esm2020/lib/resources/query/handlers.mjs +186 -0
  25. package/esm2020/lib/resources/query/index.mjs +4 -0
  26. package/esm2020/lib/resources/query/options.mjs +103 -0
  27. package/esm2020/lib/resources/query/syntax.mjs +406 -0
  28. package/esm2020/lib/resources/request.mjs +167 -0
  29. package/esm2020/lib/resources/resource.mjs +326 -0
  30. package/esm2020/lib/resources/responses/annotations.mjs +119 -0
  31. package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
  32. package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
  33. package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
  34. package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
  35. package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
  36. package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
  37. package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
  38. package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
  39. package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
  40. package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
  41. package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
  42. package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
  43. package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
  44. package/esm2020/lib/resources/responses/metadata.mjs +547 -0
  45. package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +1 -1
  46. package/esm2020/lib/resources/responses/response.mjs +170 -0
  47. package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +1 -1
  48. package/esm2020/lib/resources/types/action.mjs +101 -0
  49. package/esm2020/lib/resources/types/batch.mjs +288 -0
  50. package/esm2020/lib/resources/types/count.mjs +27 -0
  51. package/esm2020/lib/resources/types/entity-set.mjs +94 -0
  52. package/esm2020/lib/resources/types/entity.mjs +106 -0
  53. package/esm2020/lib/resources/types/function.mjs +137 -0
  54. package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
  55. package/esm2020/lib/resources/types/media.mjs +41 -0
  56. package/esm2020/lib/resources/types/metadata.mjs +30 -0
  57. package/esm2020/lib/resources/types/navigation-property.mjs +226 -0
  58. package/esm2020/lib/resources/types/options.mjs +2 -0
  59. package/esm2020/lib/resources/types/property.mjs +183 -0
  60. package/esm2020/lib/resources/types/reference.mjs +85 -0
  61. package/esm2020/lib/resources/types/singleton.mjs +126 -0
  62. package/esm2020/lib/resources/types/value.mjs +41 -0
  63. package/esm2020/lib/schema/annotation.mjs +37 -0
  64. package/esm2020/lib/schema/callable.mjs +62 -0
  65. package/esm2020/lib/schema/element.mjs +51 -0
  66. package/esm2020/lib/schema/entity-container.mjs +9 -0
  67. package/esm2020/lib/schema/entity-set.mjs +9 -0
  68. package/esm2020/lib/schema/enum-type.mjs +71 -0
  69. package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +2 -1
  70. package/esm2020/lib/schema/parsers/callable.mjs +113 -0
  71. package/esm2020/lib/schema/parsers/edm.mjs +95 -0
  72. package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
  73. package/esm2020/lib/schema/parsers/index.mjs +5 -0
  74. package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
  75. package/esm2020/lib/schema/schema.mjs +61 -0
  76. package/esm2020/lib/schema/structured-type.mjs +198 -0
  77. package/esm2020/lib/services/base.mjs +29 -0
  78. package/esm2020/lib/services/entity-set.mjs +143 -0
  79. package/esm2020/lib/services/entity.mjs +12 -0
  80. package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
  81. package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
  82. package/esm2020/lib/services/singleton.mjs +48 -0
  83. package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
  84. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  85. package/esm2020/lib/types.mjs +37 -0
  86. package/esm2020/lib/utils/arraybuffers.mjs +46 -0
  87. package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
  88. package/esm2020/lib/utils/durations.mjs +40 -0
  89. package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
  90. package/esm2020/lib/utils/http.mjs +93 -0
  91. package/esm2020/lib/utils/index.mjs +10 -0
  92. package/esm2020/lib/utils/objects.mjs +195 -0
  93. package/esm2020/lib/utils/odata.mjs +22 -0
  94. package/esm2020/lib/utils/strings.mjs +20 -0
  95. package/esm2020/lib/utils/types.mjs +134 -0
  96. package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
  97. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  98. package/fesm2015/{angular-odata.js → angular-odata.mjs} +5068 -3943
  99. package/fesm2015/angular-odata.mjs.map +1 -0
  100. package/fesm2020/angular-odata.mjs +10274 -0
  101. package/fesm2020/angular-odata.mjs.map +1 -0
  102. package/lib/api.d.ts +17 -16
  103. package/lib/cache/cache.d.ts +2 -2
  104. package/lib/client.d.ts +93 -18
  105. package/lib/constants.d.ts +6 -2
  106. package/lib/helper.d.ts +3 -3
  107. package/lib/index.d.ts +0 -1
  108. package/lib/models/collection.d.ts +36 -47
  109. package/lib/models/model.d.ts +47 -40
  110. package/lib/models/options.d.ts +53 -52
  111. package/lib/options.d.ts +50 -2
  112. package/lib/resources/index.d.ts +2 -3
  113. package/lib/resources/path/handlers.d.ts +27 -0
  114. package/lib/resources/path/index.d.ts +2 -0
  115. package/lib/resources/{path-segments.d.ts → path/segments.d.ts} +4 -16
  116. package/lib/resources/{builder.d.ts → query/builder.d.ts} +12 -7
  117. package/lib/resources/query/expressions.d.ts +63 -0
  118. package/lib/resources/query/handlers.d.ts +89 -0
  119. package/lib/resources/query/index.d.ts +3 -0
  120. package/lib/resources/query/options.d.ts +38 -0
  121. package/lib/resources/query/syntax.d.ts +175 -0
  122. package/lib/resources/request.d.ts +8 -6
  123. package/lib/resources/resource.d.ts +49 -55
  124. package/lib/resources/responses/metadata.d.ts +1 -1
  125. package/lib/resources/responses/types.d.ts +1 -1
  126. package/lib/resources/types/action.d.ts +55 -69
  127. package/lib/resources/types/batch.d.ts +13 -8
  128. package/lib/resources/types/count.d.ts +16 -19
  129. package/lib/resources/types/entity-set.d.ts +24 -62
  130. package/lib/resources/types/entity.d.ts +35 -43
  131. package/lib/resources/types/function.d.ts +63 -71
  132. package/lib/resources/types/media.d.ts +20 -22
  133. package/lib/resources/types/metadata.d.ts +5 -7
  134. package/lib/resources/types/navigation-property.d.ts +100 -85
  135. package/lib/resources/types/options.d.ts +8 -8
  136. package/lib/resources/types/property.d.ts +63 -73
  137. package/lib/resources/types/reference.d.ts +72 -16
  138. package/lib/resources/types/singleton.d.ts +75 -43
  139. package/lib/resources/types/value.d.ts +18 -9
  140. package/lib/schema/annotation.d.ts +18 -0
  141. package/lib/schema/callable.d.ts +27 -11
  142. package/lib/schema/element.d.ts +39 -0
  143. package/lib/schema/entity-container.d.ts +3 -8
  144. package/lib/schema/entity-set.d.ts +3 -9
  145. package/lib/schema/enum-type.d.ts +41 -14
  146. package/lib/schema/index.d.ts +1 -0
  147. package/lib/{parsers → schema/parsers}/callable.d.ts +2 -2
  148. package/lib/schema/parsers/edm.d.ts +4 -0
  149. package/lib/{parsers → schema/parsers}/enum-type.d.ts +13 -7
  150. package/lib/{parsers → schema/parsers}/index.d.ts +0 -0
  151. package/lib/{parsers → schema/parsers}/structured-type.d.ts +14 -9
  152. package/lib/schema/schema.d.ts +6 -8
  153. package/lib/schema/structured-type.d.ts +97 -18
  154. package/lib/services/base.d.ts +12 -12
  155. package/lib/services/entity-set.d.ts +15 -12
  156. package/lib/services/entity.d.ts +4 -1
  157. package/lib/services/singleton.d.ts +6 -3
  158. package/lib/settings.d.ts +4 -4
  159. package/lib/types.d.ts +7 -3
  160. package/lib/utils/arraybuffers.d.ts +4 -0
  161. package/lib/{parsers/edm.d.ts → utils/durations.d.ts} +3 -3
  162. package/lib/utils/http.d.ts +9 -0
  163. package/lib/utils/index.d.ts +5 -2
  164. package/lib/utils/objects.d.ts +1 -1
  165. package/lib/utils/strings.d.ts +4 -0
  166. package/lib/utils/types.d.ts +2 -0
  167. package/package.json +21 -8
  168. package/bundles/angular-odata.umd.js +0 -10756
  169. package/bundles/angular-odata.umd.js.map +0 -1
  170. package/esm2015/lib/api.js +0 -251
  171. package/esm2015/lib/client.js +0 -197
  172. package/esm2015/lib/helper.js +0 -269
  173. package/esm2015/lib/index.js +0 -21
  174. package/esm2015/lib/models/collection.js +0 -660
  175. package/esm2015/lib/models/model.js +0 -421
  176. package/esm2015/lib/models/options.js +0 -889
  177. package/esm2015/lib/options.js +0 -31
  178. package/esm2015/lib/parsers/callable.js +0 -110
  179. package/esm2015/lib/parsers/edm.js +0 -310
  180. package/esm2015/lib/parsers/enum-type.js +0 -97
  181. package/esm2015/lib/parsers/index.js +0 -5
  182. package/esm2015/lib/parsers/structured-type.js +0 -394
  183. package/esm2015/lib/resources/builder.js +0 -537
  184. package/esm2015/lib/resources/index.js +0 -8
  185. package/esm2015/lib/resources/path-segments.js +0 -156
  186. package/esm2015/lib/resources/query-options.js +0 -157
  187. package/esm2015/lib/resources/request.js +0 -141
  188. package/esm2015/lib/resources/resource.js +0 -328
  189. package/esm2015/lib/resources/responses/annotations.js +0 -121
  190. package/esm2015/lib/resources/responses/metadata.js +0 -548
  191. package/esm2015/lib/resources/responses/response.js +0 -170
  192. package/esm2015/lib/resources/types/action.js +0 -146
  193. package/esm2015/lib/resources/types/batch.js +0 -330
  194. package/esm2015/lib/resources/types/count.js +0 -50
  195. package/esm2015/lib/resources/types/entity-set.js +0 -164
  196. package/esm2015/lib/resources/types/entity.js +0 -158
  197. package/esm2015/lib/resources/types/function.js +0 -166
  198. package/esm2015/lib/resources/types/media.js +0 -46
  199. package/esm2015/lib/resources/types/metadata.js +0 -36
  200. package/esm2015/lib/resources/types/navigation-property.js +0 -214
  201. package/esm2015/lib/resources/types/options.js +0 -2
  202. package/esm2015/lib/resources/types/property.js +0 -190
  203. package/esm2015/lib/resources/types/reference.js +0 -50
  204. package/esm2015/lib/resources/types/singleton.js +0 -147
  205. package/esm2015/lib/resources/types/value.js +0 -30
  206. package/esm2015/lib/schema/annotation.js +0 -7
  207. package/esm2015/lib/schema/callable.js +0 -50
  208. package/esm2015/lib/schema/entity-container.js +0 -17
  209. package/esm2015/lib/schema/entity-set.js +0 -23
  210. package/esm2015/lib/schema/enum-type.js +0 -68
  211. package/esm2015/lib/schema/schema.js +0 -55
  212. package/esm2015/lib/schema/structured-type.js +0 -107
  213. package/esm2015/lib/services/base.js +0 -23
  214. package/esm2015/lib/services/entity-set.js +0 -143
  215. package/esm2015/lib/services/entity.js +0 -10
  216. package/esm2015/lib/services/singleton.js +0 -46
  217. package/esm2015/lib/types.js +0 -37
  218. package/esm2015/lib/utils/http.js +0 -59
  219. package/esm2015/lib/utils/index.js +0 -7
  220. package/esm2015/lib/utils/objects.js +0 -140
  221. package/esm2015/lib/utils/odata.js +0 -21
  222. package/esm2015/lib/utils/types.js +0 -103
  223. package/fesm2015/angular-odata.js.map +0 -1
  224. package/lib/resources/query-options.d.ts +0 -57
@@ -1,156 +0,0 @@
1
- import { raw, buildPathAndQuery } from './builder';
2
- import { Types, Dates } from '../utils';
3
- import { PATH_SEPARATOR } from '../constants';
4
- import { PathSegmentNames } from '../types';
5
- function pathSegmentsBuilder(segment) {
6
- if (segment.name === PathSegmentNames.function) {
7
- let [path, params] = segment.parameters
8
- ? buildPathAndQuery({ func: { [segment.path]: segment.parameters } })
9
- : buildPathAndQuery({ func: segment.path });
10
- if (path.startsWith(PATH_SEPARATOR)) {
11
- path = path.slice(1);
12
- }
13
- return [path, params];
14
- }
15
- else {
16
- let key = segment.key;
17
- // HACK: Check guid string
18
- if (typeof key === 'string' &&
19
- /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(key)) {
20
- key = raw(key);
21
- }
22
- let [path, params] = key ? buildPathAndQuery({ key }) : ['', {}];
23
- return [segment.path + path, params];
24
- }
25
- }
26
- export class ODataPathSegments {
27
- constructor(segments) {
28
- this._segments = segments || [];
29
- }
30
- pathAndParams() {
31
- const result = this._segments.reduce((acc, segment) => {
32
- const [path, params] = pathSegmentsBuilder(segment);
33
- acc.paths.push(path);
34
- acc.params = Object.assign(acc.params, params);
35
- return acc;
36
- }, { paths: [], params: {} });
37
- return [result.paths.join(PATH_SEPARATOR), result.params];
38
- }
39
- types({ key = false } = {}) {
40
- return this.segments({ key })
41
- .map((s) => s.type())
42
- .filter((t) => t !== undefined);
43
- }
44
- keys(values) {
45
- const segments = this.segments({ key: true });
46
- if (values !== undefined) {
47
- segments.forEach((segment, index) => {
48
- const key = values[index];
49
- if (key === undefined) {
50
- segment.clearKey();
51
- }
52
- else {
53
- segment.key(key);
54
- }
55
- });
56
- }
57
- return segments.map((s) => s.key());
58
- }
59
- toString() {
60
- const [path, params] = this.pathAndParams();
61
- return (path +
62
- Object.entries(params)
63
- .filter(([, value]) => value)
64
- .map(([key, value]) => `${key}=${value}`)
65
- .join('&'));
66
- }
67
- toJSON() {
68
- return this._segments.map((segment) => {
69
- let json = { name: segment.name, path: segment.path };
70
- if (segment.type !== undefined)
71
- json.type = segment.type;
72
- if (segment.key !== undefined)
73
- json.key = Dates.isoStringToDate(JSON.parse(JSON.stringify(segment.key)));
74
- if (segment.parameters !== undefined)
75
- json.parameters = Dates.isoStringToDate(JSON.parse(JSON.stringify(segment.parameters)));
76
- return json;
77
- });
78
- }
79
- clone() {
80
- return new ODataPathSegments(this.toJSON());
81
- }
82
- find(predicate) {
83
- //Backward Find
84
- return [...this._segments].reverse().find(predicate);
85
- }
86
- segments({ key = false } = {}) {
87
- let segments = [...this._segments];
88
- if (key)
89
- segments = segments.filter((s) => [
90
- PathSegmentNames.entitySet,
91
- PathSegmentNames.navigationProperty,
92
- PathSegmentNames.property,
93
- ].indexOf(s.name) !== -1);
94
- return segments.map((s) => new SegmentHandler(s));
95
- }
96
- first({ key = false } = {}) {
97
- const segments = this.segments({ key });
98
- return segments.length > 0 ? segments[0] : undefined;
99
- }
100
- last({ key = false } = {}) {
101
- const segments = this.segments({ key });
102
- return segments.length > 0 ? segments[segments.length - 1] : undefined;
103
- }
104
- add(name, path) {
105
- const segment = { name, path };
106
- this._segments.push(segment);
107
- return new SegmentHandler(segment);
108
- }
109
- get(name) {
110
- let segment = this.find((s) => s.name === name);
111
- if (segment === undefined)
112
- throw Error(`No Segment for name ${name} was found`);
113
- return new SegmentHandler(segment);
114
- }
115
- }
116
- export class SegmentHandler {
117
- constructor(segment) {
118
- this.segment = segment;
119
- }
120
- get name() {
121
- return this.segment.name;
122
- }
123
- type(value) {
124
- if (value !== undefined)
125
- this.segment.type = value;
126
- return this.segment.type;
127
- }
128
- path(value) {
129
- if (value !== undefined)
130
- this.segment.path = value;
131
- return this.segment.path;
132
- }
133
- key(value) {
134
- if (value !== undefined)
135
- this.segment.key = value;
136
- return this.segment.key;
137
- }
138
- hasKey() {
139
- return !Types.isEmpty(this.segment.key);
140
- }
141
- clearKey() {
142
- delete this.segment.key;
143
- }
144
- parameters(value) {
145
- if (value !== undefined)
146
- this.segment.parameters = value;
147
- return this.segment.parameters;
148
- }
149
- hasParameters() {
150
- return !Types.isEmpty(this.segment.parameters);
151
- }
152
- clearParameters() {
153
- delete this.segment.parameters;
154
- }
155
- }
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC1zZWdtZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcGF0aC1zZWdtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRW5ELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBVTVDLFNBQVMsbUJBQW1CLENBQzFCLE9BQXFCO0lBRXJCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7UUFDOUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVTtZQUNyQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNyRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ25DLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN2QjtTQUFNO1FBQ0wsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN0QiwwQkFBMEI7UUFDMUIsSUFDRSxPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQ3ZCLCtFQUErRSxDQUFDLElBQUksQ0FDbEYsR0FBRyxDQUNKLEVBQ0Q7WUFDQSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3RDO0FBQ0gsQ0FBQztBQUVELE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsWUFBWSxRQUF5QjtRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDZixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUNELEVBQUUsS0FBSyxFQUFFLEVBQWMsRUFBRSxNQUFNLEVBQUUsRUFBNkIsRUFBRSxDQUNqRSxDQUFDO1FBQ0YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssS0FBd0IsRUFBRTtRQUMzQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNwQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQWEsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQXVDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM5QyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDbEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQixJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7b0JBQ3JCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDcEI7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDbEI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFnQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QyxPQUFPLENBQ0wsSUFBSTtZQUNKLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2lCQUNuQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQztpQkFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2lCQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3BDLElBQUksSUFBSSxHQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUztnQkFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDekQsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVM7Z0JBQzNCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN4QyxDQUFDO1lBQ0osSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVM7Z0JBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUMvQyxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLENBQUMsU0FBNkM7UUFDaEQsZUFBZTtRQUNmLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQXdCLEVBQUU7UUFDOUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUc7WUFDTCxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDeEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKO2dCQUNFLGdCQUFnQixDQUFDLFNBQVM7Z0JBQzFCLGdCQUFnQixDQUFDLGtCQUFrQjtnQkFDbkMsZ0JBQWdCLENBQUMsUUFBUTthQUMxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzNCLENBQUM7UUFDSixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQXdCLEVBQUU7UUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLEtBQXdCLEVBQUU7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxJQUFZO1FBQzVCLE1BQU0sT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBa0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxHQUFHLENBQUMsSUFBWTtRQUNkLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxPQUFPLEtBQUssU0FBUztZQUN2QixNQUFNLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxZQUFZLENBQUMsQ0FBQztRQUN2RCxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQW9CLE9BQXFCO1FBQXJCLFlBQU8sR0FBUCxPQUFPLENBQWM7SUFBRyxDQUFDO0lBQzdDLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksQ0FBQyxLQUFjO1FBQ2pCLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQWM7UUFDakIsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFDRCxHQUFHLENBQUksS0FBb0I7UUFDekIsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBbUIsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsTUFBTTtRQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFDRCxVQUFVLENBQUksS0FBUztRQUNyQixJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFlLENBQUM7SUFDdEMsQ0FBQztJQUNELGFBQWE7UUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFDRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYXcsIGJ1aWxkUGF0aEFuZFF1ZXJ5IH0gZnJvbSAnLi9idWlsZGVyJztcblxuaW1wb3J0IHsgVHlwZXMsIERhdGVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbXBvcnQgeyBQQVRIX1NFUEFSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFbnRpdHlLZXkgfSBmcm9tICcuL3Jlc291cmNlJztcbmltcG9ydCB7IFBhdGhTZWdtZW50TmFtZXMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIE9EYXRhU2VnbWVudCA9IHtcbiAgbmFtZTogUGF0aFNlZ21lbnROYW1lcztcbiAgcGF0aDogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICBrZXk/OiBhbnk7XG4gIHBhcmFtZXRlcnM/OiBhbnk7XG59O1xuXG5mdW5jdGlvbiBwYXRoU2VnbWVudHNCdWlsZGVyKFxuICBzZWdtZW50OiBPRGF0YVNlZ21lbnRcbik6IFtzdHJpbmcsIHsgW25hbWU6IHN0cmluZ106IGFueSB9XSB7XG4gIGlmIChzZWdtZW50Lm5hbWUgPT09IFBhdGhTZWdtZW50TmFtZXMuZnVuY3Rpb24pIHtcbiAgICBsZXQgW3BhdGgsIHBhcmFtc10gPSBzZWdtZW50LnBhcmFtZXRlcnNcbiAgICAgID8gYnVpbGRQYXRoQW5kUXVlcnkoeyBmdW5jOiB7IFtzZWdtZW50LnBhdGhdOiBzZWdtZW50LnBhcmFtZXRlcnMgfSB9KVxuICAgICAgOiBidWlsZFBhdGhBbmRRdWVyeSh7IGZ1bmM6IHNlZ21lbnQucGF0aCB9KTtcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKFBBVEhfU0VQQVJBVE9SKSkge1xuICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMSk7XG4gICAgfVxuICAgIHJldHVybiBbcGF0aCwgcGFyYW1zXTtcbiAgfSBlbHNlIHtcbiAgICBsZXQga2V5ID0gc2VnbWVudC5rZXk7XG4gICAgLy8gSEFDSzogQ2hlY2sgZ3VpZCBzdHJpbmdcbiAgICBpZiAoXG4gICAgICB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgL15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kLy50ZXN0KFxuICAgICAgICBrZXlcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGtleSA9IHJhdyhrZXkpO1xuICAgIH1cbiAgICBsZXQgW3BhdGgsIHBhcmFtc10gPSBrZXkgPyBidWlsZFBhdGhBbmRRdWVyeSh7IGtleSB9KSA6IFsnJywge31dO1xuICAgIHJldHVybiBbc2VnbWVudC5wYXRoICsgcGF0aCwgcGFyYW1zXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFQYXRoU2VnbWVudHMge1xuICBwcml2YXRlIF9zZWdtZW50czogT0RhdGFTZWdtZW50W107XG5cbiAgY29uc3RydWN0b3Ioc2VnbWVudHM/OiBPRGF0YVNlZ21lbnRbXSkge1xuICAgIHRoaXMuX3NlZ21lbnRzID0gc2VnbWVudHMgfHwgW107XG4gIH1cblxuICBwYXRoQW5kUGFyYW1zKCk6IFtzdHJpbmcsIHsgW25hbWU6IHN0cmluZ106IGFueSB9XSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fc2VnbWVudHMucmVkdWNlKFxuICAgICAgKGFjYywgc2VnbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBbcGF0aCwgcGFyYW1zXSA9IHBhdGhTZWdtZW50c0J1aWxkZXIoc2VnbWVudCk7XG4gICAgICAgIGFjYy5wYXRocy5wdXNoKHBhdGgpO1xuICAgICAgICBhY2MucGFyYW1zID0gT2JqZWN0LmFzc2lnbihhY2MucGFyYW1zLCBwYXJhbXMpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHsgcGF0aHM6IFtdIGFzIHN0cmluZ1tdLCBwYXJhbXM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IGFueSB9IH1cbiAgICApO1xuICAgIHJldHVybiBbcmVzdWx0LnBhdGhzLmpvaW4oUEFUSF9TRVBBUkFUT1IpLCByZXN1bHQucGFyYW1zXTtcbiAgfVxuXG4gIHR5cGVzKHsga2V5ID0gZmFsc2UgfTogeyBrZXk/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50cyh7IGtleSB9KVxuICAgICAgLm1hcCgocykgPT4gcy50eXBlKCkpXG4gICAgICAuZmlsdGVyKCh0KSA9PiB0ICE9PSB1bmRlZmluZWQpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAga2V5cyh2YWx1ZXM/OiAoRW50aXR5S2V5PGFueT4gfCB1bmRlZmluZWQpW10pIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuc2VnbWVudHMoeyBrZXk6IHRydWUgfSk7XG4gICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZWdtZW50cy5mb3JFYWNoKChzZWdtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSB2YWx1ZXNbaW5kZXhdO1xuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzZWdtZW50LmNsZWFyS2V5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudC5rZXkoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50cy5tYXAoKHMpID0+IHMua2V5KCkgYXMgRW50aXR5S2V5PGFueT4gfCB1bmRlZmluZWQpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICBjb25zdCBbcGF0aCwgcGFyYW1zXSA9IHRoaXMucGF0aEFuZFBhcmFtcygpO1xuICAgIHJldHVybiAoXG4gICAgICBwYXRoICtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHBhcmFtcylcbiAgICAgICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZSlcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YClcbiAgICAgICAgLmpvaW4oJyYnKVxuICAgICk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlZ21lbnRzLm1hcCgoc2VnbWVudCkgPT4ge1xuICAgICAgbGV0IGpzb24gPSA8YW55PnsgbmFtZTogc2VnbWVudC5uYW1lLCBwYXRoOiBzZWdtZW50LnBhdGggfTtcbiAgICAgIGlmIChzZWdtZW50LnR5cGUgIT09IHVuZGVmaW5lZCkganNvbi50eXBlID0gc2VnbWVudC50eXBlO1xuICAgICAgaWYgKHNlZ21lbnQua2V5ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGpzb24ua2V5ID0gRGF0ZXMuaXNvU3RyaW5nVG9EYXRlKFxuICAgICAgICAgIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2VnbWVudC5rZXkpKVxuICAgICAgICApO1xuICAgICAgaWYgKHNlZ21lbnQucGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBqc29uLnBhcmFtZXRlcnMgPSBEYXRlcy5pc29TdHJpbmdUb0RhdGUoXG4gICAgICAgICAgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWdtZW50LnBhcmFtZXRlcnMpKVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSk7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IE9EYXRhUGF0aFNlZ21lbnRzKHRoaXMudG9KU09OKCkpO1xuICB9XG5cbiAgZmluZChwcmVkaWNhdGU6IChzZWdtZW50OiBPRGF0YVNlZ21lbnQpID0+IGJvb2xlYW4pIHtcbiAgICAvL0JhY2t3YXJkIEZpbmRcbiAgICByZXR1cm4gWy4uLnRoaXMuX3NlZ21lbnRzXS5yZXZlcnNlKCkuZmluZChwcmVkaWNhdGUpO1xuICB9XG5cbiAgc2VnbWVudHMoeyBrZXkgPSBmYWxzZSB9OiB7IGtleT86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgbGV0IHNlZ21lbnRzID0gWy4uLnRoaXMuX3NlZ21lbnRzXTtcbiAgICBpZiAoa2V5KVxuICAgICAgc2VnbWVudHMgPSBzZWdtZW50cy5maWx0ZXIoXG4gICAgICAgIChzKSA9PlxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFBhdGhTZWdtZW50TmFtZXMuZW50aXR5U2V0LFxuICAgICAgICAgICAgUGF0aFNlZ21lbnROYW1lcy5uYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgICAgICAgICBQYXRoU2VnbWVudE5hbWVzLnByb3BlcnR5LFxuICAgICAgICAgIF0uaW5kZXhPZihzLm5hbWUpICE9PSAtMVxuICAgICAgKTtcbiAgICByZXR1cm4gc2VnbWVudHMubWFwKChzKSA9PiBuZXcgU2VnbWVudEhhbmRsZXIocykpO1xuICB9XG5cbiAgZmlyc3QoeyBrZXkgPSBmYWxzZSB9OiB7IGtleT86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnNlZ21lbnRzKHsga2V5IH0pO1xuICAgIHJldHVybiBzZWdtZW50cy5sZW5ndGggPiAwID8gc2VnbWVudHNbMF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBsYXN0KHsga2V5ID0gZmFsc2UgfTogeyBrZXk/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5zZWdtZW50cyh7IGtleSB9KTtcbiAgICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID4gMCA/IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgYWRkKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IHsgbmFtZSwgcGF0aCB9IGFzIE9EYXRhU2VnbWVudDtcbiAgICB0aGlzLl9zZWdtZW50cy5wdXNoKHNlZ21lbnQpO1xuICAgIHJldHVybiBuZXcgU2VnbWVudEhhbmRsZXIoc2VnbWVudCk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHNlZ21lbnQgPSB0aGlzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKHNlZ21lbnQgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IEVycm9yKGBObyBTZWdtZW50IGZvciBuYW1lICR7bmFtZX0gd2FzIGZvdW5kYCk7XG4gICAgcmV0dXJuIG5ldyBTZWdtZW50SGFuZGxlcihzZWdtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VnbWVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlZ21lbnQ6IE9EYXRhU2VnbWVudCkge31cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudC5uYW1lO1xuICB9XG4gIHR5cGUodmFsdWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgdGhpcy5zZWdtZW50LnR5cGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5zZWdtZW50LnR5cGU7XG4gIH1cbiAgcGF0aCh2YWx1ZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB0aGlzLnNlZ21lbnQucGF0aCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnQucGF0aDtcbiAgfVxuICBrZXk8VD4odmFsdWU/OiBFbnRpdHlLZXk8VD4pIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgdGhpcy5zZWdtZW50LmtleSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzLnNlZ21lbnQua2V5IGFzIEVudGl0eUtleTxUPjtcbiAgfVxuICBoYXNLZXkoKSB7XG4gICAgcmV0dXJuICFUeXBlcy5pc0VtcHR5KHRoaXMuc2VnbWVudC5rZXkpO1xuICB9XG4gIGNsZWFyS2V5KCkge1xuICAgIGRlbGV0ZSB0aGlzLnNlZ21lbnQua2V5O1xuICB9XG4gIHBhcmFtZXRlcnM8VD4odmFsdWU/OiBUKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHRoaXMuc2VnbWVudC5wYXJhbWV0ZXJzID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudC5wYXJhbWV0ZXJzIGFzIFQ7XG4gIH1cbiAgaGFzUGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gIVR5cGVzLmlzRW1wdHkodGhpcy5zZWdtZW50LnBhcmFtZXRlcnMpO1xuICB9XG4gIGNsZWFyUGFyYW1ldGVycygpIHtcbiAgICBkZWxldGUgdGhpcy5zZWdtZW50LnBhcmFtZXRlcnM7XG4gIH1cbn1cbiJdfQ==
@@ -1,157 +0,0 @@
1
- import { buildPathAndQuery, } from './builder';
2
- import { Dates, Types, Objects } from '../utils';
3
- import { QueryOptionNames } from '../types';
4
- export class ODataQueryOptions {
5
- constructor(options) {
6
- this.options = options || {};
7
- }
8
- // Params
9
- pathAndParams() {
10
- let options = [
11
- QueryOptionNames.select,
12
- QueryOptionNames.filter,
13
- QueryOptionNames.search,
14
- QueryOptionNames.transform,
15
- QueryOptionNames.orderBy,
16
- QueryOptionNames.top,
17
- QueryOptionNames.skip,
18
- QueryOptionNames.skiptoken,
19
- QueryOptionNames.expand,
20
- QueryOptionNames.format,
21
- ]
22
- .filter((key) => !Types.isEmpty(this.options[key]))
23
- .reduce((acc, key) => Object.assign(acc, { [key]: this.options[key] }), {});
24
- return buildPathAndQuery(options);
25
- }
26
- toString() {
27
- const [path, params] = this.pathAndParams();
28
- return (path +
29
- Object.entries(params)
30
- .filter(([, value]) => !Types.isEmpty(value))
31
- .map(([key, value]) => `${key}=${value}`)
32
- .join('&'));
33
- }
34
- toJSON() {
35
- return Dates.isoStringToDate(JSON.parse(JSON.stringify(this.options)));
36
- }
37
- toQueryArguments() {
38
- return {
39
- select: this.options[QueryOptionNames.select],
40
- expand: this.options[QueryOptionNames.expand],
41
- transform: this.options[QueryOptionNames.transform],
42
- search: this.options[QueryOptionNames.search],
43
- filter: this.options[QueryOptionNames.filter],
44
- orderBy: this.options[QueryOptionNames.orderBy],
45
- top: this.options[QueryOptionNames.top],
46
- skip: this.options[QueryOptionNames.skip],
47
- skiptoken: this.options[QueryOptionNames.skiptoken],
48
- };
49
- }
50
- clone() {
51
- return new ODataQueryOptions(this.toJSON());
52
- }
53
- // Option Handler
54
- option(name, opts) {
55
- if (opts !== undefined)
56
- this.options[name] = opts;
57
- return new OptionHandler(this.options, name);
58
- }
59
- // Query Options tools
60
- has(name) {
61
- return this.options[name] !== undefined;
62
- }
63
- remove(...names) {
64
- names.forEach((name) => this.option(name).clear());
65
- }
66
- keep(...names) {
67
- this.options = Object.keys(this.options)
68
- .filter((k) => names.indexOf(k) !== -1)
69
- .reduce((acc, k) => Object.assign(acc, { [k]: this.options[k] }), {});
70
- }
71
- // Clear
72
- clear() {
73
- this.options = {};
74
- }
75
- }
76
- export class OptionHandler {
77
- constructor(o, n) {
78
- this.o = o;
79
- this.n = n;
80
- }
81
- get name() {
82
- return this.n;
83
- }
84
- toJSON() {
85
- return this.o[this.n];
86
- }
87
- empty() {
88
- return Types.isEmpty(this.o[this.n]);
89
- }
90
- //#region Primitive Value
91
- value(v) {
92
- return (v !== undefined && (this.o[this.n] = v)) || this.o[this.n];
93
- }
94
- //#endregion
95
- //#region Array Value
96
- assertArray() {
97
- if (!Types.isArray(this.o[this.n]))
98
- this.o[this.n] = this.o[this.n] !== undefined ? [this.o[this.n]] : [];
99
- return this.o[this.n];
100
- }
101
- push(value) {
102
- this.assertArray().push(value);
103
- }
104
- remove(value) {
105
- this.o[this.n] = this.assertArray().filter((v) => v !== value);
106
- // If only one... down to value
107
- if (this.o[this.n].length === 1)
108
- this.o[this.n] = this.o[this.n][0];
109
- }
110
- at(index) {
111
- return this.assertArray()[index];
112
- }
113
- //#endregion
114
- //#region HashMap Value
115
- assertObject(create) {
116
- if (!Types.isArray(this.o[this.n]) && Types.isPlainObject(this.o[this.n])) {
117
- return this.o[this.n];
118
- }
119
- let arr = this.assertArray();
120
- let obj = arr.find((v) => Types.isPlainObject(v));
121
- if (!obj && create) {
122
- obj = {};
123
- arr.push(obj);
124
- }
125
- return obj;
126
- }
127
- set(path, value) {
128
- let obj = this.assertObject(true);
129
- Objects.set(obj, path, value);
130
- }
131
- get(path, def) {
132
- let obj = this.assertObject(false) || {};
133
- return Objects.get(obj, path, def);
134
- }
135
- unset(path) {
136
- let obj = this.assertObject(true);
137
- Objects.unset(obj, path);
138
- if (Types.isArray(this.o[this.n])) {
139
- this.o[this.n] = this.o[this.n].filter((v) => !Types.isEmpty(v));
140
- if (this.o[this.n].length === 1)
141
- this.o[this.n] = this.o[this.n][0];
142
- }
143
- }
144
- has(path) {
145
- let obj = this.assertObject(false) || {};
146
- return Objects.has(obj, path);
147
- }
148
- assign(values) {
149
- let obj = this.assertObject(true);
150
- return Objects.merge(obj, values);
151
- }
152
- //#endregion
153
- clear() {
154
- delete this.o[this.n];
155
- }
156
- }
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcXVlcnktb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEdBTWxCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFRLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFjNUMsTUFBTSxPQUFPLGlCQUFpQjtJQUc1QixZQUFZLE9BQWlDO1FBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsU0FBUztJQUNULGFBQWE7UUFDWCxJQUFJLE9BQU8sR0FBRztZQUNaLGdCQUFnQixDQUFDLE1BQU07WUFDdkIsZ0JBQWdCLENBQUMsTUFBTTtZQUN2QixnQkFBZ0IsQ0FBQyxNQUFNO1lBQ3ZCLGdCQUFnQixDQUFDLFNBQVM7WUFDMUIsZ0JBQWdCLENBQUMsT0FBTztZQUN4QixnQkFBZ0IsQ0FBQyxHQUFHO1lBQ3BCLGdCQUFnQixDQUFDLElBQUk7WUFDckIsZ0JBQWdCLENBQUMsU0FBUztZQUMxQixnQkFBZ0IsQ0FBQyxNQUFNO1lBQ3ZCLGdCQUFnQixDQUFDLE1BQU07U0FDeEI7YUFDRSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDbEQsTUFBTSxDQUNMLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUks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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYnVpbGRQYXRoQW5kUXVlcnksXG4gIEV4cGFuZCxcbiAgRmlsdGVyLFxuICBPcmRlckJ5LFxuICBTZWxlY3QsXG4gIFRyYW5zZm9ybSxcbn0gZnJvbSAnLi9idWlsZGVyJztcblxuaW1wb3J0IHsgRGF0ZXMsIFR5cGVzLCBVcmxzLCBPYmplY3RzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgUXVlcnlPcHRpb25OYW1lcyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgUXVlcnlBcmd1bWVudHM8VD4gPSB7XG4gIHNlbGVjdD86IFNlbGVjdDxUPjtcbiAgZXhwYW5kPzogRXhwYW5kPFQ+O1xuICB0cmFuc2Zvcm0/OiBUcmFuc2Zvcm08VD47XG4gIHNlYXJjaD86IHN0cmluZztcbiAgZmlsdGVyPzogRmlsdGVyO1xuICBvcmRlckJ5PzogT3JkZXJCeTxUPjtcbiAgdG9wPzogbnVtYmVyO1xuICBza2lwPzogbnVtYmVyO1xuICBza2lwdG9rZW4/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY2xhc3MgT0RhdGFRdWVyeU9wdGlvbnMge1xuICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB9XG5cbiAgLy8gUGFyYW1zXG4gIHBhdGhBbmRQYXJhbXMoKTogW3N0cmluZywgeyBbbmFtZTogc3RyaW5nXTogYW55IH1dIHtcbiAgICBsZXQgb3B0aW9ucyA9IFtcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLnNlYXJjaCxcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMudHJhbnNmb3JtLFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5LFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy50b3AsXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLnNraXAsXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLnNraXB0b2tlbixcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuZXhwYW5kLFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy5mb3JtYXQsXG4gICAgXVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiAhVHlwZXMuaXNFbXB0eSh0aGlzLm9wdGlvbnNba2V5XSkpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoYWNjLCBrZXkpID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrZXldOiB0aGlzLm9wdGlvbnNba2V5XSB9KSxcbiAgICAgICAge31cbiAgICAgICk7XG5cbiAgICByZXR1cm4gYnVpbGRQYXRoQW5kUXVlcnkob3B0aW9ucyk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtwYXRoLCBwYXJhbXNdID0gdGhpcy5wYXRoQW5kUGFyYW1zKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIHBhdGggK1xuICAgICAgT2JqZWN0LmVudHJpZXMocGFyYW1zKVxuICAgICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+ICFUeXBlcy5pc0VtcHR5KHZhbHVlKSlcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YClcbiAgICAgICAgLmpvaW4oJyYnKVxuICAgICk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIERhdGVzLmlzb1N0cmluZ1RvRGF0ZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9ucykpKTtcbiAgfVxuXG4gIHRvUXVlcnlBcmd1bWVudHM8VD4oKTogUXVlcnlBcmd1bWVudHM8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBzZWxlY3Q6IHRoaXMub3B0aW9uc1tRdWVyeU9wdGlvbk5hbWVzLnNlbGVjdF0sXG4gICAgICBleHBhbmQ6IHRoaXMub3B0aW9uc1tRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZF0sXG4gICAgICB0cmFuc2Zvcm06IHRoaXMub3B0aW9uc1tRdWVyeU9wdGlvbk5hbWVzLnRyYW5zZm9ybV0sXG4gICAgICBzZWFyY2g6IHRoaXMub3B0aW9uc1tRdWVyeU9wdGlvbk5hbWVzLnNlYXJjaF0sXG4gICAgICBmaWx0ZXI6IHRoaXMub3B0aW9uc1tRdWVyeU9wdGlvbk5hbWVzLmZpbHRlcl0sXG4gICAgICBvcmRlckJ5OiB0aGlzLm9wdGlvbnNbUXVlcnlPcHRpb25OYW1lcy5vcmRlckJ5XSxcbiAgICAgIHRvcDogdGhpcy5vcHRpb25zW1F1ZXJ5T3B0aW9uTmFtZXMudG9wXSxcbiAgICAgIHNraXA6IHRoaXMub3B0aW9uc1tRdWVyeU9wdGlvbk5hbWVzLnNraXBdLFxuICAgICAgc2tpcHRva2VuOiB0aGlzLm9wdGlvbnNbUXVlcnlPcHRpb25OYW1lcy5za2lwdG9rZW5dLFxuICAgIH0gYXMgUXVlcnlBcmd1bWVudHM8VD47XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IE9EYXRhUXVlcnlPcHRpb25zKHRoaXMudG9KU09OKCkpO1xuICB9XG5cbiAgLy8gT3B0aW9uIEhhbmRsZXJcbiAgb3B0aW9uPFQ+KG5hbWU6IFF1ZXJ5T3B0aW9uTmFtZXMsIG9wdHM/OiBUKSB7XG4gICAgaWYgKG9wdHMgIT09IHVuZGVmaW5lZCkgdGhpcy5vcHRpb25zW25hbWVdID0gb3B0cztcbiAgICByZXR1cm4gbmV3IE9wdGlvbkhhbmRsZXI8VD4odGhpcy5vcHRpb25zLCBuYW1lKTtcbiAgfVxuXG4gIC8vIFF1ZXJ5IE9wdGlvbnMgdG9vbHNcbiAgaGFzKG5hbWU6IFF1ZXJ5T3B0aW9uTmFtZXMpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zW25hbWVdICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICByZW1vdmUoLi4ubmFtZXM6IFF1ZXJ5T3B0aW9uTmFtZXNbXSkge1xuICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHRoaXMub3B0aW9uKG5hbWUpLmNsZWFyKCkpO1xuICB9XG5cbiAga2VlcCguLi5uYW1lczogUXVlcnlPcHRpb25OYW1lc1tdKSB7XG4gICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmtleXModGhpcy5vcHRpb25zKVxuICAgICAgLmZpbHRlcigoaykgPT4gbmFtZXMuaW5kZXhPZihrIGFzIFF1ZXJ5T3B0aW9uTmFtZXMpICE9PSAtMSlcbiAgICAgIC5yZWR1Y2UoKGFjYywgaykgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2tdOiB0aGlzLm9wdGlvbnNba10gfSksIHt9KTtcbiAgfVxuXG4gIC8vIENsZWFyXG4gIGNsZWFyKCkge1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcHRpb25IYW5kbGVyPFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgICBwcml2YXRlIG46IFF1ZXJ5T3B0aW9uTmFtZXNcbiAgKSB7fVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm47XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHRoaXMub1t0aGlzLm5dO1xuICB9XG5cbiAgZW1wdHkoKSB7XG4gICAgcmV0dXJuIFR5cGVzLmlzRW1wdHkodGhpcy5vW3RoaXMubl0pO1xuICB9XG5cbiAgLy8jcmVnaW9uIFByaW1pdGl2ZSBWYWx1ZVxuICB2YWx1ZSh2PzogYW55KSB7XG4gICAgcmV0dXJuICh2ICE9PSB1bmRlZmluZWQgJiYgKHRoaXMub1t0aGlzLm5dID0gdikpIHx8IHRoaXMub1t0aGlzLm5dO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBBcnJheSBWYWx1ZVxuICBwcml2YXRlIGFzc2VydEFycmF5KCk6IGFueVtdIHtcbiAgICBpZiAoIVR5cGVzLmlzQXJyYXkodGhpcy5vW3RoaXMubl0pKVxuICAgICAgdGhpcy5vW3RoaXMubl0gPSB0aGlzLm9bdGhpcy5uXSAhPT0gdW5kZWZpbmVkID8gW3RoaXMub1t0aGlzLm5dXSA6IFtdO1xuICAgIHJldHVybiB0aGlzLm9bdGhpcy5uXTtcbiAgfVxuXG4gIHB1c2godmFsdWU6IFQpIHtcbiAgICB0aGlzLmFzc2VydEFycmF5KCkucHVzaCh2YWx1ZSk7XG4gIH1cblxuICByZW1vdmUodmFsdWU6IFQpIHtcbiAgICB0aGlzLm9bdGhpcy5uXSA9IHRoaXMuYXNzZXJ0QXJyYXkoKS5maWx0ZXIoKHYpID0+IHYgIT09IHZhbHVlKTtcbiAgICAvLyBJZiBvbmx5IG9uZS4uLiBkb3duIHRvIHZhbHVlXG4gICAgaWYgKHRoaXMub1t0aGlzLm5dLmxlbmd0aCA9PT0gMSkgdGhpcy5vW3RoaXMubl0gPSB0aGlzLm9bdGhpcy5uXVswXTtcbiAgfVxuXG4gIGF0KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlcnRBcnJheSgpW2luZGV4XTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSGFzaE1hcCBWYWx1ZVxuICBwcml2YXRlIGFzc2VydE9iamVjdChjcmVhdGU6IGJvb2xlYW4pOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKCFUeXBlcy5pc0FycmF5KHRoaXMub1t0aGlzLm5dKSAmJiBUeXBlcy5pc1BsYWluT2JqZWN0KHRoaXMub1t0aGlzLm5dKSkge1xuICAgICAgcmV0dXJuIHRoaXMub1t0aGlzLm5dO1xuICAgIH1cbiAgICBsZXQgYXJyID0gdGhpcy5hc3NlcnRBcnJheSgpO1xuICAgIGxldCBvYmogPSBhcnIuZmluZCgodikgPT4gVHlwZXMuaXNQbGFpbk9iamVjdCh2KSk7XG4gICAgaWYgKCFvYmogJiYgY3JlYXRlKSB7XG4gICAgICBvYmogPSB7fTtcbiAgICAgIGFyci5wdXNoKG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBzZXQocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgbGV0IG9iaiA9IHRoaXMuYXNzZXJ0T2JqZWN0KHRydWUpO1xuICAgIE9iamVjdHMuc2V0KG9iaiwgcGF0aCwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0KHBhdGg6IHN0cmluZywgZGVmPzogYW55KTogYW55IHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QoZmFsc2UpIHx8IHt9O1xuICAgIHJldHVybiBPYmplY3RzLmdldChvYmosIHBhdGgsIGRlZik7XG4gIH1cblxuICB1bnNldChwYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgT2JqZWN0cy51bnNldChvYmosIHBhdGgpO1xuXG4gICAgaWYgKFR5cGVzLmlzQXJyYXkodGhpcy5vW3RoaXMubl0pKSB7XG4gICAgICB0aGlzLm9bdGhpcy5uXSA9IHRoaXMub1t0aGlzLm5dLmZpbHRlcigodjogYW55KSA9PiAhVHlwZXMuaXNFbXB0eSh2KSk7XG4gICAgICBpZiAodGhpcy5vW3RoaXMubl0ubGVuZ3RoID09PSAxKSB0aGlzLm9bdGhpcy5uXSA9IHRoaXMub1t0aGlzLm5dWzBdO1xuICAgIH1cbiAgfVxuXG4gIGhhcyhwYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QoZmFsc2UpIHx8IHt9O1xuICAgIHJldHVybiBPYmplY3RzLmhhcyhvYmosIHBhdGgpO1xuICB9XG5cbiAgYXNzaWduKHZhbHVlczogeyBbYXR0cjogc3RyaW5nXTogYW55IH0pIHtcbiAgICBsZXQgb2JqID0gdGhpcy5hc3NlcnRPYmplY3QodHJ1ZSk7XG4gICAgcmV0dXJuIE9iamVjdHMubWVyZ2Uob2JqLCB2YWx1ZXMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGNsZWFyKCkge1xuICAgIGRlbGV0ZSB0aGlzLm9bdGhpcy5uXTtcbiAgfVxufVxuIl19
@@ -1,141 +0,0 @@
1
- import { $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;
6
- this._method = init.method;
7
- this.resource = init.resource;
8
- this.api = init.api;
9
- this.reportProgress = init.reportProgress;
10
- this.responseType = init.responseType;
11
- this.observe = init.observe;
12
- // The Body
13
- this._body = init.body !== undefined ? init.body : null;
14
- if (this._body !== null)
15
- this._body = this.resource.serialize(this._body);
16
- this.withCredentials =
17
- init.withCredentials === undefined
18
- ? this.api.options.withCredentials
19
- : init.withCredentials;
20
- this.fetchPolicy = init.fetchPolicy || this.api.options.fetchPolicy;
21
- this.bodyQueryOptions =
22
- init.bodyQueryOptions || this.api.options.bodyQueryOptions;
23
- // The Path and Params from resource
24
- const [resourcePath, resourceParams] = this.resource.pathAndParams();
25
- this._path = resourcePath;
26
- //#region Headers
27
- const customHeaders = {};
28
- if (typeof init.etag === 'string') {
29
- if (this.api.options.etag.ifMatch &&
30
- ['PUT', 'PATCH', 'DELETE'].indexOf(this._method) !== -1)
31
- customHeaders[IF_MATCH_HEADER] = init.etag;
32
- else if (this.api.options.etag.ifNoneMatch &&
33
- ['GET'].indexOf(this._method) !== -1)
34
- customHeaders[IF_NONE_MATCH_HEADER] = init.etag;
35
- }
36
- const accept = [];
37
- // Metadata ?
38
- if (((_a = this.api.options.accept) === null || _a === void 0 ? void 0 : _a.metadata) !== undefined)
39
- accept.push(`odata.metadata=${(_b = this.api.options.accept) === null || _b === void 0 ? void 0 : _b.metadata}`);
40
- // IEEE754
41
- if (((_c = this.api.options.accept) === null || _c === void 0 ? void 0 : _c.ieee754Compatible) !== undefined)
42
- accept.push(`IEEE754Compatible=${(_d = this.api.options.accept) === null || _d === void 0 ? void 0 : _d.ieee754Compatible}`);
43
- if (accept.length > 0)
44
- customHeaders[ACCEPT] = [
45
- `application/json;${accept.join(';')}`,
46
- 'text/plain',
47
- '*/*',
48
- ];
49
- const prefer = [];
50
- // Return
51
- if (((_e = this.api.options.prefer) === null || _e === void 0 ? void 0 : _e.return) !== undefined &&
52
- ['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1)
53
- prefer.push(`return=${(_f = this.api.options.prefer) === null || _f === void 0 ? void 0 : _f.return}`);
54
- // MaxPageSize
55
- if (((_g = this.api.options.prefer) === null || _g === void 0 ? void 0 : _g.maxPageSize) !== undefined &&
56
- ['GET'].indexOf(this._method) !== -1)
57
- prefer.push(`odata.maxpagesize=${(_h = this.api.options.prefer) === null || _h === void 0 ? void 0 : _h.maxPageSize}`);
58
- // Annotations
59
- if (((_j = this.api.options.prefer) === null || _j === void 0 ? void 0 : _j.includeAnnotations) !== undefined &&
60
- ['GET'].indexOf(this._method) !== -1)
61
- prefer.push(`odata.include-annotations=${(_k = this.api.options.prefer) === null || _k === void 0 ? void 0 : _k.includeAnnotations}`);
62
- if (((_l = this.api.options.prefer) === null || _l === void 0 ? void 0 : _l.continueOnError) === true &&
63
- ['POST'].indexOf(this._method) !== -1)
64
- prefer.push(`odata.continue-on-error`);
65
- if (prefer.length > 0)
66
- customHeaders[PREFER] = prefer;
67
- this._headers = Http.mergeHttpHeaders(this.api.options.headers, customHeaders, init.headers || {});
68
- //#endregion
69
- //#region Params
70
- const customParams = {};
71
- if (['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1 &&
72
- '$select' in resourceParams) {
73
- customParams['$select'] = resourceParams['$select'];
74
- }
75
- if (['POST'].indexOf(this._method) !== -1 && '$expand' in resourceParams) {
76
- customParams['$expand'] = resourceParams['$expand'];
77
- }
78
- if (['GET'].indexOf(this._method) !== -1) {
79
- Object.assign(customParams, resourceParams);
80
- }
81
- this._params = Http.mergeHttpParams(this.api.options.params, customParams, init.params || {});
82
- //#endregion
83
- }
84
- get path() {
85
- return this.isBodyQueryOptions() ? `${this._path}/${$QUERY}` : this._path;
86
- }
87
- get method() {
88
- return this.isBodyQueryOptions() ? 'POST' : this._method;
89
- }
90
- get body() {
91
- if (this.isBodyQueryOptions()) {
92
- let [, bodyParams] = Http.splitHttpParams(this._params, this.bodyQueryOptions.map((name) => `$${name}`));
93
- return bodyParams.toString();
94
- }
95
- else {
96
- return this._body;
97
- }
98
- }
99
- get params() {
100
- if (this.isBodyQueryOptions()) {
101
- let [queryParams] = Http.splitHttpParams(this._params, this.bodyQueryOptions.map((name) => `$${name}`));
102
- return queryParams;
103
- }
104
- else {
105
- return this._params;
106
- }
107
- }
108
- get headers() {
109
- if (this.isBodyQueryOptions()) {
110
- return Http.mergeHttpHeaders(this._headers, { CONTENT_TYPE: TEXT_PLAIN });
111
- }
112
- else {
113
- return this._headers;
114
- }
115
- }
116
- get pathWithParams() {
117
- let path = this._path;
118
- if (this._params.keys().length > 0) {
119
- path = `${path}?${this._params}`;
120
- }
121
- return path;
122
- }
123
- get url() {
124
- return `${this.api.serviceRootUrl}${this._path}`;
125
- }
126
- get urlWithParams() {
127
- return `${this.api.serviceRootUrl}${this.pathWithParams}`;
128
- }
129
- isBodyQueryOptions() {
130
- return (this._method === 'GET' &&
131
- this.bodyQueryOptions.length > 0 &&
132
- this.bodyQueryOptions.some((name) => this._params.has(`$${name}`)));
133
- }
134
- isFetch() {
135
- return ['GET'].indexOf(this._method) !== -1;
136
- }
137
- isMutate() {
138
- return ['PUT', 'PATCH', 'POST', 'DELETE'].indexOf(this._method) !== -1;
139
- }
140
- }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixVQUFVLEdBQ1gsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdoQyxNQUFNLE9BQU8sWUFBWTtJQW9CdkIsWUFBWSxJQW1CWDs7UUFDQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRTlCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU1QixXQUFXO1FBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJO1lBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUUsSUFBSSxDQUFDLGVBQWU7WUFDbEIsSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTO2dCQUNoQyxDQUFDLENB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QUU7WUFDbEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksR0FBRztRQUNMLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLENBQ0wsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLO1lBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7XG4gICRRVUVSWSxcbiAgQUNDRVBULFxuICBJRl9NQVRDSF9IRUFERVIsXG4gIElGX05PTkVfTUFUQ0hfSEVBREVSLFxuICBQUkVGRVIsXG4gIFRFWFRfUExBSU4sXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgSHR0cCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuL3Jlc291cmNlJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhUmVxdWVzdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldGhvZDogc3RyaW5nO1xuICByZWFkb25seSBhcGk6IE9EYXRhQXBpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ib2R5OiBhbnkgfCBudWxsO1xuICByZWFkb25seSBvYnNlcnZlOiAnZXZlbnRzJyB8ICdyZXNwb25zZSc7XG4gIHJlYWRvbmx5IHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYm9keVF1ZXJ5T3B0aW9uczogUXVlcnlPcHRpb25OYW1lc1tdO1xuICByZWFkb25seSByZXNwb25zZVR5cGU/OiAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuICByZWFkb25seSBmZXRjaFBvbGljeTpcbiAgICB8ICdjYWNoZS1maXJzdCdcbiAgICB8ICdjYWNoZS1hbmQtbmV0d29yaydcbiAgICB8ICduZXR3b3JrLW9ubHknXG4gICAgfCAnbm8tY2FjaGUnXG4gICAgfCAnY2FjaGUtb25seSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlYWRlcnM6IEh0dHBIZWFkZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJhbXM6IEh0dHBQYXJhbXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2U6IE9EYXRhUmVzb3VyY2U8VD47XG5cbiAgY29uc3RydWN0b3IoaW5pdDoge1xuICAgIG1ldGhvZDogc3RyaW5nO1xuICAgIGFwaTogT0RhdGFBcGk7XG4gICAgcmVzb3VyY2U6IE9EYXRhUmVzb3VyY2U8VD47XG4gICAgYm9keTogYW55O1xuICAgIG9ic2VydmU6ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHsgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfTtcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXSB9O1xuICAgIHJlc3BvbnNlVHlwZT86ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG4gICAgZmV0Y2hQb2xpY3k/OlxuICAgICAgfCAnY2FjaGUtZmlyc3QnXG4gICAgICB8ICdjYWNoZS1hbmQtbmV0d29yaydcbiAgICAgIHwgJ25ldHdvcmstb25seSdcbiAgICAgIHwgJ25vLWNhY2hlJ1xuICAgICAgfCAnY2FjaGUtb25seSc7XG4gICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25OYW1lc1tdO1xuICB9KSB7XG4gICAgdGhpcy5fbWV0aG9kID0gaW5pdC5tZXRob2Q7XG4gICAgdGhpcy5yZXNvdXJjZSA9IGluaXQucmVzb3VyY2U7XG5cbiAgICB0aGlzLmFwaSA9IGluaXQuYXBpO1xuICAgIHRoaXMucmVwb3J0UHJvZ3Jlc3MgPSBpbml0LnJlcG9ydFByb2dyZXNzO1xuICAgIHRoaXMucmVzcG9uc2VUeXBlID0gaW5pdC5yZXNwb25zZVR5cGU7XG4gICAgdGhpcy5vYnNlcnZlID0gaW5pdC5vYnNlcnZlO1xuXG4gICAgLy8gVGhlIEJvZHlcbiAgICB0aGlzLl9ib2R5ID0gaW5pdC5ib2R5ICE9PSB1bmRlZmluZWQgPyBpbml0LmJvZHkgOiBudWxsO1xuICAgIGlmICh0aGlzLl9ib2R5ICE9PSBudWxsKSB0aGlzLl9ib2R5ID0gdGhpcy5yZXNvdXJjZS5zZXJpYWxpemUodGhpcy5fYm9keSk7XG5cbiAgICB0aGlzLndpdGhDcmVkZW50aWFscyA9XG4gICAgICBpbml0LndpdGhDcmVkZW50aWFscyA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5hcGkub3B0aW9ucy53aXRoQ3JlZGVudGlhbHNcbiAgICAgICAgOiBpbml0LndpdGhDcmVkZW50aWFscztcbiAgICB0aGlzLmZldGNoUG9saWN5ID0gaW5pdC5mZXRjaFBvbGljeSB8fCB0aGlzLmFwaS5vcHRpb25zLmZldGNoUG9saWN5O1xuICAgIHRoaXMuYm9keVF1ZXJ5T3B0aW9ucyA9XG4gICAgICBpbml0LmJvZHlRdWVyeU9wdGlvbnMgfHwgdGhpcy5hcGkub3B0aW9ucy5ib2R5UXVlcnlPcHRpb25zO1xuXG4gICAgLy8gVGhlIFBhdGggYW5kIFBhcmFtcyBmcm9tIHJlc291cmNlXG4gICAgY29uc3QgW3Jlc291cmNlUGF0aCwgcmVzb3VyY2VQYXJhbXNdID0gdGhpcy5yZXNvdXJjZS5wYXRoQW5kUGFyYW1zKCk7XG4gICAgdGhpcy5fcGF0aCA9IHJlc291cmNlUGF0aDtcblxuICAgIC8vI3JlZ2lvbiBIZWFkZXJzXG4gICAgY29uc3QgY3VzdG9tSGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSA9IHt9O1xuICAgIGlmICh0eXBlb2YgaW5pdC5ldGFnID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmFwaS5vcHRpb25zLmV0YWcuaWZNYXRjaCAmJlxuICAgICAgICBbJ1BVVCcsICdQQVRDSCcsICdERUxFVEUnXS5pbmRleE9mKHRoaXMuX21ldGhvZCkgIT09IC0xXG4gICAgICApXG4gICAgICAgIGN1c3RvbUhlYWRlcnNbSUZfTUFUQ0hfSEVBREVSXSA9IGluaXQuZXRhZztcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmFwaS5vcHRpb25zLmV0YWcuaWZOb25lTWF0Y2ggJiZcbiAgICAgICAgWydHRVQnXS5pbmRleE9mKHRoaXMuX21ldGhvZCkgIT09IC0xXG4gICAgICApXG4gICAgICAgIGN1c3RvbUhlYWRlcnNbSUZfTk9ORV9NQVRDSF9IRUFERVJdID0gaW5pdC5ldGFnO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY2VwdCA9IFtdO1xuICAgIC8vIE1ldGFkYXRhID9cbiAgICBpZiAodGhpcy5hcGkub3B0aW9ucy5hY2NlcHQ/Lm1ldGFkYXRhICE9PSB1bmRlZmluZWQpXG4gICAgICBhY2NlcHQucHVzaChgb2RhdGEubWV0YWRhdGE9JHt0aGlzLmFwaS5vcHRpb25zLmFjY2VwdD8ubWV0YWRhdGF9YCk7XG4gICAgLy8gSUVFRTc1NFxuICAgIGlmICh0aGlzLmFwaS5vcHRpb25zLmFjY2VwdD8uaWVlZTc1NENvbXBhdGlibGUgIT09IHVuZGVmaW5lZClcbiAgICAgIGFjY2VwdC5wdXNoKFxuICAgICAgICBgSUVFRTc1NENvbXBhdGlibGU9JHt0aGlzLmFwaS5vcHRpb25zLmFjY2VwdD8uaWVlZTc1NENvbXBhdGlibGV9YFxuICAgICAgKTtcbiAgICBpZiAoYWNjZXB0Lmxlbmd0aCA+IDApXG4gICAgICBjdXN0b21IZWFkZXJzW0FDQ0VQVF0gPSBbXG4gICAgICAgIGBhcHBsaWNhdGlvbi9qc29uOyR7YWNjZXB0LmpvaW4oJzsnKX1gLFxuICAgICAgICAndGV4dC9wbGFpbicsXG4gICAgICAgICcqLyonLFxuICAgICAgXTtcblxuICAgIGNvbnN0IHByZWZlciA9IFtdO1xuICAgIC8vIFJldHVyblxuICAgIGlmIChcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMucHJlZmVyPy5yZXR1cm4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgWydQT1NUJywgJ1BVVCcsICdQQVRDSCddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTFcbiAgICApXG4gICAgICBwcmVmZXIucHVzaChgcmV0dXJuPSR7dGhpcy5hcGkub3B0aW9ucy5wcmVmZXI/LnJldHVybn1gKTtcbiAgICAvLyBNYXhQYWdlU2l6ZVxuICAgIGlmIChcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMucHJlZmVyPy5tYXhQYWdlU2l6ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBbJ0dFVCddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTFcbiAgICApXG4gICAgICBwcmVmZXIucHVzaChgb2RhdGEubWF4cGFnZXNpemU9JHt0aGlzLmFwaS5vcHRpb25zLnByZWZlcj8ubWF4UGFnZVNpemV9YCk7XG4gICAgLy8gQW5ub3RhdGlvbnNcbiAgICBpZiAoXG4gICAgICB0aGlzLmFwaS5vcHRpb25zLnByZWZlcj8uaW5jbHVkZUFubm90YXRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIFsnR0VUJ10uaW5kZXhPZih0aGlzLl9tZXRob2QpICE9PSAtMVxuICAgIClcbiAgICAgIHByZWZlci5wdXNoKFxuICAgICAgICBgb2RhdGEuaW5jbHVkZS1hbm5vdGF0aW9ucz0ke3RoaXMuYXBpLm9wdGlvbnMucHJlZmVyPy5pbmNsdWRlQW5ub3RhdGlvbnN9YFxuICAgICAgKTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmFwaS5vcHRpb25zLnByZWZlcj8uY29udGludWVPbkVycm9yID09PSB0cnVlICYmXG4gICAgICBbJ1BPU1QnXS5pbmRleE9mKHRoaXMuX21ldGhvZCkgIT09IC0xXG4gICAgKVxuICAgICAgcHJlZmVyLnB1c2goYG9kYXRhLmNvbnRpbnVlLW9uLWVycm9yYCk7XG4gICAgaWYgKHByZWZlci5sZW5ndGggPiAwKSBjdXN0b21IZWFkZXJzW1BSRUZFUl0gPSBwcmVmZXI7XG4gICAgdGhpcy5faGVhZGVycyA9IEh0dHAubWVyZ2VIdHRwSGVhZGVycyhcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgIGN1c3RvbUhlYWRlcnMsXG4gICAgICBpbml0LmhlYWRlcnMgfHwge31cbiAgICApO1xuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIFBhcmFtc1xuICAgIGNvbnN0IGN1c3RvbVBhcmFtczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfSA9IHt9O1xuICAgIGlmIChcbiAgICAgIFsnUE9TVCcsICdQVVQnLCAnUEFUQ0gnXS5pbmRleE9mKHRoaXMuX21ldGhvZCkgIT09IC0xICYmXG4gICAgICAnJHNlbGVjdCcgaW4gcmVzb3VyY2VQYXJhbXNcbiAgICApIHtcbiAgICAgIGN1c3RvbVBhcmFtc1snJHNlbGVjdCddID0gcmVzb3VyY2VQYXJhbXNbJyRzZWxlY3QnXTtcbiAgICB9XG4gICAgaWYgKFsnUE9TVCddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTEgJiYgJyRleHBhbmQnIGluIHJlc291cmNlUGFyYW1zKSB7XG4gICAgICBjdXN0b21QYXJhbXNbJyRleHBhbmQnXSA9IHJlc291cmNlUGFyYW1zWyckZXhwYW5kJ107XG4gICAgfVxuICAgIGlmIChbJ0dFVCddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTEpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY3VzdG9tUGFyYW1zLCByZXNvdXJjZVBhcmFtcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGFyYW1zID0gSHR0cC5tZXJnZUh0dHBQYXJhbXMoXG4gICAgICB0aGlzLmFwaS5vcHRpb25zLnBhcmFtcyxcbiAgICAgIGN1c3RvbVBhcmFtcyxcbiAgICAgIGluaXQucGFyYW1zIHx8IHt9XG4gICAgKTtcbiAgICAvLyNlbmRyZWdpb25cbiAgfVxuXG4gIGdldCBwYXRoKCkge1xuICAgIHJldHVybiB0aGlzLmlzQm9keVF1ZXJ5T3B0aW9ucygpID8gYCR7dGhpcy5fcGF0aH0vJHskUVVFUll9YCA6IHRoaXMuX3BhdGg7XG4gIH1cblxuICBnZXQgbWV0aG9kKCkge1xuICAgIHJldHVybiB0aGlzLmlzQm9keVF1ZXJ5T3B0aW9ucygpID8gJ1BPU1QnIDogdGhpcy5fbWV0aG9kO1xuICB9XG5cbiAgZ2V0IGJvZHkoKSB7XG4gICAgaWYgKHRoaXMuaXNCb2R5UXVlcnlPcHRpb25zKCkpIHtcbiAgICAgIGxldCBbLCBib2R5UGFyYW1zXSA9IEh0dHAuc3BsaXRIdHRwUGFyYW1zKFxuICAgICAgICB0aGlzLl9wYXJhbXMsXG4gICAgICAgIHRoaXMuYm9keVF1ZXJ5T3B0aW9ucy5tYXAoKG5hbWUpID0+IGAkJHtuYW1lfWApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGJvZHlQYXJhbXMudG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2JvZHk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhcmFtcygpIHtcbiAgICBpZiAodGhpcy5pc0JvZHlRdWVyeU9wdGlvbnMoKSkge1xuICAgICAgbGV0IFtxdWVyeVBhcmFtc10gPSBIdHRwLnNwbGl0SHR0cFBhcmFtcyhcbiAgICAgICAgdGhpcy5fcGFyYW1zLFxuICAgICAgICB0aGlzLmJvZHlRdWVyeU9wdGlvbnMubWFwKChuYW1lKSA9PiBgJCR7bmFtZX1gKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBxdWVyeVBhcmFtcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3BhcmFtcztcbiAgICB9XG4gIH1cblxuICBnZXQgaGVhZGVycygpIHtcbiAgICBpZiAodGhpcy5pc0JvZHlRdWVyeU9wdGlvbnMoKSkge1xuICAgICAgcmV0dXJuIEh0dHAubWVyZ2VIdHRwSGVhZGVycyh0aGlzLl9oZWFkZXJzLCB7IENPTlRFTlRfVFlQRTogVEVYVF9QTEFJTiB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnM7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHBhdGhXaXRoUGFyYW1zKCkge1xuICAgIGxldCBwYXRoID0gdGhpcy5fcGF0aDtcbiAgICBpZiAodGhpcy5fcGFyYW1zLmtleXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXRoID0gYCR7cGF0aH0/JHt0aGlzLl9wYXJhbXN9YDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICBnZXQgdXJsKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmFwaS5zZXJ2aWNlUm9vdFVybH0ke3RoaXMuX3BhdGh9YDtcbiAgfVxuXG4gIGdldCB1cmxXaXRoUGFyYW1zKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmFwaS5zZXJ2aWNlUm9vdFVybH0ke3RoaXMucGF0aFdpdGhQYXJhbXN9YDtcbiAgfVxuXG4gIGlzQm9keVF1ZXJ5T3B0aW9ucygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fbWV0aG9kID09PSAnR0VUJyAmJlxuICAgICAgdGhpcy5ib2R5UXVlcnlPcHRpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuYm9keVF1ZXJ5T3B0aW9ucy5zb21lKChuYW1lKSA9PiB0aGlzLl9wYXJhbXMuaGFzKGAkJHtuYW1lfWApKVxuICAgICk7XG4gIH1cblxuICBpc0ZldGNoKCkge1xuICAgIHJldHVybiBbJ0dFVCddLmluZGV4T2YodGhpcy5fbWV0aG9kKSAhPT0gLTE7XG4gIH1cblxuICBpc011dGF0ZSgpIHtcbiAgICByZXR1cm4gWydQVVQnLCAnUEFUQ0gnLCAnUE9TVCcsICdERUxFVEUnXS5pbmRleE9mKHRoaXMuX21ldGhvZCkgIT09IC0xO1xuICB9XG59XG4iXX0=