angular-odata 0.80.0 → 0.99.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 (237) hide show
  1. package/README.md +69 -34
  2. package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
  3. package/esm2020/lib/api.mjs +303 -0
  4. package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +3 -3
  5. package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
  6. package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +1 -1
  7. package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +2 -2
  8. package/esm2020/lib/client.mjs +271 -0
  9. package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +8 -3
  10. package/esm2020/lib/helper.mjs +268 -0
  11. package/esm2020/lib/index.mjs +19 -0
  12. package/esm2020/lib/models/collection.mjs +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} +7 -7
  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/base.mjs +20 -0
  24. package/esm2020/lib/resources/query/expressions/compute.mjs +38 -0
  25. package/esm2020/lib/resources/query/expressions/expand.mjs +57 -0
  26. package/esm2020/lib/resources/query/expressions/filter.mjs +154 -0
  27. package/esm2020/lib/resources/query/expressions/index.mjs +7 -0
  28. package/esm2020/lib/resources/query/expressions/orderby.mjs +54 -0
  29. package/esm2020/lib/resources/query/expressions/search.mjs +113 -0
  30. package/esm2020/lib/resources/query/expressions/select.mjs +32 -0
  31. package/esm2020/lib/resources/query/expressions/syntax.mjs +371 -0
  32. package/esm2020/lib/resources/query/handlers.mjs +188 -0
  33. package/esm2020/lib/resources/query/index.mjs +4 -0
  34. package/esm2020/lib/resources/query/options.mjs +103 -0
  35. package/esm2020/lib/resources/request.mjs +167 -0
  36. package/esm2020/lib/resources/resource.mjs +326 -0
  37. package/esm2020/lib/resources/responses/annotations.mjs +119 -0
  38. package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
  39. package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
  40. package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
  41. package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
  42. package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
  43. package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
  44. package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
  45. package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
  46. package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
  47. package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
  48. package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
  49. package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
  50. package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
  51. package/esm2020/lib/resources/responses/metadata.mjs +547 -0
  52. package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +0 -0
  53. package/{esm2015/lib/resources/responses/response.js → esm2020/lib/resources/responses/response.mjs} +0 -0
  54. package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +0 -0
  55. package/esm2020/lib/resources/types/action.mjs +101 -0
  56. package/esm2020/lib/resources/types/batch.mjs +309 -0
  57. package/esm2020/lib/resources/types/count.mjs +27 -0
  58. package/esm2020/lib/resources/types/entity-set.mjs +94 -0
  59. package/esm2020/lib/resources/types/entity.mjs +106 -0
  60. package/esm2020/lib/resources/types/function.mjs +137 -0
  61. package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
  62. package/esm2020/lib/resources/types/media.mjs +41 -0
  63. package/esm2020/lib/resources/types/metadata.mjs +30 -0
  64. package/esm2020/lib/resources/types/navigation-property.mjs +226 -0
  65. package/esm2020/lib/resources/types/options.mjs +2 -0
  66. package/esm2020/lib/resources/types/property.mjs +183 -0
  67. package/esm2020/lib/resources/types/reference.mjs +85 -0
  68. package/esm2020/lib/resources/types/singleton.mjs +126 -0
  69. package/esm2020/lib/resources/types/value.mjs +41 -0
  70. package/esm2020/lib/schema/annotation.mjs +37 -0
  71. package/esm2020/lib/schema/callable.mjs +62 -0
  72. package/esm2020/lib/schema/element.mjs +51 -0
  73. package/esm2020/lib/schema/entity-container.mjs +9 -0
  74. package/esm2020/lib/schema/entity-set.mjs +9 -0
  75. package/esm2020/lib/schema/enum-type.mjs +71 -0
  76. package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +2 -1
  77. package/esm2020/lib/schema/parsers/callable.mjs +113 -0
  78. package/esm2020/lib/schema/parsers/edm.mjs +95 -0
  79. package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
  80. package/esm2020/lib/schema/parsers/index.mjs +5 -0
  81. package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
  82. package/esm2020/lib/schema/schema.mjs +61 -0
  83. package/esm2020/lib/schema/structured-type.mjs +198 -0
  84. package/esm2020/lib/services/base.mjs +29 -0
  85. package/esm2020/lib/services/entity-set.mjs +143 -0
  86. package/esm2020/lib/services/entity.mjs +12 -0
  87. package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
  88. package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
  89. package/esm2020/lib/services/singleton.mjs +48 -0
  90. package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
  91. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  92. package/esm2020/lib/types.mjs +37 -0
  93. package/esm2020/lib/utils/arraybuffers.mjs +46 -0
  94. package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
  95. package/esm2020/lib/utils/durations.mjs +40 -0
  96. package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
  97. package/esm2020/lib/utils/http.mjs +93 -0
  98. package/esm2020/lib/utils/index.mjs +10 -0
  99. package/esm2020/lib/utils/objects.mjs +195 -0
  100. package/esm2020/lib/utils/odata.mjs +22 -0
  101. package/esm2020/lib/utils/strings.mjs +20 -0
  102. package/esm2020/lib/utils/types.mjs +134 -0
  103. package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
  104. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  105. package/fesm2015/{angular-odata.js → angular-odata.mjs} +4508 -3427
  106. package/fesm2015/angular-odata.mjs.map +1 -0
  107. package/fesm2020/angular-odata.mjs +10510 -0
  108. package/fesm2020/angular-odata.mjs.map +1 -0
  109. package/lib/api.d.ts +14 -14
  110. package/lib/cache/cache.d.ts +2 -2
  111. package/lib/cache/storage.d.ts +1 -1
  112. package/lib/client.d.ts +60 -9
  113. package/lib/constants.d.ts +5 -2
  114. package/lib/index.d.ts +0 -1
  115. package/lib/models/collection.d.ts +30 -42
  116. package/lib/models/model.d.ts +37 -30
  117. package/lib/models/options.d.ts +30 -38
  118. package/lib/module.d.ts +1 -1
  119. package/lib/options.d.ts +47 -0
  120. package/lib/resources/index.d.ts +2 -3
  121. package/lib/resources/path/handlers.d.ts +27 -0
  122. package/lib/resources/path/index.d.ts +2 -0
  123. package/lib/resources/{path-segments.d.ts → path/segments.d.ts} +4 -16
  124. package/lib/resources/{builder.d.ts → query/builder.d.ts} +12 -7
  125. package/lib/resources/query/expressions/base.d.ts +19 -0
  126. package/lib/resources/query/expressions/compute.d.ts +26 -0
  127. package/lib/resources/query/expressions/expand.d.ts +40 -0
  128. package/lib/resources/query/expressions/filter.d.ts +58 -0
  129. package/lib/resources/query/expressions/index.d.ts +6 -0
  130. package/lib/resources/query/expressions/orderby.d.ts +37 -0
  131. package/lib/resources/query/expressions/search.d.ts +47 -0
  132. package/lib/resources/query/expressions/select.d.ts +21 -0
  133. package/lib/resources/query/expressions/syntax.d.ts +177 -0
  134. package/lib/resources/query/handlers.d.ts +104 -0
  135. package/lib/resources/query/index.d.ts +3 -0
  136. package/lib/resources/query/options.d.ts +38 -0
  137. package/lib/resources/request.d.ts +4 -3
  138. package/lib/resources/resource.d.ts +42 -48
  139. package/lib/resources/types/action.d.ts +14 -61
  140. package/lib/resources/types/batch.d.ts +16 -3
  141. package/lib/resources/types/count.d.ts +9 -17
  142. package/lib/resources/types/entity-set.d.ts +12 -51
  143. package/lib/resources/types/entity.d.ts +13 -31
  144. package/lib/resources/types/function.d.ts +13 -60
  145. package/lib/resources/types/media.d.ts +9 -8
  146. package/lib/resources/types/metadata.d.ts +3 -5
  147. package/lib/resources/types/navigation-property.d.ts +74 -65
  148. package/lib/resources/types/options.d.ts +1 -1
  149. package/lib/resources/types/property.d.ts +49 -57
  150. package/lib/resources/types/reference.d.ts +65 -9
  151. package/lib/resources/types/singleton.d.ts +53 -31
  152. package/lib/resources/types/value.d.ts +16 -7
  153. package/lib/schema/annotation.d.ts +18 -0
  154. package/lib/schema/callable.d.ts +4 -20
  155. package/lib/schema/element.d.ts +39 -0
  156. package/lib/schema/entity-container.d.ts +2 -12
  157. package/lib/schema/entity-set.d.ts +2 -18
  158. package/lib/schema/enum-type.d.ts +19 -25
  159. package/lib/schema/index.d.ts +1 -0
  160. package/lib/{parsers → schema/parsers}/callable.d.ts +2 -2
  161. package/lib/schema/parsers/edm.d.ts +4 -0
  162. package/lib/{parsers → schema/parsers}/enum-type.d.ts +12 -11
  163. package/lib/{parsers → schema/parsers}/index.d.ts +0 -0
  164. package/lib/{parsers → schema/parsers}/structured-type.d.ts +12 -12
  165. package/lib/schema/schema.d.ts +3 -10
  166. package/lib/schema/structured-type.d.ts +65 -27
  167. package/lib/services/base.d.ts +2 -2
  168. package/lib/services/entity-set.d.ts +5 -2
  169. package/lib/services/entity.d.ts +4 -1
  170. package/lib/services/singleton.d.ts +5 -2
  171. package/lib/settings.d.ts +5 -5
  172. package/lib/types.d.ts +1 -0
  173. package/lib/utils/arraybuffers.d.ts +4 -0
  174. package/lib/{parsers/edm.d.ts → utils/durations.d.ts} +3 -3
  175. package/lib/utils/http.d.ts +1 -0
  176. package/lib/utils/index.d.ts +1 -0
  177. package/lib/utils/objects.d.ts +1 -0
  178. package/lib/utils/strings.d.ts +1 -0
  179. package/lib/utils/types.d.ts +2 -0
  180. package/package.json +21 -8
  181. package/bundles/angular-odata.umd.js +0 -11048
  182. package/bundles/angular-odata.umd.js.map +0 -1
  183. package/esm2015/lib/api.js +0 -297
  184. package/esm2015/lib/client.js +0 -221
  185. package/esm2015/lib/helper.js +0 -271
  186. package/esm2015/lib/index.js +0 -21
  187. package/esm2015/lib/models/collection.js +0 -687
  188. package/esm2015/lib/models/model.js +0 -423
  189. package/esm2015/lib/models/options.js +0 -909
  190. package/esm2015/lib/options.js +0 -31
  191. package/esm2015/lib/parsers/callable.js +0 -107
  192. package/esm2015/lib/parsers/edm.js +0 -192
  193. package/esm2015/lib/parsers/enum-type.js +0 -102
  194. package/esm2015/lib/parsers/index.js +0 -5
  195. package/esm2015/lib/parsers/structured-type.js +0 -389
  196. package/esm2015/lib/resources/builder.js +0 -537
  197. package/esm2015/lib/resources/index.js +0 -8
  198. package/esm2015/lib/resources/path-segments.js +0 -156
  199. package/esm2015/lib/resources/query-options.js +0 -157
  200. package/esm2015/lib/resources/request.js +0 -149
  201. package/esm2015/lib/resources/resource.js +0 -337
  202. package/esm2015/lib/resources/responses/annotations.js +0 -121
  203. package/esm2015/lib/resources/responses/metadata.js +0 -548
  204. package/esm2015/lib/resources/types/action.js +0 -180
  205. package/esm2015/lib/resources/types/batch.js +0 -288
  206. package/esm2015/lib/resources/types/count.js +0 -55
  207. package/esm2015/lib/resources/types/entity-set.js +0 -169
  208. package/esm2015/lib/resources/types/entity.js +0 -170
  209. package/esm2015/lib/resources/types/function.js +0 -205
  210. package/esm2015/lib/resources/types/media.js +0 -47
  211. package/esm2015/lib/resources/types/metadata.js +0 -36
  212. package/esm2015/lib/resources/types/navigation-property.js +0 -232
  213. package/esm2015/lib/resources/types/options.js +0 -2
  214. package/esm2015/lib/resources/types/property.js +0 -195
  215. package/esm2015/lib/resources/types/reference.js +0 -50
  216. package/esm2015/lib/resources/types/singleton.js +0 -159
  217. package/esm2015/lib/resources/types/value.js +0 -30
  218. package/esm2015/lib/schema/annotation.js +0 -7
  219. package/esm2015/lib/schema/callable.js +0 -82
  220. package/esm2015/lib/schema/entity-container.js +0 -22
  221. package/esm2015/lib/schema/entity-set.js +0 -33
  222. package/esm2015/lib/schema/enum-type.js +0 -101
  223. package/esm2015/lib/schema/schema.js +0 -60
  224. package/esm2015/lib/schema/structured-type.js +0 -148
  225. package/esm2015/lib/services/base.js +0 -23
  226. package/esm2015/lib/services/entity-set.js +0 -143
  227. package/esm2015/lib/services/entity.js +0 -10
  228. package/esm2015/lib/services/singleton.js +0 -46
  229. package/esm2015/lib/types.js +0 -37
  230. package/esm2015/lib/utils/http.js +0 -89
  231. package/esm2015/lib/utils/index.js +0 -9
  232. package/esm2015/lib/utils/objects.js +0 -139
  233. package/esm2015/lib/utils/odata.js +0 -21
  234. package/esm2015/lib/utils/strings.js +0 -13
  235. package/esm2015/lib/utils/types.js +0 -103
  236. package/fesm2015/angular-odata.js.map +0 -1
  237. package/lib/resources/query-options.d.ts +0 -57
