angular-odata 0.92.0 → 0.95.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
  2. package/esm2020/lib/api.mjs +303 -0
  3. package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +3 -3
  4. package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
  5. package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +1 -1
  6. package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +2 -2
  7. package/esm2020/lib/client.mjs +271 -0
  8. package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +3 -1
  9. package/esm2020/lib/helper.mjs +268 -0
  10. package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
  11. package/esm2020/lib/models/collection.mjs +741 -0
  12. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  13. package/esm2020/lib/models/model.mjs +453 -0
  14. package/esm2020/lib/models/options.mjs +945 -0
  15. package/{esm2015/lib/module.js → esm2020/lib/module.mjs} +7 -7
  16. package/esm2020/lib/options.mjs +32 -0
  17. package/{esm2015/lib/resources/index.js → esm2020/lib/resources/index.mjs} +0 -0
  18. package/{esm2015/lib/resources/path/handlers.js → esm2020/lib/resources/path/handlers.mjs} +1 -1
  19. package/{esm2015/lib/resources/path/index.js → esm2020/lib/resources/path/index.mjs} +0 -0
  20. package/esm2020/lib/resources/path/segments.mjs +124 -0
  21. package/esm2020/lib/resources/query/builder.mjs +590 -0
  22. package/esm2020/lib/resources/query/expressions.mjs +207 -0
  23. package/esm2020/lib/resources/query/handlers.mjs +186 -0
  24. package/{esm2015/lib/resources/query/index.js → esm2020/lib/resources/query/index.mjs} +0 -0
  25. package/esm2020/lib/resources/query/options.mjs +103 -0
  26. package/esm2020/lib/resources/query/syntax.mjs +406 -0
  27. package/esm2020/lib/resources/request.mjs +167 -0
  28. package/esm2020/lib/resources/resource.mjs +326 -0
  29. package/esm2020/lib/resources/responses/annotations.mjs +119 -0
  30. package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
  31. package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
  32. package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
  33. package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
  34. package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
  35. package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
  36. package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
  37. package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
  38. package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
  39. package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
  40. package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
  41. package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
  42. package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
  43. package/esm2020/lib/resources/responses/metadata.mjs +547 -0
  44. package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +0 -0
  45. package/{esm2015/lib/resources/responses/response.js → esm2020/lib/resources/responses/response.mjs} +0 -0
  46. package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +0 -0
  47. package/esm2020/lib/resources/types/action.mjs +101 -0
  48. package/esm2020/lib/resources/types/batch.mjs +288 -0
  49. package/esm2020/lib/resources/types/count.mjs +27 -0
  50. package/esm2020/lib/resources/types/entity-set.mjs +94 -0
  51. package/esm2020/lib/resources/types/entity.mjs +106 -0
  52. package/esm2020/lib/resources/types/function.mjs +137 -0
  53. package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
  54. package/esm2020/lib/resources/types/media.mjs +41 -0
  55. package/esm2020/lib/resources/types/metadata.mjs +30 -0
  56. package/esm2020/lib/resources/types/navigation-property.mjs +226 -0
  57. package/esm2020/lib/resources/types/options.mjs +2 -0
  58. package/esm2020/lib/resources/types/property.mjs +183 -0
  59. package/esm2020/lib/resources/types/reference.mjs +85 -0
  60. package/esm2020/lib/resources/types/singleton.mjs +126 -0
  61. package/esm2020/lib/resources/types/value.mjs +41 -0
  62. package/esm2020/lib/schema/annotation.mjs +37 -0
  63. package/esm2020/lib/schema/callable.mjs +62 -0
  64. package/esm2020/lib/schema/element.mjs +51 -0
  65. package/esm2020/lib/schema/entity-container.mjs +9 -0
  66. package/esm2020/lib/schema/entity-set.mjs +9 -0
  67. package/esm2020/lib/schema/enum-type.mjs +71 -0
  68. package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +0 -0
  69. package/esm2020/lib/schema/parsers/callable.mjs +113 -0
  70. package/{esm2015/lib/schema/parsers/edm.js → esm2020/lib/schema/parsers/edm.mjs} +2 -2
  71. package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
  72. package/{esm2015/lib/schema/parsers/index.js → esm2020/lib/schema/parsers/index.mjs} +0 -0
  73. package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
  74. package/esm2020/lib/schema/schema.mjs +61 -0
  75. package/esm2020/lib/schema/structured-type.mjs +198 -0
  76. package/esm2020/lib/services/base.mjs +29 -0
  77. package/esm2020/lib/services/entity-set.mjs +143 -0
  78. package/esm2020/lib/services/entity.mjs +12 -0
  79. package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
  80. package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
  81. package/{esm2015/lib/services/singleton.js → esm2020/lib/services/singleton.mjs} +1 -1
  82. package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
  83. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  84. package/esm2020/lib/types.mjs +37 -0
  85. package/{esm2015/lib/utils/arraybuffers.js → esm2020/lib/utils/arraybuffers.mjs} +0 -0
  86. package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
  87. package/{esm2015/lib/utils/durations.js → esm2020/lib/utils/durations.mjs} +0 -0
  88. package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
  89. package/{esm2015/lib/utils/http.js → esm2020/lib/utils/http.mjs} +0 -0
  90. package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
  91. package/{esm2015/lib/utils/objects.js → esm2020/lib/utils/objects.mjs} +0 -0
  92. package/esm2020/lib/utils/odata.mjs +22 -0
  93. package/{esm2015/lib/utils/strings.js → esm2020/lib/utils/strings.mjs} +0 -0
  94. package/{esm2015/lib/utils/types.js → esm2020/lib/utils/types.mjs} +0 -0
  95. package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
  96. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  97. package/fesm2015/{angular-odata.js → angular-odata.mjs} +849 -750
  98. package/fesm2015/angular-odata.mjs.map +1 -0
  99. package/fesm2020/angular-odata.mjs +10274 -0
  100. package/fesm2020/angular-odata.mjs.map +1 -0
  101. package/lib/api.d.ts +10 -10
  102. package/lib/cache/cache.d.ts +2 -2
  103. package/lib/cache/storage.d.ts +1 -1
  104. package/lib/client.d.ts +3 -3
  105. package/lib/constants.d.ts +1 -0
  106. package/lib/models/collection.d.ts +11 -19
  107. package/lib/models/model.d.ts +22 -18
  108. package/lib/models/options.d.ts +16 -21
  109. package/lib/module.d.ts +1 -1
  110. package/lib/options.d.ts +1 -0
  111. package/lib/resources/path/segments.d.ts +1 -1
  112. package/lib/resources/query/expressions.d.ts +37 -27
  113. package/lib/resources/query/handlers.d.ts +7 -11
  114. package/lib/resources/query/options.d.ts +2 -2
  115. package/lib/resources/query/syntax.d.ts +52 -54
  116. package/lib/resources/request.d.ts +1 -1
  117. package/lib/resources/resource.d.ts +25 -8
  118. package/lib/resources/types/action.d.ts +12 -19
  119. package/lib/resources/types/batch.d.ts +1 -3
  120. package/lib/resources/types/count.d.ts +5 -4
  121. package/lib/resources/types/entity-set.d.ts +11 -15
  122. package/lib/resources/types/entity.d.ts +12 -15
  123. package/lib/resources/types/function.d.ts +11 -18
  124. package/lib/resources/types/media.d.ts +6 -5
  125. package/lib/resources/types/metadata.d.ts +3 -5
  126. package/lib/resources/types/navigation-property.d.ts +15 -21
  127. package/lib/resources/types/property.d.ts +13 -19
  128. package/lib/resources/types/reference.d.ts +39 -6
  129. package/lib/resources/types/singleton.d.ts +12 -16
  130. package/lib/resources/types/value.d.ts +9 -5
  131. package/lib/schema/{base.d.ts → annotation.d.ts} +0 -0
  132. package/lib/schema/callable.d.ts +2 -18
  133. package/lib/schema/element.d.ts +39 -0
  134. package/lib/schema/entity-container.d.ts +2 -12
  135. package/lib/schema/entity-set.d.ts +2 -18
  136. package/lib/schema/enum-type.d.ts +2 -26
  137. package/lib/schema/parsers/enum-type.d.ts +4 -4
  138. package/lib/schema/parsers/structured-type.d.ts +4 -4
  139. package/lib/schema/schema.d.ts +2 -2
  140. package/lib/schema/structured-type.d.ts +8 -26
  141. package/lib/services/base.d.ts +2 -2
  142. package/lib/services/entity-set.d.ts +2 -2
  143. package/lib/services/entity.d.ts +1 -1
  144. package/lib/services/singleton.d.ts +2 -2
  145. package/lib/settings.d.ts +5 -5
  146. package/lib/types.d.ts +1 -0
  147. package/package.json +21 -8
  148. package/bundles/angular-odata.umd.js +0 -11861
  149. package/bundles/angular-odata.umd.js.map +0 -1
  150. package/esm2015/lib/api.js +0 -296
  151. package/esm2015/lib/client.js +0 -272
  152. package/esm2015/lib/helper.js +0 -268
  153. package/esm2015/lib/models/collection.js +0 -734
  154. package/esm2015/lib/models/model.js +0 -438
  155. package/esm2015/lib/models/options.js +0 -942
  156. package/esm2015/lib/options.js +0 -31
  157. package/esm2015/lib/resources/path/segments.js +0 -124
  158. package/esm2015/lib/resources/query/builder.js +0 -591
  159. package/esm2015/lib/resources/query/expressions.js +0 -194
  160. package/esm2015/lib/resources/query/handlers.js +0 -192
  161. package/esm2015/lib/resources/query/options.js +0 -103
  162. package/esm2015/lib/resources/query/syntax.js +0 -367
  163. package/esm2015/lib/resources/request.js +0 -168
  164. package/esm2015/lib/resources/resource.js +0 -243
  165. package/esm2015/lib/resources/responses/annotations.js +0 -121
  166. package/esm2015/lib/resources/responses/metadata.js +0 -548
  167. package/esm2015/lib/resources/types/action.js +0 -105
  168. package/esm2015/lib/resources/types/batch.js +0 -294
  169. package/esm2015/lib/resources/types/count.js +0 -33
  170. package/esm2015/lib/resources/types/entity-set.js +0 -101
  171. package/esm2015/lib/resources/types/entity.js +0 -137
  172. package/esm2015/lib/resources/types/function.js +0 -130
  173. package/esm2015/lib/resources/types/media.js +0 -47
  174. package/esm2015/lib/resources/types/metadata.js +0 -36
  175. package/esm2015/lib/resources/types/navigation-property.js +0 -205
  176. package/esm2015/lib/resources/types/options.js +0 -2
  177. package/esm2015/lib/resources/types/property.js +0 -151
  178. package/esm2015/lib/resources/types/reference.js +0 -74
  179. package/esm2015/lib/resources/types/singleton.js +0 -167
  180. package/esm2015/lib/resources/types/value.js +0 -35
  181. package/esm2015/lib/schema/base.js +0 -37
  182. package/esm2015/lib/schema/callable.js +0 -82
  183. package/esm2015/lib/schema/entity-container.js +0 -24
  184. package/esm2015/lib/schema/entity-set.js +0 -35
  185. package/esm2015/lib/schema/enum-type.js +0 -102
  186. package/esm2015/lib/schema/parsers/callable.js +0 -107
  187. package/esm2015/lib/schema/parsers/enum-type.js +0 -107
  188. package/esm2015/lib/schema/parsers/structured-type.js +0 -392
  189. package/esm2015/lib/schema/schema.js +0 -52
  190. package/esm2015/lib/schema/structured-type.js +0 -220
  191. package/esm2015/lib/services/base.js +0 -23
  192. package/esm2015/lib/services/entity-set.js +0 -146
  193. package/esm2015/lib/services/entity.js +0 -12
  194. package/esm2015/lib/types.js +0 -37
  195. package/esm2015/lib/utils/odata.js +0 -21
  196. package/fesm2015/angular-odata.js.map +0 -1
