angular-odata 0.78.1 → 0.95.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +133 -62
  2. package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
  3. package/esm2020/lib/api.mjs +303 -0
  4. package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +12 -5
  5. package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
  6. package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +0 -0
  7. package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +1 -1
  8. package/esm2020/lib/client.mjs +271 -0
  9. package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +9 -3
  10. package/esm2020/lib/helper.mjs +268 -0
  11. package/esm2020/lib/index.mjs +19 -0
  12. package/esm2020/lib/models/collection.mjs +741 -0
  13. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  14. package/esm2020/lib/models/model.mjs +453 -0
  15. package/esm2020/lib/models/options.mjs +945 -0
  16. package/{esm2015/lib/module.js → esm2020/lib/module.mjs} +6 -6
  17. package/esm2020/lib/options.mjs +32 -0
  18. package/esm2020/lib/resources/index.mjs +7 -0
  19. package/esm2020/lib/resources/path/handlers.mjs +69 -0
  20. package/esm2020/lib/resources/path/index.mjs +3 -0
  21. package/esm2020/lib/resources/path/segments.mjs +124 -0
  22. package/esm2020/lib/resources/query/builder.mjs +590 -0
  23. package/esm2020/lib/resources/query/expressions.mjs +207 -0
  24. package/esm2020/lib/resources/query/handlers.mjs +186 -0
  25. package/esm2020/lib/resources/query/index.mjs +4 -0
  26. package/esm2020/lib/resources/query/options.mjs +103 -0
  27. package/esm2020/lib/resources/query/syntax.mjs +406 -0
  28. package/esm2020/lib/resources/request.mjs +167 -0
  29. package/esm2020/lib/resources/resource.mjs +326 -0
  30. package/esm2020/lib/resources/responses/annotations.mjs +119 -0
  31. package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
  32. package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
  33. package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
  34. package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
  35. package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
  36. package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
  37. package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
  38. package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
  39. package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
  40. package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
  41. package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
  42. package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
  43. package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
  44. package/esm2020/lib/resources/responses/metadata.mjs +547 -0
  45. package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +1 -1
  46. package/esm2020/lib/resources/responses/response.mjs +170 -0
  47. package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +1 -1
  48. package/esm2020/lib/resources/types/action.mjs +101 -0
  49. package/esm2020/lib/resources/types/batch.mjs +288 -0
  50. package/esm2020/lib/resources/types/count.mjs +27 -0
  51. package/esm2020/lib/resources/types/entity-set.mjs +94 -0
  52. package/esm2020/lib/resources/types/entity.mjs +106 -0
  53. package/esm2020/lib/resources/types/function.mjs +137 -0
  54. package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
  55. package/esm2020/lib/resources/types/media.mjs +41 -0
  56. package/esm2020/lib/resources/types/metadata.mjs +30 -0
  57. package/esm2020/lib/resources/types/navigation-property.mjs +226 -0
  58. package/esm2020/lib/resources/types/options.mjs +2 -0
  59. package/esm2020/lib/resources/types/property.mjs +183 -0
  60. package/esm2020/lib/resources/types/reference.mjs +85 -0
  61. package/esm2020/lib/resources/types/singleton.mjs +126 -0
  62. package/esm2020/lib/resources/types/value.mjs +41 -0
  63. package/esm2020/lib/schema/annotation.mjs +37 -0
  64. package/esm2020/lib/schema/callable.mjs +62 -0
  65. package/esm2020/lib/schema/element.mjs +51 -0
  66. package/esm2020/lib/schema/entity-container.mjs +9 -0
  67. package/esm2020/lib/schema/entity-set.mjs +9 -0
  68. package/esm2020/lib/schema/enum-type.mjs +71 -0
  69. package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +2 -1
  70. package/esm2020/lib/schema/parsers/callable.mjs +113 -0
  71. package/esm2020/lib/schema/parsers/edm.mjs +95 -0
  72. package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
  73. package/esm2020/lib/schema/parsers/index.mjs +5 -0
  74. package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
  75. package/esm2020/lib/schema/schema.mjs +61 -0
  76. package/esm2020/lib/schema/structured-type.mjs +198 -0
  77. package/esm2020/lib/services/base.mjs +29 -0
  78. package/esm2020/lib/services/entity-set.mjs +143 -0
  79. package/esm2020/lib/services/entity.mjs +12 -0
  80. package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
  81. package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
  82. package/esm2020/lib/services/singleton.mjs +48 -0
  83. package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
  84. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  85. package/esm2020/lib/types.mjs +37 -0
  86. package/esm2020/lib/utils/arraybuffers.mjs +46 -0
  87. package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
  88. package/esm2020/lib/utils/durations.mjs +40 -0
  89. package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
  90. package/esm2020/lib/utils/http.mjs +93 -0
  91. package/esm2020/lib/utils/index.mjs +10 -0
  92. package/esm2020/lib/utils/objects.mjs +195 -0
  93. package/esm2020/lib/utils/odata.mjs +22 -0
  94. package/esm2020/lib/utils/strings.mjs +20 -0
  95. package/esm2020/lib/utils/types.mjs +134 -0
  96. package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
  97. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  98. package/fesm2015/{angular-odata.js → angular-odata.mjs} +5068 -3943
  99. package/fesm2015/angular-odata.mjs.map +1 -0
  100. package/fesm2020/angular-odata.mjs +10274 -0
  101. package/fesm2020/angular-odata.mjs.map +1 -0
  102. package/lib/api.d.ts +17 -16
  103. package/lib/cache/cache.d.ts +2 -2
  104. package/lib/client.d.ts +93 -18
  105. package/lib/constants.d.ts +6 -2
  106. package/lib/helper.d.ts +3 -3
  107. package/lib/index.d.ts +0 -1
  108. package/lib/models/collection.d.ts +36 -47
  109. package/lib/models/model.d.ts +47 -40
  110. package/lib/models/options.d.ts +53 -52
  111. package/lib/options.d.ts +50 -2
  112. package/lib/resources/index.d.ts +2 -3
  113. package/lib/resources/path/handlers.d.ts +27 -0
  114. package/lib/resources/path/index.d.ts +2 -0
  115. package/lib/resources/{path-segments.d.ts → path/segments.d.ts} +4 -16
  116. package/lib/resources/{builder.d.ts → query/builder.d.ts} +12 -7
  117. package/lib/resources/query/expressions.d.ts +63 -0
  118. package/lib/resources/query/handlers.d.ts +89 -0
  119. package/lib/resources/query/index.d.ts +3 -0
  120. package/lib/resources/query/options.d.ts +38 -0
  121. package/lib/resources/query/syntax.d.ts +175 -0
  122. package/lib/resources/request.d.ts +8 -6
  123. package/lib/resources/resource.d.ts +49 -55
  124. package/lib/resources/responses/metadata.d.ts +1 -1
  125. package/lib/resources/responses/types.d.ts +1 -1
  126. package/lib/resources/types/action.d.ts +55 -69
  127. package/lib/resources/types/batch.d.ts +13 -8
  128. package/lib/resources/types/count.d.ts +16 -19
  129. package/lib/resources/types/entity-set.d.ts +24 -62
  130. package/lib/resources/types/entity.d.ts +35 -43
  131. package/lib/resources/types/function.d.ts +63 -71
  132. package/lib/resources/types/media.d.ts +20 -22
  133. package/lib/resources/types/metadata.d.ts +5 -7
  134. package/lib/resources/types/navigation-property.d.ts +100 -85
  135. package/lib/resources/types/options.d.ts +8 -8
  136. package/lib/resources/types/property.d.ts +63 -73
  137. package/lib/resources/types/reference.d.ts +72 -16
  138. package/lib/resources/types/singleton.d.ts +75 -43
  139. package/lib/resources/types/value.d.ts +18 -9
  140. package/lib/schema/annotation.d.ts +18 -0
  141. package/lib/schema/callable.d.ts +27 -11
  142. package/lib/schema/element.d.ts +39 -0
  143. package/lib/schema/entity-container.d.ts +3 -8
  144. package/lib/schema/entity-set.d.ts +3 -9
  145. package/lib/schema/enum-type.d.ts +41 -14
  146. package/lib/schema/index.d.ts +1 -0
  147. package/lib/{parsers → schema/parsers}/callable.d.ts +2 -2
  148. package/lib/schema/parsers/edm.d.ts +4 -0
  149. package/lib/{parsers → schema/parsers}/enum-type.d.ts +13 -7
  150. package/lib/{parsers → schema/parsers}/index.d.ts +0 -0
  151. package/lib/{parsers → schema/parsers}/structured-type.d.ts +14 -9
  152. package/lib/schema/schema.d.ts +6 -8
  153. package/lib/schema/structured-type.d.ts +97 -18
  154. package/lib/services/base.d.ts +12 -12
  155. package/lib/services/entity-set.d.ts +15 -12
  156. package/lib/services/entity.d.ts +4 -1
  157. package/lib/services/singleton.d.ts +6 -3
  158. package/lib/settings.d.ts +4 -4
  159. package/lib/types.d.ts +7 -3
  160. package/lib/utils/arraybuffers.d.ts +4 -0
  161. package/lib/{parsers/edm.d.ts → utils/durations.d.ts} +3 -3
  162. package/lib/utils/http.d.ts +9 -0
  163. package/lib/utils/index.d.ts +5 -2
  164. package/lib/utils/objects.d.ts +1 -1
  165. package/lib/utils/strings.d.ts +4 -0
  166. package/lib/utils/types.d.ts +2 -0
  167. package/package.json +21 -8
  168. package/bundles/angular-odata.umd.js +0 -10756
  169. package/bundles/angular-odata.umd.js.map +0 -1
  170. package/esm2015/lib/api.js +0 -251
  171. package/esm2015/lib/client.js +0 -197
  172. package/esm2015/lib/helper.js +0 -269
  173. package/esm2015/lib/index.js +0 -21
  174. package/esm2015/lib/models/collection.js +0 -660
  175. package/esm2015/lib/models/model.js +0 -421
  176. package/esm2015/lib/models/options.js +0 -889
  177. package/esm2015/lib/options.js +0 -31
  178. package/esm2015/lib/parsers/callable.js +0 -110
  179. package/esm2015/lib/parsers/edm.js +0 -310
  180. package/esm2015/lib/parsers/enum-type.js +0 -97
  181. package/esm2015/lib/parsers/index.js +0 -5
  182. package/esm2015/lib/parsers/structured-type.js +0 -394
  183. package/esm2015/lib/resources/builder.js +0 -537
  184. package/esm2015/lib/resources/index.js +0 -8
  185. package/esm2015/lib/resources/path-segments.js +0 -156
  186. package/esm2015/lib/resources/query-options.js +0 -157
  187. package/esm2015/lib/resources/request.js +0 -141
  188. package/esm2015/lib/resources/resource.js +0 -328
  189. package/esm2015/lib/resources/responses/annotations.js +0 -121
  190. package/esm2015/lib/resources/responses/metadata.js +0 -548
  191. package/esm2015/lib/resources/responses/response.js +0 -170
  192. package/esm2015/lib/resources/types/action.js +0 -146
  193. package/esm2015/lib/resources/types/batch.js +0 -330
  194. package/esm2015/lib/resources/types/count.js +0 -50
  195. package/esm2015/lib/resources/types/entity-set.js +0 -164
  196. package/esm2015/lib/resources/types/entity.js +0 -158
  197. package/esm2015/lib/resources/types/function.js +0 -166
  198. package/esm2015/lib/resources/types/media.js +0 -46
  199. package/esm2015/lib/resources/types/metadata.js +0 -36
  200. package/esm2015/lib/resources/types/navigation-property.js +0 -214
  201. package/esm2015/lib/resources/types/options.js +0 -2
  202. package/esm2015/lib/resources/types/property.js +0 -190
  203. package/esm2015/lib/resources/types/reference.js +0 -50
  204. package/esm2015/lib/resources/types/singleton.js +0 -147
  205. package/esm2015/lib/resources/types/value.js +0 -30
  206. package/esm2015/lib/schema/annotation.js +0 -7
  207. package/esm2015/lib/schema/callable.js +0 -50
  208. package/esm2015/lib/schema/entity-container.js +0 -17
  209. package/esm2015/lib/schema/entity-set.js +0 -23
  210. package/esm2015/lib/schema/enum-type.js +0 -68
  211. package/esm2015/lib/schema/schema.js +0 -55
  212. package/esm2015/lib/schema/structured-type.js +0 -107
  213. package/esm2015/lib/services/base.js +0 -23
  214. package/esm2015/lib/services/entity-set.js +0 -143
  215. package/esm2015/lib/services/entity.js +0 -10
  216. package/esm2015/lib/services/singleton.js +0 -46
  217. package/esm2015/lib/types.js +0 -37
  218. package/esm2015/lib/utils/http.js +0 -59
  219. package/esm2015/lib/utils/index.js +0 -7
  220. package/esm2015/lib/utils/objects.js +0 -140
  221. package/esm2015/lib/utils/odata.js +0 -21
  222. package/esm2015/lib/utils/types.js +0 -103
  223. package/fesm2015/angular-odata.js.map +0 -1
  224. package/lib/resources/query-options.d.ts +0 -57
