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
@@ -1 +0,0 @@
1
- {"version":3,"file":"angular-odata.js","sources":["../../../projects/angular-odata/src/lib/types.ts","../../../projects/angular-odata/src/lib/resources/builder.ts","../../../projects/angular-odata/src/lib/parsers/edm.ts","../../../projects/angular-odata/src/lib/utils/dates.ts","../../../projects/angular-odata/src/lib/utils/enums.ts","../../../projects/angular-odata/src/lib/utils/types.ts","../../../projects/angular-odata/src/lib/utils/objects.ts","../../../projects/angular-odata/src/lib/constants.ts","../../../projects/angular-odata/src/lib/utils/urls.ts","../../../projects/angular-odata/src/lib/utils/http.ts","../../../projects/angular-odata/src/lib/schema/annotation.ts","../../../projects/angular-odata/src/lib/helper.ts","../../../projects/angular-odata/src/lib/options.ts","../../../projects/angular-odata/src/lib/parsers/enum-type.ts","../../../projects/angular-odata/src/lib/parsers/structured-type.ts","../../../projects/angular-odata/src/lib/parsers/callable.ts","../../../projects/angular-odata/src/lib/schema/structured-type.ts","../../../projects/angular-odata/src/lib/schema/callable.ts","../../../projects/angular-odata/src/lib/schema/entity-set.ts","../../../projects/angular-odata/src/lib/schema/entity-container.ts","../../../projects/angular-odata/src/lib/schema/enum-type.ts","../../../projects/angular-odata/src/lib/utils/odata.ts","../../../projects/angular-odata/src/lib/schema/schema.ts","../../../projects/angular-odata/src/lib/resources/query-options.ts","../../../projects/angular-odata/src/lib/resources/path-segments.ts","../../../projects/angular-odata/src/lib/resources/request.ts","../../../projects/angular-odata/src/lib/resources/resource.ts","../../../projects/angular-odata/src/lib/resources/types/action.ts","../../../projects/angular-odata/src/lib/resources/responses/annotations.ts","../../../projects/angular-odata/src/lib/resources/responses/options.ts","../../../projects/angular-odata/src/lib/resources/responses/response.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-annotation.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-type-definition.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-schema.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-enum-type.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-structured-type.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-function-action.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-structural-property.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-entity-set.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-singleton.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-entity-container.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-reference.ts","../../../projects/angular-odata/src/lib/resources/responses/csdl/csdl-navigation-property-binding.ts","../../../projects/angular-odata/src/lib/resources/responses/metadata.ts","../../../projects/angular-odata/src/lib/resources/types/batch.ts","../../../projects/angular-odata/src/lib/resources/types/count.ts","../../../projects/angular-odata/src/lib/resources/types/function.ts","../../../projects/angular-odata/src/lib/resources/types/reference.ts","../../../projects/angular-odata/src/lib/resources/types/value.ts","../../../projects/angular-odata/src/lib/resources/types/property.ts","../../../projects/angular-odata/src/lib/resources/types/media.ts","../../../projects/angular-odata/src/lib/resources/types/navigation-property.ts","../../../projects/angular-odata/src/lib/resources/types/entity.ts","../../../projects/angular-odata/src/lib/resources/types/entity-set.ts","../../../projects/angular-odata/src/lib/resources/types/metadata.ts","../../../projects/angular-odata/src/lib/resources/types/singleton.ts","../../../projects/angular-odata/src/lib/models/options.ts","../../../projects/angular-odata/src/lib/models/collection.ts","../../../projects/angular-odata/src/lib/models/model.ts","../../../projects/angular-odata/src/lib/cache/cache.ts","../../../projects/angular-odata/src/lib/cache/memory.ts","../../../projects/angular-odata/src/lib/cache/storage.ts","../../../projects/angular-odata/src/lib/api.ts","../../../projects/angular-odata/src/lib/settings.ts","../../../projects/angular-odata/src/lib/client.ts","../../../projects/angular-odata/src/lib/tokens.ts","../../../projects/angular-odata/src/lib/services/base.ts","../../../projects/angular-odata/src/lib/services/entity.ts","../../../projects/angular-odata/src/lib/services/entity-set.ts","../../../projects/angular-odata/src/lib/services/singleton.ts","../../../projects/angular-odata/src/lib/services/factory.ts","../../../projects/angular-odata/src/lib/module.ts","../../../projects/angular-odata/src/public-api.ts","../../../projects/angular-odata/src/angular-odata.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { ODataVersionHelper } from './helper';\n\nexport type ODataVersion = '2.0' | '3.0' | '4.0';\nexport type FetchPolicy =\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\nexport type ODataMetadataType = 'minimal' | 'full' | 'none';\nexport type CacheCacheability = 'public' | 'private' | 'no-cache' | 'no-store';\n\nexport enum PathSegmentNames {\n batch = 'batch',\n metadata = 'metadata',\n entitySet = 'entitySet',\n singleton = 'singleton',\n type = 'type',\n property = 'property',\n navigationProperty = 'navigationProperty',\n reference = 'reference',\n value = 'value',\n count = 'count',\n function = 'function',\n action = 'action',\n}\n\nexport enum QueryOptionNames {\n select = 'select',\n expand = 'expand',\n compute = 'compute',\n filter = 'filter',\n search = 'search',\n transform = 'transform',\n orderBy = 'orderBy',\n top = 'top',\n skip = 'skip',\n skiptoken = 'skiptoken',\n format = 'format',\n count = 'count',\n}\n\nexport interface Options {\n version?: ODataVersion;\n stringAsEnum?: boolean;\n}\n\nexport interface ApiOptions extends Options {\n params?: { [param: string]: string | string[] };\n headers?: { [param: string]: string | string[] };\n withCredentials?: boolean;\n //Headers\n accept?: {\n metadata?: ODataMetadataType;\n ieee754Compatible?: boolean;\n };\n etag?: {\n ifMatch?: boolean;\n ifNoneMatch?: boolean;\n };\n prefer?: {\n maxPageSize?: number;\n return?: 'representation' | 'minimal';\n continueOnError?: boolean;\n includeAnnotations?: string;\n };\n stripMetadata?: ODataMetadataType;\n fetchPolicy?: FetchPolicy;\n bodyQueryOptions?: QueryOptionNames[];\n}\n\nexport interface OptionsHelper extends Options {\n helper: ODataVersionHelper;\n metadata?: ODataMetadataType;\n ieee754Compatible?: boolean;\n streaming?: boolean;\n}\n\nexport interface ResponseOptions extends OptionsHelper {\n cacheability?: CacheCacheability;\n maxAge?: number;\n}\n\nexport interface StructuredTypeFieldOptions extends OptionsHelper {\n field: StructuredTypeFieldConfig;\n}\n\nexport interface Parser<T> {\n deserialize(\n value: any,\n options?: OptionsHelper | StructuredTypeFieldOptions\n ): T;\n serialize(\n value: T,\n options?: OptionsHelper | StructuredTypeFieldOptions\n ): any;\n //Encodes the value/s of a URL parameter or query-string.\n encode(value: T, options?: OptionsHelper | StructuredTypeFieldOptions): any;\n}\n\nexport const NONE_PARSER = {\n deserialize: (value: any) => value,\n serialize: (value: any) => value,\n encode: (value: any) => value,\n} as Parser<any>;\n\nexport interface Cache {\n put<T>(key: string, payload: T, ...opts: any[]): void;\n get<T>(key: string, ...opts: any[]): T | undefined;\n}\n\n//#region Configs\nexport type ApiConfig = {\n serviceRootUrl: string;\n name?: string;\n version?: ODataVersion;\n default?: boolean;\n creation?: Date;\n cache?: Cache;\n errorHandler?: (error: any, caught: Observable<any>) => Observable<never>;\n options?: ApiOptions;\n parsers?: { [type: string]: Parser<any> };\n schemas?: SchemaConfig[];\n};\nexport type AnnotationConfig = {\n term: string;\n string?: string;\n bool?: boolean;\n int?: number;\n permissions?: string[];\n properties?: string[];\n};\nexport type SchemaConfig = {\n namespace: string;\n alias?: string;\n annotations?: AnnotationConfig[];\n enums?: EnumTypeConfig<any>[];\n entities?: StructuredTypeConfig<any>[];\n callables?: CallableConfig[];\n containers?: EntityContainerConfig[];\n};\n\nexport type EntityContainerConfig = {\n name: string;\n annotations?: AnnotationConfig[];\n entitySets?: EntitySetConfig[];\n};\n\nexport type EnumTypeFieldConfig = {\n value: number;\n annotations?: AnnotationConfig[];\n};\n\nexport type EnumTypeConfig<T> = {\n name: string;\n flags?: boolean;\n annotations?: AnnotationConfig[];\n members: { [name: string]: number } | { [value: number]: string };\n fields: { [member: string]: EnumTypeFieldConfig };\n};\n\nexport type StructuredTypeFieldConfig = {\n type: string;\n default?: any;\n maxLength?: number;\n key?: boolean;\n collection?: boolean;\n nullable?: boolean;\n navigation?: boolean;\n precision?: number;\n annotations?: AnnotationConfig[];\n scale?: number;\n referentials?: { property: string; referencedProperty: string }[];\n referential?: string;\n referenced?: string;\n};\n\nexport type StructuredTypeConfig<T> = {\n name: string;\n base?: string;\n open?: boolean;\n model?: { new (...params: any[]): any };\n collection?: { new (...params: any[]): any };\n annotations?: AnnotationConfig[];\n keys?: { name: string; alias?: string }[];\n fields: { [P in keyof T]?: StructuredTypeFieldConfig };\n};\n\nexport type Parameter = {\n type: string;\n nullable?: boolean;\n collection?: boolean;\n};\n\nexport type CallableConfig = {\n name: string;\n entitySetPath?: string;\n bound?: boolean;\n composable?: boolean;\n parameters?: { [name: string]: Parameter };\n return?: { type: string; collection?: boolean };\n};\nexport type EntitySetConfig = {\n name: string;\n entityType: string;\n service: { new (...params: any[]): any };\n annotations?: AnnotationConfig[];\n};\n//#endregion\n","const COMPARISON_OPERATORS = ['eq', 'ne', 'gt', 'ge', 'lt', 'le'];\nconst LOGICAL_OPERATORS = ['and', 'or', 'not'];\nconst COLLECTION_OPERATORS = ['any', 'all'];\nconst BOOLEAN_FUNCTIONS = ['startswith', 'endswith', 'contains'];\nconst SUPPORTED_EXPAND_PROPERTIES = [\n 'expand',\n 'levels',\n 'select',\n 'top',\n 'count',\n 'orderby',\n 'filter',\n];\n\nconst FUNCTION_REGEX = /\\((.*)\\)/;\nconst INDEXOF_REGEX = /(?!indexof)\\((\\w+)\\)/;\n\nexport type Unpacked<T> = T extends (infer U)[] ? U : T;\nexport type Select<T> = SelectType<T> | SelectType<T>[];\nexport type SelectType<T> = string | keyof T;\nexport type Filter = FilterType | FilterType[];\nexport type FilterType = string | { [name: string]: any };\n\nexport enum StandardAggregateMethods {\n sum = 'sum',\n min = 'min',\n max = 'max',\n average = 'average',\n countdistinct = 'countdistinct',\n}\nexport type Aggregate =\n | string\n | { [propertyName: string]: { with: StandardAggregateMethods; as: string } };\n\n// OrderBy\n\nexport type OrderBy<T> = OrderByType<T> | OrderByType<T>[];\nexport type OrderByType<T> = string | OrderByObject<T>;\nexport type OrderByObject<T> = keyof T | [keyof T | string, 'asc' | 'desc'];\n//TODO: support angular 12 recursive type:\n/*\nexport type OrderByOptions<T> = keyof T | [ keyof T | string, 'asc' | 'desc' ];\nexport type NestedOrderBy<T> = { [P in keyof T]?: T[P] extends Array<infer E> ? OrderBy<E> : OrderBy<T[P]> }\nexport type OrderBy<T> = string | OrderByOptions<T> | Array<OrderByOptions<T>> | NestedOrderBy<T>;\n*/\n\n// Expand\nexport type Expand<T> = ExpandType<T> | ExpandType<T>[];\nexport type ExpandType<T> = string | ExpandObject<T>;\nexport type ExpandObject<T> = keyof T | NestedExpandOptions<T>;\nexport type NestedExpandOptions<T> = {\n [P in keyof T]?: ExpandOptions<Unpacked<T[P]>>;\n};\nexport type ExpandOptions<T> = {\n select?: Select<T>;\n filter?: Filter;\n orderBy?: OrderBy<T>;\n top?: number;\n levels?: number | 'max';\n count?: boolean | Filter;\n expand?: Expand<T>;\n};\n\nexport type Transform<T> = {\n aggregate?: Aggregate | Array<Aggregate>;\n filter?: Filter;\n groupBy?: GroupBy<T>;\n};\nexport type GroupBy<T> = {\n properties: Array<keyof T>;\n transform?: Transform<T>;\n};\n\nexport enum QueryCustomTypes {\n Raw,\n Alias,\n Duration,\n Binary,\n}\n\nexport type QueryCustomType = {\n type: QueryCustomTypes;\n value: any;\n name?: string;\n};\nexport type Value = string | Date | number | boolean | QueryCustomType;\n\n//https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_QueryOptions\nexport const raw = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Raw,\n value,\n});\nexport const alias = (value: any, name?: string): QueryCustomType => ({\n type: QueryCustomTypes.Alias,\n value,\n name,\n});\nexport const duration = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Duration,\n value,\n});\nexport const binary = (value: string): QueryCustomType => ({\n type: QueryCustomTypes.Binary,\n value,\n});\nexport const isQueryCustomType = (value: any) =>\n typeof value === 'object' &&\n 'type' in value &&\n value.type in QueryCustomTypes;\nexport type QueryOptions<T> = ExpandOptions<T> & {\n search: string;\n transform: { [name: string]: any } | { [name: string]: any }[];\n skip: number;\n skiptoken: string;\n key: string | number | { [name: string]: any };\n count: boolean | Filter;\n action: string;\n func: string | { [functionName: string]: { [parameterName: string]: any } };\n format: string;\n aliases: QueryCustomType[];\n};\n\nexport const ITEM_ROOT = '';\n\nexport default function <T>({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n}: Partial<QueryOptions<T>> = {}) {\n const [path, params] = buildPathAndQuery({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n });\n\n return buildUrl(path, params);\n}\n\nexport function buildPathAndQuery<T>({\n select,\n search,\n skiptoken,\n format,\n top,\n skip,\n filter,\n transform,\n orderBy,\n key,\n count,\n expand,\n action,\n func,\n}: Partial<QueryOptions<T>> = {}): [string, { [name: string]: any }] {\n let path: string = '';\n let aliases: QueryCustomType[] = [];\n\n const query: any = {};\n\n // key is not (null, undefined)\n if (key != undefined) {\n path += `(${handleValue(key as Value, aliases)})`;\n }\n\n if (select) {\n query.$select = Array.isArray(select) ? select.join(',') : select;\n }\n\n if (search) {\n query.$search = search;\n }\n\n if (skiptoken) {\n query.$skiptoken = skiptoken;\n }\n\n if (format) {\n query.$format = format;\n }\n\n if (filter || typeof count === 'object') {\n query.$filter = buildFilter(\n typeof count === 'object' ? count : filter,\n aliases\n );\n }\n\n if (transform) {\n query.$apply = buildTransforms(transform);\n }\n\n if (expand) {\n query.$expand = buildExpand(expand);\n }\n\n if (orderBy) {\n query.$orderby = buildOrderBy(orderBy);\n }\n\n if (count) {\n if (typeof count === 'boolean') {\n query.$count = true;\n } else {\n path += '/$count';\n }\n }\n\n if (typeof top === 'number') {\n query.$top = top;\n }\n\n if (typeof skip === 'number') {\n query.$skip = skip;\n }\n\n if (action) {\n path += `/${action}`;\n }\n\n if (func) {\n if (typeof func === 'string') {\n path += `/${func}`;\n } else if (typeof func === 'object') {\n const [funcName] = Object.keys(func);\n const funcArgs = handleValue(func[funcName] as Value, aliases);\n\n path += `/${funcName}`;\n if (funcArgs !== '') {\n path += `(${funcArgs})`;\n }\n }\n }\n\n if (aliases.length > 0) {\n Object.assign(\n query,\n aliases.reduce(\n (acc, alias) =>\n Object.assign(acc, { [`@${alias.name}`]: handleValue(alias.value) }),\n {}\n )\n );\n }\n\n // Filter empty values\n const params = Object.entries(query)\n .filter(([, value]) => value !== undefined && value !== '')\n .reduce((acc, [key, value]) => Object.assign(acc, { [key]: value }), {});\n\n return [path, params];\n}\n\nfunction renderPrimitiveValue(\n key: string,\n val: any,\n aliases: QueryCustomType[] = []\n) {\n return `${key} eq ${handleValue(val, aliases)}`;\n}\n\nfunction buildFilter(\n filters: Filter = {},\n aliases: QueryCustomType[] = [],\n propPrefix = ''\n): string {\n return (\n (Array.isArray(filters) ? filters : [filters]).reduce(\n (acc: string[], filter) => {\n if (filter) {\n const builtFilter = buildFilterCore(filter, aliases, propPrefix);\n if (builtFilter) {\n acc.push(builtFilter);\n }\n }\n return acc;\n },\n []\n ) as string[]\n ).join(' and ');\n\n function buildFilterCore(\n filter: Filter = {},\n aliases: QueryCustomType[] = [],\n propPrefix = ''\n ) {\n let filterExpr = '';\n if (typeof filter === 'string') {\n // Use raw filter string\n filterExpr = filter;\n } else if (filter && typeof filter === 'object') {\n const filtersArray = Object.keys(filter).reduce(\n (result: any[], filterKey) => {\n const value = (filter as any)[filterKey];\n let propName = '';\n if (propPrefix) {\n if (filterKey === ITEM_ROOT) {\n propName = propPrefix;\n } else if (INDEXOF_REGEX.test(filterKey)) {\n propName = filterKey.replace(INDEXOF_REGEX, (_, $1) =>\n $1.trim() === ITEM_ROOT\n ? `(${propPrefix})`\n : `(${propPrefix}/${$1.trim()})`\n );\n } else if (FUNCTION_REGEX.test(filterKey)) {\n propName = filterKey.replace(FUNCTION_REGEX, (_, $1) =>\n $1.trim() === ITEM_ROOT\n ? `(${propPrefix})`\n : `(${propPrefix}/${$1.trim()})`\n );\n } else {\n propName = `${propPrefix}/${filterKey}`;\n }\n } else {\n propName = filterKey;\n }\n\n if (filterKey === ITEM_ROOT && Array.isArray(value)) {\n return result.concat(\n value.map((arrayValue: any) =>\n renderPrimitiveValue(propName, arrayValue)\n )\n );\n }\n\n if (\n ['number', 'string', 'boolean'].indexOf(typeof value) !== -1 ||\n value instanceof Date ||\n value === null\n ) {\n // Simple key/value handled as equals operator\n result.push(renderPrimitiveValue(propName, value, aliases));\n } else if (Array.isArray(value)) {\n const op = filterKey;\n const builtFilters = value\n .map((v) => buildFilter(v, aliases, propPrefix))\n .filter((f) => f)\n .map((f) =>\n LOGICAL_OPERATORS.indexOf(op) !== -1 ? `(${f})` : f\n );\n if (builtFilters.length) {\n if (LOGICAL_OPERATORS.indexOf(op) !== -1) {\n if (builtFilters.length) {\n if (op === 'not') {\n result.push(parseNot(builtFilters as string[]));\n } else {\n result.push(`(${builtFilters.join(` ${op} `)})`);\n }\n }\n } else {\n result.push(builtFilters.join(` ${op} `));\n }\n }\n } else if (LOGICAL_OPERATORS.indexOf(propName) !== -1) {\n const op = propName;\n const builtFilters = Object.keys(value).map((valueKey) =>\n buildFilterCore({ [valueKey]: value[valueKey] })\n );\n if (builtFilters.length) {\n if (op === 'not') {\n result.push(parseNot(builtFilters as string[]));\n } else {\n result.push(`${builtFilters.join(` ${op} `)}`);\n }\n }\n } else if (typeof value === 'object') {\n if ('type' in value) {\n result.push(renderPrimitiveValue(propName, value, aliases));\n } else {\n const operators = Object.keys(value);\n operators.forEach((op) => {\n if (COMPARISON_OPERATORS.indexOf(op) !== -1) {\n result.push(\n `${propName} ${op} ${handleValue(value[op], aliases)}`\n );\n } else if (LOGICAL_OPERATORS.indexOf(op) !== -1) {\n if (Array.isArray(value[op])) {\n result.push(\n value[op]\n .map(\n (v: any) =>\n '(' + buildFilterCore(v, aliases, propName) + ')'\n )\n .join(` ${op} `)\n );\n } else {\n result.push(\n '(' + buildFilterCore(value[op], aliases, propName) + ')'\n );\n }\n } else if (COLLECTION_OPERATORS.indexOf(op) !== -1) {\n const collectionClause = buildCollectionClause(\n filterKey.toLowerCase(),\n value[op],\n op,\n propName\n );\n if (collectionClause) {\n result.push(collectionClause);\n }\n } else if (op === 'has') {\n result.push(\n `${propName} ${op} ${handleValue(value[op], aliases)}`\n );\n } else if (op === 'in') {\n const resultingValues = Array.isArray(value[op])\n ? value[op]\n : value[op].value.map((typedValue: any) => ({\n type: value[op].type,\n value: typedValue,\n }));\n\n result.push(\n propName +\n ' in (' +\n resultingValues\n .map((v: any) => handleValue(v, aliases))\n .join(',') +\n ')'\n );\n } else if (BOOLEAN_FUNCTIONS.indexOf(op) !== -1) {\n // Simple boolean functions (startswith, endswith, contains)\n result.push(\n `${op}(${propName},${handleValue(value[op], aliases)})`\n );\n } else {\n // Nested property\n const filter = buildFilterCore(value, aliases, propName);\n if (filter) {\n result.push(filter);\n }\n }\n });\n }\n } else if (value === undefined) {\n // Ignore/omit filter if value is `undefined`\n } else {\n throw new Error(`Unexpected value type: ${value}`);\n }\n\n return result;\n },\n []\n );\n\n filterExpr = filtersArray.join(' and ');\n } /* else {\n throw new Error(`Unexpected filters type: ${filter}`);\n } */\n return filterExpr;\n }\n\n function buildCollectionClause(\n lambdaParameter: string,\n value: any,\n op: string,\n propName: string\n ) {\n let clause = '';\n\n if (typeof value === 'string' || value instanceof String) {\n clause = getStringCollectionClause(lambdaParameter, value, op, propName);\n } else if (value) {\n // normalize {any:[{prop1: 1}, {prop2: 1}]} --> {any:{prop1: 1, prop2: 1}}; same for 'all',\n // simple values collection: {any:[{'': 'simpleVal1'}, {'': 'simpleVal2'}]} --> {any:{'': ['simpleVal1', 'simpleVal2']}}; same for 'all',\n const filterValue = Array.isArray(value)\n ? value.reduce((acc, item) => {\n if (item.hasOwnProperty(ITEM_ROOT)) {\n if (!acc.hasOwnProperty(ITEM_ROOT)) {\n acc[ITEM_ROOT] = [];\n }\n acc[ITEM_ROOT].push(item[ITEM_ROOT]);\n return acc;\n }\n return { ...acc, ...item };\n }, {})\n : value;\n\n const filter = buildFilterCore(filterValue, aliases, lambdaParameter);\n clause = `${propName}/${op}(${\n filter ? `${lambdaParameter}:${filter}` : ''\n })`;\n }\n return clause;\n }\n}\n\nfunction getStringCollectionClause(\n lambdaParameter: string,\n value: any,\n collectionOperator: string,\n propName: string\n) {\n let clause = '';\n const conditionOperator = collectionOperator == 'all' ? 'ne' : 'eq';\n clause = `${propName}/${collectionOperator}(${lambdaParameter}: ${lambdaParameter} ${conditionOperator} '${value}')`;\n\n return clause;\n}\n\nfunction escapeIllegalChars(string: string) {\n string = string.replace(/%/g, '%25');\n string = string.replace(/\\+/g, '%2B');\n string = string.replace(/\\//g, '%2F');\n string = string.replace(/\\?/g, '%3F');\n string = string.replace(/#/g, '%23');\n string = string.replace(/&/g, '%26');\n string = string.replace(/'/g, \"''\");\n return string;\n}\n\nfunction handleValue(value: Value, aliases?: QueryCustomType[]): any {\n if (typeof value === 'string') {\n return `'${escapeIllegalChars(value)}'`;\n } else if (value instanceof Date) {\n return value.toISOString();\n } else if (typeof value === 'number') {\n return value;\n } else if (Array.isArray(value)) {\n return `[${value.map((d) => handleValue(d)).join(',')}]`;\n } else if (value === null) {\n return value;\n } else if (typeof value === 'object') {\n switch (value.type) {\n case QueryCustomTypes.Raw:\n return value.value;\n case QueryCustomTypes.Duration:\n return `duration'${value.value}'`;\n case QueryCustomTypes.Binary:\n return `binary'${value.value}'`;\n case QueryCustomTypes.Alias:\n // Store\n if (Array.isArray(aliases)) aliases.push(value);\n return `@${value.name}`;\n default:\n return Object.entries(value)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${k}=${handleValue(v as Value, aliases)}`)\n .join(',');\n }\n }\n return value;\n}\n\nfunction buildExpand<T>(expands: Expand<T>): string {\n if (typeof expands === 'number') {\n return expands as any;\n } else if (typeof expands === 'string') {\n if (expands.indexOf('/') === -1) {\n return expands;\n }\n\n // Change `Foo/Bar/Baz` to `Foo($expand=Bar($expand=Baz))`\n return expands\n .split('/')\n .reverse()\n .reduce((results, item, index, arr) => {\n if (index === 0) {\n // Inner-most item\n return `$expand=${item}`;\n } else if (index === arr.length - 1) {\n // Outer-most item, don't add `$expand=` prefix (added above)\n return `${item}(${results})`;\n } else {\n // Other items\n return `$expand=${item}(${results})`;\n }\n }, '');\n } else if (Array.isArray(expands)) {\n return `${(expands as Array<NestedExpandOptions<any>>)\n .map((e) => buildExpand(e))\n .join(',')}`;\n } else if (typeof expands === 'object') {\n const expandKeys = Object.keys(expands);\n\n if (\n expandKeys.some(\n (key) => SUPPORTED_EXPAND_PROPERTIES.indexOf(key.toLowerCase()) !== -1\n )\n ) {\n return expandKeys\n .map((key) => {\n let value;\n switch (key) {\n case 'filter':\n value = buildFilter((expands as NestedExpandOptions<any>)[key]);\n break;\n case 'orderBy':\n value = buildOrderBy(\n (expands as NestedExpandOptions<any>)[key] as OrderBy<T>\n );\n break;\n case 'levels':\n case 'count':\n case 'top':\n value = `${(expands as NestedExpandOptions<any>)[key]}`;\n break;\n default:\n value = buildExpand(\n (expands as NestedExpandOptions<any>)[key] as Expand<T>\n );\n }\n return `$${key.toLowerCase()}=${value}`;\n })\n .join(';');\n } else {\n return expandKeys\n .map((key) => {\n const builtExpand = buildExpand(\n (expands as NestedExpandOptions<any>)[\n key\n ] as NestedExpandOptions<any>\n );\n return builtExpand ? `${key}(${builtExpand})` : key;\n })\n .join(',');\n }\n }\n return '';\n}\n\nfunction buildTransforms<T>(transforms: Transform<T> | Transform<T>[]) {\n // Wrap single object an array for simplified processing\n const transformsArray = Array.isArray(transforms) ? transforms : [transforms];\n\n const transformsResult = transformsArray.reduce(\n (result: string[], transform) => {\n const { aggregate, filter, groupBy, ...rest } = transform;\n\n // TODO: support as many of the following:\n // topcount, topsum, toppercent,\n // bottomsum, bottomcount, bottompercent,\n // identity, concat, expand, search, compute, isdefined\n const unsupportedKeys = Object.keys(rest);\n if (unsupportedKeys.length) {\n throw new Error(`Unsupported transform(s): ${unsupportedKeys}`);\n }\n\n if (aggregate) {\n result.push(`aggregate(${buildAggregate(aggregate)})`);\n }\n if (filter) {\n const builtFilter = buildFilter(filter);\n if (builtFilter) {\n result.push(`filter(${buildFilter(builtFilter)})`);\n }\n }\n if (groupBy) {\n result.push(`groupby(${buildGroupBy(groupBy)})`);\n }\n\n return result;\n },\n []\n );\n\n return transformsResult.join('/') || undefined;\n}\n\nfunction buildAggregate(aggregate: Aggregate | Aggregate[]) {\n // Wrap single object in an array for simplified processing\n const aggregateArray = Array.isArray(aggregate) ? aggregate : [aggregate];\n\n return aggregateArray\n .map((aggregateItem) => {\n return typeof aggregateItem === 'string'\n ? aggregateItem\n : Object.keys(aggregateItem).map((aggregateKey) => {\n const aggregateValue = aggregateItem[aggregateKey];\n\n // TODO: Are these always required? Can/should we default them if so?\n if (!aggregateValue.with) {\n throw new Error(`'with' property required for '${aggregateKey}'`);\n }\n if (!aggregateValue.as) {\n throw new Error(`'as' property required for '${aggregateKey}'`);\n }\n\n return `${aggregateKey} with ${aggregateValue.with} as ${aggregateValue.as}`;\n });\n })\n .join(',');\n}\n\nfunction buildGroupBy<T>(groupBy: GroupBy<T>) {\n if (!groupBy.properties) {\n throw new Error(`'properties' property required for groupBy`);\n }\n\n let result = `(${groupBy.properties.join(',')})`;\n\n if (groupBy.transform) {\n result += `,${buildTransforms(groupBy.transform)}`;\n }\n\n return result;\n}\n\nfunction buildOrderBy<T>(orderBy: OrderBy<T>, prefix: string = ''): string {\n if (Array.isArray(orderBy)) {\n return (orderBy as OrderByObject<T>[])\n .map((value) =>\n Array.isArray(value) &&\n value.length === 2 &&\n ['asc', 'desc'].indexOf(value[1]) !== -1\n ? value.join(' ')\n : value\n )\n .map((v) => `${prefix}${v}`)\n .join(',');\n } else if (typeof orderBy === 'object') {\n return Object.entries(orderBy)\n .map(([k, v]) => buildOrderBy(v as OrderBy<any>, `${k}/`))\n .map((v) => `${prefix}${v}`)\n .join(',');\n }\n return `${prefix}${orderBy}`;\n}\n\nfunction buildUrl(path: string, params: { [name: string]: any }): string {\n // This can be refactored using URL API. But IE does not support it.\n const queries: string[] = Object.entries(params).map(\n ([key, value]) => `${key}=${value}`\n );\n return queries.length ? `${path}?${queries.join('&')}` : path;\n}\n\nfunction parseNot(builtFilters: string[]): string {\n return `not(${builtFilters.join(' and ')})`;\n}\n","import { binary, duration, raw } from '../resources/builder';\nimport { Parser, StructuredTypeFieldOptions } from '../types';\n\n//https://en.wikipedia.org/wiki/ISO_8601#Durations\n\nexport type Duration = {\n sign?: 1 | -1;\n years?: number;\n months?: number;\n weeks?: number;\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n};\n\n//https://github.com/niklasvh/base64-arraybuffer\nconst chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst lookup = new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\n\nexport const EDM_PARSERS: { [type: string]: Parser<any> } = {\n 'Edm.Guid': <Parser<string | string[]>>{\n deserialize(\n value: string | string[],\n options: StructuredTypeFieldOptions\n ): string | string[] {\n return value;\n },\n serialize(\n value: string | string[],\n options: StructuredTypeFieldOptions\n ): string | string[] {\n return value;\n },\n encode(value: string | string[], options: StructuredTypeFieldOptions): any {\n return Array.isArray(value) ? value.map((v) => raw(v)) : raw(value);\n },\n },\n 'Edm.Date': <Parser<Date | Date[]>>{\n deserialize(\n value: string | string[],\n options: StructuredTypeFieldOptions\n ): Date | Date[] {\n //TODO: Check valid input for date\n const _deserialize = (v: string) => new Date(`${v}T00:00:00.000Z`);\n return Array.isArray(value)\n ? value.map(_deserialize)\n : _deserialize(value);\n },\n serialize(\n value: Date | Date[],\n options: StructuredTypeFieldOptions\n ): string | string[] {\n const _serialize = (v: Date) => v.toISOString().substring(0, 10);\n return Array.isArray(value) ? value.map(_serialize) : _serialize(value);\n },\n encode(value: Date | Date[], options: StructuredTypeFieldOptions): any {\n const _encode = (v: Date) => v.toISOString().substring(0, 10);\n return Array.isArray(value)\n ? value.map((v) => raw(_encode(v)))\n : raw(_encode(value));\n },\n },\n 'Edm.TimeOfDay': <Parser<Date | Date[]>>{\n deserialize(\n value: string | string[],\n options: StructuredTypeFieldOptions\n ): Date | Date[] {\n //TODO: Check valid input for time of day\n const _deserialize = (v: string) => new Date(`1970-01-01T${v}Z`);\n return Array.isArray(value)\n ? value.map(_deserialize)\n : _deserialize(value);\n },\n serialize(\n value: Date | Date[],\n options: StructuredTypeFieldOptions\n ): string | string[] {\n const _serialize = (v: Date) => v.toISOString().substring(11, 23);\n return Array.isArray(value) ? value.map(_serialize) : _serialize(value);\n },\n encode(value: Date | Date[], options: StructuredTypeFieldOptions): any {\n const _encode = (v: Date) => v.toISOString().substring(11, 23);\n return Array.isArray(value)\n ? value.map((v) => raw(_encode(v)))\n : raw(_encode(value));\n },\n },\n 'Edm.DateTimeOffset': <Parser<Date>>{\n deserialize(\n value: string | string[],\n options: StructuredTypeFieldOptions\n ): Date | Date[] {\n const _deserialize = (v: string) => new Date(v);\n return Array.isArray(value)\n ? value.map(_deserialize)\n : _deserialize(value);\n },\n serialize(\n value: Date | Date[],\n options: StructuredTypeFieldOptions\n ): string | string[] {\n const _serialize = (v: Date) => v.toISOString();\n return Array.isArray(value) ? value.map(_serialize) : _serialize(value);\n },\n encode(value: Date | Date[], options: StructuredTypeFieldOptions): any {\n const _encode = (v: Date) => v.toISOString();\n return Array.isArray(value)\n ? value.map((v) => raw(_encode(v)))\n : raw(_encode(value));\n },\n },\n 'Edm.Duration': <Parser<Duration>>{\n deserialize(\n value: string,\n options: StructuredTypeFieldOptions\n ): Duration | Duration[] {\n const _deserialize = (v: string) => {\n const matches =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/.exec(\n v\n );\n if (!matches || value.length < 3) {\n throw new TypeError(\n `duration invalid: \"${value}\". Must be a ISO 8601 duration. See https://en.wikipedia.org/wiki/ISO_8601#Durations`\n );\n }\n let duration: Duration = {};\n duration.sign = matches[1] === '-' ? -1 : 1;\n return [\n 'years',\n 'months',\n 'weeks',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n ].reduce((acc: any, name, index) => {\n const v = parseFloat(matches[index + 2]);\n if (!Number.isNaN(v)) acc[name] = v;\n return acc;\n }, duration) as Duration;\n };\n return Array.isArray(value)\n ? value.map(_deserialize)\n : _deserialize(value);\n },\n serialize(\n value: Duration | Duration[],\n options: StructuredTypeFieldOptions\n ): string | string[] {\n const _serialize = (v: Duration) =>\n [\n v.sign === -1 ? '-' : '',\n 'P',\n v.years ? v.years + 'Y' : '',\n v.months ? v.months + 'M' : '',\n v.weeks ? v.weeks + 'W' : '',\n v.days ? v.days + 'D' : '',\n 'T',\n v.hours ? v.hours + 'H' : '',\n v.minutes ? v.minutes + 'M' : '',\n v.seconds ? v.seconds + 'S' : '',\n ].join('');\n return Array.isArray(value) ? value.map(_serialize) : _serialize(value);\n },\n encode(\n value: Duration | Duration[],\n options: StructuredTypeFieldOptions\n ): any {\n const _encode = (v: Duration) =>\n [\n v.sign === -1 ? '-' : '',\n 'P',\n v.years ? v.years + 'Y' : '',\n v.months ? v.months + 'M' : '',\n v.weeks ? v.weeks + 'W' : '',\n v.days ? v.days + 'D' : '',\n 'T',\n v.hours ? v.hours + 'H' : '',\n v.minutes ? v.minutes + 'M' : '',\n v.seconds ? v.seconds + 'S' : '',\n ].join('');\n return Array.isArray(value)\n ? value.map((v) => duration(_encode(v)))\n : duration(_encode(value));\n },\n },\n 'Edm.Decimal': <Parser<number>>{\n deserialize(\n value: string | number | (string | number)[],\n options: StructuredTypeFieldOptions\n ): string | number | (string | number)[] {\n const _deserialize = (v: string | number) => {\n if (typeof v === 'string' && options.ieee754Compatible) {\n return parseFloat(v);\n }\n return v;\n };\n return Array.isArray(value)\n ? value.map(_deserialize)\n : _deserialize(value);\n },\n serialize(\n value: number | number[],\n options: StructuredTypeFieldOptions\n ): any {\n const _serialize = (v: number) => {\n if (options.ieee754Compatible) {\n return parseFloat(v.toPrecision(options.field.precision)).toFixed(\n options.field.scale\n );\n }\n return v;\n };\n return Array.isArray(value) ? value.map(_serialize) : _serialize(value);\n },\n encode(value: number | number[], options: StructuredTypeFieldOptions): any {\n const _encode = (v: number) => {\n if (options.ieee754Compatible) {\n return parseFloat(v.toPrecision(options.field.precision)).toFixed(\n options.field.scale\n );\n }\n return v;\n };\n return Array.isArray(value)\n ? value.map((v) => raw(`${_encode(v)}`))\n : raw(`${_encode(value)}`);\n },\n },\n 'Edm.Double': <Parser<number>>{\n deserialize(\n value: string | number | (string | number)[],\n options: StructuredTypeFieldOptions\n ): number | number[] {\n const _deserialize = (v: string | number) =>\n v === 'INF' ? Infinity : (v as number);\n return Array.isArray(value)\n ? value.map(_deserialize)\n : _deserialize(value);\n },\n serialize(\n value: number | number[],\n options: StructuredTypeFieldOptions\n ): string | number | (string | number)[] {\n const _serialize = (v: number) => (v === Infinity ? 'INF' : v);\n return Array.isArray(value) ? value.map(_serialize) : _serialize(value);\n },\n encode(value: number | number[], options: StructuredTypeFieldOptions): any {\n const _encode = (v: number) => (v === Infinity ? 'INF' : v);\n return Array.isArray(value)\n ? value.map((v) => raw(`${_encode(v)}`))\n : raw(`${_encode(value)}`);\n },\n },\n 'Edm.Single': <Parser<number>>{\n deserialize(\n value: string | number | (string | number)[],\n options: StructuredTypeFieldOptions\n ): number | number[] {\n const _deserialize = (v: string | number) =>\n v === 'INF' ? Infinity : (v as number);\n return Array.isArray(value)\n ? value.map(_deserialize)\n : _deserialize(value);\n },\n serialize(\n value: number | number[],\n options: StructuredTypeFieldOptions\n ): string | number | (string | number)[] {\n const _serialize = (v: number) => (v === Infinity ? 'INF' : v);\n return Array.isArray(value) ? value.map(_serialize) : _serialize(value);\n },\n encode(value: number | number[], options: StructuredTypeFieldOptions): any {\n const _encode = (v: number) => (v === Infinity ? 'INF' : v);\n return Array.isArray(value)\n ? value.map((v) => raw(`${_encode(v)}`))\n : raw(`${_encode(value)}`);\n },\n },\n 'Edm.Binary': <Parser<ArrayBuffer>>{\n deserialize(\n value: string | string[],\n options: StructuredTypeFieldOptions\n ): ArrayBuffer | ArrayBuffer[] {\n const _deserialize = (v: string) => {\n var bufferLength = v.length * 0.75,\n len = v.length,\n i,\n p = 0,\n encoded1,\n encoded2,\n encoded3,\n encoded4;\n\n if (v[v.length - 1] === '=') {\n bufferLength--;\n if (v[v.length - 2] === '=') {\n bufferLength--;\n }\n }\n\n var arraybuffer = new ArrayBuffer(bufferLength),\n bytes = new Uint8Array(arraybuffer);\n\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[v.charCodeAt(i)];\n encoded2 = lookup[v.charCodeAt(i + 1)];\n encoded3 = lookup[v.charCodeAt(i + 2)];\n encoded4 = lookup[v.charCodeAt(i + 3)];\n\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n\n return arraybuffer;\n };\n return Array.isArray(value)\n ? value.map(_deserialize)\n : _deserialize(value);\n },\n serialize(\n value: ArrayBuffer | ArrayBuffer[],\n options: StructuredTypeFieldOptions\n ): string | string[] {\n const _serialize = (v: ArrayBuffer) => {\n var bytes = new Uint8Array(v),\n i,\n len = bytes.length,\n base64 = '';\n\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n };\n return Array.isArray(value) ? value.map(_serialize) : _serialize(value);\n },\n encode(\n value: ArrayBuffer | ArrayBuffer[],\n options: StructuredTypeFieldOptions\n ): any {\n const _encode = (v: ArrayBuffer) => {\n var bytes = new Uint8Array(v),\n i,\n len = bytes.length,\n base64 = '';\n\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n } else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n };\n return Array.isArray(value)\n ? value.map((v) => binary(_encode(v)))\n : binary(_encode(value));\n },\n },\n};\n\n/*\nEdm.Binary Binary data\nEdm.Boolean Binary-valued logic\nEdm.Byte Unsigned 8-bit integer\nEdm.Date Date without a time-zone offset\nEdm.DateTimeOffset Date and time with a time-zone offset, no leap seconds\nEdm.Decimal Numeric values with fixed precision and scale\nEdm.Double IEEE 754 binary64 floating-point number (15-17 decimal digits)\nEdm.Duration Signed duration in days, hours, minutes, and (sub)seconds\nEdm.Guid 16-byte (128-bit) unique identifier\nEdm.Int16 Signed 16-bit integer\nEdm.Int32 Signed 32-bit integer\nEdm.Int64 Signed 64-bit integer\nEdm.SByte Signed 8-bit integer\nEdm.Single IEEE 754 binary32 floating-point number (6-9 decimal digits)\nEdm.Stream Binary data stream\nEdm.String Sequence of UTF-8 characters\nEdm.TimeOfDay Clock time 00:00-23:59:59.999999999999\nEdm.Geography Abstract base type for all Geography types\nEdm.GeographyPoint A point in a round-earth coordinate system\nEdm.GeographyLineString Line string in a round-earth coordinate system\nEdm.GeographyPolygon Polygon in a round-earth coordinate system\nEdm.GeographyMultiPoint Collection of points in a round-earth coordinate system\nEdm.GeographyMultiLineString Collection of line strings in a round-earth coordinate system\nEdm.GeographyMultiPolygon Collection of polygons in a round-earth coordinate system\nEdm.GeographyCollection Collection of arbitrary Geography values\nEdm.Geometry Abstract base type for all Geometry types\nEdm.GeometryPoint Point in a flat-earth coordinate system\nEdm.GeometryLineString Line string in a flat-earth coordinate system\nEdm.GeometryPolygon Polygon in a flat-earth coordinate system\nEdm.GeometryMultiPoint Collection of points in a flat-earth coordinate system\nEdm.GeometryMultiLineString Collection of line strings in a flat-earth coordinate system\nEdm.GeometryMultiPolygon Collection of polygons in a flat-earth coordinate system\nEdm.GeometryCollection Collection of arbitrary Geometry values\n*/\n","const ISO_REGEX =\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/;\n\nexport const Dates = {\n isoStringToDate(value: any): any {\n if (typeof value === 'string' && value.search(ISO_REGEX) === 0) {\n return new Date(value);\n } else if (Array.isArray(value)) {\n return value.map((v) => this.isoStringToDate(v));\n } else if (value && value.constructor === Object) {\n return Object.keys(value)\n .map((key) => [key, this.isoStringToDate(value[key])])\n .reduce((acc, v) => Object.assign(acc, { [v[0]]: v[1] }), {});\n }\n return value;\n },\n};\n","export const Enums = {\n names<E>(Enum: E): string[] {\n return Object.values(Enum).filter((v) => typeof v === 'string');\n },\n\n values<E>(Enum: E): number[] {\n return Object.values(Enum).filter((v) => typeof v === 'number');\n },\n\n toValue<E>(Enum: E, value: any): number {\n if (value in Enum)\n return typeof value === 'string' ? (Enum as any)[value] : value;\n return NaN;\n },\n\n toValues<E>(Enum: E, value: any): number[] {\n if (typeof value === 'number') {\n return this.values(Enum).filter((v) => (value & v) === v);\n }\n if (typeof value === 'string') {\n value = value.split(',').map((o) => o.trim());\n }\n if (Array.isArray(value) && value.every((v) => v in Enum)) {\n return value.map((o) => this.toValue(Enum, o));\n }\n return [];\n },\n\n toName<E>(Enum: E, value: any): string {\n if (value in Enum)\n return typeof value === 'number' ? (Enum as any)[value] : value;\n return '';\n },\n\n toNames<E>(Enum: E, value: any): string[] {\n if (typeof value === 'number') {\n return this.values(Enum)\n .filter((v) => (value & v) === v)\n .map((v) => this.toName(Enum, v));\n }\n if (typeof value === 'string') {\n value = value.split(',').map((o) => o.trim());\n }\n if (Array.isArray(value) && value.every((v) => v in Enum)) {\n return value.map((o) => this.toName(Enum, o) as string);\n }\n return [];\n },\n};\n","export const Types = {\n isObject(value: any): boolean {\n var type = typeof value;\n return value != null && (type === 'object' || type === 'function');\n },\n\n isPlainObject(value: any) {\n if (Object.prototype.toString.call(value) !== '[object Object]') {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === null || prototype === Object.prototype;\n },\n\n isFunction(value: any): boolean {\n return typeof value === 'function';\n },\n\n isArray(value: any): boolean {\n return Array.isArray(value);\n },\n\n isEmpty(value: any): boolean {\n return (\n value === undefined ||\n value === null ||\n (typeof value === 'string' && !value.length) ||\n (Types.isArray(value) && !value.length) ||\n (Types.isFunction(value.isEmpty) && value.isEmpty()) ||\n (Types.isArray(value) &&\n (value as any[]).every((v) => Types.isEmpty(v))) ||\n (Types.isObject(value) &&\n !Object.keys(value).filter((k) => value.hasOwnProperty(k)).length) ||\n (Types.isPlainObject(value) &&\n !Object.keys(value).filter((k) => value.hasOwnProperty(k)).length)\n );\n },\n\n isEqual(value1: any, value2: any) {\n function getType(obj: any) {\n return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();\n }\n\n function areDatesEqual() {\n return value1.getTime() === value2.getTime();\n }\n\n function areArraysBufferEqual() {\n if (value1.byteLength !== value2.byteLength) {\n return false;\n }\n\n var view1 = new DataView(value1);\n var view2 = new DataView(value2);\n\n var i = value1.byteLength;\n while (i--) {\n if (view1.getUint8(i) !== view2.getUint8(i)) {\n return false;\n }\n }\n\n return true;\n }\n\n function areArraysEqual() {\n // Check length\n if (value1.length !== value2.length) return false;\n\n // Check each item in the array\n for (let i = 0; i < value1.length; i++) {\n if (!Types.isEqual(value1[i], value2[i])) return false;\n }\n\n // If no errors, return true\n return true;\n }\n\n function areObjectsEqual() {\n if (Object.keys(value1).length !== Object.keys(value2).length)\n return false;\n\n // Check each item in the object\n for (let key in value1) {\n if (Object.prototype.hasOwnProperty.call(value1, key)) {\n if (!Types.isEqual(value1[key], value2[key])) return false;\n }\n }\n\n // If no errors, return true\n return true;\n }\n\n function areFunctionsEqual() {\n return value1.toString() === value2.toString();\n }\n\n function arePrimativesEqual() {\n return value1 === value2;\n }\n\n // Get the object type\n let type = getType(value1);\n\n // If the two items are not the same type, return false\n if (type !== getType(value2)) return false;\n\n // Compare based on type\n if (type === 'date') return areDatesEqual();\n if (type === 'arraybuffer') return areArraysBufferEqual();\n if (type === 'array') return areArraysEqual();\n if (type === 'object') return areObjectsEqual();\n if (type === 'function') return areFunctionsEqual();\n return arePrimativesEqual();\n },\n};\n","import { Types } from './types';\n\nexport const Objects = {\n set(obj: Object, path: string, value: any) {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n\n pathArray.reduce((acc, key, i) => {\n if (acc[key] === undefined) acc[key] = {};\n if (i === pathArray.length - 1) acc[key] = value;\n return acc[key];\n }, obj);\n },\n\n get(obj: Object, path: string, def?: any): any {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n // Find value if exist return otherwise return undefined value;\n return (\n pathArray.reduce((prevObj, key) => prevObj && prevObj[key], obj) || def\n );\n },\n\n unset(obj: Object, path: string) {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n\n pathArray.reduce((acc, key, i) => {\n if (i === pathArray.length - 1) delete acc[key];\n return acc[key];\n }, obj);\n },\n\n has(obj: Object, path: string) {\n // Check if path is string or array. Regex : ensure that we do not have '.' and brackets.\n const pathArray = (\n Types.isArray(path) ? path : path.match(/([^[.\\]])+/g)\n ) as any[];\n\n return !!pathArray.reduce((prevObj, key) => prevObj && prevObj[key], obj);\n },\n\n merge(target: Object, source: Object) {\n const merge = (target: any, source: { [attr: string]: any }) => {\n for (let attr in source) {\n let value = source[attr];\n if (value !== null && Types.isPlainObject(value) && attr in target) {\n merge(target[attr], value);\n } else if (target[attr] !== value) {\n target[attr] = value;\n }\n }\n };\n merge(target, source);\n return target;\n },\n\n equal(object1: { [attr: string]: any }, object2: { [attr: string]: any }) {\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n for (const key of keys1) {\n const val1 = object1[key];\n const val2 = object2[key];\n const areObjects = Types.isPlainObject(val1) && Types.isPlainObject(val2);\n if (\n (areObjects && !Objects.equal(val1, val2)) ||\n (!areObjects && val1 !== val2)\n ) {\n return false;\n }\n }\n return true;\n },\n\n difference(\n object1: { [attr: string]: any },\n object2: { [attr: string]: any }\n ) {\n if (!object2 || !Types.isPlainObject(object2)) {\n return object1;\n }\n var diffs: { [name: string]: any } = {};\n var key;\n var arraysMatch = function (arr1: any[], arr2: any[]) {\n if (arr1.length !== arr2.length) return false;\n\n for (var i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) return false;\n }\n\n return true;\n };\n\n var compare = function (item1: any, item2: any | undefined, key: string) {\n if (item2 === undefined) {\n diffs[key] = null;\n return;\n }\n\n if (typeof item1 !== typeof item2) {\n diffs[key] = item2;\n return;\n }\n\n if (Types.isPlainObject(item1)) {\n var objDiff = Objects.difference(item1, item2);\n if (Object.keys(objDiff).length > 0) {\n diffs[key] = objDiff;\n }\n return;\n }\n\n if (Array.isArray(item1)) {\n if (!arraysMatch(item1, item2)) {\n diffs[key] = item2;\n }\n return;\n }\n\n if (item1 !== item2) {\n diffs[key] = item2;\n }\n };\n\n for (key in object1) {\n if (object1.hasOwnProperty(key)) {\n compare(object1[key], object2[key], key);\n }\n }\n\n for (key in object2) {\n if (object2.hasOwnProperty(key)) {\n if (!object1[key] && object1[key] !== object2[key]) {\n diffs[key] = object2[key];\n }\n }\n }\n return diffs;\n },\n uniqueId: (\n (counter) =>\n (str = '') =>\n `${str}${++counter}`\n )(0),\n resolveKey(key: any, { single = true }: { single?: boolean } = {}) {\n if (['number', 'string'].indexOf(typeof key) !== -1) return key;\n if (Types.isPlainObject(key)) {\n const values = Object.values(key);\n if (values.length === 1 && single) {\n // Single primitive key value\n key = values[0];\n } else if (values.some((v) => v === undefined)) {\n // Compose key, needs all values\n return undefined;\n }\n return !Types.isEmpty(key) ? key : undefined;\n }\n return undefined;\n },\n};\n","export const $ID = '$id';\nexport const ODATA_ID = '@odata.id';\n\n// SEGMENTS\nexport const $METADATA = '$metadata';\nexport const $BATCH = '$batch';\nexport const $REF = '$ref';\nexport const $VALUE = '$value';\nexport const $COUNT = '$count';\nexport const $QUERY = '$query';\nexport const $INLINECOUNT = '$inlinecount';\n\n// HTTP HEADERS\nexport const IF_MATCH_HEADER = 'If-Match';\nexport const IF_NONE_MATCH_HEADER = 'If-None-Match';\nexport const CONTENT_TYPE = 'Content-Type';\nexport const CACHE_CONTROL = 'Cache-Control';\nexport const HTTP11 = 'HTTP/1.1';\nexport const ACCEPT = 'Accept';\nexport const PREFER = 'Prefer';\nexport const ODATA_VERSION = 'OData-Version';\nexport const ODATA_VERSION_HEADERS = [\n ODATA_VERSION,\n ODATA_VERSION.toLowerCase(),\n 'dataserviceversion',\n];\nexport const ETAG_HEADER = 'ETag';\nexport const ETAG_HEADERS = [ETAG_HEADER, ETAG_HEADER.toLowerCase()];\nexport const LOCATION_HEADER = 'Location';\nexport const LOCATION_HEADERS = [\n LOCATION_HEADER,\n LOCATION_HEADER.toLowerCase(),\n];\nexport const ODATA_ENTITYID = 'OData-EntityId';\nexport const ODATA_ENTITYID_HEADERS = [\n ODATA_ENTITYID,\n ODATA_ENTITYID.toLowerCase(),\n];\nexport const PREFERENCE_APPLIED = 'Preference-Applied';\nexport const PREFERENCE_APPLIED_HEADERS = [\n PREFERENCE_APPLIED,\n PREFERENCE_APPLIED.toLowerCase(),\n];\nexport const RETRY_AFTER = 'Retry-After';\nexport const RETRY_AFTER_HEADERS = [RETRY_AFTER, RETRY_AFTER.toLowerCase()];\n\n// HTTP HEADER VALUES\nexport const APPLICATION_JSON = 'application/json';\nexport const APPLICATION_HTTP = 'application/http';\nexport const TEXT_PLAIN = 'text/plain';\nexport const MULTIPART_MIXED = 'multipart/mixed';\nexport const MULTIPART_MIXED_BOUNDARY = 'multipart/mixed;boundary=';\nexport const CONTENT_TRANSFER_ENCODING = 'Content-Transfer-Encoding';\nexport const CONTENT_ID = 'Content-ID';\nexport const MAX_AGE = 'max-age';\n\n// VERSIONS\nexport const VERSION_4_0 = '4.0';\nexport const VERSION_3_0 = '3.0';\nexport const VERSION_2_0 = '2.0';\nexport const DEFAULT_VERSION = VERSION_4_0;\n\nexport const BINARY = 'binary';\nexport const BOUNDARY_PREFIX_SUFFIX = '--';\nexport const BATCH_PREFIX = 'batch_';\nexport const CHANGESET_PREFIX = 'changeset_';\nexport const DEFAULT_STRIP_METADATA = 'full';\nexport const DEFAULT_FETCH_POLICY = 'network-only';\nexport const DEFAULT_TIMEOUT = 60; // Time in seconds\nexport const CALLABLE_BINDING_PARAMETER = 'bindingParameter';\n\n// URL PARTS\nexport const QUERY_SEPARATOR = '?';\nexport const PARAM_SEPARATOR = '&';\nexport const VALUE_SEPARATOR = '=';\nexport const PATH_SEPARATOR = '/';\nexport const ODATA_PARAM_PREFIX = '$';\nexport const ODATA_ALIAS_PREFIX = '@';\n\nexport const NEWLINE = '\\r\\n';\nexport const NEWLINE_REGEXP = /\\r?\\n/;\nexport const CACHE_KEY_SEPARATOR = ':';\n\n// Standard vocabularies for annotating OData services\n\nexport const COMPUTED = 'Org.OData.Core.V1.Computed';\nexport const OPTIMISTIC_CONCURRENCY = 'Org.OData.Core.V1.OptimisticConcurrency';\n","import { PARAM_SEPARATOR, VALUE_SEPARATOR } from '../constants';\n\nexport const Urls = {\n parseQueryString(query: string) {\n return query.split(PARAM_SEPARATOR).reduce((acc, param: string) => {\n let index = param.indexOf(VALUE_SEPARATOR);\n if (index !== -1)\n Object.assign(acc, {\n [param.substr(0, index)]: param.substr(index + 1),\n });\n return acc;\n }, {});\n },\n escapeIllegalChars(string: string) {\n string = string.replace(/%/g, '%25');\n string = string.replace(/\\+/g, '%2B');\n string = string.replace(/\\//g, '%2F');\n string = string.replace(/\\?/g, '%3F');\n string = string.replace(/#/g, '%23');\n string = string.replace(/&/g, '%26');\n string = string.replace(/'/g, \"''\");\n return string;\n },\n};\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Types } from './types';\n\nexport const Http = {\n //Merge Headers\n mergeHttpHeaders(\n ...values: (HttpHeaders | { [header: string]: string | string[] })[]\n ): HttpHeaders {\n let headers = new HttpHeaders();\n values.forEach((value) => {\n if (value instanceof HttpHeaders) {\n value.keys().forEach((key) => {\n headers = ((value as HttpHeaders).getAll(key) || []).reduce(\n (acc, v) => acc.append(key, v),\n headers\n );\n });\n } else if (Types.isPlainObject(value)) {\n Object.entries(value).forEach(([key, value]) => {\n headers = (Array.isArray(value) ? value : [value]).reduce(\n (acc, v) => acc.append(key, v),\n headers\n );\n });\n }\n });\n return headers;\n },\n\n // Merge Params\n mergeHttpParams(\n ...values: (HttpParams | { [param: string]: string | string[] })[]\n ): HttpParams {\n let params = new HttpParams();\n values.forEach((value) => {\n if (value instanceof HttpParams) {\n value.keys().forEach((key) => {\n params = ((value as HttpParams).getAll(key) || []).reduce(\n (acc, v) => acc.append(key, v),\n params\n );\n });\n } else if (Types.isPlainObject(value)) {\n Object.entries(value).forEach(([key, value]) => {\n params = (Array.isArray(value) ? value : [value]).reduce(\n (acc, v) => acc.append(key, v),\n params\n );\n });\n }\n });\n return params;\n },\n\n // Split Params\n splitHttpParams(\n params: HttpParams,\n keys: string[]\n ): [HttpParams, HttpParams] {\n let other = new HttpParams();\n params.keys().forEach((key) => {\n if (keys.includes(key)) {\n other = (params.getAll(key) || []).reduce(\n (acc, v) => acc.append(key, v),\n other\n );\n params = params.delete(key);\n }\n });\n return [params, other];\n },\n\n resolveHeaderKey(\n headers: HttpHeaders | { [param: string]: string | string[] },\n options: string[]\n ): string | undefined {\n if (headers instanceof HttpHeaders) {\n return headers.keys().find((k) => options.indexOf(k) !== -1);\n } else if (Types.isPlainObject(headers)) {\n return Object.keys(headers).find((k) => options.indexOf(k) !== -1);\n }\n return undefined;\n },\n};\n","import { AnnotationConfig } from '../types';\n\nexport class ODataAnnotation {\n term: string;\n string?: string;\n bool?: boolean;\n int?: number;\n permissions?: string[];\n properties?: string[];\n constructor(annot: AnnotationConfig) {\n this.term = annot.term;\n Object.assign(this, annot);\n }\n}\n","import {\n VERSION_3_0,\n VERSION_2_0,\n VERSION_4_0,\n $COUNT,\n $INLINECOUNT,\n} from './constants';\nimport { ODataMetadataType } from './types';\n\nexport const COLLECTION = /Collection\\(([\\w\\.]+)\\)/;\nexport const PROPERTY = /([\\w\\d\\-_]+)\\(([\\'\\w\\d\\-_=]+)\\)/;\nexport const EXPAND = /([\\w\\d\\-_]+)\\(([\\w\\d\\,\\(\\)]+)\\)/;\n\nexport type ODataContext = {\n serviceRootUrl?: string;\n metadataUrl?: string;\n entitySet?: string;\n key?: string;\n expand?: string;\n type?: string;\n property?: string;\n entity?: boolean;\n};\n\nexport interface ODataVersionHelper {\n VALUE: string;\n ODATA_ANNOTATION_PREFIX: string;\n ODATA_FUNCTION_PREFIX: string;\n ODATA_ID: string;\n ODATA_COUNT: string;\n ODATA_ETAG: string;\n ODATA_CONTEXT: string;\n ODATA_MEDIA_ETAG: string;\n entity(value: { [name: string]: any }): any;\n entities(value: { [name: string]: any }): any;\n property(value: { [name: string]: any }): any;\n annotations(value: { [name: string]: any }): { [name: string]: any };\n attributes(value: { [name: string]: any }, metadata: ODataMetadataType): any;\n //Get or Set Id\n id(value: { [name: string]: any }, id?: string): string | undefined;\n //Get or Set Etag\n etag(value: { [name: string]: any }, etag?: string): string | undefined;\n count(value: { [name: string]: any }): number | undefined;\n context(value: { [name: string]: any }): ODataContext;\n functions(value: { [name: string]: any }): { [name: string]: any };\n properties(value: { [name: string]: any }): { [name: string]: any };\n mediaEtag(value: { [name: string]: any }): string | undefined;\n metadataEtag(value: { [name: string]: any }): string | undefined;\n type(value: { [name: string]: any }): string | undefined;\n nextLink(value: { [name: string]: any }): string | undefined;\n readLink(value: { [name: string]: any }): string | undefined;\n mediaReadLink(value: { [name: string]: any }): string | undefined;\n editLink(value: { [name: string]: any }): string | undefined;\n mediaEditLink(value: { [name: string]: any }): string | undefined;\n mediaContentType(value: { [name: string]: any }): string | undefined;\n deltaLink(value: { [name: string]: any }): string | undefined;\n countParam(): { [name: string]: string };\n}\n\nconst ODataVersionBaseHelper = <any>{\n entity(data: { [name: string]: any }) {\n return data;\n },\n entities(data: { [name: string]: any }) {\n return data[this.VALUE];\n },\n property(data: { [name: string]: any }) {\n return this.VALUE in data ? data[this.VALUE] : data;\n },\n functions(value: { [name: string]: any }) {\n return Object.keys(value)\n .filter((k) => k.startsWith(this.ODATA_FUNCTION_PREFIX))\n .reduce(\n (acc, key) => Object.assign(acc, { [key.substr(1)]: value[key] }),\n {}\n );\n },\n properties(value: { [name: string]: any }) {\n return Object.keys(value)\n .filter((k) => k.indexOf(this.ODATA_ANNOTATION_PREFIX) > 0)\n .reduce((acc: { [name: string]: any }, key) => {\n let name = key.substr(0, key.indexOf(this.ODATA_ANNOTATION_PREFIX));\n if (!(name in acc)) {\n acc[name] = {};\n }\n Object.assign(acc[name], {\n [key.substr(key.indexOf(this.ODATA_ANNOTATION_PREFIX))]: value[key],\n });\n return acc;\n }, {});\n },\n id(value: { [name: string]: any }, id?: string) {\n if (id !== undefined) value[this.ODATA_ID] = id;\n return this.ODATA_ID in value\n ? (value[this.ODATA_ID] as string)\n : undefined;\n },\n etag(value: { [name: string]: any }, etag?: string) {\n if (etag !== undefined) value[this.ODATA_ETAG] = etag;\n return this.ODATA_ETAG in value\n ? (value[this.ODATA_ETAG] as string)\n : undefined;\n },\n mediaEtag(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_ETAG in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_ETAG] as string)\n : undefined;\n },\n metadataEtag(value: { [name: string]: any }) {\n return this.ODATA_METADATA_ETAG in value\n ? decodeURIComponent(value[this.ODATA_METADATA_ETAG] as string)\n : undefined;\n },\n type(value: { [name: string]: any }) {\n if (this.ODATA_TYPE in value) {\n const type = value[this.ODATA_TYPE].substr(1) as string;\n const matches = COLLECTION.exec(type);\n if (matches)\n return matches[1].indexOf('.') === -1\n ? `Edm.${matches[1]}`\n : matches[1];\n return type;\n }\n return undefined;\n },\n count(value: { [name: string]: any }) {\n return this.ODATA_COUNT in value\n ? Number(value[this.ODATA_COUNT])\n : undefined;\n },\n annotations(value: { [name: string]: any }) {\n return Object.keys(value)\n .filter(\n (key) =>\n key.indexOf(this.ODATA_ANNOTATION_PREFIX) !== -1 ||\n key.startsWith(this.ODATA_FUNCTION_PREFIX)\n )\n .reduce((acc, key) => Object.assign(acc, { [key]: value[key] }), {});\n },\n attributes(value: { [name: string]: any }, metadata: ODataMetadataType) {\n return Object.entries(value)\n .filter(\n ([k]) =>\n metadata === 'none' ||\n (metadata === 'minimal' &&\n (k.indexOf(this.ODATA_ANNOTATION_PREFIX) === -1 ||\n k.startsWith(this.ODATA_ANNOTATION_PREFIX)) &&\n !k.startsWith(this.ODATA_FUNCTION_PREFIX)) ||\n (metadata === 'full' &&\n k.indexOf(this.ODATA_ANNOTATION_PREFIX) === -1 &&\n !k.startsWith(this.ODATA_FUNCTION_PREFIX))\n )\n .reduce((acc, e) => ({ ...acc, [e[0]]: e[1] }), {});\n },\n nextLink(value: { [name: string]: any }) {\n return this.ODATA_NEXTLINK in value\n ? decodeURIComponent(value[this.ODATA_NEXTLINK] as string)\n : undefined;\n },\n readLink(value: { [name: string]: any }) {\n return this.ODATA_READLINK in value\n ? decodeURIComponent(value[this.ODATA_READLINK] as string)\n : undefined;\n },\n mediaReadLink(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_READLINK in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_READLINK] as string)\n : undefined;\n },\n editLink(value: { [name: string]: any }) {\n return this.ODATA_EDITLINK in value\n ? decodeURIComponent(value[this.ODATA_EDITLINK] as string)\n : undefined;\n },\n mediaEditLink(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_EDITLINK in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_EDITLINK] as string)\n : undefined;\n },\n deltaLink(value: { [name: string]: any }) {\n return this.ODATA_DELTALINK in value\n ? decodeURIComponent(value[this.ODATA_DELTALINK] as string)\n : undefined;\n },\n mediaContentType(value: { [name: string]: any }) {\n return this.ODATA_MEDIA_CONTENTTYPE in value\n ? decodeURIComponent(value[this.ODATA_MEDIA_CONTENTTYPE] as string)\n : undefined;\n },\n};\n\nexport const ODataHelper = {\n //#region Version 4.0\n [VERSION_4_0]: <ODataVersionHelper>Object.assign({}, ODataVersionBaseHelper, {\n VALUE: 'value',\n ODATA_ANNOTATION_PREFIX: '@odata',\n ODATA_FUNCTION_PREFIX: '#',\n //odata.id: the ID of the entity\n ODATA_ID: '@odata.id',\n //odata.count: the total count of a collection of entities or collection of entity references, if requested.\n ODATA_COUNT: '@odata.count',\n //odata.context: the context URL for a collection, entity, primitive value, or service document.\n ODATA_CONTEXT: '@odata.context',\n //odata.etag: the ETag of the entity\n ODATA_ETAG: '@odata.etag',\n ODATA_METADATA_ETAG: '@odata.metadataEtag',\n //odata.type: the type of the containing {[name: string]: any} or targeted property if the type of the {[name: string]: any} or targeted property cannot be heuristically determined\n ODATA_TYPE: '@odata.type',\n //odata.nextLink: the next link of a collection with partial results\n ODATA_NEXTLINK: '@odata.nextLink',\n //odata.deltaLink: the delta link for obtaining changes to the result, if requested\n ODATA_DELTALINK: '@odata.deltaLink',\n //odata.readLink: the link used to read the entity, if the edit link cannot be used to read the entity\n ODATA_READLINK: '@odata.readLink',\n //odata.editLink: the link used to edit/update the entity, if the entity is updatable and the odata.id does not represent a URL that can be used to edit the entity\n ODATA_EDITLINK: '@odata.editLink',\n //odata.associationLink: the link used to describe the relationship between this entity and related entities\n ODATA_ASSOCIATIONLINK: '@odata.associationLink',\n //odata.navigationLink: the link used to retrieve the values of a navigation property\n ODATA_NAVIGATIONLINK: '@odata.navigationLink',\n //Media entities and stream properties may in addition contain the following annotations:\n //odata.mediaEtag: the ETag of the stream, as appropriate\n ODATA_MEDIA_ETAG: '@odata.mediaEtag',\n //odata.mediaContentType: the content type of the stream\n ODATA_MEDIA_CONTENTTYPE: '@odata.mediaContentType',\n //odata.mediaReadLink: the link used to read the stream\n ODATA_MEDIA_READLINK: '@odata.mediaReadLink',\n //odata.mediaEditLink: the link used to edit/update the stream\n ODATA_MEDIA_EDITLINK: '@odata.mediaEditLink',\n //http://nb-mdp-dev01:57970/$metadata#recursos/$entity\n //http://nb-mdp-dev01:57970/$metadata#categorias\n //http://nb-mdp-dev01:57970/$metadata#juzgados\n //http://nb-mdp-dev01:57970/$metadata#Collection(SIU.Recursos.RecursoEntry)\n //http://nb-mdp-dev01:57970/$metadata#categorias/$entity\n //http://nb-mdp-dev01:57970/$metadata#categorias(children(children(children(children(children(children(children(children(children(children()))))))))))/$entity\n //http://nb-mdp-dev01:57970/$metadata#recursos/SIU.Documentos.Documento/$entity\n //http://nb-mdp-dev01:57970/$metadata#SIU.Api.Infrastructure.Storage.Backend.SiuUrls\n context(value: { [name: string]: any }) {\n let ctx: ODataContext = {};\n if (this.ODATA_CONTEXT in value) {\n const str = value[this.ODATA_CONTEXT] as string;\n let index = str.indexOf('$metadata');\n ctx.serviceRootUrl = str.substr(0, index);\n index = str.indexOf('#');\n ctx.metadataUrl = str.substr(0, index);\n const parts = str.substr(index + 1).split('/');\n const col = COLLECTION.exec(parts[0]);\n if (col) {\n ctx.type = col[1];\n } else if (parts[0].indexOf('.') !== -1) {\n ctx.type = parts[0];\n } else {\n const property = parts[0].match(PROPERTY);\n const expand = parts[0].match(EXPAND);\n ctx.entity = parts[1] === '$entity';\n if (property) {\n ctx.entitySet = property[1];\n ctx.key = property[2];\n ctx.property = parts[1];\n } else if (expand) {\n ctx.entitySet = expand[1];\n ctx.expand = expand[2];\n } else {\n ctx.entitySet = parts[0];\n }\n }\n }\n return ctx;\n },\n countParam() {\n return { [$COUNT]: 'true' };\n },\n }),\n //#endregion\n //#region Version 3.0\n [VERSION_3_0]: <ODataVersionHelper>Object.assign({}, ODataVersionBaseHelper, {\n ODATA_ANNOTATION_PREFIX: 'odata.',\n ODATA_FUNCTION_PREFIX: '',\n ODATA_ID: 'odata.id',\n ODATA_ETAG: 'odata.etag',\n ODATA_CONTEXT: 'odata.metadata',\n ODATA_NEXTLINK: 'odata.nextLink',\n ODATA_TYPE: 'odata.type',\n ODATA_COUNT: 'odata.count',\n VALUE: 'value',\n context(value: { [name: string]: any }) {\n let ctx: ODataContext = {};\n if (this.ODATA_CONTEXT in value) {\n const str = value[this.ODATA_CONTEXT] as string;\n let index = str.indexOf('$metadata');\n ctx.serviceRootUrl = str.substr(0, index);\n index = str.indexOf('#');\n ctx.metadataUrl = str.substr(0, index);\n const parts = str.substr(index + 1).split('/');\n ctx.entitySet = parts[0];\n }\n return ctx;\n },\n countParam() {\n return { [$INLINECOUNT]: 'allpages' };\n },\n }),\n //#endregion\n //#region Version 2.0\n [VERSION_2_0]: <ODataVersionHelper>Object.assign({}, ODataVersionBaseHelper, {\n ODATA_ID: 'id',\n ODATA_ETAG: 'etag',\n ODATA_ANNOTATION: '__metadata',\n ODATA_NEXTLINK: '__next',\n ODATA_COUNT: '__count',\n ODATA_DEFERRED: '__deferred',\n ODATA_TYPE: 'type',\n VALUE: 'results',\n annotations(value: { [name: string]: any }) {\n if (this.ODATA_ANNOTATION in value) return value[this.ODATA_ANNOTATION];\n return value;\n },\n attributes(value: { [name: string]: any }, metadata: ODataMetadataType) {\n return value;\n },\n countParam() {\n return { [$INLINECOUNT]: 'allpages' };\n },\n }),\n //#endregion\n};\n","import {\n DEFAULT_FETCH_POLICY,\n DEFAULT_STRIP_METADATA,\n DEFAULT_VERSION,\n} from './constants';\nimport { ODataHelper } from './helper';\nimport {\n ApiOptions,\n FetchPolicy,\n ODataMetadataType,\n ODataVersion,\n Options,\n OptionsHelper,\n QueryOptionNames,\n} from './types';\n\nexport class ODataApiOptions implements ApiOptions, OptionsHelper {\n version: ODataVersion;\n stringAsEnum?: boolean;\n stripMetadata: ODataMetadataType;\n fetchPolicy: FetchPolicy;\n streaming?: boolean;\n // Http\n params: { [param: string]: string | string[] };\n headers: { [param: string]: string | string[] };\n withCredentials?: boolean;\n bodyQueryOptions: QueryOptionNames[];\n accept?: {\n metadata?: ODataMetadataType;\n ieee754Compatible?: boolean;\n };\n etag: {\n //http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398229\n ifMatch: boolean;\n //http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398230\n ifNoneMatch: boolean;\n } = { ifMatch: true, ifNoneMatch: false };\n prefer?: {\n //http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398238\n maxPageSize?: number;\n //http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398240\n return?: 'representation' | 'minimal';\n //http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398236\n continueOnError?: boolean;\n //http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part1-protocol/odata-v4.0-errata02-os-part1-protocol-complete.html#_Toc406398237\n includeAnnotations?: string;\n };\n\n constructor(config: ApiOptions) {\n this.version = config.version || DEFAULT_VERSION;\n this.stringAsEnum = config.stringAsEnum;\n this.params = config.params || {};\n this.headers = config.headers || {};\n this.withCredentials = config.withCredentials;\n this.stripMetadata = config.stripMetadata || DEFAULT_STRIP_METADATA;\n this.fetchPolicy = config.fetchPolicy || DEFAULT_FETCH_POLICY;\n this.bodyQueryOptions = config.bodyQueryOptions || [];\n this.accept = config.accept;\n Object.assign(this.etag, config.etag || {});\n this.prefer = config.prefer;\n }\n\n get helper() {\n return ODataHelper[this.version];\n }\n}\n\nexport class ODataParserOptions implements OptionsHelper {\n version: ODataVersion;\n stringAsEnum?: boolean;\n\n constructor(config: Options) {\n this.version = config.version || DEFAULT_VERSION;\n this.stringAsEnum = config.stringAsEnum;\n }\n\n get helper() {\n return ODataHelper[this.version];\n }\n}\n","import { Enums } from '../utils';\nimport { raw } from '../resources/builder';\nimport { ODataAnnotation } from '../schema/annotation';\nimport {\n EnumTypeConfig,\n Parser,\n OptionsHelper,\n EnumTypeFieldConfig,\n Options,\n} from '../types';\nimport { ODataParserOptions } from '../options';\n\nexport class ODataEnumTypeFieldParser {\n name: string;\n value: number;\n annotations: ODataAnnotation[];\n\n constructor(name: string, field: EnumTypeFieldConfig) {\n this.name = name;\n this.value = field.value;\n this.annotations = (field.annotations || []).map(\n (annot) => new ODataAnnotation(annot)\n );\n }\n\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n}\n\nexport class ODataEnumTypeParser<T> implements Parser<T> {\n name: string;\n namespace: string;\n alias?: string;\n flags?: boolean;\n members: { [name: string]: number } | { [value: number]: string };\n fields: ODataEnumTypeFieldParser[];\n optionsHelper?: OptionsHelper;\n\n constructor(config: EnumTypeConfig<T>, namespace: string, alias?: string) {\n this.name = config.name;\n this.namespace = namespace;\n this.alias = alias;\n this.flags = config.flags;\n this.members = config.members;\n this.fields = Object.entries(config.fields).map(\n ([name, f]) => new ODataEnumTypeFieldParser(name, f)\n );\n }\n\n configure({ options }: { options: OptionsHelper }) {\n this.optionsHelper = options;\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n // Deserialize\n deserialize(value: string, options?: Options): T {\n // string -> number\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.flags) {\n return Enums.toValues(this.members, value).reduce(\n (acc, v) => acc | v,\n 0\n ) as any;\n } else {\n return Enums.toValue(this.members, value) as any;\n }\n }\n\n // Serialize\n serialize(value: T, options?: Options): string {\n // Enum are string | number\n // string | number -> string\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.flags) {\n const names = Enums.toNames(this.members, value);\n return !parserOptions?.stringAsEnum\n ? `${this.namespace}.${this.name}'${names.join(', ')}'`\n : names.join(', ');\n } else {\n const name = Enums.toName(this.members, value);\n return !parserOptions?.stringAsEnum\n ? `${this.namespace}.${this.name}'${name}'`\n : name;\n }\n }\n\n //Encode\n encode(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n const serialized = this.serialize(value, parserOptions);\n return parserOptions?.stringAsEnum\n ? raw(`'${serialized}'`)\n : raw(serialized);\n }\n\n // Json Schema\n toJsonSchema() {\n let property = <any>{\n title: this.name,\n type: 'string',\n };\n property.enum = this.fields.map((f) => f.name);\n return property;\n }\n\n validate(\n member: string | number,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'patch';\n navigation?: boolean;\n } = {}\n ): string[] | undefined {\n if (this.flags) {\n let members = Enums.toValues(this.members, member);\n return members.some((member) => !(member in this.members))\n ? ['mismatch']\n : undefined;\n } else {\n return !(member in this.members) ? ['mismatch'] : undefined;\n }\n }\n}\n","import { Objects, Types } from '../utils';\nimport {\n Parser,\n StructuredTypeFieldConfig,\n StructuredTypeConfig,\n OptionsHelper,\n NONE_PARSER,\n StructuredTypeFieldOptions,\n Options,\n} from '../types';\nimport { ODataEnumTypeParser } from './enum-type';\nimport { COMPUTED } from '../constants';\nimport { ODataAnnotation } from '../schema/annotation';\nimport { raw } from '../resources/builder';\nimport { ODataParserOptions } from '../options';\n\n// JSON SCHEMA\ntype JsonSchemaSelect<T> = Array<keyof T>;\ntype JsonSchemaCustom<T> = {\n [P in keyof T]?: (\n schema: any,\n field: ODataStructuredTypeFieldParser<T[P]>\n ) => any;\n};\ntype JsonSchemaExpand<T> = { [P in keyof T]?: JsonSchemaOptions<T[P]> };\ntype JsonSchemaRequired<T> = { [P in keyof T]?: boolean };\nexport type JsonSchemaOptions<T> = {\n select?: JsonSchemaSelect<T>;\n custom?: JsonSchemaCustom<T>;\n expand?: JsonSchemaExpand<T>;\n required?: JsonSchemaRequired<T>;\n};\n\nexport class ODataEntityTypeKey {\n name: string;\n alias?: string;\n constructor({ name, alias }: { name: string; alias?: string }) {\n this.name = name;\n this.alias = alias;\n }\n}\n\nexport class ODataReferential {\n property: string;\n referencedProperty: string;\n constructor({\n property,\n referencedProperty,\n }: {\n property: string;\n referencedProperty: string;\n }) {\n this.property = property;\n this.referencedProperty = referencedProperty;\n }\n}\n\nexport class ODataStructuredTypeFieldParser<T> implements Parser<T> {\n name: string;\n private structuredType: ODataStructuredTypeParser<any>;\n type: string;\n private parser: Parser<T>;\n default?: any;\n maxLength?: number;\n collection: boolean;\n nullable: boolean;\n navigation: boolean;\n precision?: number;\n scale?: number;\n referentials: ODataReferential[];\n annotations: ODataAnnotation[];\n optionsHelper?: OptionsHelper;\n\n constructor(\n name: string,\n structuredType: ODataStructuredTypeParser<any>,\n field: StructuredTypeFieldConfig\n ) {\n this.name = name;\n this.structuredType = structuredType;\n this.type = field.type;\n this.parser = NONE_PARSER;\n this.annotations = (field.annotations || []).map(\n (annot) => new ODataAnnotation(annot)\n );\n this.referentials = (field.referentials || []).map(\n (referential) => new ODataReferential(referential)\n );\n this.default = field.default;\n this.maxLength = field.maxLength;\n this.collection = field.collection !== undefined ? field.collection : false;\n this.nullable = field.nullable !== undefined ? field.nullable : true;\n this.navigation = field.navigation !== undefined ? field.navigation : false;\n this.precision = field.precision;\n this.scale = field.scale;\n }\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n\n validate(\n value: any,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'patch';\n navigation?: boolean;\n } = {}\n ):\n | { [name: string]: any }\n | { [name: string]: any }[]\n | string[]\n | undefined {\n let errors;\n if (this.collection && Array.isArray(value)) {\n errors = value.map((v) => this.validate(v, { method, navigation })) as {\n [name: string]: any[];\n }[];\n } else if (\n (this.isStructuredType() &&\n typeof value === 'object' &&\n value !== null) ||\n (this.navigation && value !== undefined)\n ) {\n errors =\n this.structured().validate(value, { method, navigation }) ||\n ({} as { [name: string]: any[] });\n } else if (\n this.isEnumType() &&\n (typeof value === 'string' || typeof value === 'number')\n ) {\n errors = this.enum().validate(value, { method, navigation });\n } else {\n // IsEdmType\n const computed = this.findAnnotation((a) => a.term === COMPUTED);\n errors = [];\n if (\n !this.nullable &&\n (value === null || (value === undefined && method !== 'patch')) && // Is null or undefined without patch?\n !(computed?.bool && method === 'create') // Not (Is Computed field and create) ?\n ) {\n errors.push(`required`);\n }\n if (\n this.maxLength !== undefined &&\n typeof value === 'string' &&\n value.length > this.maxLength\n ) {\n errors.push(`maxlength`);\n }\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n\n //#region Deserialize\n private parse(\n parser: ODataStructuredTypeParser<T>,\n value: any,\n options?: OptionsHelper\n ): any {\n const type = Types.isPlainObject(value)\n ? options?.helper.type(value)\n : undefined;\n if (type !== undefined) {\n return parser\n .childParser((c) => c.isTypeOf(type))\n .deserialize(value, options);\n }\n return parser.deserialize(value, options);\n }\n\n deserialize(value: any, options?: Options): T {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parser instanceof ODataStructuredTypeParser) {\n const parser = this.parser as ODataStructuredTypeParser<T>;\n return Array.isArray(value)\n ? value.map((v) => this.parse(parser, v, parserOptions))\n : this.parse(parser, value, parserOptions);\n }\n return this.parser.deserialize(value, {\n field: this,\n ...parserOptions,\n } as StructuredTypeFieldOptions);\n }\n //#endregion\n\n //#region Serialize\n private toJson(\n parser: ODataStructuredTypeParser<T>,\n value: any,\n options?: OptionsHelper\n ): any {\n const type = Types.isPlainObject(value)\n ? options?.helper.type(value)\n : undefined;\n if (type !== undefined) {\n return parser\n .childParser((c) => c.isTypeOf(type))\n .serialize(value, options);\n }\n return parser.serialize(value, options);\n }\n\n serialize(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parser instanceof ODataStructuredTypeParser) {\n const parser = this.parser as ODataStructuredTypeParser<T>;\n return Array.isArray(value)\n ? (value as any[]).map((v) => this.toJson(parser, v, parserOptions))\n : this.toJson(parser, value, parserOptions);\n }\n return this.parser.serialize(value, {\n field: this,\n ...parserOptions,\n } as StructuredTypeFieldOptions);\n }\n //#endregion\n\n //#region Encode\n encode(value: T, options?: Options): string {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return this.parser.encode(value, {\n field: this,\n ...parserOptions,\n } as StructuredTypeFieldOptions);\n }\n //#endregion\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n this.parser = parserForType(this.type);\n if (this.default !== undefined)\n this.default = this.deserialize(this.default, options);\n }\n\n //#region Json Schema\n // https://json-schema.org/\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n let schema: any =\n this.parser instanceof ODataStructuredTypeFieldParser ||\n this.parser instanceof ODataStructuredTypeParser ||\n this.parser instanceof ODataEnumTypeParser\n ? this.parser.toJsonSchema(options)\n : ({ title: this.name, type: 'object' } as any);\n\n if (\n [\n 'Edm.String',\n 'Edm.Date',\n 'Edm.TimeOfDay',\n 'Edm.DateTimeOffset',\n 'Edm.Guid',\n 'Edm.Binary',\n ].indexOf(this.type) !== -1\n ) {\n schema.type = 'string';\n if (this.type === 'Edm.Date') schema.format = 'date';\n else if (this.type === 'Edm.TimeOfDay') schema.format = 'time';\n else if (this.type === 'Edm.DateTimeOffset') schema.format = 'date-time';\n else if (this.type === 'Edm.Guid')\n schema.pattern =\n '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$';\n else if (this.type === 'Edm.Binary') schema.contentEncoding = 'base64';\n else if (this.type === 'Edm.String' && this.maxLength)\n schema.maxLength = this.maxLength;\n } else if (\n ['Edm.Int64', 'Edm.Int32', 'Edm.Int16', 'Edm.Byte', 'Edm.SByte'].indexOf(\n this.type\n ) !== -1\n ) {\n //TODO: Range\n schema.type = 'integer';\n } else if (['Edm.Decimal', 'Edm.Double'].indexOf(this.type) !== -1) {\n schema.type = 'number';\n } else if (['Edm.Boolean'].indexOf(this.type) !== -1) {\n schema.type = 'boolean';\n }\n if (this.default) schema.default = this.default;\n if (this.nullable) schema.type = [schema.type, 'null'];\n if (this.collection)\n schema = {\n type: 'array',\n items: schema,\n additionalItems: false,\n };\n return schema;\n }\n //#endregion\n\n isKey() {\n return (\n this.structuredType.keys?.find((k) => k.name === this.name) !== undefined\n );\n }\n\n hasReferentials() {\n return this.referentials.length !== 0;\n }\n\n isEdmType() {\n return this.type.startsWith('Edm.');\n }\n\n isEnumType() {\n return this.parser instanceof ODataEnumTypeParser;\n }\n\n enum() {\n if (!this.isEnumType()) throw new Error('Field are not EnumType');\n return this.parser as ODataEnumTypeParser<T>;\n }\n\n isStructuredType() {\n return this.parser instanceof ODataStructuredTypeParser;\n }\n\n structured() {\n if (!this.isStructuredType())\n throw new Error('Field are not StrucuturedType');\n return this.parser as ODataStructuredTypeParser<T>;\n }\n}\n\nexport class ODataStructuredTypeParser<T> implements Parser<T> {\n name: string;\n namespace: string;\n open: boolean;\n children: ODataStructuredTypeParser<any>[] = [];\n alias?: string;\n base?: string;\n parent?: ODataStructuredTypeParser<any>;\n keys?: ODataEntityTypeKey[];\n fields: ODataStructuredTypeFieldParser<any>[];\n optionsHelper?: OptionsHelper;\n\n constructor(\n config: StructuredTypeConfig<T>,\n namespace: string,\n alias?: string\n ) {\n this.name = config.name;\n this.base = config.base;\n this.open = config.open || false;\n this.namespace = namespace;\n this.alias = alias;\n if (Array.isArray(config.keys))\n this.keys = config.keys.map((key) => new ODataEntityTypeKey(key));\n this.fields = Object.entries<StructuredTypeFieldConfig>(\n config.fields as { [P in keyof T]: StructuredTypeFieldConfig }\n ).map(\n ([name, config]) => new ODataStructuredTypeFieldParser(name, this, config)\n );\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n typeFor(name: string): string | undefined {\n const field = this.fields.find((f) => f.name === name);\n if (field === undefined && this.parent !== undefined)\n return this.parent.typeFor(name);\n return field !== undefined ? field.type : undefined;\n }\n\n findChildParser(\n predicate: (p: ODataStructuredTypeParser<any>) => boolean\n ): ODataStructuredTypeParser<any> | undefined {\n if (predicate(this)) return this;\n let match: ODataStructuredTypeParser<any> | undefined;\n for (let ch of this.children) {\n match = ch.findChildParser(predicate);\n if (match !== undefined) break;\n }\n return match;\n }\n\n childParser(\n predicate: (p: ODataStructuredTypeParser<any>) => boolean\n ): Parser<any> {\n return this.findChildParser(predicate) || NONE_PARSER;\n }\n\n // Deserialize\n deserialize(value: any, options?: Options): T {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parent !== undefined)\n value = this.parent.deserialize(value, parserOptions);\n return Object.assign(\n {},\n value,\n this.fields\n .filter(\n (f) =>\n f.name in value &&\n value[f.name] !== undefined &&\n value[f.name] !== null\n )\n .reduce(\n (acc, f) =>\n Object.assign(acc, {\n [f.name]: f.deserialize(value[f.name], parserOptions),\n }),\n {}\n )\n );\n }\n\n // Serialize\n serialize(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n if (this.parent !== undefined)\n value = this.parent.serialize(value, parserOptions);\n return Object.assign(\n {},\n value,\n this.fields\n .filter(\n (f) =>\n f.name in value &&\n (value as any)[f.name] !== undefined &&\n (value as any)[f.name] !== null\n )\n .reduce(\n (acc, f) =>\n Object.assign(acc, {\n [f.name]: f.serialize((value as any)[f.name], parserOptions),\n }),\n {}\n )\n );\n }\n\n // Encode\n encode(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return raw(JSON.stringify(this.serialize(value, parserOptions)));\n }\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n if (this.base) {\n const parent = parserForType(this.base) as ODataStructuredTypeParser<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.fields.forEach((f) => f.configure({ parserForType, options }));\n }\n\n resolveKey(value: any): any {\n let key = this.parent?.resolveKey(value) || {};\n if (Array.isArray(this.keys) && this.keys.length > 0) {\n for (var k of this.keys) {\n let v = value as any;\n let structured = this as ODataStructuredTypeParser<any> | undefined;\n let field: ODataStructuredTypeFieldParser<any> | undefined;\n for (let name of k.name.split('/')) {\n if (structured === undefined) break;\n field = structured.fields.find((f) => f.name === name);\n if (field !== undefined) {\n v = Types.isPlainObject(v) ? v[field.name] : v;\n structured = field.isStructuredType()\n ? field.structured()\n : undefined;\n }\n }\n if (field === undefined) return undefined;\n let name = k.alias || field.name;\n key[name] = field.encode(v);\n }\n }\n if (Types.isEmpty(key)) return undefined;\n return Objects.resolveKey(key);\n }\n\n defaults(): { [name: string]: any } {\n let value = this.parent?.defaults() || {};\n let fields = this.fields.filter(\n (f) => f.default !== undefined || f.isStructuredType()\n );\n return Object.assign(\n {},\n value,\n fields.reduce((acc, f) => {\n let value = f.isStructuredType()\n ? f.structured().defaults()\n : f.default;\n if (!Types.isEmpty(value)) Object.assign(acc, { [f.name]: value });\n return acc;\n }, {})\n );\n }\n\n // Json Schema\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n let schema: any = this.parent?.toJsonSchema(options) || {\n $schema: 'http://json-schema.org/draft-07/schema#',\n $id: `${this.namespace}.${this.name}`,\n title: this.name,\n type: 'object',\n properties: {},\n required: [],\n };\n const fields = this.fields.filter(\n (f) =>\n (!f.navigation || (options.expand && f.name in options.expand)) &&\n (!options.select || (<string[]>options.select).indexOf(f.name) !== -1)\n );\n schema.properties = Object.assign(\n {},\n schema.properties,\n fields\n .map((f) => {\n let expand =\n options.expand && f.name in options.expand\n ? (options.expand as any)[f.name]\n : undefined;\n let schema = f.toJsonSchema(expand);\n if (options.custom && f.name in options.custom)\n schema = (\n options.custom[f.name as keyof T] as (\n schema: any,\n field: ODataStructuredTypeFieldParser<any>\n ) => any\n )(schema, f);\n return { [f.name]: schema };\n })\n .reduce((acc, v) => Object.assign(acc, v), {})\n );\n schema.required = [\n ...schema.required,\n ...fields\n .filter((f) =>\n options.required && f.name in options.required\n ? options.required[f.name as keyof T]\n : !f.nullable\n )\n .map((f) => f.name),\n ];\n return schema;\n }\n\n validate(\n attrs: any,\n {\n method,\n navigation = false,\n }: {\n create?: boolean;\n method?: 'create' | 'update' | 'patch';\n navigation?: boolean;\n } = {}\n ): { [name: string]: any } | undefined {\n const errors = (this.parent?.validate(attrs, { method, navigation }) ||\n {}) as { [name: string]: any };\n const fields = this.fields.filter((f) => !f.navigation || navigation);\n for (var field of fields) {\n const value = attrs[field.name as keyof T];\n const errs = field.validate(value, { method, navigation });\n if (errs !== undefined) {\n errors[field.name] = errs;\n }\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n}\n","import { CALLABLE_BINDING_PARAMETER } from '../constants';\nimport { ODataParserOptions } from '../options';\nimport {\n Parser,\n Parameter,\n CallableConfig,\n StructuredTypeFieldOptions,\n NONE_PARSER,\n OptionsHelper,\n Options,\n} from '../types';\nimport { ODataEnumTypeParser } from './enum-type';\nimport { ODataStructuredTypeParser } from './structured-type';\n\nexport class ODataParameterParser<T> {\n name: string;\n type: string;\n private parser: Parser<T>;\n collection?: boolean;\n nullable?: boolean;\n optionsHelper?: OptionsHelper;\n\n constructor(name: string, parameter: Parameter) {\n this.name = name;\n this.type = parameter.type;\n this.parser = NONE_PARSER;\n Object.assign(this, parameter);\n }\n\n serialize(value: T, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return Array.isArray(value)\n ? value.map((v) => this.parser.serialize(v, parserOptions))\n : this.parser.serialize(value, parserOptions);\n }\n\n //Encode\n encode(value: any, options?: Options): string {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return Array.isArray(value)\n ? value.map((v) => this.parser.encode(v, parserOptions))\n : this.parser.encode(value, parserOptions);\n }\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n this.parser = parserForType(this.type);\n }\n\n isEdmType() {\n return this.type.startsWith('Edm.');\n }\n\n isEnumType() {\n return this.parser instanceof ODataEnumTypeParser;\n }\n\n enum() {\n if (!this.isEnumType()) throw new Error('Field are not EnumType');\n return this.parser as ODataEnumTypeParser<T>;\n }\n\n isStructuredType() {\n return this.parser instanceof ODataStructuredTypeParser;\n }\n\n structured() {\n if (!this.isStructuredType())\n throw new Error('Field are not StrucuturedType');\n return this.parser as ODataStructuredTypeParser<T>;\n }\n}\n\nexport class ODataCallableParser<R> implements Parser<R> {\n name: string;\n namespace: string;\n alias?: string;\n return?: { type: string; callable?: boolean };\n parser: Parser<any>;\n parameters: ODataParameterParser<any>[];\n optionsHelper?: OptionsHelper;\n\n constructor(config: CallableConfig, namespace: string, alias?: string) {\n this.name = config.name;\n this.namespace = namespace;\n this.alias = alias;\n this.return = config.return;\n this.parser = NONE_PARSER;\n this.parameters = Object.entries(config.parameters || []).map(\n ([name, p]) => new ODataParameterParser(name, p as Parameter)\n );\n }\n\n isTypeOf(type: string) {\n var names = [`${this.namespace}.${this.name}`];\n if (this.alias) names.push(`${this.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n // Deserialize\n deserialize(value: any, options?: Options): R {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return this.parser.deserialize(value, parserOptions);\n }\n\n // Serialize\n serialize(params: any, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return Object.assign(\n {},\n this.parameters\n .filter((p) => p.name !== CALLABLE_BINDING_PARAMETER)\n .filter((p) => p.name in params && params[p.name] !== undefined)\n .reduce(\n (acc, p) =>\n Object.assign(acc, {\n [p.name]: p.serialize(params[p.name], parserOptions),\n }),\n {}\n )\n );\n }\n\n //Encode\n encode(params: any, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.optionsHelper;\n return Object.assign(\n {},\n this.parameters\n .filter((p) => p.name !== CALLABLE_BINDING_PARAMETER)\n .filter((p) => p.name in params && params[p.name] !== undefined)\n .reduce(\n (acc, p) =>\n Object.assign(acc, {\n [p.name]: p.encode(params[p.name], parserOptions),\n }),\n {}\n )\n );\n }\n\n configure({\n parserForType,\n options,\n }: {\n parserForType: (type: string) => Parser<any>;\n options: OptionsHelper;\n }) {\n this.optionsHelper = options;\n if (this.return)\n this.parser = parserForType(this.return.type) || NONE_PARSER;\n this.parameters.forEach((p) => p.configure({ parserForType, options }));\n }\n\n binding() {\n return this.parameters.find((p) => p.name === CALLABLE_BINDING_PARAMETER);\n }\n}\n","import { ODataCollection } from '../models';\nimport { ODataModel } from '../models/model';\nimport {\n JsonSchemaOptions,\n ODataEntityTypeKey,\n ODataStructuredTypeFieldParser,\n ODataStructuredTypeParser,\n} from '../parsers';\nimport { Options, StructuredTypeConfig } from '../types';\nimport { ODataAnnotation } from './annotation';\nimport { ODataSchema } from './schema';\n\nexport class ODataStructuredType<T> {\n name: string;\n schema: ODataSchema;\n base?: string;\n open: boolean;\n parent?: ODataStructuredType<any>;\n children: ODataStructuredType<any>[] = [];\n model?: typeof ODataModel;\n collection?: typeof ODataCollection;\n parser: ODataStructuredTypeParser<T>;\n annotations: ODataAnnotation[];\n\n constructor(config: StructuredTypeConfig<T>, schema: ODataSchema) {\n this.schema = schema;\n this.name = config.name;\n this.base = config.base;\n this.open = config.open || false;\n this.parser = new ODataStructuredTypeParser(\n config,\n schema.namespace,\n schema.alias\n );\n this.annotations = (config.annotations || []).map(\n (annot) => new ODataAnnotation(annot)\n );\n this.model = config.model as typeof ODataModel;\n this.collection = config.collection as typeof ODataCollection;\n if (this.model !== undefined) {\n const options = this.model.hasOwnProperty('options')\n ? this.model.options\n : { fields: {} };\n this.model.buildMeta<T>(options, this);\n }\n if (this.collection !== undefined) {\n this.collection.model = this.model;\n }\n }\n\n get api() {\n return this.schema.api;\n }\n\n configure({\n parserForType,\n findOptionsForType,\n }: {\n parserForType: (type: string) => any;\n findOptionsForType: (type: string) => any;\n }) {\n if (this.base) {\n const parent = this.api.findStructuredTypeForType(\n this.base\n ) as ODataStructuredType<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.parser.configure({ options: this.api.options, parserForType });\n if (this.model !== undefined && this.model.options !== null) {\n this.model.meta.configure({\n findOptionsForType,\n });\n }\n }\n\n type({ alias = false }: { alias?: boolean } = {}) {\n return `${alias ? this.schema.alias : this.schema.namespace}.${this.name}`;\n }\n\n isTypeOf(type: string) {\n return this.parser.isTypeOf(type);\n }\n\n isSimpleKey() {\n return this.keys().length === 1;\n }\n\n isCompoundKey() {\n return this.keys().length > 1;\n }\n\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n\n field(name: keyof T) {\n return this.fields().find((f) => f.name === name);\n }\n\n fields({\n include_navigation = false,\n include_parents = true,\n }: {\n include_parents?: boolean;\n include_navigation?: boolean;\n } = {}): ODataStructuredTypeFieldParser<any>[] {\n return [\n ...(include_parents && this.parent !== undefined\n ? this.parent.fields({ include_parents, include_navigation })\n : []),\n ...this.parser.fields.filter(\n (field) => include_navigation || !field.navigation\n ),\n ];\n }\n\n keys({\n include_parents = true,\n }: {\n include_parents?: boolean;\n } = {}): ODataEntityTypeKey[] {\n return [\n ...(include_parents && this.parent !== undefined\n ? this.parent.keys({ include_parents })\n : []),\n ...(this.parser.keys || []),\n ];\n }\n\n pick(\n value: { [name: string]: any },\n {\n include_parents = true,\n include_navigation = false,\n include_etag = true,\n }: {\n include_parents?: boolean;\n include_navigation?: boolean;\n include_etag?: boolean;\n } = {}\n ): Partial<T> {\n const names = this.fields({ include_parents, include_navigation }).map(\n (f) => f.name\n );\n let attrs = Object.keys(value)\n .filter((k) => names.indexOf(k) !== -1)\n .reduce((acc, k) => Object.assign(acc, { [k]: value[k] }), {});\n if (include_etag) {\n const etag = this.api.options.helper.etag(value);\n this.api.options.helper.etag(attrs, etag);\n }\n return attrs;\n }\n\n deserialize(value: any, options?: Options): T {\n return this.parser.deserialize(value, options);\n }\n\n serialize(value: T, options?: Options): any {\n return this.parser.serialize(value, options);\n }\n\n encode(value: T, options?: Options): any {\n return this.parser.encode(value, options);\n }\n\n resolveKey(attrs: T | { [name: string]: any }) {\n return this.parser.resolveKey(attrs);\n }\n\n defaults() {\n return this.parser.defaults();\n }\n\n toJsonSchema(options: JsonSchemaOptions<T> = {}) {\n return this.parser.toJsonSchema(options);\n }\n\n validate(\n attrs: Partial<T>,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'patch';\n navigation?: boolean;\n } = {}\n ) {\n return this.parser.validate(attrs, { method, navigation });\n }\n}\n","import { Parser, CallableConfig, OptionsHelper, Options } from '../types';\nimport { ODataSchema } from './schema';\nimport { ODataCallableParser } from '../parsers';\n\nexport class ODataCallable<R> {\n schema: ODataSchema;\n name: string;\n entitySetPath?: string;\n bound?: boolean;\n composable?: boolean;\n parser: ODataCallableParser<R>;\n\n constructor(config: CallableConfig, schema: ODataSchema) {\n this.schema = schema;\n this.name = config.name;\n this.entitySetPath = config.entitySetPath;\n this.bound = config.bound;\n this.composable = config.composable;\n this.parser = new ODataCallableParser(\n config,\n schema.namespace,\n schema.alias\n );\n }\n\n path() {\n let path: string;\n if (this.entitySetPath) path = this.entitySetPath;\n else if (this.bound) path = `${this.schema.namespace}.${this.name}`;\n else\n path = this.parser.return\n ? this.api.findEntitySetForType(this.parser.return.type)?.name ||\n this.name\n : this.name;\n return path;\n }\n\n type({ alias = false }: { alias?: boolean } = {}) {\n return `${alias ? this.schema.alias : this.schema.namespace}.${this.name}`;\n }\n\n isTypeOf(type: string) {\n return this.parser.isTypeOf(type);\n }\n\n get api() {\n return this.schema.api;\n }\n\n configure({\n parserForType,\n }: {\n parserForType: (type: string) => Parser<any>;\n }) {\n this.parser.configure({ options: this.api.options, parserForType });\n }\n\n deserialize(value: any, options?: Options): any {\n return this.parser.deserialize(value, options);\n }\n\n serialize(value: any, options?: Options): any {\n return this.parser.serialize(value, options);\n }\n\n encode(value: any, options?: Options): any {\n return this.parser.encode(value, options);\n }\n binding() {\n return this.parser.binding();\n }\n}\n","import { ODataSchema } from './schema';\nimport { EntitySetConfig } from '../types';\nimport { ODataAnnotation } from './annotation';\nexport class ODataEntitySet {\n schema: ODataSchema;\n name: string;\n entityType: string;\n service: { new (...params: any[]): any };\n annotations: ODataAnnotation[];\n constructor(config: EntitySetConfig, schema: ODataSchema) {\n this.schema = schema;\n this.name = config.name;\n this.entityType = config.entityType;\n this.service = config.service;\n this.annotations = (config.annotations || []).map(\n (annot) => new ODataAnnotation(annot)\n );\n }\n\n isTypeOf(type: string) {\n var names = [`${this.schema.namespace}.${this.name}`];\n if (this.schema.alias) names.push(`${this.schema.alias}.${this.name}`);\n return names.indexOf(type) !== -1;\n }\n\n get api() {\n return this.schema.api;\n }\n\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n}\n","import { ODataSchema } from './schema';\nimport { EntityContainerConfig } from '../types';\nimport { ODataEntitySet } from './entity-set';\nimport { ODataAnnotation } from './annotation';\n\nexport class ODataEntityContainer {\n schema: ODataSchema;\n name: string;\n annotations: ODataAnnotation[];\n entitySets: ODataEntitySet[];\n constructor(config: EntityContainerConfig, schema: ODataSchema) {\n this.schema = schema;\n this.name = config.name;\n this.entitySets = (config.entitySets || []).map(\n (config) => new ODataEntitySet(config, schema)\n );\n this.annotations = (config.annotations || []).map(\n (annot) => new ODataAnnotation(annot)\n );\n }\n\n get api() {\n return this.schema.api;\n }\n\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n}\n","import { ODataSchema } from './schema';\nimport { ODataEnumTypeFieldParser, ODataEnumTypeParser } from '../parsers';\nimport { EnumTypeConfig, Options } from '../types';\nimport { ODataAnnotation } from './annotation';\n\nexport class ODataEnumType<E> {\n schema: ODataSchema;\n name: string;\n parser: ODataEnumTypeParser<E>;\n members: { [name: string]: number } | { [value: number]: string };\n annotations: ODataAnnotation[];\n constructor(config: EnumTypeConfig<E>, schema: ODataSchema) {\n this.schema = schema;\n this.name = config.name;\n this.members = config.members;\n this.parser = new ODataEnumTypeParser<E>(\n config,\n schema.namespace,\n schema.alias\n );\n this.annotations = (config.annotations || []).map(\n (annot) => new ODataAnnotation(annot)\n );\n }\n\n type({ alias = false }: { alias?: boolean } = {}) {\n return `${alias ? this.schema.alias : this.schema.namespace}.${this.name}`;\n }\n\n isTypeOf(type: string) {\n return this.parser.isTypeOf(type);\n }\n\n get api() {\n return this.schema.api;\n }\n\n configure() {\n this.parser.configure({ options: this.api.options });\n }\n\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n\n fields(): ODataEnumTypeFieldParser[] {\n return this.parser.fields;\n }\n\n findFieldByName(name: string) {\n return this.fields().find((f) => f.name === name);\n }\n\n findFieldByValue(value: number) {\n return this.fields().find((f) => f.value === value);\n }\n\n fieldTitle(value: number | string, pattern?: RegExp) {\n const resolveTitle = (field?: ODataEnumTypeFieldParser) => {\n if (field !== undefined) {\n if (pattern !== undefined) {\n const annotation = field.findAnnotation((a) => pattern.test(a.term));\n if (annotation !== undefined && annotation.string !== undefined) {\n return annotation.string;\n }\n }\n return field.name;\n }\n return '';\n };\n if (typeof value === 'number') {\n return resolveTitle(this.findFieldByValue(value));\n } else {\n return resolveTitle(this.findFieldByName(value));\n }\n }\n\n mapFields<T>(mapper: (field: ODataEnumTypeFieldParser) => T) {\n return this.fields().map(mapper);\n }\n\n deserialize(value: any, options?: Options): E {\n return this.parser.deserialize(value, options);\n }\n\n serialize(value: E, options?: Options): any {\n return this.parser.serialize(value, options);\n }\n\n encode(value: E, options?: Options): any {\n return this.parser.encode(value, options);\n }\n}\n","import { CALLABLE_BINDING_PARAMETER } from '../constants';\nimport { CallableConfig } from '../types';\nimport { Objects } from './objects';\n\nexport const OData = {\n // Merge callables parameters\n mergeCallableParameters(callables: CallableConfig[]): CallableConfig[] {\n return callables.reduce((acc: CallableConfig[], config) => {\n if (acc.every((c) => c.name !== config.name)) {\n config = callables\n .filter(\n (c) =>\n c.name === config.name &&\n Objects.equal(\n (c.parameters || {})[CALLABLE_BINDING_PARAMETER] || {},\n (config.parameters || {})[CALLABLE_BINDING_PARAMETER] || {}\n )\n )\n .reduce((acc, c) => {\n acc.parameters = Object.assign(\n acc.parameters || {},\n c.parameters || {}\n );\n return acc;\n }, config);\n return [...acc, config];\n }\n return acc;\n }, [] as CallableConfig[]);\n },\n};\n","import { ODataStructuredType } from './structured-type';\nimport { ODataCallable } from './callable';\nimport { ODataEntityContainer } from './entity-container';\nimport { ODataEnumType } from './enum-type';\nimport { ODataApi } from '../api';\nimport { SchemaConfig, Parser, CallableConfig } from '../types';\nimport { ODataEntitySet } from './entity-set';\nimport { ODataAnnotation } from './annotation';\nimport { CALLABLE_BINDING_PARAMETER } from '../constants';\nimport { Objects } from '../utils';\nimport { OData } from '../utils/odata';\n\nexport class ODataSchema {\n api: ODataApi;\n namespace: string;\n alias?: string;\n enums: ODataEnumType<any>[];\n entities: ODataStructuredType<any>[];\n callables: ODataCallable<any>[];\n containers: ODataEntityContainer[];\n annotations: ODataAnnotation[];\n\n constructor(config: SchemaConfig, api: ODataApi) {\n this.api = api;\n this.namespace = config.namespace;\n this.alias = config.alias;\n this.enums = (config.enums || []).map(\n (config) => new ODataEnumType(config, this)\n );\n this.entities = (config.entities || []).map(\n (config) => new ODataStructuredType(config, this)\n );\n this.callables = OData.mergeCallableParameters(config.callables || []).map(\n (config) => new ODataCallable(config, this)\n );\n this.containers = (config.containers || []).map(\n (config) => new ODataEntityContainer(config, this)\n );\n this.annotations = (config.annotations || []).map(\n (config) => new ODataAnnotation(config)\n );\n }\n\n isNamespaceOf(type: string) {\n return (\n type.startsWith(this.namespace) ||\n (this.alias && type.startsWith(this.alias))\n );\n }\n\n get entitySets() {\n return this.containers.reduce(\n (acc, container) => [...acc, ...container.entitySets],\n [] as ODataEntitySet[]\n );\n }\n\n findAnnotation(predicate: (annot: ODataAnnotation) => boolean) {\n return this.annotations.find(predicate);\n }\n\n //#region Find for Type\n public findEnumTypeForType<T>(type: string) {\n return this.enums.find((e) => e.isTypeOf(type)) as\n | ODataEnumType<T>\n | undefined;\n }\n\n public findStructuredTypeForType<T>(type: string) {\n return this.entities.find((e) => e.isTypeOf(type)) as\n | ODataStructuredType<T>\n | undefined;\n }\n\n public findCallableForType<T>(type: string, bindingType?: string) {\n return this.callables.find(\n (c) =>\n c.isTypeOf(type) &&\n (bindingType === undefined || bindingType === c.binding()?.type)\n ) as ODataCallable<T> | undefined;\n }\n\n public findEntitySetForType(type: string) {\n return this.entitySets.find((e) => e.isTypeOf(type));\n }\n //#endregion\n\n configure({\n parserForType,\n findOptionsForType,\n }: {\n parserForType: (type: string) => Parser<any>;\n findOptionsForType: (type: string) => any;\n }) {\n // Configure Enums\n this.enums.forEach((enu) => enu.configure());\n // Configure Entities\n this.entities.forEach((config) =>\n config.configure({ parserForType, findOptionsForType })\n );\n // Configure callables\n this.callables.forEach((callable) => callable.configure({ parserForType }));\n }\n}\n","import {\n buildPathAndQuery,\n Expand,\n Filter,\n OrderBy,\n Select,\n Transform,\n} from './builder';\n\nimport { Dates, Types, Urls, Objects } from '../utils';\nimport { QueryOptionNames } from '../types';\n\nexport type QueryArguments<T> = {\n select?: Select<T>;\n expand?: Expand<T>;\n transform?: Transform<T>;\n search?: string;\n filter?: Filter;\n orderBy?: OrderBy<T>;\n top?: number;\n skip?: number;\n skiptoken?: string;\n};\n\nexport class ODataQueryOptions {\n options: { [name: string]: any };\n\n constructor(options?: { [name: string]: any }) {\n this.options = options || {};\n }\n\n // Params\n pathAndParams(): [string, { [name: string]: any }] {\n let options = [\n QueryOptionNames.select,\n QueryOptionNames.filter,\n QueryOptionNames.search,\n QueryOptionNames.transform,\n QueryOptionNames.orderBy,\n QueryOptionNames.top,\n QueryOptionNames.skip,\n QueryOptionNames.skiptoken,\n QueryOptionNames.expand,\n QueryOptionNames.format,\n ]\n .filter((key) => !Types.isEmpty(this.options[key]))\n .reduce(\n (acc, key) => Object.assign(acc, { [key]: this.options[key] }),\n {}\n );\n\n return buildPathAndQuery(options);\n }\n\n toString(): string {\n const [path, params] = this.pathAndParams();\n return (\n path +\n Object.entries(params)\n .filter(([, value]) => !Types.isEmpty(value))\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n );\n }\n\n toJSON() {\n return Dates.isoStringToDate(JSON.parse(JSON.stringify(this.options)));\n }\n\n toQueryArguments<T>(): QueryArguments<T> {\n return {\n select: this.options[QueryOptionNames.select],\n expand: this.options[QueryOptionNames.expand],\n transform: this.options[QueryOptionNames.transform],\n search: this.options[QueryOptionNames.search],\n filter: this.options[QueryOptionNames.filter],\n orderBy: this.options[QueryOptionNames.orderBy],\n top: this.options[QueryOptionNames.top],\n skip: this.options[QueryOptionNames.skip],\n skiptoken: this.options[QueryOptionNames.skiptoken],\n } as QueryArguments<T>;\n }\n\n clone() {\n return new ODataQueryOptions(this.toJSON());\n }\n\n // Option Handler\n option<T>(name: QueryOptionNames, opts?: T) {\n if (opts !== undefined) this.options[name] = opts;\n return new OptionHandler<T>(this.options, name);\n }\n\n // Query Options tools\n has(name: QueryOptionNames) {\n return this.options[name] !== undefined;\n }\n\n remove(...names: QueryOptionNames[]) {\n names.forEach((name) => this.option(name).clear());\n }\n\n keep(...names: QueryOptionNames[]) {\n this.options = Object.keys(this.options)\n .filter((k) => names.indexOf(k as QueryOptionNames) !== -1)\n .reduce((acc, k) => Object.assign(acc, { [k]: this.options[k] }), {});\n }\n\n // Clear\n clear() {\n this.options = {};\n }\n}\n\nexport class OptionHandler<T> {\n constructor(\n private o: { [name: string]: any },\n private n: QueryOptionNames\n ) {}\n\n get name() {\n return this.n;\n }\n\n toJSON() {\n return this.o[this.n];\n }\n\n empty() {\n return Types.isEmpty(this.o[this.n]);\n }\n\n //#region Primitive Value\n value(v?: any) {\n return (v !== undefined && (this.o[this.n] = v)) || this.o[this.n];\n }\n //#endregion\n\n //#region Array Value\n private assertArray(): any[] {\n if (!Types.isArray(this.o[this.n]))\n this.o[this.n] = this.o[this.n] !== undefined ? [this.o[this.n]] : [];\n return this.o[this.n];\n }\n\n push(value: T) {\n this.assertArray().push(value);\n }\n\n remove(value: T) {\n this.o[this.n] = this.assertArray().filter((v) => v !== value);\n // If only one... down to value\n if (this.o[this.n].length === 1) this.o[this.n] = this.o[this.n][0];\n }\n\n at(index: number) {\n return this.assertArray()[index];\n }\n //#endregion\n\n //#region HashMap Value\n private assertObject(create: boolean): { [name: string]: any } {\n if (!Types.isArray(this.o[this.n]) && Types.isPlainObject(this.o[this.n])) {\n return this.o[this.n];\n }\n let arr = this.assertArray();\n let obj = arr.find((v) => Types.isPlainObject(v));\n if (!obj && create) {\n obj = {};\n arr.push(obj);\n }\n return obj;\n }\n\n set(path: string, value: any) {\n let obj = this.assertObject(true);\n Objects.set(obj, path, value);\n }\n\n get(path: string, def?: any): any {\n let obj = this.assertObject(false) || {};\n return Objects.get(obj, path, def);\n }\n\n unset(path: string) {\n let obj = this.assertObject(true);\n Objects.unset(obj, path);\n\n if (Types.isArray(this.o[this.n])) {\n this.o[this.n] = this.o[this.n].filter((v: any) => !Types.isEmpty(v));\n if (this.o[this.n].length === 1) this.o[this.n] = this.o[this.n][0];\n }\n }\n\n has(path: string) {\n let obj = this.assertObject(false) || {};\n return Objects.has(obj, path);\n }\n\n assign(values: { [attr: string]: any }) {\n let obj = this.assertObject(true);\n return Objects.merge(obj, values);\n }\n //#endregion\n\n clear() {\n delete this.o[this.n];\n }\n}\n","import { raw, buildPathAndQuery } from './builder';\n\nimport { Types, Dates } from '../utils';\n\nimport { PATH_SEPARATOR } from '../constants';\nimport { EntityKey } from './resource';\nimport { PathSegmentNames } from '../types';\n\nexport type ODataSegment = {\n name: PathSegmentNames;\n path: string;\n type?: string;\n key?: any;\n parameters?: any;\n};\n\nfunction pathSegmentsBuilder(\n segment: ODataSegment\n): [string, { [name: string]: any }] {\n if (segment.name === PathSegmentNames.function) {\n let [path, params] = segment.parameters\n ? buildPathAndQuery({ func: { [segment.path]: segment.parameters } })\n : buildPathAndQuery({ func: segment.path });\n if (path.startsWith(PATH_SEPARATOR)) {\n path = path.slice(1);\n }\n return [path, params];\n } else {\n let key = segment.key;\n // HACK: Check guid string\n if (\n typeof key === 'string' &&\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(\n key\n )\n ) {\n key = raw(key);\n }\n let [path, params] = key ? buildPathAndQuery({ key }) : ['', {}];\n return [segment.path + path, params];\n }\n}\n\nexport class ODataPathSegments {\n private _segments: ODataSegment[];\n\n constructor(segments?: ODataSegment[]) {\n this._segments = segments || [];\n }\n\n pathAndParams(): [string, { [name: string]: any }] {\n const result = this._segments.reduce(\n (acc, segment) => {\n const [path, params] = pathSegmentsBuilder(segment);\n acc.paths.push(path);\n acc.params = Object.assign(acc.params, params);\n return acc;\n },\n { paths: [] as string[], params: {} as { [name: string]: any } }\n );\n return [result.paths.join(PATH_SEPARATOR), result.params];\n }\n\n types({ key = false }: { key?: boolean } = {}): string[] {\n return this.segments({ key })\n .map((s) => s.type())\n .filter((t) => t !== undefined) as string[];\n }\n\n keys(values?: (EntityKey<any> | undefined)[]) {\n const segments = this.segments({ key: true });\n if (values !== undefined) {\n segments.forEach((segment, index) => {\n const key = values[index];\n if (key === undefined) {\n segment.clearKey();\n } else {\n segment.key(key);\n }\n });\n }\n return segments.map((s) => s.key() as EntityKey<any> | undefined);\n }\n\n toString(): string {\n const [path, params] = this.pathAndParams();\n return (\n path +\n Object.entries(params)\n .filter(([, value]) => value)\n .map(([key, value]) => `${key}=${value}`)\n .join('&')\n );\n }\n\n toJSON() {\n return this._segments.map((segment) => {\n let json = <any>{ name: segment.name, path: segment.path };\n if (segment.type !== undefined) json.type = segment.type;\n if (segment.key !== undefined)\n json.key = Dates.isoStringToDate(\n JSON.parse(JSON.stringify(segment.key))\n );\n if (segment.parameters !== undefined)\n json.parameters = Dates.isoStringToDate(\n JSON.parse(JSON.stringify(segment.parameters))\n );\n return json;\n });\n }\n\n clone() {\n return new ODataPathSegments(this.toJSON());\n }\n\n find(predicate: (segment: ODataSegment) => boolean) {\n //Backward Find\n return [...this._segments].reverse().find(predicate);\n }\n\n segments({ key = false }: { key?: boolean } = {}) {\n let segments = [...this._segments];\n if (key)\n segments = segments.filter(\n (s) =>\n [\n PathSegmentNames.entitySet,\n PathSegmentNames.navigationProperty,\n PathSegmentNames.property,\n ].indexOf(s.name) !== -1\n );\n return segments.map((s) => new SegmentHandler(s));\n }\n\n first({ key = false }: { key?: boolean } = {}) {\n const segments = this.segments({ key });\n return segments.length > 0 ? segments[0] : undefined;\n }\n\n last({ key = false }: { key?: boolean } = {}) {\n const segments = this.segments({ key });\n return segments.length > 0 ? segments[segments.length - 1] : undefined;\n }\n\n add(name: string, path: string) {\n const segment = { name, path } as ODataSegment;\n this._segments.push(segment);\n return new SegmentHandler(segment);\n }\n\n get(name: string) {\n let segment = this.find((s) => s.name === name);\n if (segment === undefined)\n throw Error(`No Segment for name ${name} was found`);\n return new SegmentHandler(segment);\n }\n}\n\nexport class SegmentHandler {\n constructor(private segment: ODataSegment) {}\n get name() {\n return this.segment.name;\n }\n type(value?: string) {\n if (value !== undefined) this.segment.type = value;\n return this.segment.type;\n }\n path(value?: string) {\n if (value !== undefined) this.segment.path = value;\n return this.segment.path;\n }\n key<T>(value?: EntityKey<T>) {\n if (value !== undefined) this.segment.key = value;\n return this.segment.key as EntityKey<T>;\n }\n hasKey() {\n return !Types.isEmpty(this.segment.key);\n }\n clearKey() {\n delete this.segment.key;\n }\n parameters<T>(value?: T) {\n if (value !== undefined) this.segment.parameters = value;\n return this.segment.parameters as T;\n }\n hasParameters() {\n return !Types.isEmpty(this.segment.parameters);\n }\n clearParameters() {\n delete this.segment.parameters;\n }\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\nimport { ODataApi } from '../api';\nimport {\n $QUERY,\n ACCEPT,\n IF_MATCH_HEADER,\n IF_NONE_MATCH_HEADER,\n PREFER,\n TEXT_PLAIN,\n} from '../constants';\nimport { QueryOptionNames } from '../types';\nimport { Http } from '../utils';\nimport { ODataResource } from './resource';\n\nexport class ODataRequest<T> {\n private readonly _method: string;\n readonly api: ODataApi;\n private readonly _body: any | null;\n readonly observe: 'events' | 'response';\n readonly reportProgress?: boolean;\n readonly withCredentials?: boolean;\n readonly bodyQueryOptions: QueryOptionNames[];\n readonly responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n readonly fetchPolicy:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n private readonly _headers: HttpHeaders;\n private readonly _params: HttpParams;\n private readonly _path: string;\n readonly resource: ODataResource<T>;\n\n constructor(init: {\n method: string;\n api: ODataApi;\n resource: ODataResource<T>;\n body: any;\n observe: 'events' | 'response';\n etag?: string;\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n withCredentials?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }) {\n this._method = init.method;\n this.resource = init.resource;\n\n this.api = init.api;\n this.reportProgress = init.reportProgress;\n this.responseType = init.responseType;\n this.observe = init.observe;\n\n // The Body\n this._body = init.body !== undefined ? init.body : null;\n if (this._body !== null) this._body = this.resource.serialize(this._body);\n\n this.withCredentials =\n init.withCredentials === undefined\n ? this.api.options.withCredentials\n : init.withCredentials;\n this.fetchPolicy = init.fetchPolicy || this.api.options.fetchPolicy;\n this.bodyQueryOptions =\n init.bodyQueryOptions || this.api.options.bodyQueryOptions;\n\n // The Path and Params from resource\n const [resourcePath, resourceParams] = this.resource.pathAndParams();\n this._path = resourcePath;\n\n //#region Headers\n const customHeaders: { [name: string]: string | string[] } = {};\n if (typeof init.etag === 'string') {\n if (\n this.api.options.etag.ifMatch &&\n ['PUT', 'PATCH', 'DELETE'].indexOf(this._method) !== -1\n )\n customHeaders[IF_MATCH_HEADER] = init.etag;\n else if (\n this.api.options.etag.ifNoneMatch &&\n ['GET'].indexOf(this._method) !== -1\n )\n customHeaders[IF_NONE_MATCH_HEADER] = init.etag;\n }\n\n const accept = [];\n // Metadata ?\n if (this.api.options.accept?.metadata !== undefined)\n accept.push(`odata.metadata=${this.api.options.accept?.metadata}`);\n // IEEE754\n if (this.api.options.accept?.ieee754Compatible !== undefined)\n accept.push(\n `IEEE754Compatible=${this.api.options.accept?.ieee754Compatible}`\n );\n if (accept.length > 0)\n customHeaders[ACCEPT] = [\n `application/json;${accept.join(';')}`,\n 'text/plain',\n '*/*',\n ];\n\n const prefer = [];\n // Return\n if (\n this.api.options.prefer?.return !== undefined &&\n ['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1\n )\n prefer.push(`return=${this.api.options.prefer?.return}`);\n // MaxPageSize\n if (\n this.api.options.prefer?.maxPageSize !== undefined &&\n ['GET'].indexOf(this._method) !== -1\n )\n prefer.push(`odata.maxpagesize=${this.api.options.prefer?.maxPageSize}`);\n // Annotations\n if (\n this.api.options.prefer?.includeAnnotations !== undefined &&\n ['GET'].indexOf(this._method) !== -1\n )\n prefer.push(\n `odata.include-annotations=${this.api.options.prefer?.includeAnnotations}`\n );\n if (\n this.api.options.prefer?.continueOnError === true &&\n ['POST'].indexOf(this._method) !== -1\n )\n prefer.push(`odata.continue-on-error`);\n if (prefer.length > 0) customHeaders[PREFER] = prefer;\n this._headers = Http.mergeHttpHeaders(\n this.api.options.headers,\n customHeaders,\n init.headers || {}\n );\n //#endregion\n\n //#region Params\n const customParams: { [name: string]: string | string[] } = {};\n if (\n ['POST', 'PUT', 'PATCH'].indexOf(this._method) !== -1 &&\n '$select' in resourceParams\n ) {\n customParams['$select'] = resourceParams['$select'];\n }\n if (['POST'].indexOf(this._method) !== -1 && '$expand' in resourceParams) {\n customParams['$expand'] = resourceParams['$expand'];\n }\n if (['GET'].indexOf(this._method) !== -1) {\n Object.assign(customParams, resourceParams);\n }\n\n this._params = Http.mergeHttpParams(\n this.api.options.params,\n customParams,\n init.params || {}\n );\n //#endregion\n }\n\n get path() {\n return this.isBodyQueryOptions() ? `${this._path}/${$QUERY}` : this._path;\n }\n\n get method() {\n return this.isBodyQueryOptions() ? 'POST' : this._method;\n }\n\n get body() {\n if (this.isBodyQueryOptions()) {\n let [, bodyParams] = Http.splitHttpParams(\n this._params,\n this.bodyQueryOptions.map((name) => `$${name}`)\n );\n return bodyParams.toString();\n } else {\n return this._body;\n }\n }\n\n get params() {\n if (this.isBodyQueryOptions()) {\n let [queryParams] = Http.splitHttpParams(\n this._params,\n this.bodyQueryOptions.map((name) => `$${name}`)\n );\n return queryParams;\n } else {\n return this._params;\n }\n }\n\n get headers() {\n if (this.isBodyQueryOptions()) {\n return Http.mergeHttpHeaders(this._headers, { CONTENT_TYPE: TEXT_PLAIN });\n } else {\n return this._headers;\n }\n }\n\n get pathWithParams() {\n let path = this._path;\n if (this._params.keys().length > 0) {\n path = `${path}?${this._params}`;\n }\n return path;\n }\n\n get url() {\n return `${this.api.serviceRootUrl}${this._path}`;\n }\n\n get urlWithParams() {\n return `${this.api.serviceRootUrl}${this.pathWithParams}`;\n }\n\n isBodyQueryOptions() {\n return (\n this._method === 'GET' &&\n this.bodyQueryOptions.length > 0 &&\n this.bodyQueryOptions.some((name) => this._params.has(`$${name}`))\n );\n }\n\n isFetch() {\n return ['GET'].indexOf(this._method) !== -1;\n }\n\n isMutate() {\n return ['PUT', 'PATCH', 'POST', 'DELETE'].indexOf(this._method) !== -1;\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport {\n VALUE_SEPARATOR,\n PARAM_SEPARATOR,\n QUERY_SEPARATOR,\n} from '../constants';\nimport { Objects, Http, Types } from '../utils/index';\n\nimport { ODataPathSegments } from './path-segments';\nimport { QueryArguments, ODataQueryOptions } from './query-options';\nimport { HttpOptions } from './types';\nimport { ODataResponse } from './responses/index';\nimport { ODataApi } from '../api';\nimport { Parser, OptionsHelper, QueryOptionNames } from '../types';\nimport { ODataRequest } from './request';\nimport { ODataStructuredTypeParser } from '../parsers';\nimport {\n Expand,\n Filter,\n OrderBy,\n Select,\n Transform,\n QueryCustomType,\n isQueryCustomType,\n} from './builder';\nimport { ODataStructuredType, ODataCallable } from '../schema/index';\n\nexport type EntityKey<T> =\n | {\n readonly [P in keyof T]?: T[P];\n }\n | QueryCustomType\n | string\n | number;\n\nexport abstract class ODataResource<T> {\n // VARIABLES\n public api: ODataApi;\n protected pathSegments: ODataPathSegments;\n protected queryOptions: ODataQueryOptions;\n constructor(\n api: ODataApi,\n segments?: ODataPathSegments,\n query?: ODataQueryOptions\n ) {\n this.api = api;\n this.pathSegments = segments || new ODataPathSegments();\n this.queryOptions = query || new ODataQueryOptions();\n }\n\n /**\n * @returns string The type of the resource\n */\n type() {\n return this.pathSegments.last()?.type();\n }\n\n /**\n * @returns string The type of the return\n */\n returnType() {\n return this.pathSegments.last()?.type();\n }\n\n /**\n * @returns string All covered types of the resource\n */\n types(): string[] {\n return this.pathSegments.types();\n }\n\n /**\n * @returns boolean The resource has key ?\n */\n hasKey() {\n return Boolean(this.pathSegments.last({ key: true })?.hasKey());\n }\n\n clearKey() {\n return this.pathSegments.last({ key: true })?.clearKey();\n }\n\n isSubtypeOf(other: ODataResource<any>) {\n const api = this.api;\n const selfType = this.type();\n const otherType = other.type();\n if (selfType !== undefined && otherType !== undefined) {\n const otherParser = other.schema()?.parser as\n | ODataStructuredTypeParser<T>\n | undefined;\n return (\n otherParser !== undefined &&\n otherParser.findChildParser((c) => c.isTypeOf(selfType)) !== undefined\n );\n }\n return false;\n }\n\n isParentOf(other: ODataResource<any>) {\n const [selfPath] = this.pathAndParams();\n const [otherPath] = other.pathAndParams();\n return otherPath !== selfPath && otherPath.startsWith(selfPath);\n }\n\n isChildOf(other: ODataResource<any>) {\n const [selfPath] = this.pathAndParams();\n const [otherPath] = other.pathAndParams();\n return otherPath !== selfPath && selfPath.startsWith(otherPath);\n }\n\n isEqualTo(other: ODataResource<any>, test?: 'path' | 'params') {\n const [selfPath, selfParams] = this.pathAndParams();\n const [otherPath, otherParams] = other.pathAndParams();\n return test === 'path'\n ? otherPath === selfPath\n : test === 'params'\n ? Types.isEqual(selfParams, otherParams)\n : otherPath === selfPath && Types.isEqual(selfParams, otherParams);\n }\n\n pathAndParams(): [string, { [name: string]: any }] {\n const [spath, sparams] = this.pathSegments.pathAndParams();\n const [, qparams] = this.queryOptions.pathAndParams();\n return [spath, { ...sparams, ...qparams }];\n }\n\n endpointUrl(params: boolean = true) {\n if (params) {\n return `${this.api.serviceRootUrl}${this}`;\n } else {\n let [path] = this.pathAndParams();\n return `${this.api.serviceRootUrl}${path}`;\n }\n }\n\n toString(): string {\n let [path, params] = this.pathAndParams();\n let queryString = Object.entries(params)\n .map((e) => `${e[0]}${VALUE_SEPARATOR}${e[1]}`)\n .join(PARAM_SEPARATOR);\n return queryString ? `${path}${QUERY_SEPARATOR}${queryString}` : path;\n }\n\n abstract clone(): ODataResource<T>;\n abstract schema(): ODataStructuredType<T> | ODataCallable<T> | undefined;\n serialize(value: any, options?: OptionsHelper): any {\n const type = this.type();\n const parser =\n type !== undefined ? this.api.parserForType<T>(type) : undefined;\n if (parser !== undefined && 'serialize' in parser) {\n return Array.isArray(value)\n ? value.map((e) =>\n (parser as Parser<T>).serialize(e, options || this.api.options)\n )\n : parser.serialize(value, options || this.api.options);\n }\n return value;\n }\n\n deserialize(value: any, options?: OptionsHelper): any {\n const type = this.returnType();\n const parser =\n type !== undefined ? this.api.parserForType<T>(type) : undefined;\n if (parser !== undefined && 'deserialize' in parser) {\n return Array.isArray(value)\n ? value.map((e) =>\n (parser as Parser<T>).deserialize(e, options || this.api.options)\n )\n : parser.deserialize(value, options || this.api.options);\n }\n return value;\n }\n encode(value: any, options?: OptionsHelper): any {\n const type = this.type();\n const parser =\n type !== undefined ? this.api.parserForType<T>(type) : undefined;\n if (parser !== undefined && 'encode' in parser) {\n return Array.isArray(value)\n ? value.map((e) =>\n (parser as Parser<T>).encode(e, options || this.api.options)\n )\n : parser.encode(value, options || this.api.options);\n }\n return value;\n }\n\n toJSON() {\n return {\n segments: this.pathSegments.toJSON(),\n options: this.queryOptions.toJSON(),\n };\n }\n\n cloneSegments() {\n return this.pathSegments.clone();\n }\n\n //#region Query Options\n clearQuery() {\n this.queryOptions.clear();\n }\n\n cloneQuery() {\n return this.queryOptions.clone();\n }\n\n /**\n * Factorise an object handler for mutate query options for resources that match to entity\n * @returns Object handler for mutate query options\n */\n protected entityQueryHandler() {\n const options = this.queryOptions;\n return {\n select(opts?: Select<T>) {\n return options.option<Select<T>>(QueryOptionNames.select, opts);\n },\n expand(opts?: Expand<T>) {\n return options.option<Expand<T>>(QueryOptionNames.expand, opts);\n },\n compute(opts?: string) {\n return options.option<string>(QueryOptionNames.compute, opts);\n },\n format(opts?: string) {\n return options.option<string>(QueryOptionNames.format, opts);\n },\n apply(query: QueryArguments<T>) {\n if (query.select !== undefined) {\n this.select(query.select);\n }\n if (query.expand !== undefined) {\n this.expand(query.expand);\n }\n },\n };\n }\n\n static resolveKey<T>(\n value: any,\n schema?: ODataStructuredType<T> | ODataCallable<T>\n ): EntityKey<T> | undefined {\n if (isQueryCustomType(value)) {\n return value;\n } else if (Types.isPlainObject(value)) {\n return schema instanceof ODataStructuredType\n ? schema.resolveKey(value)\n : Objects.resolveKey(value);\n }\n return value as EntityKey<T> | undefined;\n }\n\n protected resolveKey(value: any): EntityKey<T> | undefined {\n return ODataResource.resolveKey<T>(value, this.schema());\n }\n\n /**\n * Factorise an object handler for mutate query options for resources that match to entities\n * @returns Object handler for mutate query options\n */\n protected entitiesQueryHandler() {\n const options = this.queryOptions;\n return {\n select(opts?: Select<T>) {\n return options.option<Select<T>>(QueryOptionNames.select, opts);\n },\n expand(opts?: Expand<T>) {\n return options.option<Expand<T>>(QueryOptionNames.expand, opts);\n },\n compute(opts?: string) {\n return options.option<string>(QueryOptionNames.compute, opts);\n },\n transform(opts?: Transform<T>) {\n return options.option<Transform<T>>(QueryOptionNames.transform, opts);\n },\n search(opts?: string) {\n return options.option<string>(QueryOptionNames.search, opts);\n },\n filter(opts?: Filter) {\n return options.option<Filter>(QueryOptionNames.filter, opts);\n },\n orderBy(opts?: OrderBy<T>) {\n return options.option<OrderBy<T>>(QueryOptionNames.orderBy, opts);\n },\n format(opts?: string) {\n return options.option<string>(QueryOptionNames.format, opts);\n },\n top(opts?: number) {\n return options.option<number>(QueryOptionNames.top, opts);\n },\n skip(opts?: number) {\n return options.option<number>(QueryOptionNames.skip, opts);\n },\n skiptoken(opts?: string) {\n return options.option<string>(QueryOptionNames.skiptoken, opts);\n },\n\n paging({\n skip,\n skiptoken,\n top,\n }: { skip?: number; skiptoken?: string; top?: number } = {}) {\n if (skiptoken !== undefined) this.skiptoken(skiptoken);\n else if (skip !== undefined) this.skip(skip);\n if (top !== undefined) this.top(top);\n },\n\n clearPaging() {\n this.skip().clear();\n this.top().clear();\n this.skiptoken().clear();\n },\n\n apply(query: QueryArguments<T>) {\n if (query.select !== undefined) {\n this.select(query.select);\n }\n if (query.expand !== undefined) {\n this.expand(query.expand);\n }\n if (query.transform !== undefined) {\n this.transform(query.transform);\n }\n if (query.search !== undefined) {\n this.search(query.search);\n }\n if (query.filter !== undefined) {\n this.filter(query.filter);\n }\n if (query.orderBy !== undefined) {\n this.orderBy(query.orderBy);\n }\n this.paging(query);\n },\n };\n }\n //#endregion\n\n // Base Requests\n protected request(\n method: string,\n options: HttpOptions & {\n body?: any;\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<any> {\n const apiOptions = this.api.options;\n let params = options.params || {};\n if (options.withCount) {\n params = Http.mergeHttpParams(params, apiOptions.helper.countParam());\n }\n\n let responseType: 'arraybuffer' | 'blob' | 'json' | 'text' =\n options.responseType &&\n ['property', 'entity', 'entities'].indexOf(options.responseType) !== -1\n ? 'json'\n : options.responseType === 'value'\n ? 'text'\n : <'arraybuffer' | 'blob' | 'json' | 'text'>options.responseType;\n\n let etag = options.etag;\n if (etag === undefined && Types.isPlainObject(options.body)) {\n etag = apiOptions.helper.etag(options.body);\n }\n\n const request = new ODataRequest({\n method,\n etag,\n body: options.body,\n api: this.api,\n resource: this,\n observe: 'response',\n headers: options.headers,\n reportProgress: options.reportProgress,\n params: params,\n responseType: responseType,\n fetchPolicy: options.fetchPolicy,\n withCredentials: options.withCredentials,\n bodyQueryOptions: options.bodyQueryOptions,\n });\n\n const res$ = this.api.request(request);\n switch (options.responseType) {\n case 'entities':\n return res$.pipe(map((res: ODataResponse<T>) => res.entities()));\n case 'entity':\n return res$.pipe(map((res: ODataResponse<T>) => res.entity()));\n case 'property':\n return res$.pipe(map((res: ODataResponse<T>) => res.property()));\n case 'value':\n return res$.pipe(map((res: ODataResponse<T>) => res.value() as T));\n default:\n // Other responseTypes (arraybuffer, blob, json, text) return body\n return res$.pipe(map((res: ODataResponse<T>) => res.body));\n }\n }\n\n protected get(\n options: HttpOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return this.request('GET', options);\n }\n\n protected post(\n body: any,\n options: HttpOptions & {\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('POST', { body, ...options });\n }\n\n protected put(\n body: any,\n options: HttpOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('PUT', { body, ...options });\n }\n\n protected patch(\n body: any,\n options: HttpOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('PATCH', { body, ...options });\n }\n\n protected delete(\n options: HttpOptions & {\n etag?: string;\n responseType?:\n | 'arraybuffer'\n | 'blob'\n | 'json'\n | 'text'\n | 'value'\n | 'property'\n | 'entity'\n | 'entities';\n withCount?: boolean;\n } = {}\n ): Observable<any> {\n return this.request('DELETE', options);\n }\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { ODataPathSegments } from '../path-segments';\nimport { ODataQueryOptions } from '../query-options';\nimport {\n HttpEntityOptions,\n HttpEntitiesOptions,\n HttpPropertyOptions,\n HttpOptions,\n HttpNoneOptions,\n} from './options';\nimport {\n ODataProperty,\n ODataEntities,\n ODataEntity,\n ODataEntityAnnotations,\n ODataEntitiesAnnotations,\n} from '../responses';\nimport { ODataApi } from '../../api';\nimport { ODataCollection, ODataModel } from '../../models';\nimport { ODataEntityResource } from './entity';\nimport { Expand, Filter, OrderBy, Select, Transform } from '../builder';\nimport { ODataEntitySetResource } from './entity-set';\nimport { ODataResource } from '../resource';\nimport { PathSegmentNames } from '../../types';\n\nexport class ODataActionResource<P, R> extends ODataResource<R> {\n //#region Factory\n static factory<P, R>(\n api: ODataApi,\n path: string,\n type: string | undefined,\n segments: ODataPathSegments,\n query: ODataQueryOptions\n ) {\n const segment = segments.add(PathSegmentNames.action, path);\n if (type) segment.type(type);\n query.clear();\n return new ODataActionResource<P, R>(api, segments, query);\n }\n //#endregion\n\n clone() {\n return new ODataActionResource<P, R>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n //TODO: Binding Type\n let type = this.type();\n return type !== undefined\n ? this.api.findCallableForType<R>(type)\n : undefined;\n }\n\n returnType() {\n return this.schema()?.parser.return?.type;\n }\n\n asModel<M extends ODataModel<R>>(\n entity: Partial<R> | { [name: string]: any },\n { annots, reset }: { annots?: ODataEntityAnnotations; reset?: boolean } = {}\n ): M {\n let resource: ODataEntityResource<R> | undefined;\n const type = annots?.type || this.returnType();\n const Model = this.api.modelForType(type);\n let path = annots?.entitySet;\n if (path !== undefined) {\n resource = this.api.entitySet<R>(path).entity(entity as Partial<R>);\n resource.query.apply(this.queryOptions.toQueryArguments());\n }\n return new Model(entity, { resource, annots, reset }) as M;\n }\n\n asCollection<M extends ODataModel<R>, C extends ODataCollection<R, M>>(\n entities: Partial<R>[] | { [name: string]: any }[],\n {\n annots,\n reset,\n }: { annots?: ODataEntitiesAnnotations; reset?: boolean } = {}\n ): C {\n let resource: ODataEntitySetResource<R> | undefined;\n const type = annots?.type || this.returnType();\n const Collection = this.api.collectionForType(type);\n let path = annots?.entitySet;\n if (path !== undefined) {\n resource = this.api.entitySet<R>(path);\n resource.query.apply(this.queryOptions.toQueryArguments());\n }\n return new Collection(entities, { resource, annots, reset }) as C;\n }\n\n //#region Inmutable Resource\n select(opts: Select<R>) {\n const clone = this.clone();\n clone.query.select(opts);\n return clone;\n }\n\n expand(opts: Expand<R>) {\n const clone = this.clone();\n clone.query.expand(opts);\n return clone;\n }\n\n transform(opts: Transform<R>) {\n const clone = this.clone();\n clone.query.transform(opts);\n return clone;\n }\n\n search(opts: string) {\n const clone = this.clone();\n clone.query.search(opts);\n return clone;\n }\n\n filter(opts: Filter) {\n const clone = this.clone();\n clone.query.filter(opts);\n return clone;\n }\n\n orderBy(opts: OrderBy<R>) {\n const clone = this.clone();\n clone.query.orderBy(opts);\n return clone;\n }\n\n format(opts: string) {\n const clone = this.clone();\n clone.query.format(opts);\n return clone;\n }\n\n top(opts: number) {\n const clone = this.clone();\n clone.query.top(opts);\n return clone;\n }\n\n skip(opts: number) {\n const clone = this.clone();\n clone.query.skip(opts);\n return clone;\n }\n\n skiptoken(opts: string) {\n const clone = this.clone();\n clone.query.skiptoken(opts);\n return clone;\n }\n //#endregion\n\n //#region Mutable Resource\n get segment() {\n const segments = this.pathSegments;\n return {\n entitySet() {\n return segments.get(PathSegmentNames.entitySet);\n },\n singleton() {\n return segments.get(PathSegmentNames.singleton);\n },\n action() {\n return segments.get(PathSegmentNames.action);\n },\n };\n }\n\n /**\n * Handle query options of the action\n * @returns Handler for mutate the query of the action\n */\n get query() {\n return this.entitiesQueryHandler();\n }\n\n //#endregion\n\n //#region Requests\n post(\n params: P | null,\n options?: HttpEntityOptions\n ): Observable<ODataEntity<R>>;\n post(\n params: P | null,\n options?: HttpEntitiesOptions\n ): Observable<ODataEntities<R>>;\n post(\n params: P | null,\n options?: HttpPropertyOptions\n ): Observable<ODataProperty<R>>;\n post(\n params: P | null,\n options?: HttpEntityOptions & HttpEntitiesOptions & HttpPropertyOptions\n ): Observable<any> {\n return super.post(params, options);\n }\n //#endregion\n\n //#region Shortcuts\n call(\n params: P | null,\n options?: HttpEntityOptions & HttpOptions\n ): Observable<ODataEntity<R>>;\n call(\n params: P | null,\n options?: HttpEntitiesOptions & HttpOptions\n ): Observable<ODataEntities<R>>;\n call(\n params: P | null,\n options?: HttpPropertyOptions & HttpOptions\n ): Observable<ODataProperty<R>>;\n call(\n params: P | null,\n options?: HttpNoneOptions & HttpOptions\n ): Observable<null>;\n call(\n params: P | null,\n options: HttpEntityOptions &\n HttpEntitiesOptions &\n HttpPropertyOptions &\n HttpNoneOptions &\n HttpOptions = {}\n ): Observable<any> {\n return this.clone().post(params, options);\n }\n\n callProperty(\n params: P | null,\n options: HttpOptions = {}\n ): Observable<R | null> {\n return this.call(params, { responseType: 'property', ...options }).pipe(\n map(({ property }) => property)\n );\n }\n\n callEntity(\n params: P | null,\n options: HttpOptions = {}\n ): Observable<R | null> {\n return this.call(params, { responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n callModel(\n params: P | null,\n options: HttpOptions = {}\n ): Observable<ODataModel<R> | null> {\n return this.call(params, { responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel(entity, { annots, reset: true }) : null\n )\n );\n }\n\n callEntities(\n params: P | null,\n options: HttpOptions = {}\n ): Observable<R[] | null> {\n return this.call(params, { responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n callCollection(\n params: P | null,\n options: HttpOptions = {}\n ): Observable<ODataCollection<R, ODataModel<R>> | null> {\n return this.call(params, { responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection(entities, { annots, reset: true }) : null\n )\n );\n }\n //#endregion\n}\n","import { ODataContext, ODataVersionHelper } from '../../helper';\nimport { ODataMetadataType } from '../../types';\n\nexport abstract class ODataAnnotations {\n constructor(\n public helper: ODataVersionHelper,\n protected annotations: { [annot: string]: any } = {},\n protected context?: ODataContext\n ) {}\n\n attributes<T>(data: { [name: string]: any }, metadata: ODataMetadataType): T {\n return this.helper.attributes(data, metadata) as T;\n }\n\n get entitySet() {\n return this.context?.entitySet;\n }\n\n get type() {\n return this.helper.type(this.annotations) || this.context?.type;\n }\n\n // Method\n abstract clone(): ODataAnnotations;\n abstract data(data: { [name: string]: any }): { [name: string]: any };\n}\n\nexport class ODataPropertyAnnotations extends ODataAnnotations {\n clone(): ODataPropertyAnnotations {\n return new ODataPropertyAnnotations(\n this.helper,\n { ...this.annotations },\n this.context\n );\n }\n\n data(data: { [name: string]: any }) {\n return this.helper.property(data);\n }\n}\n\nexport class ODataEntityAnnotations extends ODataAnnotations {\n clone(): ODataEntityAnnotations {\n return new ODataEntityAnnotations(\n this.helper,\n { ...this.annotations },\n this.context\n );\n }\n\n data(data: { [name: string]: any }) {\n return this.helper.entity(data);\n }\n\n get id() {\n return this.helper.id(this.annotations);\n }\n\n get etag() {\n return this.helper.etag(this.annotations);\n }\n\n get mediaEtag() {\n return this.helper.mediaEtag(this.annotations);\n }\n\n get metadataEtag() {\n return this.helper.metadataEtag(this.annotations);\n }\n\n get readLink() {\n return this.helper.readLink(this.annotations);\n }\n\n get editLink() {\n return this.helper.editLink(this.annotations);\n }\n\n get mediaReadLink() {\n return this.helper.mediaReadLink(this.annotations);\n }\n\n get mediaEditLink() {\n return this.helper.mediaEditLink(this.annotations);\n }\n\n get mediaContentType() {\n return this.helper.mediaContentType(this.annotations);\n }\n\n private _properties?: { [name: string]: any };\n get properties() {\n if (this._properties === undefined) {\n this._properties = this.helper.properties(this.annotations);\n }\n return this._properties;\n }\n\n property(name: string) {\n return this.properties[name];\n }\n\n private _functions?: { [name: string]: any };\n get functions() {\n if (this._functions === undefined) {\n this._functions = this.helper.functions(this.annotations);\n }\n return this._functions;\n }\n\n function(name: string) {\n return this.functions[name];\n }\n}\n\nexport class ODataEntitiesAnnotations extends ODataAnnotations {\n clone(): ODataEntitiesAnnotations {\n return new ODataEntitiesAnnotations(\n this.helper,\n { ...this.annotations },\n this.context\n );\n }\n\n data(data: { [name: string]: any }) {\n return this.helper.entities(data);\n }\n\n get readLink() {\n return this.helper.readLink(this.annotations);\n }\n\n get count() {\n return this.helper.count(this.annotations);\n }\n\n get nextLink() {\n return this.helper.nextLink(this.annotations);\n }\n\n get deltaLink() {\n return this.helper.deltaLink(this.annotations);\n }\n\n get top() {\n let match = (this.nextLink || '').match(/[&?]{1}\\$top=(\\d+)/);\n return match !== null ? Number(match[1]) : undefined;\n }\n\n get skip() {\n let match = (this.nextLink || '').match(/[&?]{1}\\$skip=(\\d+)/);\n return match !== null ? Number(match[1]) : undefined;\n }\n\n get skiptoken() {\n let match = (this.nextLink || '').match(/[&?]{1}\\$skiptoken=([\\d\\w\\s']+)/);\n return match !== null ? match[1] : undefined;\n }\n\n private _functions?: { [name: string]: any };\n get functions() {\n if (this._functions === undefined) {\n this._functions = this.helper.functions(this.annotations);\n }\n return this._functions;\n }\n function(name: string) {\n return this.functions[name];\n }\n}\n","import {\n DEFAULT_VERSION,\n MAX_AGE,\n VERSION_2_0,\n VERSION_3_0,\n VERSION_4_0,\n} from '../../constants';\nimport { ODataHelper } from '../../helper';\nimport {\n CacheCacheability,\n ODataMetadataType,\n ODataVersion,\n Options,\n ResponseOptions,\n} from '../../types';\n\nexport class ODataResponseOptions implements ResponseOptions {\n version: ODataVersion;\n streaming?: boolean;\n // OData\n metadata?: ODataMetadataType;\n stringAsEnum?: boolean;\n ieee754Compatible?: boolean;\n // Location\n location?: string;\n // Cache\n cacheability?: 'public' | 'private' | 'no-cache' | 'no-store';\n maxAge?: number;\n\n constructor(config: Options) {\n this.version = config.version || DEFAULT_VERSION;\n this.stringAsEnum = config.stringAsEnum;\n }\n\n get helper() {\n return ODataHelper[this.version];\n }\n\n clone() {\n return new ODataResponseOptions(this);\n }\n\n setFeatures(features: string) {\n features.split(';').forEach((o) => {\n let [k, v] = o.split('=');\n switch (k.trim()) {\n case 'odata.metadata':\n this.metadata = v as ODataMetadataType;\n break;\n case 'odata.streaming':\n this.streaming = v == 'true';\n break;\n case 'IEEE754Compatible':\n this.ieee754Compatible = v == 'true';\n break;\n }\n });\n }\n\n setVersion(version: string) {\n const value = version.replace(/\\;/g, '').trim();\n if ([VERSION_2_0, VERSION_3_0, VERSION_4_0].indexOf(value) !== -1)\n this.version = value as ODataVersion;\n }\n\n setLocation(location: string) {\n // TODO: resolve location?\n this.location = location;\n }\n\n setCache(cacheControl: string) {\n cacheControl.split(',').forEach((directive) => {\n if (directive.startsWith(MAX_AGE)) {\n let maxAge = Number(directive.split('=')[1]);\n if (!Number.isNaN(maxAge)) this.maxAge = maxAge;\n }\n if (\n ['public', 'private', 'no-cache', 'no-store'].indexOf(directive) !== -1\n ) {\n this.cacheability = directive as CacheCacheability;\n }\n });\n }\n}\n","import { HttpHeaders, HttpResponse } from '@angular/common/http';\nimport {\n ODataEntityAnnotations,\n ODataEntitiesAnnotations,\n ODataPropertyAnnotations,\n} from './annotations';\nimport { Types } from '../../utils/types';\nimport { ODataResource } from '../resource';\nimport { ODataEntities, ODataEntity, ODataProperty } from './types';\nimport {\n APPLICATION_JSON,\n ODATA_VERSION_HEADERS,\n CONTENT_TYPE,\n CACHE_CONTROL,\n LOCATION_HEADER,\n ETAG_HEADERS,\n ODATA_ENTITYID_HEADERS,\n} from '../../constants';\nimport { ODataApi } from '../../api';\nimport { ODataRequest } from '../request';\nimport { ODataResponseOptions } from './options';\nimport { Http } from '../../utils/http';\nimport { ODataContext } from '../../helper';\n\n/**\n * OData Response\n */\nexport class ODataResponse<T> extends HttpResponse<T> {\n readonly api: ODataApi;\n readonly resource: ODataResource<T>;\n\n constructor(init: {\n api: ODataApi;\n resource: ODataResource<T>;\n body: T | null;\n headers: HttpHeaders;\n status: number;\n statusText: string;\n url?: string;\n }) {\n super(init);\n this.api = init.api;\n this.resource = init.resource;\n }\n\n static fromHttpResponse<T>(req: ODataRequest<T>, res: HttpResponse<T>) {\n return new ODataResponse<T>({\n api: req.api,\n resource: req.resource,\n body: res.body,\n headers: res.headers,\n status: res.status,\n statusText: res.statusText,\n url: res.url || undefined,\n });\n }\n\n static fromJSON<T>(\n req: ODataRequest<T>,\n json: {\n body: T | null;\n headers: { [name: string]: string | string[] };\n status: number;\n statusText: string;\n url: string | null;\n }\n ) {\n return new ODataResponse<T>({\n api: req.api,\n resource: req.resource,\n body: json.body,\n headers: new HttpHeaders(json.headers),\n status: json.status,\n statusText: json.statusText,\n url: json.url || undefined,\n });\n }\n\n toJSON() {\n return {\n body: this.body,\n headers: this.headers\n .keys()\n .map((name) => ({ [name]: this.headers.getAll(name) || [] }))\n .reduce((acc, header) => Object.assign(acc, header), {}),\n status: this.status,\n statusText: this.statusText,\n url: this.url,\n };\n }\n\n private _options?: ODataResponseOptions;\n get options(): ODataResponseOptions {\n if (this._options === undefined) {\n this._options = new ODataResponseOptions(this.api.options);\n const contentType = this.headers.get(CONTENT_TYPE);\n if (contentType && contentType.indexOf(APPLICATION_JSON) !== -1) {\n const features = contentType\n .split(',')\n .find((p) => p.startsWith(APPLICATION_JSON)) as string;\n this._options.setFeatures(features);\n }\n const header = Http.resolveHeaderKey(this.headers, ODATA_VERSION_HEADERS);\n if (header) {\n const version = (this.headers.get(header) || '').replace(/\\;/g, '') as\n | '2.0'\n | '3.0'\n | '4.0';\n this._options.setVersion(version);\n }\n\n const location = this.headers.get(LOCATION_HEADER);\n if (location) {\n this._options.setLocation(location);\n }\n\n const cacheControl = this.headers.get(CACHE_CONTROL);\n if (cacheControl) {\n this._options.setCache(cacheControl);\n }\n }\n return this._options;\n }\n\n private _payload?: any;\n get payload() {\n if (this._payload === undefined) {\n this._payload =\n this.body && this.options.version === '2.0'\n ? (<any>this.body)['d']\n : this.body;\n }\n return this._payload;\n }\n\n private _context?: any;\n get context(): ODataContext {\n if (this._context === undefined) {\n this._context = this.options.helper.context(this.payload || {});\n }\n return this._context;\n }\n\n private _annotations?: any;\n get annotations(): { [name: string]: any } {\n if (this._annotations === undefined) {\n const options = this.options;\n this._annotations = options.helper.annotations(this.payload || {});\n let key = Http.resolveHeaderKey(this.headers, ETAG_HEADERS);\n if (key) {\n const etag = this.headers.get(key);\n if (etag) options.helper.etag(this._annotations, etag);\n }\n key = Http.resolveHeaderKey(this.headers, ODATA_ENTITYID_HEADERS);\n if (key) {\n const entityId = this.headers.get(key);\n if (entityId) options.helper.id(this._annotations, entityId);\n }\n }\n return this._annotations;\n }\n\n /**\n * Handle the response body as an entity\n * @returns\n */\n entity(): ODataEntity<T> {\n const options = this.options;\n const payload = this.payload;\n const annots = new ODataEntityAnnotations(\n options.helper,\n this.annotations,\n this.context\n );\n const data = payload ? annots.data(payload) : null;\n let entity = (\n data !== null && Types.isPlainObject(data)\n ? options.helper.attributes(data, this.api.options.stripMetadata)\n : data\n ) as T | null;\n\n if (entity !== null)\n entity = this.resource.deserialize(entity, options) as T;\n return { entity, annots };\n }\n\n /**\n * Handle the response body as entities\n * @returns\n */\n entities(): ODataEntities<T> {\n const options = this.options;\n const payload = this.payload;\n const annots = new ODataEntitiesAnnotations(\n options.helper,\n this.annotations,\n this.context\n );\n let entities = payload ? annots.data(payload) : null;\n\n if (entities !== null)\n entities = this.resource.deserialize(entities, options) as T[];\n return { entities, annots };\n }\n\n /**\n * Handle the response body as a property\n * @returns\n */\n property(): ODataProperty<T> {\n const options = this.options;\n const payload = this.payload;\n const annots = new ODataPropertyAnnotations(\n options.helper,\n this.annotations,\n this.context\n );\n const data = payload ? (annots.data(payload) as T) : null;\n let property = (\n data !== null && Types.isPlainObject(data)\n ? options.helper.attributes(data, this.api.options.stripMetadata)\n : data\n ) as T | null;\n\n if (property !== null)\n property = this.resource.deserialize(property, options) as T;\n return { property, annots };\n }\n\n /**\n * Handle the response body as a value\n * @returns\n */\n value(): T | null {\n const options = this.options;\n const payload = this.payload;\n let value = (\n payload !== null && Types.isPlainObject(payload)\n ? options.helper.attributes(payload, this.api.options.stripMetadata)\n : payload\n ) as T | null;\n\n if (value !== null) value = this.resource.deserialize(value, options) as T;\n return value;\n }\n}\n","export class CsdlAnnotable {\n constructor(public annotationList?: CsdlAnnotation[]) {}\n}\n\nexport class CsdlAnnotations extends CsdlAnnotable {\n constructor(\n public target: string,\n annotationList: CsdlAnnotation[],\n public qualifier?: string\n ) {\n super(annotationList);\n }\n}\n\nexport class CsdlAnnotation {\n constructor(public term: string, public qualifier?: string) {}\n}\n\nexport class CsdlTerm {\n constructor(\n public name: string,\n public type: string,\n public baseTerm?: string,\n public defaultValue?: string,\n public appliesTo?: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n","import { CsdlAnnotable, CsdlAnnotation } from './csdl-annotation';\n\nexport class CsdlTypeDefinition extends CsdlAnnotable {\n constructor(\n public name: string,\n public underlayingType: string,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public unicode?: boolean,\n public srid?: string,\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n","import {\n CsdlAnnotation,\n CsdlAnnotable,\n CsdlTerm,\n CsdlAnnotations,\n} from './csdl-annotation';\nimport { CsdlTypeDefinition } from './csdl-type-definition';\nimport { CsdlEnumType } from './csdl-enum-type';\nimport { CsdlEntityType, CsdlComplexType } from './csdl-structured-type';\nimport { CsdlFunction, CsdlAction } from './csdl-function-action';\nimport { CsdlEntityContainer } from './csdl-entity-container';\n\nexport class CsdlSchema extends CsdlAnnotable {\n constructor(\n public namespace: string,\n public alias?: string,\n public enumTypes?: CsdlEnumType[],\n public complexTypes?: CsdlComplexType[],\n public entityTypes?: CsdlEntityType[],\n public functions?: CsdlFunction[],\n public actions?: CsdlAction[],\n public entityContainer?: CsdlEntityContainer,\n public typeDefinitions?: CsdlTypeDefinition[],\n public terms?: CsdlTerm[],\n public annotationsList?: CsdlAnnotations[],\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n","export class CsdlEnumType {\n constructor(\n public name: string,\n public members: CsdlEnumMember[],\n public underlyingType?: string,\n public isFlags?: boolean\n ) {}\n}\n\nexport class CsdlEnumMember {\n constructor(public name: string, public value?: number) {}\n}\n","import {\n CsdlProperty,\n CsdlNavigationProperty,\n} from './csdl-structural-property';\n\nexport class CsdlStructuredType {\n constructor(\n public name: string,\n public properties?: CsdlProperty[],\n public navigationProperties?: CsdlNavigationProperty[],\n public baseType?: string,\n public openType?: boolean,\n public abstract?: boolean\n ) {}\n}\n\nexport class CsdlComplexType extends CsdlStructuredType {\n constructor(\n name: string,\n properties?: CsdlProperty[],\n navigationProperties?: CsdlNavigationProperty[],\n baseType?: string,\n openType?: boolean,\n abstract?: boolean\n ) {\n super(name, properties, navigationProperties, baseType, openType, abstract);\n }\n}\n\nexport class CsdlEntityType extends CsdlStructuredType {\n constructor(\n name: string,\n public key?: CsdlKey,\n properties?: CsdlProperty[],\n navigationProperties?: CsdlNavigationProperty[],\n baseType?: string,\n openType?: boolean,\n abstract?: boolean,\n public hasStream?: boolean\n ) {\n super(name, properties, navigationProperties, baseType, openType, abstract);\n }\n}\n\nexport class CsdlKey {\n constructor(public propertyRefs: CsdlPropertyRef[]) {}\n}\n\nexport class CsdlPropertyRef {\n constructor(public name: string, public alias?: string) {}\n}\n","export class CsdlFunction {\n constructor(\n public name: string,\n public returnType: CsdlReturnType,\n public isBound?: boolean,\n public entitySetPath?: string,\n public isComposable?: boolean,\n public parameters?: CsdlParameter[]\n ) {}\n}\n\nexport class CsdlAction {\n constructor(\n public name: string,\n public returnType?: CsdlReturnType,\n public isBound?: boolean,\n public entitySetPath?: string,\n public parameters?: CsdlParameter[]\n ) {}\n}\n\nexport class CsdlFunctionImport {\n constructor(\n public name: string,\n public functionName: string,\n public entitySet?: string,\n public IncludeInServiceDocument?: boolean\n ) {}\n}\n\nexport class CsdlActionImport {\n constructor(\n public name: string,\n public action: string,\n public entitySet?: string\n ) {}\n}\n\nexport class CsdlParameter {\n constructor(\n public name: string,\n public type: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n\nexport class CsdlReturnType {\n constructor(\n public type: string,\n public nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public srid?: string\n ) {}\n}\n","export abstract class CsdlStructuralProperty {\n constructor(\n public name: string,\n public type: string,\n public nullable?: boolean\n ) {}\n}\n\nexport class CsdlProperty extends CsdlStructuralProperty {\n constructor(\n name: string,\n type: string,\n nullable?: boolean,\n public maxLength?: number,\n public precision?: number,\n public scale?: number,\n public unicode?: boolean,\n public srid?: string,\n public defaultValue?: string\n ) {\n super(name, type, nullable);\n }\n}\n\nexport class CsdlNavigationProperty extends CsdlStructuralProperty {\n constructor(\n name: string,\n type: string,\n nullable?: boolean,\n public partner?: string,\n public containsTarget?: boolean,\n public referentialConstraints?: CsdlReferentialConstraint[],\n public onDelete?: CsdlOnDelete\n ) {\n super(name, type, nullable);\n }\n}\n\nexport class CsdlReferentialConstraint {\n constructor(public property: string, public referencedProperty: string) {}\n}\n\nexport class CsdlOnDelete {\n constructor(public action: string) {}\n}\n","import { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlEntitySet {\n constructor(\n public name: string,\n public entityType: string,\n public navigationPropertyBinding?: CsdlNavigationPropertyBinding[],\n public includeInServiceDocument?: boolean\n ) {}\n}\n","import { CsdlNavigationPropertyBinding } from './csdl-navigation-property-binding';\n\nexport class CsdlSingleton {\n constructor(\n public name: string,\n public type: string,\n public navigationPropertyBindings?: CsdlNavigationPropertyBinding[]\n ) {}\n}\n","import { CsdlEntitySet } from './csdl-entity-set';\nimport { CsdlSingleton } from './csdl-singleton';\nimport { CsdlFunctionImport, CsdlActionImport } from './csdl-function-action';\n\nexport class CsdlEntityContainer {\n constructor(\n public name: string,\n public extend?: string,\n public entitySets?: CsdlEntitySet[],\n public singletons?: CsdlSingleton[],\n public functionImports?: CsdlFunctionImport[],\n public actionImports?: CsdlActionImport[]\n ) {}\n}\n","import { CsdlAnnotable, CsdlAnnotation } from './csdl-annotation';\n\nexport class CsdlReference extends CsdlAnnotable {\n constructor(\n public uri: string,\n public includes?: CsdlInclude[],\n public includeAnnotations?: CsdlIncludeAnnotations[],\n annotationList?: CsdlAnnotation[]\n ) {\n super(annotationList);\n }\n}\n\nexport class CsdlInclude {\n constructor(public namespace: string, public alias?: string) {}\n}\n\nexport class CsdlIncludeAnnotations {\n constructor(\n public termNamespace: string,\n public qualifier?: string,\n public targetNamespace?: string\n ) {}\n}\n","export class CsdlNavigationPropertyBinding {\n constructor(public path: string, public target: string) {}\n}\n","import { CsdlTypeDefinition } from './csdl/csdl-type-definition';\nimport { CsdlSchema } from './csdl/csdl-schema';\nimport { Types } from '../../utils/types';\nimport { CsdlEnumType, CsdlEnumMember } from './csdl/csdl-enum-type';\nimport {\n CsdlEntityType,\n CsdlPropertyRef,\n CsdlKey,\n CsdlComplexType,\n} from './csdl/csdl-structured-type';\nimport {\n CsdlFunction,\n CsdlParameter,\n CsdlFunctionImport,\n CsdlActionImport,\n CsdlReturnType,\n CsdlAction,\n} from './csdl/csdl-function-action';\nimport {\n CsdlProperty,\n CsdlNavigationProperty,\n CsdlReferentialConstraint,\n CsdlOnDelete,\n} from './csdl/csdl-structural-property';\nimport { CsdlEntitySet } from './csdl/csdl-entity-set';\nimport { CsdlSingleton } from './csdl/csdl-singleton';\nimport { CsdlEntityContainer } from './csdl/csdl-entity-container';\nimport {\n CsdlReference,\n CsdlInclude,\n CsdlIncludeAnnotations,\n} from './csdl/csdl-reference';\nimport {\n CsdlAnnotation,\n CsdlTerm,\n CsdlAnnotations,\n} from './csdl/csdl-annotation';\nimport { CsdlNavigationPropertyBinding } from './csdl/csdl-navigation-property-binding';\nimport { VERSION_4_0 } from '../../constants';\n\nenum FieldType {\n ATTRIBUTE,\n TAG,\n}\n\nclass Field {\n constructor(public name: string, public fieldType: FieldType) {}\n}\n\nexport class ODataMetadata {\n // TAGS\n private static readonly TAG_EDMX = 'edmx:Edmx';\n private static readonly TAG_DATA_SERVICES = 'edmx:DataServices';\n private static readonly TAG_REFERENCE = 'edmx:Reference';\n private static readonly TAG_INCLUDE = 'edmx:Include';\n private static readonly TAG_INCLUDE_ANNOTATIONS = 'edmx:IncludeAnnotations';\n private static readonly TAG_TERM = 'Term';\n private static readonly TAG_ANNOTATIONS = 'Annotations';\n private static readonly TAG_ANNOTATION = 'Annotation';\n private static readonly TAG_SCHEMA = 'Schema';\n private static readonly TAG_ENUM_TYPE = 'EnumType';\n private static readonly TAG_MEMBER = 'Member';\n private static readonly TAG_COMPLEX_TYPE = 'ComplexType';\n private static readonly TAG_ENTITY_TYPE = 'EntityType';\n private static readonly TAG_PROPERTY = 'Property';\n private static readonly TAG_KEY = 'Key';\n private static readonly TAG_PROPERTY_REF = 'PropertyRef';\n private static readonly TAG_NAVIGATION_PROPERTY = 'NavigationProperty';\n private static readonly TAG_REFERENTIAL_CONSTRAINT = 'ReferentialConstraint';\n private static readonly TAG_ON_DELETE = 'OnDelete';\n private static readonly TAG_FUNCTION = 'Function';\n private static readonly TAG_RETURN_TYPE = 'ReturnType';\n private static readonly TAG_PARAMETER = 'Parameter';\n private static readonly TAG_ACTION = 'Action';\n private static readonly TAG_ENTITY_CONTAINER = 'EntityContainer';\n private static readonly TAG_ENTITY_SET = 'EntitySet';\n private static readonly TAG_SINGLETON = 'Singleton';\n private static readonly TAG_FUNCTION_IMPORT = 'FunctionImport';\n private static readonly TAG_ACTION_IMPORT = 'ActionImport';\n private static readonly TAG_NAVIGATION_PROPERTY_BINDING =\n 'NavigationPropertyBinding';\n private static readonly TAG_TYPE_DEFINITION = 'TypeDefinition';\n\n // ATTRIBUTES\n private static readonly ATTRIBUTE_VERSION = 'Version';\n private static readonly ATTRIBUTE_URI = 'Uri';\n private static readonly ATTRIBUTE_ALIAS = 'Alias';\n private static readonly ATTRIBUTE_NAMESPACE = 'Namespace';\n private static readonly ATTRIBUTE_TERM_NAMESPACE = 'TermNamespace';\n private static readonly ATTRIBUTE_QUALIFIER = 'Qualifier';\n private static readonly ATTRIBUTE_TARGET_NAMESPACE = 'TargetNamespace';\n private static readonly ATTRIBUTE_TERM = 'Term';\n private static readonly ATTRIBUTE_NAME = 'Name';\n private static readonly ATTRIBUTE_VALUE = 'Value';\n private static readonly ATTRIBUTE_BASE_TYPE = 'BaseType';\n private static readonly ATTRIBUTE_OPEN_TYPE = 'OpenType';\n private static readonly ATTRIBUTE_TYPE = 'Type';\n private static readonly ATTRIBUTE_NULLABLE = 'Nullable';\n private static readonly ATTRIBUTE_MAX_LENGTH = 'MaxLength';\n private static readonly ATTRIBUTE_PRECISION = 'Precision';\n private static readonly ATTRIBUTE_SCALE = 'Scale';\n private static readonly ATTRIBUTE_UNICODE = 'Unicode';\n private static readonly ATTRIBUTE_SRID = 'SRID';\n private static readonly ATTRIBUTE_DEFAULT_VALUE = 'DefaultValue';\n private static readonly ATTRIBUTE_PARTNER = 'Partner';\n private static readonly ATTRIBUTE_PROPERTY = 'Property';\n private static readonly ATTRIBUTE_REFERENCED_PROPERTY = 'ReferencedProperty';\n private static readonly ATTRIBUTE_HAS_STREAM = 'HasStream';\n private static readonly ATTRIBUTE_CONTAINS_TARGET = 'ContainsTarget';\n private static readonly ATTRIBUTE_IS_BOUND = 'IsBound';\n private static readonly ATTRIBUTE_ENTITY_SET_PATH = 'EntitySetPath';\n private static readonly ATTRIBUTE_IS_COMPOSABLE = 'IsComposable';\n private static readonly ATTRIBUTE_ENTITY_TYPE = 'EntityType';\n private static readonly ATTRIBUTE_PATH = 'Path';\n private static readonly ATTRIBUTE_TARGET = 'Target';\n private static readonly ATTRIBUTE_FUNCTION = 'Function';\n private static readonly ATTRIBUTE_ACTION = 'Action';\n private static readonly ATTRIBUTE_ENTITY_SET = 'EntitySet';\n private static readonly ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT =\n 'IncludeInServiceDocument';\n private static readonly ATTRIBUTE_ABSTRACT = 'Abstract';\n private static readonly ATTRIBUTE_UNDERLYING_TYPE = 'UnderlyingType';\n private static readonly ATTRIBUTE_IS_FLAGS = 'IsFlags';\n private static readonly ATTRIBUTE_EXTENDS = 'Extends';\n private static readonly ATTRIBUTE_BASE_TERM = 'BaseTerm';\n private static readonly ATTRIBUTE_APPLIES_TO = 'AppliesTo';\n\n public readonly version: string;\n public readonly references: CsdlReference[];\n public readonly schemas: CsdlSchema[];\n\n constructor(xml: string) {\n try {\n const parser: DOMParser = new DOMParser();\n const document: Document = parser.parseFromString(xml, 'text/xml');\n\n this.checkVersion(document);\n\n this.version = this.getFieldValueByAttribute(\n new Field(ODataMetadata.ATTRIBUTE_VERSION, FieldType.ATTRIBUTE),\n document.documentElement.attributes\n );\n\n this.references = this.getObjects(\n document.documentElement,\n ODataMetadata.TAG_REFERENCE,\n [\n new Field(ODataMetadata.ATTRIBUTE_URI, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_INCLUDE, FieldType.TAG),\n new Field(ODataMetadata.TAG_INCLUDE_ANNOTATIONS, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]\n );\n\n const dataServices: Element =\n document.documentElement.getElementsByTagName(\n ODataMetadata.TAG_DATA_SERVICES\n )[0];\n this.schemas = this.getObjects(dataServices, ODataMetadata.TAG_SCHEMA, [\n new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ENUM_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_COMPLEX_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_ENTITY_TYPE, FieldType.TAG),\n new Field(ODataMetadata.TAG_FUNCTION, FieldType.TAG),\n new Field(ODataMetadata.TAG_ACTION, FieldType.TAG),\n new Field(ODataMetadata.TAG_ENTITY_CONTAINER, FieldType.TAG),\n new Field(ODataMetadata.TAG_TYPE_DEFINITION, FieldType.TAG),\n new Field(ODataMetadata.TAG_TERM, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATIONS, FieldType.TAG),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]);\n } catch (error) {\n throw new Error('Unable to parse metadata, ' + error);\n }\n }\n\n protected checkVersion(document: Document) {\n // check version\n const attributes: NamedNodeMap = document.documentElement.attributes;\n if (!attributes) {\n throw new Error('OData version is not specified in the metadata');\n }\n const attr: Attr | null = attributes.getNamedItem('Version');\n if (attr === null) {\n throw new Error('OData version is not specified in the metadata');\n }\n const odataVersion = attr?.nodeValue;\n if (odataVersion !== VERSION_4_0) {\n throw new Error('OData version \"' + odataVersion + '\" is not supported');\n }\n }\n\n protected getObjects(\n parentElement: Element,\n tag: string,\n fieldNames: Field[]\n ): any[] {\n let objects: any[] = [];\n\n const children: HTMLCollection = parentElement.children;\n for (let index = 0; index < children.length; index++) {\n const element = children.item(index);\n\n if (!element || element.nodeName !== tag) {\n continue;\n }\n\n const attributes: NamedNodeMap = element.attributes;\n const fieldValues: any[] = this.getFieldValues(\n fieldNames,\n attributes,\n element\n );\n switch (tag) {\n case ODataMetadata.TAG_REFERENCE:\n objects.push(\n new CsdlReference(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_INCLUDE:\n objects.push(new CsdlInclude(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:\n objects.push(\n new CsdlIncludeAnnotations(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2]\n )\n );\n break;\n case ODataMetadata.TAG_TERM:\n objects.push(\n new CsdlTerm(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8],\n fieldValues[9]\n )\n );\n break;\n case ODataMetadata.TAG_ANNOTATIONS:\n objects.push(\n new CsdlAnnotations(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_ANNOTATION:\n objects.push(new CsdlAnnotation(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_SCHEMA:\n objects.push(\n new CsdlSchema(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8],\n fieldValues[9],\n fieldValues[10],\n fieldValues[11]\n )\n );\n break;\n case ODataMetadata.TAG_ENUM_TYPE:\n objects.push(\n new CsdlEnumType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_COMPLEX_TYPE:\n objects.push(\n new CsdlComplexType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n )\n );\n break;\n case ODataMetadata.TAG_ENTITY_TYPE:\n objects.push(\n new CsdlEntityType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7]\n )\n );\n break;\n case ODataMetadata.TAG_FUNCTION:\n objects.push(\n new CsdlFunction(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n )\n );\n break;\n case ODataMetadata.TAG_MEMBER:\n objects.push(new CsdlEnumMember(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_PROPERTY:\n objects.push(\n new CsdlProperty(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7],\n fieldValues[8]\n )\n );\n break;\n case ODataMetadata.TAG_PROPERTY_REF:\n objects.push(new CsdlPropertyRef(fieldValues[0], fieldValues[1]));\n break;\n case ODataMetadata.TAG_NAVIGATION_PROPERTY:\n objects.push(\n new CsdlNavigationProperty(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6]\n )\n );\n break;\n case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:\n objects.push(\n new CsdlReferentialConstraint(fieldValues[0], fieldValues[1])\n );\n break;\n case ODataMetadata.TAG_PARAMETER:\n objects.push(\n new CsdlParameter(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6]\n )\n );\n break;\n case ODataMetadata.TAG_ACTION:\n objects.push(\n new CsdlAction(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4]\n )\n );\n break;\n case ODataMetadata.TAG_ENTITY_SET:\n objects.push(\n new CsdlEntitySet(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_SINGLETON:\n objects.push(\n new CsdlSingleton(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_FUNCTION_IMPORT:\n objects.push(\n new CsdlFunctionImport(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3]\n )\n );\n break;\n case ODataMetadata.TAG_ACTION_IMPORT:\n objects.push(\n new CsdlActionImport(fieldValues[0], fieldValues[1], fieldValues[2])\n );\n break;\n case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:\n objects.push(\n new CsdlNavigationPropertyBinding(fieldValues[0], fieldValues[1])\n );\n break;\n case ODataMetadata.TAG_TYPE_DEFINITION:\n objects.push(\n new CsdlTypeDefinition(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5],\n fieldValues[6],\n fieldValues[7]\n )\n );\n break;\n default:\n throw new Error('Unknwon tag:' + tag);\n }\n }\n\n return objects;\n }\n\n protected getObject(\n parentElement: Element,\n tag: string,\n fieldNames: Field[]\n ): any {\n let object: any;\n\n const children: HTMLCollection = parentElement.children;\n let element: Element | undefined | null;\n for (let index = 0; index < children.length; index++) {\n if (children && children.item(index)?.nodeName === tag) {\n if (element !== undefined && element !== null) {\n throw new Error('Expected one ' + tag);\n }\n element = children.item(index);\n }\n }\n\n if (element !== undefined && element !== null) {\n const attributes: NamedNodeMap = element.attributes;\n const fieldValues: any[] = this.getFieldValues(\n fieldNames,\n attributes,\n element\n );\n switch (tag) {\n case ODataMetadata.TAG_KEY:\n object = new CsdlKey(fieldValues[0]);\n break;\n case ODataMetadata.TAG_RETURN_TYPE:\n object = new CsdlReturnType(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n );\n break;\n case ODataMetadata.TAG_ENTITY_CONTAINER:\n object = new CsdlEntityContainer(\n fieldValues[0],\n fieldValues[1],\n fieldValues[2],\n fieldValues[3],\n fieldValues[4],\n fieldValues[5]\n );\n break;\n case ODataMetadata.TAG_ON_DELETE:\n object = new CsdlOnDelete(fieldValues[0]);\n break;\n default:\n throw new Error('Unknwon tag:' + tag);\n }\n }\n\n return object;\n }\n\n protected getFieldValues(\n fields: Field[],\n attributes: NamedNodeMap,\n element: Element\n ): any[] {\n const fieldValues: any[] = [];\n\n for (const field of fields) {\n if (field.fieldType === FieldType.TAG) {\n fieldValues.push(this.getFieldValueByTag(field, element));\n } else if (field.fieldType === FieldType.ATTRIBUTE) {\n fieldValues.push(this.getFieldValueByAttribute(field, attributes));\n } else {\n throw new Error('Unknown field type: ' + field.fieldType);\n }\n }\n\n return fieldValues;\n }\n\n protected getFieldValueByAttribute(\n field: Field,\n attributes: NamedNodeMap\n ): any {\n switch (field.name) {\n case ODataMetadata.ATTRIBUTE_VERSION:\n case ODataMetadata.ATTRIBUTE_URI:\n case ODataMetadata.ATTRIBUTE_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_ALIAS:\n case ODataMetadata.ATTRIBUTE_TERM_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_TERM:\n case ODataMetadata.ATTRIBUTE_QUALIFIER:\n case ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE:\n case ODataMetadata.ATTRIBUTE_NAME:\n case ODataMetadata.ATTRIBUTE_TYPE:\n case ODataMetadata.ATTRIBUTE_SRID:\n case ODataMetadata.ATTRIBUTE_DEFAULT_VALUE:\n case ODataMetadata.ATTRIBUTE_PARTNER:\n case ODataMetadata.ATTRIBUTE_PROPERTY:\n case ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY:\n case ODataMetadata.ATTRIBUTE_BASE_TYPE:\n case ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH:\n case ODataMetadata.ATTRIBUTE_ENTITY_TYPE:\n case ODataMetadata.ATTRIBUTE_PATH:\n case ODataMetadata.ATTRIBUTE_TARGET:\n case ODataMetadata.ATTRIBUTE_FUNCTION:\n case ODataMetadata.ATTRIBUTE_ACTION:\n case ODataMetadata.ATTRIBUTE_ENTITY_SET:\n case ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE:\n case ODataMetadata.ATTRIBUTE_EXTENDS:\n case ODataMetadata.ATTRIBUTE_BASE_TERM:\n case ODataMetadata.ATTRIBUTE_APPLIES_TO:\n return this.getAttributeValue(attributes, field.name);\n case ODataMetadata.ATTRIBUTE_NULLABLE:\n case ODataMetadata.ATTRIBUTE_UNICODE:\n case ODataMetadata.ATTRIBUTE_OPEN_TYPE:\n case ODataMetadata.ATTRIBUTE_HAS_STREAM:\n case ODataMetadata.ATTRIBUTE_IS_BOUND:\n case ODataMetadata.ATTRIBUTE_IS_COMPOSABLE:\n case ODataMetadata.ATTRIBUTE_CONTAINS_TARGET:\n case ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT:\n case ODataMetadata.ATTRIBUTE_ABSTRACT:\n case ODataMetadata.ATTRIBUTE_IS_FLAGS:\n return this.propertyValueToBoolean(\n this.getAttributeValue(attributes, field.name)\n );\n case ODataMetadata.ATTRIBUTE_VALUE:\n case ODataMetadata.ATTRIBUTE_MAX_LENGTH:\n case ODataMetadata.ATTRIBUTE_PRECISION:\n case ODataMetadata.ATTRIBUTE_SCALE:\n return this.propertyValueToNumber(\n this.getAttributeValue(attributes, field.name)\n );\n default:\n throw new Error('Unknwon attribute:' + field.name);\n }\n }\n\n protected getFieldValueByTag(field: Field, element: Element): any[] {\n switch (field.name) {\n case ODataMetadata.TAG_INCLUDE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAMESPACE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_INCLUDE_ANNOTATIONS:\n return this.getObjects(element, field.name, [\n new Field(\n ODataMetadata.ATTRIBUTE_TERM_NAMESPACE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_TARGET_NAMESPACE,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_TERM:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TERM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_APPLIES_TO, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ANNOTATIONS:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ANNOTATION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TERM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_QUALIFIER, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ENUM_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_MEMBER, FieldType.TAG),\n new Field(\n ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_IS_FLAGS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_COMPLEX_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ENTITY_TYPE:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_KEY, FieldType.TAG),\n new Field(ODataMetadata.TAG_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.TAG_NAVIGATION_PROPERTY, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_BASE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_OPEN_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_HAS_STREAM, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ABSTRACT, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_FUNCTION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_IS_COMPOSABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_MEMBER:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_VALUE, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_PROPERTY:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_DEFAULT_VALUE, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_KEY:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.TAG_PROPERTY_REF, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_PROPERTY_REF:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ALIAS, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_NAVIGATION_PROPERTY:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PARTNER, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_CONTAINS_TARGET,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.TAG_REFERENTIAL_CONSTRAINT, FieldType.TAG),\n new Field(ODataMetadata.TAG_ON_DELETE, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_REFERENTIAL_CONSTRAINT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_PROPERTY, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_REFERENCED_PROPERTY,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_ON_DELETE:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_PARAMETER:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_RETURN_TYPE:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_NULLABLE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_ACTION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_RETURN_TYPE, FieldType.TAG),\n new Field(ODataMetadata.ATTRIBUTE_IS_BOUND, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_ENTITY_SET_PATH,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.TAG_PARAMETER, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_ENTITY_CONTAINER:\n return this.getObject(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_EXTENDS, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ENTITY_SET, FieldType.TAG),\n new Field(ODataMetadata.TAG_SINGLETON, FieldType.TAG),\n new Field(ODataMetadata.TAG_FUNCTION_IMPORT, FieldType.TAG),\n new Field(ODataMetadata.TAG_ACTION_IMPORT, FieldType.TAG),\n ]);\n case ODataMetadata.TAG_ENTITY_SET:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_TYPE, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING,\n FieldType.TAG\n ),\n new Field(\n ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_SINGLETON:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TYPE, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING,\n FieldType.TAG\n ),\n ]);\n case ODataMetadata.TAG_FUNCTION_IMPORT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_FUNCTION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_INCLUDE_IN_SERVICE_DOCUMENT,\n FieldType.ATTRIBUTE\n ),\n ]);\n case ODataMetadata.TAG_ACTION_IMPORT:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ACTION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_ENTITY_SET, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_NAVIGATION_PROPERTY_BINDING:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_PATH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_TARGET, FieldType.ATTRIBUTE),\n ]);\n case ODataMetadata.TAG_TYPE_DEFINITION:\n return this.getObjects(element, field.name, [\n new Field(ODataMetadata.ATTRIBUTE_NAME, FieldType.ATTRIBUTE),\n new Field(\n ODataMetadata.ATTRIBUTE_UNDERLYING_TYPE,\n FieldType.ATTRIBUTE\n ),\n new Field(ODataMetadata.ATTRIBUTE_MAX_LENGTH, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_PRECISION, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SCALE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_UNICODE, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.ATTRIBUTE_SRID, FieldType.ATTRIBUTE),\n new Field(ODataMetadata.TAG_ANNOTATION, FieldType.TAG),\n ]);\n default:\n throw new Error('Unknwon tag:' + field.name);\n }\n }\n\n protected getAttributeValue(attributes: NamedNodeMap, attributeName: string) {\n const attribute: Attr | null = attributes.getNamedItem(attributeName);\n return attribute !== null && attribute.nodeValue\n ? attribute.nodeValue\n : undefined;\n }\n\n protected propertyValueToNumber(attributeValue?: string) {\n return attributeValue !== undefined ? Number(attributeValue) : undefined;\n }\n\n protected propertyValueToBoolean(attributeValue?: string) {\n return attributeValue !== undefined ? attributeValue === 'true' : false;\n }\n}\n","import {\n HttpHeaders,\n HttpErrorResponse,\n HttpResponse,\n} from '@angular/common/http';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { finalize, map, switchMap } from 'rxjs/operators';\n\nimport { ODataPathSegments } from '../path-segments';\nimport { ODataResource } from '../resource';\nimport {\n BOUNDARY_PREFIX_SUFFIX,\n APPLICATION_JSON,\n HTTP11,\n CONTENT_TYPE,\n NEWLINE,\n BATCH_PREFIX,\n $BATCH,\n MULTIPART_MIXED_BOUNDARY,\n VERSION_4_0,\n MULTIPART_MIXED,\n ODATA_VERSION,\n ACCEPT,\n CONTENT_TRANSFER_ENCODING,\n APPLICATION_HTTP,\n CONTENT_ID,\n BINARY,\n CHANGESET_PREFIX,\n NEWLINE_REGEXP,\n} from '../../constants';\nimport { ODataRequest } from '../request';\nimport { ODataApi } from '../../api';\nimport { ODataResponse } from '../responses';\nimport { HttpOptions } from './options';\nimport { Http } from '../../utils/http';\nimport { PathSegmentNames } from '../../types';\n\nconst XSSI_PREFIX = /^\\)\\]\\}',?\\n/;\n\n// From https://github.com/adamhalasz/uniqid\nvar glast: number;\nfunction now() {\n let time = Date.now();\n let last = glast || time;\n return (glast = time > last ? time : last + 1);\n}\nfunction uniqid(prefix?: string, suffix?: string): string {\n return (prefix ? prefix : '') + now().toString(36) + (suffix ? suffix : '');\n}\n\nfunction getHeaderValue(header: string): string {\n let res: string = header.split(';')[0].trim();\n res = res.split(':')[1].trim();\n return res;\n}\n\nfunction getBoundaryDelimiter(contentType: string): string {\n const contentTypeParts: string[] = contentType.split(';');\n if (contentTypeParts.length === 2) {\n const boundary: string = contentType.split(';')[1].trim();\n const boundaryDelimiter: string =\n BOUNDARY_PREFIX_SUFFIX + boundary.split('=')[1];\n return boundaryDelimiter;\n } else {\n return '';\n }\n}\n\nfunction getBoundaryEnd(boundaryDelimiter: string): string {\n if (!boundaryDelimiter.length) {\n return '';\n }\n const boundaryEnd: string = boundaryDelimiter + BOUNDARY_PREFIX_SUFFIX;\n return boundaryEnd;\n}\n\nexport class ODataBatchRequest<T> extends Subject<ODataResponse<T>> {\n constructor(public request: ODataRequest<any>) {\n super();\n }\n\n toString() {\n //TODO: Relative or Absolute url ?\n let res = [\n `${this.request.method} ${this.request.pathWithParams} ${HTTP11}`,\n ];\n if (\n this.request.method === 'POST' ||\n this.request.method === 'PATCH' ||\n this.request.method === 'PUT'\n ) {\n res.push(`${CONTENT_TYPE}: ${APPLICATION_JSON}`);\n }\n\n if (this.request.headers instanceof HttpHeaders) {\n let headers = this.request.headers;\n res = [\n ...res,\n ...headers\n .keys()\n .map((key) => `${key}: ${(headers.getAll(key) || []).join(',')}`),\n ];\n }\n\n return res.join(NEWLINE);\n }\n\n onLoad(content: string[], status: { code: number; text: string }) {\n let headers: HttpHeaders = new HttpHeaders();\n var index = 1;\n for (; index < content.length; index++) {\n const batchBodyLine: string = content[index];\n\n if (batchBodyLine === '') {\n break;\n }\n\n const batchBodyLineParts: string[] = batchBodyLine.split(': ');\n headers = headers.append(\n batchBodyLineParts[0].trim(),\n batchBodyLineParts[1].trim()\n );\n }\n\n let body: string | { error: any; text: string } = '';\n for (; index < content.length; index++) {\n body += content[index];\n }\n\n if (status.code === 0) {\n status.code = !!body ? 200 : 0;\n }\n\n let ok = status.code >= 200 && status.code < 300;\n if (this.request.responseType === 'json' && typeof body === 'string') {\n const originalBody = body;\n body = body.replace(XSSI_PREFIX, '');\n try {\n body = body !== '' ? JSON.parse(body) : null;\n } catch (error) {\n body = originalBody;\n\n if (ok) {\n ok = false;\n body = { error, text: body };\n }\n }\n }\n\n if (ok) {\n let res = new HttpResponse<any>({\n body,\n headers,\n status: status.code,\n statusText: status.text,\n url: this.request.urlWithParams,\n });\n this.next(ODataResponse.fromHttpResponse(this.request, res));\n this.complete();\n } else {\n // An unsuccessful request is delivered on the error channel.\n this.error(\n new HttpErrorResponse({\n // The error in this case is the response body (error from the server).\n error: body,\n headers,\n status: status.code,\n statusText: status.text,\n url: this.request.urlWithParams,\n })\n );\n }\n }\n\n onError(content: string[], status: { code: number; text: string }) {\n const res = new HttpErrorResponse({\n error: content.join(NEWLINE),\n status: status.code || 0,\n statusText: status.text || 'Unknown Error',\n url: this.request.urlWithParams || undefined,\n });\n this.error(res);\n }\n}\n\n/**\n * OData Batch Resource\n * https://www.odata.org/getting-started/advanced-tutorial/#batch\n */\nexport class ODataBatchResource extends ODataResource<any> {\n // VARIABLES\n private requests: ODataBatchRequest<any>[] = [];\n\n clone() {\n //TODO: Clone\n return new ODataBatchResource(this.api, this.cloneSegments());\n }\n\n schema() {\n return undefined;\n }\n\n //#region Factory\n static factory(api: ODataApi) {\n let segments = new ODataPathSegments();\n segments.add(PathSegmentNames.batch, $BATCH);\n return new ODataBatchResource(api, segments);\n }\n //#endregion\n\n post(\n func: (batch: ODataBatchResource) => void,\n options?: HttpOptions\n ): Observable<ODataResponse<any>> {\n const current = this.api.request;\n this.api.request = (req: ODataRequest<any>): Observable<any> => {\n if (req.api !== this.api)\n throw new Error('Batch Request are for the same api.');\n if (req.observe === 'events')\n throw new Error(\"Batch Request does not allows observe == 'events'.\");\n this.requests.push(new ODataBatchRequest<any>(req));\n return this.requests[this.requests.length - 1];\n };\n\n func(this);\n\n const sub$ = new BehaviorSubject<{\n bound: string;\n requests: ODataBatchRequest<any>[];\n }>({\n bound: uniqid(BATCH_PREFIX),\n requests: this.requests,\n });\n\n return sub$.pipe(\n switchMap(({ bound, requests }) => {\n const headers = Http.mergeHttpHeaders(\n (options && options.headers) || {},\n {\n [ODATA_VERSION]: VERSION_4_0,\n [CONTENT_TYPE]: MULTIPART_MIXED_BOUNDARY + bound,\n [ACCEPT]: MULTIPART_MIXED,\n }\n );\n const request = new ODataRequest({\n method: 'POST',\n body: ODataBatchResource.buildBody(bound, requests),\n api: this.api,\n resource: this,\n observe: 'response',\n responseType: 'text',\n headers: headers,\n params: options ? options.params : undefined,\n withCredentials: options ? options.withCredentials : undefined,\n });\n return current\n .call(this.api, request)\n .pipe(map((response) => ({ requests, response })));\n }),\n map(({ requests, response }) => {\n this.requests = [];\n ODataBatchResource.handleResponse(requests, response);\n if (this.requests.length > 0) {\n sub$.next({ bound: uniqid(BATCH_PREFIX), requests: this.requests });\n } else sub$.complete();\n return response;\n }),\n finalize(() => {\n this.api.request = current;\n })\n );\n }\n\n body() {\n return ODataBatchResource.buildBody(uniqid(BATCH_PREFIX), this.requests);\n }\n\n static buildBody(\n batchBoundary: string,\n requests: ODataBatchRequest<any>[]\n ): string {\n let res = [];\n let changesetBoundary: string | null = null;\n let changesetId = 1;\n\n for (const batch of requests) {\n // if method is GET and there is a changeset boundary open then close it\n if (batch.request.method === 'GET' && changesetBoundary !== null) {\n res.push(\n `${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}${BOUNDARY_PREFIX_SUFFIX}`\n );\n changesetBoundary = null;\n }\n\n // if there is no changeset boundary open then open a batch boundary\n if (changesetBoundary === null) {\n res.push(`${BOUNDARY_PREFIX_SUFFIX}${batchBoundary}`);\n }\n\n // if method is not GET and there is no changeset boundary open then open a changeset boundary\n if (batch.request.method !== 'GET') {\n if (changesetBoundary === null) {\n changesetBoundary = uniqid(CHANGESET_PREFIX);\n res.push(\n `${CONTENT_TYPE}: ${MULTIPART_MIXED_BOUNDARY}${changesetBoundary}`\n );\n res.push(NEWLINE);\n }\n res.push(`${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}`);\n }\n\n res.push(`${CONTENT_TYPE}: ${APPLICATION_HTTP}`);\n res.push(`${CONTENT_TRANSFER_ENCODING}: ${BINARY}`);\n\n if (batch.request.method !== 'GET') {\n res.push(`${CONTENT_ID}: ${changesetId++}`);\n }\n\n res.push(NEWLINE);\n res.push(`${batch}`);\n\n if (batch.request.method === 'GET' || batch.request.method === 'DELETE') {\n res.push(NEWLINE);\n } else {\n res.push(`${NEWLINE}${JSON.stringify(batch.request.body)}`);\n }\n }\n\n if (res.length) {\n if (changesetBoundary !== null) {\n res.push(\n `${BOUNDARY_PREFIX_SUFFIX}${changesetBoundary}${BOUNDARY_PREFIX_SUFFIX}`\n );\n changesetBoundary = null;\n }\n res.push(\n `${BOUNDARY_PREFIX_SUFFIX}${batchBoundary}${BOUNDARY_PREFIX_SUFFIX}`\n );\n }\n return res.join(NEWLINE);\n }\n\n static handleResponse(\n requests: ODataBatchRequest<any>[],\n response: ODataResponse<any>\n ) {\n let chunks: string[][] = [];\n const contentType: string = response.headers.get(CONTENT_TYPE) || '';\n const batchBoundary: string = getBoundaryDelimiter(contentType);\n const endLine: string = getBoundaryEnd(batchBoundary);\n\n const lines: string[] = response.body.split(NEWLINE_REGEXP);\n\n let changesetResponses: string[][] | null = null;\n let contentId: number | null = null;\n let changesetBoundary: string | null = null;\n let changesetEndLine: string | null = null;\n let startIndex: number | null = null;\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index];\n\n if (line.startsWith(CONTENT_TYPE)) {\n const contentTypeValue: string = getHeaderValue(line);\n if (contentTypeValue === MULTIPART_MIXED) {\n changesetResponses = [];\n contentId = null;\n changesetBoundary = getBoundaryDelimiter(line);\n changesetEndLine = getBoundaryEnd(changesetBoundary);\n startIndex = null;\n }\n continue;\n } else if (changesetResponses !== null && line.startsWith(CONTENT_ID)) {\n contentId = Number(getHeaderValue(line));\n } else if (line.startsWith(HTTP11)) {\n startIndex = index;\n } else if (\n line === batchBoundary ||\n line === changesetBoundary ||\n line === endLine ||\n line === changesetEndLine\n ) {\n if (!startIndex) {\n continue;\n }\n const chunk = lines.slice(startIndex, index);\n if (changesetResponses !== null && contentId !== null) {\n changesetResponses[contentId] = chunk;\n } else {\n chunks.push(chunk);\n }\n\n if (line === batchBoundary || line === changesetBoundary) {\n startIndex = index + 1;\n } else if (line === endLine || line === changesetEndLine) {\n if (changesetResponses !== null) {\n for (const response of changesetResponses) {\n if (response) {\n chunks.push(response);\n }\n }\n }\n changesetResponses = null;\n changesetBoundary = null;\n changesetEndLine = null;\n startIndex = null;\n }\n }\n }\n chunks.forEach((chunk, index) => {\n const req = requests[index];\n const statusParts = chunk[0].split(' ');\n req.onLoad(chunk.slice(1), {\n code: Number(statusParts[1]),\n text: statusParts.slice(2).join(' '),\n });\n });\n }\n}\n","import { Observable } from 'rxjs';\n\nimport { ODataPathSegments } from '../path-segments';\nimport { ODataQueryOptions } from '../query-options';\nimport { ODataResource } from '../resource';\nimport { HttpOptions } from './options';\nimport { $COUNT } from '../../constants';\nimport { ODataApi } from '../../api';\nimport { Filter } from '../builder';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\n\nexport class ODataCountResource extends ODataResource<any> {\n //#region Factory\n static factory(\n api: ODataApi,\n segments: ODataPathSegments,\n query: ODataQueryOptions\n ) {\n segments.add(PathSegmentNames.count, $COUNT).type('Edm.Int32');\n query.keep(QueryOptionNames.filter, QueryOptionNames.search);\n return new ODataCountResource(api, segments, query);\n }\n //#endregion\n\n clone() {\n return new ODataCountResource(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n schema() {\n return undefined;\n }\n\n get segment() {\n const segments = this.pathSegments;\n return {\n entitySet() {\n return segments.get(PathSegmentNames.entitySet);\n },\n navigationProperty() {\n return segments.get(PathSegmentNames.navigationProperty);\n },\n };\n }\n\n get query() {\n const options = this.queryOptions;\n return {\n search(opts?: string) {\n return options.option<string>(QueryOptionNames.search, opts);\n },\n filter(opts?: Filter) {\n return options.option<Filter>(QueryOptionNames.filter, opts);\n },\n };\n }\n\n //#region Requests\n get(options?: HttpOptions): Observable<number> {\n return super.get({ responseType: 'value', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n fetch(options?: HttpOptions): Observable<number> {\n return this.get(options);\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { ODataPathSegments } from '../path-segments';\nimport { ODataQueryOptions } from '../query-options';\nimport {\n HttpEntityOptions,\n HttpEntitiesOptions,\n HttpPropertyOptions,\n HttpOptions,\n HttpNoneOptions,\n} from './options';\n\nimport {\n ODataEntity,\n ODataEntities,\n ODataProperty,\n ODataEntityAnnotations,\n ODataEntitiesAnnotations,\n} from '../responses';\nimport { ODataApi } from '../../api';\nimport { ODataCollection } from '../../models/collection';\nimport { ODataModel } from '../../models/model';\nimport { Expand, Filter, OrderBy, Select, Transform } from '../builder';\nimport { ODataEntitySetResource } from './entity-set';\nimport { ODataEntityResource } from './entity';\nimport { ODataStructuredType } from '../../schema';\nimport { ODataResource } from '../resource';\nimport { alias as functionAlias } from '../builder';\nimport { PathSegmentNames } from '../../types';\n\nexport class ODataFunctionResource<P, R> extends ODataResource<R> {\n //#region Factory\n static factory<P, R>(\n api: ODataApi,\n path: string,\n type: string | undefined,\n segments: ODataPathSegments,\n options: ODataQueryOptions\n ) {\n const segment = segments.add(PathSegmentNames.function, path);\n if (type) segment.type(type);\n options.clear();\n return new ODataFunctionResource<P, R>(api, segments, options);\n }\n //#endregion\n\n returnType() {\n return this.schema()?.parser.return?.type;\n }\n clone() {\n return new ODataFunctionResource<P, R>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n //TODO: Binding Type\n let type = this.type();\n return type !== undefined\n ? this.api.findCallableForType<R>(type)\n : undefined;\n }\n asModel<M extends ODataModel<R>>(\n entity: Partial<R> | { [name: string]: any },\n { annots, reset }: { annots?: ODataEntityAnnotations; reset?: boolean } = {}\n ): M {\n let resource: ODataEntityResource<R> | undefined;\n const type = annots?.type || this.returnType();\n const Model = this.api.modelForType(type);\n let path = annots?.entitySet;\n if (path !== undefined) {\n resource = this.api.entitySet<R>(path).entity(entity as Partial<R>);\n resource.query.apply(this.queryOptions.toQueryArguments());\n }\n return new Model(entity, { resource, annots, reset }) as M;\n }\n\n asCollection<M extends ODataModel<R>, C extends ODataCollection<R, M>>(\n entities: Partial<R>[] | { [name: string]: any }[],\n {\n annots,\n reset,\n }: { annots?: ODataEntitiesAnnotations; reset?: boolean } = {}\n ): C {\n let resource: ODataEntitySetResource<R> | undefined;\n const type = annots?.type || this.returnType();\n const Collection = this.api.collectionForType(type);\n let path = annots?.entitySet;\n if (path !== undefined) {\n resource = this.api.entitySet<R>(path);\n resource.query.apply(this.queryOptions.toQueryArguments());\n }\n return new Collection(entities, { resource, annots, reset }) as C;\n }\n\n //#region Inmutable Resource\n parameters(params: P | null, { alias }: { alias?: boolean } = {}) {\n const segments = this.cloneSegments();\n const segment = segments.get(PathSegmentNames.function);\n let parameters = params !== null ? this.encode(params) : null;\n if (alias && parameters !== null) {\n parameters = Object.entries(parameters).reduce((acc, [name, param]) => {\n return Object.assign(acc, { [name]: functionAlias(param, name) });\n }, {});\n }\n segment.parameters(parameters);\n return new ODataFunctionResource<P, R>(\n this.api,\n segments,\n this.cloneQuery()\n );\n }\n\n select(opts: Select<R>) {\n const clone = this.clone();\n clone.query.select(opts);\n return clone;\n }\n\n expand(opts: Expand<R>) {\n const clone = this.clone();\n clone.query.expand(opts);\n return clone;\n }\n\n transform(opts: Transform<R>) {\n const clone = this.clone();\n clone.query.transform(opts);\n return clone;\n }\n\n search(opts: string) {\n const clone = this.clone();\n clone.query.search(opts);\n return clone;\n }\n\n filter(opts: Filter) {\n const clone = this.clone();\n clone.query.filter(opts);\n return clone;\n }\n\n orderBy(opts: OrderBy<R>) {\n const clone = this.clone();\n clone.query.orderBy(opts);\n return clone;\n }\n\n format(opts: string) {\n const clone = this.clone();\n clone.query.format(opts);\n return clone;\n }\n\n top(opts: number) {\n const clone = this.clone();\n clone.query.top(opts);\n return clone;\n }\n\n skip(opts: number) {\n const clone = this.clone();\n clone.query.skip(opts);\n return clone;\n }\n\n skiptoken(opts: string) {\n const clone = this.clone();\n clone.query.skiptoken(opts);\n return clone;\n }\n //#endregion\n\n //#region Mutable Resource\n get segment() {\n const segments = this.pathSegments;\n return {\n entitySet() {\n return segments.get(PathSegmentNames.entitySet);\n },\n singleton() {\n return segments.get(PathSegmentNames.singleton);\n },\n function() {\n return segments.get(PathSegmentNames.function);\n },\n };\n }\n\n /**\n * Handle query options of the function\n * @returns Handler for mutate the query of the function\n */\n get query() {\n return this.entitiesQueryHandler();\n }\n //#endregion\n\n //#region Requests\n get(options?: HttpEntityOptions): Observable<ODataEntity<R>>;\n get(options?: HttpEntitiesOptions): Observable<ODataEntities<R>>;\n get(options?: HttpPropertyOptions): Observable<ODataProperty<R>>;\n get(\n options?: HttpEntityOptions & HttpEntitiesOptions & HttpPropertyOptions\n ): Observable<any> {\n return super.get(options);\n }\n //#endregion\n\n //#region Shortcuts\n call(\n params: P | null,\n options?: { alias?: boolean } & HttpEntityOptions\n ): Observable<ODataEntity<R>>;\n call(\n params: P | null,\n options?: { alias?: boolean } & HttpEntitiesOptions\n ): Observable<ODataEntities<R>>;\n call(\n params: P | null,\n options?: { alias?: boolean } & HttpPropertyOptions\n ): Observable<ODataProperty<R>>;\n call(\n params: P | null,\n options?: { alias?: boolean } & HttpNoneOptions\n ): Observable<null>;\n call(\n params: P | null,\n {\n alias,\n ...options\n }: { alias?: boolean } & HttpEntityOptions &\n HttpEntitiesOptions &\n HttpPropertyOptions &\n HttpNoneOptions = {}\n ): Observable<any> {\n return this.parameters(params, { alias }).get(options);\n }\n\n callProperty(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & HttpOptions = {}\n ): Observable<R | null> {\n return this.call(params, {\n responseType: 'property',\n alias,\n ...options,\n }).pipe(map(({ property }) => property));\n }\n\n callEntity(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & HttpOptions = {}\n ): Observable<R | null> {\n return this.call(params, {\n responseType: 'entity',\n alias,\n ...options,\n }).pipe(map(({ entity }) => entity));\n }\n\n callModel(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & HttpOptions = {}\n ): Observable<ODataModel<R> | null> {\n return this.call(params, {\n responseType: 'entity',\n alias,\n ...options,\n }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel(entity, { annots, reset: true }) : null\n )\n );\n }\n\n callEntities(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & HttpOptions = {}\n ): Observable<R[] | null> {\n return this.call(params, {\n responseType: 'entities',\n alias,\n ...options,\n }).pipe(map(({ entities }) => entities));\n }\n\n callCollection(\n params: P | null,\n { alias, ...options }: { alias?: boolean } & HttpOptions = {}\n ): Observable<ODataCollection<R, ODataModel<R>> | null> {\n return this.call(params, {\n responseType: 'entities',\n alias,\n ...options,\n }).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection(entities, { annots, reset: true }) : null\n )\n );\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\n\nimport { ODataResource } from '../resource';\nimport { ODataPathSegments } from '../path-segments';\nimport { ODataQueryOptions } from '../query-options';\nimport { ODataEntityResource } from './entity';\nimport { HttpOptions } from './options';\nimport { $REF, $ID, ODATA_ID } from '../../constants';\nimport { ODataApi } from '../../api';\nimport { PathSegmentNames } from '../../types';\n\nexport class ODataReferenceResource extends ODataResource<any> {\n //#region Factory\n static factory<P>(\n api: ODataApi,\n segments: ODataPathSegments,\n options: ODataQueryOptions\n ) {\n segments.add(PathSegmentNames.reference, $REF);\n options.clear();\n return new ODataReferenceResource(api, segments, options);\n }\n //#endregion\n\n clone() {\n return new ODataReferenceResource(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n return undefined;\n }\n\n //#region Requests\n post(\n target: ODataEntityResource<any>,\n options?: HttpOptions\n ): Observable<any> {\n return super.post({ [ODATA_ID]: target.endpointUrl(false) }, options);\n }\n\n put(\n target: ODataEntityResource<any>,\n options?: HttpOptions & { etag?: string }\n ): Observable<any> {\n return super.post({ [ODATA_ID]: target.endpointUrl(false) }, options);\n }\n\n delete({\n etag,\n target,\n ...options\n }: {\n etag?: string;\n target?: ODataEntityResource<any>;\n } & HttpOptions = {}): Observable<any> {\n if (target) {\n options.params = { [$ID]: target.endpointUrl(false) };\n }\n return super.delete({ etag, ...options });\n }\n //#endregion\n\n //#region Shortcuts for collections\n add(\n target: ODataEntityResource<any>,\n options?: HttpOptions\n ): Observable<any> {\n return this.post(target, options);\n }\n\n remove(\n target?: ODataEntityResource<any>,\n options?: HttpOptions\n ): Observable<any> {\n return this.delete({ target, ...options });\n }\n //#region\n\n //#region Shortcuts for single\n set(\n target: ODataEntityResource<any>,\n options?: HttpOptions & { etag?: string }\n ): Observable<any> {\n return this.put(target, options);\n }\n\n unset(options?: HttpOptions & { etag?: string }): Observable<any> {\n return this.delete(options);\n }\n //#region\n}\n","import { Observable } from 'rxjs';\n\nimport { ODataResource } from '../resource';\nimport { ODataPathSegments } from '../path-segments';\nimport { ODataQueryOptions } from '../query-options';\nimport { HttpOptions } from './options';\nimport { $VALUE } from '../../constants';\nimport { ODataApi } from '../../api';\nimport { PathSegmentNames } from '../../types';\n\nexport class ODataValueResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<V>(\n api: ODataApi,\n type: string | undefined,\n segments: ODataPathSegments,\n options: ODataQueryOptions\n ) {\n const segment = segments.add(PathSegmentNames.value, $VALUE);\n if (type) segment.type(type);\n options.clear();\n return new ODataValueResource<V>(api, segments, options);\n }\n //#endregion\n\n clone() {\n return new ODataValueResource<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n return undefined;\n }\n\n //#region Requests\n get(options?: HttpOptions): Observable<T> {\n return super.get({ responseType: 'value', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n fetch(options?: HttpOptions): Observable<T> {\n return this.get(options);\n }\n //#endregion\n}\n","import { EMPTY, Observable } from 'rxjs';\nimport { concatMap, expand, map, toArray } from 'rxjs/operators';\n\nimport { ODataValueResource } from './value';\n\nimport { EntityKey, ODataResource } from '../resource';\nimport { ODataQueryOptions } from '../query-options';\nimport { ODataPathSegments } from '../path-segments';\nimport {\n HttpPropertyOptions,\n HttpEntitiesOptions,\n HttpEntityOptions,\n HttpOptions,\n} from './options';\nimport {\n ODataProperty,\n ODataEntities,\n ODataEntity,\n ODataEntityAnnotations,\n ODataEntitiesAnnotations,\n} from '../responses';\nimport { ODataStructuredTypeParser } from '../../parsers/structured-type';\nimport { ODataModel, ODataCollection } from '../../models';\nimport { ODataApi } from '../../api';\nimport {\n Expand,\n Filter,\n isQueryCustomType,\n OrderBy,\n Select,\n Transform,\n} from '../builder';\n//import { ODataNavigationPropertyResource } from './navigation-property';\nimport { Objects, Types } from '../../utils';\nimport { PathSegmentNames } from '../../types';\n\nexport class ODataPropertyResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<P>(\n api: ODataApi,\n path: string,\n type: string | undefined,\n segments: ODataPathSegments,\n options: ODataQueryOptions\n ) {\n const segment = segments.add(PathSegmentNames.property, path);\n if (type) segment.type(type);\n options.clear();\n return new ODataPropertyResource<P>(api, segments, options);\n }\n //#endregion\n\n clone() {\n return new ODataPropertyResource<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n let type = this.type();\n return type !== undefined\n ? this.api.findStructuredTypeForType<T>(type)\n : undefined;\n }\n\n asModel<M extends ODataModel<T>>(\n entity: Partial<T> | { [name: string]: any },\n { annots, reset }: { annots?: ODataEntityAnnotations; reset?: boolean } = {}\n ): M {\n const type = annots?.type || this.type();\n const Model = this.api.modelForType(type);\n return new Model(entity, { resource: this, annots, reset }) as M;\n }\n\n asCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n entities: Partial<T>[] | { [name: string]: any }[],\n {\n annots,\n reset,\n }: { annots?: ODataEntitiesAnnotations; reset?: boolean } = {}\n ): C {\n const type = annots?.type || this.type();\n const Collection = this.api.collectionForType(type);\n return new Collection(entities, { resource: this, annots, reset }) as C;\n }\n\n //#region Inmutable Resource\n key(value: any) {\n const property = this.clone();\n var key = this.resolveKey(value);\n if (key !== undefined) property.segment.property().key(key);\n return property;\n }\n\n keys(values: any[]) {\n const property = this.clone();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n property.segment.keys(keys);\n return property;\n }\n\n value() {\n return ODataValueResource.factory<T>(\n this.api,\n this.type(),\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n /*\n navigationProperty<N>(path: string) {\n let type = this.type();\n if (type !== undefined) {\n let parser = this.api.parserForType<N>(type);\n type =\n parser instanceof ODataStructuredTypeParser\n ? parser.typeFor(path)\n : undefined;\n }\n return ODataNavigationPropertyResource.factory<N>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n */\n property<P>(path: string) {\n let type = this.type();\n if (type !== undefined) {\n let parser = this.api.parserForType<P>(type);\n type =\n parser instanceof ODataStructuredTypeParser\n ? parser.typeFor(path)\n : undefined;\n }\n return ODataPropertyResource.factory<P>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n select(opts: Select<T>) {\n const clone = this.clone();\n clone.query.select(opts);\n return clone;\n }\n\n expand(opts: Expand<T>) {\n const clone = this.clone();\n clone.query.expand(opts);\n return clone;\n }\n\n transform(opts: Transform<T>) {\n const clone = this.clone();\n clone.query.transform(opts);\n return clone;\n }\n\n search(opts: string) {\n const clone = this.clone();\n clone.query.search(opts);\n return clone;\n }\n\n filter(opts: Filter) {\n const clone = this.clone();\n clone.query.filter(opts);\n return clone;\n }\n\n orderBy(opts: OrderBy<T>) {\n const clone = this.clone();\n clone.query.orderBy(opts);\n return clone;\n }\n\n format(opts: string) {\n const clone = this.clone();\n clone.query.format(opts);\n return clone;\n }\n\n top(opts: number) {\n const clone = this.clone();\n clone.query.top(opts);\n return clone;\n }\n\n skip(opts: number) {\n const clone = this.clone();\n clone.query.skip(opts);\n return clone;\n }\n\n skiptoken(opts: string) {\n const clone = this.clone();\n clone.query.skiptoken(opts);\n return clone;\n }\n //#endregion\n\n //#region Mutable Resource\n get segment() {\n const segments = this.pathSegments;\n return {\n entitySet() {\n return segments.get(PathSegmentNames.entitySet);\n },\n singleton() {\n return segments.get(PathSegmentNames.singleton);\n },\n property() {\n return segments.get(PathSegmentNames.property);\n },\n keys(values?: (EntityKey<any> | undefined)[]) {\n return segments.keys(values);\n },\n };\n }\n\n get query() {\n return this.entitiesQueryHandler();\n }\n //#endregion\n\n //#region Requests\n get(options: HttpEntityOptions): Observable<ODataEntity<T>>;\n get(options: HttpEntitiesOptions): Observable<ODataEntities<T>>;\n get(options: HttpPropertyOptions): Observable<ODataProperty<T>>;\n get(\n options: HttpEntityOptions & HttpEntitiesOptions & HttpPropertyOptions\n ): Observable<any> {\n return super.get(options);\n }\n //#endregion\n\n //#region Shortcuts\n fetch(\n options?: HttpEntityOptions & { etag?: string }\n ): Observable<ODataEntity<T>>;\n fetch(options?: HttpEntitiesOptions): Observable<ODataEntities<T>>;\n fetch(options?: HttpPropertyOptions): Observable<ODataProperty<T>>;\n fetch(\n options: HttpEntityOptions &\n HttpEntitiesOptions &\n HttpPropertyOptions & { etag?: string } = {}\n ): Observable<any> {\n return this.get(options);\n }\n\n fetchProperty(\n options: HttpOptions & { etag?: string } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'property', ...options }).pipe(\n map(({ property }) => property)\n );\n }\n\n fetchEntity(\n options: HttpOptions & { etag?: string } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n fetchModel(\n options: HttpOptions & { etag?: string } = {}\n ): Observable<ODataModel<T> | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel(entity, { annots, reset: true }) : null\n )\n );\n }\n\n fetchEntities(\n options: HttpOptions & { withCount?: boolean } = {}\n ): Observable<T[] | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n fetchCollection(\n options: HttpOptions & { withCount?: boolean } = {}\n ): Observable<ODataCollection<T, ODataModel<T>> | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection(entities, { annots, reset: true }) : null\n )\n );\n }\n\n fetchAll(options: HttpOptions = {}): Observable<T[]> {\n let res = this.clone();\n // Clean Paging\n res.query.clearPaging();\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query.paging(opts);\n }\n return res.get({ responseType: 'entities', ...options });\n };\n return fetch().pipe(\n expand(({ annots: meta }) =>\n meta.skip || meta.skiptoken ? fetch(meta) : EMPTY\n ),\n concatMap(({ entities }) => entities || []),\n toArray()\n );\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\n\nimport { ODataResource } from '../resource';\nimport { ODataPathSegments } from '../path-segments';\nimport { ODataQueryOptions } from '../query-options';\nimport { HttpOptions } from './options';\nimport { $VALUE } from '../../constants';\nimport { ODataApi } from '../../api';\nimport { Http } from '../../utils';\nimport { PathSegmentNames } from '../../types';\n\nexport class ODataMediaResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<V>(\n api: ODataApi,\n segments: ODataPathSegments,\n options: ODataQueryOptions\n ) {\n const segment = segments.add(PathSegmentNames.value, $VALUE);\n return new ODataMediaResource<V>(api, segments, options);\n }\n //#endregion\n\n clone() {\n return new ODataMediaResource<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n return undefined;\n }\n\n //#region Requests\n get(\n options?: { responseType: 'arraybuffer' } & HttpOptions\n ): Observable<ArrayBuffer>;\n get(options?: { responseType: 'blob' } & HttpOptions): Observable<Blob>;\n get(options: { responseType: any } & HttpOptions): Observable<any> {\n return super.get(options);\n }\n\n put(\n data: ArrayBuffer | Blob,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<any> {\n return super.put(data, options);\n }\n //#endregion\n\n //#region Shortcuts\n fetch(\n options?: { responseType: 'arraybuffer' } & HttpOptions\n ): Observable<ArrayBuffer>;\n fetch(options?: { responseType: 'blob' } & HttpOptions): Observable<Blob>;\n fetch(options: { responseType: any } & HttpOptions): Observable<any> {\n return this.get(options);\n }\n\n fetchArraybuffer(options: HttpOptions = {}): Observable<ArrayBuffer> {\n return this.fetch({ responseType: 'arraybuffer', ...options });\n }\n\n fetchBlob(options: HttpOptions = {}): Observable<Blob> {\n return this.fetch({ responseType: 'blob', ...options });\n }\n\n upload(\n data: ArrayBuffer | Blob,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<any> {\n return this.put(data, options);\n }\n\n uploadArrayBuffer(\n data: ArrayBuffer,\n contentType: string,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<any> {\n options.headers = Http.mergeHttpHeaders(options.headers || {}, {\n 'Content-Type': contentType,\n });\n return this.upload(data, options);\n }\n\n uploadBlob(\n data: Blob,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<any> {\n return this.upload(data, options);\n }\n //#endregion\n}\n","import { Observable, EMPTY } from 'rxjs';\nimport { expand, concatMap, toArray, map } from 'rxjs/operators';\n\nimport { ODataStructuredTypeParser } from '../../parsers/structured-type';\nimport { ODataModel, ODataCollection } from '../../models';\nimport { ODataApi } from '../../api';\nimport { EntityKey, ODataResource } from '../resource';\nimport { Expand, Select, Transform, Filter, OrderBy } from '../builder';\nimport {\n ODataEntities,\n ODataEntitiesAnnotations,\n ODataEntity,\n ODataEntityAnnotations,\n} from '../responses';\nimport { ODataQueryOptions } from '../query-options';\nimport { ODataPathSegments } from '../path-segments';\nimport { ODataReferenceResource } from './reference';\nimport { ODataCountResource } from './count';\nimport { ODataPropertyResource } from './property';\nimport { HttpEntityOptions, HttpEntitiesOptions, HttpOptions } from './options';\nimport { ODataMediaResource } from './media';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\n\n/**\n * OData Navigation Property Resource\n * https://www.odata.org/getting-started/advanced-tutorial/#containment\n * https://www.odata.org/getting-started/advanced-tutorial/#derived\n */\nexport class ODataNavigationPropertyResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<E>(\n api: ODataApi,\n path: string,\n type: string | undefined,\n segments: ODataPathSegments,\n options: ODataQueryOptions\n ) {\n const segment = segments.add(PathSegmentNames.navigationProperty, path);\n if (type) segment.type(type);\n options.keep(QueryOptionNames.format);\n return new ODataNavigationPropertyResource<E>(api, segments, options);\n }\n //#endregion\n\n clone() {\n return new ODataNavigationPropertyResource<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n let type = this.type();\n return type !== undefined\n ? this.api.findStructuredTypeForType<T>(type)\n : undefined;\n }\n\n asModel<M extends ODataModel<T>>(\n entity: Partial<T> | { [name: string]: any },\n { annots, reset }: { annots?: ODataEntityAnnotations; reset?: boolean } = {}\n ): M {\n const type = annots?.type || this.type();\n const Model = this.api.modelForType(type);\n return new Model(entity, { resource: this, annots, reset }) as M;\n }\n\n asCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n entities: Partial<T>[] | { [name: string]: any }[],\n {\n annots,\n reset,\n }: { annots?: ODataEntitiesAnnotations; reset?: boolean } = {}\n ): C {\n const type = annots?.type || this.type();\n const Collection = this.api.collectionForType(type);\n return new Collection(entities, { resource: this, annots, reset }) as C;\n }\n\n //#region Inmutable Resource\n key(value: any) {\n const navigation = this.clone();\n var key = this.resolveKey(value);\n if (key !== undefined) navigation.segment.navigationProperty().key(key);\n return navigation;\n }\n\n keys(values: any[]) {\n const navigation = this.clone();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n navigation.segment.keys(keys);\n return navigation;\n }\n\n media() {\n return ODataMediaResource.factory<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n reference() {\n return ODataReferenceResource.factory(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n navigationProperty<N>(path: string) {\n let type = this.type();\n if (type !== undefined) {\n let parser = this.api.parserForType<N>(type);\n type =\n parser instanceof ODataStructuredTypeParser\n ? parser.typeFor(path)\n : undefined;\n }\n return ODataNavigationPropertyResource.factory<N>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n property<P>(path: string) {\n let type = this.type();\n if (type !== undefined) {\n let parser = this.api.parserForType<P>(type);\n type =\n parser instanceof ODataStructuredTypeParser\n ? parser.typeFor(path)\n : undefined;\n }\n return ODataPropertyResource.factory<P>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n count() {\n return ODataCountResource.factory(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n cast<C>(type: string) {\n let segments = this.cloneSegments();\n segments.add(PathSegmentNames.type, type).type(type);\n return new ODataNavigationPropertyResource<C>(\n this.api,\n segments,\n this.cloneQuery()\n );\n }\n\n select(opts: Select<T>) {\n const clone = this.clone();\n clone.query.select(opts);\n return clone;\n }\n\n expand(opts: Expand<T>) {\n const clone = this.clone();\n clone.query.expand(opts);\n return clone;\n }\n\n transform(opts: Transform<T>) {\n const clone = this.clone();\n clone.query.transform(opts);\n return clone;\n }\n\n search(opts: string) {\n const clone = this.clone();\n clone.query.search(opts);\n return clone;\n }\n\n filter(opts: Filter) {\n const clone = this.clone();\n clone.query.filter(opts);\n return clone;\n }\n\n orderBy(opts: OrderBy<T>) {\n const clone = this.clone();\n clone.query.orderBy(opts);\n return clone;\n }\n\n format(opts: string) {\n const clone = this.clone();\n clone.query.format(opts);\n return clone;\n }\n\n top(opts: number) {\n const clone = this.clone();\n clone.query.top(opts);\n return clone;\n }\n\n skip(opts: number) {\n const clone = this.clone();\n clone.query.skip(opts);\n return clone;\n }\n\n skiptoken(opts: string) {\n const clone = this.clone();\n clone.query.skiptoken(opts);\n return clone;\n }\n //#endregion\n\n //#region Mutable Resource\n get segment() {\n const segments = this.pathSegments;\n return {\n entitySet() {\n return segments.get(PathSegmentNames.entitySet);\n },\n singleton() {\n return segments.get(PathSegmentNames.singleton);\n },\n navigationProperty() {\n return segments.get(PathSegmentNames.navigationProperty);\n },\n keys(values?: (EntityKey<T> | undefined)[]) {\n return segments.keys(values);\n },\n };\n }\n\n /**\n * Handle query options of the navigation property\n * @returns Handler for mutate the query of the navigation property\n */\n get query() {\n return this.entitiesQueryHandler();\n }\n //#endregion\n\n //#region Requests\n get(\n options: HttpEntityOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>>;\n get(\n options: HttpEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntities<T>>;\n get(\n options: HttpEntityOptions &\n HttpEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<any> {\n return super.get(options);\n }\n\n post(\n attrs: Partial<T>,\n options: HttpOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n put(\n attrs: Partial<T>,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.put(attrs, { responseType: 'entity', ...options });\n }\n\n patch(\n attrs: Partial<T>,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.patch(attrs, { responseType: 'entity', ...options });\n }\n\n delete(options: HttpOptions & { etag?: string } = {}): Observable<any> {\n return super.delete({ responseType: 'entity', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n fetch(\n options?: HttpEntityOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>>;\n fetch(\n options?: HttpEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntities<T>>;\n fetch(\n options: HttpEntityOptions &\n HttpEntitiesOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<any> {\n return this.get(options);\n }\n\n fetchEntity(\n options: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity }) => entity)\n );\n }\n\n fetchModel(\n options: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataModel<T> | null> {\n return this.fetch({ responseType: 'entity', ...options }).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel(entity, { annots, reset: true }) : null\n )\n );\n }\n\n fetchEntities(\n options: HttpOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T[] | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities }) => entities)\n );\n }\n\n fetchCollection(\n options: HttpOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataCollection<T, ODataModel<T>> | null> {\n return this.fetch({ responseType: 'entities', ...options }).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection(entities, { annots, reset: true }) : null\n )\n );\n }\n\n fetchAll(\n options: HttpOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<T[]> {\n let res = this.clone();\n // Clean Paging\n res.query.clearPaging();\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query.paging(opts);\n }\n return res.get({ responseType: 'entities', ...options });\n };\n return fetch().pipe(\n expand(({ annots: meta }) =>\n meta.skip || meta.skiptoken ? fetch(meta) : EMPTY\n ),\n concatMap(({ entities }) => entities || []),\n toArray()\n );\n }\n //#endregion\n}\n","import { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { ODataActionResource } from './action';\nimport { ODataFunctionResource } from './function';\nimport { ODataNavigationPropertyResource } from './navigation-property';\nimport { ODataPropertyResource } from './property';\nimport { Expand, Select } from '../builder';\nimport { ODataQueryOptions } from '../query-options';\nimport { ODataPathSegments } from '../path-segments';\nimport { EntityKey, ODataResource } from '../resource';\nimport { HttpOptions } from './options';\nimport { ODataMediaResource } from './media';\nimport { ODataEntity, ODataEntityAnnotations } from '../responses';\nimport { ODataStructuredTypeParser } from '../../parsers/structured-type';\nimport { ODataModel } from '../../models';\nimport { ODataApi } from '../../api';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\nexport class ODataEntityResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<E>(\n api: ODataApi,\n segments: ODataPathSegments,\n options: ODataQueryOptions\n ) {\n options.keep(\n QueryOptionNames.expand,\n QueryOptionNames.select,\n QueryOptionNames.format\n );\n return new ODataEntityResource<E>(api, segments, options);\n }\n //#endregion\n\n clone() {\n return new ODataEntityResource<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n let type = this.type();\n return type !== undefined\n ? this.api.findStructuredTypeForType<T>(type)\n : undefined;\n }\n asModel<M extends ODataModel<T>>(\n entity: Partial<T> | { [name: string]: any },\n { annots, reset }: { annots?: ODataEntityAnnotations; reset?: boolean } = {}\n ): M {\n const type = annots?.type || this.type();\n const Model = this.api.modelForType(type);\n return new Model(entity, { resource: this, annots, reset }) as M;\n }\n\n //#region Inmutable Resource\n key(value: any) {\n const entity = this.clone();\n var key = this.resolveKey(value);\n if (key !== undefined) entity.segment.entitySet().key(key);\n return entity;\n }\n\n keys(values: any[]) {\n const entity = this.clone();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n entity.segment.keys(keys);\n return entity;\n }\n\n media() {\n return ODataMediaResource.factory<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n navigationProperty<N>(path: string) {\n let type = this.type();\n if (type !== undefined) {\n let parser = this.api.parserForType<N>(type);\n type =\n parser instanceof ODataStructuredTypeParser\n ? parser.typeFor(path)\n : undefined;\n }\n return ODataNavigationPropertyResource.factory<N>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n property<P>(path: string) {\n let type = this.type();\n if (type !== undefined) {\n let parser = this.api.parserForType<P>(type);\n type =\n parser instanceof ODataStructuredTypeParser\n ? parser.typeFor(path)\n : undefined;\n }\n return ODataPropertyResource.factory<P>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n action<P, R>(path: string) {\n let type;\n const callable = this.api.findCallableForType(path, this.type());\n if (callable !== undefined) {\n path = callable.path();\n type = callable.type();\n }\n return ODataActionResource.factory<P, R>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n function<P, R>(path: string) {\n let type;\n const callable = this.api.findCallableForType(path, this.type());\n if (callable !== undefined) {\n path = callable.path();\n type = callable.type();\n }\n return ODataFunctionResource.factory<P, R>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n //TODO: Check\n cast<C>(type: string) {\n let segments = this.cloneSegments();\n segments.add(PathSegmentNames.type, type).type(type);\n return new ODataEntityResource<C>(this.api, segments, this.cloneQuery());\n }\n\n select(opts: Select<T>) {\n const clone = this.clone();\n clone.query.select(opts);\n return clone;\n }\n\n expand(opts: Expand<T>) {\n const clone = this.clone();\n clone.query.expand(opts);\n return clone;\n }\n\n format(opts: string) {\n const clone = this.clone();\n clone.query.format(opts);\n return clone;\n }\n //#endregion\n\n //#region Mutable Resource\n get segment() {\n const segments = this.pathSegments;\n return {\n entitySet() {\n return segments.get(PathSegmentNames.entitySet);\n },\n keys(values?: (EntityKey<T> | undefined)[]) {\n return segments.keys(values);\n },\n };\n }\n\n get query() {\n return this.entityQueryHandler();\n }\n //#endregion\n\n //#region Requests\n get(\n options: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataEntity<T>> {\n return super.get({ responseType: 'entity', ...options });\n }\n\n post(\n attrs: Partial<T>,\n options: HttpOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n put(\n attrs: Partial<T>,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.put(attrs, { responseType: 'entity', ...options });\n }\n\n patch(\n attrs: Partial<T>,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.patch(attrs, { responseType: 'entity', ...options });\n }\n\n delete(options: HttpOptions & { etag?: string } = {}): Observable<any> {\n return super.delete({ responseType: 'entity', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n fetch(\n options?: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>> {\n if (!this.hasKey()) return throwError('Entity resource without key');\n return this.get(options);\n }\n\n fetchEntity(\n options?: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T | null> {\n return this.fetch(options).pipe(map(({ entity }) => entity));\n }\n\n fetchModel(\n options?: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataModel<T> | null> {\n return this.fetch(options).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel(entity, { annots, reset: true }) : null\n )\n );\n }\n //#endregion\n}\n","import { Observable, EMPTY } from 'rxjs';\nimport { expand, concatMap, toArray, map } from 'rxjs/operators';\n\nimport { Expand, Select, Transform, Filter, OrderBy } from '../builder';\nimport { ODataPathSegments } from '../path-segments';\n\nimport { ODataActionResource } from './action';\nimport { ODataFunctionResource } from './function';\nimport { ODataQueryOptions } from '../query-options';\nimport { ODataEntityResource } from './entity';\nimport { ODataCountResource } from './count';\nimport { EntityKey, ODataResource } from '../resource';\nimport { HttpOptions } from './options';\nimport {\n ODataEntity,\n ODataEntities,\n ODataEntitiesAnnotations,\n} from '../responses';\nimport { ODataModel, ODataCollection } from '../../models';\nimport { ODataApi } from '../../api';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\n\nexport class ODataEntitySetResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<E>(\n api: ODataApi,\n path: string,\n type: string | undefined,\n segments: ODataPathSegments,\n query: ODataQueryOptions\n ) {\n const segment = segments.add(PathSegmentNames.entitySet, path);\n if (type) segment.type(type);\n return new ODataEntitySetResource<E>(api, segments, query);\n }\n //#endregion\n\n clone() {\n return new ODataEntitySetResource<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n let type = this.type();\n return type !== undefined\n ? this.api.findStructuredTypeForType<T>(type)\n : undefined;\n }\n\n asCollection<M extends ODataModel<T>, C extends ODataCollection<T, M>>(\n entities: Partial<T>[] | { [name: string]: any }[],\n {\n annots,\n reset = false,\n }: { annots?: ODataEntitiesAnnotations; reset?: boolean } = {}\n ): C {\n const type = annots?.type || this.type();\n const Collection = this.api.collectionForType(type);\n return new Collection(entities, { resource: this, annots, reset }) as C;\n }\n\n //#region Inmutable Resource\n entity(key?: any) {\n const entity = ODataEntityResource.factory<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n if (key !== undefined) {\n return entity.key(key);\n }\n return entity;\n }\n\n cast<C>(type: string) {\n let segments = this.cloneSegments();\n segments.add(PathSegmentNames.type, type).type(type);\n return new ODataEntitySetResource<C>(this.api, segments, this.cloneQuery());\n }\n\n action<P, R>(path: string) {\n let type;\n const callable = this.api.findCallableForType(path, this.type());\n if (callable !== undefined) {\n path = callable.path();\n type = callable.type();\n }\n return ODataActionResource.factory<P, R>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n function<P, R>(path: string) {\n let type;\n const callable = this.api.findCallableForType(path, this.type());\n if (callable !== undefined) {\n path = callable.path();\n type = callable.type();\n }\n return ODataFunctionResource.factory<P, R>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n count() {\n return ODataCountResource.factory(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n select(opts: Select<T>) {\n const clone = this.clone();\n clone.query.select(opts);\n return clone;\n }\n\n expand(opts: Expand<T>) {\n const clone = this.clone();\n clone.query.expand(opts);\n return clone;\n }\n\n transform(opts: Transform<T>) {\n const clone = this.clone();\n clone.query.transform(opts);\n return clone;\n }\n\n search(opts: string) {\n const clone = this.clone();\n clone.query.search(opts);\n return clone;\n }\n\n filter(opts: Filter) {\n const clone = this.clone();\n clone.query.filter(opts);\n return clone;\n }\n\n orderBy(opts: OrderBy<T>) {\n const clone = this.clone();\n clone.query.orderBy(opts);\n return clone;\n }\n\n format(opts: string) {\n const clone = this.clone();\n clone.query.format(opts);\n return clone;\n }\n\n top(opts: number) {\n const clone = this.clone();\n clone.query.top(opts);\n return clone;\n }\n\n skip(opts: number) {\n const clone = this.clone();\n clone.query.skip(opts);\n return clone;\n }\n\n skiptoken(opts: string) {\n const clone = this.clone();\n clone.query.skiptoken(opts);\n return clone;\n }\n //#endregion\n\n //#region Mutable Resource\n get segment() {\n const segments = this.pathSegments;\n return {\n entitySet() {\n return segments.get(PathSegmentNames.entitySet);\n },\n keys(values?: (EntityKey<T> | undefined)[]) {\n return segments.keys(values);\n },\n };\n }\n\n get query() {\n return this.entitiesQueryHandler();\n }\n //#endregion\n\n //#region Requests\n post(\n attrs: Partial<T>,\n options: HttpOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n get(\n options: HttpOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataEntities<T>> {\n return super.get({ responseType: 'entities', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n fetch(\n options?: HttpOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntities<T>> {\n return this.get(options);\n }\n\n fetchEntities(\n options?: HttpOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T[] | null> {\n return this.fetch(options).pipe(map(({ entities }) => entities));\n }\n\n fetchCollection(\n options?: HttpOptions & {\n withCount?: boolean;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataCollection<T, ODataModel<T>> | null> {\n return this.fetch(options).pipe(\n map(({ entities, annots }) =>\n entities ? this.asCollection(entities, { annots, reset: true }) : null\n )\n );\n }\n\n fetchAll(\n options?: HttpOptions & {\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T[]> {\n let res = this.clone();\n // Clean Paging\n res.query.clearPaging();\n let fetch = (opts?: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): Observable<ODataEntities<T>> => {\n if (opts) {\n res.query.paging(opts);\n }\n return res.get(options);\n };\n return fetch().pipe(\n expand(({ annots: meta }) =>\n meta.skip || meta.skiptoken ? fetch(meta) : EMPTY\n ),\n concatMap(({ entities }) => entities || []),\n toArray()\n );\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { ODataResource } from '../resource';\nimport { ODataPathSegments } from '../path-segments';\nimport { HttpOptions } from './options';\nimport { ODataMetadata } from '../responses';\nimport { $METADATA } from '../../constants';\nimport { ODataApi } from '../../api';\nimport { PathSegmentNames } from '../../types';\n\nexport class ODataMetadataResource extends ODataResource<any> {\n constructor(api: ODataApi, segments?: ODataPathSegments) {\n super(api, segments);\n }\n\n clone() {\n return new ODataMetadataResource(this.api, this.cloneSegments());\n }\n\n schema() {\n return undefined;\n }\n //#region Factory\n static factory(api: ODataApi) {\n let segments = new ODataPathSegments();\n segments.add(PathSegmentNames.metadata, $METADATA);\n return new ODataMetadataResource(api, segments);\n }\n //#endregion\n\n //#region Requests\n get(options?: HttpOptions): Observable<ODataMetadata> {\n return super\n .get({ responseType: 'text', ...options })\n .pipe(map((body: any) => new ODataMetadata(body)));\n }\n //#endregion\n\n //#region Shortcuts\n fetch(options?: HttpOptions): Observable<ODataMetadata> {\n return this.get(options);\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { Expand, Select } from '../builder';\nimport { ODataPathSegments } from '../path-segments';\nimport { ODataQueryOptions } from '../query-options';\nimport { EntityKey, ODataResource } from '../resource';\n\nimport { ODataNavigationPropertyResource } from './navigation-property';\nimport { ODataPropertyResource } from './property';\nimport { ODataActionResource } from './action';\nimport { ODataFunctionResource } from './function';\nimport { HttpOptions } from './options';\nimport { ODataStructuredTypeParser } from '../../parsers/structured-type';\nimport { ODataEntity, ODataEntityAnnotations } from '../responses';\nimport { ODataModel } from '../../models';\nimport { ODataApi } from '../../api';\nimport { PathSegmentNames, QueryOptionNames } from '../../types';\n\nexport class ODataSingletonResource<T> extends ODataResource<T> {\n //#region Factory\n static factory<R>(\n api: ODataApi,\n path: string,\n type: string | undefined,\n segments: ODataPathSegments,\n options: ODataQueryOptions\n ) {\n const segment = segments.add(PathSegmentNames.singleton, path);\n if (type !== undefined) segment.type(type);\n options.keep(QueryOptionNames.format);\n return new ODataSingletonResource<R>(api, segments, options);\n }\n //#endregion\n\n clone() {\n return new ODataSingletonResource<T>(\n this.api,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n schema() {\n let type = this.type();\n return type !== undefined\n ? this.api.findStructuredTypeForType<T>(type)\n : undefined;\n }\n asModel<M extends ODataModel<T>>(\n entity: Partial<T> | { [name: string]: any },\n { annots, reset }: { annots?: ODataEntityAnnotations; reset?: boolean } = {}\n ): M {\n const Model = this.api.modelForType(annots?.type || this.type());\n return new Model(entity, { resource: this, annots, reset }) as M;\n }\n\n //#region Inmutable Resource\n key(value: any) {\n const singleton = this.clone();\n var key = this.resolveKey(value);\n if (key !== undefined) singleton.segment.singleton().key(key);\n return singleton;\n }\n\n keys(values: any[]) {\n const singleton = this.clone();\n const types = this.pathSegments.types({ key: true });\n const keys = values.map((value, index) =>\n ODataResource.resolveKey(\n value,\n this.api.findStructuredTypeForType<T>(types[index])\n )\n );\n singleton.segment.keys(keys);\n return singleton;\n }\n\n navigationProperty<N>(path: string) {\n let type = this.type();\n if (type !== undefined) {\n let parser = this.api.parserForType<N>(type);\n type =\n parser instanceof ODataStructuredTypeParser\n ? parser.typeFor(path)\n : undefined;\n }\n return ODataNavigationPropertyResource.factory<N>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n property<P>(path: string) {\n let type = this.type();\n if (type !== undefined) {\n let parser = this.api.parserForType<P>(type);\n type =\n parser instanceof ODataStructuredTypeParser\n ? parser.typeFor(path)\n : undefined;\n }\n return ODataPropertyResource.factory<P>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n action<P, R>(path: string) {\n let type;\n const callable = this.api.findCallableForType(path, this.type());\n if (callable !== undefined) {\n path = callable.path();\n type = callable.type();\n }\n return ODataActionResource.factory<P, R>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n function<P, R>(path: string) {\n let type;\n const callable = this.api.findCallableForType(path, this.type());\n if (callable !== undefined) {\n path = callable.path();\n type = callable.type();\n }\n return ODataFunctionResource.factory<P, R>(\n this.api,\n path,\n type,\n this.cloneSegments(),\n this.cloneQuery()\n );\n }\n\n select(opts: Select<T>) {\n const clone = this.clone();\n clone.query.select(opts);\n return clone;\n }\n\n expand(opts: Expand<T>) {\n const clone = this.clone();\n clone.query.expand(opts);\n return clone;\n }\n\n format(opts: string) {\n const clone = this.clone();\n clone.query.format(opts);\n return clone;\n }\n //#endregion\n\n //#region Mutable Resource\n get segment() {\n const segments = this.pathSegments;\n return {\n singleton() {\n return segments.get(PathSegmentNames.singleton);\n },\n keys(values?: (EntityKey<T> | undefined)[]) {\n return segments.keys(values);\n },\n };\n }\n\n get query() {\n return this.entityQueryHandler();\n }\n //#endregion\n\n //#region Requests\n get(\n options: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n } = {}\n ): Observable<ODataEntity<T>> {\n return super.get({ responseType: 'entity', ...options });\n }\n\n post(\n attrs: Partial<T>,\n options: HttpOptions = {}\n ): Observable<ODataEntity<T>> {\n return super.post(attrs, { responseType: 'entity', ...options });\n }\n\n put(\n attrs: Partial<T>,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.put(attrs, { responseType: 'entity', ...options });\n }\n\n patch(\n attrs: Partial<T>,\n options: HttpOptions & { etag?: string } = {}\n ): Observable<ODataEntity<T>> {\n return super.patch(attrs, { responseType: 'entity', ...options });\n }\n\n delete(options: HttpOptions & { etag?: string } = {}): Observable<any> {\n return super.delete({ responseType: 'entity', ...options });\n }\n //#endregion\n\n //#region Shortcuts\n fetch(\n options?: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataEntity<T>> {\n return this.get(options);\n }\n\n fetchEntity(\n options?: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<T | null> {\n return this.fetch(options).pipe(map(({ entity }) => entity));\n }\n\n fetchModel(\n options?: HttpOptions & {\n etag?: string;\n bodyQueryOptions?: QueryOptionNames[];\n }\n ): Observable<ODataModel<T> | null> {\n return this.fetch(options).pipe(\n map(({ entity, annots }) =>\n entity ? this.asModel(entity, { annots, reset: true }) : null\n )\n );\n }\n //#endregion\n}\n","import { Observable, Subscription } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport {\n COMPUTED,\n DEFAULT_VERSION,\n OPTIMISTIC_CONCURRENCY,\n} from '../constants';\nimport { ODataHelper } from '../helper';\nimport { ODataParserOptions } from '../options';\nimport { ODataStructuredTypeFieldParser } from '../parsers';\nimport {\n Expand,\n ODataEntitiesAnnotations,\n ODataEntityAnnotations,\n ODataEntityResource,\n ODataEntitySetResource,\n ODataNavigationPropertyResource,\n ODataPathSegments,\n ODataPropertyResource,\n ODataQueryOptions,\n EntityKey,\n ODataResource,\n ODataSingletonResource,\n OptionHandler,\n QueryArguments,\n Select,\n} from '../resources';\nimport { ODataEntitySet, ODataStructuredType } from '../schema';\nimport { Options } from '../types';\nimport { Objects, Types } from '../utils';\nimport type { ODataCollection } from './collection';\nimport type { ODataModel } from './model';\n\nexport const CID = '_cid';\nexport type ODataModelResource<T> =\n | ODataEntityResource<T>\n | ODataSingletonResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>;\nexport type ODataCollectionResource<T> =\n | ODataEntitySetResource<T>\n | ODataNavigationPropertyResource<T>\n | ODataPropertyResource<T>;\n\nexport type ODataModelEventType =\n | 'change'\n | 'reset'\n | 'update'\n | 'destroy'\n | 'add'\n | 'remove'\n | 'invalid'\n | 'request'\n | 'sync'\n | 'attach';\nexport class ODataModelEvent<T> {\n name: ODataModelEventType;\n bubbling: boolean = true;\n model?: ODataModel<T>;\n collection?: ODataCollection<T, ODataModel<T>>;\n chain: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n string | number | null\n ][];\n value?: any;\n previous?: any;\n options?: any;\n constructor(\n name: ODataModelEventType,\n {\n model,\n collection,\n previous,\n value,\n track,\n options,\n }: {\n model?: ODataModel<T>;\n collection?: ODataCollection<T, ODataModel<T>>;\n track?: string | number;\n previous?: any;\n value?: any;\n options?: any;\n } = {}\n ) {\n this.name = name;\n this.model = model;\n this.collection = collection;\n this.previous = previous;\n this.value = value;\n this.options = options;\n this.chain = [\n [\n this.collection ||\n (this.model as\n | ODataModel<any>\n | ODataCollection<any, ODataModel<any>>),\n track || null,\n ],\n ];\n }\n stopPropagation() {\n this.bubbling = false;\n }\n\n push(\n model: ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n track: string | number\n ) {\n this.chain.splice(0, 0, [model, track]);\n }\n\n visited(model: ODataModel<any> | ODataCollection<any, ODataModel<any>>) {\n return this.chain.some((c) => c[0] === model);\n }\n get path() {\n return this.chain\n .map(([, track], index) =>\n typeof track === 'number'\n ? `[${track}]`\n : typeof track === 'string'\n ? index === 0\n ? track\n : `.${track}`\n : ''\n )\n .join('');\n }\n}\n\nexport const BUBBLING = [\n 'change',\n 'reset',\n 'update',\n 'destroy',\n 'add',\n 'remove',\n];\n\nexport const INCLUDE_ALL = {\n include_navigation: true,\n include_concurrency: true,\n include_computed: true,\n include_key: true,\n include_non_field: true,\n};\n\nexport enum ODataModelState {\n Added,\n Removed,\n Changed,\n Unchanged,\n}\n\nexport type ModelOptions = {\n cid?: string;\n fields: { [name: string]: ModelFieldOptions };\n};\n\nexport type ModelFieldOptions = {\n field?: string;\n default?: any;\n required?: boolean;\n concurrency?: boolean;\n maxLength?: number;\n minLength?: number;\n min?: number;\n max?: number;\n pattern?: RegExp;\n};\n\nexport function Model({ cid = CID }: { cid?: string } = {}) {\n return <T extends { new (...args: any[]): {} }>(constructor: T) => {\n const Klass = <any>constructor;\n if (!Klass.hasOwnProperty('options'))\n Klass.options = { fields: {} } as ModelOptions;\n Klass.options.cid = cid;\n return constructor;\n };\n}\n\nexport function ModelField({\n name,\n ...options\n}: { name?: string } & ModelFieldOptions = {}) {\n return (target: any, key: string): void => {\n const Klass = target.constructor;\n if (!Klass.hasOwnProperty('options'))\n Klass.options = { fields: {} } as ModelOptions;\n options.field = name || key;\n Klass.options.fields[key] = options;\n };\n}\n\nexport type ODataModelFieldOptions<F> = ModelFieldOptions & {\n name: string;\n field: string;\n parser: ODataStructuredTypeFieldParser<F>;\n};\n\nexport class ODataModelField<F> {\n name: string;\n field: string;\n parser: ODataStructuredTypeFieldParser<F>;\n modelOptions: ODataModelOptions<any>;\n meta?: ODataModelOptions<any>;\n default?: any;\n required: boolean;\n concurrency: boolean;\n maxLength?: number;\n minLength?: number;\n min?: number;\n max?: number;\n pattern?: RegExp;\n constructor(\n modelOptions: ODataModelOptions<any>,\n { name, field, parser, ...options }: ODataModelFieldOptions<F>\n ) {\n this.modelOptions = modelOptions;\n this.name = name;\n this.field = field;\n this.parser = parser;\n this.default = options.default || this.parser.default;\n this.required = Boolean(options.required);\n this.concurrency = Boolean(options.concurrency);\n this.maxLength = options.maxLength;\n this.minLength = options.minLength;\n this.min = options.min;\n this.max = options.max;\n this.pattern = options.pattern;\n }\n\n get api() {\n return this.modelOptions.api;\n }\n\n get type() {\n return this.parser.type;\n }\n\n get navigation() {\n return Boolean(this.parser.navigation);\n }\n\n get collection() {\n return Boolean(this.parser.collection);\n }\n\n get computed() {\n return Boolean(\n this.parser.findAnnotation((a) => a.term === COMPUTED)?.bool\n );\n }\n\n configure({\n findOptionsForType,\n concurrency,\n }: {\n findOptionsForType: (type: string) => ODataModelOptions<any> | undefined;\n concurrency: boolean;\n }) {\n this.meta = findOptionsForType(this.parser.type);\n if (concurrency) this.concurrency = concurrency;\n }\n\n isKey() {\n return this.parser.isKey();\n }\n\n hasReferentials() {\n return this.parser.hasReferentials();\n }\n\n get referentials() {\n return this.parser.referentials;\n }\n\n isStructuredType() {\n return this.parser.isStructuredType();\n }\n\n structured() {\n return this.api.findStructuredTypeForType<F>(this.parser.type);\n }\n\n isEnumType() {\n return this.parser.isEnumType();\n }\n\n enum() {\n return this.api.findEnumTypeForType<F>(this.parser.type);\n }\n\n validate(\n value: any,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'patch';\n navigation?: boolean;\n } = {}\n ) {\n /*\n if ('isValid' in value && typeof value.isValid === 'function') {\n return !value.isValid({ method, navigation }) ? value._errors : undefined;\n } else if ('models' in value && typeof value.models === 'function') {\n */\n if (ODataModelOptions.isModel(value)) {\n return !value.isValid({ method, navigation }) ? value._errors : undefined;\n } else if (ODataModelOptions.isCollection(value)) {\n return value\n .models()\n .some((m: ODataModel<any>) => !m.isValid({ method, navigation }))\n ? value.models().map((m: ODataModel<any>) => m._errors)\n : undefined;\n } else {\n let errors = this.parser?.validate(value, { method, navigation }) || [];\n if (\n this.required &&\n (value === null || (value === undefined && method !== 'patch')) // Is null or undefined without patch?\n ) {\n errors.push(`required`);\n }\n if (\n this.maxLength !== undefined &&\n typeof value === 'string' &&\n value.length > this.maxLength\n ) {\n errors.push(`maxlength`);\n }\n if (\n this.minLength !== undefined &&\n typeof value === 'string' &&\n value.length < this.minLength\n ) {\n errors.push(`minlength`);\n }\n if (\n this.min !== undefined &&\n typeof value === 'number' &&\n value < this.min\n ) {\n errors.push(`min`);\n }\n if (\n this.max !== undefined &&\n typeof value === 'number' &&\n value > this.max\n ) {\n errors.push(`max`);\n }\n if (\n this.pattern !== undefined &&\n typeof value === 'string' &&\n !this.pattern.test(value)\n ) {\n errors.push(`pattern`);\n }\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n }\n\n defaults(): any {\n return this.isStructuredType() && this.meta !== undefined\n ? this.meta.defaults()\n : this.default;\n }\n\n deserialize(value: any, options?: Options): F {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.api.options;\n return this.parser.deserialize(value, parserOptions);\n }\n\n serialize(value: F, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.api.options;\n return this.parser.serialize(value, parserOptions);\n }\n\n encode(value: F, options?: Options): any {\n const parserOptions =\n options !== undefined\n ? new ODataParserOptions(options)\n : this.api.options;\n return this.parser.encode(value, parserOptions);\n }\n\n resourceFactory<T, F>(\n resource: ODataModelResource<T>\n ): ODataNavigationPropertyResource<F> | ODataPropertyResource<F> {\n if (\n !(\n resource instanceof ODataEntityResource ||\n resource instanceof ODataNavigationPropertyResource ||\n resource instanceof ODataPropertyResource\n )\n )\n throw new Error(\"Can't build resource for non compatible base type\");\n return this.navigation\n ? (resource as ODataEntityResource<T>).navigationProperty<F>(\n this.parser.name\n )\n : (resource as ODataEntityResource<T>).property<F>(this.parser.name);\n }\n\n annotationsFactory(\n annots: ODataEntityAnnotations\n ): ODataEntityAnnotations | ODataEntitiesAnnotations {\n return this.parser.collection\n ? new ODataEntitiesAnnotations(\n annots.helper,\n annots.property(this.parser.name) || {}\n )\n : new ODataEntityAnnotations(\n annots.helper,\n annots.property(this.parser.name) || {}\n );\n }\n\n schemaFactory<T, F>(\n schema: ODataStructuredType<T>\n ): ODataStructuredType<F> | undefined {\n return schema.api.findStructuredTypeForType(this.parser.type);\n }\n\n modelCollectionFactory<T, F>({\n parent,\n value,\n reset,\n }: {\n parent: ODataModel<any>;\n value?: F | F[] | { [name: string]: any } | { [name: string]: any }[];\n reset?: boolean;\n }): ODataModel<F> | ODataCollection<F, ODataModel<F>> {\n const schema = this.schemaFactory<T, F>(parent.schema());\n const annots = this.annotationsFactory(parent.annots());\n\n const Model = schema?.model;\n const Collection = schema?.collection;\n if (Model === undefined || Collection === undefined)\n throw Error(`No model for ${this.name}`);\n return this.parser.collection\n ? (new Collection((value || []) as (F | { [name: string]: any })[], {\n annots: annots as ODataEntitiesAnnotations,\n parent: [parent, this],\n reset,\n }) as ODataCollection<F, ODataModel<F>>)\n : (new Model((value || {}) as F | { [name: string]: any }, {\n annots: annots as ODataEntityAnnotations,\n parent: [parent, this],\n reset,\n }) as ODataModel<F>);\n }\n}\n\nexport type ODataModelRelation<T> = {\n state: ODataModelState;\n model: ODataModel<T> | ODataCollection<T, ODataModel<T>> | null;\n field: ODataModelField<T>;\n subscription: Subscription | null;\n};\nexport type ODataModelEntry<T, M extends ODataModel<T>> = {\n state: ODataModelState;\n model: M;\n key?: EntityKey<T> | { [name: string]: any };\n subscription: Subscription | null;\n};\n\nexport class ODataModelOptions<T> {\n name: string;\n cid: string;\n base?: string;\n open?: boolean;\n private _fields: ODataModelField<any>[];\n schema: ODataStructuredType<T>;\n entitySet?: ODataEntitySet;\n // Hierarchy\n parent?: ODataModelOptions<any>;\n children: ODataModelOptions<any>[] = [];\n\n constructor(options: ModelOptions, schema: ODataStructuredType<T>) {\n this.name = schema.name;\n this.base = schema.base;\n this.open = schema.open;\n this.schema = schema;\n this.cid = options.cid || CID;\n const schemaFields = this.schema.fields({ include_navigation: true });\n this._fields = Object.entries(options.fields).map(([name, options]) => {\n const { field, ...opts } = options;\n if (field === undefined || name === undefined)\n throw new Error('Model Properties need name and field');\n const parser = schemaFields.find((f: any) => f.name === field);\n if (parser === undefined)\n throw new Error(`No parser for ${field} with name = ${name}`);\n return new ODataModelField<T>(this, { name, field, parser, ...opts });\n });\n }\n\n get api() {\n return this.schema.api;\n }\n\n type() {\n return this.schema.type();\n }\n\n isTypeOf(type: string) {\n return this.schema.isTypeOf(type);\n }\n\n findChildOptions(\n predicate: (options: ODataModelOptions<any>) => boolean\n ): ODataModelOptions<any> | undefined {\n if (predicate(this)) return this;\n let match: ODataModelOptions<any> | undefined;\n for (let ch of this.children) {\n match = ch.findChildOptions(predicate);\n if (match !== undefined) break;\n }\n return match;\n }\n\n configure({\n findOptionsForType,\n }: {\n findOptionsForType: (type: string) => ODataModelOptions<any> | undefined;\n }) {\n if (this.base) {\n const parent = findOptionsForType(this.base) as ODataModelOptions<any>;\n parent.children.push(this);\n this.parent = parent;\n }\n this.entitySet = this.api.findEntitySetForEntityType(this.type());\n let concurrencyFields: string[] = [];\n if (this.entitySet !== undefined) {\n concurrencyFields =\n this.entitySet.findAnnotation((a) => a.term === OPTIMISTIC_CONCURRENCY)\n ?.properties || [];\n }\n this._fields.forEach((field) => {\n let concurrency = concurrencyFields.indexOf(field.field) !== -1;\n field.configure({\n findOptionsForType,\n concurrency,\n });\n });\n }\n\n fields({\n include_navigation = false,\n include_parents = true,\n }: {\n include_parents?: boolean;\n include_navigation?: boolean;\n } = {}): ODataModelField<any>[] {\n return [\n ...(include_parents && this.parent !== undefined\n ? this.parent.fields({ include_navigation, include_parents })\n : []),\n ...this._fields.filter(\n (field) => include_navigation || !field.navigation\n ),\n ];\n }\n\n field(name: keyof T | string) {\n return this.fields({\n include_parents: true,\n include_navigation: true,\n }).find(\n (modelField: ODataModelField<any>) =>\n modelField.name === name || modelField.field === name\n );\n }\n\n attach(self: ODataModel<T>, resource: ODataModelResource<T>) {\n if (\n self._resource !== undefined &&\n resource.type() !== self._resource.type() &&\n !resource.isSubtypeOf(self._resource)\n )\n throw new Error(\n `Can't reattach ${resource.type()} to ${self._resource.type()}`\n );\n\n const current = self._resource;\n if (current === undefined || !current.isEqualTo(resource)) {\n self._resource = resource;\n self.events$.emit(\n new ODataModelEvent('attach', {\n model: self,\n previous: current,\n value: resource,\n })\n );\n }\n }\n\n //# region Resource\n static chain(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ][] {\n const chain = [] as any[];\n let tuple:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = [child, null];\n while (tuple !== null) {\n const parent = tuple as [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n if (chain.some((p) => p[0] === parent[0])) break;\n chain.splice(0, 0, parent);\n tuple = tuple[0]._parent;\n }\n return chain;\n }\n\n static resource<T>(\n child: ODataModel<T> | ODataCollection<T, ODataModel<T>>\n ): ODataModelResource<T> | ODataCollectionResource<T> {\n let resource:\n | ODataModelResource<any>\n | ODataCollectionResource<any>\n | undefined = undefined;\n for (let [model, field] of ODataModelOptions.chain(child)) {\n resource =\n resource ||\n //model._resource ||\n (ODataModelOptions.isModel(model)\n ? (model as ODataModel<any>)._meta.modelResourceFactory()\n : (\n model as ODataCollection<any, ODataModel<any>>\n )._model.meta.collectionResourceFactory());\n if (resource === undefined) break;\n if (ODataModelOptions.isModel(model)) {\n let key = (model as ODataModel<any>).key({\n field_mapping: true,\n }) as EntityKey<any>;\n if (key !== undefined)\n resource =\n resource instanceof ODataEntitySetResource\n ? resource.entity(key)\n : resource.key(key);\n }\n if (field === null) {\n const query = model._resource?.cloneQuery().toQueryArguments();\n if (query !== undefined) resource.query.apply(query);\n continue;\n }\n resource = (field as ODataModelField<any>).resourceFactory<any, any>(\n resource as ODataModelResource<any>\n );\n }\n if (resource === undefined)\n throw new Error(`resource: Can't build resource for ${child}`);\n return resource;\n }\n\n collectionResourceFactory({\n baseResource,\n }: { baseResource?: ODataResource<T> } = {}): ODataCollectionResource<T> {\n if (this.entitySet !== undefined)\n return ODataEntitySetResource.factory<T>(\n this.api,\n this.entitySet.name,\n this.type(),\n new ODataPathSegments(),\n baseResource?.cloneQuery() || new ODataQueryOptions()\n );\n if (baseResource === undefined)\n throw new Error(\"collectionResourceFactory: Can't build resource\");\n return baseResource.clone() as ODataCollectionResource<T>;\n }\n\n modelResourceFactory({\n baseResource,\n }: {\n fromSet?: boolean;\n baseResource?: ODataResource<T>;\n } = {}): ODataModelResource<T> {\n const resource = this.collectionResourceFactory({ baseResource });\n if (resource instanceof ODataEntitySetResource) return resource.entity();\n return resource as ODataModelResource<T>;\n }\n\n entityResource(self: ODataModel<T>): ODataModelResource<T> {\n let resource = this.modelResourceFactory({\n baseResource: self._resource,\n fromSet: true,\n });\n const key = self.key({ field_mapping: true }) as EntityKey<T>;\n if (key !== undefined) return resource.key(key);\n return resource as ODataModelResource<T>;\n }\n //#endregion\n\n bind(\n self: ODataModel<T>,\n {\n parent,\n resource,\n annots,\n }: {\n parent?: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n resource?: ODataModelResource<T>;\n annots?: ODataEntityAnnotations;\n } = {}\n ) {\n // Parent\n if (parent !== undefined) {\n self._parent = parent;\n } else if (resource !== undefined) {\n // Resource\n this.attach(self, resource);\n }\n\n // Annotations\n self._annotations =\n annots || new ODataEntityAnnotations(ODataHelper[DEFAULT_VERSION]);\n\n const fields = this.fields({\n include_navigation: true,\n include_parents: true,\n });\n for (let field of fields) {\n Object.defineProperty(self, field.name, {\n configurable: true,\n get: () => this._get(self, field as ODataModelField<any>),\n set: (value: any) =>\n this._set(self, field as ODataModelField<any>, value),\n });\n }\n }\n\n query(\n self: ODataModel<T>,\n resource: ODataModelResource<T>,\n func: (q: {\n select(opts?: Select<T>): OptionHandler<Select<T>>;\n expand(opts?: Expand<T>): OptionHandler<Expand<T>>;\n format(opts?: string): OptionHandler<string>;\n apply(query: QueryArguments<T>): void;\n }) => void\n ) {\n func(resource.query);\n this.attach(self, resource);\n }\n\n resolveKey(\n value: any,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): EntityKey<T> | { [name: string]: any } | undefined {\n const keyTypes = this.schema.keys({ include_parents: true });\n const key: any = {};\n for (var kt of keyTypes) {\n let v = value as any;\n let options = this as ODataModelOptions<any>;\n let field: ODataModelField<any> | undefined;\n for (let name of kt.name.split('/')) {\n if (options === undefined) break;\n field = options\n .fields({ include_parents: true })\n .find((field: ODataModelField<any>) => field.field === name);\n if (field !== undefined) {\n v =\n Types.isPlainObject(v) || ODataModelOptions.isModel(v)\n ? v[field.name]\n : v;\n options = field.meta as ODataModelOptions<any>;\n }\n }\n if (field === undefined) return undefined;\n let name = field_mapping ? field.field : field.name;\n if (kt.alias !== undefined) name = kt.alias;\n key[name] = v;\n }\n if (Types.isEmpty(key)) return undefined;\n return resolve ? Objects.resolveKey(key) : key;\n }\n\n resolveReferential(\n self: ODataModel<T> | T | { [name: string]: any },\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n const referential: any = {};\n for (var ref of field.referentials) {\n let from = this.fields({ include_parents: true }).find(\n (p: any) => p.field === ref.referencedProperty\n );\n let to = field.modelOptions\n .fields({ include_parents: true })\n .find((field: ODataModelField<any>) => field.field === ref.property);\n if (from !== undefined && to !== undefined) {\n let name = field_mapping ? to.field : to.name;\n referential[name] = (self as any)[from.name];\n }\n }\n if (Types.isEmpty(referential)) return undefined;\n return resolve\n ? Objects.resolveKey(referential, { single: false })\n : referential;\n }\n\n resolveReferenced(\n self: ODataModel<T> | T | { [name: string]: any },\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n const referenced: any = {};\n for (var ref of field.referentials) {\n let from = this.fields({ include_parents: true }).find(\n (field: ODataModelField<any>) => field.field === ref.property\n );\n let to = (field.meta as ODataModelOptions<any>)\n .fields({ include_parents: true })\n .find(\n (field: ODataModelField<any>) =>\n field.field === ref.referencedProperty\n );\n if (from !== undefined && to !== undefined) {\n let name = field_mapping ? to.field : to.name;\n referenced[name] = (self as any)[from.name];\n }\n }\n if (Types.isEmpty(referenced)) return undefined;\n return resolve\n ? Objects.resolveKey(referenced, { single: false })\n : referenced;\n }\n\n validate(\n self: ODataModel<T>,\n {\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'patch';\n navigation?: boolean;\n } = {}\n ): { [name: string]: string[] } | undefined {\n const errors = this.fields({\n include_parents: true,\n include_navigation: navigation,\n }).reduce((acc, field) => {\n let value = (self as any)[field.name];\n let errs = field.validate(value, { method });\n return errs !== undefined\n ? Object.assign(acc, { [field.name]: errs })\n : acc;\n }, {});\n return !Types.isEmpty(errors) ? errors : undefined;\n }\n\n defaults(): T | { [name: string]: any } | undefined {\n const defs = this.fields().reduce((acc, field) => {\n let value = field.defaults();\n return value !== undefined\n ? Object.assign(acc, { [field.name]: value })\n : acc;\n }, {});\n return !Types.isEmpty(defs) ? defs : undefined;\n }\n\n hasChanged(\n self: ODataModel<T>,\n { include_navigation = false }: { include_navigation?: boolean } = {}\n ): boolean {\n return (\n !Types.isEmpty(self._changes) ||\n Object.values(self._relations)\n .filter(({ field }) => !field.navigation || include_navigation)\n .some(\n ({ field, state, model }) =>\n (!include_navigation || field.navigation) &&\n (state === ODataModelState.Changed ||\n (model !== null && model.hasChanged({ include_navigation })))\n )\n );\n }\n\n asEntity<R, M extends ODataModel<T>>(\n self: M,\n func: (model: M) => Observable<R>\n ): Observable<R> {\n const parent = self._parent;\n self._parent = null;\n return func(self).pipe(tap(() => (self._parent = parent)));\n }\n\n toEntity(\n self: ODataModel<T>,\n {\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}\n ): T | { [name: string]: any } {\n let attrs = self.attributes({\n changes_only,\n field_mapping,\n include_concurrency,\n include_computed,\n include_non_field,\n });\n\n let relations = Object.entries(self._relations)\n .filter(\n // Chain\n ([, { model }]) => chain.every((c) => c !== model)\n )\n .filter(\n // Changes only\n ([, { model, state }]) =>\n !changes_only ||\n (changes_only &&\n (state === ODataModelState.Changed ||\n (model !== null && model.hasChanged({ include_navigation }))))\n )\n .filter(\n ([, { field, model }]) =>\n // Navigation\n (include_navigation && field.navigation && model !== null) ||\n !field.navigation\n )\n .map(([k, { model, field, state }]) => {\n let changesOnly =\n changes_only &&\n state !== ODataModelState.Changed &&\n !!field.navigation;\n let includeKey = include_key && !!field.navigation;\n if (ODataModelOptions.isModel(model)) {\n return [\n k,\n (model as ODataModel<any>).toEntity({\n client_id,\n include_navigation,\n include_concurrency,\n include_non_field,\n field_mapping,\n changes_only: changesOnly,\n include_key: includeKey,\n chain: [self, ...chain],\n }),\n ];\n } else if (ODataModelOptions.isCollection(model)) {\n return [\n k,\n (model as ODataCollection<any, ODataModel<any>>).toEntities({\n client_id,\n include_navigation,\n include_concurrency,\n include_non_field,\n field_mapping,\n changes_only: changesOnly,\n include_key: includeKey,\n chain: [self, ...chain],\n }),\n ];\n }\n return [k, model];\n })\n .reduce((acc, [k, v]) => {\n const name = field_mapping\n ? this.fields().find(\n (field: ODataModelField<any>) => field.name === k\n )?.field || k\n : k;\n return Object.assign(acc, { [name]: v });\n }, {});\n\n // Create entity\n let entity = Object.assign(attrs, relations);\n\n // Add client_id\n if (client_id) {\n entity[this.cid] = (<any>self)[this.cid];\n }\n\n // Add key\n if (include_key) {\n entity = Object.assign(\n entity,\n this.resolveKey(self, { field_mapping, resolve: false })\n );\n }\n\n return entity;\n }\n\n attributes(\n self: ODataModel<T>,\n {\n changes_only = false,\n include_concurrency = false,\n include_computed = false,\n include_non_field = false,\n field_mapping = false,\n }: {\n changes_only?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_non_field?: boolean;\n field_mapping?: boolean;\n } = {}\n ): { [name: string]: any } {\n // Attributes by fields (attributes for the model type)\n const fieldAttrs = this.fields().reduce((acc, f) => {\n const isChanged = f.name in self._changes;\n const name = field_mapping ? f.field : f.name;\n const value = isChanged\n ? self._changes[f.name]\n : self._attributes[f.name];\n if (f.concurrency && include_concurrency) {\n return Object.assign(acc, { [name]: value });\n } else if (f.computed && include_computed) {\n return Object.assign(acc, { [name]: value });\n } else if (changes_only && isChanged) {\n return Object.assign(acc, { [name]: value });\n } else if (!changes_only && !f.concurrency && !f.computed) {\n return Object.assign(acc, { [name]: value });\n } else {\n return acc;\n }\n }, {});\n if (!include_non_field) return fieldAttrs;\n const names = Object.keys(fieldAttrs);\n // Attributes from object (attributes for object)\n const nonFieldAttrs = Object.entries(self)\n .filter(\n ([k]) =>\n names.indexOf(k) === -1 && !k.startsWith('_') && !k.endsWith('$')\n )\n .reduce((acc, [k, v]) => Object.assign(acc, { [k]: v }), {});\n return { ...fieldAttrs, ...nonFieldAttrs };\n }\n\n reset(\n self: ODataModel<T>,\n { name, silent = false }: { name?: string; silent?: boolean } = {}\n ) {\n if (!Types.isEmpty(name) && (name as string) in self._changes) {\n const value = self._attributes[name as string];\n const previous = self._changes[name as string];\n delete self._changes[name as string];\n if (!silent) {\n self.events$.emit(\n new ODataModelEvent('change', {\n model: self,\n track: name,\n value,\n previous,\n })\n );\n }\n } else if (Types.isEmpty(name)) {\n const entries = Object.entries(self._changes);\n self._changes = {};\n if (!silent) {\n entries.forEach((entry) => {\n self.events$.emit(\n new ODataModelEvent('change', {\n track: entry[0],\n model: self,\n value: self._attributes[entry[0]],\n previous: entry[1],\n })\n );\n });\n }\n }\n }\n\n assign(\n self: ODataModel<T>,\n entity: Partial<T> | { [name: string]: any },\n {\n reset = false,\n silent = false,\n }: { reset?: boolean; silent?: boolean } = {}\n ) {\n self._resetting = reset;\n self._silent = silent;\n\n const changes: string[] = [];\n\n // Apply entity\n const model = self as any;\n Object.entries(entity)\n .filter(([, value]) => value !== undefined) // Filter undefined\n .forEach(([key, value]) => {\n const field = this.fields({\n include_parents: true,\n include_navigation: true,\n }).find(\n (field: ODataModelField<any>) =>\n (self._resetting && field.field === key) || field.name === key\n );\n\n if (field !== undefined) {\n // Delegated to private setter\n if (this._set(self, field, value)) changes.push(field.name);\n } else {\n // Basic assignment\n const current = model[key];\n model[key] = value;\n if (current !== value) changes.push(key);\n }\n });\n\n if (!self._silent && changes.length > 0) {\n self.events$.emit(\n new ODataModelEvent(self._resetting ? 'reset' : 'update', {\n model: self,\n options: { changes },\n })\n );\n }\n self._resetting = false;\n self._silent = false;\n }\n\n static isModel(obj: any) {\n return {}.toString.call(obj) === '[object Model]';\n }\n\n static isCollection(obj: any) {\n return {}.toString.call(obj) === '[object Collection]';\n }\n\n private updateCollection<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n collection: ODataCollection<F, ODataModel<F>>,\n value: ODataCollection<F, ODataModel<F>> | T[] | { [name: string]: any }[]\n ) {\n if (ODataModelOptions.isCollection(value)) {\n value = (value as ODataCollection<any, ODataModel<any>>).toEntities(\n INCLUDE_ALL\n );\n }\n collection._annotations = field.annotationsFactory(\n self.annots()\n ) as ODataEntitiesAnnotations;\n collection.assign(value as T[] | { [name: string]: any }[], {\n reset: self._resetting,\n silent: self._silent,\n });\n return collection.hasChanged();\n }\n private updateModel<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n model: ODataModel<F>,\n value: ODataModel<F> | F | { [name: string]: any }\n ) {\n if (ODataModelOptions.isModel(value)) {\n value = (value as ODataModel<F>).toEntity(INCLUDE_ALL);\n }\n model._annotations = field.annotationsFactory(\n self.annots()\n ) as ODataEntityAnnotations;\n model.assign(value as F | { [name: string]: any }, {\n reset: self._resetting,\n silent: self._silent,\n });\n return model.hasChanged();\n }\n\n private _get<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>\n ): F | ODataModel<F> | ODataCollection<F, ODataModel<F>> | null | undefined {\n if (field.isStructuredType()) {\n return self._relations[field.name]?.model;\n } else {\n return this.attributes(self, {\n include_concurrency: true,\n include_computed: true,\n })[field.name];\n }\n }\n\n private _set<F>(\n self: ODataModel<T>,\n field: ODataModelField<F>,\n value:\n | F\n | F[]\n | { [name: string]: any }\n | { [name: string]: any }[]\n | ODataModel<F>\n | ODataCollection<F, ODataModel<F>>\n | null\n ): boolean {\n let changed = false;\n if (field.isStructuredType()) {\n // Ensures that the relation exists\n if (!(field.name in self._relations)) {\n self._relations[field.name] = {\n state: ODataModelState.Unchanged,\n model: null,\n field: field,\n subscription: null,\n };\n }\n\n const relation = self._relations[field.name];\n const currentModel = relation.model as\n | ODataModel<any>\n | ODataCollection<any, ODataModel<any>>\n | null;\n\n if (value === null) {\n relation.model = value as null;\n changed = currentModel !== value;\n this._unsubscribe(self, relation);\n } else if (ODataModelOptions.isCollection(currentModel)) {\n changed = this.updateCollection<F>(\n self,\n field,\n currentModel as ODataCollection<F, ODataModel<F>>,\n value as\n | ODataCollection<F, ODataModel<F>>\n | T[]\n | { [name: string]: any }[]\n );\n } else if (ODataModelOptions.isModel(currentModel)) {\n changed = this.updateModel<F>(\n self,\n field,\n currentModel as ODataModel<F>,\n value as ODataModel<F> | F | { [name: string]: any }\n );\n } else if (Types.isArray(value) || Types.isPlainObject(value)) {\n relation.model = field.modelCollectionFactory<T, F>({\n parent: self,\n value: value,\n reset: self._resetting,\n });\n changed = true;\n this._subscribe(self, relation);\n } else if (\n ODataModelOptions.isCollection(value) ||\n ODataModelOptions.isModel(value)\n ) {\n relation.model = value as\n | ODataModel<F>\n | ODataCollection<F, ODataModel<F>>\n | null;\n changed = true;\n this._subscribe(self, relation);\n }\n if (ODataModelOptions.isModel(relation.model)) {\n var ref = (relation.model as ODataModel<F>).referential(field);\n if (ref !== undefined) {\n Object.assign(self, ref);\n }\n }\n relation.state =\n self._resetting || !changed\n ? ODataModelState.Unchanged\n : ODataModelState.Changed;\n if (!self._silent && changed) {\n self.events$.emit(\n new ODataModelEvent('change', {\n track: field.name,\n model: self,\n value: relation.model,\n previous: currentModel,\n })\n );\n }\n } else {\n const attrs = this.attributes(self, {\n include_concurrency: true,\n include_computed: true,\n });\n const currentValue = attrs[field.name];\n changed = !Types.isEqual(currentValue, value);\n if (self._resetting) {\n delete self._changes[field.name];\n self._attributes[field.name] = value;\n } else if (Types.isEqual(value, self._attributes[field.name])) {\n delete self._changes[field.name];\n } else if (changed) {\n self._changes[field.name] = value;\n }\n if (!self._silent && changed) {\n self.events$.emit(\n new ODataModelEvent('change', {\n track: field.name,\n model: self,\n value,\n previous: currentValue,\n options: { key: field.isKey() },\n })\n );\n }\n }\n return changed;\n }\n\n private _unsubscribe<F>(\n self: ODataModel<T>,\n relation: ODataModelRelation<F>\n ) {\n if (relation.subscription !== null) {\n relation.subscription.unsubscribe();\n relation.subscription = null;\n }\n }\n private _subscribe<F>(self: ODataModel<T>, relation: ODataModelRelation<F>) {\n if (relation.subscription !== null) {\n throw new Error('Subscription already exists');\n }\n if (relation.model === null) {\n throw new Error('Subscription model is null');\n }\n if (!relation.model.isParentOf(self)) {\n relation.model._parent = [self, relation.field];\n }\n relation.subscription = relation.model.events$.subscribe(\n (event: ODataModelEvent<any>) => {\n if (\n BUBBLING.indexOf(event.name) !== -1 &&\n event.bubbling &&\n !event.visited(self)\n ) {\n if (event.model === relation.model) {\n if (\n event.name === 'change' &&\n relation.field.navigation &&\n event.options?.key\n ) {\n var ref = relation.model.referential(relation.field);\n if (ref !== undefined) {\n Object.assign(self, ref);\n }\n }\n }\n\n event.push(self, relation.field.name);\n self.events$.emit(event);\n }\n }\n );\n }\n}\n","import { map, switchMap, tap } from 'rxjs/operators';\nimport { forkJoin, Observable, of, throwError } from 'rxjs';\n\nimport {\n ODataEntitySetResource,\n ODataEntityResource,\n ODataNavigationPropertyResource,\n ODataEntitiesAnnotations,\n HttpOptions,\n ODataEntities,\n ODataPropertyResource,\n ODataEntityAnnotations,\n Select,\n Expand,\n OptionHandler,\n Transform,\n Filter,\n OrderBy,\n EntityKey,\n QueryArguments,\n HttpQueryOptions,\n} from '../resources/index';\n\nimport { EventEmitter } from '@angular/core';\nimport { Types } from '../utils/types';\nimport { ODataModel } from './model';\nimport {\n BUBBLING,\n ODataModelResource,\n ODataCollectionResource,\n ODataModelOptions,\n ODataModelEvent,\n ODataModelField,\n ODataModelState,\n ODataModelEntry,\n INCLUDE_ALL,\n} from './options';\nimport { ODataHelper } from '../helper';\nimport { DEFAULT_VERSION } from '../constants';\n\nexport class ODataCollection<T, M extends ODataModel<T>>\n implements Iterable<M>\n{\n static model: typeof ODataModel | null = null;\n _parent:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = null;\n _resource?: ODataCollectionResource<T>;\n _annotations!: ODataEntitiesAnnotations;\n _entries: ODataModelEntry<T, M>[] = [];\n _model: typeof ODataModel;\n\n models() {\n return this._entries\n .filter((e) => e.state !== ODataModelState.Removed)\n .map((e) => e.model);\n }\n\n get length(): number {\n return this.models().length;\n }\n\n //Events\n events$ = new EventEmitter<ODataModelEvent<T>>();\n constructor(\n entities: Partial<T>[] | { [name: string]: any }[] = [],\n {\n parent,\n resource,\n annots,\n model,\n reset = false,\n }: {\n parent?: [ODataModel<any>, ODataModelField<any>];\n resource?: ODataCollectionResource<T>;\n annots?: ODataEntitiesAnnotations;\n model?: typeof ODataModel;\n reset?: boolean;\n } = {}\n ) {\n const Klass = this.constructor as typeof ODataCollection;\n if (model === undefined && Klass.model !== null) model = Klass.model;\n if (model === undefined) throw new Error('Collection need model');\n this._model = model;\n\n // Parent\n if (parent !== undefined) {\n this._parent = parent;\n } else {\n // Resource\n resource = resource || this._model.meta.collectionResourceFactory();\n if (resource === undefined)\n throw new Error(`Can't create collection without resource`);\n this.attach(resource);\n }\n\n // Annotations\n this._annotations =\n annots ||\n new ODataEntitiesAnnotations(\n resource?.api.options.helper || ODataHelper[DEFAULT_VERSION]\n );\n\n entities = entities || [];\n this.assign(entities, { reset });\n }\n\n isParentOf(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): boolean {\n return (\n child !== this &&\n ODataModelOptions.chain(child).some((p) => p[0] === this)\n );\n }\n\n resource(): ODataCollectionResource<T> {\n return ODataModelOptions.resource<T>(this) as ODataCollectionResource<T>;\n }\n\n attach(resource: ODataCollectionResource<T>) {\n if (\n this._resource !== undefined &&\n this._resource.type() !== resource.type() &&\n !resource.isSubtypeOf(this._resource)\n )\n throw new Error(\n `Can't reattach ${resource.type()} to ${this._resource.type()}`\n );\n\n this._entries.forEach(({ model }) => {\n const mr = this._model.meta.modelResourceFactory({\n baseResource: resource,\n }) as ODataModelResource<T>;\n model.attach(mr);\n });\n\n const current = this._resource;\n if (current === undefined || !current.isEqualTo(resource)) {\n this._resource = resource;\n this.events$.emit(\n new ODataModelEvent('attach', {\n collection: this,\n previous: current,\n value: resource,\n })\n );\n }\n }\n\n asEntitySet<R>(func: (collection: this) => Observable<R>): Observable<R> {\n const parent = this._parent;\n this._parent = null;\n return func(this).pipe(tap(() => (this._parent = parent)));\n }\n\n annots() {\n return this._annotations;\n }\n\n private modelFactory(\n data: Partial<T> | { [name: string]: any },\n { reset = false }: { reset?: boolean } = {}\n ): M {\n let Model = this._model;\n const helper = this._annotations.helper;\n const annots = new ODataEntityAnnotations(\n helper,\n helper.annotations(data) || {}\n );\n\n if (annots?.type !== undefined && Model.meta !== null) {\n let schema = Model.meta.findChildOptions((o) =>\n o.isTypeOf(annots.type as string)\n )?.schema;\n if (schema !== undefined && schema.model !== undefined)\n // Change to child model\n Model = schema.model;\n }\n\n return new Model(data, {\n annots,\n reset,\n parent: [this, null],\n }) as M;\n }\n\n toEntities({\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}): (T | { [name: string]: any })[] {\n return this._entries\n .filter(\n ({ model, state }) =>\n state !== ODataModelState.Removed && chain.every((c) => c !== model)\n )\n .map(({ model, state }) => {\n var changesOnly = changes_only && state !== ODataModelState.Added;\n return model.toEntity({\n client_id,\n include_navigation,\n include_concurrency,\n include_computed,\n include_key,\n include_non_field,\n field_mapping,\n changes_only: changesOnly,\n chain: [this, ...chain],\n });\n });\n }\n\n hasChanged({ include_navigation }: { include_navigation?: boolean } = {}) {\n return (\n this._entries.some((e) => e.state !== ODataModelState.Unchanged) ||\n this.models().some((m) => m.hasChanged({ include_navigation }))\n );\n }\n\n clone<C extends ODataCollection<T, M>>() {\n let Ctor = <typeof ODataCollection>this.constructor;\n return new Ctor(this.toEntities(INCLUDE_ALL), {\n resource: this.resource() as ODataCollectionResource<T>,\n annots: this.annots(),\n }) as C;\n }\n\n fetch({\n withCount,\n ...options\n }: HttpOptions & {\n withCount?: boolean;\n } = {}): Observable<this> {\n const resource = this.resource();\n if (resource === undefined)\n return throwError('fetch: Resource is undefined');\n\n let obs$: Observable<ODataEntities<any>>;\n if (resource instanceof ODataEntitySetResource) {\n obs$ = resource.get({ withCount, ...options });\n } else if (resource instanceof ODataNavigationPropertyResource) {\n obs$ = resource.get({ responseType: 'entities', withCount, ...options });\n } else {\n obs$ = resource.get({ responseType: 'entities', withCount, ...options });\n }\n this.events$.emit(\n new ODataModelEvent('request', { collection: this, value: obs$ })\n );\n return obs$.pipe(\n map(({ entities, annots }) => {\n this._annotations = annots;\n this.assign(entities || [], { reset: true });\n this.events$.emit(new ODataModelEvent('sync', { collection: this }));\n return this;\n })\n );\n }\n\n fetchAll(options?: HttpOptions): Observable<this> {\n const resource = this.resource() as ODataCollectionResource<T> | undefined;\n if (resource === undefined)\n return throwError('fetchAll: Resource is undefined');\n\n if (resource instanceof ODataPropertyResource)\n return throwError('fetchAll: Resource is ODataPropertyResource');\n\n const obs$ = resource.fetchAll(options);\n this.events$.emit(\n new ODataModelEvent('request', {\n collection: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map((entities) => {\n this._annotations = new ODataEntitiesAnnotations(\n resource?.api.options.helper\n );\n this.assign(entities || [], { reset: true });\n this.events$.emit(\n new ODataModelEvent('sync', {\n collection: this,\n options: { entities },\n })\n );\n return this;\n })\n );\n }\n\n /**\n * Save all models in the collection\n * @param relModel The model is relationship\n * @param method The method to use\n * @param options HttpOptions\n */\n save({\n relModel = false,\n refOnly = false,\n method,\n ...options\n }: HttpOptions & {\n relModel?: boolean;\n refOnly?: boolean;\n method?: 'update' | 'patch';\n } = {}): Observable<this> {\n const resource = this.resource();\n if (resource === undefined)\n return throwError('saveAll: Resource is undefined');\n\n if (resource instanceof ODataPropertyResource)\n return throwError('fetchAll: Resource is ODataPropertyResource');\n\n let toDestroy: M[] = [];\n let toCreate: M[] = [];\n let toUpdate: M[] = [];\n\n this._entries.forEach((entry) => {\n const model = entry.model;\n if (entry.state === ODataModelState.Removed) {\n toDestroy.push(entry.model);\n } else if (entry.state === ODataModelState.Added) {\n toCreate.push(entry.model);\n } else if (model.hasChanged()) {\n toUpdate.push(entry.model);\n }\n });\n if (toDestroy.length > 0 || toCreate.length > 0 || toUpdate.length > 0) {\n const obs$ = forkJoin([\n ...toDestroy.map((m) =>\n relModel\n ? m.asEntity((e) => e.destroy(options))\n : this.removeReference(m, options)\n ),\n ...toCreate.map((m) =>\n relModel\n ? m.asEntity((e) => e.save({ method: 'create', ...options }))\n : refOnly\n ? this.addReference(m, options)\n : m\n .asEntity((e) =>\n e.save({ method: m.isNew() ? 'create' : method, ...options })\n )\n .pipe(switchMap((r) => this.addReference(r, options)))\n ),\n ...toUpdate.map((m) =>\n m.asEntity((e) => e.save({ method, ...options }))\n ),\n ]);\n this.events$.emit(\n new ODataModelEvent('request', {\n collection: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map(() => {\n this._entries = this._entries\n .filter((entry) => entry.state !== ODataModelState.Removed)\n .map((entry) =>\n Object.assign(entry, { state: ODataModelState.Unchanged })\n );\n this.events$.emit(new ODataModelEvent('sync', { collection: this }));\n return this;\n })\n );\n }\n return of(this);\n }\n\n private addReference(model: M, options?: HttpOptions): Observable<M> {\n const resource = this.resource();\n if (!model.isNew() && resource instanceof ODataNavigationPropertyResource) {\n return resource\n .reference()\n .add(\n model._meta.entityResource(model) as ODataEntityResource<T>,\n options\n )\n .pipe(map(() => model));\n }\n return of(model);\n }\n\n private _addModel(\n model: M,\n {\n silent = false,\n reset = false,\n position = -1,\n }: { silent?: boolean; reset?: boolean; position?: number } = {}\n ): M | undefined {\n const key = model.key();\n let entry = this._findEntry({\n model,\n key,\n cid: (<any>model)[this._model.meta.cid],\n });\n if (entry === undefined || entry.state === ODataModelState.Removed) {\n if (entry !== undefined && entry.state === ODataModelState.Removed) {\n const index = this._entries.indexOf(entry);\n this._entries.splice(index, 1);\n }\n\n // Create Entry\n entry = {\n state: reset ? ODataModelState.Unchanged : ODataModelState.Added,\n model,\n key: model.key(),\n subscription: null,\n };\n // Subscribe\n this._subscribe(entry);\n // Now add\n if (position >= 0) this._entries.splice(position, 0, entry);\n else this._entries.push(entry);\n\n if (!silent) {\n model.events$.emit(\n new ODataModelEvent('add', { model, collection: this })\n );\n }\n return entry.model;\n }\n return undefined;\n }\n\n protected addModel(\n model: M,\n {\n silent = false,\n reset = false,\n position = -1,\n }: { silent?: boolean; reset?: boolean; position?: number } = {}\n ) {\n if (position < 0) position = this._bisect(model);\n const added = this._addModel(model, { silent, reset, position });\n if (!silent && added !== undefined) {\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n options: { added: [added], removed: [], merged: [] },\n })\n );\n }\n }\n\n add(\n model: M,\n {\n silent = false,\n server = true,\n position = -1,\n }: { silent?: boolean; server?: boolean; position?: number } = {}\n ): Observable<this> {\n if (server) {\n return this.addReference(model).pipe(\n map((model) => {\n this.addModel(model, { silent, position, reset: true });\n return this;\n })\n );\n } else {\n this.addModel(model, { silent, position });\n return of(this);\n }\n }\n\n private removeReference(model: M, options?: HttpOptions): Observable<M> {\n const resource = this.resource();\n if (!model.isNew() && resource instanceof ODataNavigationPropertyResource) {\n return resource\n .reference()\n .remove(\n model._meta.entityResource(model) as ODataEntityResource<T>,\n options\n )\n .pipe(map(() => model));\n }\n return of(model);\n }\n\n private _removeModel(\n model: M,\n {\n silent = false,\n reset = false,\n }: { silent?: boolean; reset?: boolean } = {}\n ): M | undefined {\n const key = model.key();\n let entry = this._findEntry({\n model,\n key,\n cid: (<any>model)[this._model.meta.cid],\n });\n if (entry !== undefined && entry.state !== ODataModelState.Removed) {\n // Emit Event\n if (!silent)\n model.events$.emit(\n new ODataModelEvent('remove', { model, collection: this })\n );\n\n // Now remove\n const index = this._entries.indexOf(entry);\n this._entries.splice(index, 1);\n if (!(reset || entry.state === ODataModelState.Added)) {\n // Move to end of array and mark as removed\n entry.state = ODataModelState.Removed;\n this._entries.push(entry);\n }\n this._unsubscribe(entry);\n return entry.model;\n }\n return undefined;\n }\n\n protected removeModel(\n model: M,\n {\n silent = false,\n reset = false,\n }: { silent?: boolean; reset?: boolean } = {}\n ) {\n const removed = this._removeModel(model, { silent, reset });\n if (!silent && removed !== undefined) {\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n options: { added: [], removed: [removed], merged: [] },\n })\n );\n }\n }\n\n remove(\n model: M,\n {\n silent = false,\n server = true,\n }: { silent?: boolean; server?: boolean } = {}\n ): Observable<this> {\n if (server) {\n return this.removeReference(model).pipe(\n map((model) => {\n this.removeModel(model, { silent, reset: true });\n return this;\n })\n );\n } else {\n this.removeModel(model, { silent });\n return of(this);\n }\n }\n\n create(\n attrs: T = {} as T,\n {\n silent = false,\n server = true,\n }: { silent?: boolean; server?: boolean } = {}\n ) {\n const model = this.modelFactory(attrs);\n return (\n model.isValid() && server ? model.asEntity((m) => m.save()) : of(model)\n ).pipe(\n switchMap((model) => this.add(model, { silent, server })),\n map(() => model)\n );\n }\n\n set(path: string | string[], value: any) {\n const Model = this._model;\n const pathArray = (\n Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n if (pathArray.length > 1) {\n const model = this._entries[Number(pathArray[0])].model;\n return model.set(pathArray.slice(1), value);\n }\n if (pathArray.length === 1 && ODataModelOptions.isModel(value)) {\n let toAdd: M[] = [];\n let toMerge: M[] = [];\n let toRemove: M[] = [];\n let index = Number(pathArray[0]);\n const model = this.models()[index];\n const entry = this._findEntry({ model });\n if (entry !== undefined) {\n //TODO: Remove/Add or Merge?\n // Merge\n entry.model.assign(value.toEntity({ client_id: true, ...INCLUDE_ALL }));\n if (entry.model.hasChanged()) toMerge.push(model);\n } else {\n // Add\n this._addModel(value);\n toAdd.push(model);\n }\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n options: { added: toAdd, removed: toRemove, merged: toMerge },\n })\n );\n return value;\n }\n }\n\n get(path: string | string[] | number): any {\n const Model = this._model;\n const pathArray = (\n Types.isArray(path) ? path : `${path}`.match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n const value = this.models()[Number(pathArray[0])];\n if (pathArray.length > 1 && ODataModelOptions.isModel(value)) {\n return value.get(pathArray.slice(1));\n }\n return value;\n }\n\n reset({\n path,\n silent = false,\n }: { path?: string | string[]; silent?: boolean } = {}) {\n if (Types.isEmpty(path)) {\n this.models().forEach((m) => m.reset({ silent }));\n } else {\n const Model = this._model;\n const pathArray = (\n Types.isArray(path) ? path : `${path}`.match(/([^[.\\]])+/g)\n ) as any[];\n const value = this.models()[Number(pathArray[0])];\n if (ODataModelOptions.isModel(value)) {\n value.reset({ path: pathArray.slice(1), silent });\n }\n }\n }\n\n assign(\n objects: Partial<T>[] | { [name: string]: any }[] | M[],\n {\n reset = false,\n silent = false,\n }: { reset?: boolean; silent?: boolean } = {}\n ) {\n const Model = this._model;\n\n let toAdd: M[] = [];\n let toMerge: M[] = [];\n let toRemove: M[] = [];\n let toSort: [M, number][] = [];\n let modelMap: string[] = [];\n objects.forEach((obj, index) => {\n const isModel = ODataModelOptions.isModel(obj);\n const key =\n Model !== null && Model.meta ? Model.meta.resolveKey(obj) : undefined;\n const cid =\n Model.meta.cid in obj ? (<any>obj)[Model.meta.cid] : undefined;\n // Try find entry\n const entry = isModel\n ? this._findEntry({ model: obj as M }) // By Model\n : this._findEntry({ cid, key }); // By Cid or Key\n\n let model: M;\n if (entry !== undefined) {\n // Merge\n model = entry.model;\n if (model !== obj) {\n // Get entity from model\n if (isModel) {\n const entity = (obj as M).toEntity({\n client_id: true,\n ...INCLUDE_ALL,\n });\n model.assign(entity, { reset, silent });\n } else {\n const helper = this._annotations.helper;\n const annots = new ODataEntityAnnotations(\n helper,\n helper.annotations(obj) || {}\n );\n const entity = annots.attributes<T>(obj, 'full');\n model._annotations = annots;\n model.assign(entity, { reset, silent });\n }\n // Model Change?\n if (model.hasChanged()) toMerge.push(model);\n }\n // Has Sort or Index Change?\n if (toSort.length > 0 || index !== this.models().indexOf(model)) {\n toSort.push([model, index]);\n }\n } else {\n // Add\n model = isModel\n ? (obj as M)\n : this.modelFactory(obj as Partial<T> | { [name: string]: any }, {\n reset,\n });\n toAdd.push(model);\n }\n modelMap.push((<any>model)[Model.meta.cid]);\n });\n this._entries\n .filter((e) => modelMap.indexOf((<any>e.model)[Model.meta.cid]) === -1)\n .forEach((entry) => {\n toRemove.push(entry.model);\n });\n\n toRemove.forEach((m) => this._removeModel(m, { silent: silent, reset }));\n toAdd.forEach((m) => this._addModel(m, { silent: silent, reset }));\n toSort.forEach((m) => {\n this._removeModel(m[0], { silent: true, reset });\n this._addModel(m[0], { silent: true, reset, position: m[1] });\n });\n\n if (\n toAdd.length > 0 ||\n toRemove.length > 0 ||\n toMerge.length > 0 ||\n toSort.length > 0\n ) {\n this._sortBy = null;\n if (!silent) {\n this.events$.emit(\n new ODataModelEvent(reset ? 'reset' : 'update', {\n collection: this,\n options: {\n added: toAdd,\n removed: toRemove,\n merged: toMerge,\n sorted: toSort,\n },\n })\n );\n }\n }\n }\n\n query(\n func: (q: {\n select(opts?: Select<T>): OptionHandler<Select<T>>;\n expand(opts?: Expand<T>): OptionHandler<Expand<T>>;\n transform(opts?: Transform<T>): OptionHandler<Transform<T>>;\n search(opts?: string): OptionHandler<string>;\n filter(opts?: Filter): OptionHandler<Filter>;\n orderBy(opts?: OrderBy<T>): OptionHandler<OrderBy<T>>;\n format(opts?: string): OptionHandler<string>;\n top(opts?: number): OptionHandler<number>;\n skip(opts?: number): OptionHandler<number>;\n skiptoken(opts?: string): OptionHandler<string>;\n paging({\n skip,\n skiptoken,\n top,\n }: {\n skip?: number;\n skiptoken?: string;\n top?: number;\n }): void;\n clearPaging(): void;\n apply(query: QueryArguments<T>): void;\n }) => void\n ) {\n const resource = this.resource() as ODataCollectionResource<T> | undefined;\n if (resource === undefined)\n throw new Error(`Can't query without ODataResource`);\n func(resource.query);\n this.attach(resource);\n }\n\n protected callFunction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & HttpQueryOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (resource instanceof ODataEntitySetResource) {\n const func = resource.function<P, R>(name);\n func.query.apply(options);\n switch (responseType) {\n case 'property':\n return func.callProperty(params, options);\n case 'model':\n return func.callModel(params, options);\n case 'collection':\n return func.callCollection(params, options);\n default:\n return func.call(params, { responseType, ...options });\n }\n }\n return throwError(`Can't function without ODataEntitySetResource`);\n }\n\n protected callAction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & HttpQueryOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (resource instanceof ODataEntitySetResource) {\n const action = resource.action<P, R>(name);\n action.query.apply(options);\n switch (responseType) {\n case 'property':\n return action.callProperty(params, options);\n case 'model':\n return action.callModel(params, options);\n case 'collection':\n return action.callCollection(params, options);\n default:\n return action.call(params, { responseType, ...options });\n }\n }\n return throwError(`Can't action without ODataEntitySetResource`);\n }\n\n private _unsubscribe(entry: ODataModelEntry<T, M>) {\n if (entry.subscription !== null) {\n entry.subscription.unsubscribe();\n entry.subscription = null;\n }\n }\n\n private _subscribe(entry: ODataModelEntry<T, M>) {\n if (entry.subscription !== null) {\n throw new Error('Subscription already exists');\n }\n if (!entry.model.isParentOf(this)) {\n entry.model._parent = [this, null];\n }\n entry.subscription = entry.model.events$.subscribe(\n (event: ODataModelEvent<T>) => {\n if (\n BUBBLING.indexOf(event.name) !== -1 &&\n event.bubbling &&\n !event.visited(this)\n ) {\n if (event.model === entry.model) {\n if (event.name === 'destroy') {\n this.removeModel(entry.model, { reset: true });\n } else if (event.name === 'change' && event.options?.key) {\n entry.key = entry.model.key();\n }\n }\n\n const index = this.models().indexOf(entry.model);\n event.push(this, index);\n this.events$.emit(event);\n }\n }\n );\n }\n\n private _findEntry({\n model,\n cid,\n key,\n }: {\n model?: ODataModel<T>;\n cid?: string;\n key?: EntityKey<T> | { [name: string]: any };\n } = {}) {\n return this._entries.find((entry) => {\n const byModel = model !== undefined && entry.model.equals(model);\n const byCid =\n cid !== undefined && (<any>entry.model)[this._model.meta.cid] === cid;\n const byKey =\n key !== undefined &&\n entry.key !== undefined &&\n Types.isEqual(entry.key, key);\n return byModel || byCid || byKey;\n });\n }\n\n // Collection functions\n get [Symbol.toStringTag]() {\n return 'Collection';\n }\n\n public [Symbol.iterator]() {\n let pointer = 0;\n let models = this.models();\n return {\n next(): IteratorResult<M> {\n return {\n done: pointer === models.length,\n value: models[pointer++],\n };\n },\n };\n }\n\n contains(model: M) {\n return this.models().some((m) => m.equals(model));\n }\n\n filter(predicate: (m: M) => boolean): M[] {\n return this.models().filter(predicate);\n }\n\n //#region Sort\n private _bisect(model: M) {\n let index = -1;\n if (this._sortBy !== null) {\n for (index = 0; index < this._entries.length; index++) {\n if (this._compare(model, this._entries[index], this._sortBy, 0) < 0) {\n return index;\n }\n }\n }\n return index;\n }\n\n private _compare(\n e1: ODataModelEntry<T, M> | M,\n e2: ODataModelEntry<T, M> | M,\n by: { field: string | keyof T; order?: 1 | -1 }[],\n index: number\n ): number {\n let m1 = ODataModelOptions.isModel(e1)\n ? (e1 as M)\n : (e1 as ODataModelEntry<T, M>).model;\n let m2 = ODataModelOptions.isModel(e2)\n ? (e2 as M)\n : (e2 as ODataModelEntry<T, M>).model;\n let value1 = m1.get(by[index].field as string);\n let value2 = m2.get(by[index].field as string);\n let result: number = 0;\n\n if (value1 == null && value2 != null) result = -1;\n else if (value1 != null && value2 == null) result = 1;\n else if (value1 == null && value2 == null) result = 0;\n else if (typeof value1 == 'string' || value1 instanceof String) {\n if (value1.localeCompare && value1 != value2) {\n return (by[index].order || 1) * value1.localeCompare(value2);\n }\n } else {\n result = value1 < value2 ? -1 : 1;\n }\n\n if (value1 == value2) {\n return by.length - 1 > index ? this._compare(e1, e2, by, index + 1) : 0;\n }\n\n return (by[index].order || 1) * result;\n }\n\n _sortBy: { field: string | keyof T; order?: 1 | -1 }[] | null = null;\n isSorted() {\n return this._sortBy !== null;\n }\n\n sort(\n by: { field: string | keyof T; order?: 1 | -1 }[],\n { silent }: { silent?: boolean } = {}\n ) {\n this._sortBy = by;\n this._entries = this._entries.sort(\n (e1: ODataModelEntry<T, M>, e2: ODataModelEntry<T, M>) =>\n this._compare(e1, e2, by, 0)\n );\n if (!silent) {\n this.events$.emit(\n new ODataModelEvent('update', {\n collection: this,\n })\n );\n }\n }\n //#endregion\n}\n","import { EventEmitter } from '@angular/core';\nimport { Observable, throwError, forkJoin, NEVER, of } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\n\nimport {\n ODataEntityResource,\n ODataNavigationPropertyResource,\n ODataPropertyResource,\n HttpOptions,\n ODataEntityAnnotations,\n ODataEntity,\n Select,\n Expand,\n EntityKey,\n OptionHandler,\n QueryArguments,\n HttpQueryOptions,\n} from '../resources/index';\n\nimport { ODataCollection } from './collection';\nimport { Objects, Types } from '../utils';\nimport { ODataStructuredType } from '../schema';\nimport {\n ModelOptions,\n ODataModelEvent,\n ODataModelOptions,\n ODataModelRelation,\n ODataModelResource,\n ODataModelField,\n INCLUDE_ALL,\n} from './options';\n\n// @dynamic\nexport class ODataModel<T> {\n // Properties\n static options: ModelOptions;\n static meta: ODataModelOptions<any>;\n static buildMeta<T>(options: ModelOptions, schema: ODataStructuredType<T>) {\n this.meta = new ODataModelOptions<T>(options, schema);\n }\n // Parent\n _parent:\n | [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ]\n | null = null;\n _attributes: { [name: string]: any } = {};\n _changes: { [name: string]: any } = {};\n _relations: { [name: string]: ODataModelRelation<any> } = {};\n _resource?: ODataModelResource<T>;\n _annotations!: ODataEntityAnnotations;\n _resetting: boolean = false;\n _silent: boolean = false;\n _meta: ODataModelOptions<T>;\n // Events\n events$ = new EventEmitter<ODataModelEvent<T>>();\n constructor(\n data: Partial<T> | { [name: string]: any } = {},\n {\n parent,\n resource,\n annots,\n reset = false,\n }: {\n parent?: [\n ODataModel<any> | ODataCollection<any, ODataModel<any>>,\n ODataModelField<any> | null\n ];\n resource?: ODataModelResource<T>;\n annots?: ODataEntityAnnotations;\n reset?: boolean;\n } = {}\n ) {\n const Klass = this.constructor as typeof ODataModel;\n if (Klass.meta === undefined)\n throw new Error(`Can't create model without metadata`);\n this._meta = Klass.meta;\n this._meta.bind(this, { parent, resource, annots });\n\n // Client Id\n (<any>this)[this._meta.cid] =\n (<any>data)[this._meta.cid] || Objects.uniqueId('c');\n\n let attrs = this.annots().attributes<T>(data, 'full');\n let defaults = this.defaults();\n\n this.assign(Objects.merge(defaults, attrs), { reset });\n }\n get [Symbol.toStringTag]() {\n return 'Model';\n }\n\n equals(other: ODataModel<T>) {\n const thisKey = this.key();\n const otherKey = other.key();\n return (\n this === other ||\n (typeof this === typeof other &&\n ((<any>this)[this._meta.cid] === (<any>other)[this._meta.cid] ||\n (thisKey !== undefined &&\n otherKey !== undefined &&\n Types.isEqual(thisKey, otherKey))))\n );\n }\n\n //#region Resources\n resource(): ODataModelResource<T> {\n return ODataModelOptions.resource<T>(this) as ODataModelResource<T>;\n }\n\n navigationProperty<N>(name: string): ODataNavigationPropertyResource<N> {\n const field = this._meta.field(name);\n if (field === undefined || !field.navigation)\n throw Error(`Can't find navigation property ${name}`);\n\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n throw Error(\"Can't get navigation without ODataEntityResource with key\");\n\n return field.resourceFactory<T, N>(\n resource\n ) as ODataNavigationPropertyResource<N>;\n }\n\n property<N>(name: string): ODataPropertyResource<N> {\n const field = this._meta.field(name);\n if (field === undefined || field.navigation)\n throw Error(`Can't find property ${name}`);\n\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n throw Error(\"Can't get property without ODataEntityResource with key\");\n\n return field.resourceFactory<T, N>(resource) as ODataPropertyResource<N>;\n }\n\n attach(resource: ODataModelResource<T>) {\n return this._meta.attach(this, resource);\n }\n //#endregion\n\n schema() {\n return this._meta.schema;\n }\n\n annots() {\n return this._annotations;\n }\n\n key({\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}):\n | EntityKey<T>\n | { [name: string]: any }\n | undefined {\n return this._meta.resolveKey(this, { field_mapping, resolve });\n }\n\n isNew() {\n return this.key() === undefined;\n }\n\n isParentOf(\n child: ODataModel<any> | ODataCollection<any, ODataModel<any>>\n ): boolean {\n return (\n child !== this &&\n ODataModelOptions.chain(child).some((p) => p[0] === this)\n );\n }\n\n referential(\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n return this._meta.resolveReferential(this, field, {\n field_mapping,\n resolve,\n });\n }\n\n referenced(\n field: ODataModelField<any>,\n {\n field_mapping = false,\n resolve = true,\n }: { field_mapping?: boolean; resolve?: boolean } = {}\n ): { [name: string]: any } | undefined {\n return this._meta.resolveReferenced(this, field, {\n field_mapping,\n resolve,\n });\n }\n\n // Validation\n _errors?: { [key: string]: any };\n protected validate({\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'patch';\n navigation?: boolean;\n } = {}) {\n return this._meta.validate(this, { method, navigation });\n }\n\n isValid({\n method,\n navigation = false,\n }: {\n method?: 'create' | 'update' | 'patch';\n navigation?: boolean;\n } = {}): boolean {\n this._errors = this.validate({ method, navigation });\n if (this._errors !== undefined)\n this.events$.emit(\n new ODataModelEvent('invalid', {\n model: this,\n value: this._errors,\n options: { method },\n })\n );\n return this._errors === undefined;\n }\n\n protected defaults() {\n return this._meta.defaults() || {};\n }\n toEntity({\n client_id = false,\n include_navigation = false,\n include_concurrency = false,\n include_computed = false,\n include_key = true,\n include_non_field = false,\n changes_only = false,\n field_mapping = false,\n chain = [],\n }: {\n client_id?: boolean;\n include_navigation?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_key?: boolean;\n include_non_field?: boolean;\n changes_only?: boolean;\n field_mapping?: boolean;\n chain?: (ODataModel<any> | ODataCollection<any, ODataModel<any>>)[];\n } = {}): T | { [name: string]: any } {\n return this._meta.toEntity(this, {\n client_id,\n include_navigation,\n include_concurrency,\n include_computed,\n include_key,\n include_non_field,\n changes_only,\n field_mapping,\n chain,\n });\n }\n\n attributes({\n changes_only = false,\n include_concurrency = false,\n include_computed = false,\n include_non_field = false,\n field_mapping = false,\n }: {\n changes_only?: boolean;\n include_concurrency?: boolean;\n include_computed?: boolean;\n include_non_field?: boolean;\n field_mapping?: boolean;\n } = {}): { [name: string]: any } {\n return this._meta.attributes(this, {\n changes_only,\n include_concurrency,\n include_computed,\n include_non_field,\n field_mapping,\n });\n }\n\n set(path: string | string[], value: any) {\n const pathArray = (\n Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n if (pathArray.length > 1) {\n const model = (<any>this)[pathArray[0]];\n return model.set(pathArray.slice(1), value);\n }\n if (pathArray.length === 1) {\n return ((<any>this)[pathArray[0]] = value);\n }\n }\n\n get(path: string | string[]): any {\n const pathArray = (\n Types.isArray(path) ? path : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n if (pathArray.length === 0) return undefined;\n const value = (<any>this)[pathArray[0]];\n if (\n pathArray.length > 1 &&\n (value instanceof ODataModel || value instanceof ODataCollection)\n ) {\n return value.get(pathArray.slice(1));\n }\n return value;\n }\n\n reset({\n path,\n silent = false,\n }: { path?: string | string[]; silent?: boolean } = {}) {\n const pathArray: string[] = (\n path === undefined\n ? []\n : Types.isArray(path)\n ? path\n : (path as string).match(/([^[.\\]])+/g)\n ) as any[];\n const name = pathArray[0];\n const value = name !== undefined ? (<any>this)[name] : undefined;\n if (\n ODataModelOptions.isModel(value) ||\n ODataModelOptions.isCollection(value)\n ) {\n value.reset({ path: pathArray.slice(1), silent });\n } else {\n this._meta.reset(this, { name: pathArray[0], silent });\n }\n }\n\n assign(\n entity: Partial<T> | { [name: string]: any },\n {\n reset = false,\n silent = false,\n }: { reset?: boolean; silent?: boolean } = {}\n ) {\n return this._meta.assign(this, entity, { reset, silent });\n }\n\n clone<M extends ODataModel<T>>() {\n let Ctor = <typeof ODataModel>this.constructor;\n return new Ctor(this.toEntity(INCLUDE_ALL), {\n resource: this.resource() as ODataModelResource<T>,\n annots: this.annots(),\n }) as M;\n }\n\n private _request(obs$: Observable<ODataEntity<any>>): Observable<this> {\n this.events$.emit(\n new ODataModelEvent('request', {\n model: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map(({ entity, annots }) => {\n this._annotations = annots;\n this.assign(annots.attributes<T>(entity || {}, 'full'), {\n reset: true,\n });\n this.events$.emit(\n new ODataModelEvent('sync', {\n model: this,\n options: { entity, annots },\n })\n );\n return this;\n })\n );\n }\n\n fetch({\n ...options\n }: HttpOptions & {\n options?: HttpOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError('fetch: Resource is undefined');\n\n let obs$: Observable<ODataEntity<T>>;\n if (resource instanceof ODataEntityResource) {\n if (!resource.hasKey())\n return throwError(\"fetch: Can't fetch model without key\");\n obs$ = resource.get(options);\n } else if (resource instanceof ODataNavigationPropertyResource) {\n obs$ = resource.get({ responseType: 'entity', ...options });\n } else {\n obs$ = (resource as ODataPropertyResource<T>).get({\n responseType: 'entity',\n ...options,\n });\n }\n return this._request(obs$);\n }\n\n save({\n method,\n navigation = false,\n validate = true,\n ...options\n }: HttpOptions & {\n method?: 'create' | 'update' | 'patch';\n navigation?: boolean;\n validate?: boolean;\n options?: HttpOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError('save: Resource is undefined');\n if (!(resource instanceof ODataEntityResource))\n return throwError('save: Resource type ODataEntityResource needed');\n\n // Resolve method and resource key\n if (method === undefined) {\n if (this.schema().isCompoundKey())\n return throwError(\n 'save: Composite key require a specific method, use create/update/patch'\n );\n method = !resource.hasKey() ? 'create' : 'update';\n } else {\n if ((method === 'update' || method === 'patch') && !resource.hasKey())\n return throwError('save: Update/Patch require entity key');\n if (method === 'create') resource.clearKey();\n }\n\n let obs$: Observable<ODataEntity<any>>;\n if (!validate || this.isValid({ method, navigation })) {\n const _entity = this.toEntity({\n changes_only: method === 'patch',\n field_mapping: true,\n include_concurrency: true,\n include_navigation: navigation,\n }) as T;\n obs$ = (\n method === 'create'\n ? resource.post(_entity, options)\n : method === 'patch'\n ? resource.patch(_entity, { etag: this.annots().etag, ...options })\n : resource.put(_entity, { etag: this.annots().etag, ...options })\n ).pipe(\n map(({ entity, annots }) => ({ entity: entity || _entity, annots }))\n );\n } else {\n obs$ = throwError(this._errors);\n }\n return this._request(obs$);\n }\n\n destroy({\n ...options\n }: HttpOptions & {\n options?: HttpOptions;\n } = {}): Observable<this> {\n let resource = this.resource();\n if (resource === undefined)\n return throwError('destroy: Resource is undefined');\n if (!(resource instanceof ODataEntityResource))\n return throwError('destroy: Resource type ODataEntityResource needed');\n if (!resource.hasKey())\n return throwError(\"destroy: Can't destroy model without key\");\n\n const _entity = this.toEntity({ field_mapping: true }) as T;\n const obs$ = resource\n .delete({ etag: this.annots().etag, ...options })\n .pipe(\n map(({ entity, annots }) => ({ entity: entity || _entity, annots }))\n );\n return this._request(obs$).pipe(\n tap(() =>\n this.events$.emit(new ODataModelEvent('destroy', { model: this }))\n )\n );\n }\n\n /**\n * Create an execution context for change the internal query of a resource\n * @param func Function to execute\n */\n query(\n func: (q: {\n select(opts?: Select<T>): OptionHandler<Select<T>>;\n expand(opts?: Expand<T>): OptionHandler<Expand<T>>;\n format(opts?: string): OptionHandler<string>;\n apply(query: QueryArguments<T>): void;\n }) => void\n ) {\n const resource = this.resource() as ODataModelResource<T> | undefined;\n if (resource !== undefined) return this._meta.query(this, resource, func);\n }\n\n /**\n * Perform a check on the internal state of the model and return true if the model is changed.\n * @param include_navigation Check in navigation properties\n * @returns true if the model has changed, false otherwise\n */\n hasChanged({\n include_navigation = false,\n }: { include_navigation?: boolean } = {}) {\n return this._meta.hasChanged(this, { include_navigation });\n }\n\n /**\n * Create an execution context for a given function, where the model is bound to its entity endpoint\n * @param func Context function\n * @returns Observable of R\n */\n asEntity<R>(func: (model: this) => Observable<R>): Observable<R> {\n return this._meta.asEntity(this, func);\n }\n\n protected callFunction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & HttpQueryOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n return throwError(\n \"Can't call function without ODataEntityResource with key\"\n );\n\n const func = resource.function<P, R>(name);\n func.query.apply(options);\n switch (responseType) {\n case 'property':\n return func.callProperty(params, options);\n case 'model':\n return func.callModel(params, options);\n case 'collection':\n return func.callCollection(params, options);\n default:\n return func.call(params, { responseType, ...options });\n }\n }\n\n protected callAction<P, R>(\n name: string,\n params: P | null,\n responseType: 'property' | 'model' | 'collection' | 'none',\n { ...options }: {} & HttpQueryOptions<R> = {}\n ): Observable<R | ODataModel<R> | ODataCollection<R, ODataModel<R>> | null> {\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource) || !resource.hasKey())\n return throwError(\n \"Can't call action without ODataEntityResource with key\"\n );\n\n const action = resource.action<P, R>(name);\n action.query.apply(options);\n switch (responseType) {\n case 'property':\n return action.callProperty(params, options);\n case 'model':\n return action.callModel(params, options);\n case 'collection':\n return action.callCollection(params, options);\n default:\n return action.call(params, { responseType, ...options });\n }\n }\n\n // Cast\n protected cast<S>(type: string): ODataModel<S> {\n const resource = this.resource();\n if (!(resource instanceof ODataEntityResource))\n throw new Error(\n `Can't cast to derived model without ODataEntityResource`\n );\n\n return resource\n .cast<S>(type)\n .asModel(this.toEntity(INCLUDE_ALL), { annots: this.annots() });\n }\n\n protected fetchNavigationProperty<S>(\n name: string,\n responseType: 'model' | 'collection',\n { ...options }: {} & HttpQueryOptions<S> = {}\n ): Observable<ODataModel<S> | ODataCollection<S, ODataModel<S>> | null> {\n const nav = this.navigationProperty<S>(\n name\n ) as ODataNavigationPropertyResource<S>;\n nav.query.apply(options);\n switch (responseType) {\n case 'model':\n return nav.fetchModel(options);\n case 'collection':\n return nav.fetchCollection(options);\n }\n }\n\n // Get Value\n protected getValue<P>(\n name: string,\n options?: HttpOptions\n ): Observable<P | ODataModel<P> | ODataCollection<P, ODataModel<P>> | null> {\n const field = this._meta.field(name);\n if (field === undefined || field.navigation)\n throw Error(`Can't find property ${name}`);\n\n let value = (this as any)[name] as\n | P\n | ODataModel<P>\n | ODataCollection<P, ODataModel<P>>;\n if (value === undefined) {\n const prop = field.resourceFactory(\n this.resource()\n ) as ODataPropertyResource<P>;\n return field.collection\n ? prop\n .fetchCollection(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })))\n : field.isStructuredType()\n ? prop\n .fetchModel(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })))\n : prop\n .fetchProperty(options)\n .pipe(tap((c) => this.assign({ [name]: c }, { silent: true })));\n }\n return of(value as P);\n }\n\n // Set Reference\n protected setReference<P>(\n name: string,\n model: ODataModel<P> | ODataCollection<P, ODataModel<P>> | null,\n options?: HttpOptions\n ): Observable<this> {\n const reference = (\n this.navigationProperty<P>(name) as ODataNavigationPropertyResource<P>\n ).reference();\n\n const etag = this.annots().etag;\n let obs$ = NEVER as Observable<any>;\n if (model instanceof ODataModel) {\n obs$ = reference.set(\n model._meta.entityResource(model) as ODataEntityResource<P>,\n { etag, ...options }\n );\n } else if (model instanceof ODataCollection) {\n obs$ = forkJoin(\n model\n .models()\n .map((m) =>\n reference.add(\n m._meta.entityResource(m) as ODataEntityResource<P>,\n options\n )\n )\n );\n } else if (model === null) {\n obs$ = reference.unset({ etag, ...options });\n }\n this.events$.emit(\n new ODataModelEvent('request', {\n model: this,\n options: { observable: obs$ },\n })\n );\n return obs$.pipe(\n map((model) => {\n this.assign({ [name]: model });\n this.events$.emit(new ODataModelEvent('sync', { model: this }));\n return this;\n })\n );\n }\n\n protected getReference<P>(\n name: string\n ): ODataModel<P> | ODataCollection<P, ODataModel<P>> {\n const field = this._meta.field(name);\n if (field === undefined || !field.navigation)\n throw Error(`Can't find navigation property ${name}`);\n\n let model = (this as any)[name] as\n | ODataModel<P>\n | ODataCollection<P, ODataModel<P>>;\n if (model === undefined) {\n const value = field.collection ? [] : this.referenced(field);\n model = field.modelCollectionFactory<T, P>({ parent: this, value });\n (this as any)[name] = model;\n }\n return model;\n }\n}\n","import { DEFAULT_TIMEOUT, CACHE_KEY_SEPARATOR } from '../constants';\nimport { Cache, PathSegmentNames } from '../types';\nimport { ODataRequest, ODataResponse } from '../resources';\nimport { Observable, of, throwError } from 'rxjs';\nimport { startWith, tap } from 'rxjs/operators';\n\nexport interface ODataCacheEntry<T> {\n payload: T;\n lastRead: number;\n timeout: number;\n tags: string[];\n}\n\nexport abstract class ODataCache implements Cache {\n timeout: number;\n entries: Map<string, ODataCacheEntry<any>>;\n constructor({ timeout = DEFAULT_TIMEOUT }: { timeout?: number }) {\n this.timeout = timeout;\n this.entries = new Map<string, ODataCacheEntry<any>>();\n }\n\n abstract getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined;\n abstract putResponse(req: ODataRequest<any>, res: ODataResponse<any>): void;\n\n scope(req: ODataRequest<any>): string[] {\n const segments = req.resource.cloneSegments();\n return segments.segments({ key: true }).reduce(\n (acc, s) => {\n if (s.name === PathSegmentNames.entitySet)\n acc = [...acc, s.path() as string];\n return acc;\n },\n ['request']\n );\n }\n\n tags(req: ODataRequest<any>, res: ODataResponse<any>): string[] {\n const tags = [];\n const context = res.context;\n if (context.entitySet) {\n tags.push(\n context.key ? `${context.entitySet}(${context.key})` : context.entitySet\n );\n }\n if (context.type) tags.push(context.type);\n return tags;\n }\n\n buildEntry<T>(\n payload: T,\n { timeout, tags }: { timeout?: number; tags?: string[] }\n ): ODataCacheEntry<T> {\n return {\n payload,\n lastRead: Date.now(),\n timeout: timeout || this.timeout,\n tags: tags || [],\n };\n }\n\n buildKey(names: string[]): string {\n return names.join(CACHE_KEY_SEPARATOR);\n }\n\n put<T>(\n name: string,\n payload: T,\n {\n timeout,\n scope,\n tags,\n }: { timeout?: number; scope?: string[]; tags?: string[] } = {}\n ) {\n const entry = this.buildEntry<T>(payload, { timeout, tags });\n const key = this.buildKey([...(scope || []), name]);\n this.entries.set(key, entry);\n this.forget();\n }\n\n get<T>(name: string, { scope }: { scope?: string[] } = {}): T {\n const key = this.buildKey([...(scope || []), name]);\n const entry = this.entries.get(key);\n return entry !== undefined && !this.isExpired(entry)\n ? entry.payload\n : undefined;\n }\n\n forget({\n name,\n scope = [],\n tags = [],\n }: { name?: string; scope?: string[]; tags?: string[] } = {}) {\n // Remove expired cache entries\n if (name !== undefined) scope.push(name);\n const key = scope.length > 0 ? this.buildKey(scope) : undefined;\n this.entries.forEach((entry, k) => {\n if (\n this.isExpired(entry) || // Expired\n (key !== undefined && k.startsWith(key)) || // Key\n (tags.length > 0 && tags.some((t) => entry.tags.indexOf(t) !== -1)) // Tags\n ) {\n this.entries.delete(k);\n }\n });\n }\n\n flush() {\n // Remove all cache entries\n this.entries = new Map<string, ODataCacheEntry<any>>();\n }\n\n isExpired(entry: ODataCacheEntry<any>) {\n return entry.lastRead < Date.now() - (entry.timeout || this.timeout) * 1000;\n }\n\n handleRequest(\n req: ODataRequest<any>,\n res$: Observable<ODataResponse<any>>\n ): Observable<ODataResponse<any>> {\n return req.isFetch()\n ? this.handleFetch(req, res$)\n : req.isMutate()\n ? this.handleMutate(req, res$)\n : res$;\n }\n\n private handleFetch(\n req: ODataRequest<any>,\n res$: Observable<ODataResponse<any>>\n ): Observable<ODataResponse<any>> {\n const policy = req.fetchPolicy;\n const cached = this.getResponse(req);\n if (policy === 'no-cache') {\n return res$;\n }\n if (policy === 'cache-only') {\n if (cached) {\n return of(cached);\n } else {\n return throwError('No Cached');\n }\n }\n if (\n policy === 'cache-first' ||\n policy === 'cache-and-network' ||\n policy === 'network-only'\n ) {\n res$ = res$.pipe(\n tap((res: ODataResponse<any>) => {\n if (res.options.cacheability !== 'no-store')\n this.putResponse(req, res);\n })\n );\n }\n return cached !== undefined && policy !== 'network-only'\n ? policy === 'cache-and-network'\n ? res$.pipe(startWith(cached))\n : of(cached)\n : res$;\n }\n\n private handleMutate(\n req: ODataRequest<any>,\n res$: Observable<ODataResponse<any>>\n ): Observable<ODataResponse<any>> {\n const scope = this.scope(req);\n this.forget({ scope });\n return res$;\n }\n}\n","import type { ODataRequest, ODataResponse } from '../resources';\nimport { ODataCache } from './cache';\n\nexport class ODataInMemoryCache extends ODataCache {\n constructor({ timeout }: { timeout?: number } = {}) {\n super({ timeout });\n }\n\n putResponse(req: ODataRequest<any>, res: ODataResponse<any>) {\n var scope = this.scope(req);\n var tags = this.tags(req, res);\n this.put(req.pathWithParams, res, {\n timeout: res.options.maxAge,\n scope,\n tags,\n });\n }\n\n getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined {\n var scope = this.scope(req);\n return this.get(req.pathWithParams, { scope });\n }\n}\n","import { ODataRequest, ODataResponse } from '../resources';\nimport { ODataCache, ODataCacheEntry } from './cache';\n\ninterface ResponseJson {\n body: any | null;\n headers: { [name: string]: string | string[] };\n status: number;\n statusText: string;\n url: string | null;\n}\n\nexport class ODataInStorageCache extends ODataCache {\n name: string;\n storage: Storage;\n constructor({\n name,\n storage = sessionStorage,\n timeout,\n }: {\n timeout?: number;\n name: string;\n storage?: Storage;\n }) {\n super({ timeout });\n this.name = name;\n this.storage = storage;\n this.restore();\n window.addEventListener('beforeunload', () => this.store());\n }\n\n store() {\n this.storage.setItem(\n this.name,\n JSON.stringify(Array.from(this.entries.entries()))\n );\n }\n\n restore() {\n this.entries = new Map<string, ODataCacheEntry<any>>(\n JSON.parse(this.storage.getItem(this.name) || '[]')\n );\n }\n\n flush() {\n super.flush();\n this.store();\n }\n\n putResponse(req: ODataRequest<any>, res: ODataResponse<any>) {\n const scope = this.scope(req);\n const tags = this.tags(req, res);\n this.put<ResponseJson>(req.pathWithParams, res.toJSON(), {\n timeout: res.options.maxAge,\n scope,\n tags,\n });\n }\n\n getResponse(req: ODataRequest<any>): ODataResponse<any> | undefined {\n const scope = this.scope(req);\n const data = this.get<ResponseJson>(req.pathWithParams, { scope });\n\n return data !== undefined ? ODataResponse.fromJSON(req, data) : undefined;\n }\n}\n","import { HttpEvent, HttpEventType } from '@angular/common/http';\nimport { NEVER, Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n ApiConfig,\n ApiOptions,\n NONE_PARSER,\n Parser,\n PathSegmentNames,\n} from './types';\nimport { EDM_PARSERS } from './parsers/index';\nimport {\n ODataSchema,\n ODataEnumType,\n ODataCallable,\n ODataEntitySet,\n ODataStructuredType,\n} from './schema/index';\nimport { ODataModel, ODataCollection } from './models/index';\nimport {\n ODataBatchResource,\n ODataMetadataResource,\n ODataEntitySetResource,\n ODataSingletonResource,\n ODataFunctionResource,\n ODataActionResource,\n ODataEntityResource,\n ODataPathSegments,\n ODataSegment,\n ODataQueryOptions,\n ODataResponse,\n ODataNavigationPropertyResource,\n ODataRequest,\n} from './resources/index';\nimport { ODataCache, ODataInMemoryCache } from './cache/index';\nimport { ODataApiOptions } from './options';\nimport { DEFAULT_VERSION } from './constants';\nimport { ODataEntityService } from './services/entity';\n\n/**\n * Api abstraction for consuming OData services.\n */\nexport class ODataApi {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n serviceRootUrl: string;\n metadataUrl: string;\n name?: string;\n version: string;\n default: boolean;\n creation: Date;\n // Options\n options: ODataApiOptions;\n // Cache\n cache!: ODataCache;\n // Error Handler\n errorHandler?: (error: any, caught: Observable<any>) => Observable<never>;\n // Base Parsers\n parsers: { [type: string]: Parser<any> };\n // Schemas\n schemas: ODataSchema[];\n\n constructor(config: ApiConfig) {\n this.serviceRootUrl = config.serviceRootUrl;\n if (this.serviceRootUrl.indexOf('?') != -1)\n throw new Error(\n \"The 'serviceRootUrl' should not contain query string. Please use 'params' to add extra parameters\"\n );\n if (!this.serviceRootUrl.endsWith('/')) this.serviceRootUrl += '/';\n this.metadataUrl = `${this.serviceRootUrl}$metadata`;\n this.name = config.name;\n this.version = config.version || DEFAULT_VERSION;\n this.default = config.default || false;\n this.creation = config.creation || new Date();\n this.options = new ODataApiOptions(\n Object.assign(<ApiOptions>{ version: this.version }, config.options || {})\n );\n\n this.cache = (config.cache as ODataCache) || new ODataInMemoryCache();\n this.errorHandler = config.errorHandler;\n\n this.parsers = config.parsers || EDM_PARSERS;\n\n this.schemas = (config.schemas || []).map(\n (schema) => new ODataSchema(schema, this)\n );\n }\n\n configure(\n settings: {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n } = {}\n ) {\n this.requester = settings.requester;\n this.schemas.forEach((schema) => {\n schema.configure({\n parserForType: (type: string) => this.parserForType(type),\n findOptionsForType: (type: string) => this.findOptionsForType(type),\n });\n });\n }\n\n fromJSON<P, R>(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }): ODataActionResource<P, R> | ODataFunctionResource<P, R>;\n fromJSON<E>(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }):\n | ODataEntityResource<E>\n | ODataEntitySetResource<E>\n | ODataNavigationPropertyResource<E>\n | ODataSingletonResource<E>;\n fromJSON(json: {\n segments: ODataSegment[];\n options: { [name: string]: any };\n }) {\n const segments = new ODataPathSegments(json.segments);\n const query = new ODataQueryOptions(json.options);\n switch (segments.last()?.name as PathSegmentNames) {\n case PathSegmentNames.entitySet:\n if (segments.last()?.hasKey()) {\n return new ODataEntityResource(this, segments, query);\n } else {\n return new ODataEntitySetResource(this, segments, query);\n }\n case PathSegmentNames.navigationProperty:\n return new ODataNavigationPropertyResource(this, segments, query);\n case PathSegmentNames.singleton:\n return new ODataSingletonResource(this, segments, query);\n case PathSegmentNames.action:\n return new ODataActionResource(this, segments, query);\n case PathSegmentNames.function:\n return new ODataFunctionResource(this, segments, query);\n }\n throw new Error('No Resource for json');\n }\n\n /**\n * Build a metadata resource.\n * @returns ODataMetadataResource\n */\n metadata(): ODataMetadataResource {\n return ODataMetadataResource.factory(this);\n }\n\n /**\n * Build a batch resource.\n * @returns ODataBatchResource\n */\n batch(): ODataBatchResource {\n return ODataBatchResource.factory(this);\n }\n\n /**\n * Build a singleton resource.\n * @param name Name of the singleton\n * @returns\n */\n singleton<T>(name: string) {\n const type = this.findEntitySetByName(name)?.entityType;\n return ODataSingletonResource.factory<T>(\n this,\n name,\n type,\n new ODataPathSegments(),\n new ODataQueryOptions()\n );\n }\n\n /**\n * Build an entity set resource.\n * @param name Name of the entity set\n * @returns\n */\n entitySet<T>(name: string): ODataEntitySetResource<T> {\n const type = this.findEntitySetByName(name)?.entityType;\n return ODataEntitySetResource.factory<T>(\n this,\n name,\n type,\n new ODataPathSegments(),\n new ODataQueryOptions()\n );\n }\n\n /**\n * Unbound Action\n * @param {string} name?\n * @returns ODataActionResource\n */\n action<P, R>(name: string): ODataActionResource<P, R> {\n let type;\n const callable = this.findCallableForType(name);\n if (callable !== undefined) {\n name = callable.path();\n type = callable.type();\n }\n return ODataActionResource.factory<P, R>(\n this,\n name,\n type,\n new ODataPathSegments(),\n new ODataQueryOptions()\n );\n }\n\n /**\n * Unbound Function\n * @param {string} name?\n * @returns ODataFunctionResource\n */\n function<P, R>(name: string): ODataFunctionResource<P, R> {\n let type;\n const callable = this.findCallableForType(name);\n if (callable !== undefined) {\n name = callable.path();\n type = callable.type();\n }\n return ODataFunctionResource.factory<P, R>(\n this,\n name,\n type,\n new ODataPathSegments(),\n new ODataQueryOptions()\n );\n }\n\n request(req: ODataRequest<any>): Observable<any> {\n let res$ = this.requester !== undefined ? this.requester(req) : NEVER;\n res$ = res$.pipe(\n map((res: HttpEvent<any>) =>\n res.type === HttpEventType.Response\n ? ODataResponse.fromHttpResponse<any>(req, res)\n : res\n )\n );\n\n if (this.errorHandler !== undefined)\n res$ = res$.pipe(catchError(this.errorHandler));\n\n return req.observe === 'response'\n ? this.cache.handleRequest(req, res$)\n : res$;\n }\n\n private findSchemaForType(type: string) {\n const schemas = this.schemas.filter((s) => s.isNamespaceOf(type));\n if (schemas.length > 1)\n return schemas\n .sort((s1, s2) => s1.namespace.length - s2.namespace.length)\n .pop();\n if (schemas.length === 1) return schemas[0];\n return undefined;\n }\n\n public findEnumTypeForType<T>(type: string) {\n return this.findSchemaForType(type)?.findEnumTypeForType<T>(type);\n }\n\n public findStructuredTypeForType<T>(type: string) {\n return this.findSchemaForType(type)?.findStructuredTypeForType<T>(type);\n }\n\n public findCallableForType<T>(type: string, bindingType?: string) {\n return this.findSchemaForType(type)?.findCallableForType<T>(\n type,\n bindingType\n );\n }\n\n public findEntitySetForType(type: string) {\n return this.findSchemaForType(type)?.findEntitySetForType(type);\n }\n public findModelForType(type: string) {\n return this.findStructuredTypeForType<any>(type)?.model as\n | typeof ODataModel\n | undefined;\n }\n\n public modelForType(type?: string) {\n return (type && this.findModelForType(type)) || ODataModel;\n }\n\n public findCollectionForType(type: string) {\n return this.findStructuredTypeForType<any>(type)?.collection as\n | typeof ODataCollection\n | undefined;\n }\n\n public collectionForType(type?: string) {\n return (type && this.findCollectionForType(type)) || ODataCollection;\n }\n public findServiceForType(type: string) {\n return this.findEntitySetForType(type)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public findEntitySetForEntityType(entityType: string) {\n return this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entitySets],\n <ODataEntitySet[]>[]\n )\n .find((e) => e.entityType === entityType);\n }\n\n public findServiceForEntityType(entityType: string) {\n return this.findEntitySetForEntityType(entityType)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public findEnumTypeByName<T>(name: string) {\n return this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.enums],\n <ODataEnumType<T>[]>[]\n )\n .find((e) => e.name === name);\n }\n\n public findStructuredTypeByName<T>(name: string) {\n return this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entities],\n <ODataStructuredType<T>[]>[]\n )\n .find((e) => e.name === name);\n }\n\n public findCallableByName<T>(name: string, bindingType?: string) {\n return this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.callables],\n <ODataCallable<T>[]>[]\n )\n .find(\n (c) =>\n c.name === name &&\n (bindingType === undefined || c.binding()?.type === bindingType)\n );\n }\n\n public findEntitySetByName(name: string) {\n return this.schemas\n .reduce(\n (acc, schema) => [...acc, ...schema.entitySets],\n <ODataEntitySet[]>[]\n )\n .find((e) => e.name === name);\n }\n\n public findModelByName(name: string) {\n return this.findStructuredTypeByName<any>(name)?.model as\n | typeof ODataModel\n | undefined;\n }\n public findCollectionByName(name: string) {\n return this.findStructuredTypeByName<any>(name)?.collection as\n | typeof ODataCollection\n | undefined;\n }\n public findServiceByName(name: string) {\n return this.findEntitySetByName(name)?.service as\n | typeof ODataEntityService\n | undefined;\n }\n\n public parserForType<T>(type: string, bindingType?: string) {\n // Edm, Base Parsers\n if (type in this.parsers) {\n return this.parsers[type] as Parser<T>;\n }\n\n // EnumType, ComplexType and EntityType Parsers\n if (!type.startsWith('Edm.')) {\n let value =\n this.findCallableForType<T>(type, bindingType) ||\n this.findEnumTypeForType<T>(type) ||\n this.findStructuredTypeForType<T>(type);\n return value?.parser as Parser<T>;\n }\n\n // None Parser\n return NONE_PARSER;\n }\n\n public findOptionsForType<T>(type: string) {\n // Strucutred Options\n let st = this.findStructuredTypeForType(type);\n return st !== undefined && st.model !== undefined && st.model?.meta !== null\n ? st.model.meta\n : undefined;\n }\n}\n","import { ApiConfig, Parser } from './types';\nimport { ODataApi } from './api';\nimport {\n ODataCallable,\n ODataEntitySet,\n ODataEnumType,\n ODataStructuredType,\n} from './schema';\nimport { ODataRequest } from './resources';\nimport { Observable } from 'rxjs';\nimport { ODataCollection, ODataModel } from './models';\nimport { ODataEntityService } from './services/entity';\n\nexport class ODataSettings {\n apis: ODataApi[];\n constructor(...configs: ApiConfig[]) {\n this.apis = configs.map((config) => new ODataApi(config));\n if (this.apis.length > 1) {\n if (this.apis.some((c) => c.name === undefined))\n throw new Error('Multiple APIs: Needs configuration names');\n if (this.apis.filter((c) => c.default).length > 1)\n throw new Error('Multiple APIs: Needs only one default api');\n }\n // If not default setup first config as default api\n if (this.apis.every((c) => !c.default)) this.apis[0].default = true;\n }\n\n configure(settings: {\n requester?: (request: ODataRequest<any>) => Observable<any>;\n }) {\n this.apis.forEach((api) => api.configure(settings));\n }\n\n public defaultApi() {\n return this.apis.find((c) => c.default) as ODataApi;\n }\n public findApiByName(name: string) {\n return this.apis.find((c) => c.name === name);\n }\n public apiByName(name: string) {\n const api = this.findApiByName(name);\n if (api === undefined) throw new Error(`No API for name: ${name}`);\n return api;\n }\n public findApiForTypes(types: string[]) {\n return this.apis.find((c) =>\n c.schemas.some((s) => types.some((type) => s.isNamespaceOf(type)))\n );\n }\n public findApiForType(type: string) {\n return this.findApiForTypes([type]);\n }\n public apiForType(type: string) {\n const api = this.findApiForType(type);\n if (api === undefined) throw new Error(`No API for type: ${type}`);\n return api;\n }\n\n //#region Configs shortcuts\n public enumTypeForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.findEnumTypeForType<T>(type))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Enum for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEnumType<T>;\n }\n\n public structuredTypeForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.findStructuredTypeForType<T>(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Structured for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataStructuredType<T>;\n }\n\n public callableForType<T>(type: string, bindingType?: string) {\n let values = this.apis\n .map((api) => api.findCallableForType<T>(type, bindingType))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Callable for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataCallable<T>;\n }\n\n public entitySetForType(type: string) {\n let values = this.apis\n .map((api) => api.findEntitySetForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No EntitySet for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEntitySet;\n }\n\n public parserForType<T>(type: string) {\n let values = this.apis\n .map((api) => api.parserForType<T>(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Parser for type ${type} was found`);\n if (!type.startsWith('Edm.') && values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as Parser<T>;\n }\n\n public modelForType(type: string) {\n let values = this.apis\n .map((api) => api.findModelForType(type))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Model for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataModel;\n }\n\n public collectionForType(type: string) {\n let values = this.apis\n .map((api) => api.findCollectionForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Collection for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataCollection;\n }\n\n public serviceForType(type: string) {\n let values = this.apis\n .map((api) => api.findServiceForType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n public serviceForEntityType(type: string) {\n let values = this.apis\n .map((api) => api.findServiceForEntityType(type))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for type ${type} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n\n public enumTypeByName<T>(name: string) {\n let values = this.apis\n .map((api) => api.findEnumTypeByName<T>(name))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Enum for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as ODataEnumType<T>;\n }\n\n public structuredTypeByName<T>(name: string) {\n let values = this.apis\n .map((api) => api.findStructuredTypeByName<T>(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Structured for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple Structured: More than one value was found');\n return values[0] as ODataStructuredType<T>;\n }\n\n public callableByName<T>(name: string, bindingType?: string) {\n let values = this.apis\n .map((api) => api.findCallableByName<T>(name, bindingType))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Callable for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple Callable: More than one value was found');\n return values[0] as ODataCallable<T>;\n }\n\n public entitySetByName(name: string) {\n let values = this.apis\n .map((api) => api.findEntitySetByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No EntitySet for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple EntitySet: More than one value was found');\n return values[0] as ODataEntitySet;\n }\n\n public modelByName(name: string) {\n let values = this.apis\n .map((api) => api.findModelByName(name))\n .filter((e) => e);\n if (values.length === 0) throw Error(`No Model for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataModel;\n }\n\n public collectionByName(name: string) {\n let values = this.apis\n .map((api) => api.findCollectionByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Collection for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataCollection;\n }\n public serviceByName(name: string) {\n let values = this.apis\n .map((api) => api.findServiceByName(name))\n .filter((e) => e);\n if (values.length === 0)\n throw Error(`No Service for name ${name} was found`);\n if (values.length > 1)\n throw Error('Multiple APIs: More than one value was found');\n return values[0] as typeof ODataEntityService;\n }\n //#endregion\n}\n","import { Injectable, Injector } from '@angular/core';\nimport {\n HttpClient,\n HttpHeaders,\n HttpParams,\n HttpResponse,\n HttpEvent,\n} from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { ODataModel, ODataCollection } from './models/index';\nimport {\n ODataResource,\n ODataBatchResource,\n ODataMetadataResource,\n ODataEntitySetResource,\n ODataSingletonResource,\n ODataFunctionResource,\n ODataActionResource,\n ODataEntityResource,\n ODataSegment,\n ODataResponse,\n ODataNavigationPropertyResource,\n} from './resources/index';\nimport { ODataSettings } from './settings';\nimport { ODataApi } from './api';\nimport { ODataRequest } from './resources/index';\nimport { ODataEntityService } from './services/entity';\n\nfunction addBody<T>(\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n },\n body: T | null\n): any {\n return {\n body,\n etag: options.etag,\n apiName: options.apiName,\n fetchPolicy: options.fetchPolicy,\n headers: options.headers,\n observe: options.observe,\n params: options.params,\n reportProgress: options.reportProgress,\n responseType: options.responseType,\n withCredentials: options.withCredentials,\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ODataClient {\n constructor(\n private http: HttpClient,\n private settings: ODataSettings,\n private injector: Injector\n ) {\n this.settings.configure({\n requester: (req: ODataRequest<any>): Observable<any> =>\n this.http.request(req.method, `${req.url}`, {\n body: req.body,\n headers: req.headers,\n observe: req.observe,\n params: req.params,\n reportProgress: req.reportProgress,\n responseType: req.responseType,\n withCredentials: req.withCredentials,\n }),\n });\n }\n\n // Resolve Building Blocks\n apiFor(value?: ODataResource<any> | string): ODataApi {\n let api: ODataApi | undefined = undefined;\n if (value instanceof ODataResource)\n api = this.settings.findApiForTypes(value.types());\n else if (typeof value === 'string')\n api =\n this.settings.findApiByName(value) ||\n this.settings.findApiForType(value);\n return api || this.settings.defaultApi();\n }\n\n parserForType<T>(type: string) {\n return this.settings.parserForType<T>(type);\n }\n enumTypeForType<T>(type: string) {\n return this.settings.enumTypeForType<T>(type);\n }\n enumTypeByName<T>(name: string) {\n return this.settings.enumTypeByName<T>(name);\n }\n structuredTypeForType<T>(type: string) {\n return this.settings.structuredTypeForType<T>(type);\n }\n structuredTypeByName<T>(name: string) {\n return this.settings.structuredTypeByName<T>(name);\n }\n callableForType<T>(type: string) {\n return this.settings.callableForType<T>(type);\n }\n callableByName<T>(name: string) {\n return this.settings.callableByName<T>(name);\n }\n entitySetForType(type: string) {\n return this.settings.entitySetForType(type);\n }\n entitySetByName(name: string) {\n return this.settings.entitySetByName(name);\n }\n modelForType(type: string): typeof ODataModel {\n return this.settings.modelForType(type);\n }\n modelByName(name: string): typeof ODataModel {\n return this.settings.modelByName(name);\n }\n collectionForType(type: string): typeof ODataCollection {\n return this.settings.collectionForType(type);\n }\n collectionByName(name: string): typeof ODataCollection {\n return this.settings.collectionByName(name);\n }\n serviceForType(type: string): ODataEntityService<any> {\n return this.injector.get(this.settings.serviceForType(type));\n }\n serviceForEntityType(type: string): ODataEntityService<any> {\n return this.injector.get(this.settings.serviceForEntityType(type));\n }\n serviceByName(name: string): ODataEntityService<any> {\n return this.injector.get(this.settings.serviceByName(name));\n }\n\n //#region API Resource Proxy Methods\n fromJSON<E>(\n json: { segments: ODataSegment[]; options: { [name: string]: any } },\n apiNameOrType?: string\n ):\n | ODataEntityResource<E>\n | ODataEntitySetResource<E>\n | ODataNavigationPropertyResource<E>\n | ODataSingletonResource<E>;\n fromJSON(\n json: { segments: ODataSegment[]; options: { [name: string]: any } },\n apiNameOrType?: string\n ) {\n return this.apiFor(apiNameOrType).fromJSON<any>(json);\n }\n\n // Requests\n metadata(apiNameOrType?: string): ODataMetadataResource {\n return this.apiFor(apiNameOrType).metadata();\n }\n\n batch(apiNameOrType?: string): ODataBatchResource {\n return this.apiFor(apiNameOrType).batch();\n }\n\n singleton<T>(path: string, apiNameOrType?: string) {\n return this.apiFor(apiNameOrType).singleton<T>(path);\n }\n\n entitySet<T>(\n path: string,\n apiNameOrType?: string\n ): ODataEntitySetResource<T> {\n return this.apiFor(apiNameOrType).entitySet<T>(path);\n }\n\n /**\n * Unbound Action\n * @param {string} path?\n * @returns ODataActionResource\n */\n action<P, R>(\n path: string,\n apiNameOrType?: string\n ): ODataActionResource<P, R> {\n return this.apiFor(apiNameOrType).action<P, R>(path);\n }\n\n /**\n * Unbound Function\n * @param {string} path?\n * @returns ODataFunctionResource\n */\n function<P, R>(\n path: string,\n apiNameOrType?: string\n ): ODataFunctionResource<P, R> {\n return this.apiFor(apiNameOrType).function<P, R>(path);\n }\n //#endregion\n\n // Request headers, get, post, put, patch... etc\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n params?: HttpParams | { [param: string]: string | string[] };\n observe: 'events';\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<any>>;\n\n request<R>(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<R>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n request<R>(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n reportProgress?: boolean;\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<R>>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n reportProgress?: boolean;\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n request<R>(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n responseType?: 'json';\n reportProgress?: boolean;\n withCredentials?: boolean;\n }\n ): Observable<R>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options?: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n params?: HttpParams | { [param: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n }\n ): Observable<any>;\n\n request(\n method: string,\n resource: ODataResource<any>,\n options: {\n body: any | null;\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n }\n ): Observable<any> {\n let api = options.apiName\n ? this.settings.apiByName(options.apiName)\n : resource.api;\n if (!api)\n throw new Error(\n `The types: '[${resource\n .types()\n .join(', ')}]' does not belongs to any known configuration`\n );\n\n const request = new ODataRequest({\n method,\n api,\n resource,\n body: options.body,\n observe: options.observe === 'events' ? 'events' : 'response',\n etag: options.etag,\n headers: options.headers,\n reportProgress: options.reportProgress,\n params: options.params,\n responseType: options.responseType,\n fetchPolicy: options.fetchPolicy,\n withCredentials: options.withCredentials,\n });\n\n return api\n .request(request)\n .pipe(\n map((res: any) =>\n options.observe === undefined || options.observe === 'body'\n ? res.body\n : res\n )\n );\n }\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n delete<T>(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n delete<T>(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n delete(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n delete<T>(\n resource: ODataResource<any>,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n delete(\n resource: ODataResource<any>,\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('DELETE', resource, addBody<any>(options, null));\n }\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n get<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n get<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n get(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n get<T>(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n get(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('GET', resource, options as any);\n }\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n head<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n head<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n head(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n head<T>(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n head(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('HEAD', resource, options as any);\n }\n\n jsonp(\n resource: ODataResource<any>,\n callbackParam: string\n ): Observable<Object>;\n\n jsonp<T>(resource: ODataResource<any>, callbackParam: string): Observable<T>;\n\n jsonp<T>(resource: ODataResource<any>, callbackParam: string): Observable<T> {\n return this.request<any>('JSONP', resource, {\n body: null,\n params: new HttpParams().append(callbackParam, 'JSONP_CALLBACK'),\n observe: 'body',\n responseType: 'json',\n });\n }\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n options<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n options<T>(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n options(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n options<T>(\n resource: ODataResource<any>,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n options(\n resource: ODataResource<any>,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('OPTIONS', resource, options as any);\n }\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n patch<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n patch<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n patch<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n patch(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('PATCH', resource, addBody(options, body));\n }\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n post<T>(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n post<T>(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n post<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n post(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('POST', resource, addBody(options, body));\n }\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<ArrayBuffer>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<Blob>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<string>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<ArrayBuffer>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Blob>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<string>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<Object>>;\n\n put<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'events';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<HttpEvent<T>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'arraybuffer';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<ArrayBuffer>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'blob';\n withCredentials?: boolean;\n }\n ): Observable<HttpResponse<Blob>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType: 'text';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<string>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<Object>>;\n\n put<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe: 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<ODataResponse<T>>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<Object>;\n\n put<T>(\n resource: ODataResource<any>,\n body: any | null,\n options?: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'json';\n withCredentials?: boolean;\n }\n ): Observable<T>;\n\n put(\n resource: ODataResource<any>,\n body: any | null,\n options: {\n etag?: string;\n apiName?: string;\n fetchPolicy?:\n | 'cache-first'\n | 'cache-and-network'\n | 'network-only'\n | 'no-cache'\n | 'cache-only';\n headers?: HttpHeaders | { [header: string]: string | string[] };\n observe?: 'body' | 'events' | 'response';\n params?: HttpParams | { [param: string]: string | string[] };\n reportProgress?: boolean;\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\n withCredentials?: boolean;\n } = {}\n ): Observable<any> {\n return this.request<any>('PUT', resource, addBody(options, body));\n }\n}\n","import { ApiConfig } from './types';\nimport { InjectionToken } from '@angular/core';\n\nexport const ODATA_CONFIGURATIONS = new InjectionToken<ApiConfig>(\n 'odata.configuraions'\n);\n","import {\n ODataActionResource,\n ODataFunctionResource,\n ODataNavigationPropertyResource,\n ODataEntity,\n ODataEntities,\n ODataProperty,\n HttpQueryOptions,\n} from '../resources';\n\nimport { ODataClient } from '../client';\nimport { Observable } from 'rxjs';\n\nexport abstract class ODataBaseService {\n constructor(\n protected client: ODataClient,\n protected name: string,\n protected apiNameOrEntityType?: string\n ) {}\n\n get api() {\n return this.client.apiFor(this.apiNameOrEntityType);\n }\n\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'entity',\n options?: HttpQueryOptions<R>\n ): Observable<ODataEntity<R>>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'entities',\n options?: HttpQueryOptions<R>\n ): Observable<ODataEntities<R>>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'property',\n options?: HttpQueryOptions<R>\n ): Observable<ODataProperty<R>>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'none',\n options?: HttpQueryOptions<R>\n ): Observable<null>;\n protected callFunction<P, R>(\n params: P | null,\n resource: ODataFunctionResource<P, R>,\n responseType: 'property' | 'entity' | 'entities' | 'none',\n options: HttpQueryOptions<R> = {}\n ): Observable<any> {\n resource.query.apply(options);\n return resource.call(params, {\n responseType: responseType as any,\n ...options,\n });\n }\n\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'entity',\n options?: HttpQueryOptions<R>\n ): Observable<ODataEntity<R>>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'entities',\n options?: HttpQueryOptions<R>\n ): Observable<ODataEntities<R>>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'property',\n options?: HttpQueryOptions<R>\n ): Observable<ODataProperty<R>>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'none',\n options?: HttpQueryOptions<R>\n ): Observable<null>;\n protected callAction<P, R>(\n params: P | null,\n resource: ODataActionResource<P, R>,\n responseType: 'property' | 'entity' | 'entities' | 'none',\n options: HttpQueryOptions<R> = {}\n ): Observable<any> {\n resource.query.apply(options);\n return resource.call(params, {\n responseType: responseType as any,\n ...options,\n });\n }\n\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entity',\n options?: HttpQueryOptions<S>\n ): Observable<ODataEntity<S>>;\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entities',\n options?: HttpQueryOptions<S>\n ): Observable<ODataEntities<S>>;\n protected fetchNavigationProperty<S>(\n resource: ODataNavigationPropertyResource<S>,\n responseType: 'entity' | 'entities',\n options: HttpQueryOptions<S> = {}\n ): Observable<any> {\n resource.query.apply(options);\n return resource.fetch({ responseType: responseType as any, ...options });\n }\n}\n","import { EntityKey, ODataResource } from '../resources';\nimport { ODataModel } from '../models/model';\nimport { ODataBaseService } from './base';\n\nexport abstract class ODataEntityService<T> extends ODataBaseService {\n public abstract entity(key?: EntityKey<T>): ODataResource<T>;\n public abstract attach<M extends ODataModel<T>>(value: M): void;\n\n // Entity Config\n get structuredTypeSchema() {\n return this.apiNameOrEntityType !== undefined\n ? this.api.findStructuredTypeForType<T>(this.apiNameOrEntityType)\n : undefined;\n }\n}\n","import {\n EntityKey,\n ODataEntitySetResource,\n ODataEntityResource,\n HttpOptions,\n ODataEntity,\n ODataEntities,\n} from '../resources';\nimport { ODataCollection } from '../models/collection';\nimport { ODataModel } from '../models/model';\nimport { Observable, throwError } from 'rxjs';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { catchError } from 'rxjs/operators';\nimport { ODataEntityService } from './entity';\n\nexport class ODataEntitySetService<T> extends ODataEntityService<T> {\n /**\n * Get the entity set resource for this service.\n */\n public entities(): ODataEntitySetResource<T> {\n return this.client.entitySet<T>(this.name, this.apiNameOrEntityType);\n }\n\n /**\n * Get the entity resource for this service.\n * @param key The entity key.\n */\n public entity(key?: EntityKey<T>): ODataEntityResource<T> {\n return this.entities().entity(key);\n }\n\n /**\n * Attach an existing model to this service.\n * @param model The model to attach.\n */\n public attach<M extends ODataModel<T>>(model: M): void;\n public attach<C extends ODataCollection<T, ODataModel<T>>>(model: C): void;\n public attach(model: any): void {\n if (model instanceof ODataModel) {\n model.attach(this.entities().entity());\n } else if (model instanceof ODataCollection) {\n model.attach(this.entities());\n }\n }\n\n get entitySetSchema() {\n return this.api.findEntitySetByName(this.name);\n }\n\n /**\n * Get all entities from the entity set.\n * @param options The options for the request.\n */\n public fetchAll(options?: HttpOptions): Observable<T[]> {\n return this.entities().fetchAll(options);\n }\n\n /**\n * Get entities from the entity set.\n * @param withCount Get the count of the entities.\n * @param options The options for the request.\n */\n public fetchMany(\n options?: HttpOptions & { withCount?: boolean }\n ): Observable<ODataEntities<T>> {\n return this.entities().fetch(options);\n }\n\n /**\n * Get an entity from the entity set.\n * @param key The entity key.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public fetchOne(\n key: EntityKey<T>,\n options?: HttpOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n return this.entity(key).fetch(options);\n }\n\n /**\n * Create an entity in the entity set.\n * @param attrs The attributes for the entity.\n * @param options The options for the request.\n */\n public create(\n attrs: Partial<T>,\n options?: HttpOptions\n ): Observable<ODataEntity<T>> {\n return this.entities().post(attrs, options);\n }\n\n /**\n * Update an entity in the entity set.\n * @param key The entity key.\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public update(\n key: EntityKey<T>,\n attrs: Partial<T>,\n options?: HttpOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity(key);\n if (!res.hasKey()) return throwError('Resource without key');\n return res.put(attrs, options);\n }\n\n /**\n * Patch an entity in the entity set.\n * @param key The entity key.\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public patch(\n key: EntityKey<T>,\n attrs: Partial<T>,\n options?: HttpOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity(key);\n if (!res.hasKey()) return throwError('Resource without key');\n return res.patch(attrs, options);\n }\n\n /**\n * Delete an entity in the entity set.\n * @param key The entity key.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public destroy(key: EntityKey<T>, options?: HttpOptions & { etag?: string }) {\n const res = this.entity(key);\n if (!res.hasKey()) return throwError('Resource without key');\n return res.delete(options);\n }\n\n //#region Shortcuts\n /**\n * Get or create an entity in the entity set.\n * @param key The entity key.\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public fetchOrCreate(\n key: EntityKey<T>,\n attrs: Partial<T>,\n { etag, ...options }: { etag?: string } & HttpOptions = {}\n ): Observable<ODataEntity<T>> {\n return this.fetchOne(key, { etag, ...options }).pipe(\n catchError((error: HttpErrorResponse) => {\n if (error.status === 404) return this.create(attrs, options);\n else return throwError(error);\n })\n );\n }\n\n /**\n * Save an entity in the entity set.\n * @param attrs The attributes for the entity.\n * @param method The method to use.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public save(\n attrs: Partial<T>,\n {\n etag,\n method,\n ...options\n }: {\n etag?: string;\n method?: 'create' | 'update' | 'patch';\n } & HttpOptions = {}\n ) {\n let schema = this.structuredTypeSchema;\n if (method === undefined && schema !== undefined && schema.isCompoundKey())\n return throwError(\n 'Composite key require a specific method, use create/update/patch'\n );\n let key = schema && schema.resolveKey(attrs);\n if (method === undefined) method = key !== undefined ? 'update' : 'create';\n if ((method === 'update' || method === 'patch') && key === undefined)\n return throwError(\"Can't update/patch entity without key\");\n return method === 'create'\n ? this.create(attrs, options)\n : method === 'patch'\n ? this.patch(key, attrs, { etag, ...options })\n : this.update(key, attrs, { etag, ...options });\n }\n //#endregion\n}\n","import { Observable } from 'rxjs';\nimport type { ODataModel } from '../models/model';\nimport type {\n HttpOptions,\n ODataEntity,\n ODataSingletonResource,\n} from '../resources';\nimport { ODataEntityService } from './entity';\n\n/**\n * OData Singleton Service\n * www.odata.org/getting-started/advanced-tutorial/#singleton\n */\nexport class ODataSingletonService<T> extends ODataEntityService<T> {\n /**\n * Get the entity resource for this service.\n * @param key The entity key.\n */\n public entity(): ODataSingletonResource<T> {\n return this.client.singleton(this.name, this.apiNameOrEntityType);\n }\n\n /**\n * Attach an existing model to this service.\n * @param model The model to attach.\n */\n public attach<M extends ODataModel<T>>(model: M) {\n model.attach(this.entity());\n }\n\n // Service Config\n get singletonSchema() {\n return this.api.findEntitySetByName(this.name);\n }\n\n /**\n * Update the singleton entity\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public update(\n attrs: Partial<T>,\n options?: HttpOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity();\n return res.put(attrs, options);\n }\n\n /**\n * Patch the singleton entity\n * @param attrs The attributes for the entity.\n * @param etag The etag for the entity.\n * @param options The options for the request.\n */\n public patch(\n attrs: Partial<T>,\n options?: HttpOptions & { etag?: string }\n ): Observable<ODataEntity<T>> {\n const res = this.entity();\n return res.patch(attrs, options);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ODataClient } from '../client';\nimport { ODataEntitySetService } from './entity-set';\nimport { ODataSingletonService } from './singleton';\n\n@Injectable()\nexport class ODataServiceFactory {\n constructor(protected client: ODataClient) {}\n\n /**\n * Factory method to create an entity set service.\n * @param entitySetName Name of the entity set.\n * @param apiNameOrEntityType Name of the API or the type of the entity.\n */\n entitySet<T>(\n entitySetName: string,\n apiNameOrEntityType?: string\n ): ODataEntitySetService<T> {\n return new (class extends ODataEntitySetService<T> {})(\n this.client,\n entitySetName,\n apiNameOrEntityType\n );\n }\n\n /** Factory method to create a singleton service.\n * @param singletonName Name of the singleton.\n * @param apiNameOrEntityType Name of the API or the type of the entity.\n */\n singleton<T>(\n singletonName: string,\n apiNameOrEntityType?: string\n ): ODataSingletonService<T> {\n return new (class extends ODataSingletonService<T> {})(\n this.client,\n singletonName,\n apiNameOrEntityType\n );\n }\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { ODataSettings } from './settings';\nimport { ODataClient } from './client';\nimport { ODataServiceFactory } from './services/index';\nimport { ApiConfig } from './types';\nimport { ODATA_CONFIGURATIONS } from './tokens';\n\nexport function createSettings(configs: ApiConfig[]) {\n return new ODataSettings(...configs);\n}\n\n@NgModule({\n imports: [HttpClientModule],\n providers: [ODataClient, ODataServiceFactory],\n})\nexport class ODataModule {\n public static forRoot(\n ...configs: ApiConfig[]\n ): ModuleWithProviders<ODataModule> {\n return {\n ngModule: ODataModule,\n providers: [\n { provide: ODATA_CONFIGURATIONS, useValue: configs },\n {\n provide: ODataSettings,\n useFactory: createSettings,\n deps: [ODATA_CONFIGURATIONS],\n },\n ODataClient,\n ODataServiceFactory,\n ],\n };\n }\n}\n","/*\n * Public API Surface of angular-odata\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["alias","functionAlias"],"mappings":"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"}