@@ -1,137 +0,0 @@
1
- import { ODataResource } from '../resource';
2
- import { throwError } from 'rxjs';
3
- import { PathSegmentNames, QueryOptionNames } from '../../types';
4
- import { ODataActionResource } from './action';
5
- import { ODataFunctionResource } from './function';
6
- import { ODataMediaResource } from './media';
7
- import { ODataNavigationPropertyResource } from './navigation-property';
8
- import { ODataPropertyResource } from './property';
9
- import { ODataStructuredTypeParser } from '../../schema';
10
- import { map } from 'rxjs/operators';
11
- export class ODataEntityResource extends ODataResource {
12
- //#region Factory
13
- static factory(api, segments, options) {
14
- options.keep(QueryOptionNames.expand, QueryOptionNames.select, QueryOptionNames.format);
15
- return new ODataEntityResource(api, segments, options);
16
- }
17
- clone() {
18
- return new ODataEntityResource(this.api, this.cloneSegments(), this.cloneQuery());
19
- }
20
- //#endregion
21
- schema() {
22
- let type = this.type();
23
- return type !== undefined
24
- ? this.api.findStructuredTypeForType(type)
25
- : undefined;
26
- }
27
- asModel(entity, { annots, reset } = {}) {
28
- const type = (annots === null || annots === void 0 ? void 0 : annots.type) || this.type();
29
- const Model = this.api.modelForType(type);
30
- return new Model(entity, { resource: this, annots, reset });
31
- }
32
- key(value) {
33
- const entity = this.clone();
34
- var key = this.resolveKey(value);
35
- if (key !== undefined)
36
- entity.segment((s) => s.entitySet().key(key));
37
- return entity;
38
- }
39
- keys(values) {
40
- const entity = this.clone();
41
- const types = this.pathSegments.types({ key: true });
42
- const keys = values.map((value, index) => ODataResource.resolveKey(value, this.api.findStructuredTypeForType(types[index])));
43
- entity.segment((s) => s.keys(keys));
44
- return entity;
45
- }
46
- media() {
47
- return ODataMediaResource.factory(this.api, this.cloneSegments(), this.cloneQuery());
48
- }
49
- navigationProperty(path) {
50
- let type = this.type();
51
- if (type !== undefined) {
52
- let parser = this.api.parserForType(type);
53
- type =
54
- parser instanceof ODataStructuredTypeParser
55
- ? parser.typeFor(path)
56
- : undefined;
57
- }
58
- return ODataNavigationPropertyResource.factory(this.api, path, type, this.cloneSegments(), this.cloneQuery());
59
- }
60
- property(path) {
61
- let type = this.type();
62
- if (type !== undefined) {
63
- let parser = this.api.parserForType(type);
64
- type =
65
- parser instanceof ODataStructuredTypeParser
66
- ? parser.typeFor(path)
67
- : undefined;
68
- }
69
- return ODataPropertyResource.factory(this.api, path, type, this.cloneSegments(), this.cloneQuery());
70
- }
71
- action(path) {
72
- let type;
73
- const callable = this.api.findCallableForType(path, this.type());
74
- if (callable !== undefined) {
75
- path = callable.path();
76
- type = callable.type();
77
- }
78
- return ODataActionResource.factory(this.api, path, type, this.cloneSegments(), this.cloneQuery());
79
- }
80
- function(path) {
81
- let type;
82
- const callable = this.api.findCallableForType(path, this.type());
83
- if (callable !== undefined) {
84
- path = callable.path();
85
- type = callable.type();
86
- }
87
- return ODataFunctionResource.factory(this.api, path, type, this.cloneSegments(), this.cloneQuery());
88
- }
89
- //TODO: Check
90
- cast(type) {
91
- let segments = this.cloneSegments();
92
- segments.add(PathSegmentNames.type, type).type(type);
93
- return new ODataEntityResource(this.api, segments, this.cloneQuery());
94
- }
95
- //#region Requests
96
- post(attrs, options = {}) {
97
- return super.post(attrs, Object.assign({ responseType: 'entity' }, options));
98
- }
99
- put(attrs, options = {}) {
100
- return super.put(attrs, Object.assign({ responseType: 'entity' }, options));
101
- }
102
- patch(attrs, options = {}) {
103
- return super.patch(attrs, Object.assign({ responseType: 'entity' }, options));
104
- }
105
- delete(options = {}) {
106
- return super.delete(Object.assign({ responseType: 'entity' }, options));
107
- }
108
- get(options = {}) {
109
- return super.get(Object.assign({ responseType: 'entity' }, options));
110
- }
111
- //#endregion
112
- //#region Shortcuts
113
- create(attrs, options) {
114
- return this.post(attrs, options);
115
- }
116
- update(attrs, options) {
117
- return this.put(attrs, options);
118
- }
119
- modify(attrs, options) {
120
- return this.patch(attrs, options);
121
- }
122
- destroy(options) {
123
- return this.delete(options);
124
- }
125
- fetch(options) {
126
- if (!this.hasKey())
127
- return throwError('Entity resource without key');
128
- return this.get(options);
129
- }
130
- fetchEntity(options) {
131
- return this.fetch(options).pipe(map(({ entity }) => entity));
132
- }
133
- fetchModel(options) {
134
- return this.fetch(options).pipe(map(({ entity, annots }) => entity ? this.asModel(entity, { annots, reset: true }) : null));
135
- }
136
- }
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy90eXBlcy9lbnRpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1QyxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxNQUFNLE9BQU8sbUJBQXVCLFNBQVEsYUFBZ0I7SUFDMUQsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLFFBQTJCLEVBQzNCLE9BQTZCO1FBRTdCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsZ0JBQWdCLENBQUMsTUFBTSxFQUN2QixnQkFBZ0IsQ0FBQyxNQUFNLEVBQ3ZCLGdCQUFnQixDQUFDLE1BQU0sQ0FDeEIsQ0FBQztRQUNGLE9BQU8sSUFBSSxtQkFBbUIsQ0FBSSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLG1C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SUFFRCxXQUFXLENBQ1QsT0FHQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsVUFBVSxDQUNSLE9BR0M7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUM3QixHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ3pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBSSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakUsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT0RhdGFSZXNvdXJjZSB9IGZyb20gJy4uL3Jlc291cmNlJztcbmltcG9ydCB7IE9EYXRhRW50aXR5LCBPRGF0YUVudGl0eUFubm90YXRpb25zIH0gZnJvbSAnLi4vcmVzcG9uc2VzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBhdGhTZWdtZW50TmFtZXMsIFF1ZXJ5T3B0aW9uTmFtZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IE9EYXRhQWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UgfSBmcm9tICcuL2Z1bmN0aW9uJztcbmltcG9ydCB7IE9EYXRhTWVkaWFSZXNvdXJjZSB9IGZyb20gJy4vbWVkaWEnO1xuaW1wb3J0IHsgT0RhdGFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLXByb3BlcnR5JztcbmltcG9ydCB7IE9EYXRhT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBPRGF0YVBhdGhTZWdtZW50cyB9IGZyb20gJy4uL3BhdGgnO1xuaW1wb3J0IHsgT0RhdGFQcm9wZXJ0eVJlc291cmNlIH0gZnJvbSAnLi9wcm9wZXJ0eSc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhU3RydWN0dXJlZFR5cGVQYXJzZXIgfSBmcm9tICcuLi8uLi9zY2hlbWEnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPiBleHRlbmRzIE9EYXRhUmVzb3VyY2U8VD4ge1xuICAvLyNyZWdpb24gRmFjdG9yeVxuICBzdGF0aWMgZmFjdG9yeTxFPihcbiAgICBhcGk6IE9EYXRhQXBpLFxuICAgIHNlZ21lbnRzOiBPRGF0YVBhdGhTZWdtZW50cyxcbiAgICBvcHRpb25zOiBPRGF0YVF1ZXJ5T3B0aW9uczxFPlxuICApIHtcbiAgICBvcHRpb25zLmtlZXAoXG4gICAgICBRdWVyeU9wdGlvbk5hbWVzLmV4cGFuZCxcbiAgICAgIFF1ZXJ5T3B0aW9uTmFtZXMuc2VsZWN0LFxuICAgICAgUXVlcnlPcHRpb25OYW1lcy5mb3JtYXRcbiAgICApO1xuICAgIHJldHVybiBuZXcgT0RhdGFFbnRpdHlSZXNvdXJjZTxFPihhcGksIHNlZ21lbnRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPihcbiAgICAgIHRoaXMuYXBpLFxuICAgICAgdGhpcy5jbG9uZVNlZ21lbnRzKCksXG4gICAgICB0aGlzLmNsb25lUXVlcnk8VD4oKVxuICAgICk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgc2NoZW1hKCkge1xuICAgIGxldCB0eXBlID0gdGhpcy50eXBlKCk7XG4gICAgcmV0dXJuIHR5cGUgIT09IHVuZGVmaW5lZFxuICAgICAgPyB0aGlzLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGUpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzTW9kZWw8TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KFxuICAgIGVudGl0eTogUGFydGlhbDxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxuICAgIHsgYW5ub3RzLCByZXNldCB9OiB7IGFubm90cz86IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM7IHJlc2V0PzogYm9vbGVhbiB9ID0ge31cbiAgKTogTSB7XG4gICAgY29uc3QgdHlwZSA9IGFubm90cz8udHlwZSB8fCB0aGlzLnR5cGUoKTtcbiAgICBjb25zdCBNb2RlbCA9IHRoaXMuYXBpLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICByZXR1cm4gbmV3IE1vZGVsKGVudGl0eSwgeyByZXNvdXJjZTogdGhpcywgYW5ub3RzLCByZXNldCB9KSBhcyBNO1xuICB9XG5cbiAga2V5KHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGtleSA9IHRoaXMucmVzb2x2ZUtleSh2YWx1ZSk7XG4gICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSBlbnRpdHkuc2VnbWVudCgocykgPT4gcy5lbnRpdHlTZXQoKS5rZXkoa2V5KSk7XG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGtleXModmFsdWVzOiBhbnlbXSkge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuY2xvbmUoKTtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMucGF0aFNlZ21lbnRzLnR5cGVzKHsga2V5OiB0cnVlIH0pO1xuICAgIGNvbnN0IGtleXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+XG4gICAgICBPRGF0YVJlc291cmNlLnJlc29sdmVLZXkoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGVzW2luZGV4XSlcbiAgICAgIClcbiAgICApO1xuICAgIGVudGl0eS5zZWdtZW50KChzKSA9PiBzLmtleXMoa2V5cykpO1xuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBtZWRpYSgpIHtcbiAgICByZXR1cm4gT0RhdGFNZWRpYVJlc291cmNlLmZhY3Rvcnk8VD4oXG4gICAgICB0aGlzLmFwaSxcbiAgICAgIHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgdGhpcy5jbG9uZVF1ZXJ5PFQ+KClcbiAgICApO1xuICB9XG5cbiAgbmF2aWdhdGlvblByb3BlcnR5PE4+KHBhdGg6IHN0cmluZykge1xuICAgIGxldCB0eXBlID0gdGhpcy50eXBlKCk7XG4gICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IHBhcnNlciA9IHRoaXMuYXBpLnBhcnNlckZvclR5cGU8Tj4odHlwZSk7XG4gICAgICB0eXBlID1cbiAgICAgICAgcGFyc2VyIGluc3RhbmNlb2YgT0RhdGFTdHJ1Y3R1cmVkVHlwZVBhcnNlclxuICAgICAgICAgID8gcGFyc2VyLnR5cGVGb3IocGF0aClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UuZmFjdG9yeTxOPihcbiAgICAgIHRoaXMuYXBpLFxuICAgICAgcGF0aCxcbiAgICAgIHR5cGUsXG4gICAgICB0aGlzLmNsb25lU2VnbWVudHMoKSxcbiAgICAgIHRoaXMuY2xvbmVRdWVyeTxOPigpXG4gICAgKTtcbiAgfVxuXG4gIHByb3BlcnR5PFA+KHBhdGg6IHN0cmluZykge1xuICAgIGxldCB0eXBlID0gdGhpcy50eXBlKCk7XG4gICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGV0IHBhcnNlciA9IHRoaXMuYXBpLnBhcnNlckZvclR5cGU8UD4odHlwZSk7XG4gICAgICB0eXBlID1cbiAgICAgICAgcGFyc2VyIGluc3RhbmNlb2YgT0RhdGFTdHJ1Y3R1cmVkVHlwZVBhcnNlclxuICAgICAgICAgID8gcGFyc2VyLnR5cGVGb3IocGF0aClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIE9EYXRhUHJvcGVydHlSZXNvdXJjZS5mYWN0b3J5PFA+KFxuICAgICAgdGhpcy5hcGksXG4gICAgICBwYXRoLFxuICAgICAgdHlwZSxcbiAgICAgIHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgdGhpcy5jbG9uZVF1ZXJ5PFA+KClcbiAgICApO1xuICB9XG5cbiAgYWN0aW9uPFAsIFI+KHBhdGg6IHN0cmluZykge1xuICAgIGxldCB0eXBlO1xuICAgIGNvbnN0IGNhbGxhYmxlID0gdGhpcy5hcGkuZmluZENhbGxhYmxlRm9yVHlwZShwYXRoLCB0aGlzLnR5cGUoKSk7XG4gICAgaWYgKGNhbGxhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhdGggPSBjYWxsYWJsZS5wYXRoKCk7XG4gICAgICB0eXBlID0gY2FsbGFibGUudHlwZSgpO1xuICAgIH1cbiAgICByZXR1cm4gT0RhdGFBY3Rpb25SZXNvdXJjZS5mYWN0b3J5PFAsIFI+KFxuICAgICAgdGhpcy5hcGksXG4gICAgICBwYXRoLFxuICAgICAgdHlwZSxcbiAgICAgIHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgdGhpcy5jbG9uZVF1ZXJ5PFI+KClcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb248UCwgUj4ocGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IHR5cGU7XG4gICAgY29uc3QgY2FsbGFibGUgPSB0aGlzLmFwaS5maW5kQ2FsbGFibGVGb3JUeXBlKHBhdGgsIHRoaXMudHlwZSgpKTtcbiAgICBpZiAoY2FsbGFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGF0aCA9IGNhbGxhYmxlLnBhdGgoKTtcbiAgICAgIHR5cGUgPSBjYWxsYWJsZS50eXBlKCk7XG4gICAgfVxuICAgIHJldHVybiBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UuZmFjdG9yeTxQLCBSPihcbiAgICAgIHRoaXMuYXBpLFxuICAgICAgcGF0aCxcbiAgICAgIHR5cGUsXG4gICAgICB0aGlzLmNsb25lU2VnbWVudHMoKSxcbiAgICAgIHRoaXMuY2xvbmVRdWVyeTxSPigpXG4gICAgKTtcbiAgfVxuXG4gIC8vVE9ETzogQ2hlY2tcbiAgY2FzdDxDPih0eXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgc2VnbWVudHMgPSB0aGlzLmNsb25lU2VnbWVudHMoKTtcbiAgICBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnROYW1lcy50eXBlLCB0eXBlKS50eXBlKHR5cGUpO1xuICAgIHJldHVybiBuZXcgT0RhdGFFbnRpdHlSZXNvdXJjZTxDPih0aGlzLmFwaSwgc2VnbWVudHMsIHRoaXMuY2xvbmVRdWVyeTxDPigpKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBSZXF1ZXN0c1xuICBwcm90ZWN0ZWQgcG9zdChcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgPSB7fVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHN1cGVyLnBvc3QoYXR0cnMsIHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwdXQoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHN1cGVyLnB1dChhdHRycywgeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhdGNoKFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHsgZXRhZz86IHN0cmluZyB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiBzdXBlci5wYXRjaChhdHRycywgeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZShcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZSh7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25OYW1lc1tdO1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHN1cGVyLmdldCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFNob3J0Y3V0c1xuICBjcmVhdGUoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucG9zdChhdHRycywgb3B0aW9ucyk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyAmIHsgZXRhZz86IHN0cmluZyB9XG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5wdXQoYXR0cnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgbW9kaWZ5KFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucGF0Y2goYXR0cnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVzdHJveShvcHRpb25zPzogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZShvcHRpb25zKTtcbiAgfVxuXG4gIGZldGNoKFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICBpZiAoIXRoaXMuaGFzS2V5KCkpIHJldHVybiB0aHJvd0Vycm9yKCdFbnRpdHkgcmVzb3VyY2Ugd2l0aG91dCBrZXknKTtcbiAgICByZXR1cm4gdGhpcy5nZXQob3B0aW9ucyk7XG4gIH1cblxuICBmZXRjaEVudGl0eShcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYge1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbk5hbWVzW107XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2gob3B0aW9ucykucGlwZShtYXAoKHsgZW50aXR5IH0pID0+IGVudGl0eSkpO1xuICB9XG5cbiAgZmV0Y2hNb2RlbDxNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPj4oXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25OYW1lc1tdO1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxNIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKG9wdGlvbnMpLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXR5ID8gdGhpcy5hc01vZGVsPE0+KGVudGl0eSwgeyBhbm5vdHMsIHJlc2V0OiB0cnVlIH0pIDogbnVsbFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -1,130 +0,0 @@
1
- import { __rest } from "tslib";
2
- import { alias as fAlias } from '../query';
3
- import { ODataResource } from '../resource';
4
- import { PathSegmentNames } from '../../types';
5
- import { map } from 'rxjs/operators';
6
- export class ODataFunctionResource extends ODataResource {
7
- //#region Factory
8
- static factory(api, path, type, segments, options) {
9
- const segment = segments.add(PathSegmentNames.function, path);
10
- if (type)
11
- segment.type(type);
12
- options.clear();
13
- return new ODataFunctionResource(api, segments, options);
14
- }
15
- clone() {
16
- return new ODataFunctionResource(this.api, this.cloneSegments(), this.cloneQuery());
17
- }
18
- //#endregion
19
- returnType() {
20
- var _a, _b;
21
- return (_b = (_a = this.schema()) === null || _a === void 0 ? void 0 : _a.parser.return) === null || _b === void 0 ? void 0 : _b.type;
22
- }
23
- schema() {
24
- //TODO: Binding Type
25
- let type = this.type();
26
- return type !== undefined
27
- ? this.api.findCallableForType(type)
28
- : undefined;
29
- }
30
- asModel(entity, { annots, reset } = {}) {
31
- let resource;
32
- const type = (annots === null || annots === void 0 ? void 0 : annots.type) || this.returnType();
33
- const Model = this.api.modelForType(type);
34
- let path = annots === null || annots === void 0 ? void 0 : annots.entitySet;
35
- if (path !== undefined) {
36
- resource = this.api.entitySet(path).entity(entity);
37
- resource.query((q) => q.apply(this.queryOptions.toQueryArguments()));
38
- }
39
- return new Model(entity, { resource, annots, reset });
40
- }
41
- asCollection(entities, { annots, reset, } = {}) {
42
- let resource;
43
- const type = (annots === null || annots === void 0 ? void 0 : annots.type) || this.returnType();
44
- const Collection = this.api.collectionForType(type);
45
- let path = annots === null || annots === void 0 ? void 0 : annots.entitySet;
46
- if (path !== undefined) {
47
- resource = this.api.entitySet(path);
48
- resource.query((q) => q.apply(this.queryOptions.toQueryArguments()));
49
- }
50
- return new Collection(entities, { resource, annots, reset });
51
- }
52
- parameters(params, { alias } = {}) {
53
- const segments = this.cloneSegments();
54
- const segment = segments.get(PathSegmentNames.function);
55
- let parameters = params !== null ? this.encode(params) : null;
56
- if (alias && parameters !== null) {
57
- parameters = Object.entries(parameters).reduce((acc, [name, param]) => {
58
- return Object.assign(acc, { [name]: fAlias(param, name) });
59
- }, {});
60
- }
61
- segment.parameters(parameters);
62
- return new ODataFunctionResource(this.api, segments, this.cloneQuery());
63
- }
64
- //#region Requests
65
- get(options) {
66
- return super.get(options);
67
- }
68
- call(params, _a = {}) {
69
- var { alias } = _a, options = __rest(_a, ["alias"]);
70
- return this.parameters(params, { alias }).get(options);
71
- }
72
- /**
73
- * Execute the function with the given parameters and return the result as a property
74
- * @param params Parameters to be sent to the function
75
- * @param alias If true, the parameters will be send using aliases
76
- * @param options Options for the request
77
- * @returns Observable of the result of the function
78
- */
79
- callProperty(params, _a = {}) {
80
- var { alias } = _a, options = __rest(_a, ["alias"]);
81
- return this.call(params, Object.assign({ responseType: 'property', alias }, options)).pipe(map(({ property }) => property));
82
- }
83
- /**
84
- * Execute the function with the given parameters and return the result as a entity
85
- * @param params Parameters to be sent to the function
86
- * @param alias If true, the parameters will be send using aliases
87
- * @param options Options for the request
88
- * @returns Observable of the result of the function
89
- */
90
- callEntity(params, _a = {}) {
91
- var { alias } = _a, options = __rest(_a, ["alias"]);
92
- return this.call(params, Object.assign({ responseType: 'entity', alias }, options)).pipe(map(({ entity }) => entity));
93
- }
94
- /**
95
- * Execute the function with the given parameters and return the result as a model
96
- * @param params Parameters to be sent to the function
97
- * @param alias If true, the parameters will be send using aliases
98
- * @param options Options for the request
99
- * @returns Observable of the result of the function
100
- */
101
- callModel(params, _a = {}) {
102
- var { alias } = _a, options = __rest(_a, ["alias"]);
103
- return this.call(params, Object.assign({ responseType: 'entity', alias }, options)).pipe(map(({ entity, annots }) => entity ? this.asModel(entity, { annots, reset: true }) : null));
104
- }
105
- /**
106
- * Execute the function with the given parameters and return the result as a entities
107
- * @param params Parameters to be sent to the function
108
- * @param alias If true, the parameters will be send using aliases
109
- * @param options Options for the request
110
- * @returns Observable of the result of the function
111
- */
112
- callEntities(params, _a = {}) {
113
- var { alias } = _a, options = __rest(_a, ["alias"]);
114
- return this.call(params, Object.assign({ responseType: 'entities', alias }, options)).pipe(map(({ entities }) => entities));
115
- }
116
- /**
117
- * Execute the function with the given parameters and return the result as a collection
118
- * @param params Parameters to be sent to the function
119
- * @param alias If true, the parameters will be send using aliases
120
- * @param options Options for the request
121
- * @returns Observable of the result of the function
122
- */
123
- callCollection(params, _a = {}) {
124
- var { alias } = _a, options = __rest(_a, ["alias"]);
125
- return this.call(params, Object.assign({ responseType: 'entities', alias }, options)).pipe(map(({ entities, annots }) => entities
126
- ? this.asCollection(entities, { annots, reset: true })
127
- : null));
128
- }
129
- }
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL2Z1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFxQkEsT0FBTyxFQUFxQixLQUFLLElBQUksTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxNQUFNLE9BQU8scUJBQTRCLFNBQVEsYUFBZ0I7SUFDL0QsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLElBQVksRUFDWixJQUF3QixFQUN4QixRQUEyQixFQUMzQixPQUE2QjtRQUU3QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJLElBQUk7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLElBQUkscUJBQXFCLENBQU8sR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxxQkFBcUIsQ0FDOUIsSUFBSSxDQUFDLEdBQUcsRUFDUixJQUFJLENBQUMsYUFBYSxFQUFFLEVBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUssQ0FDckIsQ0FBQztJQUNKLENBQUM7SUFDRCxZQUFZO0lBRVosVUFBVTs7UUFDUixPQUFPLE1BQUEsTUFBQSxJQUFJLENBQUMsTUFBTSxFQUFFLDBDQUFFLE1B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QUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxjQUFjLENBQ1osTUFBZ0IsRUFDaEIsS0FBNEQsRUFBRTtZQUE5RCxFQUFFLEtBQUssT0FBdUQsRUFBbEQsT0FBTyxjQUFuQixTQUFxQixDQUFGO1FBRW5CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLGtCQUNyQixZQUFZLEVBQUUsVUFBVSxFQUN4QixLQUFLLElBQ0YsT0FBTyxFQUNWLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FDM0IsUUFBUTtZQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFPLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUQsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUNGLENBQUM7SUFDSixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBPRGF0YUVudGl0aWVzLFxuICBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXR5LFxuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxuICBPRGF0YVByb3BlcnR5LFxufSBmcm9tICcuLi9yZXNwb25zZXMnO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdGllc09wdGlvbnMsXG4gIE9EYXRhRW50aXR5T3B0aW9ucyxcbiAgT0RhdGFOb25lT3B0aW9ucyxcbiAgT0RhdGFPcHRpb25zLFxuICBPRGF0YVByb3BlcnR5T3B0aW9ucyxcbn0gZnJvbSAnLi9vcHRpb25zJztcblxuaW1wb3J0IHsgT0RhdGFBcGkgfSBmcm9tICcuLi8uLi9hcGknO1xuaW1wb3J0IHsgT0RhdGFDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgT0RhdGFFbnRpdHlSZXNvdXJjZSB9IGZyb20gJy4vZW50aXR5JztcbmltcG9ydCB7IE9EYXRhRW50aXR5U2V0UmVzb3VyY2UgfSBmcm9tICcuL2VudGl0eS1zZXQnO1xuaW1wb3J0IHsgT0RhdGFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9tb2RlbCc7XG5pbXBvcnQgeyBPRGF0YVBhdGhTZWdtZW50cyB9IGZyb20gJy4uL3BhdGgnO1xuaW1wb3J0IHsgT0RhdGFRdWVyeU9wdGlvbnMsIGFsaWFzIGFzIGZBbGlhcyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQYXRoU2VnbWVudE5hbWVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFGdW5jdGlvblJlc291cmNlPFAsIFI+IGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxSPiB7XG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5PFAsIFI+KFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzZWdtZW50czogT0RhdGFQYXRoU2VnbWVudHMsXG4gICAgb3B0aW9uczogT0RhdGFRdWVyeU9wdGlvbnM8Uj5cbiAgKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudE5hbWVzLmZ1bmN0aW9uLCBwYXRoKTtcbiAgICBpZiAodHlwZSkgc2VnbWVudC50eXBlKHR5cGUpO1xuICAgIG9wdGlvbnMuY2xlYXIoKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhRnVuY3Rpb25SZXNvdXJjZTxQLCBSPihhcGksIHNlZ21lbnRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgT0RhdGFGdW5jdGlvblJlc291cmNlPFAsIFI+KFxuICAgICAgdGhpcy5hcGksXG4gICAgICB0aGlzLmNsb25lU2VnbWVudHMoKSxcbiAgICAgIHRoaXMuY2xvbmVRdWVyeTxSPigpXG4gICAgKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICByZXR1cm5UeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYSgpPy5wYXJzZXIucmV0dXJuPy50eXBlO1xuICB9XG5cbiAgc2NoZW1hKCkge1xuICAgIC8vVE9ETzogQmluZGluZyBUeXBlXG4gICAgbGV0IHR5cGUgPSB0aGlzLnR5cGUoKTtcbiAgICByZXR1cm4gdHlwZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHRoaXMuYXBpLmZpbmRDYWxsYWJsZUZvclR5cGU8Uj4odHlwZSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgYXNNb2RlbDxNIGV4dGVuZHMgT0RhdGFNb2RlbDxSPj4oXG4gICAgZW50aXR5OiBQYXJ0aWFsPFI+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAgeyBhbm5vdHMsIHJlc2V0IH06IHsgYW5ub3RzPzogT0RhdGFFbnRpdHlBbm5vdGF0aW9uczsgcmVzZXQ/OiBib29sZWFuIH0gPSB7fVxuICApOiBNIHtcbiAgICBsZXQgcmVzb3VyY2U6IE9EYXRhRW50aXR5UmVzb3VyY2U8Uj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdHlwZSA9IGFubm90cz8udHlwZSB8fCB0aGlzLnJldHVyblR5cGUoKTtcbiAgICBjb25zdCBNb2RlbCA9IHRoaXMuYXBpLm1vZGVsRm9yVHlwZSh0eXBlKTtcbiAgICBsZXQgcGF0aCA9IGFubm90cz8uZW50aXR5U2V0O1xuICAgIGlmIChwYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc291cmNlID0gdGhpcy5hcGkuZW50aXR5U2V0PFI+KHBhdGgpLmVudGl0eShlbnRpdHkgYXMgUGFydGlhbDxSPik7XG4gICAgICByZXNvdXJjZS5xdWVyeSgocSkgPT4gcS5hcHBseSh0aGlzLnF1ZXJ5T3B0aW9ucy50b1F1ZXJ5QXJndW1lbnRzKCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbChlbnRpdHksIHsgcmVzb3VyY2UsIGFubm90cywgcmVzZXQgfSkgYXMgTTtcbiAgfVxuXG4gIGFzQ29sbGVjdGlvbjxNIGV4dGVuZHMgT0RhdGFNb2RlbDxSPiwgQyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxSLCBNPj4oXG4gICAgZW50aXRpZXM6IFBhcnRpYWw8Uj5bXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10sXG4gICAge1xuICAgICAgYW5ub3RzLFxuICAgICAgcmVzZXQsXG4gICAgfTogeyBhbm5vdHM/OiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM7IHJlc2V0PzogYm9vbGVhbiB9ID0ge31cbiAgKTogQyB7XG4gICAgbGV0IHJlc291cmNlOiBPRGF0YUVudGl0eVNldFJlc291cmNlPFI+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHR5cGUgPSBhbm5vdHM/LnR5cGUgfHwgdGhpcy5yZXR1cm5UeXBlKCk7XG4gICAgY29uc3QgQ29sbGVjdGlvbiA9IHRoaXMuYXBpLmNvbGxlY3Rpb25Gb3JUeXBlKHR5cGUpO1xuICAgIGxldCBwYXRoID0gYW5ub3RzPy5lbnRpdHlTZXQ7XG4gICAgaWYgKHBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzb3VyY2UgPSB0aGlzLmFwaS5lbnRpdHlTZXQ8Uj4ocGF0aCk7XG4gICAgICByZXNvdXJjZS5xdWVyeSgocSkgPT4gcS5hcHBseSh0aGlzLnF1ZXJ5T3B0aW9ucy50b1F1ZXJ5QXJndW1lbnRzKCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKGVudGl0aWVzLCB7IHJlc291cmNlLCBhbm5vdHMsIHJlc2V0IH0pIGFzIEM7XG4gIH1cblxuICBwYXJhbWV0ZXJzKHBhcmFtczogUCB8IG51bGwsIHsgYWxpYXMgfTogeyBhbGlhcz86IGJvb2xlYW4gfSA9IHt9KSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSB0aGlzLmNsb25lU2VnbWVudHMoKTtcbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHMuZ2V0KFBhdGhTZWdtZW50TmFtZXMuZnVuY3Rpb24pO1xuICAgIGxldCBwYXJhbWV0ZXJzID0gcGFyYW1zICE9PSBudWxsID8gdGhpcy5lbmNvZGUocGFyYW1zKSA6IG51bGw7XG4gICAgaWYgKGFsaWFzICYmIHBhcmFtZXRlcnMgIT09IG51bGwpIHtcbiAgICAgIHBhcmFtZXRlcnMgPSBPYmplY3QuZW50cmllcyhwYXJhbWV0ZXJzKS5yZWR1Y2UoKGFjYywgW25hbWUsIHBhcmFtXSkgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW25hbWVdOiBmQWxpYXMocGFyYW0sIG5hbWUpIH0pO1xuICAgICAgfSwge30pO1xuICAgIH1cbiAgICBzZWdtZW50LnBhcmFtZXRlcnMocGFyYW1ldGVycyk7XG4gICAgcmV0dXJuIG5ldyBPRGF0YUZ1bmN0aW9uUmVzb3VyY2U8UCwgUj4oXG4gICAgICB0aGlzLmFwaSxcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgdGhpcy5jbG9uZVF1ZXJ5PFI+KClcbiAgICApO1xuICB9XG5cbiAgLy8jcmVnaW9uIFJlcXVlc3RzXG4gIHByb3RlY3RlZCBnZXQoXG4gICAgb3B0aW9ucz86IE9EYXRhRW50aXR5T3B0aW9ucyAmIE9EYXRhRW50aXRpZXNPcHRpb25zICYgT0RhdGFQcm9wZXJ0eU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KG9wdGlvbnMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgUGFyYW1ldGVycyB0byBiZSBzZW50IHRvIHRoZSBmdW5jdGlvblxuICAgKiBAcGFyYW0gYWxpYXMgSWYgdHJ1ZSwgdGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBzZW5kIHVzaW5nIGFsaWFzZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICovXG4gIGNhbGwoXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICBvcHRpb25zPzogeyBhbGlhcz86IGJvb2xlYW4gfSAmIE9EYXRhRW50aXR5T3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFI+PjtcbiAgY2FsbChcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM/OiB7IGFsaWFzPzogYm9vbGVhbiB9ICYgT0RhdGFFbnRpdGllc09wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0aWVzPFI+PjtcbiAgY2FsbChcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM/OiB7IGFsaWFzPzogYm9vbGVhbiB9ICYgT0RhdGFQcm9wZXJ0eU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YVByb3BlcnR5PFI+PjtcbiAgY2FsbChcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIG9wdGlvbnM/OiB7IGFsaWFzPzogYm9vbGVhbiB9ICYgT0RhdGFOb25lT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPG51bGw+O1xuICBjYWxsKFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAge1xuICAgICAgYWxpYXMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTogeyBhbGlhcz86IGJvb2xlYW4gfSAmIE9EYXRhRW50aXR5T3B0aW9ucyAmXG4gICAgICBPRGF0YUVudGl0aWVzT3B0aW9ucyAmXG4gICAgICBPRGF0YVByb3BlcnR5T3B0aW9ucyAmXG4gICAgICBPRGF0YU5vbmVPcHRpb25zID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJzKHBhcmFtcywgeyBhbGlhcyB9KS5nZXQob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gcGFyYW1zIFBhcmFtZXRlcnMgdG8gYmUgc2VudCB0byB0aGUgZnVuY3Rpb25cbiAgICogQHBhcmFtIGFsaWFzIElmIHRydWUsIHRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUgc2VuZCB1c2luZyBhbGlhc2VzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb25cbiAgICovXG4gIGNhbGxQcm9wZXJ0eShcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIHsgYWxpYXMsIC4uLm9wdGlvbnMgfTogeyBhbGlhcz86IGJvb2xlYW4gfSAmIE9EYXRhT3B0aW9ucyA9IHt9XG4gICk6IE9ic2VydmFibGU8UiB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5jYWxsKHBhcmFtcywge1xuICAgICAgcmVzcG9uc2VUeXBlOiAncHJvcGVydHknLFxuICAgICAgYWxpYXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLnBpcGUobWFwKCh7IHByb3BlcnR5IH0pID0+IHByb3BlcnR5KSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBlbnRpdHlcbiAgICogQHBhcmFtIHBhcmFtcyBQYXJhbWV0ZXJzIHRvIGJlIHNlbnQgdG8gdGhlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBhbGlhcyBJZiB0cnVlLCB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIHNlbmQgdXNpbmcgYWxpYXNlc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uXG4gICAqL1xuICBjYWxsRW50aXR5KFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAgeyBhbGlhcywgLi4ub3B0aW9ucyB9OiB7IGFsaWFzPzogYm9vbGVhbiB9ICYgT0RhdGFPcHRpb25zID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNhbGwocGFyYW1zLCB7XG4gICAgICByZXNwb25zZVR5cGU6ICdlbnRpdHknLFxuICAgICAgYWxpYXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLnBpcGUobWFwKCh7IGVudGl0eSB9KSA9PiBlbnRpdHkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIG1vZGVsXG4gICAqIEBwYXJhbSBwYXJhbXMgUGFyYW1ldGVycyB0byBiZSBzZW50IHRvIHRoZSBmdW5jdGlvblxuICAgKiBAcGFyYW0gYWxpYXMgSWYgdHJ1ZSwgdGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBzZW5kIHVzaW5nIGFsaWFzZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvblxuICAgKi9cbiAgY2FsbE1vZGVsPE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFI+PihcbiAgICBwYXJhbXM6IFAgfCBudWxsLFxuICAgIHsgYWxpYXMsIC4uLm9wdGlvbnMgfTogeyBhbGlhcz86IGJvb2xlYW4gfSAmIE9EYXRhT3B0aW9ucyA9IHt9XG4gICk6IE9ic2VydmFibGU8TSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5jYWxsKHBhcmFtcywge1xuICAgICAgcmVzcG9uc2VUeXBlOiAnZW50aXR5JyxcbiAgICAgIGFsaWFzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0eSwgYW5ub3RzIH0pID0+XG4gICAgICAgIGVudGl0eSA/IHRoaXMuYXNNb2RlbDxNPihlbnRpdHksIHsgYW5ub3RzLCByZXNldDogdHJ1ZSB9KSA6IG51bGxcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgZW50aXRpZXNcbiAgICogQHBhcmFtIHBhcmFtcyBQYXJhbWV0ZXJzIHRvIGJlIHNlbnQgdG8gdGhlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSBhbGlhcyBJZiB0cnVlLCB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIHNlbmQgdXNpbmcgYWxpYXNlc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uXG4gICAqL1xuICBjYWxsRW50aXRpZXMoXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICB7IGFsaWFzLCAuLi5vcHRpb25zIH06IHsgYWxpYXM/OiBib29sZWFuIH0gJiBPRGF0YU9wdGlvbnMgPSB7fVxuICApOiBPYnNlcnZhYmxlPFJbXSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5jYWxsKHBhcmFtcywge1xuICAgICAgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLFxuICAgICAgYWxpYXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLnBpcGUobWFwKCh7IGVudGl0aWVzIH0pID0+IGVudGl0aWVzKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMgYSBjb2xsZWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgUGFyYW1ldGVycyB0byBiZSBzZW50IHRvIHRoZSBmdW5jdGlvblxuICAgKiBAcGFyYW0gYWxpYXMgSWYgdHJ1ZSwgdGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBzZW5kIHVzaW5nIGFsaWFzZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvblxuICAgKi9cbiAgY2FsbENvbGxlY3Rpb248TSBleHRlbmRzIE9EYXRhTW9kZWw8Uj4sIEMgZXh0ZW5kcyBPRGF0YUNvbGxlY3Rpb248UiwgTT4+KFxuICAgIHBhcmFtczogUCB8IG51bGwsXG4gICAgeyBhbGlhcywgLi4ub3B0aW9ucyB9OiB7IGFsaWFzPzogYm9vbGVhbiB9ICYgT0RhdGFPcHRpb25zID0ge31cbiAgKTogT2JzZXJ2YWJsZTxDIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmNhbGwocGFyYW1zLCB7XG4gICAgICByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsXG4gICAgICBhbGlhcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdGllcywgYW5ub3RzIH0pID0+XG4gICAgICAgIGVudGl0aWVzXG4gICAgICAgICAgPyB0aGlzLmFzQ29sbGVjdGlvbjxNLCBDPihlbnRpdGllcywgeyBhbm5vdHMsIHJlc2V0OiB0cnVlIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==
@@ -1,47 +0,0 @@
1
- import { $VALUE } from '../../constants';
2
- import { Http } from '../../utils';
3
- import { ODataResource } from '../resource';
4
- import { PathSegmentNames } from '../../types';
5
- export class ODataMediaResource extends ODataResource {
6
- //#region Factory
7
- static factory(api, segments, options) {
8
- segments.add(PathSegmentNames.value, $VALUE);
9
- return new ODataMediaResource(api, segments, options);
10
- }
11
- clone() {
12
- return new ODataMediaResource(this.api, this.cloneSegments(), this.cloneQuery());
13
- }
14
- //#endregion
15
- schema() {
16
- return undefined;
17
- }
18
- //#region Requests
19
- get(options) {
20
- return super.get(options);
21
- }
22
- put(data, options = {}) {
23
- return super.put(data, options);
24
- }
25
- fetch(options) {
26
- return this.get(options);
27
- }
28
- fetchArraybuffer(options = {}) {
29
- return this.fetch(Object.assign({ responseType: 'arraybuffer' }, options));
30
- }
31
- fetchBlob(options = {}) {
32
- return this.fetch(Object.assign({ responseType: 'blob' }, options));
33
- }
34
- upload(data, options = {}) {
35
- return this.put(data, options);
36
- }
37
- uploadArrayBuffer(data, contentType, options = {}) {
38
- options.headers = Http.mergeHttpHeaders(options.headers || {}, {
39
- 'Content-Type': contentType,
40
- });
41
- return this.upload(data, options);
42
- }
43
- uploadBlob(data, options = {}) {
44
- return this.upload(data, options);
45
- }
46
- }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL21lZGlhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS25DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRS9DLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFrQjtJQUN4RCxpQkFBaUI7SUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FDWixHQUFhLEVBQ2IsUUFBMkIsRUFDM0IsT0FBNkI7UUFFN0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksa0JBQWtCLENBQzNCLElBQUksQ0FBQyxHQUFHLEVBQ1IsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQ2xCLENBQUM7SUFDSixDQUFDO0lBQ0QsWUFBWTtJQUVaLE1BQU07UUFDSixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsR0FBRyxDQUNYLE9BQTZDO1FBRTdDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRVMsR0FBRyxDQUNYLElBQXdCLEVBQ3hCLFVBQTRDLEVBQUU7UUFFOUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBUUQsS0FBSyxDQUFDLE9BQTZDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBd0IsRUFBRTtRQUN6QyxPQUFPLElBQUksQ0FBQyxLQUFLLGlCQUFHLFlBQVksRUFBRSxhQUFhLElBQUssT0FBTyxFQUFHLENBQUM7SUFDakUsQ0FBQztJQUVELFNBQVMsQ0FBQyxVQUF3QixFQUFFO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssaUJBQUcsWUFBWSxFQUFFLE1BQU0sSUFBSyxPQUFPLEVBQUcsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUNKLElBQXdCLEVBQ3hCLFVBQTRDLEVBQUU7UUFFOUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsaUJBQWlCLENBQ2YsSUFBaUIsRUFDakIsV0FBbUIsRUFDbkIsVUFBNEMsRUFBRTtRQUU5QyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRTtZQUM3RCxjQUFjLEVBQUUsV0FBVztTQUM1QixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxVQUFVLENBQ1IsSUFBVSxFQUNWLFVBQTRDLEVBQUU7UUFFOUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkVkFMVUUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSHR0cCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vLi4vYXBpJztcbmltcG9ydCB7IE9EYXRhT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBPRGF0YVBhdGhTZWdtZW50cyB9IGZyb20gJy4uL3BhdGgnO1xuaW1wb3J0IHsgT0RhdGFRdWVyeU9wdGlvbnMgfSBmcm9tICcuLi9xdWVyeSc7XG5pbXBvcnQgeyBPRGF0YVJlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnROYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhTWVkaWFSZXNvdXJjZSBleHRlbmRzIE9EYXRhUmVzb3VyY2U8YW55PiB7XG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5PFY+KFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAgc2VnbWVudHM6IE9EYXRhUGF0aFNlZ21lbnRzLFxuICAgIG9wdGlvbnM6IE9EYXRhUXVlcnlPcHRpb25zPFY+XG4gICkge1xuICAgIHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudE5hbWVzLnZhbHVlLCAkVkFMVUUpO1xuICAgIHJldHVybiBuZXcgT0RhdGFNZWRpYVJlc291cmNlKGFwaSwgc2VnbWVudHMsIG9wdGlvbnMpO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YU1lZGlhUmVzb3VyY2UoXG4gICAgICB0aGlzLmFwaSxcbiAgICAgIHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgdGhpcy5jbG9uZVF1ZXJ5KClcbiAgICApO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHNjaGVtYSgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8jcmVnaW9uIFJlcXVlc3RzXG4gIHByb3RlY3RlZCBnZXQoXG4gICAgb3B0aW9uczogeyByZXNwb25zZVR5cGU6IGFueSB9ICYgT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwdXQoXG4gICAgZGF0YTogQXJyYXlCdWZmZXIgfCBCbG9iLFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHsgZXRhZz86IHN0cmluZyB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIucHV0KGRhdGEsIG9wdGlvbnMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgZmV0Y2goXG4gICAgb3B0aW9ucz86IHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0gJiBPRGF0YU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxBcnJheUJ1ZmZlcj47XG4gIGZldGNoKG9wdGlvbnM/OiB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH0gJiBPRGF0YU9wdGlvbnMpOiBPYnNlcnZhYmxlPEJsb2I+O1xuICBmZXRjaChvcHRpb25zOiB7IHJlc3BvbnNlVHlwZTogYW55IH0gJiBPRGF0YU9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIGZldGNoQXJyYXlidWZmZXIob3B0aW9uczogT0RhdGFPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPEFycmF5QnVmZmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBmZXRjaEJsb2Iob3B0aW9uczogT0RhdGFPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPEJsb2I+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2Jsb2InLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgdXBsb2FkKFxuICAgIGRhdGE6IEFycmF5QnVmZmVyIHwgQmxvYixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucHV0KGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgdXBsb2FkQXJyYXlCdWZmZXIoXG4gICAgZGF0YTogQXJyYXlCdWZmZXIsXG4gICAgY29udGVudFR5cGU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0gSHR0cC5tZXJnZUh0dHBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyB8fCB7fSwge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnVwbG9hZChkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIHVwbG9hZEJsb2IoXG4gICAgZGF0YTogQmxvYixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMudXBsb2FkKGRhdGEsIG9wdGlvbnMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxufVxuIl19
@@ -1,36 +0,0 @@
1
- import { $METADATA } from '../../constants';
2
- import { ODataMetadata } from '../responses';
3
- import { ODataPathSegments } from '../path';
4
- import { ODataResource } from '../resource';
5
- import { PathSegmentNames } from '../../types';
6
- import { map } from 'rxjs/operators';
7
- export class ODataMetadataResource extends ODataResource {
8
- constructor(api, segments) {
9
- super(api, segments);
10
- }
11
- //#region Factory
12
- static factory(api) {
13
- let segments = new ODataPathSegments();
14
- segments.add(PathSegmentNames.metadata, $METADATA);
15
- return new ODataMetadataResource(api, segments);
16
- }
17
- clone() {
18
- return new ODataMetadataResource(this.api, this.cloneSegments());
19
- }
20
- //#endregion
21
- schema() {
22
- return undefined;
23
- }
24
- //#region Requests
25
- get(options) {
26
- return super
27
- .get(Object.assign({ responseType: 'text' }, options))
28
- .pipe(map((body) => new ODataMetadata(body)));
29
- }
30
- //#endregion
31
- //#region Shortcuts
32
- fetch(options) {
33
- return this.get(options);
34
- }
35
- }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL21ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGFBQWtCO0lBQzNELFlBQVksR0FBYSxFQUFFLFFBQTRCO1FBQ3JELEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQWE7UUFDMUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsWUFBWTtJQUVaLE1BQU07UUFDSixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsR0FBRyxDQUFDLE9BQXNCO1FBQ2xDLE9BQU8sS0FBSzthQUNULEdBQUcsaUJBQUcsWUFBWSxFQUFFLE1BQU0sSUFBSyxPQUFPLEVBQUc7YUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxZQUFZO0lBRVosbUJBQW1CO0lBQ25CLEtBQUssQ0FBQyxPQUFzQjtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgJE1FVEFEQVRBIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vLi4vYXBpJztcbmltcG9ydCB7IE9EYXRhTWV0YWRhdGEgfSBmcm9tICcuLi9yZXNwb25zZXMnO1xuaW1wb3J0IHsgT0RhdGFPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVJlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnROYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhTWV0YWRhdGFSZXNvdXJjZSBleHRlbmRzIE9EYXRhUmVzb3VyY2U8YW55PiB7XG4gIGNvbnN0cnVjdG9yKGFwaTogT0RhdGFBcGksIHNlZ21lbnRzPzogT0RhdGFQYXRoU2VnbWVudHMpIHtcbiAgICBzdXBlcihhcGksIHNlZ21lbnRzKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5KGFwaTogT0RhdGFBcGkpIHtcbiAgICBsZXQgc2VnbWVudHMgPSBuZXcgT0RhdGFQYXRoU2VnbWVudHMoKTtcbiAgICBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnROYW1lcy5tZXRhZGF0YSwgJE1FVEFEQVRBKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhTWV0YWRhdGFSZXNvdXJjZShhcGksIHNlZ21lbnRzKTtcbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgT0RhdGFNZXRhZGF0YVJlc291cmNlKHRoaXMuYXBpLCB0aGlzLmNsb25lU2VnbWVudHMoKSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgc2NoZW1hKCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyNyZWdpb24gUmVxdWVzdHNcbiAgcHJvdGVjdGVkIGdldChvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTxPRGF0YU1ldGFkYXRhPiB7XG4gICAgcmV0dXJuIHN1cGVyXG4gICAgICAuZ2V0KHsgcmVzcG9uc2VUeXBlOiAndGV4dCcsIC4uLm9wdGlvbnMgfSlcbiAgICAgIC5waXBlKG1hcCgoYm9keTogYW55KSA9PiBuZXcgT0RhdGFNZXRhZGF0YShib2R5KSkpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgZmV0Y2gob3B0aW9ucz86IE9EYXRhT3B0aW9ucyk6IE9ic2VydmFibGU8T0RhdGFNZXRhZGF0YT4ge1xuICAgIHJldHVybiB0aGlzLmdldChvcHRpb25zKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==