angular-odata 0.92.0 → 0.95.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
  2. package/esm2020/lib/api.mjs +303 -0
  3. package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +3 -3
  4. package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
  5. package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +1 -1
  6. package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +2 -2
  7. package/esm2020/lib/client.mjs +271 -0
  8. package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +3 -1
  9. package/esm2020/lib/helper.mjs +268 -0
  10. package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
  11. package/esm2020/lib/models/collection.mjs +741 -0
  12. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  13. package/esm2020/lib/models/model.mjs +453 -0
  14. package/esm2020/lib/models/options.mjs +945 -0
  15. package/{esm2015/lib/module.js → esm2020/lib/module.mjs} +7 -7
  16. package/esm2020/lib/options.mjs +32 -0
  17. package/{esm2015/lib/resources/index.js → esm2020/lib/resources/index.mjs} +0 -0
  18. package/{esm2015/lib/resources/path/handlers.js → esm2020/lib/resources/path/handlers.mjs} +1 -1
  19. package/{esm2015/lib/resources/path/index.js → esm2020/lib/resources/path/index.mjs} +0 -0
  20. package/esm2020/lib/resources/path/segments.mjs +124 -0
  21. package/esm2020/lib/resources/query/builder.mjs +590 -0
  22. package/esm2020/lib/resources/query/expressions.mjs +207 -0
  23. package/esm2020/lib/resources/query/handlers.mjs +186 -0
  24. package/{esm2015/lib/resources/query/index.js → esm2020/lib/resources/query/index.mjs} +0 -0
  25. package/esm2020/lib/resources/query/options.mjs +103 -0
  26. package/esm2020/lib/resources/query/syntax.mjs +406 -0
  27. package/esm2020/lib/resources/request.mjs +167 -0
  28. package/esm2020/lib/resources/resource.mjs +326 -0
  29. package/esm2020/lib/resources/responses/annotations.mjs +119 -0
  30. package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
  31. package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
  32. package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
  33. package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
  34. package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
  35. package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
  36. package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
  37. package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
  38. package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
  39. package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
  40. package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
  41. package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
  42. package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
  43. package/esm2020/lib/resources/responses/metadata.mjs +547 -0
  44. package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +0 -0
  45. package/{esm2015/lib/resources/responses/response.js → esm2020/lib/resources/responses/response.mjs} +0 -0
  46. package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +0 -0
  47. package/esm2020/lib/resources/types/action.mjs +101 -0
  48. package/esm2020/lib/resources/types/batch.mjs +288 -0
  49. package/esm2020/lib/resources/types/count.mjs +27 -0
  50. package/esm2020/lib/resources/types/entity-set.mjs +94 -0
  51. package/esm2020/lib/resources/types/entity.mjs +106 -0
  52. package/esm2020/lib/resources/types/function.mjs +137 -0
  53. package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
  54. package/esm2020/lib/resources/types/media.mjs +41 -0
  55. package/esm2020/lib/resources/types/metadata.mjs +30 -0
  56. package/esm2020/lib/resources/types/navigation-property.mjs +226 -0
  57. package/esm2020/lib/resources/types/options.mjs +2 -0
  58. package/esm2020/lib/resources/types/property.mjs +183 -0
  59. package/esm2020/lib/resources/types/reference.mjs +85 -0
  60. package/esm2020/lib/resources/types/singleton.mjs +126 -0
  61. package/esm2020/lib/resources/types/value.mjs +41 -0
  62. package/esm2020/lib/schema/annotation.mjs +37 -0
  63. package/esm2020/lib/schema/callable.mjs +62 -0
  64. package/esm2020/lib/schema/element.mjs +51 -0
  65. package/esm2020/lib/schema/entity-container.mjs +9 -0
  66. package/esm2020/lib/schema/entity-set.mjs +9 -0
  67. package/esm2020/lib/schema/enum-type.mjs +71 -0
  68. package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +0 -0
  69. package/esm2020/lib/schema/parsers/callable.mjs +113 -0
  70. package/{esm2015/lib/schema/parsers/edm.js → esm2020/lib/schema/parsers/edm.mjs} +2 -2
  71. package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
  72. package/{esm2015/lib/schema/parsers/index.js → esm2020/lib/schema/parsers/index.mjs} +0 -0
  73. package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
  74. package/esm2020/lib/schema/schema.mjs +61 -0
  75. package/esm2020/lib/schema/structured-type.mjs +198 -0
  76. package/esm2020/lib/services/base.mjs +29 -0
  77. package/esm2020/lib/services/entity-set.mjs +143 -0
  78. package/esm2020/lib/services/entity.mjs +12 -0
  79. package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
  80. package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
  81. package/{esm2015/lib/services/singleton.js → esm2020/lib/services/singleton.mjs} +1 -1
  82. package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
  83. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  84. package/esm2020/lib/types.mjs +37 -0
  85. package/{esm2015/lib/utils/arraybuffers.js → esm2020/lib/utils/arraybuffers.mjs} +0 -0
  86. package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
  87. package/{esm2015/lib/utils/durations.js → esm2020/lib/utils/durations.mjs} +0 -0
  88. package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
  89. package/{esm2015/lib/utils/http.js → esm2020/lib/utils/http.mjs} +0 -0
  90. package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
  91. package/{esm2015/lib/utils/objects.js → esm2020/lib/utils/objects.mjs} +0 -0
  92. package/esm2020/lib/utils/odata.mjs +22 -0
  93. package/{esm2015/lib/utils/strings.js → esm2020/lib/utils/strings.mjs} +0 -0
  94. package/{esm2015/lib/utils/types.js → esm2020/lib/utils/types.mjs} +0 -0
  95. package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
  96. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  97. package/fesm2015/{angular-odata.js → angular-odata.mjs} +849 -750
  98. package/fesm2015/angular-odata.mjs.map +1 -0
  99. package/fesm2020/angular-odata.mjs +10274 -0
  100. package/fesm2020/angular-odata.mjs.map +1 -0
  101. package/lib/api.d.ts +10 -10
  102. package/lib/cache/cache.d.ts +2 -2
  103. package/lib/cache/storage.d.ts +1 -1
  104. package/lib/client.d.ts +3 -3
  105. package/lib/constants.d.ts +1 -0
  106. package/lib/models/collection.d.ts +11 -19
  107. package/lib/models/model.d.ts +22 -18
  108. package/lib/models/options.d.ts +16 -21
  109. package/lib/module.d.ts +1 -1
  110. package/lib/options.d.ts +1 -0
  111. package/lib/resources/path/segments.d.ts +1 -1
  112. package/lib/resources/query/expressions.d.ts +37 -27
  113. package/lib/resources/query/handlers.d.ts +7 -11
  114. package/lib/resources/query/options.d.ts +2 -2
  115. package/lib/resources/query/syntax.d.ts +52 -54
  116. package/lib/resources/request.d.ts +1 -1
  117. package/lib/resources/resource.d.ts +25 -8
  118. package/lib/resources/types/action.d.ts +12 -19
  119. package/lib/resources/types/batch.d.ts +1 -3
  120. package/lib/resources/types/count.d.ts +5 -4
  121. package/lib/resources/types/entity-set.d.ts +11 -15
  122. package/lib/resources/types/entity.d.ts +12 -15
  123. package/lib/resources/types/function.d.ts +11 -18
  124. package/lib/resources/types/media.d.ts +6 -5
  125. package/lib/resources/types/metadata.d.ts +3 -5
  126. package/lib/resources/types/navigation-property.d.ts +15 -21
  127. package/lib/resources/types/property.d.ts +13 -19
  128. package/lib/resources/types/reference.d.ts +39 -6
  129. package/lib/resources/types/singleton.d.ts +12 -16
  130. package/lib/resources/types/value.d.ts +9 -5
  131. package/lib/schema/{base.d.ts → annotation.d.ts} +0 -0
  132. package/lib/schema/callable.d.ts +2 -18
  133. package/lib/schema/element.d.ts +39 -0
  134. package/lib/schema/entity-container.d.ts +2 -12
  135. package/lib/schema/entity-set.d.ts +2 -18
  136. package/lib/schema/enum-type.d.ts +2 -26
  137. package/lib/schema/parsers/enum-type.d.ts +4 -4
  138. package/lib/schema/parsers/structured-type.d.ts +4 -4
  139. package/lib/schema/schema.d.ts +2 -2
  140. package/lib/schema/structured-type.d.ts +8 -26
  141. package/lib/services/base.d.ts +2 -2
  142. package/lib/services/entity-set.d.ts +2 -2
  143. package/lib/services/entity.d.ts +1 -1
  144. package/lib/services/singleton.d.ts +2 -2
  145. package/lib/settings.d.ts +5 -5
  146. package/lib/types.d.ts +1 -0
  147. package/package.json +21 -8
  148. package/bundles/angular-odata.umd.js +0 -11861
  149. package/bundles/angular-odata.umd.js.map +0 -1
  150. package/esm2015/lib/api.js +0 -296
  151. package/esm2015/lib/client.js +0 -272
  152. package/esm2015/lib/helper.js +0 -268
  153. package/esm2015/lib/models/collection.js +0 -734
  154. package/esm2015/lib/models/model.js +0 -438
  155. package/esm2015/lib/models/options.js +0 -942
  156. package/esm2015/lib/options.js +0 -31
  157. package/esm2015/lib/resources/path/segments.js +0 -124
  158. package/esm2015/lib/resources/query/builder.js +0 -591
  159. package/esm2015/lib/resources/query/expressions.js +0 -194
  160. package/esm2015/lib/resources/query/handlers.js +0 -192
  161. package/esm2015/lib/resources/query/options.js +0 -103
  162. package/esm2015/lib/resources/query/syntax.js +0 -367
  163. package/esm2015/lib/resources/request.js +0 -168
  164. package/esm2015/lib/resources/resource.js +0 -243
  165. package/esm2015/lib/resources/responses/annotations.js +0 -121
  166. package/esm2015/lib/resources/responses/metadata.js +0 -548
  167. package/esm2015/lib/resources/types/action.js +0 -105
  168. package/esm2015/lib/resources/types/batch.js +0 -294
  169. package/esm2015/lib/resources/types/count.js +0 -33
  170. package/esm2015/lib/resources/types/entity-set.js +0 -101
  171. package/esm2015/lib/resources/types/entity.js +0 -137
  172. package/esm2015/lib/resources/types/function.js +0 -130
  173. package/esm2015/lib/resources/types/media.js +0 -47
  174. package/esm2015/lib/resources/types/metadata.js +0 -36
  175. package/esm2015/lib/resources/types/navigation-property.js +0 -205
  176. package/esm2015/lib/resources/types/options.js +0 -2
  177. package/esm2015/lib/resources/types/property.js +0 -151
  178. package/esm2015/lib/resources/types/reference.js +0 -74
  179. package/esm2015/lib/resources/types/singleton.js +0 -167
  180. package/esm2015/lib/resources/types/value.js +0 -35
  181. package/esm2015/lib/schema/base.js +0 -37
  182. package/esm2015/lib/schema/callable.js +0 -82
  183. package/esm2015/lib/schema/entity-container.js +0 -24
  184. package/esm2015/lib/schema/entity-set.js +0 -35
  185. package/esm2015/lib/schema/enum-type.js +0 -102
  186. package/esm2015/lib/schema/parsers/callable.js +0 -107
  187. package/esm2015/lib/schema/parsers/enum-type.js +0 -107
  188. package/esm2015/lib/schema/parsers/structured-type.js +0 -392
  189. package/esm2015/lib/schema/schema.js +0 -52
  190. package/esm2015/lib/schema/structured-type.js +0 -220
  191. package/esm2015/lib/services/base.js +0 -23
  192. package/esm2015/lib/services/entity-set.js +0 -146
  193. package/esm2015/lib/services/entity.js +0 -12
  194. package/esm2015/lib/types.js +0 -37
  195. package/esm2015/lib/utils/odata.js +0 -21
  196. package/fesm2015/angular-odata.js.map +0 -1
