angular-odata 0.127.0 → 0.130.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 (294) hide show
  1. package/README.md +27 -244
  2. package/esm2022/lib/annotations.mjs +146 -0
  3. package/esm2022/lib/api.mjs +238 -173
  4. package/esm2022/lib/cache/cache.mjs +3 -1
  5. package/esm2022/lib/cache/memory.mjs +1 -1
  6. package/esm2022/lib/cache/storage.mjs +3 -1
  7. package/esm2022/lib/client.mjs +10 -47
  8. package/esm2022/lib/constants.mjs +4 -1
  9. package/esm2022/lib/helper.mjs +9 -1
  10. package/esm2022/lib/index.mjs +4 -1
  11. package/esm2022/lib/loaders.mjs +27 -17
  12. package/esm2022/lib/metadata/csdl/csdl-annotation.mjs +273 -0
  13. package/esm2022/lib/metadata/csdl/csdl-entity-container.mjs +59 -0
  14. package/esm2022/lib/metadata/csdl/csdl-entity-set.mjs +50 -0
  15. package/esm2022/lib/metadata/csdl/csdl-enum-type.mjs +74 -0
  16. package/esm2022/lib/metadata/csdl/csdl-function-action.mjs +204 -0
  17. package/esm2022/lib/metadata/csdl/csdl-navigation-property-binding.mjs +15 -0
  18. package/esm2022/lib/metadata/csdl/csdl-reference.mjs +76 -0
  19. package/esm2022/lib/metadata/csdl/csdl-schema.mjs +87 -0
  20. package/esm2022/lib/metadata/csdl/csdl-singleton.mjs +37 -0
  21. package/esm2022/lib/metadata/csdl/csdl-structural-property.mjs +145 -0
  22. package/esm2022/lib/metadata/csdl/csdl-structured-type.mjs +159 -0
  23. package/esm2022/lib/metadata/csdl/csdl-type-definition.mjs +46 -0
  24. package/esm2022/lib/metadata/index.mjs +3 -0
  25. package/esm2022/lib/metadata/metadata.mjs +41 -0
  26. package/esm2022/lib/metadata/parser.mjs +564 -0
  27. package/esm2022/lib/models/collection.mjs +115 -155
  28. package/esm2022/lib/models/model.mjs +71 -54
  29. package/esm2022/lib/models/options.mjs +194 -136
  30. package/esm2022/lib/module.mjs +7 -7
  31. package/esm2022/lib/options.mjs +57 -2
  32. package/esm2022/lib/resources/index.mjs +2 -2
  33. package/esm2022/lib/resources/options.mjs +66 -0
  34. package/esm2022/lib/resources/path/handlers.mjs +16 -4
  35. package/esm2022/lib/resources/path/segments.mjs +7 -4
  36. package/esm2022/lib/resources/query/builder.mjs +17 -8
  37. package/esm2022/lib/resources/query/expressions/apply.mjs +83 -14
  38. package/esm2022/lib/resources/query/expressions/base.mjs +2 -1
  39. package/esm2022/lib/resources/query/expressions/compute.mjs +3 -2
  40. package/esm2022/lib/resources/query/expressions/count.mjs +3 -1
  41. package/esm2022/lib/resources/query/expressions/expand.mjs +8 -1
  42. package/esm2022/lib/resources/query/expressions/filter.mjs +3 -1
  43. package/esm2022/lib/resources/query/expressions/orderby.mjs +4 -2
  44. package/esm2022/lib/resources/query/expressions/search.mjs +4 -1
  45. package/esm2022/lib/resources/query/expressions/select.mjs +8 -2
  46. package/esm2022/lib/resources/query/expressions/syntax.mjs +37 -7
  47. package/esm2022/lib/resources/query/handlers.mjs +4 -1
  48. package/esm2022/lib/resources/query/options.mjs +2 -1
  49. package/esm2022/lib/resources/request.mjs +19 -5
  50. package/esm2022/lib/resources/resource.mjs +115 -85
  51. package/esm2022/lib/resources/response.mjs +180 -0
  52. package/esm2022/lib/resources/types/action.mjs +31 -26
  53. package/esm2022/lib/resources/types/batch.mjs +7 -7
  54. package/esm2022/lib/resources/types/count.mjs +7 -7
  55. package/esm2022/lib/resources/types/entity-set.mjs +37 -24
  56. package/esm2022/lib/resources/types/entity.mjs +14 -11
  57. package/esm2022/lib/resources/types/function.mjs +28 -28
  58. package/esm2022/lib/resources/types/metadata.mjs +9 -5
  59. package/esm2022/lib/resources/types/navigation-property.mjs +36 -40
  60. package/esm2022/lib/resources/types/property.mjs +31 -59
  61. package/esm2022/lib/resources/types/reference.mjs +3 -4
  62. package/esm2022/lib/resources/types/singleton.mjs +11 -12
  63. package/esm2022/lib/resources/types/value.mjs +16 -12
  64. package/esm2022/lib/schema/annotation.mjs +8 -1
  65. package/esm2022/lib/schema/callable.mjs +13 -10
  66. package/esm2022/lib/schema/element.mjs +18 -9
  67. package/esm2022/lib/schema/entity-container.mjs +6 -2
  68. package/esm2022/lib/schema/entity-set.mjs +3 -1
  69. package/esm2022/lib/schema/enum-type.mjs +11 -11
  70. package/esm2022/lib/schema/index.mjs +2 -1
  71. package/esm2022/lib/schema/parsers/callable.mjs +23 -7
  72. package/esm2022/lib/schema/parsers/edm.mjs +6 -4
  73. package/esm2022/lib/schema/parsers/enum-type.mjs +48 -30
  74. package/esm2022/lib/schema/parsers/structured-type.mjs +61 -27
  75. package/esm2022/lib/schema/schema.mjs +25 -34
  76. package/esm2022/lib/schema/singleton.mjs +11 -0
  77. package/esm2022/lib/schema/structured-type.mjs +27 -25
  78. package/esm2022/lib/services/base.mjs +4 -1
  79. package/esm2022/lib/services/entity-set.mjs +18 -2
  80. package/esm2022/lib/services/entity.mjs +2 -2
  81. package/esm2022/lib/services/factory.mjs +16 -10
  82. package/esm2022/lib/services/singleton.mjs +9 -2
  83. package/esm2022/lib/settings.mjs +8 -99
  84. package/esm2022/lib/types.mjs +1 -1
  85. package/esm2022/lib/utils/arraybuffers.mjs +1 -1
  86. package/esm2022/lib/utils/dates.mjs +1 -1
  87. package/esm2022/lib/utils/durations.mjs +1 -1
  88. package/esm2022/lib/utils/enums.mjs +1 -1
  89. package/esm2022/lib/utils/http.mjs +1 -1
  90. package/esm2022/lib/utils/objects.mjs +1 -1
  91. package/esm2022/lib/utils/odata.mjs +1 -1
  92. package/esm2022/lib/utils/types.mjs +1 -1
  93. package/fesm2022/angular-odata.mjs +3476 -2075
  94. package/fesm2022/angular-odata.mjs.map +1 -1
  95. package/lib/{resources/responses/annotations.d.ts → annotations.d.ts} +2 -2
  96. package/lib/api.d.ts +29 -26
  97. package/lib/cache/memory.d.ts +1 -1
  98. package/lib/client.d.ts +0 -20
  99. package/lib/constants.d.ts +3 -0
  100. package/lib/index.d.ts +2 -0
  101. package/lib/loaders.d.ts +7 -1
  102. package/lib/metadata/csdl/csdl-annotation.d.ts +159 -0
  103. package/lib/metadata/csdl/csdl-entity-container.d.ts +31 -0
  104. package/lib/metadata/csdl/csdl-entity-set.d.ts +25 -0
  105. package/lib/metadata/csdl/csdl-enum-type.d.ts +37 -0
  106. package/lib/metadata/csdl/csdl-function-action.d.ts +148 -0
  107. package/lib/metadata/csdl/csdl-navigation-property-binding.d.ts +12 -0
  108. package/lib/metadata/csdl/csdl-reference.d.ts +53 -0
  109. package/lib/metadata/csdl/csdl-schema.d.ts +37 -0
  110. package/lib/metadata/csdl/csdl-singleton.d.ts +21 -0
  111. package/lib/metadata/csdl/csdl-structural-property.d.ts +86 -0
  112. package/lib/metadata/csdl/csdl-structured-type.d.ts +94 -0
  113. package/lib/metadata/csdl/csdl-type-definition.d.ts +25 -0
  114. package/lib/metadata/index.d.ts +2 -0
  115. package/lib/metadata/metadata.d.ts +23 -0
  116. package/lib/{resources/responses/metadata.d.ts → metadata/parser.d.ts} +19 -7
  117. package/lib/models/collection.d.ts +6 -4
  118. package/lib/models/model.d.ts +20 -27
  119. package/lib/models/options.d.ts +46 -25
  120. package/lib/resources/index.d.ts +1 -1
  121. package/lib/resources/{responses/options.d.ts → options.d.ts} +2 -2
  122. package/lib/resources/path/handlers.d.ts +4 -2
  123. package/lib/resources/path/segments.d.ts +6 -4
  124. package/lib/resources/query/builder.d.ts +3 -2
  125. package/lib/resources/query/expressions/apply.d.ts +37 -15
  126. package/lib/resources/query/expressions/base.d.ts +1 -1
  127. package/lib/resources/query/expressions/compute.d.ts +2 -2
  128. package/lib/resources/query/expressions/count.d.ts +1 -1
  129. package/lib/resources/query/expressions/expand.d.ts +3 -1
  130. package/lib/resources/query/expressions/filter.d.ts +1 -1
  131. package/lib/resources/query/expressions/orderby.d.ts +5 -4
  132. package/lib/resources/query/expressions/search.d.ts +1 -1
  133. package/lib/resources/query/expressions/select.d.ts +2 -1
  134. package/lib/resources/query/expressions/syntax.d.ts +8 -5
  135. package/lib/resources/query/options.d.ts +3 -3
  136. package/lib/resources/resource.d.ts +56 -16
  137. package/lib/resources/{responses/response.d.ts → response.d.ts} +17 -5
  138. package/lib/resources/types/action.d.ts +12 -10
  139. package/lib/resources/types/batch.d.ts +3 -2
  140. package/lib/resources/types/count.d.ts +1 -5
  141. package/lib/resources/types/entity-set.d.ts +25 -11
  142. package/lib/resources/types/entity.d.ts +8 -5
  143. package/lib/resources/types/function.d.ts +12 -12
  144. package/lib/resources/types/metadata.d.ts +1 -1
  145. package/lib/resources/types/navigation-property.d.ts +23 -8
  146. package/lib/resources/types/property.d.ts +27 -9
  147. package/lib/resources/types/reference.d.ts +2 -4
  148. package/lib/resources/types/singleton.d.ts +9 -7
  149. package/lib/resources/types/value.d.ts +2 -6
  150. package/lib/schema/callable.d.ts +5 -7
  151. package/lib/schema/element.d.ts +11 -4
  152. package/lib/schema/entity-container.d.ts +2 -0
  153. package/lib/schema/enum-type.d.ts +13 -16
  154. package/lib/schema/index.d.ts +1 -0
  155. package/lib/schema/parsers/callable.d.ts +7 -8
  156. package/lib/schema/parsers/enum-type.d.ts +16 -18
  157. package/lib/schema/parsers/structured-type.d.ts +11 -10
  158. package/lib/schema/schema.d.ts +6 -9
  159. package/lib/schema/singleton.d.ts +10 -0
  160. package/lib/schema/structured-type.d.ts +10 -10
  161. package/lib/services/entity-set.d.ts +11 -4
  162. package/lib/services/factory.d.ts +14 -2
  163. package/lib/services/singleton.d.ts +4 -2
  164. package/lib/settings.d.ts +0 -10
  165. package/lib/types.d.ts +32 -12
  166. package/lib/utils/enums.d.ts +12 -12
  167. package/lib/utils/http.d.ts +1 -1
  168. package/lib/utils/objects.d.ts +1 -1
  169. package/lib/utils/strings.d.ts +2 -2
  170. package/package.json +5 -1
  171. package/schematics/apigen/angular/api-config.d.ts +15 -0
  172. package/schematics/apigen/angular/api-config.js +40 -0
  173. package/schematics/apigen/angular/api-config.js.map +1 -0
  174. package/schematics/apigen/angular/base.d.ts +71 -0
  175. package/schematics/apigen/angular/base.js +240 -0
  176. package/schematics/apigen/angular/base.js.map +1 -0
  177. package/schematics/apigen/angular/entity.d.ts +24 -0
  178. package/schematics/apigen/angular/entity.js +77 -0
  179. package/schematics/apigen/angular/entity.js.map +1 -0
  180. package/schematics/apigen/angular/enum.d.ts +25 -0
  181. package/schematics/apigen/angular/enum.js +57 -0
  182. package/schematics/apigen/angular/enum.js.map +1 -0
  183. package/schematics/apigen/angular/import.d.ts +6 -0
  184. package/schematics/apigen/angular/import.js +18 -0
  185. package/schematics/apigen/angular/import.js.map +1 -0
  186. package/schematics/apigen/angular/module.d.ts +18 -0
  187. package/schematics/apigen/angular/module.js +41 -0
  188. package/schematics/apigen/angular/module.js.map +1 -0
  189. package/schematics/apigen/angular/service.d.ts +20 -0
  190. package/schematics/apigen/angular/service.js +77 -0
  191. package/schematics/apigen/angular/service.js.map +1 -0
  192. package/schematics/apigen/files/api-config/__fileName__.ts +11 -0
  193. package/schematics/apigen/files/entity/__fileName__.ts +7 -0
  194. package/schematics/apigen/files/entitycontainer-service/__fileName__.ts +18 -0
  195. package/schematics/apigen/files/entityset-service/__fileName__.ts +27 -0
  196. package/schematics/apigen/files/enum/__fileName__.ts +4 -0
  197. package/schematics/apigen/files/index/__fileName__.ts +2 -0
  198. package/schematics/apigen/files/metadata/metadata.json +1 -0
  199. package/schematics/apigen/files/module/__fileName__.ts +9 -0
  200. package/schematics/apigen/files/singleton-service/__fileName__.ts +18 -0
  201. package/schematics/apigen/index.d.ts +3 -0
  202. package/schematics/apigen/index.js +150 -0
  203. package/schematics/apigen/index.js.map +1 -0
  204. package/schematics/apigen/metadata/csdl/csdl-annotation.d.ts +153 -0
  205. package/schematics/apigen/metadata/csdl/csdl-annotation.js +228 -0
  206. package/schematics/apigen/metadata/csdl/csdl-annotation.js.map +1 -0
  207. package/schematics/apigen/metadata/csdl/csdl-entity-container.d.ts +29 -0
  208. package/schematics/apigen/metadata/csdl/csdl-entity-container.js +49 -0
  209. package/schematics/apigen/metadata/csdl/csdl-entity-container.js.map +1 -0
  210. package/schematics/apigen/metadata/csdl/csdl-entity-set.d.ts +23 -0
  211. package/schematics/apigen/metadata/csdl/csdl-entity-set.js +37 -0
  212. package/schematics/apigen/metadata/csdl/csdl-entity-set.js.map +1 -0
  213. package/schematics/apigen/metadata/csdl/csdl-enum-type.d.ts +34 -0
  214. package/schematics/apigen/metadata/csdl/csdl-enum-type.js +50 -0
  215. package/schematics/apigen/metadata/csdl/csdl-enum-type.js.map +1 -0
  216. package/schematics/apigen/metadata/csdl/csdl-function-action.d.ts +140 -0
  217. package/schematics/apigen/metadata/csdl/csdl-function-action.js +136 -0
  218. package/schematics/apigen/metadata/csdl/csdl-function-action.js.map +1 -0
  219. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.d.ts +12 -0
  220. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js +17 -0
  221. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js.map +1 -0
  222. package/schematics/apigen/metadata/csdl/csdl-reference.d.ts +42 -0
  223. package/schematics/apigen/metadata/csdl/csdl-reference.js +53 -0
  224. package/schematics/apigen/metadata/csdl/csdl-reference.js.map +1 -0
  225. package/schematics/apigen/metadata/csdl/csdl-schema.d.ts +35 -0
  226. package/schematics/apigen/metadata/csdl/csdl-schema.js +63 -0
  227. package/schematics/apigen/metadata/csdl/csdl-schema.js.map +1 -0
  228. package/schematics/apigen/metadata/csdl/csdl-singleton.d.ts +21 -0
  229. package/schematics/apigen/metadata/csdl/csdl-singleton.js +33 -0
  230. package/schematics/apigen/metadata/csdl/csdl-singleton.js.map +1 -0
  231. package/schematics/apigen/metadata/csdl/csdl-structural-property.d.ts +79 -0
  232. package/schematics/apigen/metadata/csdl/csdl-structural-property.js +103 -0
  233. package/schematics/apigen/metadata/csdl/csdl-structural-property.js.map +1 -0
  234. package/schematics/apigen/metadata/csdl/csdl-structured-type.d.ts +83 -0
  235. package/schematics/apigen/metadata/csdl/csdl-structured-type.js +116 -0
  236. package/schematics/apigen/metadata/csdl/csdl-structured-type.js.map +1 -0
  237. package/schematics/apigen/metadata/csdl/csdl-type-definition.d.ts +25 -0
  238. package/schematics/apigen/metadata/csdl/csdl-type-definition.js +38 -0
  239. package/schematics/apigen/metadata/csdl/csdl-type-definition.js.map +1 -0
  240. package/schematics/apigen/metadata/index.d.ts +1 -0
  241. package/schematics/apigen/metadata/index.js +18 -0
  242. package/schematics/apigen/metadata/index.js.map +1 -0
  243. package/schematics/apigen/metadata/metadata.d.ts +21 -0
  244. package/schematics/apigen/metadata/metadata.js +36 -0
  245. package/schematics/apigen/metadata/metadata.js.map +1 -0
  246. package/schematics/apigen/metadata/parser.d.ts +110 -0
  247. package/schematics/apigen/metadata/parser.js +568 -0
  248. package/schematics/apigen/metadata/parser.js.map +1 -0
  249. package/schematics/apigen/schema.d.ts +9 -0
  250. package/schematics/apigen/schema.js +3 -0
  251. package/schematics/apigen/schema.js.map +1 -0
  252. package/schematics/apigen/schema.json +37 -0
  253. package/schematics/apigen/utils.d.ts +2 -0
  254. package/schematics/apigen/utils.js +99 -0
  255. package/schematics/apigen/utils.js.map +1 -0
  256. package/schematics/collection.json +14 -0
  257. package/schematics/ng-add/index.d.ts +2 -0
  258. package/schematics/ng-add/index.js +12 -0
  259. package/schematics/ng-add/index.js.map +1 -0
  260. package/schematics/random.d.ts +1 -0
  261. package/schematics/random.js +604 -0
  262. package/schematics/random.js.map +1 -0
  263. package/esm2022/lib/resources/responses/annotations.mjs +0 -140
  264. package/esm2022/lib/resources/responses/csdl/csdl-annotation.mjs +0 -33
  265. package/esm2022/lib/resources/responses/csdl/csdl-entity-container.mjs +0 -11
  266. package/esm2022/lib/resources/responses/csdl/csdl-entity-set.mjs +0 -9
  267. package/esm2022/lib/resources/responses/csdl/csdl-enum-type.mjs +0 -15
  268. package/esm2022/lib/resources/responses/csdl/csdl-function-action.mjs +0 -56
  269. package/esm2022/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +0 -7
  270. package/esm2022/lib/resources/responses/csdl/csdl-reference.mjs +0 -23
  271. package/esm2022/lib/resources/responses/csdl/csdl-schema.mjs +0 -18
  272. package/esm2022/lib/resources/responses/csdl/csdl-singleton.mjs +0 -8
  273. package/esm2022/lib/resources/responses/csdl/csdl-structural-property.mjs +0 -39
  274. package/esm2022/lib/resources/responses/csdl/csdl-structured-type.mjs +0 -34
  275. package/esm2022/lib/resources/responses/csdl/csdl-type-definition.mjs +0 -14
  276. package/esm2022/lib/resources/responses/index.mjs +0 -5
  277. package/esm2022/lib/resources/responses/metadata.mjs +0 -547
  278. package/esm2022/lib/resources/responses/options.mjs +0 -56
  279. package/esm2022/lib/resources/responses/response.mjs +0 -174
  280. package/esm2022/lib/resources/responses/types.mjs +0 -2
  281. package/lib/resources/responses/csdl/csdl-annotation.d.ts +0 -27
  282. package/lib/resources/responses/csdl/csdl-entity-container.d.ts +0 -12
  283. package/lib/resources/responses/csdl/csdl-entity-set.d.ts +0 -8
  284. package/lib/resources/responses/csdl/csdl-enum-type.d.ts +0 -12
  285. package/lib/resources/responses/csdl/csdl-function-action.d.ts +0 -49
  286. package/lib/resources/responses/csdl/csdl-navigation-property-binding.d.ts +0 -5
  287. package/lib/resources/responses/csdl/csdl-reference.d.ts +0 -18
  288. package/lib/resources/responses/csdl/csdl-schema.d.ts +0 -20
  289. package/lib/resources/responses/csdl/csdl-singleton.d.ts +0 -7
  290. package/lib/resources/responses/csdl/csdl-structural-property.d.ts +0 -31
  291. package/lib/resources/responses/csdl/csdl-structured-type.d.ts +0 -27
  292. package/lib/resources/responses/csdl/csdl-type-definition.d.ts +0 -11
  293. package/lib/resources/responses/index.d.ts +0 -4
  294. package/lib/resources/responses/types.d.ts +0 -13