@@ -1,180 +0,0 @@
1
- import { ODataResource } from '../resource';
2
- import { PathSegmentNames } from '../../types';
3
- import { map } from 'rxjs/operators';
4
- export class ODataActionResource extends ODataResource {
5
- //#region Factory
6
- static factory(api, path, type, segments, query) {
7
- const segment = segments.add(PathSegmentNames.action, path);
8
- if (type)
9
- segment.type(type);
10
- query.clear();
11
- return new ODataActionResource(api, segments, query);
12
- }
13
- //#endregion
14
- clone() {
15
- return new ODataActionResource(this.api, this.cloneSegments(), this.cloneQuery());
16
- }
17
- schema() {
18
- //TODO: Binding Type
19
- let type = this.type();
20
- return type !== undefined
21
- ? this.api.findCallableForType(type)
22
- : undefined;
23
- }
24
- returnType() {
25
- var _a, _b;
26
- return (_b = (_a = this.schema()) === null || _a === void 0 ? void 0 : _a.parser.return) === null || _b === void 0 ? void 0 : _b.type;
27
- }
28
- asModel(entity, { annots, reset } = {}) {
29
- let resource;
30
- const type = (annots === null || annots === void 0 ? void 0 : annots.type) || this.returnType();
31
- const Model = this.api.modelForType(type);
32
- let path = annots === null || annots === void 0 ? void 0 : annots.entitySet;
33
- if (path !== undefined) {
34
- resource = this.api.entitySet(path).entity(entity);
35
- resource.query.apply(this.queryOptions.toQueryArguments());
36
- }
37
- return new Model(entity, { resource, annots, reset });
38
- }
39
- asCollection(entities, { annots, reset, } = {}) {
40
- let resource;
41
- const type = (annots === null || annots === void 0 ? void 0 : annots.type) || this.returnType();
42
- const Collection = this.api.collectionForType(type);
43
- let path = annots === null || annots === void 0 ? void 0 : annots.entitySet;
44
- if (path !== undefined) {
45
- resource = this.api.entitySet(path);
46
- resource.query.apply(this.queryOptions.toQueryArguments());
47
- }
48
- return new Collection(entities, { resource, annots, reset });
49
- }
50
- //#region Inmutable Resource
51
- select(opts) {
52
- const clone = this.clone();
53
- clone.query.select(opts);
54
- return clone;
55
- }
56
- expand(opts) {
57
- const clone = this.clone();
58
- clone.query.expand(opts);
59
- return clone;
60
- }
61
- transform(opts) {
62
- const clone = this.clone();
63
- clone.query.transform(opts);
64
- return clone;
65
- }
66
- search(opts) {
67
- const clone = this.clone();
68
- clone.query.search(opts);
69
- return clone;
70
- }
71
- filter(opts) {
72
- const clone = this.clone();
73
- clone.query.filter(opts);
74
- return clone;
75
- }
76
- orderBy(opts) {
77
- const clone = this.clone();
78
- clone.query.orderBy(opts);
79
- return clone;
80
- }
81
- format(opts) {
82
- const clone = this.clone();
83
- clone.query.format(opts);
84
- return clone;
85
- }
86
- top(opts) {
87
- const clone = this.clone();
88
- clone.query.top(opts);
89
- return clone;
90
- }
91
- skip(opts) {
92
- const clone = this.clone();
93
- clone.query.skip(opts);
94
- return clone;
95
- }
96
- skiptoken(opts) {
97
- const clone = this.clone();
98
- clone.query.skiptoken(opts);
99
- return clone;
100
- }
101
- //#endregion
102
- //#region Mutable Resource
103
- get segment() {
104
- const segments = this.pathSegments;
105
- return {
106
- entitySet() {
107
- return segments.get(PathSegmentNames.entitySet);
108
- },
109
- singleton() {
110
- return segments.get(PathSegmentNames.singleton);
111
- },
112
- action() {
113
- return segments.get(PathSegmentNames.action);
114
- },
115
- };
116
- }
117
- /**
118
- * Handle query options of the action
119
- * @returns Handler for mutate the query of the action
120
- */
121
- get query() {
122
- return this.entitiesQueryHandler();
123
- }
124
- //#endregion
125
- //#region Requests
126
- post(params, options) {
127
- return super.post(params, options);
128
- }
129
- call(params, options = {}) {
130
- return this.clone().post(params, options);
131
- }
132
- /**
133
- * Execute the action and return the result as a property
134
- * @param params Parameters for the action
135
- * @param options Options for the request
136
- * @returns Observable of the result of the action
137
- */
138
- callProperty(params, options = {}) {
139
- return this.call(params, Object.assign({ responseType: 'property' }, options)).pipe(map(({ property }) => property));
140
- }
141
- /**
142
- * Execute the action and return the result as a entity
143
- * @param params Parameters for the action
144
- * @param options Options for the request
145
- * @returns Observable of the result of the action
146
- */
147
- callEntity(params, options = {}) {
148
- return this.call(params, Object.assign({ responseType: 'entity' }, options)).pipe(map(({ entity }) => entity));
149
- }
150
- /**
151
- * Execute the action and return the result as a model
152
- * @param params Parameters for the action
153
- * @param options Options for the request
154
- * @returns Observable of the result of the action
155
- */
156
- callModel(params, options = {}) {
157
- return this.call(params, Object.assign({ responseType: 'entity' }, options)).pipe(map(({ entity, annots }) => entity ? this.asModel(entity, { annots, reset: true }) : null));
158
- }
159
- /**
160
- * Execute the action and return the result as a entities
161
- * @param params Parameters for the action
162
- * @param options Options for the request
163
- * @returns Observable of the result of the action
164
- */
165
- callEntities(params, options = {}) {
166
- return this.call(params, Object.assign({ responseType: 'entities' }, options)).pipe(map(({ entities }) => entities));
167
- }
168
- /**
169
- * Execute the action and return the result as a collection
170
- * @param params Parameters for the action
171
- * @param options Options for the request
172
- * @returns Observable of the result of the action
173
- */
174
- callCollection(params, options = {}) {
175
- return this.call(params, Object.assign({ responseType: 'entities' }, options)).pipe(map(({ entities, annots }) => entities
176
- ? this.asCollection(entities, { annots, reset: true })
177
- : null));
178
- }
179
- }
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy90eXBlcy9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxNQUFNLE9BQU8sbUJBQTBCLFNBQVEsYUFBZ0I7SUFDN0QsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLElBQVksRUFDWixJQUF3QixFQUN4QixRQUEyQixFQUMzQixLQUF3QjtRQUV4QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLElBQUk7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNkLE9BQU8sSUFBSSxtQkFBbUIsQ0FBTyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCxZQUFZO0lBRVosS0FBSztRQUNILE9BQU8sSUFBSSxtQkFBbUIsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsRUFDUixJQUFJLENBQUMsYUFBYSxFQUFFLEVBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osb0JBQW9CO1FBQ3BCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixPQUFPLElBQUksS0FBSyxTQUFTO1lBQ3ZCLENBQUMsQ0FBQyxJQUFJLENB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QUFnQixFQUNoQixVQUF3QixFQUFFO1FBRTFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLGtCQUFJLFlBQVksRUFBRSxVQUFVLElBQUssT0FBTyxFQUFHLENBQUMsSUFBSSxDQUNyRSxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQzNCLFFBQVE7WUFDTixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBTyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzVELENBQUMsQ0FBQyxJQUFJLENBQ1QsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXhwYW5kLCBGaWx0ZXIsIE9yZGVyQnksIFNlbGVjdCwgVHJhbnNmb3JtIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBPRGF0YUNvbGxlY3Rpb24sIE9EYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdGllcyxcbiAgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zLFxuICBPRGF0YUVudGl0eSxcbiAgT0RhdGFFbnRpdHlBbm5vdGF0aW9ucyxcbiAgT0RhdGFQcm9wZXJ0eSxcbn0gZnJvbSAnLi4vcmVzcG9uc2VzJztcbmltcG9ydCB7XG4gIE9EYXRhRW50aXRpZXNPcHRpb25zLFxuICBPRGF0YUVudGl0eU9wdGlvbnMsXG4gIE9EYXRhTm9uZU9wdGlvbnMsXG4gIE9EYXRhT3B0aW9ucyxcbiAgT0RhdGFQcm9wZXJ0eU9wdGlvbnMsXG59IGZyb20gJy4vb3B0aW9ucyc7XG5cbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vLi4vYXBpJztcbmltcG9ydCB7IE9EYXRhRW50aXR5UmVzb3VyY2UgfSBmcm9tICcuL2VudGl0eSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eVNldFJlc291cmNlIH0gZnJvbSAnLi9lbnRpdHktc2V0JztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aC1zZWdtZW50cyc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5LW9wdGlvbnMnO1xuaW1wb3J0IHsgT0RhdGFSZXNvdXJjZSB9IGZyb20gJy4uL3Jlc291cmNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBhdGhTZWdtZW50TmFtZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUFjdGlvblJlc291cmNlPFAsIFI+IGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxSPiB7XG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5PFAsIFI+KFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzZWdtZW50czogT0RhdGFQYXRoU2VnbWVudHMsXG4gICAgcXVlcnk6IE9EYXRhUXVlcnlPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnROYW1lcy5hY3Rpb24sIHBhdGgpO1xuICAgIGlmICh0eXBlKSBzZWdtZW50LnR5cGUodHlwZSk7XG4gICAgcXVlcnkuY2xlYXIoKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhQWN0aW9uUmVzb3VyY2U8UCwgUj4oYXBpLCBzZWdtZW50cywgcXVlcnkpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgT0RhdGFBY3Rpb25SZXNvdXJjZTxQLCBSPihcbiAgICAgIHRoaXMuYXBpLFxuICAgICAgdGhpcy5jbG9uZVNlZ21lbnRzKCksXG4gICAgICB0aGlzLmNsb25lUXVlcnkoKVxuICAgICk7XG4gIH1cblxuICBzY2hlbWEoKSB7XG4gICAgLy9UT0RPOiBCaW5kaW5nIFR5cGVcbiAgICBsZXQgdHlwZSA9IHRoaXMudHlwZSgpO1xuICAgIHJldHVybiB0eXBlICE9PSB1bmRlZmluZWRcbiAgICAgID8gdGhpcy5hcGkuZmluZENhbGxhYmxlRm9yVHlwZTxSPih0eXBlKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm5UeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYSgpPy5wYXJzZXIucmV0dXJuPy50eXBlO1xuICB9XG5cbiAgYXNNb2RlbDxNIGV4dGVuZHMgT0RhdGFNb2RlbDxSPj4oXG4gICAgZW50aXR5OiBQYXJ0aWFsPFI+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAgeyBhbm5vdHMsIHJlc2V0IH06IHsgYW5ub3RzPzogT0RhdGFFbnRpdHlBbm5vdGF0aW9uczsgcmVzZXQ/OiBib29sZWFuIH0gPSB7fVxuICApOiBNIHtcbiAgICBsZXQgcmVzb3VyY2U6IE9EYXRhRW50aXR5UmVzb3VyY2U8Uj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdHlwZSA9IGFubm90cz8udHlwZSB8fCB0aGlzLnJldHVyblR5cGUoKTtcbiAgICBjb25zdCBNb2RlbCA9IHRoaXMuYXBpLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICBsZXQgcGF0aCA9IGFubm90cz8uZW50aXR5U2V0O1xuICAgIGlmIChwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc291cmNlID0gdGhpcy5hcGkuZW50aXR5U2V0PFI+KHBhdGgpLmVudGl0eShlbnRpdHkgYXMgUGFydGlhbDxSPik7XG4gICAgICByZXNvdXJjZS5xdWVyeS5hcHBseSh0aGlzLnF1ZXJ5T3B0aW9ucy50b1F1ZXJ5QXJndW1lbnRzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsKGVudGl0eSwgeyByZXNvdXJjZSwgYW5ub3RzLCByZXNldCB9KSBhcyBNO1xuICB9XG5cbiAgYXNDb2xsZWN0aW9uPE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFI+LCBDIGV4dGVuZHMgT0RhdGFDb2xsZWN0aW9uPFIsIE0+PihcbiAgICBlbnRpdGllczogUGFydGlhbDxSPltdIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSxcbiAgICB7XG4gICAgICBhbm5vdHMsXG4gICAgICByZXNldCxcbiAgICB9OiB7IGFubm90cz86IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9uczsgcmVzZXQ/OiBib29sZWFuIH0gPSB7fVxuICApOiBDIHtcbiAgICBsZXQgcmVzb3VyY2U6IE9EYXRhRW50aXR5U2V0UmVzb3VyY2U8Uj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdHlwZSA9IGFubm90cz8udHlwZSB8fCB0aGlzLnJldHVyblR5cGUoKTtcbiAgICBjb25zdCBDb2xsZWN0aW9uID0gdGhpcy5hcGkuY29sbGVjdGlvbkZvclR5cGUodHlwZSk7XG4gICAgbGV0IHBhdGggPSBhbm5vdHM/LmVudGl0eVNldDtcbiAgICBpZiAocGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXNvdXJjZSA9IHRoaXMuYXBpLmVudGl0eVNldDxSPihwYXRoKTtcbiAgICAgIHJlc291cmNlLnF1ZXJ5LmFwcGx5KHRoaXMucXVlcnlPcHRpb25zLnRvUXVlcnlBcmd1bWVudHMoKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbihlbnRpdGllcywgeyByZXNvdXJjZSwgYW5ub3RzLCByZXNldCB9KSBhcyBDO1xuICB9XG5cbiAgLy8jcmVnaW9uIElubXV0YWJsZSBSZXNvdXJjZVxuICBzZWxlY3Qob3B0czogU2VsZWN0PFI+KSB7XG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XG4gICAgY2xvbmUucXVlcnkuc2VsZWN0KG9wdHMpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGV4cGFuZChvcHRzOiBFeHBhbmQ8Uj4pIHtcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcbiAgICBjbG9uZS5xdWVyeS5leHBhbmQob3B0cyk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgdHJhbnNmb3JtKG9wdHM6IFRyYW5zZm9ybTxSPikge1xuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZSgpO1xuICAgIGNsb25lLnF1ZXJ5LnRyYW5zZm9ybShvcHRzKTtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBzZWFyY2gob3B0czogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XG4gICAgY2xvbmUucXVlcnkuc2VhcmNoKG9wdHMpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZpbHRlcihvcHRzOiBGaWx0ZXIpIHtcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcbiAgICBjbG9uZS5xdWVyeS5maWx0ZXIob3B0cyk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgb3JkZXJCeShvcHRzOiBPcmRlckJ5PFI+KSB7XG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XG4gICAgY2xvbmUucXVlcnkub3JkZXJCeShvcHRzKTtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmb3JtYXQob3B0czogc3RyaW5nKSB7XG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XG4gICAgY2xvbmUucXVlcnkuZm9ybWF0KG9wdHMpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHRvcChvcHRzOiBudW1iZXIpIHtcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcbiAgICBjbG9uZS5xdWVyeS50b3Aob3B0cyk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgc2tpcChvcHRzOiBudW1iZXIpIHtcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcbiAgICBjbG9uZS5xdWVyeS5za2lwKG9wdHMpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHNraXB0b2tlbihvcHRzOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcbiAgICBjbG9uZS5xdWVyeS5za2lwdG9rZW4ob3B0cyk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBNdXRhYmxlIFJlc291cmNlXG4gIGdldCBzZWdtZW50KCkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdGhpcy5wYXRoU2VnbWVudHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eVNldCgpIHtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRzLmdldChQYXRoU2VnbWVudE5hbWVzLmVudGl0eVNldCk7XG4gICAgICB9LFxuICAgICAgc2luZ2xldG9uKCkge1xuICAgICAgICByZXR1cm4gc2VnbWVudHMuZ2V0KFBhdGhTZWdtZW50TmFtZXMuc2luZ2xldG9uKTtcbiAgICAgIH0sXG4gICAgICBhY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50cy5nZXQoUGF0aFNlZ21lbnROYW1lcy5hY3Rpb24pO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBxdWVyeSBvcHRpb25zIG9mIHRoZSBhY3Rpb25cbiAgICogQHJldHVybnMgSGFuZGxlciBmb3IgbXV0YXRlIHRoZSBxdWVyeSBvZiB0aGUgYWN0aW9uXG4gICAqL1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXRpZXNRdWVyeUhhbmRsZXIoKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBSZXF1ZXN0c1xuICBwcm90ZWN0ZWQgcG9zdChcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM/OiBPRGF0YUVudGl0eU9wdGlvbnMgJiBPRGF0YUVudGl0aWVzT3B0aW9ucyAmIE9EYXRhUHJvcGVydHlPcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLnBvc3QocGFyYW1zLCBvcHRpb25zKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gU2hvcnRjdXRzXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcyBQYXJhbWV0ZXJzIHRvIGJlIHNlbnQgdG8gdGhlIGFjdGlvblxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKi9cbiAgY2FsbChcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM/OiBPRGF0YUVudGl0eU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxSPj47XG4gIGNhbGwoXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICBvcHRpb25zPzogT0RhdGFFbnRpdGllc09wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0aWVzPFI+PjtcbiAgY2FsbChcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM/OiBPRGF0YVByb3BlcnR5T3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE9EYXRhUHJvcGVydHk8Uj4+O1xuICBjYWxsKHBhcmFtczogUCB8IG51bGwsIG9wdGlvbnM/OiBPRGF0YU5vbmVPcHRpb25zKTogT2JzZXJ2YWJsZTxudWxsPjtcbiAgY2FsbChcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM6IE9EYXRhRW50aXR5T3B0aW9ucyAmXG4gICAgICBPRGF0YUVudGl0aWVzT3B0aW9ucyAmXG4gICAgICBPRGF0YVByb3BlcnR5T3B0aW9ucyAmXG4gICAgICBPRGF0YU5vbmVPcHRpb25zID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLnBvc3QocGFyYW1zLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgcHJvcGVydHlcbiAgICogQHBhcmFtIHBhcmFtcyBQYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3VsdCBvZiB0aGUgYWN0aW9uXG4gICAqL1xuICBjYWxsUHJvcGVydHkoXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgPSB7fVxuICApOiBPYnNlcnZhYmxlPFIgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsbChwYXJhbXMsIHsgcmVzcG9uc2VUeXBlOiAncHJvcGVydHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgcHJvcGVydHkgfSkgPT4gcHJvcGVydHkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBhY3Rpb24gYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgZW50aXR5XG4gICAqIEBwYXJhbSBwYXJhbXMgUGFyYW1ldGVycyBmb3IgdGhlIGFjdGlvblxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvblxuICAgKi9cbiAgY2FsbEVudGl0eShcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9XG4gICk6IE9ic2VydmFibGU8UiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5jYWxsKHBhcmFtcywgeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5IH0pID0+IGVudGl0eSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIGFjdGlvbiBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBtb2RlbFxuICAgKiBAcGFyYW0gcGFyYW1zIFBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb25cbiAgICovXG4gIGNhbGxNb2RlbDxNIGV4dGVuZHMgT0RhdGFNb2RlbDxSPj4oXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgPSB7fVxuICApOiBPYnNlcnZhYmxlPE0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsbChwYXJhbXMsIHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0eSwgYW5ub3RzIH0pID0+XG4gICAgICAgIGVudGl0eSA/IHRoaXMuYXNNb2RlbDxNPihlbnRpdHksIHsgYW5ub3RzLCByZXNldDogdHJ1ZSB9KSA6IG51bGxcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIGFjdGlvbiBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBlbnRpdGllc1xuICAgKiBAcGFyYW0gcGFyYW1zIFBhcmFtZXRlcnMgZm9yIHRoZSBhY3Rpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb25cbiAgICovXG4gIGNhbGxFbnRpdGllcyhcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9XG4gICk6IE9ic2VydmFibGU8UltdIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNhbGwocGFyYW1zLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzIH0pID0+IGVudGl0aWVzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgYWN0aW9uIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtcyBQYXJhbWV0ZXJzIGZvciB0aGUgYWN0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3VsdCBvZiB0aGUgYWN0aW9uXG4gICAqL1xuICBjYWxsQ29sbGVjdGlvbjxNIGV4dGVuZHMgT0RhdGFNb2RlbDxSPiwgQyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxSLCBNPj4oXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgPSB7fVxuICApOiBPYnNlcnZhYmxlPEMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FsbChwYXJhbXMsIHsgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXRpZXMsIGFubm90cyB9KSA9PlxuICAgICAgICBlbnRpdGllc1xuICAgICAgICAgID8gdGhpcy5hc0NvbGxlY3Rpb248TSwgQz4oZW50aXRpZXMsIHsgYW5ub3RzLCByZXNldDogdHJ1ZSB9KVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -1,288 +0,0 @@
1
- import { $BATCH, ACCEPT, APPLICATION_HTTP, APPLICATION_JSON, BATCH_PREFIX, BINARY, BOUNDARY_PREFIX_SUFFIX, CHANGESET_PREFIX, CONTENT_ID, CONTENT_TRANSFER_ENCODING, CONTENT_TYPE, HTTP11, MULTIPART_MIXED, MULTIPART_MIXED_BOUNDARY, NEWLINE, NEWLINE_REGEXP, ODATA_VERSION, VERSION_4_0, XSSI_PREFIX, } from '../../constants';
2
- import { HttpErrorResponse, HttpHeaders, HttpResponse, } from '@angular/common/http';
3
- import { Subject } from 'rxjs';
4
- import { Http } from '../../utils/http';
5
- import { ODataPathSegments } from '../path-segments';
6
- import { ODataRequest } from '../request';
7
- import { ODataResource } from '../resource';
8
- import { ODataResponse } from '../responses';
9
- import { PathSegmentNames } from '../../types';
10
- import { Strings } from '../../utils/strings';
11
- export class ODataBatchRequest extends Subject {
12
- constructor(request) {
13
- super();
14
- this.request = request;
15
- }
16
- toString() {
17
- //TODO: Relative or Absolute url ?
18
- let res = [
19
- `${this.request.method} ${this.request.pathWithParams} ${HTTP11}`,
20
- ];
21
- if (this.request.method === 'POST' ||
22
- this.request.method === 'PATCH' ||
23
- this.request.method === 'PUT') {
24
- res.push(`${CONTENT_TYPE}: ${APPLICATION_JSON}`);
25
- }
26
- if (this.request.headers instanceof HttpHeaders) {
27
- let headers = this.request.headers;
28
- res = [
29
- ...res,
30
- ...headers
31
- .keys()
32
- .map((key) => `${key}: ${(headers.getAll(key) || []).join(',')}`),
33
- ];
34
- }
35
- return res.join(NEWLINE);
36
- }
37
- onLoad(content, status) {
38
- let headers = new HttpHeaders();
39
- var index = 1;
40
- for (; index < content.length; index++) {
41
- const batchBodyLine = content[index];
42
- if (batchBodyLine === '') {
43
- break;
44
- }
45
- const batchBodyLineParts = batchBodyLine.split(': ');
46
- headers = headers.append(batchBodyLineParts[0].trim(), batchBodyLineParts[1].trim());
47
- }
48
- let body = '';
49
- for (; index < content.length; index++) {
50
- body += content[index];
51
- }
52
- if (status.code === 0) {
53
- status.code = !!body ? 200 : 0;
54
- }
55
- let ok = status.code >= 200 && status.code < 300;
56
- if (this.request.responseType === 'json' && typeof body === 'string') {
57
- const originalBody = body;
58
- body = body.replace(XSSI_PREFIX, '');
59
- try {
60
- body = body !== '' ? JSON.parse(body) : null;
61
- }
62
- catch (error) {
63
- body = originalBody;
64
- if (ok) {
65
- ok = false;
66
- body = { error, text: body };
67
- }
68
- }
69
- }
70
- if (ok) {
71
- let res = new HttpResponse({
72
- body,
73
- headers,
74
- status: status.code,
75
- statusText: status.message,
76
- url: this.request.urlWithParams,
77
- });
78
- this.next(ODataResponse.fromHttpResponse(this.request, res));
79
- this.complete();
80
- }
81
- else {
82
- // An unsuccessful request is delivered on the error channel.
83
- this.error(new HttpErrorResponse({
84
- // The error in this case is the response body (error from the server).
85
- error: body,
86
- headers,
87
- status: status.code,
88
- statusText: status.message,
89
- url: this.request.urlWithParams,
90
- }));
91
- }
92
- }
93
- onError(content, status) {
94
- const res = new HttpErrorResponse({
95
- error: content.join(NEWLINE),
96
- status: status.code || 0,
97
- statusText: status.text || 'Unknown Error',
98
- url: this.request.urlWithParams || undefined,
99
- });
100
- this.error(res);
101
- }
102
- }
103
- /**
104
- * OData Batch Resource
105
- * https://www.odata.org/getting-started/advanced-tutorial/#batch
106
- */
107
- export class ODataBatchResource extends ODataResource {
108
- constructor() {
109
- super(...arguments);
110
- // VARIABLES
111
- this._requests = [];
112
- }
113
- requests() {
114
- return this._requests.map((r) => r.request);
115
- }
116
- clone() {
117
- return new ODataBatchResource(this.api, this.cloneSegments());
118
- }
119
- schema() {
120
- return undefined;
121
- }
122
- //#region Factory
123
- static factory(api) {
124
- let segments = new ODataPathSegments();
125
- segments.add(PathSegmentNames.batch, $BATCH);
126
- return new ODataBatchResource(api, segments);
127
- }
128
- //#endregion
129
- exec(ctx, options) {
130
- // Store original requester
131
- const current = this.api.request;
132
- // Switch to the batch requester
133
- this.api.request = (req) => {
134
- if (req.api !== this.api)
135
- throw new Error('Batch Request are for the same api.');
136
- if (req.observe === 'events')
137
- throw new Error("Batch Request does not allows observe == 'events'.");
138
- this._requests.push(new ODataBatchRequest(req));
139
- return this._requests[this._requests.length - 1];
140
- };
141
- // Execute the context
142
- const obs$ = ctx(this);
143
- // Restore original requester
144
- this.api.request = current;
145
- if (this._requests.length >= 0) {
146
- const bound = Strings.uniqueId(BATCH_PREFIX);
147
- const requests = this._requests;
148
- const headers = Http.mergeHttpHeaders((options && options.headers) || {}, {
149
- [ODATA_VERSION]: VERSION_4_0,
150
- [CONTENT_TYPE]: MULTIPART_MIXED_BOUNDARY + bound,
151
- [ACCEPT]: MULTIPART_MIXED,
152
- });
153
- const request = new ODataRequest({
154
- method: 'POST',
155
- body: ODataBatchResource.buildBody(bound, requests),
156
- api: this.api,
157
- resource: this,
158
- observe: 'response',
159
- responseType: 'text',
160
- headers: headers,
161
- params: options ? options.params : undefined,
162
- withCredentials: options ? options.withCredentials : undefined,
163
- });
164
- this.api.request(request).subscribe((response) => {
165
- ODataBatchResource.handleResponse(requests, response);
166
- });
167
- }
168
- return obs$;
169
- }
170
- body() {
171
- return ODataBatchResource.buildBody(Strings.uniqueId(BATCH_PREFIX), this._requests);
172
- }
173
- static buildBody(batchBoundary, requests) {
174
- let res = [];
175
- let changesetBoundary = null;
176
- let changesetId = 1;
177
- for (const batch of requests) {
178
- // if method is GET and there is a changeset boundary open then close it
179
- if (batch.request.method === 'GET' && changesetBoundary !== null) {
180
- res.push(`${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}${BOUNDARY_PREFIX_SUFFIX}`);
181
- changesetBoundary = null;
182
- }
183
- // if there is no changeset boundary open then open a batch boundary
184
- if (changesetBoundary === null) {
185
- res.push(`${BOUNDARY_PREFIX_SUFFIX}${batchBoundary}`);
186
- }
187
- // if method is not GET and there is no changeset boundary open then open a changeset boundary
188
- if (batch.request.method !== 'GET') {
189
- if (changesetBoundary === null) {
190
- changesetBoundary = Strings.uniqueId(CHANGESET_PREFIX);
191
- res.push(`${CONTENT_TYPE}: ${MULTIPART_MIXED_BOUNDARY}${changesetBoundary}`);
192
- res.push(NEWLINE);
193
- }
194
- res.push(`${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}`);
195
- }
196
- res.push(`${CONTENT_TYPE}: ${APPLICATION_HTTP}`);
197
- res.push(`${CONTENT_TRANSFER_ENCODING}: ${BINARY}`);
198
- if (batch.request.method !== 'GET') {
199
- res.push(`${CONTENT_ID}: ${changesetId++}`);
200
- }
201
- res.push(NEWLINE);
202
- res.push(`${batch}`);
203
- if (batch.request.method === 'GET' || batch.request.method === 'DELETE') {
204
- res.push(NEWLINE);
205
- }
206
- else {
207
- res.push(`${NEWLINE}${JSON.stringify(batch.request.body)}`);
208
- }
209
- }
210
- if (res.length) {
211
- if (changesetBoundary !== null) {
212
- res.push(`${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}${BOUNDARY_PREFIX_SUFFIX}`);
213
- changesetBoundary = null;
214
- }
215
- res.push(`${BOUNDARY_PREFIX_SUFFIX}${batchBoundary}${BOUNDARY_PREFIX_SUFFIX}`);
216
- }
217
- return res.join(NEWLINE);
218
- }
219
- static handleResponse(requests, response) {
220
- let chunks = [];
221
- const contentType = response.headers.get(CONTENT_TYPE) || '';
222
- const batchBoundary = Http.boundaryDelimiter(contentType);
223
- const endLine = Http.boundaryEnd(batchBoundary);
224
- const lines = response.body.split(NEWLINE_REGEXP);
225
- let changesetResponses = null;
226
- let contentId = null;
227
- let changesetBoundary = null;
228
- let changesetEndLine = null;
229
- let startIndex = null;
230
- for (let index = 0; index < lines.length; index++) {
231
- const line = lines[index];
232
- if (line.startsWith(CONTENT_TYPE)) {
233
- const contentTypeValue = Http.headerValue(line);
234
- if (contentTypeValue === MULTIPART_MIXED) {
235
- changesetResponses = [];
236
- contentId = null;
237
- changesetBoundary = Http.boundaryDelimiter(line);
238
- changesetEndLine = Http.boundaryEnd(changesetBoundary);
239
- startIndex = null;
240
- }
241
- continue;
242
- }
243
- else if (changesetResponses !== null && line.startsWith(CONTENT_ID)) {
244
- contentId = Number(Http.headerValue(line));
245
- }
246
- else if (line.startsWith(HTTP11)) {
247
- startIndex = index;
248
- }
249
- else if (line === batchBoundary ||
250
- line === changesetBoundary ||
251
- line === endLine ||
252
- line === changesetEndLine) {
253
- if (!startIndex) {
254
- continue;
255
- }
256
- const chunk = lines.slice(startIndex, index);
257
- if (changesetResponses !== null && contentId !== null) {
258
- changesetResponses[contentId] = chunk;
259
- }
260
- else {
261
- chunks.push(chunk);
262
- }
263
- if (line === batchBoundary || line === changesetBoundary) {
264
- startIndex = index + 1;
265
- }
266
- else if (line === endLine || line === changesetEndLine) {
267
- if (changesetResponses !== null) {
268
- for (const response of changesetResponses) {
269
- if (response) {
270
- chunks.push(response);
271
- }
272
- }
273
- }
274
- changesetResponses = null;
275
- changesetBoundary = null;
276
- changesetEndLine = null;
277
- startIndex = null;
278
- }
279
- }
280
- }
281
- chunks.forEach((chunk, index) => {
282
- const req = requests[index];
283
- const { status, code, message } = Http.parseResponseStatus(chunk[0]);
284
- req.onLoad(chunk.slice(1), { code, message });
285
- });
286
- }
287
- }
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL2JhdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLE1BQU0sRUFDTixzQkFBc0IsRUFDdEIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVix5QkFBeUIsRUFDekIsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLE9BQU8sRUFDUCxjQUFjLEVBQ2QsYUFBYSxFQUNiLFdBQVcsRUFDWCxXQUFXLEdBQ1osTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlDLE1BQU0sT0FBTyxpQkFBcUIsU0FBUSxPQUF5QjtJQUNqRSxZQUFtQixPQUEwQjtRQUMzQyxLQUFLLEVBQUUsQ0FBQztRQURTLFlBQU8sR0FBUCxPQUFPLENBQW1C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SUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICRCQVRDSCxcbiAgQUNDRVBULFxuICBBUFBMSUNBVElPTl9IVFRQLFxuICBBUFBMSUNBVElPTl9KU09OLFxuICBCQVRDSF9QUkVGSVgsXG4gIEJJTkFSWSxcbiAgQk9VTkRBUllfUFJFRklYX1NVRkZJWCxcbiAgQ0hBTkdFU0VUX1BSRUZJWCxcbiAgQ09OVEVOVF9JRCxcbiAgQ09OVEVOVF9UUkFOU0ZFUl9FTkNPRElORyxcbiAgQ09OVEVOVF9UWVBFLFxuICBIVFRQMTEsXG4gIE1VTFRJUEFSVF9NSVhFRCxcbiAgTVVMVElQQVJUX01JWEVEX0JPVU5EQVJZLFxuICBORVdMSU5FLFxuICBORVdMSU5FX1JFR0VYUCxcbiAgT0RBVEFfVkVSU0lPTixcbiAgVkVSU0lPTl80XzAsXG4gIFhTU0lfUFJFRklYLFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG4gIEh0dHBIZWFkZXJzLFxuICBIdHRwUmVzcG9uc2UsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSHR0cCB9IGZyb20gJy4uLy4uL3V0aWxzL2h0dHAnO1xuaW1wb3J0IHsgT0RhdGFBcGkgfSBmcm9tICcuLi8uLi9hcGknO1xuaW1wb3J0IHsgT0RhdGFPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aC1zZWdtZW50cyc7XG5pbXBvcnQgeyBPRGF0YVJlcXVlc3QgfSBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzcG9uc2VzJztcbmltcG9ydCB7IFBhdGhTZWdtZW50TmFtZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyaW5ncyc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUJhdGNoUmVxdWVzdDxUPiBleHRlbmRzIFN1YmplY3Q8T0RhdGFSZXNwb25zZTxUPj4ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVxdWVzdDogT0RhdGFSZXF1ZXN0PGFueT4pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgLy9UT0RPOiBSZWxhdGl2ZSBvciBBYnNvbHV0ZSB1cmwgP1xuICAgIGxldCByZXMgPSBbXG4gICAgICBgJHt0aGlzLnJlcXVlc3QubWV0aG9kfSAke3RoaXMucmVxdWVzdC5wYXRoV2l0aFBhcmFtc30gJHtIVFRQMTF9YCxcbiAgICBdO1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVxdWVzdC5tZXRob2QgPT09ICdQT1NUJyB8fFxuICAgICAgdGhpcy5yZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BBVENIJyB8fFxuICAgICAgdGhpcy5yZXF1ZXN0Lm1ldGhvZCA9PT0gJ1BVVCdcbiAgICApIHtcbiAgICAgIHJlcy5wdXNoKGAke0NPTlRFTlRfVFlQRX06ICR7QVBQTElDQVRJT05fSlNPTn1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXF1ZXN0LmhlYWRlcnMgaW5zdGFuY2VvZiBIdHRwSGVhZGVycykge1xuICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLnJlcXVlc3QuaGVhZGVycztcbiAgICAgIHJlcyA9IFtcbiAgICAgICAgLi4ucmVzLFxuICAgICAgICAuLi5oZWFkZXJzXG4gICAgICAgICAgLmtleXMoKVxuICAgICAgICAgIC5tYXAoKGtleSkgPT4gYCR7a2V5fTogJHsoaGVhZGVycy5nZXRBbGwoa2V5KSB8fCBbXSkuam9pbignLCcpfWApLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzLmpvaW4oTkVXTElORSk7XG4gIH1cblxuICBvbkxvYWQoY29udGVudDogc3RyaW5nW10sIHN0YXR1czogeyBjb2RlOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9KSB7XG4gICAgbGV0IGhlYWRlcnM6IEh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgdmFyIGluZGV4ID0gMTtcbiAgICBmb3IgKDsgaW5kZXggPCBjb250ZW50Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgYmF0Y2hCb2R5TGluZTogc3RyaW5nID0gY29udGVudFtpbmRleF07XG5cbiAgICAgIGlmIChiYXRjaEJvZHlMaW5lID09PSAnJykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmF0Y2hCb2R5TGluZVBhcnRzOiBzdHJpbmdbXSA9IGJhdGNoQm9keUxpbmUuc3BsaXQoJzogJyk7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoXG4gICAgICAgIGJhdGNoQm9keUxpbmVQYXJ0c1swXS50cmltKCksXG4gICAgICAgIGJhdGNoQm9keUxpbmVQYXJ0c1sxXS50cmltKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGJvZHk6IHN0cmluZyB8IHsgZXJyb3I6IGFueTsgdGV4dDogc3RyaW5nIH0gPSAnJztcbiAgICBmb3IgKDsgaW5kZXggPCBjb250ZW50Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgYm9keSArPSBjb250ZW50W2luZGV4XTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdHVzLmNvZGUgPT09IDApIHtcbiAgICAgIHN0YXR1cy5jb2RlID0gISFib2R5ID8gMjAwIDogMDtcbiAgICB9XG5cbiAgICBsZXQgb2sgPSBzdGF0dXMuY29kZSA+PSAyMDAgJiYgc3RhdHVzLmNvZGUgPCAzMDA7XG4gICAgaWYgKHRoaXMucmVxdWVzdC5yZXNwb25zZVR5cGUgPT09ICdqc29uJyAmJiB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQm9keSA9IGJvZHk7XG4gICAgICBib2R5ID0gYm9keS5yZXBsYWNlKFhTU0lfUFJFRklYLCAnJyk7XG4gICAgICB0cnkge1xuICAgICAgICBib2R5ID0gYm9keSAhPT0gJycgPyBKU09OLnBhcnNlKGJvZHkpIDogbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGJvZHkgPSBvcmlnaW5hbEJvZHk7XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgb2sgPSBmYWxzZTtcbiAgICAgICAgICBib2R5ID0geyBlcnJvciwgdGV4dDogYm9keSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9rKSB7XG4gICAgICBsZXQgcmVzID0gbmV3IEh0dHBSZXNwb25zZTxhbnk+KHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgc3RhdHVzOiBzdGF0dXMuY29kZSxcbiAgICAgICAgc3RhdHVzVGV4dDogc3RhdHVzLm1lc3NhZ2UsXG4gICAgICAgIHVybDogdGhpcy5yZXF1ZXN0LnVybFdpdGhQYXJhbXMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubmV4dChPRGF0YVJlc3BvbnNlLmZyb21IdHRwUmVzcG9uc2UodGhpcy5yZXF1ZXN0LCByZXMpKTtcbiAgICAgIHRoaXMuY29tcGxldGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQW4gdW5zdWNjZXNzZnVsIHJlcXVlc3QgaXMgZGVsaXZlcmVkIG9uIHRoZSBlcnJvciBjaGFubmVsLlxuICAgICAgdGhpcy5lcnJvcihcbiAgICAgICAgbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtcbiAgICAgICAgICAvLyBUaGUgZXJyb3IgaW4gdGhpcyBjYXNlIGlzIHRoZSByZXNwb25zZSBib2R5IChlcnJvciBmcm9tIHRoZSBzZXJ2ZXIpLlxuICAgICAgICAgIGVycm9yOiBib2R5LFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgc3RhdHVzOiBzdGF0dXMuY29kZSxcbiAgICAgICAgICBzdGF0dXNUZXh0OiBzdGF0dXMubWVzc2FnZSxcbiAgICAgICAgICB1cmw6IHRoaXMucmVxdWVzdC51cmxXaXRoUGFyYW1zLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBvbkVycm9yKGNvbnRlbnQ6IHN0cmluZ1tdLCBzdGF0dXM6IHsgY29kZTogbnVtYmVyOyB0ZXh0OiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7XG4gICAgICBlcnJvcjogY29udGVudC5qb2luKE5FV0xJTkUpLFxuICAgICAgc3RhdHVzOiBzdGF0dXMuY29kZSB8fCAwLFxuICAgICAgc3RhdHVzVGV4dDogc3RhdHVzLnRleHQgfHwgJ1Vua25vd24gRXJyb3InLFxuICAgICAgdXJsOiB0aGlzLnJlcXVlc3QudXJsV2l0aFBhcmFtcyB8fCB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgdGhpcy5lcnJvcihyZXMpO1xuICB9XG59XG5cbi8qKlxuICogT0RhdGEgQmF0Y2ggUmVzb3VyY2VcbiAqIGh0dHBzOi8vd3d3Lm9kYXRhLm9yZy9nZXR0aW5nLXN0YXJ0ZWQvYWR2YW5jZWQtdHV0b3JpYWwvI2JhdGNoXG4gKi9cbmV4cG9ydCBjbGFzcyBPRGF0YUJhdGNoUmVzb3VyY2UgZXh0ZW5kcyBPRGF0YVJlc291cmNlPGFueT4ge1xuICAvLyBWQVJJQUJMRVNcbiAgcHJpdmF0ZSBfcmVxdWVzdHM6IE9EYXRhQmF0Y2hSZXF1ZXN0PGFueT5bXSA9IFtdO1xuICByZXF1ZXN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdHMubWFwKChyKSA9PiByLnJlcXVlc3QpO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YUJhdGNoUmVzb3VyY2UodGhpcy5hcGksIHRoaXMuY2xvbmVTZWdtZW50cygpKTtcbiAgfVxuXG4gIHNjaGVtYSgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8jcmVnaW9uIEZhY3RvcnlcbiAgc3RhdGljIGZhY3RvcnkoYXBpOiBPRGF0YUFwaSkge1xuICAgIGxldCBzZWdtZW50cyA9IG5ldyBPRGF0YVBhdGhTZWdtZW50cygpO1xuICAgIHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudE5hbWVzLmJhdGNoLCAkQkFUQ0gpO1xuICAgIHJldHVybiBuZXcgT0RhdGFCYXRjaFJlc291cmNlKGFwaSwgc2VnbWVudHMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGV4ZWM8Uj4oXG4gICAgY3R4OiAoYmF0Y2g6IHRoaXMpID0+IE9ic2VydmFibGU8Uj4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPFI+IHtcbiAgICAvLyBTdG9yZSBvcmlnaW5hbCByZXF1ZXN0ZXJcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5hcGkucmVxdWVzdDtcbiAgICAvLyBTd2l0Y2ggdG8gdGhlIGJhdGNoIHJlcXVlc3RlclxuICAgIHRoaXMuYXBpLnJlcXVlc3QgPSAocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9ic2VydmFibGU8YW55PiA9PiB7XG4gICAgICBpZiAocmVxLmFwaSAhPT0gdGhpcy5hcGkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQmF0Y2ggUmVxdWVzdCBhcmUgZm9yIHRoZSBzYW1lIGFwaS4nKTtcbiAgICAgIGlmIChyZXEub2JzZXJ2ZSA9PT0gJ2V2ZW50cycpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhdGNoIFJlcXVlc3QgZG9lcyBub3QgYWxsb3dzIG9ic2VydmUgPT0gJ2V2ZW50cycuXCIpO1xuICAgICAgdGhpcy5fcmVxdWVzdHMucHVzaChuZXcgT0RhdGFCYXRjaFJlcXVlc3Q8YW55PihyZXEpKTtcbiAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0c1t0aGlzLl9yZXF1ZXN0cy5sZW5ndGggLSAxXTtcbiAgICB9O1xuICAgIC8vIEV4ZWN1dGUgdGhlIGNvbnRleHRcbiAgICBjb25zdCBvYnMkID0gY3R4KHRoaXMpO1xuICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgcmVxdWVzdGVyXG4gICAgdGhpcy5hcGkucmVxdWVzdCA9IGN1cnJlbnQ7XG5cbiAgICBpZiAodGhpcy5fcmVxdWVzdHMubGVuZ3RoID49IDApIHtcbiAgICAgIGNvbnN0IGJvdW5kID0gU3RyaW5ncy51bmlxdWVJZChCQVRDSF9QUkVGSVgpO1xuICAgICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLl9yZXF1ZXN0cztcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBIdHRwLm1lcmdlSHR0cEhlYWRlcnMoXG4gICAgICAgIChvcHRpb25zICYmIG9wdGlvbnMuaGVhZGVycykgfHwge30sXG4gICAgICAgIHtcbiAgICAgICAgICBbT0RBVEFfVkVSU0lPTl06IFZFUlNJT05fNF8wLFxuICAgICAgICAgIFtDT05URU5UX1RZUEVdOiBNVUxUSVBBUlRfTUlYRURfQk9VTkRBUlkgKyBib3VuZCxcbiAgICAgICAgICBbQUNDRVBUXTogTVVMVElQQVJUX01JWEVELFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBPRGF0YVJlcXVlc3Qoe1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogT0RhdGFCYXRjaFJlc291cmNlLmJ1aWxkQm9keShib3VuZCwgcmVxdWVzdHMpLFxuICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICByZXNvdXJjZTogdGhpcyxcbiAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIHBhcmFtczogb3B0aW9ucyA/IG9wdGlvbnMucGFyYW1zIDogdW5kZWZpbmVkLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IG9wdGlvbnMgPyBvcHRpb25zLndpdGhDcmVkZW50aWFscyA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hcGkucmVxdWVzdChyZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIE9EYXRhQmF0Y2hSZXNvdXJjZS5oYW5kbGVSZXNwb25zZShyZXF1ZXN0cywgcmVzcG9uc2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9icyQ7XG4gIH1cblxuICBib2R5KCkge1xuICAgIHJldHVybiBPRGF0YUJhdGNoUmVzb3VyY2UuYnVpbGRCb2R5KFxuICAgICAgU3RyaW5ncy51bmlxdWVJZChCQVRDSF9QUkVGSVgpLFxuICAgICAgdGhpcy5fcmVxdWVzdHNcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkQm9keShcbiAgICBiYXRjaEJvdW5kYXJ5OiBzdHJpbmcsXG4gICAgcmVxdWVzdHM6IE9EYXRhQmF0Y2hSZXF1ZXN0PGFueT5bXVxuICApOiBzdHJpbmcge1xuICAgIGxldCByZXMgPSBbXTtcbiAgICBsZXQgY2hhbmdlc2V0Qm91bmRhcnk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjaGFuZ2VzZXRJZCA9IDE7XG5cbiAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyBpZiBtZXRob2QgaXMgR0VUIGFuZCB0aGVyZSBpcyBhIGNoYW5nZXNldCBib3VuZGFyeSBvcGVuIHRoZW4gY2xvc2UgaXRcbiAgICAgIGlmIChiYXRjaC5yZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcgJiYgY2hhbmdlc2V0Qm91bmRhcnkgIT09IG51bGwpIHtcbiAgICAgICAgcmVzLnB1c2goXG4gICAgICAgICAgYCR7Qk9VTkRBUllfUFJFRklYX1NVRkZJWH0ke2NoYW5nZXNldEJvdW5kYXJ5fSR7Qk9VTkRBUllfUFJFRklYX1NVRkZJWH1gXG4gICAgICAgICk7XG4gICAgICAgIGNoYW5nZXNldEJvdW5kYXJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gY2hhbmdlc2V0IGJvdW5kYXJ5IG9wZW4gdGhlbiBvcGVuIGEgYmF0Y2ggYm91bmRhcnlcbiAgICAgIGlmIChjaGFuZ2VzZXRCb3VuZGFyeSA9PT0gbnVsbCkge1xuICAgICAgICByZXMucHVzaChgJHtCT1VOREFSWV9QUkVGSVhfU1VGRklYfSR7YmF0Y2hCb3VuZGFyeX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gaWYgbWV0aG9kIGlzIG5vdCBHRVQgYW5kIHRoZXJlIGlzIG5vIGNoYW5nZXNldCBib3VuZGFyeSBvcGVuIHRoZW4gb3BlbiBhIGNoYW5nZXNldCBib3VuZGFyeVxuICAgICAgaWYgKGJhdGNoLnJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgICBpZiAoY2hhbmdlc2V0Qm91bmRhcnkgPT09IG51bGwpIHtcbiAgICAgICAgICBjaGFuZ2VzZXRCb3VuZGFyeSA9IFN0cmluZ3MudW5pcXVlSWQoQ0hBTkdFU0VUX1BSRUZJWCk7XG4gICAgICAgICAgcmVzLnB1c2goXG4gICAgICAgICAgICBgJHtDT05URU5UX1RZUEV9OiAke01VTFRJUEFSVF9NSVhFRF9CT1VOREFSWX0ke2NoYW5nZXNldEJvdW5kYXJ5fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlcy5wdXNoKE5FV0xJTkUpO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5wdXNoKGAke0JPVU5EQVJZX1BSRUZJWF9TVUZGSVh9JHtjaGFuZ2VzZXRCb3VuZGFyeX1gKTtcbiAgICAgIH1cblxuICAgICAgcmVzLnB1c2goYCR7Q09OVEVOVF9UWVBFfTogJHtBUFBMSUNBVElPTl9IVFRQfWApO1xuICAgICAgcmVzLnB1c2goYCR7Q09OVEVOVF9UUkFOU0ZFUl9FTkNPRElOR306ICR7QklOQVJZfWApO1xuXG4gICAgICBpZiAoYmF0Y2gucmVxdWVzdC5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHJlcy5wdXNoKGAke0NPTlRFTlRfSUR9OiAke2NoYW5nZXNldElkKyt9YCk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5wdXNoKE5FV0xJTkUpO1xuICAgICAgcmVzLnB1c2goYCR7YmF0Y2h9YCk7XG5cbiAgICAgIGlmIChiYXRjaC5yZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcgfHwgYmF0Y2gucmVxdWVzdC5tZXRob2QgPT09ICdERUxFVEUnKSB7XG4gICAgICAgIHJlcy5wdXNoKE5FV0xJTkUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnB1c2goYCR7TkVXTElORX0ke0pTT04uc3RyaW5naWZ5KGJhdGNoLnJlcXVlc3QuYm9keSl9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlcy5sZW5ndGgpIHtcbiAgICAgIGlmIChjaGFuZ2VzZXRCb3VuZGFyeSAhPT0gbnVsbCkge1xuICAgICAgICByZXMucHVzaChcbiAgICAgICAgICBgJHtCT1VOREFSWV9QUkVGSVhfU1VGRklYfSR7Y2hhbmdlc2V0Qm91bmRhcnl9JHtCT1VOREFSWV9QUkVGSVhfU1VGRklYfWBcbiAgICAgICAgKTtcbiAgICAgICAgY2hhbmdlc2V0Qm91bmRhcnkgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmVzLnB1c2goXG4gICAgICAgIGAke0JPVU5EQVJZX1BSRUZJWF9TVUZGSVh9JHtiYXRjaEJvdW5kYXJ5fSR7Qk9VTkRBUllfUFJFRklYX1NVRkZJWH1gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLmpvaW4oTkVXTElORSk7XG4gIH1cblxuICBzdGF0aWMgaGFuZGxlUmVzcG9uc2UoXG4gICAgcmVxdWVzdHM6IE9EYXRhQmF0Y2hSZXF1ZXN0PGFueT5bXSxcbiAgICByZXNwb25zZTogT0RhdGFSZXNwb25zZTxhbnk+XG4gICkge1xuICAgIGxldCBjaHVua3M6IHN0cmluZ1tdW10gPSBbXTtcbiAgICBjb25zdCBjb250ZW50VHlwZTogc3RyaW5nID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoQ09OVEVOVF9UWVBFKSB8fCAnJztcbiAgICBjb25zdCBiYXRjaEJvdW5kYXJ5OiBzdHJpbmcgPSBIdHRwLmJvdW5kYXJ5RGVsaW1pdGVyKGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCBlbmRMaW5lOiBzdHJpbmcgPSBIdHRwLmJvdW5kYXJ5RW5kKGJhdGNoQm91bmRhcnkpO1xuXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gcmVzcG9uc2UuYm9keS5zcGxpdChORVdMSU5FX1JFR0VYUCk7XG5cbiAgICBsZXQgY2hhbmdlc2V0UmVzcG9uc2VzOiBzdHJpbmdbXVtdIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNvbnRlbnRJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGNoYW5nZXNldEJvdW5kYXJ5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgY2hhbmdlc2V0RW5kTGluZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHN0YXJ0SW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaW5lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpbmRleF07XG5cbiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoQ09OVEVOVF9UWVBFKSkge1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZVZhbHVlOiBzdHJpbmcgPSBIdHRwLmhlYWRlclZhbHVlKGxpbmUpO1xuICAgICAgICBpZiAoY29udGVudFR5cGVWYWx1ZSA9PT0gTVVMVElQQVJUX01JWEVEKSB7XG4gICAgICAgICAgY2hhbmdlc2V0UmVzcG9uc2VzID0gW107XG4gICAgICAgICAgY29udGVudElkID0gbnVsbDtcbiAgICAgICAgICBjaGFuZ2VzZXRCb3VuZGFyeSA9IEh0dHAuYm91bmRhcnlEZWxpbWl0ZXIobGluZSk7XG4gICAgICAgICAgY2hhbmdlc2V0RW5kTGluZSA9IEh0dHAuYm91bmRhcnlFbmQoY2hhbmdlc2V0Qm91bmRhcnkpO1xuICAgICAgICAgIHN0YXJ0SW5kZXggPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2VzZXRSZXNwb25zZXMgIT09IG51bGwgJiYgbGluZS5zdGFydHNXaXRoKENPTlRFTlRfSUQpKSB7XG4gICAgICAgIGNvbnRlbnRJZCA9IE51bWJlcihIdHRwLmhlYWRlclZhbHVlKGxpbmUpKTtcbiAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKEhUVFAxMSkpIHtcbiAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgbGluZSA9PT0gYmF0Y2hCb3VuZGFyeSB8fFxuICAgICAgICBsaW5lID09PSBjaGFuZ2VzZXRCb3VuZGFyeSB8fFxuICAgICAgICBsaW5lID09PSBlbmRMaW5lIHx8XG4gICAgICAgIGxpbmUgPT09IGNoYW5nZXNldEVuZExpbmVcbiAgICAgICkge1xuICAgICAgICBpZiAoIXN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaHVuayA9IGxpbmVzLnNsaWNlKHN0YXJ0SW5kZXgsIGluZGV4KTtcbiAgICAgICAgaWYgKGNoYW5nZXNldFJlc3BvbnNlcyAhPT0gbnVsbCAmJiBjb250ZW50SWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjaGFuZ2VzZXRSZXNwb25zZXNbY29udGVudElkXSA9IGNodW5rO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lID09PSBiYXRjaEJvdW5kYXJ5IHx8IGxpbmUgPT09IGNoYW5nZXNldEJvdW5kYXJ5KSB7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIGlmIChsaW5lID09PSBlbmRMaW5lIHx8IGxpbmUgPT09IGNoYW5nZXNldEVuZExpbmUpIHtcbiAgICAgICAgICBpZiAoY2hhbmdlc2V0UmVzcG9uc2VzICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIGNoYW5nZXNldFJlc3BvbnNlcykge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBjaHVua3MucHVzaChyZXNwb25zZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2hhbmdlc2V0UmVzcG9uc2VzID0gbnVsbDtcbiAgICAgICAgICBjaGFuZ2VzZXRCb3VuZGFyeSA9IG51bGw7XG4gICAgICAgICAgY2hhbmdlc2V0RW5kTGluZSA9IG51bGw7XG4gICAgICAgICAgc3RhcnRJbmRleCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2h1bmtzLmZvckVhY2goKGNodW5rLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gcmVxdWVzdHNbaW5kZXhdO1xuICAgICAgY29uc3QgeyBzdGF0dXMsIGNvZGUsIG1lc3NhZ2UgfSA9IEh0dHAucGFyc2VSZXNwb25zZVN0YXR1cyhjaHVua1swXSk7XG4gICAgICByZXEub25Mb2FkKGNodW5rLnNsaWNlKDEpLCB7IGNvZGUsIG1lc3NhZ2UgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,55 +0,0 @@
1
- import { PathSegmentNames, QueryOptionNames } from '../../types';
2
- import { $COUNT } from '../../constants';
3
- import { ODataResource } from '../resource';
4
- export class ODataCountResource extends ODataResource {
5
- //#region Factory
6
- static factory(api, segments, query) {
7
- segments.add(PathSegmentNames.count, $COUNT).type('Edm.Int32');
8
- query.keep(QueryOptionNames.filter, QueryOptionNames.search);
9
- return new ODataCountResource(api, segments, query);
10
- }
11
- //#endregion
12
- clone() {
13
- return new ODataCountResource(this.api, this.cloneSegments(), this.cloneQuery());
14
- }
15
- schema() {
16
- return undefined;
17
- }
18
- get segment() {
19
- const segments = this.pathSegments;
20
- return {
21
- entitySet() {
22
- return segments.get(PathSegmentNames.entitySet);
23
- },
24
- navigationProperty() {
25
- return segments.get(PathSegmentNames.navigationProperty);
26
- },
27
- };
28
- }
29
- get query() {
30
- const options = this.queryOptions;
31
- return {
32
- search(opts) {
33
- return options.option(QueryOptionNames.search, opts);
34
- },
35
- filter(opts) {
36
- return options.option(QueryOptionNames.filter, opts);
37
- },
38
- };
39
- }
40
- //#region Requests
41
- get(options) {
42
- return super.get(Object.assign({ responseType: 'value' }, options));
43
- }
44
- //#endregion
45
- //#region Shortcuts
46
- /**
47
- * Fetch the count of the set.
48
- * @param options Options for the request
49
- * @returns The count of the set
50
- */
51
- fetch(options) {
52
- return this.get(options);
53
- }
54
- }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL2NvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc1QyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsYUFBa0I7SUFDeEQsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLFFBQTJCLEVBQzNCLEtBQXdCO1FBRXhCLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxPQUFPLElBQUksa0JBQWtCLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsWUFBWTtJQUVaLEtBQUs7UUFDSCxPQUFPLElBQUksa0JBQWtCLENBQzNCLElBQUksQ0FBQyxHQUFHLEVBQ1IsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQ2xCLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTTtRQUNKLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ25DLE9BQU87WUFDTCxTQUFTO2dCQUNQLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0Qsa0JBQWtCO2dCQUNoQixPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMzRCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2xDLE9BQU87WUFDTCxNQUFNLENBQUMsSUFBYTtnQkFDbEIsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsTUFBTSxDQUFDLElBQWE7Z0JBQ2xCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0QsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsR0FBRyxDQUFDLE9BQXNCO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLEdBQUcsaUJBQUcsWUFBWSxFQUFFLE9BQU8sSUFBSyxPQUFPLEVBQUcsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsWUFBWTtJQUVaLG1CQUFtQjtJQUNuQjs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQXNCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXRoU2VnbWVudE5hbWVzLCBRdWVyeU9wdGlvbk5hbWVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyAkQ09VTlQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBPRGF0YU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgT0RhdGFQYXRoU2VnbWVudHMgfSBmcm9tICcuLi9wYXRoLXNlZ21lbnRzJztcbmltcG9ydCB7IE9EYXRhUXVlcnlPcHRpb25zIH0gZnJvbSAnLi4vcXVlcnktb3B0aW9ucyc7XG5pbXBvcnQgeyBPRGF0YVJlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFDb3VudFJlc291cmNlIGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxhbnk+IHtcbiAgLy8jcmVnaW9uIEZhY3RvcnlcbiAgc3RhdGljIGZhY3RvcnkoXG4gICAgYXBpOiBPRGF0YUFwaSxcbiAgICBzZWdtZW50czogT0RhdGFQYXRoU2VnbWVudHMsXG4gICAgcXVlcnk6IE9EYXRhUXVlcnlPcHRpb25zXG4gICkge1xuICAgIHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudE5hbWVzLmNvdW50LCAkQ09VTlQpLnR5cGUoJ0VkbS5JbnQzMicpO1xuICAgIHF1ZXJ5LmtlZXAoUXVlcnlPcHRpb25OYW1lcy5maWx0ZXIsIFF1ZXJ5T3B0aW9uTmFtZXMuc2VhcmNoKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhQ291bnRSZXNvdXJjZShhcGksIHNlZ21lbnRzLCBxdWVyeSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YUNvdW50UmVzb3VyY2UoXG4gICAgICB0aGlzLmFwaSxcbiAgICAgIHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgdGhpcy5jbG9uZVF1ZXJ5KClcbiAgICApO1xuICB9XG4gIHNjaGVtYSgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IHNlZ21lbnQoKSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLnBhdGhTZWdtZW50cztcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5U2V0KCkge1xuICAgICAgICByZXR1cm4gc2VnbWVudHMuZ2V0KFBhdGhTZWdtZW50TmFtZXMuZW50aXR5U2V0KTtcbiAgICAgIH0sXG4gICAgICBuYXZpZ2F0aW9uUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50cy5nZXQoUGF0aFNlZ21lbnROYW1lcy5uYXZpZ2F0aW9uUHJvcGVydHkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnF1ZXJ5T3B0aW9ucztcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoKG9wdHM/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMub3B0aW9uPHN0cmluZz4oUXVlcnlPcHRpb25OYW1lcy5zZWFyY2gsIG9wdHMpO1xuICAgICAgfSxcbiAgICAgIGZpbHRlcihvcHRzPzogRmlsdGVyKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm9wdGlvbjxGaWx0ZXI+KFF1ZXJ5T3B0aW9uTmFtZXMuZmlsdGVyLCBvcHRzKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBSZXF1ZXN0c1xuICBwcm90ZWN0ZWQgZ2V0KG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiBzdXBlci5nZXQoeyByZXNwb25zZVR5cGU6ICd2YWx1ZScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFNob3J0Y3V0c1xuICAvKipcbiAgICogRmV0Y2ggdGhlIGNvdW50IG9mIHRoZSBzZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBjb3VudCBvZiB0aGUgc2V0XG4gICAqL1xuICBmZXRjaChvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQob3B0aW9ucyk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=