@@ -0,0 +1,183 @@
1
+ import { EMPTY } from 'rxjs';
2
+ import { concatMap, expand, map, toArray } from 'rxjs/operators';
3
+ import { ODataStructuredType } from '../../schema';
4
+ //import { ODataNavigationPropertyResource } from './navigation-property';
5
+ import { PathSegmentNames } from '../../types';
6
+ import { ODataResource } from '../resource';
7
+ import { ODataValueResource } from './value';
8
+ export class ODataPropertyResource extends ODataResource {
9
+ //#region Factory
10
+ static factory(api, { path, type, schema, segments, query, }) {
11
+ const segment = segments.add(PathSegmentNames.property, path);
12
+ if (schema !== undefined)
13
+ segment.type(schema.type());
14
+ else if (type !== undefined)
15
+ segment.type(type);
16
+ query?.clear();
17
+ return new ODataPropertyResource(api, {
18
+ segments,
19
+ query,
20
+ schema,
21
+ });
22
+ }
23
+ static fromResource(resource, path) {
24
+ const baseType = resource.type();
25
+ let baseSchema = resource.schema;
26
+ let fieldType;
27
+ let fieldSchema;
28
+ if (baseSchema !== undefined) {
29
+ const field = baseSchema.findFieldByName(path);
30
+ fieldType = field?.type;
31
+ fieldSchema =
32
+ fieldType !== undefined
33
+ ? resource.api.findStructuredTypeForType(fieldType)
34
+ : undefined;
35
+ baseSchema =
36
+ field !== undefined
37
+ ? baseSchema.findSchemaForField(field)
38
+ : undefined;
39
+ }
40
+ const property = ODataPropertyResource.factory(resource.api, {
41
+ path,
42
+ type: fieldType,
43
+ schema: fieldSchema,
44
+ segments: resource.cloneSegments(),
45
+ query: resource.cloneQuery(),
46
+ });
47
+ // Switch entitySet to binding type if available
48
+ if (baseSchema !== undefined && baseSchema.type() !== baseType) {
49
+ let entitySet = resource.api.findEntitySetForType(baseSchema.type());
50
+ if (entitySet !== undefined) {
51
+ property.segment((s) => s.entitySet().path(entitySet.name));
52
+ }
53
+ }
54
+ return property;
55
+ }
56
+ //#endregion
57
+ key(value) {
58
+ const property = this.clone();
59
+ var key = this.resolveKey(value);
60
+ if (key !== undefined)
61
+ property.segment((s) => s.property().key(key));
62
+ return property;
63
+ }
64
+ keys(values) {
65
+ const property = this.clone();
66
+ const types = this.pathSegments.types({ key: true });
67
+ const keys = values.map((value, index) => ODataResource.resolveKey(value, this.api.findStructuredTypeForType(types[index])));
68
+ property.segment((s) => s.keys(keys));
69
+ return property;
70
+ }
71
+ value() {
72
+ return ODataValueResource.factory(this.api, {
73
+ type: this.returnType(),
74
+ schema: this.schema,
75
+ segments: this.cloneSegments(),
76
+ query: this.cloneQuery(),
77
+ });
78
+ }
79
+ /*
80
+ navigationProperty<N>(path: string) {
81
+ let schema: ODataStructuredType<N> | undefined;
82
+ if (this.schema instanceof ODataStructuredType) {
83
+ const field = this.schema.findFieldByName<any>(path as keyof T);
84
+ schema =
85
+ field !== undefined
86
+ ? this.schema.findSchemaForField<N>(field)
87
+ : undefined;
88
+ }
89
+ return ODataNavigationPropertyResource.factory<N>(this.api, {
90
+ path,
91
+ schema,
92
+ segments: this.cloneSegments(),
93
+ query: this.cloneQuery<N>(),
94
+ });
95
+ }
96
+ */
97
+ property(path) {
98
+ let type;
99
+ let schema;
100
+ if (this.schema instanceof ODataStructuredType) {
101
+ const field = this.schema.findFieldByName(path);
102
+ type = field?.type;
103
+ schema =
104
+ field !== undefined
105
+ ? this.schema.findSchemaForField(field)
106
+ : undefined;
107
+ }
108
+ return ODataPropertyResource.factory(this.api, {
109
+ path,
110
+ type,
111
+ schema,
112
+ segments: this.cloneSegments(),
113
+ query: this.cloneQuery(),
114
+ });
115
+ }
116
+ //#region Requests
117
+ get(options) {
118
+ return super.get(options);
119
+ }
120
+ fetch(options = {}) {
121
+ return this.get(options);
122
+ }
123
+ /**
124
+ * Fetch the property value
125
+ * @param options Options for the request
126
+ * @returns The property value
127
+ */
128
+ fetchProperty(options = {}) {
129
+ return this.fetch({ responseType: 'property', ...options }).pipe(map(({ property }) => property));
130
+ }
131
+ /**
132
+ * Fetch the entity
133
+ * @param options Options for the request
134
+ * @returns The entity
135
+ */
136
+ fetchEntity(options = {}) {
137
+ return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity }) => entity));
138
+ }
139
+ /**
140
+ * Fetch the entity and return as model
141
+ * @param options Options for the request
142
+ * @returns The model
143
+ */
144
+ fetchModel(options = {}) {
145
+ return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity, annots }) => entity ? this.asModel(entity, { annots, reset: true }) : null));
146
+ }
147
+ /**
148
+ * Fetch the entities
149
+ * @param options Options for the request
150
+ * @returns The entities
151
+ */
152
+ fetchEntities(options = {}) {
153
+ return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities }) => entities));
154
+ }
155
+ /**
156
+ * Fetch the entities and return as collection
157
+ * @param options Options for the request
158
+ * @returns The collection
159
+ */
160
+ fetchCollection(options = {}) {
161
+ return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities, annots }) => entities
162
+ ? this.asCollection(entities, { annots, reset: true })
163
+ : null));
164
+ }
165
+ /**
166
+ * Fetch all entities
167
+ * @param options Options for the request
168
+ * @returns All entities
169
+ */
170
+ fetchAll(options = {}) {
171
+ let res = this.clone();
172
+ // Clean Paging
173
+ res.query((q) => q.clearPaging());
174
+ let fetch = (opts) => {
175
+ if (opts) {
176
+ res.query((q) => q.paging(opts));
177
+ }
178
+ return res.fetch({ responseType: 'entities', ...options });
179
+ };
180
+ return fetch().pipe(expand(({ annots: meta }) => meta.skip || meta.skiptoken ? fetch(meta) : EMPTY), concatMap(({ entities }) => entities || []), toArray());
181
+ }
182
+ }
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL3Byb3BlcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBNkIsTUFBTSxjQUFjLENBQUM7QUFDOUUsMEVBQTBFO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUcvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBYzVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3QyxNQUFNLE9BQU8scUJBQXlCLFNBQVEsYUFBZ0I7SUFDNUQsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLEVBQ0UsSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssR0FPTjtRQUVELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ2pELElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBSSxxQkFBcUIsQ0FBSSxHQUFHLEVBQUU7WUFDdkMsUUFB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QUFDO1FBQzdELENBQUMsQ0FBQztRQUNGLE9BQU8sS0FBSyxFQUFFLENBQUMsSUFBSSxDQUNqQixNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQzFCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQ2xELEVBQ0QsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUMzQyxPQUFPLEVBQUUsQ0FDVixDQUFDO0lBQ0osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbmNhdE1hcCwgZXhwYW5kLCBtYXAsIHRvQXJyYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBPRGF0YUNvbGxlY3Rpb24sIE9EYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgT0RhdGFTdHJ1Y3R1cmVkVHlwZSwgT0RhdGFTdHJ1Y3R1cmVkVHlwZVBhcnNlciB9IGZyb20gJy4uLy4uL3NjaGVtYSc7XG4vL2ltcG9ydCB7IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UgfSBmcm9tICcuL25hdmlnYXRpb24tcHJvcGVydHknO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnROYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQge1xuICBPRGF0YUVudGl0aWVzLFxuICBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXR5LFxuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxuICBPRGF0YVByb3BlcnR5LFxufSBmcm9tICcuLi9yZXNwb25zZXMnO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdGllc09wdGlvbnMsXG4gIE9EYXRhRW50aXR5T3B0aW9ucyxcbiAgT0RhdGFPcHRpb25zLFxuICBPRGF0YVByb3BlcnR5T3B0aW9ucyxcbn0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IE9EYXRhVmFsdWVSZXNvdXJjZSB9IGZyb20gJy4vdmFsdWUnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+IGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxUPiB7XG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5PFA+KFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAge1xuICAgICAgcGF0aCxcbiAgICAgIHR5cGUsXG4gICAgICBzY2hlbWEsXG4gICAgICBzZWdtZW50cyxcbiAgICAgIHF1ZXJ5LFxuICAgIH06IHtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgICBzY2hlbWE/OiBPRGF0YVN0cnVjdHVyZWRUeXBlPFA+O1xuICAgICAgc2VnbWVudHM6IE9EYXRhUGF0aFNlZ21lbnRzO1xuICAgICAgcXVlcnk/OiBPRGF0YVF1ZXJ5T3B0aW9uczxQPjtcbiAgICB9XG4gICkge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnROYW1lcy5wcm9wZXJ0eSwgcGF0aCk7XG4gICAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnR5cGUoc2NoZW1hLnR5cGUoKSk7XG4gICAgZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnR5cGUodHlwZSk7XG5cbiAgICBxdWVyeT8uY2xlYXIoKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxQPihhcGksIHtcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgICBzY2hlbWEsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlc291cmNlPE4+KHJlc291cmNlOiBPRGF0YVJlc291cmNlPGFueT4sIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gcmVzb3VyY2UudHlwZSgpO1xuICAgIGxldCBiYXNlU2NoZW1hID0gcmVzb3VyY2Uuc2NoZW1hIGFzIE9EYXRhU3RydWN0dXJlZFR5cGU8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZmllbGRUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZpZWxkU2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPE4+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChiYXNlU2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gYmFzZVNjaGVtYS5maW5kRmllbGRCeU5hbWU8Tj4ocGF0aCk7XG4gICAgICBmaWVsZFR5cGUgPSBmaWVsZD8udHlwZTtcbiAgICAgIGZpZWxkU2NoZW1hID1cbiAgICAgICAgZmllbGRUeXBlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHJlc291cmNlLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlKGZpZWxkVHlwZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGJhc2VTY2hlbWEgPVxuICAgICAgICBmaWVsZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBiYXNlU2NoZW1hLmZpbmRTY2hlbWFGb3JGaWVsZDxOPihmaWVsZClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eSA9IE9EYXRhUHJvcGVydHlSZXNvdXJjZS5mYWN0b3J5PE4+KHJlc291cmNlLmFwaSwge1xuICAgICAgcGF0aCxcbiAgICAgIHR5cGU6IGZpZWxkVHlwZSxcbiAgICAgIHNjaGVtYTogZmllbGRTY2hlbWEsXG4gICAgICBzZWdtZW50czogcmVzb3VyY2UuY2xvbmVTZWdtZW50cygpLFxuICAgICAgcXVlcnk6IHJlc291cmNlLmNsb25lUXVlcnk8Tj4oKSxcbiAgICB9KTtcblxuICAgIC8vIFN3aXRjaCBlbnRpdHlTZXQgdG8gYmluZGluZyB0eXBlIGlmIGF2YWlsYWJsZVxuICAgIGlmIChiYXNlU2NoZW1hICE9PSB1bmRlZmluZWQgJiYgYmFzZVNjaGVtYS50eXBlKCkgIT09IGJhc2VUeXBlKSB7XG4gICAgICBsZXQgZW50aXR5U2V0ID0gcmVzb3VyY2UuYXBpLmZpbmRFbnRpdHlTZXRGb3JUeXBlKGJhc2VTY2hlbWEudHlwZSgpKTtcbiAgICAgIGlmIChlbnRpdHlTZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wZXJ0eS5zZWdtZW50KChzKSA9PiBzLmVudGl0eVNldCgpLnBhdGgoZW50aXR5U2V0IS5uYW1lKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGtleSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmNsb25lPE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPj4oKTtcbiAgICB2YXIga2V5ID0gdGhpcy5yZXNvbHZlS2V5KHZhbHVlKTtcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHByb3BlcnR5LnNlZ21lbnQoKHMpID0+IHMucHJvcGVydHkoKS5rZXkoa2V5KSk7XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAga2V5cyh2YWx1ZXM6IGFueVtdKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmNsb25lPE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPj4oKTtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMucGF0aFNlZ21lbnRzLnR5cGVzKHsga2V5OiB0cnVlIH0pO1xuICAgIGNvbnN0IGtleXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+XG4gICAgICBPRGF0YVJlc291cmNlLnJlc29sdmVLZXkoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGVzW2luZGV4XSlcbiAgICAgIClcbiAgICApO1xuICAgIHByb3BlcnR5LnNlZ21lbnQoKHMpID0+IHMua2V5cyhrZXlzKSk7XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgdmFsdWUoKSB7XG4gICAgcmV0dXJuIE9EYXRhVmFsdWVSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMuYXBpLCB7XG4gICAgICB0eXBlOiB0aGlzLnJldHVyblR5cGUoKSxcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEgYXMgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPixcbiAgICAgIHNlZ21lbnRzOiB0aGlzLmNsb25lU2VnbWVudHMoKSxcbiAgICAgIHF1ZXJ5OiB0aGlzLmNsb25lUXVlcnk8VD4oKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gIG5hdmlnYXRpb25Qcm9wZXJ0eTxOPihwYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgc2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPE4+IHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnNjaGVtYSBpbnN0YW5jZW9mIE9EYXRhU3RydWN0dXJlZFR5cGUpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5zY2hlbWEuZmluZEZpZWxkQnlOYW1lPGFueT4ocGF0aCBhcyBrZXlvZiBUKTtcbiAgICAgIHNjaGVtYSA9XG4gICAgICAgIGZpZWxkICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuc2NoZW1hLmZpbmRTY2hlbWFGb3JGaWVsZDxOPihmaWVsZClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UuZmFjdG9yeTxOPih0aGlzLmFwaSwge1xuICAgICAgcGF0aCxcbiAgICAgIHNjaGVtYSxcbiAgICAgIHNlZ21lbnRzOiB0aGlzLmNsb25lU2VnbWVudHMoKSxcbiAgICAgIHF1ZXJ5OiB0aGlzLmNsb25lUXVlcnk8Tj4oKSxcbiAgICB9KTtcbiAgfVxuICAqL1xuXG4gIHByb3BlcnR5PFA+KHBhdGg6IHN0cmluZykge1xuICAgIGxldCB0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHNjaGVtYTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxQPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5zY2hlbWEgaW5zdGFuY2VvZiBPRGF0YVN0cnVjdHVyZWRUeXBlKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHRoaXMuc2NoZW1hLmZpbmRGaWVsZEJ5TmFtZTxhbnk+KHBhdGggYXMga2V5b2YgVCk7XG4gICAgICB0eXBlID0gZmllbGQ/LnR5cGU7XG4gICAgICBzY2hlbWEgPVxuICAgICAgICBmaWVsZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLnNjaGVtYS5maW5kU2NoZW1hRm9yRmllbGQ8UD4oZmllbGQpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBPRGF0YVByb3BlcnR5UmVzb3VyY2UuZmFjdG9yeTxQPih0aGlzLmFwaSwge1xuICAgICAgcGF0aCxcbiAgICAgIHR5cGUsXG4gICAgICBzY2hlbWEsXG4gICAgICBzZWdtZW50czogdGhpcy5jbG9uZVNlZ21lbnRzKCksXG4gICAgICBxdWVyeTogdGhpcy5jbG9uZVF1ZXJ5PFA+KCksXG4gICAgfSk7XG4gIH1cblxuICAvLyNyZWdpb24gUmVxdWVzdHNcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldChcbiAgICBvcHRpb25zOiBPRGF0YUVudGl0eU9wdGlvbnMgJiBPRGF0YUVudGl0aWVzT3B0aW9ucyAmIE9EYXRhUHJvcGVydHlPcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLmdldChvcHRpb25zKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gU2hvcnRjdXRzXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgcHJvcGVydHlcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybiBUaGUgZW50aXR5IC8gZW50aXRpZXMgLyBwcm9wZXJ0eSB2YWx1ZVxuICAgKi9cbiAgZmV0Y2goXG4gICAgb3B0aW9ucz86IE9EYXRhRW50aXR5T3B0aW9ucyAmIHsgZXRhZz86IHN0cmluZyB9XG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+O1xuICBmZXRjaChvcHRpb25zPzogT0RhdGFFbnRpdGllc09wdGlvbnMpOiBPYnNlcnZhYmxlPE9EYXRhRW50aXRpZXM8VD4+O1xuICBmZXRjaChvcHRpb25zPzogT0RhdGFQcm9wZXJ0eU9wdGlvbnMpOiBPYnNlcnZhYmxlPE9EYXRhUHJvcGVydHk8VD4+O1xuICBmZXRjaChcbiAgICBvcHRpb25zOiBPRGF0YUVudGl0eU9wdGlvbnMgJlxuICAgICAgT0RhdGFFbnRpdGllc09wdGlvbnMgJlxuICAgICAgT0RhdGFQcm9wZXJ0eU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgcHJvcGVydHkgdmFsdWVcbiAgICovXG4gIGZldGNoUHJvcGVydHkoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBwcm9wZXJ0eSB9KSA9PiBwcm9wZXJ0eSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdHlcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGVudGl0eVxuICAgKi9cbiAgZmV0Y2hFbnRpdHkoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5IH0pID0+IGVudGl0eSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdHkgYW5kIHJldHVybiBhcyBtb2RlbFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWxcbiAgICovXG4gIGZldGNoTW9kZWw8TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHsgZXRhZz86IHN0cmluZyB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxNIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0eSwgYW5ub3RzIH0pID0+XG4gICAgICAgIGVudGl0eSA/IHRoaXMuYXNNb2RlbDxNPihlbnRpdHksIHsgYW5ub3RzLCByZXNldDogdHJ1ZSB9KSA6IG51bGxcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgZW50aXRpZXNcbiAgICovXG4gIGZldGNoRW50aXRpZXMoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYgeyB3aXRoQ291bnQ/OiBib29sZWFuIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPFRbXSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzIH0pID0+IGVudGl0aWVzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGVudGl0aWVzIGFuZCByZXR1cm4gYXMgY29sbGVjdGlvblxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgY29sbGVjdGlvblxuICAgKi9cbiAgZmV0Y2hDb2xsZWN0aW9uPE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+LCBDIGV4dGVuZHMgT0RhdGFDb2xsZWN0aW9uPFQsIE0+PihcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IHdpdGhDb3VudD86IGJvb2xlYW4gfSA9IHt9XG4gICk6IE9ic2VydmFibGU8QyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXRpZXNcbiAgICAgICAgICA/IHRoaXMuYXNDb2xsZWN0aW9uPE0sIEM+KGVudGl0aWVzLCB7IGFubm90cywgcmVzZXQ6IHRydWUgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFsbCBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBBbGwgZW50aXRpZXNcbiAgICovXG4gIGZldGNoQWxsKG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBsZXQgcmVzID0gdGhpcy5jbG9uZTxPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD4+KCk7XG4gICAgLy8gQ2xlYW4gUGFnaW5nXG4gICAgcmVzLnF1ZXJ5KChxKSA9PiBxLmNsZWFyUGFnaW5nKCkpO1xuICAgIGxldCBmZXRjaCA9IChvcHRzPzoge1xuICAgICAgc2tpcD86IG51bWJlcjtcbiAgICAgIHNraXB0b2tlbj86IHN0cmluZztcbiAgICAgIHRvcD86IG51bWJlcjtcbiAgICB9KTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0aWVzPFQ+PiA9PiB7XG4gICAgICBpZiAob3B0cykge1xuICAgICAgICByZXMucXVlcnkoKHEpID0+IHEucGFnaW5nKG9wdHMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsIC4uLm9wdGlvbnMgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gZmV0Y2goKS5waXBlKFxuICAgICAgZXhwYW5kKCh7IGFubm90czogbWV0YSB9KSA9PlxuICAgICAgICBtZXRhLnNraXAgfHwgbWV0YS5za2lwdG9rZW4gPyBmZXRjaChtZXRhKSA6IEVNUFRZXG4gICAgICApLFxuICAgICAgY29uY2F0TWFwKCh7IGVudGl0aWVzIH0pID0+IGVudGl0aWVzIHx8IFtdKSxcbiAgICAgIHRvQXJyYXkoKVxuICAgICk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -0,0 +1,85 @@
1
+ import { map } from 'rxjs/operators';
2
+ import { $ID, $REF, ODATA_ID } from '../../constants';
3
+ import { PathSegmentNames } from '../../types';
4
+ import { ODataResource } from '../resource';
5
+ export class ODataReferenceResource extends ODataResource {
6
+ //#region Factory
7
+ static factory(api, { segments, query, }) {
8
+ segments.add(PathSegmentNames.reference, $REF);
9
+ query?.clear();
10
+ return new ODataReferenceResource(api, { segments, query });
11
+ }
12
+ //#endregion
13
+ //#region Requests
14
+ post(target, options) {
15
+ return super.post({ [ODATA_ID]: target.endpointUrl(false) }, options);
16
+ }
17
+ put(target, options) {
18
+ return super.put({ [ODATA_ID]: target.endpointUrl(false) }, options);
19
+ }
20
+ delete({ etag, target, ...options } = {}) {
21
+ if (target) {
22
+ options.params = { [$ID]: target.endpointUrl(false) };
23
+ }
24
+ return super.delete({ etag, ...options });
25
+ }
26
+ //#endregion
27
+ //#region Shortcuts for collections
28
+ /**
29
+ * Add the given target to the collection.
30
+ * @param target The target resource
31
+ * @param options Options for the request
32
+ * @returns Observable of the response
33
+ */
34
+ add(target, options) {
35
+ return this.post(target, options);
36
+ }
37
+ /**
38
+ * Remove the given target from the collection.
39
+ * @param target The target resource
40
+ * @param options Options for the request
41
+ * @returns Observable of the response
42
+ */
43
+ remove(target, options) {
44
+ return this.delete({ target, ...options });
45
+ }
46
+ //#region
47
+ //#region Shortcuts for single
48
+ /**
49
+ * Set the reference to the given target.
50
+ * @param target The target resource
51
+ * @param options Options for the request
52
+ * @returns Observable of the response
53
+ */
54
+ set(target, options) {
55
+ return this.put(target, options);
56
+ }
57
+ /**
58
+ * Unset the reference to the given target.
59
+ * @param options Options for the request.
60
+ * @returns Observable of the response
61
+ */
62
+ unset(options) {
63
+ return this.delete(options);
64
+ }
65
+ fetch(options = {}) {
66
+ return this.get(options);
67
+ }
68
+ /**
69
+ * Fetch the entity
70
+ * @param options Options for the request
71
+ * @returns The entity
72
+ */
73
+ fetchEntity(options = {}) {
74
+ return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity }) => entity));
75
+ }
76
+ /**
77
+ * Fetch entities
78
+ * @param options Options for the request
79
+ * @returns The entities
80
+ */
81
+ fetchEntities(options = {}) {
82
+ return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities }) => entities));
83
+ }
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy90eXBlcy9yZWZlcmVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFHakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVM1QyxNQUFNLE9BQU8sc0JBQTBCLFNBQVEsYUFBZ0I7SUFDN0QsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLEVBQ0UsUUFBUSxFQUNSLEtBQUssR0FDeUQ7UUFFaEUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0MsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxJQUFJLHNCQUFzQixDQUFJLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxZQUFZO0lBRVosa0JBQWtCO0lBQ0MsSUFBSSxDQUNyQixNQUFnQyxFQUNoQyxPQUFzQjtRQUV0QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRWtCLEdBQUcsQ0FDcEIsTUFBZ0MsRUFDaEMsT0FBMEM7UUFFMUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVrQixNQUFNLENBQUMsRUFDeEIsSUFBSSxFQUNKLE1BQU0sRUFDTixHQUFHLE9BQU8sS0FJTyxFQUFFO1FBQ25CLElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ3ZEO1FBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsWUFBWTtJQUVaLG1DQUFtQztJQUNuQzs7Ozs7T0FLRztJQUNILEdBQUcsQ0FDRCxNQUFnQyxFQUNoQyxPQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FDSixNQUFpQyxFQUNqQyxPQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxTQUFTO0lBRVQsOEJBQThCO0lBQzlCOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUNELE1BQWdDLEVBQ2hDLE9BQTBDO1FBRTFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsT0FBMEM7UUFDOUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFxQkQsS0FBSyxDQUNILFVBSU0sRUFBRTtRQUVSLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FDVCxVQUdJLEVBQUU7UUFFTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzVELEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQ1gsVUFFSSxFQUFFO1FBRU4sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FDaEMsQ0FBQztJQUNKLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vLi4vYXBpJztcbmltcG9ydCB7ICRJRCwgJFJFRiwgT0RBVEFfSUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnROYW1lcywgUXVlcnlPcHRpb25OYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0aWVzLCBPRGF0YUVudGl0eSB9IGZyb20gJy4uL3Jlc3BvbnNlcy90eXBlcyc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eVJlc291cmNlIH0gZnJvbSAnLi9lbnRpdHknO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdGllc09wdGlvbnMsXG4gIE9EYXRhRW50aXR5T3B0aW9ucyxcbiAgT0RhdGFPcHRpb25zLFxufSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFSZWZlcmVuY2VSZXNvdXJjZTxUPiBleHRlbmRzIE9EYXRhUmVzb3VyY2U8VD4ge1xuICAvLyNyZWdpb24gRmFjdG9yeVxuICBzdGF0aWMgZmFjdG9yeTxQPihcbiAgICBhcGk6IE9EYXRhQXBpLFxuICAgIHtcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgfTogeyBzZWdtZW50czogT0RhdGFQYXRoU2VnbWVudHM7IHF1ZXJ5PzogT0RhdGFRdWVyeU9wdGlvbnM8UD4gfVxuICApIHtcbiAgICBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnROYW1lcy5yZWZlcmVuY2UsICRSRUYpO1xuICAgIHF1ZXJ5Py5jbGVhcigpO1xuICAgIHJldHVybiBuZXcgT0RhdGFSZWZlcmVuY2VSZXNvdXJjZTxQPihhcGksIHsgc2VnbWVudHMsIHF1ZXJ5IH0pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBSZXF1ZXN0c1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcG9zdChcbiAgICB0YXJnZXQ6IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLnBvc3QoeyBbT0RBVEFfSURdOiB0YXJnZXQuZW5kcG9pbnRVcmwoZmFsc2UpIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHB1dChcbiAgICB0YXJnZXQ6IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH1cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIucHV0KHsgW09EQVRBX0lEXTogdGFyZ2V0LmVuZHBvaW50VXJsKGZhbHNlKSB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBkZWxldGUoe1xuICAgIGV0YWcsXG4gICAgdGFyZ2V0LFxuICAgIC4uLm9wdGlvbnNcbiAgfToge1xuICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgdGFyZ2V0PzogT0RhdGFFbnRpdHlSZXNvdXJjZTxhbnk+O1xuICB9ICYgT0RhdGFPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIG9wdGlvbnMucGFyYW1zID0geyBbJElEXTogdGFyZ2V0LmVuZHBvaW50VXJsKGZhbHNlKSB9O1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKHsgZXRhZywgLi4ub3B0aW9ucyB9KTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gU2hvcnRjdXRzIGZvciBjb2xsZWN0aW9uc1xuICAvKipcbiAgICogQWRkIHRoZSBnaXZlbiB0YXJnZXQgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCByZXNvdXJjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgYWRkKFxuICAgIHRhcmdldDogT0RhdGFFbnRpdHlSZXNvdXJjZTxhbnk+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wb3N0KHRhcmdldCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBnaXZlbiB0YXJnZXQgZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHJlc291cmNlXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3BvbnNlXG4gICAqL1xuICByZW1vdmUoXG4gICAgdGFyZ2V0PzogT0RhdGFFbnRpdHlSZXNvdXJjZTxhbnk+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGUoeyB0YXJnZXQsIC4uLm9wdGlvbnMgfSk7XG4gIH1cbiAgLy8jcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFNob3J0Y3V0cyBmb3Igc2luZ2xlXG4gIC8qKlxuICAgKiBTZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgZ2l2ZW4gdGFyZ2V0LlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgcmVzb3VyY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzcG9uc2VcbiAgICovXG4gIHNldChcbiAgICB0YXJnZXQ6IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH1cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wdXQodGFyZ2V0LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiB0YXJnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgdW5zZXQob3B0aW9ucz86IE9EYXRhT3B0aW9ucyAmIHsgZXRhZz86IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGUob3B0aW9ucyk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEZldGNoXG4gIC8qKlxuICAgKiBGZXRjaCBlbnRpdHkgLyBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJuIEFuIG9ic2VydmFibGUgb2YgdGhlIGVudGl0eSBvciBlbnRpdGllcyB3aXRoIGFubm90YXRpb25zXG4gICAqL1xuICBmZXRjaChcbiAgICBvcHRpb25zPzogT0RhdGFFbnRpdHlPcHRpb25zICYge1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbk5hbWVzW107XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PjtcbiAgZmV0Y2goXG4gICAgb3B0aW9ucz86IE9EYXRhRW50aXRpZXNPcHRpb25zICYge1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbk5hbWVzW107XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXRpZXM8VD4+O1xuICBmZXRjaChcbiAgICBvcHRpb25zOiBPRGF0YUVudGl0eU9wdGlvbnMgJlxuICAgICAgT0RhdGFFbnRpdGllc09wdGlvbnMgJiB7XG4gICAgICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbk5hbWVzW107XG4gICAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGVudGl0eVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgZW50aXR5XG4gICAqL1xuICBmZXRjaEVudGl0eShcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0eSB9KSA9PiBlbnRpdHkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgZW50aXRpZXNcbiAgICovXG4gIGZldGNoRW50aXRpZXMoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxUW10gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdGllcyB9KSA9PiBlbnRpdGllcylcbiAgICApO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxufVxuIl19
@@ -0,0 +1,126 @@
1
+ import { map } from 'rxjs/operators';
2
+ import { PathSegmentNames } from '../../types';
3
+ import { ODataPathSegments } from '../path';
4
+ import { ODataResource } from '../resource';
5
+ import { ODataActionResource } from './action';
6
+ import { ODataFunctionResource } from './function';
7
+ import { ODataNavigationPropertyResource } from './navigation-property';
8
+ import { ODataPropertyResource } from './property';
9
+ export class ODataSingletonResource extends ODataResource {
10
+ //#region Factory
11
+ static factory(api, { path, schema, query, }) {
12
+ const segments = new ODataPathSegments();
13
+ const segment = segments.add(PathSegmentNames.singleton, path);
14
+ if (schema !== undefined)
15
+ segment.type(schema.type());
16
+ return new ODataSingletonResource(api, { segments, query, schema });
17
+ }
18
+ //#endregion
19
+ key(value) {
20
+ const singleton = this.clone();
21
+ var key = this.resolveKey(value);
22
+ if (key !== undefined)
23
+ singleton.segment((s) => s.singleton().key(key));
24
+ return singleton;
25
+ }
26
+ keys(values) {
27
+ const singleton = this.clone();
28
+ const types = this.pathSegments.types({ key: true });
29
+ const keys = values.map((value, index) => ODataResource.resolveKey(value, this.api.findStructuredTypeForType(types[index])));
30
+ singleton.segment((s) => s.keys(keys));
31
+ return singleton;
32
+ }
33
+ navigationProperty(path) {
34
+ return ODataNavigationPropertyResource.fromResource(this, path);
35
+ }
36
+ property(path) {
37
+ return ODataPropertyResource.fromResource(this, path);
38
+ }
39
+ action(path) {
40
+ return ODataActionResource.fromResource(this, path);
41
+ }
42
+ function(path) {
43
+ return ODataFunctionResource.fromResource(this, path);
44
+ }
45
+ //#region Requests
46
+ post(attrs, options = {}) {
47
+ return super.post(attrs, { responseType: 'entity', ...options });
48
+ }
49
+ put(attrs, options = {}) {
50
+ return super.put(attrs, { responseType: 'entity', ...options });
51
+ }
52
+ patch(attrs, options = {}) {
53
+ return super.patch(attrs, { responseType: 'entity', ...options });
54
+ }
55
+ delete(options = {}) {
56
+ return super.delete({ responseType: 'entity', ...options });
57
+ }
58
+ get(options = {}) {
59
+ return super.get({ responseType: 'entity', ...options });
60
+ }
61
+ //#endregion
62
+ //#region Shortcuts
63
+ /**
64
+ * Creates a new entity.
65
+ * @param attrs The entity attributes to create.
66
+ * @param options The options for the request.
67
+ * @returns The created entity with the annotations.
68
+ */
69
+ create(attrs, options) {
70
+ return this.post(attrs, options);
71
+ }
72
+ /**
73
+ * Updates an existing entity.
74
+ * @param attrs The entity attributes to update.
75
+ * @param options The options for the request.
76
+ * @returns The updated entity with the annotations.
77
+ */
78
+ update(attrs, options) {
79
+ return this.put(attrs, options);
80
+ }
81
+ /**
82
+ * Modifies an existing entity.
83
+ * @param attrs The entity attributes to modify.
84
+ * @param options The options for the request.
85
+ * @returns The modified entity with the annotations.
86
+ */
87
+ modify(attrs, options) {
88
+ return this.patch(attrs, options);
89
+ }
90
+ /**
91
+ * Delete an existing entity.
92
+ * @param options The options for the request.
93
+ * @returns Observable of the deleted entity.
94
+ */
95
+ destroy(options) {
96
+ return this.delete(options);
97
+ }
98
+ /**
99
+ * Fetch an existing entity.
100
+ * @param options The options for the request.
101
+ * @param etag The etag to use for the request.
102
+ * @returns Observable of the entity with the annotations.
103
+ */
104
+ fetch(options) {
105
+ return this.get(options);
106
+ }
107
+ /**
108
+ * Fetch an existing entity.
109
+ * @param options The options for the request.
110
+ * @param etag The etag to use for the request.
111
+ * @returns Observable of the entity.
112
+ */
113
+ fetchEntity(options) {
114
+ return this.fetch(options).pipe(map(({ entity }) => entity));
115
+ }
116
+ /**
117
+ * Fetch an existing entity and return a model.
118
+ * @param options The options for the request.
119
+ * @param etag The etag to use for the request.
120
+ * @returns Observable of the entity.
121
+ */
122
+ fetchModel(options) {
123
+ return this.fetch(options).pipe(map(({ entity, annots }) => entity ? this.asModel(entity, { annots, reset: true }) : null));
124
+ }
125
+ }
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy90eXBlcy9zaW5nbGV0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXJDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkQsTUFBTSxPQUFPLHNCQUEwQixTQUFRLGFBQWdCO0lBQzdELGlCQUFpQjtJQUNqQixNQUFNLENBQUMsT0FBTyxDQUNaLEdBQWEsRUFDYixFQUNFLElBQUksRUFDSixNQUFNLEVBQ04sS0FBSyxHQUtOO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxzQkFBc0IsQ0FBSSxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELFlBQVk7SUFFWixHQUFHLENBQUMsS0FBVTtRQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQTZCLENBQUM7UUFDMUQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLEdBQUcsS0FBSyxTQUFTO1lBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBYTtRQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUE2QixDQUFDO1FBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUN2QyxhQUFhLENBQUMsVUFBVSxDQUN0QixLQUFLLEVBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDcEQsQ0FDRixDQUFDO1FBQ0YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxrQkFBa0IsQ0FBSSxJQUFZO1FBQ2hDLE9BQU8sK0JBQStCLENBQUMsWUFBWSxDQUFJLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsUUFBUSxDQUFJLElBQVk7UUFDdEIsT0FBTyxxQkFBcUIsQ0FBQyxZQUFZLENBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxNQUFNLENBQU8sSUFBWTtRQUN2QixPQUFPLG1CQUFtQixDQUFDLFlBQVksQ0FBTyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELFFBQVEsQ0FBTyxJQUFZO1FBQ3pCLE9BQU8scUJBQXFCLENBQUMsWUFBWSxDQUFPLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsa0JBQWtCO0lBQ0MsSUFBSSxDQUNyQixLQUFpQixFQUNqQixVQUF3QixFQUFFO1FBRTFCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRWtCLEdBQUcsQ0FDcEIsS0FBaUIsRUFDakIsVUFBNEMsRUFBRTtRQUU5QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVrQixLQUFLLENBQ3RCLEtBQWlCLEVBQ2pCLFVBQTRDLEVBQUU7UUFFOUMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFa0IsTUFBTSxDQUN2QixVQUE0QyxFQUFFO1FBRTlDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFa0IsR0FBRyxDQUNwQixVQUdJLEVBQUU7UUFFTixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsWUFBWTtJQUVaLG1CQUFtQjtJQUNuQjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FDSixLQUFpQixFQUNqQixPQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FDSixLQUFpQixFQUNqQixPQUEwQztRQUUxQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FDSixLQUFpQixFQUNqQixPQUEwQztRQUUxQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLE9BQTBDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQ0gsT0FHQztRQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLENBQ1QsT0FHQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQ1IsT0FHQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzdCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FDekIsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFJLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNqRSxDQUNGLENBQUM7SUFDSixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBPRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IE9EYXRhU3RydWN0dXJlZFR5cGUgfSBmcm9tICcuLi8uLi9zY2hlbWEnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnROYW1lcywgUXVlcnlPcHRpb25OYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eSB9IGZyb20gJy4uL3Jlc3BvbnNlcyc7XG5pbXBvcnQgeyBPRGF0YUFjdGlvblJlc291cmNlIH0gZnJvbSAnLi9hY3Rpb24nO1xuaW1wb3J0IHsgT0RhdGFGdW5jdGlvblJlc291cmNlIH0gZnJvbSAnLi9mdW5jdGlvbic7XG5pbXBvcnQgeyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLXByb3BlcnR5JztcbmltcG9ydCB7IE9EYXRhT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBPRGF0YVByb3BlcnR5UmVzb3VyY2UgfSBmcm9tICcuL3Byb3BlcnR5JztcblxuZXhwb3J0IGNsYXNzIE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD4gZXh0ZW5kcyBPRGF0YVJlc291cmNlPFQ+IHtcbiAgLy8jcmVnaW9uIEZhY3RvcnlcbiAgc3RhdGljIGZhY3Rvcnk8Uz4oXG4gICAgYXBpOiBPRGF0YUFwaSxcbiAgICB7XG4gICAgICBwYXRoLFxuICAgICAgc2NoZW1hLFxuICAgICAgcXVlcnksXG4gICAgfToge1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgc2NoZW1hPzogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxTPjtcbiAgICAgIHF1ZXJ5PzogT0RhdGFRdWVyeU9wdGlvbnM8Uz47XG4gICAgfVxuICApIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IG5ldyBPRGF0YVBhdGhTZWdtZW50cygpO1xuICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnROYW1lcy5zaW5nbGV0b24sIHBhdGgpO1xuICAgIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkgc2VnbWVudC50eXBlKHNjaGVtYS50eXBlKCkpO1xuICAgIHJldHVybiBuZXcgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxTPihhcGksIHsgc2VnbWVudHMsIHF1ZXJ5LCBzY2hlbWEgfSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAga2V5KHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBzaW5nbGV0b24gPSB0aGlzLmNsb25lPE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD4+KCk7XG4gICAgdmFyIGtleSA9IHRoaXMucmVzb2x2ZUtleSh2YWx1ZSk7XG4gICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSBzaW5nbGV0b24uc2VnbWVudCgocykgPT4gcy5zaW5nbGV0b24oKS5rZXkoa2V5KSk7XG4gICAgcmV0dXJuIHNpbmdsZXRvbjtcbiAgfVxuXG4gIGtleXModmFsdWVzOiBhbnlbXSkge1xuICAgIGNvbnN0IHNpbmdsZXRvbiA9IHRoaXMuY2xvbmU8T0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPj4oKTtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMucGF0aFNlZ21lbnRzLnR5cGVzKHsga2V5OiB0cnVlIH0pO1xuICAgIGNvbnN0IGtleXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+XG4gICAgICBPRGF0YVJlc291cmNlLnJlc29sdmVLZXkoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGVzW2luZGV4XSlcbiAgICAgIClcbiAgICApO1xuICAgIHNpbmdsZXRvbi5zZWdtZW50KChzKSA9PiBzLmtleXMoa2V5cykpO1xuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICBuYXZpZ2F0aW9uUHJvcGVydHk8Tj4ocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UuZnJvbVJlc291cmNlPE4+KHRoaXMsIHBhdGgpO1xuICB9XG5cbiAgcHJvcGVydHk8UD4ocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE9EYXRhUHJvcGVydHlSZXNvdXJjZS5mcm9tUmVzb3VyY2U8UD4odGhpcywgcGF0aCk7XG4gIH1cblxuICBhY3Rpb248UCwgUj4ocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE9EYXRhQWN0aW9uUmVzb3VyY2UuZnJvbVJlc291cmNlPFAsIFI+KHRoaXMsIHBhdGgpO1xuICB9XG5cbiAgZnVuY3Rpb248UCwgUj4ocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE9EYXRhRnVuY3Rpb25SZXNvdXJjZS5mcm9tUmVzb3VyY2U8UCwgUj4odGhpcywgcGF0aCk7XG4gIH1cblxuICAvLyNyZWdpb24gUmVxdWVzdHNcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBvc3QoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zID0ge31cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiBzdXBlci5wb3N0KGF0dHJzLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcHV0KFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHsgZXRhZz86IHN0cmluZyB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiBzdXBlci5wdXQoYXR0cnMsIHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwYXRjaChcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICByZXR1cm4gc3VwZXIucGF0Y2goYXR0cnMsIHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBkZWxldGUoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBzdXBlci5kZWxldGUoeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldChcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBldGFnPzogc3RyaW5nO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uTmFtZXNbXTtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiBzdXBlci5nZXQoeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZW50aXR5LlxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGVudGl0eSBhdHRyaWJ1dGVzIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBlbnRpdHkgd2l0aCB0aGUgYW5ub3RhdGlvbnMuXG4gICAqL1xuICBjcmVhdGUoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucG9zdChhdHRycywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBlbnRpdHkuXG4gICAqIEBwYXJhbSBhdHRycyBUaGUgZW50aXR5IGF0dHJpYnV0ZXMgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIGVudGl0eSB3aXRoIHRoZSBhbm5vdGF0aW9ucy5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYgeyBldGFnPzogc3RyaW5nIH1cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnB1dChhdHRycywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZpZXMgYW4gZXhpc3RpbmcgZW50aXR5LlxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGVudGl0eSBhdHRyaWJ1dGVzIHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgZW50aXR5IHdpdGggdGhlIGFubm90YXRpb25zLlxuICAgKi9cbiAgbW9kaWZ5KFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucGF0Y2goYXR0cnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBleGlzdGluZyBlbnRpdHkuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgZGVsZXRlZCBlbnRpdHkuXG4gICAqL1xuICBkZXN0cm95KG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7IGV0YWc/OiBzdHJpbmcgfSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuIGV4aXN0aW5nIGVudGl0eS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0gZXRhZyBUaGUgZXRhZyB0byB1c2UgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBlbnRpdHkgd2l0aCB0aGUgYW5ub3RhdGlvbnMuXG4gICAqL1xuICBmZXRjaChcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYge1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbk5hbWVzW107XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuIGV4aXN0aW5nIGVudGl0eS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcGFyYW0gZXRhZyBUaGUgZXRhZyB0byB1c2UgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBlbnRpdHkuXG4gICAqL1xuICBmZXRjaEVudGl0eShcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYge1xuICAgICAgZXRhZz86IHN0cmluZztcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbk5hbWVzW107XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2gob3B0aW9ucykucGlwZShtYXAoKHsgZW50aXR5IH0pID0+IGVudGl0eSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuIGV4aXN0aW5nIGVudGl0eSBhbmQgcmV0dXJuIGEgbW9kZWwuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgcmVxdWVzdC5cbiAgICogQHBhcmFtIGV0YWcgVGhlIGV0YWcgdG8gdXNlIGZvciB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgZW50aXR5LlxuICAgKi9cbiAgZmV0Y2hNb2RlbDxNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPj4oXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGV0YWc/OiBzdHJpbmc7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25OYW1lc1tdO1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxNIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKG9wdGlvbnMpLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXR5ID8gdGhpcy5hc01vZGVsPE0+KGVudGl0eSwgeyBhbm5vdHMsIHJlc2V0OiB0cnVlIH0pIDogbnVsbFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -0,0 +1,41 @@
1
+ import { $VALUE } from '../../constants';
2
+ import { PathSegmentNames } from '../../types';
3
+ import { ODataResource } from '../resource';
4
+ export class ODataValueResource extends ODataResource {
5
+ //#region Factory
6
+ static factory(api, { type, schema, segments, query, }) {
7
+ const baseType = type;
8
+ const bindingType = schema?.type();
9
+ const segment = segments.add(PathSegmentNames.value, $VALUE);
10
+ if (schema !== undefined)
11
+ segment.type(schema.type());
12
+ else if (type !== undefined)
13
+ segment.type(type);
14
+ query?.clear();
15
+ const value = new ODataValueResource(api, { segments, query, schema });
16
+ // Switch entitySet to binding type if available
17
+ if (bindingType !== undefined && bindingType !== baseType) {
18
+ let entitySet = api.findEntitySetForType(bindingType);
19
+ if (entitySet !== undefined) {
20
+ value.segment((s) => s.entitySet().path(entitySet.name));
21
+ }
22
+ }
23
+ return value;
24
+ }
25
+ //#endregion
26
+ //#region Requests
27
+ get(options) {
28
+ return super.get({ responseType: 'value', ...options });
29
+ }
30
+ //#endregion
31
+ //#region Shortcuts
32
+ /**
33
+ * Fetch the value of the resource.
34
+ * @param options OData options.
35
+ * @returns Observable of the value.
36
+ */
37
+ fetch(options) {
38
+ return this.get(options);
39
+ }
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL3ZhbHVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc1QyxNQUFNLE9BQU8sa0JBQXNCLFNBQVEsYUFBZ0I7SUFDekQsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLEVBQ0UsSUFBSSxFQUNKLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxHQU1OO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUVuQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3RCxJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNqRCxJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoRCxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLEtBQUssR0FBRyxJQUFJLGtCQUFrQixDQUFJLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUUxRSxnREFBZ0Q7UUFDaEQsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUU7WUFDekQsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMzRDtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsWUFBWTtJQUVaLGtCQUFrQjtJQUNDLEdBQUcsQ0FBQyxPQUFzQjtRQUMzQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsWUFBWTtJQUVaLG1CQUFtQjtJQUVuQjs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQXNCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyAkVkFMVUUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT0RhdGFTdHJ1Y3R1cmVkVHlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYS9zdHJ1Y3R1cmVkLXR5cGUnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnROYW1lcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFWYWx1ZVJlc291cmNlPFQ+IGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxUPiB7XG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5PFY+KFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAge1xuICAgICAgdHlwZSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgfToge1xuICAgICAgdHlwZT86IHN0cmluZztcbiAgICAgIHNjaGVtYT86IE9EYXRhU3RydWN0dXJlZFR5cGU8Vj47XG4gICAgICBzZWdtZW50czogT0RhdGFQYXRoU2VnbWVudHM7XG4gICAgICBxdWVyeT86IE9EYXRhUXVlcnlPcHRpb25zPFY+O1xuICAgIH1cbiAgKSB7XG4gICAgY29uc3QgYmFzZVR5cGUgPSB0eXBlO1xuICAgIGNvbnN0IGJpbmRpbmdUeXBlID0gc2NoZW1hPy50eXBlKCk7XG5cbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHMuYWRkKFBhdGhTZWdtZW50TmFtZXMudmFsdWUsICRWQUxVRSk7XG4gICAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnR5cGUoc2NoZW1hLnR5cGUoKSk7XG4gICAgZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnR5cGUodHlwZSk7XG5cbiAgICBxdWVyeT8uY2xlYXIoKTtcbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBPRGF0YVZhbHVlUmVzb3VyY2U8Vj4oYXBpLCB7IHNlZ21lbnRzLCBxdWVyeSwgc2NoZW1hIH0pO1xuXG4gICAgLy8gU3dpdGNoIGVudGl0eVNldCB0byBiaW5kaW5nIHR5cGUgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGJpbmRpbmdUeXBlICE9PSB1bmRlZmluZWQgJiYgYmluZGluZ1R5cGUgIT09IGJhc2VUeXBlKSB7XG4gICAgICBsZXQgZW50aXR5U2V0ID0gYXBpLmZpbmRFbnRpdHlTZXRGb3JUeXBlKGJpbmRpbmdUeXBlKTtcbiAgICAgIGlmIChlbnRpdHlTZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZS5zZWdtZW50KChzKSA9PiBzLmVudGl0eVNldCgpLnBhdGgoZW50aXR5U2V0IS5uYW1lKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBSZXF1ZXN0c1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0KG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KHsgcmVzcG9uc2VUeXBlOiAndmFsdWUnLCAuLi5vcHRpb25zIH0pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcblxuICAvKipcbiAgICogRmV0Y2ggdGhlIHZhbHVlIG9mIHRoZSByZXNvdXJjZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgT0RhdGEgb3B0aW9ucy5cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgdmFsdWUuXG4gICAqL1xuICBmZXRjaChvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KG9wdGlvbnMpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -0,0 +1,37 @@
1
+ export class ODataAnnotation {
2
+ constructor(annot) {
3
+ this.term = annot.term;
4
+ Object.assign(this, annot);
5
+ }
6
+ }
7
+ export class ODataAnnotatable {
8
+ constructor(config) {
9
+ this.annotations = (config.annotations || []).map((annot) => new ODataAnnotation(annot));
10
+ }
11
+ /**
12
+ * Find an annotation inside the annotatable.
13
+ * @param predicate Function that returns true if the annotation match.
14
+ * @returns The annotation that matches the predicate.
15
+ */
16
+ findAnnotation(predicate) {
17
+ return this.annotations.find(predicate);
18
+ }
19
+ /**
20
+ * Find an annotation inside the annotatable and return its value.
21
+ * @param term The term of the annotation to find.
22
+ * @returns The value of the annotation.
23
+ */
24
+ annotatedValue(term) {
25
+ const reg = term instanceof RegExp ? term : new RegExp(`^${term}$`);
26
+ const annot = this.findAnnotation((a) => reg.test(a.term));
27
+ if (!annot) {
28
+ return undefined;
29
+ }
30
+ return (annot.string ||
31
+ annot.bool ||
32
+ annot.int ||
33
+ annot.permissions ||
34
+ annot.properties);
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9zY2hlbWEvYW5ub3RhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sZUFBZTtJQVExQixZQUFZLEtBQXVCO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sZ0JBQWdCO0lBRTNCLFlBQVksTUFBNEM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUMvQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQ3RDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxTQUE4QztRQUMzRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFJLElBQXFCO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksWUFBWSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ2xCLEtBQUssQ0FBQyxJQUFJO1lBQ1YsS0FBSyxDQUFDLEdBQUc7WUFDVCxLQUFLLENBQUMsV0FBVztZQUNqQixLQUFLLENBQUMsVUFBVSxDQUFRLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5ub3RhdGlvbkNvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhQW5ub3RhdGlvbiB7XG4gIHRlcm06IHN0cmluZztcbiAgc3RyaW5nPzogc3RyaW5nO1xuICBib29sPzogYm9vbGVhbjtcbiAgaW50PzogbnVtYmVyO1xuICBwZXJtaXNzaW9ucz86IHN0cmluZ1tdO1xuICBwcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoYW5ub3Q6IEFubm90YXRpb25Db25maWcpIHtcbiAgICB0aGlzLnRlcm0gPSBhbm5vdC50ZXJtO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgYW5ub3QpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUFubm90YXRhYmxlIHtcbiAgYW5ub3RhdGlvbnM6IE9EYXRhQW5ub3RhdGlvbltdO1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IHsgYW5ub3RhdGlvbnM/OiBBbm5vdGF0aW9uQ29uZmlnW10gfSkge1xuICAgIHRoaXMuYW5ub3RhdGlvbnMgPSAoY29uZmlnLmFubm90YXRpb25zIHx8IFtdKS5tYXAoXG4gICAgICAoYW5ub3QpID0+IG5ldyBPRGF0YUFubm90YXRpb24oYW5ub3QpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGFuIGFubm90YXRpb24gaW5zaWRlIHRoZSBhbm5vdGF0YWJsZS5cbiAgICogQHBhcmFtIHByZWRpY2F0ZSBGdW5jdGlvbiB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgYW5ub3RhdGlvbiBtYXRjaC5cbiAgICogQHJldHVybnMgVGhlIGFubm90YXRpb24gdGhhdCBtYXRjaGVzIHRoZSBwcmVkaWNhdGUuXG4gICAqL1xuICBmaW5kQW5ub3RhdGlvbihwcmVkaWNhdGU6IChhbm5vdDogT0RhdGFBbm5vdGF0aW9uKSA9PiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuYW5ub3RhdGlvbnMuZmluZChwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW4gYW5ub3RhdGlvbiBpbnNpZGUgdGhlIGFubm90YXRhYmxlIGFuZCByZXR1cm4gaXRzIHZhbHVlLlxuICAgKiBAcGFyYW0gdGVybSBUaGUgdGVybSBvZiB0aGUgYW5ub3RhdGlvbiB0byBmaW5kLlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIGFubm90YXRpb24uXG4gICAqL1xuICBhbm5vdGF0ZWRWYWx1ZTxUPih0ZXJtOiBzdHJpbmcgfCBSZWdFeHApOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWcgPSB0ZXJtIGluc3RhbmNlb2YgUmVnRXhwID8gdGVybSA6IG5ldyBSZWdFeHAoYF4ke3Rlcm19JGApO1xuICAgIGNvbnN0IGFubm90ID0gdGhpcy5maW5kQW5ub3RhdGlvbigoYSkgPT4gcmVnLnRlc3QoYS50ZXJtKSk7XG4gICAgaWYgKCFhbm5vdCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIChhbm5vdC5zdHJpbmcgfHxcbiAgICAgIGFubm90LmJvb2wgfHxcbiAgICAgIGFubm90LmludCB8fFxuICAgICAgYW5ub3QucGVybWlzc2lvbnMgfHxcbiAgICAgIGFubm90LnByb3BlcnRpZXMpIGFzIGFueTtcbiAgfVxufVxuIl19
@@ -0,0 +1,62 @@
1
+ import { ODataSchemaElement } from './element';
2
+ import { ODataCallableParser } from './parsers';
3
+ export class ODataCallable extends ODataSchemaElement {
4
+ constructor(config, schema) {
5
+ super(config, schema);
6
+ this.entitySetPath = config.entitySetPath;
7
+ this.bound = config.bound;
8
+ this.composable = config.composable;
9
+ this.parser = new ODataCallableParser(config, schema.namespace, schema.alias);
10
+ }
11
+ path() {
12
+ let path;
13
+ if (this.entitySetPath)
14
+ path = this.entitySetPath;
15
+ else if (this.bound)
16
+ path = `${this.schema.namespace}.${this.name}`;
17
+ else
18
+ path = this.parser.return
19
+ ? this.api.findEntitySetForType(this.parser.return.type)?.name ||
20
+ this.name
21
+ : this.name;
22
+ return path;
23
+ }
24
+ configure({ parserForType, }) {
25
+ this.parser.configure({ options: this.api.options, parserForType });
26
+ }
27
+ /**
28
+ * Deseialize the given value from the callable.
29
+ * @param value Value to deserialize
30
+ * @param options Options for deserialization
31
+ * @returns Deserialized value
32
+ */
33
+ deserialize(value, options) {
34
+ return this.parser.deserialize(value, options);
35
+ }
36
+ /**
37
+ * Serialize the given value for the callable.
38
+ * @param value Value to serialize
39
+ * @param options Options for serialization
40
+ * @returns Serialized value
41
+ */
42
+ serialize(value, options) {
43
+ return this.parser.serialize(value, options);
44
+ }
45
+ /**
46
+ * Encode the given value for the callable.
47
+ * @param value Value to encode
48
+ * @param options Options for encoding
49
+ * @returns Encoded value
50
+ */
51
+ encode(value, options) {
52
+ return this.parser.encode(value, options);
53
+ }
54
+ /**
55
+ * Returns the binding parameter of the callable.
56
+ * @returns The binding parameter of the callable.
57
+ */
58
+ binding() {
59
+ return this.parser.binding();
60
+ }
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvc2NoZW1hL2NhbGxhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHaEQsTUFBTSxPQUFPLGFBQWlCLFNBQVEsa0JBQWtCO0lBTXRELFlBQVksTUFBc0IsRUFBRSxNQUFtQjtRQUNyRCxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxtQkFBbUIsQ0FDbkMsTUFBTSxFQUNOLE1BQU0sQ0FBQyxTQUFTLEVBQ2hCLE1BQU0sQ0FBQyxLQUFLLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxJQUFZLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsYUFBYTtZQUFFLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQzdDLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7O1lBRWxFLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07Z0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUk7b0JBQzVELElBQUksQ0FBQyxJQUFJO2dCQUNYLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsQ0FBQyxFQUNSLGFBQWEsR0FHZDtRQUNDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEtBQVUsRUFBRSxPQUFpQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsS0FBVSxFQUFFLE9BQWlCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxLQUFVLEVBQUUsT0FBaUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FsbGFibGVDb25maWcsIE9wdGlvbnMsIFBhcnNlciB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhU2NoZW1hRWxlbWVudCB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBPRGF0YUNhbGxhYmxlUGFyc2VyIH0gZnJvbSAnLi9wYXJzZXJzJztcbmltcG9ydCB7IE9EYXRhU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFDYWxsYWJsZTxSPiBleHRlbmRzIE9EYXRhU2NoZW1hRWxlbWVudCB7XG4gIGVudGl0eVNldFBhdGg/OiBzdHJpbmc7XG4gIGJvdW5kPzogYm9vbGVhbjtcbiAgY29tcG9zYWJsZT86IGJvb2xlYW47XG4gIHBhcnNlcjogT0RhdGFDYWxsYWJsZVBhcnNlcjxSPjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IENhbGxhYmxlQ29uZmlnLCBzY2hlbWE6IE9EYXRhU2NoZW1hKSB7XG4gICAgc3VwZXIoY29uZmlnLCBzY2hlbWEpO1xuICAgIHRoaXMuZW50aXR5U2V0UGF0aCA9IGNvbmZpZy5lbnRpdHlTZXRQYXRoO1xuICAgIHRoaXMuYm91bmQgPSBjb25maWcuYm91bmQ7XG4gICAgdGhpcy5jb21wb3NhYmxlID0gY29uZmlnLmNvbXBvc2FibGU7XG4gICAgdGhpcy5wYXJzZXIgPSBuZXcgT0RhdGFDYWxsYWJsZVBhcnNlcihcbiAgICAgIGNvbmZpZyxcbiAgICAgIHNjaGVtYS5uYW1lc3BhY2UsXG4gICAgICBzY2hlbWEuYWxpYXNcbiAgICApO1xuICB9XG5cbiAgcGF0aCgpIHtcbiAgICBsZXQgcGF0aDogc3RyaW5nO1xuICAgIGlmICh0aGlzLmVudGl0eVNldFBhdGgpIHBhdGggPSB0aGlzLmVudGl0eVNldFBhdGg7XG4gICAgZWxzZSBpZiAodGhpcy5ib3VuZCkgcGF0aCA9IGAke3RoaXMuc2NoZW1hLm5hbWVzcGFjZX0uJHt0aGlzLm5hbWV9YDtcbiAgICBlbHNlXG4gICAgICBwYXRoID0gdGhpcy5wYXJzZXIucmV0dXJuXG4gICAgICAgID8gdGhpcy5hcGkuZmluZEVudGl0eVNldEZvclR5cGUodGhpcy5wYXJzZXIucmV0dXJuLnR5cGUpPy5uYW1lIHx8XG4gICAgICAgICAgdGhpcy5uYW1lXG4gICAgICAgIDogdGhpcy5uYW1lO1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgY29uZmlndXJlKHtcbiAgICBwYXJzZXJGb3JUeXBlLFxuICB9OiB7XG4gICAgcGFyc2VyRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gUGFyc2VyPGFueT47XG4gIH0pIHtcbiAgICB0aGlzLnBhcnNlci5jb25maWd1cmUoeyBvcHRpb25zOiB0aGlzLmFwaS5vcHRpb25zLCBwYXJzZXJGb3JUeXBlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VpYWxpemUgdGhlIGdpdmVuIHZhbHVlIGZyb20gdGhlIGNhbGxhYmxlLlxuICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gZGVzZXJpYWxpemVcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZGVzZXJpYWxpemF0aW9uXG4gICAqIEByZXR1cm5zIERlc2VyaWFsaXplZCB2YWx1ZVxuICAgKi9cbiAgZGVzZXJpYWxpemUodmFsdWU6IGFueSwgb3B0aW9ucz86IE9wdGlvbnMpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5kZXNlcmlhbGl6ZSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRoZSBnaXZlbiB2YWx1ZSBmb3IgdGhlIGNhbGxhYmxlLlxuICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gc2VyaWFsaXplXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHNlcmlhbGl6YXRpb25cbiAgICogQHJldHVybnMgU2VyaWFsaXplZCB2YWx1ZVxuICAgKi9cbiAgc2VyaWFsaXplKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBPcHRpb25zKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuc2VyaWFsaXplKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgdGhlIGdpdmVuIHZhbHVlIGZvciB0aGUgY2FsbGFibGUuXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBlbmNvZGVcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgZW5jb2RpbmdcbiAgICogQHJldHVybnMgRW5jb2RlZCB2YWx1ZVxuICAgKi9cbiAgZW5jb2RlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBPcHRpb25zKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuZW5jb2RlKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgY2FsbGFibGUuXG4gICAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIHBhcmFtZXRlciBvZiB0aGUgY2FsbGFibGUuXG4gICAqL1xuICBiaW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5iaW5kaW5nKCk7XG4gIH1cbn1cbiJdfQ==