@@ -0,0 +1,303 @@
1
+ import { HttpEventType } from '@angular/common/http';
2
+ import { NEVER } from 'rxjs';
3
+ import { catchError, map } from 'rxjs/operators';
4
+ import { ODataInMemoryCache } from './cache/index';
5
+ import { DEFAULT_VERSION } from './constants';
6
+ import { ODataCollection, ODataModel, } from './models/index';
7
+ import { ODataApiOptions } from './options';
8
+ import { ODataActionResource, ODataBatchResource, ODataEntityResource, ODataEntitySetResource, ODataFunctionResource, ODataMetadataResource, ODataNavigationPropertyResource, ODataPathSegments, ODataQueryOptions, ODataResponse, ODataSingletonResource, } from './resources/index';
9
+ import { EDM_PARSERS, ODataSchema, } from './schema';
10
+ import { NONE_PARSER, PathSegmentNames, } from './types';
11
+ /**
12
+ * Api abstraction for consuming OData services.
13
+ */
14
+ export class ODataApi {
15
+ constructor(config) {
16
+ //# region Find by Type
17
+ // Memoize
18
+ this.memo = {
19
+ forType: {
20
+ enum: {},
21
+ structured: {},
22
+ callable: {},
23
+ entitySet: {},
24
+ parser: {},
25
+ options: {},
26
+ },
27
+ byName: { enum: {}, structured: {}, callable: {}, entitySet: {} },
28
+ };
29
+ this.serviceRootUrl = config.serviceRootUrl;
30
+ if (this.serviceRootUrl.indexOf('?') != -1)
31
+ throw new Error("The 'serviceRootUrl' should not contain query string. Please use 'params' to add extra parameters");
32
+ if (!this.serviceRootUrl.endsWith('/'))
33
+ this.serviceRootUrl += '/';
34
+ this.metadataUrl = `${this.serviceRootUrl}$metadata`;
35
+ this.name = config.name;
36
+ this.version = config.version || DEFAULT_VERSION;
37
+ this.default = config.default || false;
38
+ this.creation = config.creation || new Date();
39
+ this.options = new ODataApiOptions(Object.assign({ version: this.version }, config.options || {}));
40
+ this.cache = config.cache || new ODataInMemoryCache();
41
+ this.errorHandler = config.errorHandler;
42
+ this.parsers = config.parsers || EDM_PARSERS;
43
+ this.schemas = (config.schemas || []).map((schema) => new ODataSchema(schema, this));
44
+ }
45
+ configure(settings = {}) {
46
+ this.requester = settings.requester;
47
+ this.schemas.forEach((schema) => {
48
+ schema.configure({
49
+ parserForType: (type) => this.parserForType(type),
50
+ findOptionsForType: (type) => this.findOptionsForType(type),
51
+ });
52
+ });
53
+ }
54
+ fromJSON(json) {
55
+ const segments = new ODataPathSegments(json.segments);
56
+ const query = new ODataQueryOptions(json.options);
57
+ switch (segments.last()?.name) {
58
+ case PathSegmentNames.entitySet:
59
+ if (segments.last()?.hasKey()) {
60
+ return new ODataEntityResource(this, { segments, query });
61
+ }
62
+ else {
63
+ return new ODataEntitySetResource(this, { segments, query });
64
+ }
65
+ case PathSegmentNames.navigationProperty:
66
+ return new ODataNavigationPropertyResource(this, { segments, query });
67
+ case PathSegmentNames.singleton:
68
+ return new ODataSingletonResource(this, { segments, query });
69
+ case PathSegmentNames.action:
70
+ return new ODataActionResource(this, { segments, query });
71
+ case PathSegmentNames.function:
72
+ return new ODataFunctionResource(this, { segments, query });
73
+ }
74
+ throw new Error('No Resource for json');
75
+ }
76
+ /**
77
+ * Build a metadata resource.
78
+ * @returns ODataMetadataResource
79
+ */
80
+ metadata() {
81
+ return ODataMetadataResource.factory(this);
82
+ }
83
+ /**
84
+ * Build a batch resource.
85
+ * @returns ODataBatchResource
86
+ */
87
+ batch() {
88
+ return ODataBatchResource.factory(this);
89
+ }
90
+ /**
91
+ * Build a singleton resource.
92
+ * @param path Name of the singleton
93
+ * @returns
94
+ */
95
+ singleton(path) {
96
+ const entitySet = this.findEntitySetByName(path);
97
+ const schema = entitySet !== undefined
98
+ ? this.findStructuredTypeForType(entitySet.entityType)
99
+ : undefined;
100
+ return ODataSingletonResource.factory(this, { path, schema });
101
+ }
102
+ /**
103
+ * Build an entity set resource.
104
+ * @param path Name of the entity set
105
+ * @returns
106
+ */
107
+ entitySet(path) {
108
+ const entitySet = this.findEntitySetByName(path);
109
+ const schema = entitySet !== undefined
110
+ ? this.findStructuredTypeForType(entitySet.entityType)
111
+ : undefined;
112
+ return ODataEntitySetResource.factory(this, { path, schema });
113
+ }
114
+ /**
115
+ * Unbound Action
116
+ * @param {string} path?
117
+ * @returns ODataActionResource
118
+ */
119
+ action(path) {
120
+ const schema = this.findCallableForType(path);
121
+ return ODataActionResource.factory(this, { path, schema });
122
+ }
123
+ /**
124
+ * Unbound Function
125
+ * @param {string} path?
126
+ * @returns ODataFunctionResource
127
+ */
128
+ function(path) {
129
+ const schema = this.findCallableForType(path);
130
+ return ODataFunctionResource.factory(this, { path, schema });
131
+ }
132
+ request(req) {
133
+ let res$ = this.requester !== undefined ? this.requester(req) : NEVER;
134
+ res$ = res$.pipe(map((res) => res.type === HttpEventType.Response
135
+ ? ODataResponse.fromHttpResponse(req, res)
136
+ : res));
137
+ if (this.errorHandler !== undefined)
138
+ res$ = res$.pipe(catchError(this.errorHandler));
139
+ return req.observe === 'response'
140
+ ? this.cache.handleRequest(req, res$)
141
+ : res$;
142
+ }
143
+ findSchemaForType(type) {
144
+ const schemas = this.schemas.filter((s) => s.isNamespaceOf(type));
145
+ if (schemas.length === 0)
146
+ return undefined;
147
+ if (schemas.length === 1)
148
+ return schemas[0];
149
+ return schemas
150
+ .sort((s1, s2) => s1.namespace.length - s2.namespace.length)
151
+ .pop();
152
+ }
153
+ findEnumTypeForType(type) {
154
+ if (!(type in this.memo.forType.enum))
155
+ this.memo.forType.enum[type] =
156
+ this.findSchemaForType(type)?.findEnumTypeForType(type);
157
+ return this.memo.forType.enum[type];
158
+ }
159
+ findStructuredTypeForType(type) {
160
+ if (!(type in this.memo.forType.structured))
161
+ this.memo.forType.structured[type] =
162
+ this.findSchemaForType(type)?.findStructuredTypeForType(type);
163
+ return this.memo.forType.structured[type];
164
+ }
165
+ findCallableForType(type, bindingType) {
166
+ const key = bindingType !== undefined ? `${bindingType}/${type}` : type;
167
+ if (!(key in this.memo.forType.callable))
168
+ this.memo.forType.callable[key] = this.findSchemaForType(type)?.findCallableForType(type, bindingType);
169
+ return this.memo.forType.callable[key];
170
+ }
171
+ findEntitySetForType(type) {
172
+ if (!(type in this.memo.forType.entitySet))
173
+ this.memo.forType.entitySet[type] =
174
+ this.findSchemaForType(type)?.findEntitySetForType(type);
175
+ return this.memo.forType.entitySet[type];
176
+ }
177
+ findModelForType(type) {
178
+ return this.findStructuredTypeForType(type)?.model;
179
+ }
180
+ modelForType(type) {
181
+ let Model = this.findModelForType(type);
182
+ if (Model === undefined) {
183
+ // Build Ad-hoc model
184
+ let schema = this.findStructuredTypeForType(type);
185
+ if (schema === undefined)
186
+ throw Error(`No schema for ${type}`);
187
+ Model = class extends ODataModel {
188
+ };
189
+ // Build Meta
190
+ Model.buildMeta({ schema });
191
+ // Configure
192
+ Model.meta.configure({
193
+ findOptionsForType: (type) => this.findOptionsForType(type),
194
+ options: this.options,
195
+ });
196
+ // Store New Model for next time
197
+ schema.model = Model;
198
+ }
199
+ return Model;
200
+ }
201
+ findCollectionForType(type) {
202
+ return this.findStructuredTypeForType(type)?.collection;
203
+ }
204
+ collectionForType(type) {
205
+ let Collection = this.findCollectionForType(type);
206
+ if (Collection === undefined) {
207
+ let schema = this.findStructuredTypeForType(type);
208
+ if (schema === undefined)
209
+ throw Error('');
210
+ Collection = class extends ODataCollection {
211
+ };
212
+ Collection.model = this.modelForType(type);
213
+ // Store New Collection for next time
214
+ schema.collection = Collection;
215
+ }
216
+ return Collection;
217
+ }
218
+ findServiceForType(type) {
219
+ return this.findEntitySetForType(type)?.service;
220
+ }
221
+ findEntitySetForEntityType(entityType) {
222
+ if (!(entityType in this.memo.forType.entitySet))
223
+ this.memo.forType.entitySet[entityType] = this.schemas
224
+ .reduce((acc, schema) => [...acc, ...schema.entitySets], [])
225
+ .find((e) => e.entityType === entityType);
226
+ return this.memo.forType.entitySet[entityType];
227
+ }
228
+ findServiceForEntityType(entityType) {
229
+ return this.findEntitySetForEntityType(entityType)?.service;
230
+ }
231
+ findEnumTypeByName(name) {
232
+ if (!(name in this.memo.byName.enum))
233
+ this.memo.byName.enum[name] = this.schemas
234
+ .reduce((acc, schema) => [...acc, ...schema.enums], [])
235
+ .find((e) => e.name === name);
236
+ return this.memo.byName.enum[name];
237
+ }
238
+ findStructuredTypeByName(name) {
239
+ if (!(name in this.memo.byName.structured))
240
+ this.memo.byName.structured[name] = this.schemas
241
+ .reduce((acc, schema) => [...acc, ...schema.entities], [])
242
+ .find((e) => e.name === name);
243
+ return this.memo.byName.structured[name];
244
+ }
245
+ findCallableByName(name, bindingType) {
246
+ const key = bindingType !== undefined ? `${bindingType}/${name}` : name;
247
+ if (!(key in this.memo.byName.callable))
248
+ this.memo.byName.callable[key] = this.schemas
249
+ .reduce((acc, schema) => [...acc, ...schema.callables], [])
250
+ .find((c) => c.name === name &&
251
+ (bindingType === undefined || c.binding()?.type === bindingType));
252
+ return this.memo.byName.callable[key];
253
+ }
254
+ findEntitySetByName(name) {
255
+ if (!(name in this.memo.byName.entitySet))
256
+ this.memo.byName.entitySet[name] = this.schemas
257
+ .reduce((acc, schema) => [...acc, ...schema.entitySets], [])
258
+ .find((e) => e.name === name);
259
+ return this.memo.byName.entitySet[name];
260
+ }
261
+ findModelByName(name) {
262
+ return this.findStructuredTypeByName(name)?.model;
263
+ }
264
+ findCollectionByName(name) {
265
+ return this.findStructuredTypeByName(name)?.collection;
266
+ }
267
+ findServiceByName(name) {
268
+ return this.findEntitySetByName(name)?.service;
269
+ }
270
+ parserForType(type, bindingType) {
271
+ const key = bindingType !== undefined ? `${bindingType}/${type}` : type;
272
+ if (!(key in this.memo.forType.parser)) {
273
+ if (type in this.parsers) {
274
+ // Edm, Base Parsers
275
+ this.memo.forType.parser[key] = this.parsers[type];
276
+ }
277
+ else if (!type.startsWith('Edm.')) {
278
+ // EnumType, ComplexType and EntityType Parsers
279
+ let value = this.findCallableForType(type, bindingType) ||
280
+ this.findEnumTypeForType(type) ||
281
+ this.findStructuredTypeForType(type);
282
+ this.memo.forType.parser[key] = value?.parser;
283
+ }
284
+ else {
285
+ // None Parser
286
+ this.memo.forType.parser[key] = NONE_PARSER;
287
+ }
288
+ }
289
+ return this.memo.forType.parser[key];
290
+ }
291
+ findOptionsForType(type) {
292
+ // Strucutred Options
293
+ if (!(type in this.memo.forType.options)) {
294
+ let st = this.findStructuredTypeForType(type);
295
+ this.memo.forType.options[type] =
296
+ st !== undefined && st.model !== undefined && st.model?.meta !== null
297
+ ? st.model.meta
298
+ : undefined;
299
+ }
300
+ return this.memo.forType.options[type];
301
+ }
302
+ }
303
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBYyxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFFTCxlQUFlLEVBQ2YsVUFBVSxHQUVYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsK0JBQStCLEVBQy9CLGlCQUFpQixFQUNqQixpQkFBaUIsRUFFakIsYUFBYSxFQUViLHNCQUFzQixHQUN2QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDTCxXQUFXLEVBSVgsV0FBVyxHQUVaLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFHTCxXQUFXLEVBRVgsZ0JBQWdCLEdBQ2pCLE1BQU0sU0FBUyxDQUFDO0FBRWpCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFtQm5CLFlBQVksTUFBaUI7UUErSjdCLHVCQUF1QjtRQUN2QixVQUFVO1FBQ0YsU0FBSSxHQWVSO1lBQ0YsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxFQUFFO2dCQUNSLFVBQVUsRUFBRSxFQUFFO2dCQUNkLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFNB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QUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBSSxJQUFJLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUM3QixFQUFFLEtBQUssU0FBUyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLElBQUk7b0JBQ25FLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUk7b0JBQ2YsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNqQjtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBcUMsQ0FBQztJQUM3RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBORVZFUiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0RhdGFDYWNoZSwgT0RhdGFJbk1lbW9yeUNhY2hlIH0gZnJvbSAnLi9jYWNoZS9pbmRleCc7XG5pbXBvcnQgeyBERUZBVUxUX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBNb2RlbE9wdGlvbnMsXG4gIE9EYXRhQ29sbGVjdGlvbixcbiAgT0RhdGFNb2RlbCxcbiAgT0RhdGFNb2RlbE9wdGlvbnMsXG59IGZyb20gJy4vbW9kZWxzL2luZGV4JztcbmltcG9ydCB7IE9EYXRhQXBpT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQge1xuICBPRGF0YUFjdGlvblJlc291cmNlLFxuICBPRGF0YUJhdGNoUmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5UmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UsXG4gIE9EYXRhRnVuY3Rpb25SZXNvdXJjZSxcbiAgT0RhdGFNZXRhZGF0YVJlc291cmNlLFxuICBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YVBhdGhTZWdtZW50cyxcbiAgT0RhdGFRdWVyeU9wdGlvbnMsXG4gIE9EYXRhUmVxdWVzdCxcbiAgT0RhdGFSZXNwb25zZSxcbiAgT0RhdGFTZWdtZW50LFxuICBPRGF0YVNpbmdsZXRvblJlc291cmNlLFxufSBmcm9tICcuL3Jlc291cmNlcy9pbmRleCc7XG5pbXBvcnQge1xuICBFRE1fUEFSU0VSUyxcbiAgT0RhdGFDYWxsYWJsZSxcbiAgT0RhdGFFbnRpdHlTZXQsXG4gIE9EYXRhRW51bVR5cGUsXG4gIE9EYXRhU2NoZW1hLFxuICBPRGF0YVN0cnVjdHVyZWRUeXBlLFxufSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2VudGl0eSc7XG5pbXBvcnQge1xuICBBcGlDb25maWcsXG4gIEFwaU9wdGlvbnMsXG4gIE5PTkVfUEFSU0VSLFxuICBQYXJzZXIsXG4gIFBhdGhTZWdtZW50TmFtZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEFwaSBhYnN0cmFjdGlvbiBmb3IgY29uc3VtaW5nIE9EYXRhIHNlcnZpY2VzLlxuICovXG5leHBvcnQgY2xhc3MgT0RhdGFBcGkge1xuICByZXF1ZXN0ZXI/OiAocmVxdWVzdDogT0RhdGFSZXF1ZXN0PGFueT4pID0+IE9ic2VydmFibGU8YW55PjtcbiAgc2VydmljZVJvb3RVcmw6IHN0cmluZztcbiAgbWV0YWRhdGFVcmw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBkZWZhdWx0OiBib29sZWFuO1xuICBjcmVhdGlvbjogRGF0ZTtcbiAgLy8gT3B0aW9uc1xuICBvcHRpb25zOiBPRGF0YUFwaU9wdGlvbnM7XG4gIC8vIENhY2hlXG4gIGNhY2hlITogT0RhdGFDYWNoZTtcbiAgLy8gRXJyb3IgSGFuZGxlclxuICBlcnJvckhhbmRsZXI/OiAoZXJyb3I6IGFueSwgY2F1Z2h0OiBPYnNlcnZhYmxlPGFueT4pID0+IE9ic2VydmFibGU8bmV2ZXI+O1xuICAvLyBCYXNlIFBhcnNlcnNcbiAgcGFyc2VyczogeyBbdHlwZTogc3RyaW5nXTogUGFyc2VyPGFueT4gfTtcbiAgLy8gU2NoZW1hc1xuICBzY2hlbWFzOiBPRGF0YVNjaGVtYVtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogQXBpQ29uZmlnKSB7XG4gICAgdGhpcy5zZXJ2aWNlUm9vdFVybCA9IGNvbmZpZy5zZXJ2aWNlUm9vdFVybDtcbiAgICBpZiAodGhpcy5zZXJ2aWNlUm9vdFVybC5pbmRleE9mKCc/JykgIT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVGhlICdzZXJ2aWNlUm9vdFVybCcgc2hvdWxkIG5vdCBjb250YWluIHF1ZXJ5IHN0cmluZy4gUGxlYXNlIHVzZSAncGFyYW1zJyB0byBhZGQgZXh0cmEgcGFyYW1ldGVyc1wiXG4gICAgICApO1xuICAgIGlmICghdGhpcy5zZXJ2aWNlUm9vdFVybC5lbmRzV2l0aCgnLycpKSB0aGlzLnNlcnZpY2VSb290VXJsICs9ICcvJztcbiAgICB0aGlzLm1ldGFkYXRhVXJsID0gYCR7dGhpcy5zZXJ2aWNlUm9vdFVybH0kbWV0YWRhdGFgO1xuICAgIHRoaXMubmFtZSA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMudmVyc2lvbiA9IGNvbmZpZy52ZXJzaW9uIHx8IERFRkFVTFRfVkVSU0lPTjtcbiAgICB0aGlzLmRlZmF1bHQgPSBjb25maWcuZGVmYXVsdCB8fCBmYWxzZTtcbiAgICB0aGlzLmNyZWF0aW9uID0gY29uZmlnLmNyZWF0aW9uIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5vcHRpb25zID0gbmV3IE9EYXRhQXBpT3B0aW9ucyhcbiAgICAgIE9iamVjdC5hc3NpZ24oPEFwaU9wdGlvbnM+eyB2ZXJzaW9uOiB0aGlzLnZlcnNpb24gfSwgY29uZmlnLm9wdGlvbnMgfHwge30pXG4gICAgKTtcblxuICAgIHRoaXMuY2FjaGUgPSAoY29uZmlnLmNhY2hlIGFzIE9EYXRhQ2FjaGUpIHx8IG5ldyBPRGF0YUluTWVtb3J5Q2FjaGUoKTtcbiAgICB0aGlzLmVycm9ySGFuZGxlciA9IGNvbmZpZy5lcnJvckhhbmRsZXI7XG5cbiAgICB0aGlzLnBhcnNlcnMgPSBjb25maWcucGFyc2VycyB8fCBFRE1fUEFSU0VSUztcblxuICAgIHRoaXMuc2NoZW1hcyA9IChjb25maWcuc2NoZW1hcyB8fCBbXSkubWFwKFxuICAgICAgKHNjaGVtYSkgPT4gbmV3IE9EYXRhU2NoZW1hKHNjaGVtYSwgdGhpcylcbiAgICApO1xuICB9XG5cbiAgY29uZmlndXJlKFxuICAgIHNldHRpbmdzOiB7XG4gICAgICByZXF1ZXN0ZXI/OiAocmVxdWVzdDogT0RhdGFSZXF1ZXN0PGFueT4pID0+IE9ic2VydmFibGU8YW55PjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ZXIgPSBzZXR0aW5ncy5yZXF1ZXN0ZXI7XG4gICAgdGhpcy5zY2hlbWFzLmZvckVhY2goKHNjaGVtYSkgPT4ge1xuICAgICAgc2NoZW1hLmNvbmZpZ3VyZSh7XG4gICAgICAgIHBhcnNlckZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMucGFyc2VyRm9yVHlwZSh0eXBlKSxcbiAgICAgICAgZmluZE9wdGlvbnNGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiB0aGlzLmZpbmRPcHRpb25zRm9yVHlwZSh0eXBlKSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnJvbUpTT048UCwgUj4oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSk6IE9EYXRhQWN0aW9uUmVzb3VyY2U8UCwgUj4gfCBPRGF0YUZ1bmN0aW9uUmVzb3VyY2U8UCwgUj47XG4gIGZyb21KU09OPEU+KGpzb246IHtcbiAgICBzZWdtZW50czogT0RhdGFTZWdtZW50W107XG4gICAgb3B0aW9uczogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIH0pOlxuICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxFPlxuICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxFPjtcbiAgZnJvbUpTT04oanNvbjoge1xuICAgIHNlZ21lbnRzOiBPRGF0YVNlZ21lbnRbXTtcbiAgICBvcHRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gbmV3IE9EYXRhUGF0aFNlZ21lbnRzKGpzb24uc2VnbWVudHMpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IE9EYXRhUXVlcnlPcHRpb25zKGpzb24ub3B0aW9ucyk7XG4gICAgc3dpdGNoIChzZWdtZW50cy5sYXN0KCk/Lm5hbWUgYXMgUGF0aFNlZ21lbnROYW1lcykge1xuICAgICAgY2FzZSBQYXRoU2VnbWVudE5hbWVzLmVudGl0eVNldDpcbiAgICAgICAgaWYgKHNlZ21lbnRzLmxhc3QoKT8uaGFzS2V5KCkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9EYXRhRW50aXR5UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPRGF0YUVudGl0eVNldFJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMubmF2aWdhdGlvblByb3BlcnR5OlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuc2luZ2xldG9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhU2luZ2xldG9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuYWN0aW9uOlxuICAgICAgICByZXR1cm4gbmV3IE9EYXRhQWN0aW9uUmVzb3VyY2UodGhpcywgeyBzZWdtZW50cywgcXVlcnkgfSk7XG4gICAgICBjYXNlIFBhdGhTZWdtZW50TmFtZXMuZnVuY3Rpb246XG4gICAgICAgIHJldHVybiBuZXcgT0RhdGFGdW5jdGlvblJlc291cmNlKHRoaXMsIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFJlc291cmNlIGZvciBqc29uJyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBtZXRhZGF0YSByZXNvdXJjZS5cbiAgICogQHJldHVybnMgT0RhdGFNZXRhZGF0YVJlc291cmNlXG4gICAqL1xuICBtZXRhZGF0YSgpOiBPRGF0YU1ldGFkYXRhUmVzb3VyY2Uge1xuICAgIHJldHVybiBPRGF0YU1ldGFkYXRhUmVzb3VyY2UuZmFjdG9yeSh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGJhdGNoIHJlc291cmNlLlxuICAgKiBAcmV0dXJucyBPRGF0YUJhdGNoUmVzb3VyY2VcbiAgICovXG4gIGJhdGNoKCk6IE9EYXRhQmF0Y2hSZXNvdXJjZSB7XG4gICAgcmV0dXJuIE9EYXRhQmF0Y2hSZXNvdXJjZS5mYWN0b3J5KHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgc2luZ2xldG9uIHJlc291cmNlLlxuICAgKiBAcGFyYW0gcGF0aCBOYW1lIG9mIHRoZSBzaW5nbGV0b25cbiAgICogQHJldHVybnNcbiAgICovXG4gIHNpbmdsZXRvbjxUPihwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUocGF0aCk7XG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIGVudGl0eVNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KGVudGl0eVNldC5lbnRpdHlUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT0RhdGFTaW5nbGV0b25SZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIGVudGl0eSBzZXQgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBwYXRoIE5hbWUgb2YgdGhlIGVudGl0eSBzZXRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGVudGl0eVNldDxUPihwYXRoOiBzdHJpbmcpOiBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+IHtcbiAgICBjb25zdCBlbnRpdHlTZXQgPSB0aGlzLmZpbmRFbnRpdHlTZXRCeU5hbWUocGF0aCk7XG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIGVudGl0eVNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KGVudGl0eVNldC5lbnRpdHlUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT0RhdGFFbnRpdHlTZXRSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYm91bmQgQWN0aW9uXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aD9cbiAgICogQHJldHVybnMgT0RhdGFBY3Rpb25SZXNvdXJjZVxuICAgKi9cbiAgYWN0aW9uPFAsIFI+KHBhdGg6IHN0cmluZyk6IE9EYXRhQWN0aW9uUmVzb3VyY2U8UCwgUj4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZmluZENhbGxhYmxlRm9yVHlwZTxSPihwYXRoKTtcbiAgICByZXR1cm4gT0RhdGFBY3Rpb25SZXNvdXJjZS5mYWN0b3J5PFAsIFI+KHRoaXMsIHsgcGF0aCwgc2NoZW1hIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYm91bmQgRnVuY3Rpb25cbiAgICogQHBhcmFtICB7c3RyaW5nfSBwYXRoP1xuICAgKiBAcmV0dXJucyBPRGF0YUZ1bmN0aW9uUmVzb3VyY2VcbiAgICovXG4gIGZ1bmN0aW9uPFAsIFI+KHBhdGg6IHN0cmluZyk6IE9EYXRhRnVuY3Rpb25SZXNvdXJjZTxQLCBSPiB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFI+KHBhdGgpO1xuICAgIHJldHVybiBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UuZmFjdG9yeTxQLCBSPih0aGlzLCB7IHBhdGgsIHNjaGVtYSB9KTtcbiAgfVxuXG4gIHJlcXVlc3QocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHJlcyQgPSB0aGlzLnJlcXVlc3RlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5yZXF1ZXN0ZXIocmVxKSA6IE5FVkVSO1xuICAgIHJlcyQgPSByZXMkLnBpcGUoXG4gICAgICBtYXAoKHJlczogSHR0cEV2ZW50PGFueT4pID0+XG4gICAgICAgIHJlcy50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlXG4gICAgICAgICAgPyBPRGF0YVJlc3BvbnNlLmZyb21IdHRwUmVzcG9uc2U8YW55PihyZXEsIHJlcylcbiAgICAgICAgICA6IHJlc1xuICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5lcnJvckhhbmRsZXIgIT09IHVuZGVmaW5lZClcbiAgICAgIHJlcyQgPSByZXMkLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmVycm9ySGFuZGxlcikpO1xuXG4gICAgcmV0dXJuIHJlcS5vYnNlcnZlID09PSAncmVzcG9uc2UnXG4gICAgICA/IHRoaXMuY2FjaGUuaGFuZGxlUmVxdWVzdChyZXEsIHJlcyQpXG4gICAgICA6IHJlcyQ7XG4gIH1cblxuICAvLyMgcmVnaW9uIEZpbmQgYnkgVHlwZVxuICAvLyBNZW1vaXplXG4gIHByaXZhdGUgbWVtbzoge1xuICAgIGZvclR5cGU6IHtcbiAgICAgIGVudW06IHsgW3R5cGU6IHN0cmluZ106IE9EYXRhRW51bVR5cGU8YW55PiB8IHVuZGVmaW5lZCB9O1xuICAgICAgc3RydWN0dXJlZDogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxhbnk+IHwgdW5kZWZpbmVkIH07XG4gICAgICBjYWxsYWJsZTogeyBba2V5OiBzdHJpbmddOiBPRGF0YUNhbGxhYmxlPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICAgIGVudGl0eVNldDogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQgfTtcbiAgICAgIHBhcnNlcjogeyBbdHlwZTogc3RyaW5nXTogUGFyc2VyPGFueT4gfTtcbiAgICAgIG9wdGlvbnM6IHsgW3R5cGU6IHN0cmluZ106IE9EYXRhTW9kZWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICB9O1xuICAgIGJ5TmFtZToge1xuICAgICAgZW51bTogeyBbdHlwZTogc3RyaW5nXTogT0RhdGFFbnVtVHlwZTxhbnk+IHwgdW5kZWZpbmVkIH07XG4gICAgICBzdHJ1Y3R1cmVkOiB7IFt0eXBlOiBzdHJpbmddOiBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQgfTtcbiAgICAgIGNhbGxhYmxlOiB7IFtrZXk6IHN0cmluZ106IE9EYXRhQ2FsbGFibGU8YW55PiB8IHVuZGVmaW5lZCB9O1xuICAgICAgZW50aXR5U2V0OiB7IFt0eXBlOiBzdHJpbmddOiBPRGF0YUVudGl0eVNldCB8IHVuZGVmaW5lZCB9O1xuICAgIH07XG4gIH0gPSB7XG4gICAgZm9yVHlwZToge1xuICAgICAgZW51bToge30sXG4gICAgICBzdHJ1Y3R1cmVkOiB7fSxcbiAgICAgIGNhbGxhYmxlOiB7fSxcbiAgICAgIGVudGl0eVNldDoge30sXG4gICAgICBwYXJzZXI6IHt9LFxuICAgICAgb3B0aW9uczoge30sXG4gICAgfSxcbiAgICBieU5hbWU6IHsgZW51bToge30sIHN0cnVjdHVyZWQ6IHt9LCBjYWxsYWJsZToge30sIGVudGl0eVNldDoge30gfSxcbiAgfTtcblxuICBwcml2YXRlIGZpbmRTY2hlbWFGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNjaGVtYXMgPSB0aGlzLnNjaGVtYXMuZmlsdGVyKChzKSA9PiBzLmlzTmFtZXNwYWNlT2YodHlwZSkpO1xuICAgIGlmIChzY2hlbWFzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoc2NoZW1hcy5sZW5ndGggPT09IDEpIHJldHVybiBzY2hlbWFzWzBdO1xuICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAuc29ydCgoczEsIHMyKSA9PiBzMS5uYW1lc3BhY2UubGVuZ3RoIC0gczIubmFtZXNwYWNlLmxlbmd0aClcbiAgICAgIC5wb3AoKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW51bVR5cGVGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIGlmICghKHR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUuZW51bSkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5lbnVtW3R5cGVdID1cbiAgICAgICAgdGhpcy5maW5kU2NoZW1hRm9yVHlwZSh0eXBlKT8uZmluZEVudW1UeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW51bVt0eXBlXSBhcyBPRGF0YUVudW1UeXBlPFQ+IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8VD4odHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCEodHlwZSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkKSlcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLnN0cnVjdHVyZWRbdHlwZV0gPVxuICAgICAgICB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpO1xuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5zdHJ1Y3R1cmVkW3R5cGVdIGFzXG4gICAgICB8IE9EYXRhU3RydWN0dXJlZFR5cGU8VD5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRDYWxsYWJsZUZvclR5cGU8VD4odHlwZTogc3RyaW5nLCBiaW5kaW5nVHlwZT86IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IGJpbmRpbmdUeXBlICE9PSB1bmRlZmluZWQgPyBgJHtiaW5kaW5nVHlwZX0vJHt0eXBlfWAgOiB0eXBlO1xuICAgIGlmICghKGtleSBpbiB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZSkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5jYWxsYWJsZVtrZXldID0gdGhpcy5maW5kU2NoZW1hRm9yVHlwZShcbiAgICAgICAgdHlwZVxuICAgICAgKT8uZmluZENhbGxhYmxlRm9yVHlwZTxUPih0eXBlLCBiaW5kaW5nVHlwZSk7XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmNhbGxhYmxlW2tleV0gYXMgT0RhdGFDYWxsYWJsZTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAoISh0eXBlIGluIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldCkpXG4gICAgICB0aGlzLm1lbW8uZm9yVHlwZS5lbnRpdHlTZXRbdHlwZV0gPVxuICAgICAgICB0aGlzLmZpbmRTY2hlbWFGb3JUeXBlKHR5cGUpPy5maW5kRW50aXR5U2V0Rm9yVHlwZSh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0W3R5cGVdIGFzIE9EYXRhRW50aXR5U2V0IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRNb2RlbEZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxhbnk+KHR5cGUpPy5tb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBtb2RlbEZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IE1vZGVsID0gdGhpcy5maW5kTW9kZWxGb3JUeXBlKHR5cGUpO1xuICAgIGlmIChNb2RlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBCdWlsZCBBZC1ob2MgbW9kZWxcbiAgICAgIGxldCBzY2hlbWEgPSB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGU8YW55Pih0eXBlKTtcbiAgICAgIGlmIChzY2hlbWEgPT09IHVuZGVmaW5lZCkgdGhyb3cgRXJyb3IoYE5vIHNjaGVtYSBmb3IgJHt0eXBlfWApO1xuICAgICAgTW9kZWwgPSBjbGFzcyBleHRlbmRzIE9EYXRhTW9kZWw8YW55PiB7fSBhcyB0eXBlb2YgT0RhdGFNb2RlbDtcbiAgICAgIC8vIEJ1aWxkIE1ldGFcbiAgICAgIE1vZGVsLmJ1aWxkTWV0YSh7IHNjaGVtYSB9KTtcbiAgICAgIC8vIENvbmZpZ3VyZVxuICAgICAgTW9kZWwubWV0YS5jb25maWd1cmUoe1xuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHRoaXMuZmluZE9wdGlvbnNGb3JUeXBlKHR5cGUpLFxuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIC8vIFN0b3JlIE5ldyBNb2RlbCBmb3IgbmV4dCB0aW1lXG4gICAgICBzY2hlbWEubW9kZWwgPSBNb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIE1vZGVsO1xuICB9XG5cbiAgcHVibGljIGZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk/LmNvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgY29sbGVjdGlvbkZvclR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IENvbGxlY3Rpb24gPSB0aGlzLmZpbmRDb2xsZWN0aW9uRm9yVHlwZSh0eXBlKTtcbiAgICBpZiAoQ29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgc2NoZW1hID0gdGhpcy5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPGFueT4odHlwZSk7XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIHRocm93IEVycm9yKCcnKTtcbiAgICAgIENvbGxlY3Rpb24gPSBjbGFzcyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxcbiAgICAgICAgYW55LFxuICAgICAgICBPRGF0YU1vZGVsPGFueT5cbiAgICAgID4ge30gYXMgdHlwZW9mIE9EYXRhQ29sbGVjdGlvbjtcbiAgICAgIENvbGxlY3Rpb24ubW9kZWwgPSB0aGlzLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICAgIC8vIFN0b3JlIE5ldyBDb2xsZWN0aW9uIGZvciBuZXh0IHRpbWVcbiAgICAgIHNjaGVtYS5jb2xsZWN0aW9uID0gQ29sbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIENvbGxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JUeXBlKHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JUeXBlKHR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIGlmICghKGVudGl0eVR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUuZW50aXR5U2V0KSlcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldFtlbnRpdHlUeXBlXSA9IHRoaXMuc2NoZW1hc1xuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChhY2MsIHNjaGVtYSkgPT4gWy4uLmFjYywgLi4uc2NoZW1hLmVudGl0eVNldHNdLFxuICAgICAgICAgIDxPRGF0YUVudGl0eVNldFtdPltdXG4gICAgICAgIClcbiAgICAgICAgLmZpbmQoKGUpID0+IGUuZW50aXR5VHlwZSA9PT0gZW50aXR5VHlwZSk7XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLmVudGl0eVNldFtlbnRpdHlUeXBlXSBhc1xuICAgICAgfCBPRGF0YUVudGl0eVNldFxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRFbnRpdHlTZXRGb3JFbnRpdHlUeXBlKGVudGl0eVR5cGUpPy5zZXJ2aWNlIGFzXG4gICAgICB8IHR5cGVvZiBPRGF0YUVudGl0eVNlcnZpY2VcbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtVHlwZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubWVtby5ieU5hbWUuZW51bSkpXG4gICAgICB0aGlzLm1lbW8uYnlOYW1lLmVudW1bbmFtZV0gPSB0aGlzLnNjaGVtYXNcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBzY2hlbWEpID0+IFsuLi5hY2MsIC4uLnNjaGVtYS5lbnVtc10sXG4gICAgICAgICAgPE9EYXRhRW51bVR5cGU8VD5bXT5bXVxuICAgICAgICApXG4gICAgICAgIC5maW5kKChlKSA9PiBlLm5hbWUgPT09IG5hbWUpO1xuICAgIHJldHVybiB0aGlzLm1lbW8uYnlOYW1lLmVudW1bbmFtZV0gYXMgT0RhdGFFbnVtVHlwZTxUPiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kU3RydWN0dXJlZFR5cGVCeU5hbWU8VD4obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCEobmFtZSBpbiB0aGlzLm1lbW8uYnlOYW1lLnN0cnVjdHVyZWQpKVxuICAgICAgdGhpcy5tZW1vLmJ5TmFtZS5zdHJ1Y3R1cmVkW25hbWVdID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXRpZXNdLFxuICAgICAgICAgIDxPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+W10+W11cbiAgICAgICAgKVxuICAgICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5zdHJ1Y3R1cmVkW25hbWVdIGFzXG4gICAgICB8IE9EYXRhU3RydWN0dXJlZFR5cGU8VD5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGZpbmRDYWxsYWJsZUJ5TmFtZTxUPihuYW1lOiBzdHJpbmcsIGJpbmRpbmdUeXBlPzogc3RyaW5nKSB7XG4gICAgY29uc3Qga2V5ID0gYmluZGluZ1R5cGUgIT09IHVuZGVmaW5lZCA/IGAke2JpbmRpbmdUeXBlfS8ke25hbWV9YCA6IG5hbWU7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMubWVtby5ieU5hbWUuY2FsbGFibGUpKVxuICAgICAgdGhpcy5tZW1vLmJ5TmFtZS5jYWxsYWJsZVtrZXldID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuY2FsbGFibGVzXSxcbiAgICAgICAgICA8T0RhdGFDYWxsYWJsZTxUPltdPltdXG4gICAgICAgIClcbiAgICAgICAgLmZpbmQoXG4gICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICBjLm5hbWUgPT09IG5hbWUgJiZcbiAgICAgICAgICAgIChiaW5kaW5nVHlwZSA9PT0gdW5kZWZpbmVkIHx8IGMuYmluZGluZygpPy50eXBlID09PSBiaW5kaW5nVHlwZSlcbiAgICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5jYWxsYWJsZVtrZXldIGFzIE9EYXRhQ2FsbGFibGU8VD4gfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEVudGl0eVNldEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubWVtby5ieU5hbWUuZW50aXR5U2V0KSlcbiAgICAgIHRoaXMubWVtby5ieU5hbWUuZW50aXR5U2V0W25hbWVdID0gdGhpcy5zY2hlbWFzXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2NoZW1hKSA9PiBbLi4uYWNjLCAuLi5zY2hlbWEuZW50aXR5U2V0c10sXG4gICAgICAgICAgPE9EYXRhRW50aXR5U2V0W10+W11cbiAgICAgICAgKVxuICAgICAgICAuZmluZCgoZSkgPT4gZS5uYW1lID09PSBuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5tZW1vLmJ5TmFtZS5lbnRpdHlTZXRbbmFtZV0gYXMgT0RhdGFFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZE1vZGVsQnlOYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZpbmRTdHJ1Y3R1cmVkVHlwZUJ5TmFtZTxhbnk+KG5hbWUpPy5tb2RlbCBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFNb2RlbFxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZENvbGxlY3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlQnlOYW1lPGFueT4obmFtZSk/LmNvbGxlY3Rpb24gYXNcbiAgICAgIHwgdHlwZW9mIE9EYXRhQ29sbGVjdGlvblxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZFNlcnZpY2VCeU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEVudGl0eVNldEJ5TmFtZShuYW1lKT8uc2VydmljZSBhc1xuICAgICAgfCB0eXBlb2YgT0RhdGFFbnRpdHlTZXJ2aWNlXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZXJGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZywgYmluZGluZ1R5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSBiaW5kaW5nVHlwZSAhPT0gdW5kZWZpbmVkID8gYCR7YmluZGluZ1R5cGV9LyR7dHlwZX1gIDogdHlwZTtcbiAgICBpZiAoIShrZXkgaW4gdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyKSkge1xuICAgICAgaWYgKHR5cGUgaW4gdGhpcy5wYXJzZXJzKSB7XG4gICAgICAgIC8vIEVkbSwgQmFzZSBQYXJzZXJzXG4gICAgICAgIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlcltrZXldID0gdGhpcy5wYXJzZXJzW3R5cGVdIGFzIFBhcnNlcjxUPjtcbiAgICAgIH0gZWxzZSBpZiAoIXR5cGUuc3RhcnRzV2l0aCgnRWRtLicpKSB7XG4gICAgICAgIC8vIEVudW1UeXBlLCBDb21wbGV4VHlwZSBhbmQgRW50aXR5VHlwZSBQYXJzZXJzXG4gICAgICAgIGxldCB2YWx1ZSA9XG4gICAgICAgICAgdGhpcy5maW5kQ2FsbGFibGVGb3JUeXBlPFQ+KHR5cGUsIGJpbmRpbmdUeXBlKSB8fFxuICAgICAgICAgIHRoaXMuZmluZEVudW1UeXBlRm9yVHlwZTxUPih0eXBlKSB8fFxuICAgICAgICAgIHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICAgICAgdGhpcy5tZW1vLmZvclR5cGUucGFyc2VyW2tleV0gPSB2YWx1ZT8ucGFyc2VyIGFzIFBhcnNlcjxUPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vbmUgUGFyc2VyXG4gICAgICAgIHRoaXMubWVtby5mb3JUeXBlLnBhcnNlcltrZXldID0gTk9ORV9QQVJTRVI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1lbW8uZm9yVHlwZS5wYXJzZXJba2V5XSBhcyBQYXJzZXI8VD47XG4gIH1cblxuICBwdWJsaWMgZmluZE9wdGlvbnNGb3JUeXBlPFQ+KHR5cGU6IHN0cmluZykge1xuICAgIC8vIFN0cnVjdXRyZWQgT3B0aW9uc1xuICAgIGlmICghKHR5cGUgaW4gdGhpcy5tZW1vLmZvclR5cGUub3B0aW9ucykpIHtcbiAgICAgIGxldCBzdCA9IHRoaXMuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlKTtcbiAgICAgIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnNbdHlwZV0gPVxuICAgICAgICBzdCAhPT0gdW5kZWZpbmVkICYmIHN0Lm1vZGVsICE9PSB1bmRlZmluZWQgJiYgc3QubW9kZWw/Lm1ldGEgIT09IG51bGxcbiAgICAgICAgICA/IHN0Lm1vZGVsLm1ldGFcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVtby5mb3JUeXBlLm9wdGlvbnNbdHlwZV0gYXMgT0RhdGFNb2RlbE9wdGlvbnM8VD4gfCB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
- import { CACHE_KEY_SEPARATOR, DEFAULT_TIMEOUT } from '../constants';
2
- import { PathSegmentNames } from '../types';
3
1
  import { of, throwError } from 'rxjs';