package/README.md CHANGED
@@ -1,28 +1,30 @@
1
- # Angular OData
2
-
3
- [![build](https://github.com/diegomvh/angular-odata/workflows/Node.js%20CI/badge.svg)](https://github.com/diegomvh/angular-odata/actions?query=workflow%3A%22Node.js+CI%22)
4
- [![npm version](https://badge.fury.io/js/angular-odata.svg)](http://badge.fury.io/js/angular-odata)
5
-
6
- A fluent API for querying, creating, updating and deleting OData resources in Angular.
7
- OData service for Angular.
8
-
9
- Please check also my other related project, [OData Angular Generator](https://github.com/diegomvh/ODataApiGen)
10
-
11
- ## Demo:
12
-
13
- Full examples of the library:
14
-
15
- - [AngularODataEntity](https://github.com/diegomvh/AngularODataEntity)
16
-
17
- ## Table of contents
18
-
19
- - [Installation](#installation)
20
- - [Without Schema](#without-schema)
21
- - [With Schema](#with-schema)
22
- - [Usage](#usage)
23
- - [OData Version](#odata-version)
24
- - [Query Builder](#query-builder)
25
- - [Documentation](#documentation)
1
+ <h1 align="center">Angular OData</h1>
2
+
3
+ <p align="center">
4
+ <em>A fluent API for querying, creating, updating and deleting OData resources in Angular.</em>
5
+ <br>
6
+ </p>
7
+
8
+ <p align="center">
9
+ <a href="CONTRIBUTING.md">Contributing</a>
10
+ ·
11
+ <a href="./docs/README.md">Documentation</a>
12
+ ·
13
+ <a href="https://github.com/diegomvh/AngularODataEntity">Demo</a>
14
+ <br>
15
+ <br>
16
+ </p>
17
+
18
+ <p align="center">
19
+ <a href="https://github.com/diegomvh/angular-odata/actions?query=workflow%3A%22Node.js+CI%22">
20
+ <img src="https://github.com/diegomvh/angular-odata/workflows/Node.js%20CI/badge.svg" alt="CI status" />
21
+ </a>&nbsp;
22
+ <a href="http://badge.fury.io/js/angular-odata">
23
+ <img src="https://badge.fury.io/js/angular-odata.svg" alt="Angular OData on npm" />
24
+ </a>
25
+ </p>
26
+
27
+ <hr>
26
28
 
27
29
  ## Installation
28
30
 
@@ -32,225 +34,6 @@ Install from npm:
32
34
  npm i angular-odata
33
35
  ```
34
36
 
35
- ## Without Schema
36
-
37
- Import ODataModule into your application module definition and setup the module for the `serviceRootUrl`.
38
-
39
- ```typescript
40
- import { NgModule } from '@angular/core';
41
- import { ODataModule } from 'angular-odata';
42
-
43
- @NgModule({
44
- imports: [
45
- ...
46
- ODataModule.forRoot({
47
- config: {
48
- serviceRootUrl: 'https://services.odata.org/V4/(S(4m0tuxtnhcfctl4gzem3gr10))/TripPinServiceRW/'
49
- }
50
- })
51
- ...
52
- ]
53
- })
54
- export class AppModule {}
55
- ```
56
-
57
- ## With Schema
58
-
59
- Use [OData Angular Generator](https://github.com/diegomvh/ODataApiGen) for generate the \<Api\>Config and the \<Api\>Module definition.
60
-
61
- Import ODataModule, \<Api\>Config and \<Api\>Module into your application module.
62
- Setup ODataModule with \<Api\>Config and import it along with \<Api\>Module.
63
-
64
- ```typescript
65
- import { NgModule } from '@angular/core';
66
-
67
- import { ODataModule } from 'angular-odata';
68
- import { TripPinConfig, TripPinModule } from './trippin';
69
-
70
- @NgModule({
71
- imports: [
72
- ...
73
- ODataModule.forRoot({ config: TripPinConfig }),
74
- TripPinModule
75
- ]
76
- ...
77
- })
78
- export class AppModule {}
79
- ```
80
-
81
- ## Usage
82
-
83
- Inject and use the ODataServiceFactory
84
-
85
- ```typescript
86
- import { Component } from "@angular/core";
87
- import { ODataClient, ODATA_ETAG } from "angular-odata";
88
-
89
- @Component({
90
- selector: "app-root",
91
- templateUrl: "./app.component.html",
92
- styleUrls: ["./app.component.css"],
93
- })
94
- export class AppComponent {
95
- title = "TripPin";
96
- constructor(private factory: ODataServiceFactory) {
97
- this.queries();
98
- }
99
-
100
- queries() {
101
- // Use OData Service Factory
102
- let airportsService = this.factory.entitySet<Airport>(
103
- "Airports",
104
- "Microsoft.OData.SampleService.Models.TripPin.Airport"
105
- );
106
- let airports = airportsService.entities();
107
-
108
- // Fetch airports
109
- airports.fetch().subscribe(({ entities }) => {
110
- console.log("Airports: ", entities);
111
- });
112
-
113
- // Fetch airports with count
114
- airports
115
- .fetch({ withCount: true })
116
- .subscribe(({ entities, annots }) =>
117
- console.log("Airports: ", entities, "Annotations: ", annots)
118
- );
119
-
120
- // Fetch all airports
121
- airports
122
- .fetchAll()
123
- .subscribe((airports) => console.log("All Airports: ", airports));
124
-
125
- // Fetch airport with key and fetch again from cache
126
- airports
127
- .entity("CYYZ")
128
- .fetch()
129
- .pipe(
130
- switchMap(() =>
131
- // From Cache!
132
- airports.entity("CYYZ").fetch({ fetchPolicy: "cache-first" })
133
- )
134
- )
135
- .subscribe(({ entity, annots }) =>
136
- console.log("Airport: ", entity, "Annotations: ", annots)
137
- );
138
-
139
- // Clone airports resource and filter new resource
140
- airports
141
- .clone()
142
- .query((q) =>
143
- q.filter({ Location: { City: { CountryRegion: "United States" } } })
144
- )
145
- .fetch()
146
- .subscribe(({ entities, annots }) =>
147
- console.log(
148
- "Airports of United States: ",
149
- entities,
150
- "Annotations: ",
151
- annots
152
- )
153
- );
154
-
155
- // Change query definition of airports resource and fetch again
156
- airports.query((q) =>
157
- q.filter().push({ Location: { City: { Region: "California" } } })
158
- );
159
- airports
160
- .fetch()
161
- .subscribe(({ entities, annots }) =>
162
- console.log(
163
- "Airports in California: ",
164
- entities,
165
- "Annotations: ",
166
- annots
167
- )
168
- );
169
-
170
- // Store airports resource
171
- var json = airports.toJson();
172
- // Load airports resource
173
- airports = this.odata.fromJson(json) as ODataEntitySetResource<Airport>;
174
-
175
- // Change query definition of airports resource and fetch again
176
- airports.query((q) => q.filter().clear());
177
- airports
178
- .fetch()
179
- .subscribe(({ entities, annots }) =>
180
- console.log("Airports: ", entities, "Annotations: ", annots)
181
- );
182
-
183
- let peopleService = this.factory.entitySet<Person>(
184
- "People",
185
- "Microsoft.OData.SampleService.Models.TripPin.Person"
186
- );
187
- let people = peopleService.entities();
188
-
189
- // Clone people resource and expand and fetch
190
- people
191
- .clone()
192
- .query((q) =>
193
- q.expand({
194
- Friends: {
195
- expand: { Friends: { select: ["AddressInfo"] } },
196
- },
197
- Trips: { select: ["Name", "Tags"] },
198
- })
199
- )
200
- .fetch({ withCount: true })
201
- .subscribe(({ entities, annots }) =>
202
- console.log(
203
- "People with Friends and Trips: ",
204
- entities,
205
- "Annotations: ",
206
- annots
207
- )
208
- );
209
-
210
- // Clone people resource and filter with expressions
211
- people
212
- .clone()
213
- .query((q) =>
214
- q.filter(({ e }) =>
215
- e().eq("Emails", "john@example.com").or(e().eq("UserName", "john"))
216
- )
217
- )
218
- .fetch()
219
- .subscribe(({ entities, annots }) =>
220
- console.log(
221
- "People with Friends and Trips: ",
222
- entities,
223
- "Annotations: ",
224
- annots
225
- )
226
- );
227
-
228
- this.odata
229
- .batch("TripPin")
230
- .exec(() =>
231
- forkJoin({
232
- airports: airports.fetch(),
233
- people: people.fetch({ withCount: true }),
234
- })
235
- )
236
- .subscribe();
237
- }
238
- }
239
- ```
240
-
241
37
  ## OData Version
242
38
 
243
39
  The library works mainly with OData Version 4, however, it incorporates basic support for versions 3 and 2.
244
-
245
- ## Query Builder
246
-
247
- For a deep query customizations the library use `odata-query` and `odata-filter-builder` as a builders.
248
-
249
- - [OData v4 query builder](https://github.com/techniq/odata-query)
250
- - [OData Filter Builder](https://github.com/bodia-uz/odata-filter-builder)
251
-
252
- ## Documentation
253
-
254
- The api documentation is generated using compodoc and can be viewed here: https://diegomvh.github.io/angular-odata/docs/
255
-
256
- Library documentation can be viewed on the wiki here: https://github.com/diegomvh/angular-odata/wiki
@@ -0,0 +1,146 @@
1
+ export class ODataAnnotations {
2
+ helper;
3
+ annotations;
4
+ context;
5
+ constructor(helper, annotations = new Map(), context) {
6
+ this.helper = helper;
7
+ this.annotations = annotations;
8
+ this.context = context;
9
+ }
10
+ attributes(data, metadata) {
11
+ return this.helper.attributes(data, metadata);
12
+ }
13
+ update(data) {
14
+ this.annotations = new Map([
15
+ ...this.annotations,
16
+ ...this.helper.annotations(data),
17
+ ]);
18
+ }
19
+ get entitySet() {
20
+ return this.context?.entitySet;
21
+ }
22
+ get type() {
23
+ return this.helper.type(this.annotations) || this.context?.type;
24
+ }
25
+ }
26
+ export class ODataPropertyAnnotations extends ODataAnnotations {
27
+ union(other) {
28
+ return new ODataPropertyAnnotations(this.helper, new Map([...this.annotations, ...other.annotations]), Object.assign({}, this.context, other.context));
29
+ }
30
+ clone() {
31
+ return new ODataPropertyAnnotations(this.helper, new Map(this.annotations), this.context);
32
+ }
33
+ data(data) {
34
+ return this.helper.property(data);
35
+ }
36
+ }
37
+ export class ODataEntityAnnotations extends ODataAnnotations {
38
+ union(other) {
39
+ return new ODataEntityAnnotations(this.helper, new Map([...this.annotations, ...other.annotations]), Object.assign({}, this.context, other.context));
40
+ }
41
+ clone() {
42
+ return new ODataEntityAnnotations(this.helper, new Map(this.annotations), this.context);
43
+ }
44
+ data(data) {
45
+ return this.helper.entity(data);
46
+ }
47
+ get id() {
48
+ return this.helper.id(this.annotations);
49
+ }
50
+ get etag() {
51
+ return this.helper.etag(this.annotations);
52
+ }
53
+ get mediaEtag() {
54
+ return this.helper.mediaEtag(this.annotations);
55
+ }
56
+ get metadataEtag() {
57
+ return this.helper.metadataEtag(this.annotations);
58
+ }
59
+ get readLink() {
60
+ return this.helper.readLink(this.annotations);
61
+ }
62
+ get editLink() {
63
+ return this.helper.editLink(this.annotations);
64
+ }
65
+ get mediaReadLink() {
66
+ return this.helper.mediaReadLink(this.annotations);
67
+ }
68
+ get mediaEditLink() {
69
+ return this.helper.mediaEditLink(this.annotations);
70
+ }
71
+ get mediaContentType() {
72
+ return this.helper.mediaContentType(this.annotations);
73
+ }
74
+ _properties;
75
+ get properties() {
76
+ if (this._properties === undefined) {
77
+ this._properties = this.helper.properties(this.annotations);
78
+ }
79
+ return this._properties;
80
+ }
81
+ property(name, type) {
82
+ const props = this.properties.get(name);
83
+ return type === 'collection'
84
+ ? new ODataEntitiesAnnotations(this.helper, props)
85
+ : new ODataEntityAnnotations(this.helper, props);
86
+ }
87
+ _functions;
88
+ get functions() {
89
+ if (this._functions === undefined) {
90
+ this._functions = this.helper.functions(this.annotations);
91
+ }
92
+ return this._functions;
93
+ }
94
+ function(name) {
95
+ return this.functions[name];
96
+ }
97
+ }
98
+ export class ODataEntitiesAnnotations extends ODataAnnotations {
99
+ union(other) {
100
+ return new ODataEntitiesAnnotations(this.helper, new Map([...this.annotations, ...other.annotations]), Object.assign({}, this.context, other.context));
101
+ }
102
+ clone() {
103
+ return new ODataEntitiesAnnotations(this.helper, new Map(this.annotations), this.context);
104
+ }
105
+ data(data) {
106
+ return this.helper.entities(data);
107
+ }
108
+ get readLink() {
109
+ return this.helper.readLink(this.annotations);
110
+ }
111
+ get count() {
112
+ return this.helper.count(this.annotations);
113
+ }
114
+ get nextLink() {
115
+ return this.helper.nextLink(this.annotations);
116
+ }
117
+ get deltaLink() {
118
+ return this.helper.deltaLink(this.annotations);
119
+ }
120
+ get top() {
121
+ let match = (this.nextLink || '').match(/[&?]{1}\$top=(\d+)/);
122
+ return match !== null ? Number(match[1]) : undefined;
123
+ }
124
+ get skip() {
125
+ let match = (this.nextLink || '').match(/[&?]{1}\$skip=(\d+)/);
126
+ return match !== null ? Number(match[1]) : undefined;
127
+ }
128
+ get skiptoken() {
129
+ let match = (this.nextLink || '').match(/[&?]{1}\$skiptoken=([\d\w\s'\-]+)/);
130
+ return match !== null ? match[1] : undefined;
131
+ }
132
+ _functions;
133
+ get functions() {
134
+ if (this._functions === undefined) {
135
+ this._functions = this.helper.functions(this.annotations);
136
+ }
137
+ return this._functions;
138
+ }
139
+ function(name) {
140
+ return this.functions[name];
141
+ }
142
+ entity() {
143
+ return new ODataEntityAnnotations(this.helper, this.annotations);
144
+ }
145
+ }
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvYW5ub3RhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxPQUFnQixnQkFBZ0I7SUFFM0I7SUFDRztJQUNBO0lBSFosWUFDUyxNQUEwQixFQUN2QixjQUFnQyxJQUFJLEdBQUcsRUFBZSxFQUN0RCxPQUFzQjtRQUZ6QixXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUN2QixnQkFBVyxHQUFYLFdBQVcsQ0FBMkM7UUFDdEQsWUFBTyxHQUFQLE9BQU8sQ0FBZTtJQUMvQixDQUFDO0lBRUosVUFBVSxDQUNSLElBQTZCLEVBQzdCLFFBQTJCO1FBRTNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBZSxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLENBQUMsSUFBNkI7UUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBYztZQUN0QyxHQUFHLElBQUksQ0FBQyxXQUFXO1lBQ25CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztJQUNsRSxDQUFDO0NBTUY7QUFFRCxNQUFNLE9BQU8sd0JBQTRCLFNBQVEsZ0JBQW1CO0lBQ2xFLEtBQUssQ0FBQyxLQUFvQztRQUN4QyxPQUFPLElBQUksd0JBQXdCLENBQ2pDLElBQUksQ0FBQyxNQUFN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SyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMvRCxPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUNyQyxtQ0FBbUMsQ0FDcEMsQ0FBQztRQUNGLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0MsQ0FBQztJQUVPLFVBQVUsQ0FBMkI7SUFDN0MsSUFBSSxTQUFTO1FBQ1gsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxzQkFBc0IsQ0FBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPRGF0YUNvbnRleHQsIE9EYXRhVmVyc2lvbkhlbHBlciB9IGZyb20gJy4vaGVscGVyJztcblxuaW1wb3J0IHsgT0RhdGFNZXRhZGF0YVR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9EYXRhQW5ub3RhdGlvbnM8VD4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaGVscGVyOiBPRGF0YVZlcnNpb25IZWxwZXIsXG4gICAgcHJvdGVjdGVkIGFubm90YXRpb25zOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKSxcbiAgICBwcm90ZWN0ZWQgY29udGV4dD86IE9EYXRhQ29udGV4dCxcbiAgKSB7fVxuXG4gIGF0dHJpYnV0ZXMoXG4gICAgZGF0YTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAgbWV0YWRhdGE6IE9EYXRhTWV0YWRhdGFUeXBlLFxuICApOiBQYXJ0aWFsPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXIuYXR0cmlidXRlcyhkYXRhLCBtZXRhZGF0YSkgYXMgUGFydGlhbDxUPjtcbiAgfVxuXG4gIHVwZGF0ZShkYXRhOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHRoaXMuYW5ub3RhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgYW55PihbXG4gICAgICAuLi50aGlzLmFubm90YXRpb25zLFxuICAgICAgLi4udGhpcy5oZWxwZXIuYW5ub3RhdGlvbnMoZGF0YSksXG4gICAgXSk7XG4gIH1cblxuICBnZXQgZW50aXR5U2V0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ/LmVudGl0eVNldDtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlci50eXBlKHRoaXMuYW5ub3RhdGlvbnMpIHx8IHRoaXMuY29udGV4dD8udHlwZTtcbiAgfVxuXG4gIC8vIE1ldGhvZFxuICBhYnN0cmFjdCB1bmlvbihvdGhlcjogT0RhdGFBbm5vdGF0aW9uczxhbnk+KTogT0RhdGFBbm5vdGF0aW9uczxhbnk+O1xuICBhYnN0cmFjdCBjbG9uZSgpOiBPRGF0YUFubm90YXRpb25zPGFueT47XG4gIGFic3RyYWN0IGRhdGEoZGF0YTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhUHJvcGVydHlBbm5vdGF0aW9uczxUPiBleHRlbmRzIE9EYXRhQW5ub3RhdGlvbnM8VD4ge1xuICB1bmlvbihvdGhlcjogT0RhdGFQcm9wZXJ0eUFubm90YXRpb25zPGFueT4pOiBPRGF0YVByb3BlcnR5QW5ub3RhdGlvbnM8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YVByb3BlcnR5QW5ub3RhdGlvbnM8YW55PihcbiAgICAgIHRoaXMuaGVscGVyLFxuICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oWy4uLnRoaXMuYW5ub3RhdGlvbnMsIC4uLm90aGVyLmFubm90YXRpb25zXSksXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbnRleHQsIG90aGVyLmNvbnRleHQpLFxuICAgICk7XG4gIH1cblxuICBjbG9uZSgpOiBPRGF0YVByb3BlcnR5QW5ub3RhdGlvbnM8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YVByb3BlcnR5QW5ub3RhdGlvbnM8YW55PihcbiAgICAgIHRoaXMuaGVscGVyLFxuICAgICAgbmV3IE1hcCh0aGlzLmFubm90YXRpb25zKSxcbiAgICAgIHRoaXMuY29udGV4dCxcbiAgICApO1xuICB9XG5cbiAgZGF0YShkYXRhOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlci5wcm9wZXJ0eShkYXRhKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT0RhdGFFbnRpdHlBbm5vdGF0aW9uczxUPiBleHRlbmRzIE9EYXRhQW5ub3RhdGlvbnM8VD4ge1xuICB1bmlvbihvdGhlcjogT0RhdGFFbnRpdHlBbm5vdGF0aW9uczxhbnk+KTogT0RhdGFFbnRpdHlBbm5vdGF0aW9uczxhbnk+IHtcbiAgICByZXR1cm4gbmV3IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8YW55PihcbiAgICAgIHRoaXMuaGVscGVyLFxuICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oWy4uLnRoaXMuYW5ub3RhdGlvbnMsIC4uLm90aGVyLmFubm90YXRpb25zXSksXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbnRleHQsIG90aGVyLmNvbnRleHQpLFxuICAgICk7XG4gIH1cblxuICBjbG9uZSgpOiBPRGF0YUVudGl0eUFubm90YXRpb25zPGFueT4ge1xuICAgIHJldHVybiBuZXcgT0RhdGFFbnRpdHlBbm5vdGF0aW9uczxhbnk+KFxuICAgICAgdGhpcy5oZWxwZXIsXG4gICAgICBuZXcgTWFwKHRoaXMuYW5ub3RhdGlvbnMpLFxuICAgICAgdGhpcy5jb250ZXh0LFxuICAgICk7XG4gIH1cblxuICBkYXRhKGRhdGE6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyLmVudGl0eShkYXRhKTtcbiAgfVxuXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXIuaWQodGhpcy5hbm5vdGF0aW9ucyk7XG4gIH1cblxuICBnZXQgZXRhZygpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXIuZXRhZyh0aGlzLmFubm90YXRpb25zKTtcbiAgfVxuXG4gIGdldCBtZWRpYUV0YWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyLm1lZGlhRXRhZyh0aGlzLmFubm90YXRpb25zKTtcbiAgfVxuXG4gIGdldCBtZXRhZGF0YUV0YWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyLm1ldGFkYXRhRXRhZyh0aGlzLmFubm90YXRpb25zKTtcbiAgfVxuXG4gIGdldCByZWFkTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXIucmVhZExpbmsodGhpcy5hbm5vdGF0aW9ucyk7XG4gIH1cblxuICBnZXQgZWRpdExpbmsoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyLmVkaXRMaW5rKHRoaXMuYW5ub3RhdGlvbnMpO1xuICB9XG5cbiAgZ2V0IG1lZGlhUmVhZExpbmsoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyLm1lZGlhUmVhZExpbmsodGhpcy5hbm5vdGF0aW9ucyk7XG4gIH1cblxuICBnZXQgbWVkaWFFZGl0TGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXIubWVkaWFFZGl0TGluayh0aGlzLmFubm90YXRpb25zKTtcbiAgfVxuXG4gIGdldCBtZWRpYUNvbnRlbnRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlci5tZWRpYUNvbnRlbnRUeXBlKHRoaXMuYW5ub3RhdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJvcGVydGllcz86IE1hcDxrZXlvZiBULCBNYXA8c3RyaW5nLCBhbnk+PjtcbiAgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgaWYgKHRoaXMuX3Byb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHRoaXMuaGVscGVyLnByb3BlcnRpZXM8VD4odGhpcy5hbm5vdGF0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO1xuICB9XG5cbiAgcHJvcGVydHk8Rj4obmFtZToga2V5b2YgVCwgdHlwZTogJ2NvbGxlY3Rpb24nKTogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPEY+O1xuICBwcm9wZXJ0eTxGPihuYW1lOiBrZXlvZiBULCB0eXBlOiAnc2luZ2xlJyk6IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8Rj47XG4gIHByb3BlcnR5PEY+KFxuICAgIG5hbWU6IGtleW9mIFQsXG4gICAgdHlwZTogJ3NpbmdsZScgfCAnY29sbGVjdGlvbicsXG4gICk6IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8Rj4gfCBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8Rj4ge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wZXJ0aWVzLmdldChuYW1lKTtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgICA/IG5ldyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8Rj4odGhpcy5oZWxwZXIsIHByb3BzKVxuICAgICAgOiBuZXcgT0RhdGFFbnRpdHlBbm5vdGF0aW9uczxGPih0aGlzLmhlbHBlciwgcHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZnVuY3Rpb25zPzogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG4gIGdldCBmdW5jdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuX2Z1bmN0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9mdW5jdGlvbnMgPSB0aGlzLmhlbHBlci5mdW5jdGlvbnModGhpcy5hbm5vdGF0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnM7XG4gIH1cblxuICBmdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnNbbmFtZV07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhRW50aXRpZXNBbm5vdGF0aW9uczxUPiBleHRlbmRzIE9EYXRhQW5ub3RhdGlvbnM8VD4ge1xuICB1bmlvbihvdGhlcjogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPGFueT4pOiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8YW55PihcbiAgICAgIHRoaXMuaGVscGVyLFxuICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oWy4uLnRoaXMuYW5ub3RhdGlvbnMsIC4uLm90aGVyLmFubm90YXRpb25zXSksXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbnRleHQsIG90aGVyLmNvbnRleHQpLFxuICAgICk7XG4gIH1cblxuICBjbG9uZSgpOiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8YW55PihcbiAgICAgIHRoaXMuaGVscGVyLFxuICAgICAgbmV3IE1hcCh0aGlzLmFubm90YXRpb25zKSxcbiAgICAgIHRoaXMuY29udGV4dCxcbiAgICApO1xuICB9XG5cbiAgZGF0YShkYXRhOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlci5lbnRpdGllcyhkYXRhKTtcbiAgfVxuXG4gIGdldCByZWFkTGluaygpIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXIucmVhZExpbmsodGhpcy5hbm5vdGF0aW9ucyk7XG4gIH1cblxuICBnZXQgY291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyLmNvdW50KHRoaXMuYW5ub3RhdGlvbnMpO1xuICB9XG5cbiAgZ2V0IG5leHRMaW5rKCkge1xuICAgIHJldHVybiB0aGlzLmhlbHBlci5uZXh0TGluayh0aGlzLmFubm90YXRpb25zKTtcbiAgfVxuXG4gIGdldCBkZWx0YUxpbmsoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVyLmRlbHRhTGluayh0aGlzLmFubm90YXRpb25zKTtcbiAgfVxuXG4gIGdldCB0b3AoKSB7XG4gICAgbGV0IG1hdGNoID0gKHRoaXMubmV4dExpbmsgfHwgJycpLm1hdGNoKC9bJj9dezF9XFwkdG9wPShcXGQrKS8pO1xuICAgIHJldHVybiBtYXRjaCAhPT0gbnVsbCA/IE51bWJlcihtYXRjaFsxXSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgc2tpcCgpIHtcbiAgICBsZXQgbWF0Y2ggPSAodGhpcy5uZXh0TGluayB8fCAnJykubWF0Y2goL1smP117MX1cXCRza2lwPShcXGQrKS8pO1xuICAgIHJldHVybiBtYXRjaCAhPT0gbnVsbCA/IE51bWJlcihtYXRjaFsxXSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgc2tpcHRva2VuKCkge1xuICAgIGxldCBtYXRjaCA9ICh0aGlzLm5leHRMaW5rIHx8ICcnKS5tYXRjaChcbiAgICAgIC9bJj9dezF9XFwkc2tpcHRva2VuPShbXFxkXFx3XFxzJ1xcLV0rKS8sXG4gICAgKTtcbiAgICByZXR1cm4gbWF0Y2ggIT09IG51bGwgPyBtYXRjaFsxXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX2Z1bmN0aW9ucz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICBnZXQgZnVuY3Rpb25zKCkge1xuICAgIGlmICh0aGlzLl9mdW5jdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZnVuY3Rpb25zID0gdGhpcy5oZWxwZXIuZnVuY3Rpb25zKHRoaXMuYW5ub3RhdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25zO1xuICB9XG5cbiAgZnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25zW25hbWVdO1xuICB9XG5cbiAgZW50aXR5KCk6IE9EYXRhRW50aXR5QW5ub3RhdGlvbnM8VD4ge1xuICAgIHJldHVybiBuZXcgT0RhdGFFbnRpdHlBbm5vdGF0aW9uczxUPih0aGlzLmhlbHBlciwgdGhpcy5hbm5vdGF0aW9ucyk7XG4gIH1cbn1cbiJdfQ==