4
2
  import { startWith, tap } from 'rxjs/operators';
3
+ import { CACHE_KEY_SEPARATOR, DEFAULT_TIMEOUT } from '../constants';
4
+ import { PathSegmentNames } from '../types';
5
5
  export class ODataCache {
6
6
  constructor({ timeout = DEFAULT_TIMEOUT }) {
7
7
  this.timeout = timeout;
@@ -118,4 +118,4 @@ export class ODataCache {
118
118
  return res$;
119
119
  }
120
120
  }
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRSxPQUFPLEVBQVMsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbkQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVNoRCxNQUFNLE9BQWdCLFVBQVU7SUFJOUIsWUFBWSxFQUFFLE9BQU8sR0FBRyxlQUFlLEVBQXdCO1FBQzdELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWdDLENBQUM7SUFDekQsQ0FBQztJQUtELEtBQUssQ0FBQyxHQUFzQjtRQUMxQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDNUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDVCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsU0FBUztnQkFDdkMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBWSxDQUFDLENBQUM7WUFDckMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0QsQ0FBQyxTQUFTLENBQUMsQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxHQUFzQixFQUFFLEdBQXVCO1FB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LENBQUMsSUFBSSxRQUFRLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0FDSEVfS0VZX1NFUEFSQVRPUiwgREVGQVVMVF9USU1FT1VUIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENhY2hlLCBQYXRoU2VnbWVudE5hbWVzIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgT0RhdGFCYXRjaFJlc291cmNlLCBPRGF0YVJlcXVlc3QsIE9EYXRhUmVzcG9uc2UgfSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhQ2FjaGVFbnRyeTxUPiB7XG4gIHBheWxvYWQ6IFQ7XG4gIGxhc3RSZWFkOiBudW1iZXI7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgdGFnczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPRGF0YUNhY2hlIGltcGxlbWVudHMgQ2FjaGUge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIGVudHJpZXM6IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PjtcblxuICBjb25zdHJ1Y3Rvcih7IHRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQgfTogeyB0aW1lb3V0PzogbnVtYmVyIH0pIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhY2hlRW50cnk8YW55Pj4oKTtcbiAgfVxuXG4gIGFic3RyYWN0IGdldFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4pOiBPRGF0YVJlc3BvbnNlPGFueT4gfCB1bmRlZmluZWQ7XG4gIGFic3RyYWN0IHB1dFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sIHJlczogT0RhdGFSZXNwb25zZTxhbnk+KTogdm9pZDtcblxuICBzY29wZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcmVxLnJlc291cmNlLmNsb25lU2VnbWVudHMoKTtcbiAgICByZXR1cm4gc2VnbWVudHMuc2VnbWVudHMoeyBrZXk6IHRydWUgfSkucmVkdWNlKFxuICAgICAgKGFjYywgcykgPT4ge1xuICAgICAgICBpZiAocy5uYW1lID09PSBQYXRoU2VnbWVudE5hbWVzLmVudGl0eVNldClcbiAgICAgICAgICBhY2MgPSBbLi4uYWNjLCBzLnBhdGgoKSBhcyBzdHJpbmddO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFsncmVxdWVzdCddXG4gICAgKTtcbiAgfVxuXG4gIHRhZ3MocmVxOiBPRGF0YVJlcXVlc3Q8YW55PiwgcmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdGFncyA9IFtdO1xuICAgIGNvbnN0IGNvbnRleHQgPSByZXMuY29udGV4dDtcbiAgICBpZiAoY29udGV4dC5lbnRpdHlTZXQpIHtcbiAgICAgIHRhZ3MucHVzaChcbiAgICAgICAgY29udGV4dC5rZXkgPyBgJHtjb250ZXh0LmVudGl0eVNldH0oJHtjb250ZXh0LmtleX0pYCA6IGNvbnRleHQuZW50aXR5U2V0XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC50eXBlKSB0YWdzLnB1c2goY29udGV4dC50eXBlKTtcbiAgICByZXR1cm4gdGFncztcbiAgfVxuXG4gIGJ1aWxkRW50cnk8VD4oXG4gICAgcGF5bG9hZDogVCxcbiAgICB7IHRpbWVvdXQsIHRhZ3MgfTogeyB0aW1lb3V0PzogbnVtYmVyOyB0YWdzPzogc3RyaW5nW10gfVxuICApOiBPRGF0YUNhY2hlRW50cnk8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXlsb2FkLFxuICAgICAgbGFzdFJlYWQ6IERhdGUubm93KCksXG4gICAgICB0aW1lb3V0OiB0aW1lb3V0IHx8IHRoaXMudGltZW91dCxcbiAgICAgIHRhZ3M6IHRhZ3MgfHwgW10sXG4gICAgfTtcbiAgfVxuXG4gIGJ1aWxkS2V5KG5hbWVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWVzLmpvaW4oQ0FDSEVfS0VZX1NFUEFSQVRPUik7XG4gIH1cblxuICBwdXQ8VD4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBheWxvYWQ6IFQsXG4gICAge1xuICAgICAgdGltZW91dCxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9OiB7IHRpbWVvdXQ/OiBudW1iZXI7IHNjb3BlPzogc3RyaW5nW107IHRhZ3M/OiBzdHJpbmdbXSB9ID0ge31cbiAgKSB7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmJ1aWxkRW50cnk8VD4ocGF5bG9hZCwgeyB0aW1lb3V0LCB0YWdzIH0pO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRLZXkoWy4uLihzY29wZSB8fCBbXSksIG5hbWVdKTtcbiAgICB0aGlzLmVudHJpZXMuc2V0KGtleSwgZW50cnkpO1xuICAgIHRoaXMuZm9yZ2V0KCk7XG4gIH1cblxuICBnZXQ8VD4obmFtZTogc3RyaW5nLCB7IHNjb3BlIH06IHsgc2NvcGU/OiBzdHJpbmdbXSB9ID0ge30pOiBUIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KFsuLi4oc2NvcGUgfHwgW10pLCBuYW1lXSk7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNFeHBpcmVkKGVudHJ5KVxuICAgICAgPyBlbnRyeS5wYXlsb2FkXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvcmdldCh7XG4gICAgbmFtZSxcbiAgICBzY29wZSA9IFtdLFxuICAgIHRhZ3MgPSBbXSxcbiAgfTogeyBuYW1lPzogc3RyaW5nOyBzY29wZT86IHN0cmluZ1tdOyB0YWdzPzogc3RyaW5nW10gfSA9IHt9KSB7XG4gICAgLy8gUmVtb3ZlIGV4cGlyZWQgY2FjaGUgZW50cmllc1xuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHNjb3BlLnB1c2gobmFtZSk7XG4gICAgY29uc3Qga2V5ID0gc2NvcGUubGVuZ3RoID4gMCA/IHRoaXMuYnVpbGRLZXkoc2NvcGUpIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKChlbnRyeSwgaykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzRXhwaXJlZChlbnRyeSkgfHwgLy8gRXhwaXJlZFxuICAgICAgICAoa2V5ICE9PSB1bmRlZmluZWQgJiYgay5zdGFydHNXaXRoKGtleSkpIHx8IC8vIEtleVxuICAgICAgICAodGFncy5sZW5ndGggPiAwICYmIHRhZ3Muc29tZSgodCkgPT4gZW50cnkudGFncy5pbmRleE9mKHQpICE9PSAtMSkpIC8vIFRhZ3NcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVudHJpZXMuZGVsZXRlKGspO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZmx1c2goKSB7XG4gICAgLy8gUmVtb3ZlIGFsbCBjYWNoZSBlbnRyaWVzXG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PigpO1xuICB9XG5cbiAgaXNFeHBpcmVkKGVudHJ5OiBPRGF0YUNhY2hlRW50cnk8YW55Pikge1xuICAgIHJldHVybiBlbnRyeS5sYXN0UmVhZCA8IERhdGUubm93KCkgLSAoZW50cnkudGltZW91dCB8fCB0aGlzLnRpbWVvdXQpICogMTAwMDtcbiAgfVxuXG4gIGhhbmRsZVJlcXVlc3QoXG4gICAgcmVxOiBPRGF0YVJlcXVlc3Q8YW55PixcbiAgICByZXMkOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj5cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+IHtcbiAgICByZXR1cm4gcmVxLmlzRmV0Y2goKVxuICAgICAgPyB0aGlzLmhhbmRsZUZldGNoKHJlcSwgcmVzJClcbiAgICAgIDogcmVxLmlzTXV0YXRlKClcbiAgICAgID8gdGhpcy5oYW5kbGVNdXRhdGUocmVxLCByZXMkKVxuICAgICAgOiByZXMkO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGZXRjaChcbiAgICByZXE6IE9EYXRhUmVxdWVzdDxhbnk+LFxuICAgIHJlcyQ6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PlxuICApOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj4ge1xuICAgIGNvbnN0IHBvbGljeSA9IHJlcS5mZXRjaFBvbGljeTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmdldFJlc3BvbnNlKHJlcSk7XG4gICAgaWYgKHBvbGljeSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgcmV0dXJuIHJlcyQ7XG4gICAgfVxuICAgIGlmIChwb2xpY3kgPT09ICdjYWNoZS1vbmx5Jykge1xuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICByZXR1cm4gb2YoY2FjaGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdObyBDYWNoZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgcG9saWN5ID09PSAnY2FjaGUtZmlyc3QnIHx8XG4gICAgICBwb2xpY3kgPT09ICdjYWNoZS1hbmQtbmV0d29yaycgfHxcbiAgICAgIHBvbGljeSA9PT0gJ25ldHdvcmstb25seSdcbiAgICApIHtcbiAgICAgIHJlcyQgPSByZXMkLnBpcGUoXG4gICAgICAgIHRhcCgocmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pID0+IHtcbiAgICAgICAgICBpZiAocmVzLm9wdGlvbnMuY2FjaGVhYmlsaXR5ICE9PSAnbm8tc3RvcmUnKVxuICAgICAgICAgICAgdGhpcy5wdXRSZXNwb25zZShyZXEsIHJlcyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgJiYgcG9saWN5ICE9PSAnbmV0d29yay1vbmx5J1xuICAgICAgPyBwb2xpY3kgPT09ICdjYWNoZS1hbmQtbmV0d29yaydcbiAgICAgICAgPyByZXMkLnBpcGUoc3RhcnRXaXRoKGNhY2hlZCkpXG4gICAgICAgIDogb2YoY2FjaGVkKVxuICAgICAgOiByZXMkO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNdXRhdGUoXG4gICAgcmVxOiBPRGF0YVJlcXVlc3Q8YW55PixcbiAgICByZXMkOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj5cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+IHtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHJlcS5pc0JhdGNoKClcbiAgICAgID8gKHJlcS5yZXNvdXJjZSBhcyBPRGF0YUJhdGNoUmVzb3VyY2UpXG4gICAgICAgICAgLnJlcXVlc3RzKClcbiAgICAgICAgICAuZmlsdGVyKChyKSA9PiByLmlzTXV0YXRlKCkpXG4gICAgICA6IFtyZXFdO1xuICAgIGZvciAodmFyIHIgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZShyKTtcbiAgICAgIHRoaXMuZm9yZ2V0KHsgc2NvcGUgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXMkO1xuICB9XG59XG4iXX0=
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvY2FjaGUvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXBFLE9BQU8sRUFBUyxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVNuRCxNQUFNLE9BQWdCLFVBQVU7SUFJOUIsWUFBWSxFQUFFLE9BQU8sR0FBRyxlQUFlLEVBQXdCO1FBQzdELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWdDLENBQUM7SUFDekQsQ0FBQztJQUtELEtBQUssQ0FBQyxHQUFzQjtRQUMxQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDNUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDVCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsU0FBUztnQkFDdkMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBWSxDQUFDLENBQUM7WUFDckMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQ0QsQ0FBQyxTQUFTLENBQUMsQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxHQUFzQixFQUFFLEdBQXVCO1FB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LENBQUMsSUFBSSxRQUFRLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUN4QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ0FDSEVfS0VZX1NFUEFSQVRPUiwgREVGQVVMVF9USU1FT1VUIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhQmF0Y2hSZXNvdXJjZSwgT0RhdGFSZXF1ZXN0LCBPRGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IENhY2hlLCBQYXRoU2VnbWVudE5hbWVzIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhQ2FjaGVFbnRyeTxUPiB7XG4gIHBheWxvYWQ6IFQ7XG4gIGxhc3RSZWFkOiBudW1iZXI7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgdGFnczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPRGF0YUNhY2hlIGltcGxlbWVudHMgQ2FjaGUge1xuICB0aW1lb3V0OiBudW1iZXI7XG4gIGVudHJpZXM6IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PjtcblxuICBjb25zdHJ1Y3Rvcih7IHRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQgfTogeyB0aW1lb3V0PzogbnVtYmVyIH0pIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhY2hlRW50cnk8YW55Pj4oKTtcbiAgfVxuXG4gIGFic3RyYWN0IGdldFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4pOiBPRGF0YVJlc3BvbnNlPGFueT4gfCB1bmRlZmluZWQ7XG4gIGFic3RyYWN0IHB1dFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sIHJlczogT0RhdGFSZXNwb25zZTxhbnk+KTogdm9pZDtcblxuICBzY29wZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcmVxLnJlc291cmNlLmNsb25lU2VnbWVudHMoKTtcbiAgICByZXR1cm4gc2VnbWVudHMuc2VnbWVudHMoeyBrZXk6IHRydWUgfSkucmVkdWNlKFxuICAgICAgKGFjYywgcykgPT4ge1xuICAgICAgICBpZiAocy5uYW1lID09PSBQYXRoU2VnbWVudE5hbWVzLmVudGl0eVNldClcbiAgICAgICAgICBhY2MgPSBbLi4uYWNjLCBzLnBhdGgoKSBhcyBzdHJpbmddO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIFsncmVxdWVzdCddXG4gICAgKTtcbiAgfVxuXG4gIHRhZ3MocmVxOiBPRGF0YVJlcXVlc3Q8YW55PiwgcmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdGFncyA9IFtdO1xuICAgIGNvbnN0IGNvbnRleHQgPSByZXMuY29udGV4dDtcbiAgICBpZiAoY29udGV4dC5lbnRpdHlTZXQpIHtcbiAgICAgIHRhZ3MucHVzaChcbiAgICAgICAgY29udGV4dC5rZXkgPyBgJHtjb250ZXh0LmVudGl0eVNldH0oJHtjb250ZXh0LmtleX0pYCA6IGNvbnRleHQuZW50aXR5U2V0XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC50eXBlKSB0YWdzLnB1c2goY29udGV4dC50eXBlKTtcbiAgICByZXR1cm4gdGFncztcbiAgfVxuXG4gIGJ1aWxkRW50cnk8VD4oXG4gICAgcGF5bG9hZDogVCxcbiAgICB7IHRpbWVvdXQsIHRhZ3MgfTogeyB0aW1lb3V0PzogbnVtYmVyOyB0YWdzPzogc3RyaW5nW10gfVxuICApOiBPRGF0YUNhY2hlRW50cnk8VD4ge1xuICAgIHJldHVybiB7XG4gICAgICBwYXlsb2FkLFxuICAgICAgbGFzdFJlYWQ6IERhdGUubm93KCksXG4gICAgICB0aW1lb3V0OiB0aW1lb3V0IHx8IHRoaXMudGltZW91dCxcbiAgICAgIHRhZ3M6IHRhZ3MgfHwgW10sXG4gICAgfTtcbiAgfVxuXG4gIGJ1aWxkS2V5KG5hbWVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWVzLmpvaW4oQ0FDSEVfS0VZX1NFUEFSQVRPUik7XG4gIH1cblxuICBwdXQ8VD4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBheWxvYWQ6IFQsXG4gICAge1xuICAgICAgdGltZW91dCxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9OiB7IHRpbWVvdXQ/OiBudW1iZXI7IHNjb3BlPzogc3RyaW5nW107IHRhZ3M/OiBzdHJpbmdbXSB9ID0ge31cbiAgKSB7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmJ1aWxkRW50cnk8VD4ocGF5bG9hZCwgeyB0aW1lb3V0LCB0YWdzIH0pO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuYnVpbGRLZXkoWy4uLihzY29wZSB8fCBbXSksIG5hbWVdKTtcbiAgICB0aGlzLmVudHJpZXMuc2V0KGtleSwgZW50cnkpO1xuICAgIHRoaXMuZm9yZ2V0KCk7XG4gIH1cblxuICBnZXQ8VD4obmFtZTogc3RyaW5nLCB7IHNjb3BlIH06IHsgc2NvcGU/OiBzdHJpbmdbXSB9ID0ge30pOiBUIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmJ1aWxkS2V5KFsuLi4oc2NvcGUgfHwgW10pLCBuYW1lXSk7XG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuaXNFeHBpcmVkKGVudHJ5KVxuICAgICAgPyBlbnRyeS5wYXlsb2FkXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvcmdldCh7XG4gICAgbmFtZSxcbiAgICBzY29wZSA9IFtdLFxuICAgIHRhZ3MgPSBbXSxcbiAgfTogeyBuYW1lPzogc3RyaW5nOyBzY29wZT86IHN0cmluZ1tdOyB0YWdzPzogc3RyaW5nW10gfSA9IHt9KSB7XG4gICAgLy8gUmVtb3ZlIGV4cGlyZWQgY2FjaGUgZW50cmllc1xuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHNjb3BlLnB1c2gobmFtZSk7XG4gICAgY29uc3Qga2V5ID0gc2NvcGUubGVuZ3RoID4gMCA/IHRoaXMuYnVpbGRLZXkoc2NvcGUpIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKChlbnRyeSwgaykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzRXhwaXJlZChlbnRyeSkgfHwgLy8gRXhwaXJlZFxuICAgICAgICAoa2V5ICE9PSB1bmRlZmluZWQgJiYgay5zdGFydHNXaXRoKGtleSkpIHx8IC8vIEtleVxuICAgICAgICAodGFncy5sZW5ndGggPiAwICYmIHRhZ3Muc29tZSgodCkgPT4gZW50cnkudGFncy5pbmRleE9mKHQpICE9PSAtMSkpIC8vIFRhZ3NcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVudHJpZXMuZGVsZXRlKGspO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZmx1c2goKSB7XG4gICAgLy8gUmVtb3ZlIGFsbCBjYWNoZSBlbnRyaWVzXG4gICAgdGhpcy5lbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIE9EYXRhQ2FjaGVFbnRyeTxhbnk+PigpO1xuICB9XG5cbiAgaXNFeHBpcmVkKGVudHJ5OiBPRGF0YUNhY2hlRW50cnk8YW55Pikge1xuICAgIHJldHVybiBlbnRyeS5sYXN0UmVhZCA8IERhdGUubm93KCkgLSAoZW50cnkudGltZW91dCB8fCB0aGlzLnRpbWVvdXQpICogMTAwMDtcbiAgfVxuXG4gIGhhbmRsZVJlcXVlc3QoXG4gICAgcmVxOiBPRGF0YVJlcXVlc3Q8YW55PixcbiAgICByZXMkOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj5cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+IHtcbiAgICByZXR1cm4gcmVxLmlzRmV0Y2goKVxuICAgICAgPyB0aGlzLmhhbmRsZUZldGNoKHJlcSwgcmVzJClcbiAgICAgIDogcmVxLmlzTXV0YXRlKClcbiAgICAgID8gdGhpcy5oYW5kbGVNdXRhdGUocmVxLCByZXMkKVxuICAgICAgOiByZXMkO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGZXRjaChcbiAgICByZXE6IE9EYXRhUmVxdWVzdDxhbnk+LFxuICAgIHJlcyQ6IE9ic2VydmFibGU8T0RhdGFSZXNwb25zZTxhbnk+PlxuICApOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj4ge1xuICAgIGNvbnN0IHBvbGljeSA9IHJlcS5mZXRjaFBvbGljeTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmdldFJlc3BvbnNlKHJlcSk7XG4gICAgaWYgKHBvbGljeSA9PT0gJ25vLWNhY2hlJykge1xuICAgICAgcmV0dXJuIHJlcyQ7XG4gICAgfVxuICAgIGlmIChwb2xpY3kgPT09ICdjYWNoZS1vbmx5Jykge1xuICAgICAgaWYgKGNhY2hlZCkge1xuICAgICAgICByZXR1cm4gb2YoY2FjaGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdObyBDYWNoZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgcG9saWN5ID09PSAnY2FjaGUtZmlyc3QnIHx8XG4gICAgICBwb2xpY3kgPT09ICdjYWNoZS1hbmQtbmV0d29yaycgfHxcbiAgICAgIHBvbGljeSA9PT0gJ25ldHdvcmstb25seSdcbiAgICApIHtcbiAgICAgIHJlcyQgPSByZXMkLnBpcGUoXG4gICAgICAgIHRhcCgocmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pID0+IHtcbiAgICAgICAgICBpZiAocmVzLm9wdGlvbnMuY2FjaGVhYmlsaXR5ICE9PSAnbm8tc3RvcmUnKVxuICAgICAgICAgICAgdGhpcy5wdXRSZXNwb25zZShyZXEsIHJlcyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgJiYgcG9saWN5ICE9PSAnbmV0d29yay1vbmx5J1xuICAgICAgPyBwb2xpY3kgPT09ICdjYWNoZS1hbmQtbmV0d29yaydcbiAgICAgICAgPyByZXMkLnBpcGUoc3RhcnRXaXRoKGNhY2hlZCkpXG4gICAgICAgIDogb2YoY2FjaGVkKVxuICAgICAgOiByZXMkO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNdXRhdGUoXG4gICAgcmVxOiBPRGF0YVJlcXVlc3Q8YW55PixcbiAgICByZXMkOiBPYnNlcnZhYmxlPE9EYXRhUmVzcG9uc2U8YW55Pj5cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YVJlc3BvbnNlPGFueT4+IHtcbiAgICBjb25zdCByZXF1ZXN0cyA9IHJlcS5pc0JhdGNoKClcbiAgICAgID8gKHJlcS5yZXNvdXJjZSBhcyBPRGF0YUJhdGNoUmVzb3VyY2UpXG4gICAgICAgICAgLnJlcXVlc3RzKClcbiAgICAgICAgICAuZmlsdGVyKChyKSA9PiByLmlzTXV0YXRlKCkpXG4gICAgICA6IFtyZXFdO1xuICAgIGZvciAodmFyIHIgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZShyKTtcbiAgICAgIHRoaXMuZm9yZ2V0KHsgc2NvcGUgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXMkO1xuICB9XG59XG4iXX0=
@@ -17,4 +17,4 @@ export class ODataInMemoryCache extends ODataCache {
17
17
  return this.get(req.pathWithParams, { scope });
18
18
  }
19
19
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2NhY2hlL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxVQUFVO0lBQ2hELFlBQVksRUFBRSxPQUFPLEtBQTJCLEVBQUU7UUFDaEQsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQXNCLEVBQUUsR0FBdUI7UUFDekQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1lBQ2hDLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDM0IsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQXNCO1FBQ2hDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT0RhdGFSZXF1ZXN0LCBPRGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuaW1wb3J0IHsgT0RhdGFDYWNoZSB9IGZyb20gJy4vY2FjaGUnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFJbk1lbW9yeUNhY2hlIGV4dGVuZHMgT0RhdGFDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKHsgdGltZW91dCB9OiB7IHRpbWVvdXQ/OiBudW1iZXIgfSA9IHt9KSB7XG4gICAgc3VwZXIoeyB0aW1lb3V0IH0pO1xuICB9XG5cbiAgcHV0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55PiwgcmVzOiBPRGF0YVJlc3BvbnNlPGFueT4pIHtcbiAgICB2YXIgc2NvcGUgPSB0aGlzLnNjb3BlKHJlcSk7XG4gICAgdmFyIHRhZ3MgPSB0aGlzLnRhZ3MocmVxLCByZXMpO1xuICAgIHRoaXMucHV0KHJlcS5wYXRoV2l0aFBhcmFtcywgcmVzLCB7XG4gICAgICB0aW1lb3V0OiByZXMub3B0aW9ucy5tYXhBZ2UsXG4gICAgICBzY29wZSxcbiAgICAgIHRhZ3MsXG4gICAgfSk7XG4gIH1cblxuICBnZXRSZXNwb25zZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+KTogT0RhdGFSZXNwb25zZTxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICB2YXIgc2NvcGUgPSB0aGlzLnNjb3BlKHJlcSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KHJlcS5wYXRoV2l0aFBhcmFtcywgeyBzY29wZSB9KTtcbiAgfVxufVxuIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL2NhY2hlL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxVQUFVO0lBQ2hELFlBQVksRUFBRSxPQUFPLEtBQTJCLEVBQUU7UUFDaEQsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQXNCLEVBQUUsR0FBdUI7UUFDekQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1lBQ2hDLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDM0IsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQXNCO1FBQ2hDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgT0RhdGFSZXF1ZXN0LCBPRGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IE9EYXRhQ2FjaGUgfSBmcm9tICcuL2NhY2hlJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhSW5NZW1vcnlDYWNoZSBleHRlbmRzIE9EYXRhQ2FjaGUge1xuICBjb25zdHJ1Y3Rvcih7IHRpbWVvdXQgfTogeyB0aW1lb3V0PzogbnVtYmVyIH0gPSB7fSkge1xuICAgIHN1cGVyKHsgdGltZW91dCB9KTtcbiAgfVxuXG4gIHB1dFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4sIHJlczogT0RhdGFSZXNwb25zZTxhbnk+KSB7XG4gICAgdmFyIHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIHZhciB0YWdzID0gdGhpcy50YWdzKHJlcSwgcmVzKTtcbiAgICB0aGlzLnB1dChyZXEucGF0aFdpdGhQYXJhbXMsIHJlcywge1xuICAgICAgdGltZW91dDogcmVzLm9wdGlvbnMubWF4QWdlLFxuICAgICAgc2NvcGUsXG4gICAgICB0YWdzLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0UmVzcG9uc2UocmVxOiBPRGF0YVJlcXVlc3Q8YW55Pik6IE9EYXRhUmVzcG9uc2U8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgdmFyIHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIHJldHVybiB0aGlzLmdldChyZXEucGF0aFdpdGhQYXJhbXMsIHsgc2NvcGUgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
- import { ODataCache } from './cache';
2
1
  import { ODataResponse } from '../resources';
2
+ import { ODataCache } from './cache';
3
3
  export class ODataInStorageCache extends ODataCache {
4
4
  constructor({ name, storage = sessionStorage, timeout, }) {
5
5
  super({ timeout });
@@ -33,4 +33,4 @@ export class ODataInStorageCache extends ODataCache {
33
33
  return data !== undefined ? ODataResponse.fromJSON(req, data) : undefined;
34
34
  }
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9jYWNoZS9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBQ3RELE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBVTNELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFVO0lBSWpELFlBQVksRUFDVixJQUFJLEVBQ0osT0FBTyxHQUFHLGNBQWMsRUFDeEIsT0FBTyxHQUtSO1FBQ0MsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFzQixFQUFFLEdBQXVCO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2RCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQzNCLEtBQUs7WUFDTCxJQUFJO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFzQjtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQWUsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbkUsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzVFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9EYXRhQ2FjaGUsIE9EYXRhQ2FjaGVFbnRyeSB9IGZyb20gJy4vY2FjaGUnO1xuaW1wb3J0IHsgT0RhdGFSZXF1ZXN0LCBPRGF0YVJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuaW50ZXJmYWNlIFJlc3BvbnNlSnNvbiB7XG4gIGJvZHk6IGFueSB8IG51bGw7XG4gIGhlYWRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH07XG4gIHN0YXR1czogbnVtYmVyO1xuICBzdGF0dXNUZXh0OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhSW5TdG9yYWdlQ2FjaGUgZXh0ZW5kcyBPRGF0YUNhY2hlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzdG9yYWdlOiBTdG9yYWdlO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBuYW1lLFxuICAgIHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZSxcbiAgICB0aW1lb3V0LFxuICB9OiB7XG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc3RvcmFnZT86IFN0b3JhZ2U7XG4gIH0pIHtcbiAgICBzdXBlcih7IHRpbWVvdXQgfSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlO1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoKSA9PiB0aGlzLnN0b3JlKCkpO1xuICB9XG5cbiAgc3RvcmUoKSB7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuZW50cmllcy5lbnRyaWVzKCkpKVxuICAgICk7XG4gIH1cblxuICByZXN0b3JlKCkge1xuICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhY2hlRW50cnk8YW55Pj4oXG4gICAgICBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMubmFtZSkgfHwgJ1tdJylcbiAgICApO1xuICB9XG5cbiAgZmx1c2goKSB7XG4gICAgc3VwZXIuZmx1c2goKTtcbiAgICB0aGlzLnN0b3JlKCk7XG4gIH1cblxuICBwdXRSZXNwb25zZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+LCByZXM6IE9EYXRhUmVzcG9uc2U8YW55Pikge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLnRhZ3MocmVxLCByZXMpO1xuICAgIHRoaXMucHV0PFJlc3BvbnNlSnNvbj4ocmVxLnBhdGhXaXRoUGFyYW1zLCByZXMudG9KU09OKCksIHtcbiAgICAgIHRpbWVvdXQ6IHJlcy5vcHRpb25zLm1heEFnZSxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4pOiBPRGF0YVJlc3BvbnNlPGFueT4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldDxSZXNwb25zZUpzb24+KHJlcS5wYXRoV2l0aFBhcmFtcywgeyBzY29wZSB9KTtcblxuICAgIHJldHVybiBkYXRhICE9PSB1bmRlZmluZWQgPyBPRGF0YVJlc3BvbnNlLmZyb21KU09OKHJlcSwgZGF0YSkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9jYWNoZS9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sU0FBUyxDQUFDO0FBVXRELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxVQUFVO0lBSWpELFlBQVksRUFDVixJQUFJLEVBQ0osT0FBTyxHQUFHLGNBQWMsRUFDeEIsT0FBTyxHQUtSO1FBQ0MsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFUSxLQUFLO1FBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFzQixFQUFFLEdBQXVCO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBZSxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2RCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQzNCLEtBQUs7WUFDTCxJQUFJO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFzQjtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQWUsR0FBRyxDQUFDLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbkUsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzVFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9EYXRhUmVxdWVzdCwgT0RhdGFSZXNwb25zZSB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBPRGF0YUNhY2hlLCBPRGF0YUNhY2hlRW50cnkgfSBmcm9tICcuL2NhY2hlJztcblxuaW50ZXJmYWNlIFJlc3BvbnNlSnNvbiB7XG4gIGJvZHk6IGFueSB8IG51bGw7XG4gIGhlYWRlcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdIH07XG4gIHN0YXR1czogbnVtYmVyO1xuICBzdGF0dXNUZXh0OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhSW5TdG9yYWdlQ2FjaGUgZXh0ZW5kcyBPRGF0YUNhY2hlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzdG9yYWdlOiBTdG9yYWdlO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBuYW1lLFxuICAgIHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZSxcbiAgICB0aW1lb3V0LFxuICB9OiB7XG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc3RvcmFnZT86IFN0b3JhZ2U7XG4gIH0pIHtcbiAgICBzdXBlcih7IHRpbWVvdXQgfSk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnN0b3JhZ2UgPSBzdG9yYWdlO1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoKSA9PiB0aGlzLnN0b3JlKCkpO1xuICB9XG5cbiAgc3RvcmUoKSB7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuZW50cmllcy5lbnRyaWVzKCkpKVxuICAgICk7XG4gIH1cblxuICByZXN0b3JlKCkge1xuICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBPRGF0YUNhY2hlRW50cnk8YW55Pj4oXG4gICAgICBKU09OLnBhcnNlKHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMubmFtZSkgfHwgJ1tdJylcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgZmx1c2goKSB7XG4gICAgc3VwZXIuZmx1c2goKTtcbiAgICB0aGlzLnN0b3JlKCk7XG4gIH1cblxuICBwdXRSZXNwb25zZShyZXE6IE9EYXRhUmVxdWVzdDxhbnk+LCByZXM6IE9EYXRhUmVzcG9uc2U8YW55Pikge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLnRhZ3MocmVxLCByZXMpO1xuICAgIHRoaXMucHV0PFJlc3BvbnNlSnNvbj4ocmVxLnBhdGhXaXRoUGFyYW1zLCByZXMudG9KU09OKCksIHtcbiAgICAgIHRpbWVvdXQ6IHJlcy5vcHRpb25zLm1heEFnZSxcbiAgICAgIHNjb3BlLFxuICAgICAgdGFncyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFJlc3BvbnNlKHJlcTogT0RhdGFSZXF1ZXN0PGFueT4pOiBPRGF0YVJlc3BvbnNlPGFueT4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZShyZXEpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldDxSZXNwb25zZUpzb24+KHJlcS5wYXRoV2l0aFBhcmFtcywgeyBzY29wZSB9KTtcblxuICAgIHJldHVybiBkYXRhICE9PSB1bmRlZmluZWQgPyBPRGF0YVJlc3BvbnNlLmZyb21KU09OKHJlcSwgZGF0YSkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==