breeze-client 2.2.1-cjs → 2.2.1

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 (378) hide show
  1. package/adapter-ajax-angularjs/{breeze-client-adapter-ajax-angularjs.d.ts → index.d.ts} +1 -0
  2. package/adapter-ajax-fetch/{breeze-client-adapter-ajax-fetch.d.ts → index.d.ts} +1 -0
  3. package/adapter-ajax-httpclient/{breeze-client-adapter-ajax-httpclient.d.ts → index.d.ts} +1 -0
  4. package/adapter-ajax-jquery/{breeze-client-adapter-ajax-jquery.d.ts → index.d.ts} +1 -0
  5. package/adapter-ajax-post/{breeze-client-adapter-ajax-post.d.ts → index.d.ts} +1 -0
  6. package/adapter-data-service-odata/{breeze-client-adapter-data-service-odata.d.ts → index.d.ts} +1 -0
  7. package/adapter-data-service-webapi/{breeze-client-adapter-data-service-webapi.d.ts → index.d.ts} +1 -0
  8. package/adapter-model-library-backing-store/{breeze-client-adapter-model-library-backing-store.d.ts → index.d.ts} +1 -0
  9. package/adapter-model-library-ko/{breeze-client-adapter-model-library-ko.d.ts → index.d.ts} +1 -0
  10. package/adapter-uri-builder-json/{breeze-client-adapter-uri-builder-json.d.ts → index.d.ts} +1 -0
  11. package/adapter-uri-builder-odata/{breeze-client-adapter-uri-builder-odata.d.ts → index.d.ts} +1 -0
  12. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +135 -0
  13. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +49 -0
  14. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
  15. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +135 -0
  16. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +49 -0
  17. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
  18. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +139 -0
  19. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +49 -0
  20. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
  21. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +107 -0
  22. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
  23. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
  24. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
  25. package/esm2022/adapter-data-service-odata/adapter-core.mjs +49 -0
  26. package/{esm5/adapter-data-service-odata/adapter-data-service-odata.js → esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs} +138 -147
  27. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
  28. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +100 -0
  29. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
  30. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +269 -0
  31. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
  32. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +241 -0
  33. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
  34. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +49 -0
  35. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +37 -0
  36. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
  37. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +49 -0
  38. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +191 -0
  39. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
  40. package/esm2022/breeze-client.mjs +5 -0
  41. package/esm2022/index.mjs +2 -0
  42. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
  43. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
  44. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
  45. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +421 -0
  46. package/esm2022/src/abstract-data-service-adapter.mjs +325 -0
  47. package/esm2022/src/array.mjs +4 -0
  48. package/esm2022/src/assert-param.mjs +330 -0
  49. package/esm2022/src/breeze.mjs +85 -0
  50. package/esm2022/src/complex-array.mjs +117 -0
  51. package/esm2022/src/config.mjs +232 -0
  52. package/esm2022/src/core.mjs +712 -0
  53. package/esm2022/src/csdl-metadata-parser.mjs +385 -0
  54. package/esm2022/src/data-service.mjs +221 -0
  55. package/esm2022/src/data-type.mjs +510 -0
  56. package/esm2022/src/default-property-interceptor.mjs +460 -0
  57. package/{esm2015/src/entity-action.js → esm2022/src/entity-action.mjs} +25 -25
  58. package/esm2022/src/entity-aspect.mjs +897 -0
  59. package/esm2022/src/entity-group.mjs +192 -0
  60. package/esm2022/src/entity-key.mjs +125 -0
  61. package/esm2022/src/entity-manager.mjs +2163 -0
  62. package/esm2022/src/entity-metadata.mjs +2242 -0
  63. package/esm2022/src/entity-query.mjs +1024 -0
  64. package/esm2022/src/entity-state.mjs +107 -0
  65. package/esm2022/src/enum.mjs +143 -0
  66. package/esm2022/src/event.mjs +264 -0
  67. package/esm2022/src/interface-registry.mjs +39 -0
  68. package/esm2022/src/key-generator.mjs +110 -0
  69. package/esm2022/src/local-query-comparison-options.mjs +65 -0
  70. package/esm2022/src/mapping-context.mjs +411 -0
  71. package/esm2022/src/naming-convention.mjs +92 -0
  72. package/esm2022/src/observable-array.mjs +183 -0
  73. package/esm2022/src/predicate.mjs +1259 -0
  74. package/esm2022/src/primitive-array.mjs +85 -0
  75. package/esm2022/src/query-options.mjs +152 -0
  76. package/esm2022/src/relation-array.mjs +173 -0
  77. package/esm2022/src/save-options.mjs +41 -0
  78. package/esm2022/src/unattached-children-map.mjs +56 -0
  79. package/esm2022/src/validate.mjs +995 -0
  80. package/esm2022/src/validation-options.mjs +64 -0
  81. package/{fesm2015/breeze-client-adapter-ajax-angularjs.js → fesm2022/breeze-client-adapter-ajax-angularjs.mjs} +6 -1
  82. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  83. package/{fesm2015/breeze-client-adapter-ajax-fetch.js → fesm2022/breeze-client-adapter-ajax-fetch.mjs} +9 -4
  84. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  85. package/{fesm2015/breeze-client-adapter-ajax-httpclient.js → fesm2022/breeze-client-adapter-ajax-httpclient.mjs} +6 -4
  86. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  87. package/{fesm2015/breeze-client-adapter-ajax-jquery.js → fesm2022/breeze-client-adapter-ajax-jquery.mjs} +6 -2
  88. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  89. package/{fesm2015/breeze-client-adapter-ajax-post.js → fesm2022/breeze-client-adapter-ajax-post.mjs} +1 -1
  90. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +1 -0
  91. package/{fesm2015/breeze-client-adapter-data-service-odata.js → fesm2022/breeze-client-adapter-data-service-odata.mjs} +68 -69
  92. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  93. package/{fesm2015/breeze-client-adapter-data-service-webapi.js → fesm2022/breeze-client-adapter-data-service-webapi.mjs} +30 -30
  94. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  95. package/{fesm2015/breeze-client-adapter-model-library-backing-store.js → fesm2022/breeze-client-adapter-model-library-backing-store.mjs} +14 -13
  96. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  97. package/{fesm2015/breeze-client-adapter-model-library-ko.js → fesm2022/breeze-client-adapter-model-library-ko.mjs} +14 -13
  98. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  99. package/{fesm2015/breeze-client-adapter-uri-builder-json.js → fesm2022/breeze-client-adapter-uri-builder-json.mjs} +9 -8
  100. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  101. package/{fesm2015/breeze-client-adapter-uri-builder-odata.js → fesm2022/breeze-client-adapter-uri-builder-odata.mjs} +86 -86
  102. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  103. package/{fesm2015/breeze-client-mixin-get-entity-graph.js → fesm2022/breeze-client-mixin-get-entity-graph.mjs} +1 -1
  104. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  105. package/{fesm2015/breeze-client-mixin-save-queuing.js → fesm2022/breeze-client-mixin-save-queuing.mjs} +23 -2
  106. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +1 -0
  107. package/{fesm2015/breeze-client.js → fesm2022/breeze-client.mjs} +1933 -1538
  108. package/fesm2022/breeze-client.mjs.map +1 -0
  109. package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
  110. package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
  111. package/package.json +94 -12
  112. package/src/config.d.ts +1 -1
  113. package/src/core.d.ts +1 -1
  114. package/src/entity-aspect.d.ts +1 -1
  115. package/src/entity-metadata.d.ts +8 -6
  116. package/src/entity-query.d.ts +1 -1
  117. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  118. package/adapter-ajax-angularjs/package.json +0 -13
  119. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  120. package/adapter-ajax-fetch/package.json +0 -13
  121. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  122. package/adapter-ajax-httpclient/package.json +0 -13
  123. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  124. package/adapter-ajax-jquery/package.json +0 -13
  125. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  126. package/adapter-ajax-post/package.json +0 -13
  127. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  128. package/adapter-data-service-odata/package.json +0 -13
  129. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  130. package/adapter-data-service-webapi/package.json +0 -13
  131. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  132. package/adapter-model-library-backing-store/package.json +0 -13
  133. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  134. package/adapter-model-library-ko/package.json +0 -13
  135. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  136. package/adapter-uri-builder-json/package.json +0 -13
  137. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  138. package/adapter-uri-builder-odata/package.json +0 -13
  139. package/breeze-client.d.ts +0 -8
  140. package/breeze-client.metadata.json +0 -1
  141. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  142. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  143. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  144. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  145. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  146. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  147. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  148. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  149. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  150. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  151. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  152. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  153. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  154. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  155. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  156. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  157. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  158. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  159. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  160. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  161. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -747
  162. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  163. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  164. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  165. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -333
  166. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  167. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  168. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  169. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  170. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  171. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  172. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  173. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  174. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  175. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  176. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  177. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  178. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  179. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  180. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  181. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  182. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  183. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  184. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  185. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  186. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  187. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  188. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  189. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
  190. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  191. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  192. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  193. package/bundles/breeze-client.umd.js +0 -14234
  194. package/bundles/breeze-client.umd.js.map +0 -1
  195. package/bundles/breeze-client.umd.min.js +0 -16
  196. package/bundles/breeze-client.umd.min.js.map +0 -1
  197. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  198. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  199. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  200. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  201. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  202. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  203. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  204. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  205. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  206. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  207. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  208. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  209. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  210. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  211. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -463
  212. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  213. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -100
  214. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  215. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  216. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  217. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  218. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  219. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  220. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  221. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  222. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  223. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  224. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  225. package/esm2015/breeze-client.js +0 -9
  226. package/esm2015/index.js +0 -2
  227. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  228. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  229. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  230. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  231. package/esm2015/src/abstract-data-service-adapter.js +0 -327
  232. package/esm2015/src/array.js +0 -4
  233. package/esm2015/src/assert-param.js +0 -312
  234. package/esm2015/src/breeze.js +0 -85
  235. package/esm2015/src/complex-array.js +0 -119
  236. package/esm2015/src/config.js +0 -223
  237. package/esm2015/src/core.js +0 -714
  238. package/esm2015/src/csdl-metadata-parser.js +0 -385
  239. package/esm2015/src/data-service.js +0 -203
  240. package/esm2015/src/data-type.js +0 -506
  241. package/esm2015/src/default-property-interceptor.js +0 -460
  242. package/esm2015/src/entity-aspect.js +0 -804
  243. package/esm2015/src/entity-group.js +0 -187
  244. package/esm2015/src/entity-key.js +0 -116
  245. package/esm2015/src/entity-manager.js +0 -2094
  246. package/esm2015/src/entity-metadata.js +0 -2109
  247. package/esm2015/src/entity-query.js +0 -1015
  248. package/esm2015/src/entity-state.js +0 -107
  249. package/esm2015/src/enum.js +0 -141
  250. package/esm2015/src/event.js +0 -256
  251. package/esm2015/src/interface-registry.js +0 -41
  252. package/esm2015/src/key-generator.js +0 -108
  253. package/esm2015/src/local-query-comparison-options.js +0 -65
  254. package/esm2015/src/mapping-context.js +0 -411
  255. package/esm2015/src/naming-convention.js +0 -88
  256. package/esm2015/src/observable-array.js +0 -185
  257. package/esm2015/src/predicate.js +0 -1242
  258. package/esm2015/src/primitive-array.js +0 -87
  259. package/esm2015/src/query-options.js +0 -152
  260. package/esm2015/src/relation-array.js +0 -175
  261. package/esm2015/src/save-options.js +0 -41
  262. package/esm2015/src/unattached-children-map.js +0 -58
  263. package/esm2015/src/validate.js +0 -991
  264. package/esm2015/src/validation-options.js +0 -64
  265. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
  266. package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
  267. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  268. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
  269. package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
  270. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  271. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
  272. package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
  273. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  274. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
  275. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  276. package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
  277. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  278. package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
  279. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  280. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -105
  281. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  282. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
  283. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  284. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
  285. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  286. package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
  287. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
  288. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  289. package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
  290. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
  291. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  292. package/esm5/breeze-client.js +0 -9
  293. package/esm5/index.js +0 -2
  294. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  295. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  296. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  297. package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -412
  298. package/esm5/src/abstract-data-service-adapter.js +0 -333
  299. package/esm5/src/array.js +0 -4
  300. package/esm5/src/assert-param.js +0 -317
  301. package/esm5/src/breeze.js +0 -85
  302. package/esm5/src/complex-array.js +0 -119
  303. package/esm5/src/config.js +0 -228
  304. package/esm5/src/core.js +0 -722
  305. package/esm5/src/csdl-metadata-parser.js +0 -385
  306. package/esm5/src/data-service.js +0 -207
  307. package/esm5/src/data-type.js +0 -513
  308. package/esm5/src/default-property-interceptor.js +0 -460
  309. package/esm5/src/entity-action.js +0 -52
  310. package/esm5/src/entity-aspect.js +0 -810
  311. package/esm5/src/entity-group.js +0 -189
  312. package/esm5/src/entity-key.js +0 -118
  313. package/esm5/src/entity-manager.js +0 -2112
  314. package/esm5/src/entity-metadata.js +0 -2144
  315. package/esm5/src/entity-query.js +0 -1042
  316. package/esm5/src/entity-state.js +0 -114
  317. package/esm5/src/enum.js +0 -144
  318. package/esm5/src/event.js +0 -259
  319. package/esm5/src/interface-registry.js +0 -43
  320. package/esm5/src/key-generator.js +0 -111
  321. package/esm5/src/local-query-comparison-options.js +0 -67
  322. package/esm5/src/mapping-context.js +0 -413
  323. package/esm5/src/naming-convention.js +0 -90
  324. package/esm5/src/observable-array.js +0 -201
  325. package/esm5/src/predicate.js +0 -1307
  326. package/esm5/src/primitive-array.js +0 -87
  327. package/esm5/src/query-options.js +0 -167
  328. package/esm5/src/relation-array.js +0 -175
  329. package/esm5/src/save-options.js +0 -43
  330. package/esm5/src/unattached-children-map.js +0 -60
  331. package/esm5/src/validate.js +0 -996
  332. package/esm5/src/validation-options.js +0 -66
  333. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  334. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  335. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  336. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  337. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  338. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  339. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  340. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  341. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  342. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  343. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  344. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  345. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  346. package/fesm2015/breeze-client.js.map +0 -1
  347. package/fesm5/breeze-client-adapter-ajax-angularjs.js +0 -186
  348. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  349. package/fesm5/breeze-client-adapter-ajax-fetch.js +0 -186
  350. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  351. package/fesm5/breeze-client-adapter-ajax-httpclient.js +0 -193
  352. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  353. package/fesm5/breeze-client-adapter-ajax-jquery.js +0 -111
  354. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  355. package/fesm5/breeze-client-adapter-ajax-post.js +0 -86
  356. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  357. package/fesm5/breeze-client-adapter-data-service-odata.js +0 -523
  358. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  359. package/fesm5/breeze-client-adapter-data-service-webapi.js +0 -111
  360. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  361. package/fesm5/breeze-client-adapter-model-library-backing-store.js +0 -276
  362. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  363. package/fesm5/breeze-client-adapter-model-library-ko.js +0 -248
  364. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  365. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  366. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  367. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  368. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  369. package/fesm5/breeze-client-mixin-get-entity-graph.js +0 -254
  370. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  371. package/fesm5/breeze-client-mixin-save-queuing.js +0 -356
  372. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  373. package/fesm5/breeze-client.js +0 -13956
  374. package/fesm5/breeze-client.js.map +0 -1
  375. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  376. package/mixin-get-entity-graph/package.json +0 -13
  377. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  378. package/mixin-save-queuing/package.json +0 -13
@@ -1,463 +0,0 @@
1
- import * as breeze from 'breeze-client';
2
- import { appendQueryStringParameter } from './adapter-core';
3
- let core = breeze.core;
4
- /** @hidden */
5
- export class DataServiceODataAdapter extends breeze.AbstractDataServiceAdapter {
6
- constructor() {
7
- super();
8
- // _catchNoConnectionError = abstractDsaProto._catchNoConnectionError;
9
- // changeRequestInterceptor = abstractDsaProto.changeRequestInterceptor;
10
- // _createChangeRequestInterceptor = abstractDsaProto._createChangeRequestInterceptor;
11
- this.headers = { "DataServiceVersion": "2.0" };
12
- this.jsonResultsAdapter = new breeze.JsonResultsAdapter({
13
- name: "OData_default",
14
- visitNode: function (node, mappingContext, nodeContext) {
15
- let result = {};
16
- if (node == null)
17
- return result;
18
- let metadata = node.__metadata;
19
- if (metadata != null) {
20
- // TODO: may be able to make this more efficient by caching of the previous value.
21
- let entityTypeName = breeze.MetadataStore.normalizeTypeName(metadata.type);
22
- let et = entityTypeName && mappingContext.entityManager.metadataStore.getEntityType(entityTypeName, true);
23
- // OData response doesn't distinguish a projection from a whole entity.
24
- // We'll assume that whole-entity data would have at least as many properties (<=)
25
- // as the EntityType has mapped properties on the basis that
26
- // most projections remove properties rather than add them.
27
- // If not, assume it's a projection and do NOT treat as an entity
28
- if (et && et._mappedPropertiesCount <= Object.keys(node).length - 1) {
29
- // if (et && et._mappedPropertiesCount === Object.keys(node).length - 1) { // OLD
30
- result.entityType = et;
31
- let uriKey = metadata.uri || metadata.id;
32
- if (uriKey) {
33
- // Strip baseUri to make uriKey a relative uri
34
- // Todo: why is this necessary when absolute works for every OData source tested?
35
- let re = new RegExp('^' + mappingContext.dataService.serviceName, 'i');
36
- uriKey = uriKey.replace(re, '');
37
- }
38
- result.extraMetadata = {
39
- uriKey: uriKey,
40
- etag: metadata.etag
41
- };
42
- }
43
- }
44
- // OData v3 - projection arrays will be enclosed in a results array
45
- if (node.results) {
46
- result.node = node.results;
47
- }
48
- let propertyName = nodeContext.propertyName;
49
- result.ignore = node.__deferred != null || propertyName === "__metadata" ||
50
- // EntityKey properties can be produced by EDMX models
51
- (propertyName === "EntityKey" && node.$type && core.stringStartsWith(node.$type, "System.Data"));
52
- return result;
53
- }
54
- });
55
- this.name = "OData";
56
- }
57
- static register(config) {
58
- config = config || breeze.config;
59
- config.registerAdapter("dataService", DataServiceODataAdapter);
60
- return config.initializeAdapterInstance("dataService", "OData", true);
61
- }
62
- initialize() {
63
- OData = core.requireLib("OData", "Needed to support remote OData services");
64
- OData.jsonHandler.recognizeDates = true;
65
- }
66
- // Absolute URL is the default as of Breeze 1.5.5.
67
- // To use relative URL (like pre-1.5.5), add adapterInstance.relativeUrl = true:
68
- //
69
- // let ds = breeze.config.initializeAdapterInstance("dataService", "webApiOData");
70
- // ds.relativeUrl = true;
71
- //
72
- // To use custom url construction, add adapterInstance.relativeUrl = myfunction(dataService, url):
73
- //
74
- // let ds = breeze.config.initializeAdapterInstance("dataService", "webApiOData");
75
- // ds.relativeUrl = function(dataService, url) {
76
- // return somehowConvert(url);
77
- // }
78
- //
79
- fetchMetadata(metadataStore, dataService) {
80
- let serviceName = dataService.serviceName;
81
- let url;
82
- if (this.relativeUrl === true) {
83
- url = dataService.qualifyUrl('$metadata');
84
- }
85
- else if (core.isFunction(this.relativeUrl)) {
86
- url = this.relativeUrl(dataService, '$metadata');
87
- }
88
- else {
89
- url = this.getAbsoluteUrl(dataService, '$metadata');
90
- }
91
- let mheaders = core.extend({}, this.headers);
92
- mheaders.Accept = 'application/*; odata.metadata=full';
93
- let promise = new Promise((resolve, reject) => {
94
- // OData.read(url,
95
- OData.read({
96
- requestUri: url,
97
- // headers: { "Accept": "application/json"}
98
- headers: mheaders
99
- }, function (data) {
100
- // data.dataServices.schema is an array of schemas. with properties of
101
- // entityContainer[], association[], entityType[], and namespace.
102
- if (!data || !data.dataServices) {
103
- let error = new Error("Metadata query failed for: " + url);
104
- return reject(error);
105
- }
106
- let csdlMetadata = data.dataServices;
107
- // might have been fetched by another query
108
- if (!metadataStore.hasMetadataFor(serviceName)) {
109
- try {
110
- metadataStore.importMetadata(csdlMetadata);
111
- }
112
- catch (e) {
113
- return reject(new Error("Metadata query failed for " + url + "; Unable to process returned metadata: " + e.message));
114
- }
115
- metadataStore.addDataService(dataService);
116
- }
117
- return resolve(csdlMetadata);
118
- }, function (error) {
119
- let err = createError(error, url);
120
- err.message = "Metadata query failed for: " + url + "; " + (err.message || "");
121
- return reject(err);
122
- }, OData.metadataHandler);
123
- });
124
- return promise;
125
- }
126
- executeQuery(mappingContext) {
127
- let url;
128
- if (this.relativeUrl === true) {
129
- url = mappingContext.getUrl();
130
- }
131
- else if (core.isFunction(this.relativeUrl)) {
132
- url = this.relativeUrl(mappingContext.dataService, mappingContext.getUrl());
133
- }
134
- else {
135
- url = this.getAbsoluteUrl(mappingContext.dataService, mappingContext.getUrl());
136
- }
137
- // Add query params if .withParameters was used
138
- let query = mappingContext.query;
139
- if (!core.isEmpty(query.parameters)) {
140
- let paramString = toQueryString(query.parameters);
141
- url = appendQueryStringParameter(url, paramString);
142
- }
143
- let promise = new Promise((resolve, reject) => {
144
- OData.read({
145
- requestUri: url,
146
- headers: core.extend({}, this.headers)
147
- }, function (data, response) {
148
- let inlineCount;
149
- if (data.__count) {
150
- // OData can return data.__count as a string
151
- inlineCount = parseInt(data.__count, 10);
152
- }
153
- // Odata returns different result structure when it returns multiple entities (data.results) vs single entity (data directly).
154
- // @see http://www.odata.org/documentation/odata-version-2-0/json-format/#RepresentingCollectionsOfEntries
155
- // and http://www.odata.org/documentation/odata-version-2-0/json-format/#RepresentingEntries
156
- let results;
157
- if (data.results) {
158
- results = data.results;
159
- }
160
- else {
161
- results = data;
162
- }
163
- return resolve({ results: results, inlineCount: inlineCount, httpResponse: response, query: query });
164
- }, function (error) {
165
- return reject(createError(error, url));
166
- });
167
- });
168
- return promise;
169
- }
170
- saveChanges(odataSaveContext, saveBundle) {
171
- let adapter = odataSaveContext.adapter = this;
172
- let saveContext = odataSaveContext;
173
- let url;
174
- if (this.relativeUrl === true) {
175
- saveContext.routePrefix = adapter.getRoutePrefix(saveContext.dataService);
176
- url = saveContext.dataService.qualifyUrl("$batch");
177
- }
178
- else if (core.isFunction(adapter.relativeUrl)) {
179
- saveContext.routePrefix = adapter.relativeUrl(saveContext.dataService, '');
180
- url = saveContext.routePrefix + '$batch';
181
- }
182
- else {
183
- saveContext.routePrefix = adapter.getAbsoluteUrl(saveContext.dataService, '');
184
- url = saveContext.routePrefix + '$batch';
185
- }
186
- let requestData = createChangeRequests(saveContext, saveBundle);
187
- let tempKeys = saveContext.tempKeys;
188
- let contentKeys = saveContext.contentKeys;
189
- let promise = new Promise((resolve, reject) => {
190
- OData.request({
191
- headers: core.extend({}, this.headers),
192
- requestUri: url,
193
- method: "POST",
194
- data: requestData
195
- }, function (data, response) {
196
- let entities = [];
197
- let keyMappings = [];
198
- let saveResult = { entities: entities, keyMappings: keyMappings };
199
- data.__batchResponses.forEach(function (br) {
200
- br.__changeResponses.forEach(function (cr) {
201
- let response = cr.response || cr;
202
- let statusCode = response.statusCode;
203
- if ((!statusCode) || statusCode >= 400) {
204
- reject(createError(cr, url));
205
- return;
206
- }
207
- let contentId = cr.headers["Content-ID"];
208
- // Olingo sends different case of 'ID' for the header name.
209
- if (!contentId) {
210
- contentId = cr.headers["Content-Id"];
211
- }
212
- let rawEntity = cr.data;
213
- if (rawEntity) {
214
- let tempKey = tempKeys[contentId];
215
- if (tempKey) {
216
- let entityType = tempKey.entityType;
217
- if (entityType.autoGeneratedKeyType !== breeze.AutoGeneratedKeyType.None) {
218
- let tempValue = tempKey.values[0];
219
- let realKey = entityType.getEntityKeyFromRawEntity(rawEntity, breeze.DataProperty.getRawValueFromServer);
220
- let keyMapping = { entityTypeName: entityType.name, tempValue: tempValue, realValue: realKey.values[0] };
221
- keyMappings.push(keyMapping);
222
- }
223
- }
224
- entities.push(rawEntity);
225
- }
226
- else {
227
- let origEntity = contentKeys[contentId];
228
- entities.push(origEntity);
229
- }
230
- });
231
- });
232
- return resolve(saveResult);
233
- }, function (err) {
234
- return reject(createError(err, url));
235
- }, OData.batchHandler);
236
- });
237
- return promise;
238
- }
239
- getAbsoluteUrl(dataService, url) {
240
- let serviceName = dataService.qualifyUrl('');
241
- // only prefix with serviceName if not already on the url
242
- let base = (core.stringStartsWith(url, serviceName)) ? '' : serviceName;
243
- // If no protocol, turn base into an absolute URI
244
- if (window && serviceName.indexOf('//') < 0) {
245
- // no protocol; make it absolute
246
- base = window.location.protocol + '//' + window.location.host +
247
- (core.stringStartsWith(serviceName, '/') ? '' : '/') +
248
- base;
249
- }
250
- return base + url;
251
- }
252
- getRoutePrefix(dataService) {
253
- // Get the routePrefix from a Web API OData service name.
254
- // The routePrefix is presumed to be the pathname within the dataService.serviceName
255
- // Examples of servicename -> routePrefix:
256
- // 'http://localhost:55802/odata/' -> 'odata/'
257
- // 'http://198.154.121.75/service/odata/' -> 'service/odata/'
258
- let parser;
259
- if (typeof document === 'object') { // browser
260
- parser = document.createElement('a');
261
- parser.href = dataService.serviceName;
262
- }
263
- else { // node
264
- // TODO: how to best handle this
265
- // assumes existence of node's url.parse method.
266
- parser = url.parse(dataService.serviceName);
267
- }
268
- let prefix = parser.pathname;
269
- if (prefix[0] === '/') {
270
- prefix = prefix.substr(1);
271
- } // drop leading '/' (all but IE)
272
- if (prefix.substr(-1) !== '/') {
273
- prefix += '/';
274
- } // ensure trailing '/'
275
- return prefix;
276
- }
277
- }
278
- // crude serializer. Doesn't recurse
279
- function toQueryString(obj) {
280
- let parts = [];
281
- for (let i in obj) {
282
- if (obj.hasOwnProperty(i)) {
283
- parts.push(encodeURIComponent(i) + "=" + encodeURIComponent(obj[i]));
284
- }
285
- }
286
- return parts.join("&");
287
- }
288
- /** Transform data properties while unwrapping entities */
289
- function transformValue(prop, val) {
290
- if (prop.isUnmapped)
291
- return undefined;
292
- if (prop.dataType === breeze.DataType.DateTimeOffset) {
293
- // The datajs lib tries to treat client dateTimes that are defined as DateTimeOffset on the server differently
294
- // from other dateTimes. This fix compensates before the save.
295
- val = val && new Date(val.getTime() - (val.getTimezoneOffset() * 60000));
296
- }
297
- else if (prop.dataType === breeze.DataType.DateOnly) {
298
- val = breeze.DataType.toDateOnlyString(val);
299
- }
300
- else if (prop.dataType.quoteJsonOData) {
301
- val = val != null ? val.toString() : val;
302
- }
303
- return val;
304
- }
305
- function createChangeRequests(saveContext, saveBundle) {
306
- let changeRequestInterceptor = saveContext.adapter._createChangeRequestInterceptor(saveContext, saveBundle);
307
- let changeRequests = [];
308
- let tempKeys = [];
309
- let contentKeys = [];
310
- let entityManager = saveContext.entityManager;
311
- let helper = entityManager.helper;
312
- let id = 0;
313
- let routePrefix = saveContext.routePrefix;
314
- saveBundle.entities.forEach(function (entity, index) {
315
- let aspect = entity.entityAspect;
316
- id = id + 1; // we are deliberately skipping id=0 because Content-ID = 0 seems to be ignored.
317
- let request = { headers: { "Content-ID": id, "DataServiceVersion": "2.0" } };
318
- contentKeys[id] = entity;
319
- if (aspect.entityState.isAdded()) {
320
- request.requestUri = routePrefix + entity.entityType.defaultResourceName;
321
- request.method = "POST";
322
- request.data = helper.unwrapInstance(entity, transformValue);
323
- tempKeys[id] = aspect.getKey();
324
- }
325
- else if (aspect.entityState.isModified()) {
326
- updateDeleteMergeRequest(request, aspect, routePrefix);
327
- request.method = "MERGE";
328
- request.data = helper.unwrapChangedValues(entity, entityManager.metadataStore, transformValue);
329
- // should be a PATCH/MERGE
330
- }
331
- else if (aspect.entityState.isDeleted()) {
332
- updateDeleteMergeRequest(request, aspect, routePrefix);
333
- request.method = "DELETE";
334
- }
335
- else {
336
- return;
337
- }
338
- request = changeRequestInterceptor.getRequest(request, entity, index);
339
- changeRequests.push(request);
340
- });
341
- saveContext.contentKeys = contentKeys;
342
- saveContext.tempKeys = tempKeys;
343
- changeRequestInterceptor.done(changeRequests);
344
- return {
345
- __batchRequests: [
346
- {
347
- __changeRequests: changeRequests
348
- }
349
- ]
350
- };
351
- }
352
- function updateDeleteMergeRequest(request, aspect, routePrefix) {
353
- let uriKey;
354
- let extraMetadata = aspect.extraMetadata;
355
- if (extraMetadata == null) {
356
- uriKey = getUriKey(aspect);
357
- aspect.extraMetadata = {
358
- uriKey: uriKey
359
- };
360
- }
361
- else {
362
- uriKey = extraMetadata.uriKey;
363
- if (extraMetadata.etag) {
364
- request.headers["If-Match"] = extraMetadata.etag;
365
- }
366
- }
367
- request.requestUri =
368
- // use routePrefix if uriKey lacks protocol (i.e., relative uri)
369
- uriKey.indexOf('//') > 0 ? uriKey : routePrefix + uriKey;
370
- }
371
- function getUriKey(aspect) {
372
- let entityType = aspect.entity.entityType;
373
- let resourceName = entityType.defaultResourceName;
374
- let kps = entityType.keyProperties;
375
- let uriKey = resourceName + "(";
376
- if (kps.length === 1) {
377
- uriKey = uriKey + fmtProperty(kps[0], aspect) + ")";
378
- }
379
- else {
380
- let delim = "";
381
- kps.forEach(function (kp) {
382
- uriKey = uriKey + delim + kp.nameOnServer + "=" + fmtProperty(kp, aspect);
383
- delim = ",";
384
- });
385
- uriKey = uriKey + ")";
386
- }
387
- return uriKey;
388
- }
389
- function fmtProperty(prop, aspect) {
390
- return prop.dataType.fmtOData(aspect.getPropertyValue(prop.name));
391
- }
392
- function createError(error, url) {
393
- // OData errors can have the message buried very deeply - and nonobviously
394
- // this code is tricky so be careful changing the response.body parsing.
395
- let result = new Error();
396
- let response = error && error.response;
397
- if (!response) {
398
- // in case DataJS returns "No handler for this data"
399
- result.message = error;
400
- result.statusText = error;
401
- return result;
402
- }
403
- result.message = response.statusText;
404
- result.statusText = response.statusText;
405
- result.status = response.statusCode;
406
- // non std
407
- if (url)
408
- result.url = url;
409
- result.body = response.body;
410
- if (response.body) {
411
- let nextErr;
412
- try {
413
- let body = JSON.parse(response.body);
414
- result.body = body;
415
- // OData v3 logic
416
- if (body['odata.error']) {
417
- body = body['odata.error'];
418
- }
419
- let msg = "";
420
- do {
421
- nextErr = body.error || body.innererror;
422
- if (!nextErr)
423
- msg = msg + getMessage(body);
424
- nextErr = nextErr || body.internalexception;
425
- body = nextErr || body;
426
- } while (nextErr);
427
- if (msg.length > 0) {
428
- result.message = msg;
429
- }
430
- }
431
- catch (e) {
432
- }
433
- }
434
- breeze.AbstractDataServiceAdapter._catchNoConnectionError(result);
435
- return result;
436
- }
437
- function getMessage(body) {
438
- let msg = body.message || "";
439
- return ((typeof (msg) === "string") ? msg : msg.value) + "; ";
440
- }
441
- breeze.config.registerAdapter("dataService", DataServiceODataAdapter);
442
- let webApiODataCtor = function () {
443
- this.name = "webApiOData";
444
- };
445
- const ɵ0 = webApiODataCtor;
446
- breeze.core.extend(webApiODataCtor.prototype, DataServiceODataAdapter.prototype);
447
- breeze.config.registerAdapter("dataService", webApiODataCtor);
448
- // OData 4 adapter
449
- let webApiOData4Ctor = function () {
450
- this.name = "webApiOData4";
451
- };
452
- const ɵ1 = webApiOData4Ctor;
453
- breeze.core.extend(webApiOData4Ctor.prototype, webApiODataCtor.prototype);
454
- webApiOData4Ctor.prototype.initialize = function () {
455
- // Aargh... they moved the cheese.
456
- let datajs = core.requireLib("datajs", "Needed to support remote OData v4 services");
457
- OData = datajs.V4.oData;
458
- OData.json.jsonHandler.recognizeDates = true;
459
- };
460
- webApiOData4Ctor.prototype.headers = { "OData-Version": "4.0" };
461
- breeze.config.registerAdapter("dataService", webApiOData4Ctor);
462
- export { ɵ0, ɵ1 };
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50L2FkYXB0ZXItZGF0YS1zZXJ2aWNlLW9kYXRhLyIsInNvdXJjZXMiOlsiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQVl2QixjQUFjO0FBQ2QsTUFBTSxPQUFPLHVCQUF3QixTQUFRLE1BQU0sQ0FBQywwQkFBMEI7SUFPNUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQU5WLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsc0ZBQXNGO1FBQ3RGLFlBQU8sR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBa04xQyx1QkFBa0IsR0FBOEIsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUM7WUFDNUUsSUFBSSxFQUFFLGVBQWU7WUFFckIsU0FBUyxFQUFFLFVBQVUsSUFBUyxFQUFFLGNBQXFDLEVBQUUsV0FBK0I7Z0JBQ3BHLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxJQUFJLElBQUksSUFBSTtvQkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO29CQUNwQixrRkFBa0Y7b0JBQ2xGLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzRSxJQUFJLEVBQUUsR0FBRyxjQUFjLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxD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QUMsY0FBYyxHQUFHLElBQUksQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFDRixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxnQkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYnJlZXplIGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBhcHBlbmRRdWVyeVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJy4vYWRhcHRlci1jb3JlJztcclxuXHJcbmxldCBjb3JlID0gYnJlZXplLmNvcmU7XHJcblxyXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueTtcclxuZGVjbGFyZSB2YXIgZG9jdW1lbnQ6IGFueTtcclxuZGVjbGFyZSB2YXIgdXJsOiBhbnk7IC8vIG5lZWRlZCB0byBhY2Nlc3Mgbm9kZSdzIHVybC5wYXJzZVxyXG5kZWNsYXJlIHZhciBPRGF0YTogYW55O1xyXG5cclxuaW50ZXJmYWNlIE9EYXRhU2F2ZUNvbnRleHQgZXh0ZW5kcyBicmVlemUuU2F2ZUNvbnRleHQge1xyXG4gIHRlbXBLZXlzOiBicmVlemUuRW50aXR5S2V5W107XHJcbiAgY29udGVudEtleXM6IGJyZWV6ZS5FbnRpdHlbXTtcclxufVxyXG5cclxuLyoqIEBoaWRkZW4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyIGV4dGVuZHMgYnJlZXplLkFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyIHtcclxuICByZWxhdGl2ZVVybDogYm9vbGVhbiB8ICgoZHM6IGJyZWV6ZS5EYXRhU2VydmljZSwgdXJsOiBzdHJpbmcpID0+IHN0cmluZyk7XHJcbiAgLy8gX2NhdGNoTm9Db25uZWN0aW9uRXJyb3IgPSBhYnN0cmFjdERzYVByb3RvLl9jYXRjaE5vQ29ubmVjdGlvbkVycm9yO1xyXG4gIC8vIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciA9IGFic3RyYWN0RHNhUHJvdG8uY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gIC8vIF9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IgPSBhYnN0cmFjdERzYVByb3RvLl9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I7XHJcbiAgaGVhZGVycyA9IHsgXCJEYXRhU2VydmljZVZlcnNpb25cIjogXCIyLjBcIiB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLm5hbWUgPSBcIk9EYXRhXCI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVnaXN0ZXIoY29uZmlnPzogYnJlZXplLkJyZWV6ZUNvbmZpZykge1xyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IGJyZWV6ZS5jb25maWc7XHJcbiAgICBjb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIpO1xyXG4gICAgcmV0dXJuIGNvbmZpZy5pbml0aWFsaXplQWRhcHRlckluc3RhbmNlKFwiZGF0YVNlcnZpY2VcIiwgXCJPRGF0YVwiLCB0cnVlKSBhcyBEYXRhU2VydmljZU9EYXRhQWRhcHRlcjtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemUoKSB7XHJcbiAgICBPRGF0YSA9IGNvcmUucmVxdWlyZUxpYihcIk9EYXRhXCIsIFwiTmVlZGVkIHRvIHN1cHBvcnQgcmVtb3RlIE9EYXRhIHNlcnZpY2VzXCIpO1xyXG4gICAgT0RhdGEuanNvbkhhbmRsZXIucmVjb2duaXplRGF0ZXMgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEFic29sdXRlIFVSTCBpcyB0aGUgZGVmYXVsdCBhcyBvZiBCcmVlemUgMS41LjUuICBcclxuICAvLyBUbyB1c2UgcmVsYXRpdmUgVVJMIChsaWtlIHByZS0xLjUuNSksIGFkZCBhZGFwdGVySW5zdGFuY2UucmVsYXRpdmVVcmwgPSB0cnVlOlxyXG4gIC8vXHJcbiAgLy8gICAgIGxldCBkcyA9IGJyZWV6ZS5jb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpT0RhdGFcIik7XHJcbiAgLy8gICAgIGRzLnJlbGF0aXZlVXJsID0gdHJ1ZTsgXHJcbiAgLy9cclxuICAvLyBUbyB1c2UgY3VzdG9tIHVybCBjb25zdHJ1Y3Rpb24sIGFkZCBhZGFwdGVySW5zdGFuY2UucmVsYXRpdmVVcmwgPSBteWZ1bmN0aW9uKGRhdGFTZXJ2aWNlLCB1cmwpOlxyXG4gIC8vXHJcbiAgLy8gICAgIGxldCBkcyA9IGJyZWV6ZS5jb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwid2ViQXBpT0RhdGFcIik7XHJcbiAgLy8gICAgIGRzLnJlbGF0aXZlVXJsID0gZnVuY3Rpb24oZGF0YVNlcnZpY2UsIHVybCkge1xyXG4gIC8vICAgICAgICByZXR1cm4gc29tZWhvd0NvbnZlcnQodXJsKTtcclxuICAvLyAgICAgfVxyXG4gIC8vXHJcblxyXG4gIGZldGNoTWV0YWRhdGEobWV0YWRhdGFTdG9yZTogYnJlZXplLk1ldGFkYXRhU3RvcmUsIGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UpIHtcclxuICAgIGxldCBzZXJ2aWNlTmFtZSA9IGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lO1xyXG5cclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh0aGlzLnJlbGF0aXZlVXJsID09PSB0cnVlKSB7XHJcbiAgICAgIHVybCA9IGRhdGFTZXJ2aWNlLnF1YWxpZnlVcmwoJyRtZXRhZGF0YScpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24odGhpcy5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgdXJsID0gKHRoaXMucmVsYXRpdmVVcmwgYXMgYW55KShkYXRhU2VydmljZSwgJyRtZXRhZGF0YScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gdGhpcy5nZXRBYnNvbHV0ZVVybChkYXRhU2VydmljZSwgJyRtZXRhZGF0YScpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtaGVhZGVycyA9IGNvcmUuZXh0ZW5kKHt9LCB0aGlzLmhlYWRlcnMpO1xyXG4gICAgKG1oZWFkZXJzIGFzIGFueSkuQWNjZXB0ID0gJ2FwcGxpY2F0aW9uLyo7IG9kYXRhLm1ldGFkYXRhPWZ1bGwnO1xyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAvLyBPRGF0YS5yZWFkKHVybCxcclxuICAgICAgT0RhdGEucmVhZCh7XHJcbiAgICAgICAgcmVxdWVzdFVyaTogdXJsLFxyXG4gICAgICAgIC8vIGhlYWRlcnM6IHsgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJ9XHJcbiAgICAgICAgaGVhZGVyczogbWhlYWRlcnNcclxuICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZGF0YTogYW55KSB7XHJcbiAgICAgICAgICAvLyBkYXRhLmRhdGFTZXJ2aWNlcy5zY2hlbWEgaXMgYW4gYXJyYXkgb2Ygc2NoZW1hcy4gd2l0aCBwcm9wZXJ0aWVzIG9mXHJcbiAgICAgICAgICAvLyBlbnRpdHlDb250YWluZXJbXSwgYXNzb2NpYXRpb25bXSwgZW50aXR5VHlwZVtdLCBhbmQgbmFtZXNwYWNlLlxyXG4gICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmRhdGFTZXJ2aWNlcykge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3IgPSBuZXcgRXJyb3IoXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yOiBcIiArIHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGNzZGxNZXRhZGF0YSA9IGRhdGEuZGF0YVNlcnZpY2VzO1xyXG5cclxuICAgICAgICAgIC8vIG1pZ2h0IGhhdmUgYmVlbiBmZXRjaGVkIGJ5IGFub3RoZXIgcXVlcnlcclxuICAgICAgICAgIGlmICghbWV0YWRhdGFTdG9yZS5oYXNNZXRhZGF0YUZvcihzZXJ2aWNlTmFtZSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBtZXRhZGF0YVN0b3JlLmltcG9ydE1ldGFkYXRhKGNzZGxNZXRhZGF0YSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcIk1ldGFkYXRhIHF1ZXJ5IGZhaWxlZCBmb3IgXCIgKyB1cmwgKyBcIjsgVW5hYmxlIHRvIHByb2Nlc3MgcmV0dXJuZWQgbWV0YWRhdGE6IFwiICsgZS5tZXNzYWdlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UoZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKGNzZGxNZXRhZGF0YSk7XHJcblxyXG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICBsZXQgZXJyID0gY3JlYXRlRXJyb3IoZXJyb3IsIHVybCk7XHJcbiAgICAgICAgICBlcnIubWVzc2FnZSA9IFwiTWV0YWRhdGEgcXVlcnkgZmFpbGVkIGZvcjogXCIgKyB1cmwgKyBcIjsgXCIgKyAoZXJyLm1lc3NhZ2UgfHwgXCJcIik7XHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBPRGF0YS5tZXRhZGF0YUhhbmRsZXJcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBleGVjdXRlUXVlcnkobWFwcGluZ0NvbnRleHQ6IGJyZWV6ZS5NYXBwaW5nQ29udGV4dCkge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMucmVsYXRpdmVVcmwgPT09IHRydWUpIHtcclxuICAgICAgdXJsID0gbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCk7XHJcbiAgICB9IGVsc2UgaWYgKGNvcmUuaXNGdW5jdGlvbih0aGlzLnJlbGF0aXZlVXJsKSkge1xyXG4gICAgICB1cmwgPSAodGhpcy5yZWxhdGl2ZVVybCBhcyBhbnkpKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLCBtYXBwaW5nQ29udGV4dC5nZXRVcmwoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSB0aGlzLmdldEFic29sdXRlVXJsKG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLCBtYXBwaW5nQ29udGV4dC5nZXRVcmwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWRkIHF1ZXJ5IHBhcmFtcyBpZiAud2l0aFBhcmFtZXRlcnMgd2FzIHVzZWRcclxuICAgIGxldCBxdWVyeSA9IG1hcHBpbmdDb250ZXh0LnF1ZXJ5IGFzIGJyZWV6ZS5FbnRpdHlRdWVyeTtcclxuICAgIGlmICghY29yZS5pc0VtcHR5KHF1ZXJ5LnBhcmFtZXRlcnMpKSB7XHJcbiAgICAgIGxldCBwYXJhbVN0cmluZyA9IHRvUXVlcnlTdHJpbmcocXVlcnkucGFyYW1ldGVycyk7XHJcbiAgICAgIHVybCA9IGFwcGVuZFF1ZXJ5U3RyaW5nUGFyYW1ldGVyKHVybCwgcGFyYW1TdHJpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcm9taXNlID0gbmV3IFByb21pc2U8YnJlZXplLlF1ZXJ5UmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIE9EYXRhLnJlYWQoe1xyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICBoZWFkZXJzOiBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKVxyXG4gICAgICB9LFxyXG4gICAgICAgIGZ1bmN0aW9uIChkYXRhOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICAgIGxldCBpbmxpbmVDb3VudDogYW55O1xyXG4gICAgICAgICAgaWYgKGRhdGEuX19jb3VudCkge1xyXG4gICAgICAgICAgICAvLyBPRGF0YSBjYW4gcmV0dXJuIGRhdGEuX19jb3VudCBhcyBhIHN0cmluZ1xyXG4gICAgICAgICAgICBpbmxpbmVDb3VudCA9IHBhcnNlSW50KGRhdGEuX19jb3VudCwgMTApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gT2RhdGEgcmV0dXJucyBkaWZmZXJlbnQgcmVzdWx0IHN0cnVjdHVyZSB3aGVuIGl0IHJldHVybnMgbXVsdGlwbGUgZW50aXRpZXMgKGRhdGEucmVzdWx0cykgdnMgc2luZ2xlIGVudGl0eSAoZGF0YSBkaXJlY3RseSkuXHJcbiAgICAgICAgICAvLyBAc2VlIGh0dHA6Ly93d3cub2RhdGEub3JnL2RvY3VtZW50YXRpb24vb2RhdGEtdmVyc2lvbi0yLTAvanNvbi1mb3JtYXQvI1JlcHJlc2VudGluZ0NvbGxlY3Rpb25zT2ZFbnRyaWVzXHJcbiAgICAgICAgICAvLyBhbmQgaHR0cDovL3d3dy5vZGF0YS5vcmcvZG9jdW1lbnRhdGlvbi9vZGF0YS12ZXJzaW9uLTItMC9qc29uLWZvcm1hdC8jUmVwcmVzZW50aW5nRW50cmllc1xyXG4gICAgICAgICAgbGV0IHJlc3VsdHM6IGFueTtcclxuICAgICAgICAgIGlmIChkYXRhLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgcmVzdWx0cyA9IGRhdGEucmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSBkYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoeyByZXN1bHRzOiByZXN1bHRzLCBpbmxpbmVDb3VudDogaW5saW5lQ291bnQsIGh0dHBSZXNwb25zZTogcmVzcG9uc2UsIHF1ZXJ5OiBxdWVyeSB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGVycm9yLCB1cmwpKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVDaGFuZ2VzKG9kYXRhU2F2ZUNvbnRleHQ6IGJyZWV6ZS5TYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogYnJlZXplLlNhdmVCdW5kbGUpOiBQcm9taXNlPGJyZWV6ZS5TYXZlUmVzdWx0PiB7XHJcbiAgICBsZXQgYWRhcHRlciA9IG9kYXRhU2F2ZUNvbnRleHQuYWRhcHRlciA9IHRoaXM7XHJcbiAgICBsZXQgc2F2ZUNvbnRleHQgPSBvZGF0YVNhdmVDb250ZXh0IGFzIE9EYXRhU2F2ZUNvbnRleHQ7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5yZWxhdGl2ZVVybCA9PT0gdHJ1ZSkge1xyXG4gICAgICBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCA9IGFkYXB0ZXIuZ2V0Um91dGVQcmVmaXgoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UpO1xyXG4gICAgICB1cmwgPSBzYXZlQ29udGV4dC5kYXRhU2VydmljZS5xdWFsaWZ5VXJsKFwiJGJhdGNoXCIpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24oYWRhcHRlci5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgc2F2ZUNvbnRleHQucm91dGVQcmVmaXggPSAoYWRhcHRlci5yZWxhdGl2ZVVybCBhcyBGdW5jdGlvbikoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UsICcnKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQucm91dGVQcmVmaXggKyAnJGJhdGNoJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ID0gYWRhcHRlci5nZXRBYnNvbHV0ZVVybChzYXZlQ29udGV4dC5kYXRhU2VydmljZSwgJycpO1xyXG4gICAgICB1cmwgPSBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCArICckYmF0Y2gnO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXF1ZXN0RGF0YSA9IGNyZWF0ZUNoYW5nZVJlcXVlc3RzKHNhdmVDb250ZXh0LCBzYXZlQnVuZGxlKTtcclxuICAgIGxldCB0ZW1wS2V5cyA9IHNhdmVDb250ZXh0LnRlbXBLZXlzO1xyXG4gICAgbGV0IGNvbnRlbnRLZXlzID0gc2F2ZUNvbnRleHQuY29udGVudEtleXM7XHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGJyZWV6ZS5TYXZlUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIE9EYXRhLnJlcXVlc3Qoe1xyXG4gICAgICAgIGhlYWRlcnM6IGNvcmUuZXh0ZW5kKHt9LCB0aGlzLmhlYWRlcnMpLFxyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGRhdGE6IHJlcXVlc3REYXRhXHJcbiAgICAgIH0sIGZ1bmN0aW9uIChkYXRhOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICBsZXQgZW50aXRpZXM6IGFueVtdID0gW107XHJcbiAgICAgICAgbGV0IGtleU1hcHBpbmdzOiBicmVlemUuS2V5TWFwcGluZ1tdID0gW107XHJcbiAgICAgICAgbGV0IHNhdmVSZXN1bHQ6IGJyZWV6ZS5TYXZlUmVzdWx0ID0geyBlbnRpdGllczogZW50aXRpZXMsIGtleU1hcHBpbmdzOiBrZXlNYXBwaW5ncyB9O1xyXG4gICAgICAgIGRhdGEuX19iYXRjaFJlc3BvbnNlcy5mb3JFYWNoKGZ1bmN0aW9uIChicjogYW55KSB7XHJcbiAgICAgICAgICBici5fX2NoYW5nZVJlc3BvbnNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjcjogYW55KSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGNyLnJlc3BvbnNlIHx8IGNyO1xyXG4gICAgICAgICAgICBsZXQgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1c0NvZGU7XHJcbiAgICAgICAgICAgIGlmICgoIXN0YXR1c0NvZGUpIHx8IHN0YXR1c0NvZGUgPj0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKGNyLCB1cmwpKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBjb250ZW50SWQgPSBjci5oZWFkZXJzW1wiQ29udGVudC1JRFwiXTtcclxuICAgICAgICAgICAgLy8gT2xpbmdvIHNlbmRzIGRpZmZlcmVudCBjYXNlIG9mICdJRCcgZm9yIHRoZSBoZWFkZXIgbmFtZS5cclxuICAgICAgICAgICAgaWYgKCFjb250ZW50SWQpIHtcclxuICAgICAgICAgICAgICBjb250ZW50SWQgPSBjci5oZWFkZXJzW1wiQ29udGVudC1JZFwiXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHJhd0VudGl0eSA9IGNyLmRhdGE7XHJcbiAgICAgICAgICAgIGlmIChyYXdFbnRpdHkpIHtcclxuICAgICAgICAgICAgICBsZXQgdGVtcEtleSA9IHRlbXBLZXlzW2NvbnRlbnRJZF07XHJcbiAgICAgICAgICAgICAgaWYgKHRlbXBLZXkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbnRpdHlUeXBlID0gdGVtcEtleS5lbnRpdHlUeXBlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eVR5cGUuYXV0b0dlbmVyYXRlZEtleVR5cGUgIT09IGJyZWV6ZS5BdXRvR2VuZXJhdGVkS2V5VHlwZS5Ob25lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVmFsdWUgPSB0ZW1wS2V5LnZhbHVlc1swXTtcclxuICAgICAgICAgICAgICAgICAgbGV0IHJlYWxLZXkgPSBlbnRpdHlUeXBlLmdldEVudGl0eUtleUZyb21SYXdFbnRpdHkocmF3RW50aXR5LCBicmVlemUuRGF0YVByb3BlcnR5LmdldFJhd1ZhbHVlRnJvbVNlcnZlcik7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBrZXlNYXBwaW5nID0geyBlbnRpdHlUeXBlTmFtZTogZW50aXR5VHlwZS5uYW1lLCB0ZW1wVmFsdWU6IHRlbXBWYWx1ZSwgcmVhbFZhbHVlOiByZWFsS2V5LnZhbHVlc1swXSB9O1xyXG4gICAgICAgICAgICAgICAgICBrZXlNYXBwaW5ncy5wdXNoKGtleU1hcHBpbmcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbnRpdGllcy5wdXNoKHJhd0VudGl0eSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IG9yaWdFbnRpdHkgPSBjb250ZW50S2V5c1tjb250ZW50SWRdO1xyXG4gICAgICAgICAgICAgIGVudGl0aWVzLnB1c2gob3JpZ0VudGl0eSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlKHNhdmVSZXN1bHQpO1xyXG4gICAgICB9LCBmdW5jdGlvbiAoZXJyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGVyciwgdXJsKSk7XHJcbiAgICAgIH0sIE9EYXRhLmJhdGNoSGFuZGxlcik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG5cclxuICB9XHJcblxyXG4gIGpzb25SZXN1bHRzQWRhcHRlcjogYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlciA9IG5ldyBicmVlemUuSnNvblJlc3VsdHNBZGFwdGVyKHtcclxuICAgIG5hbWU6IFwiT0RhdGFfZGVmYXVsdFwiLFxyXG5cclxuICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24gKG5vZGU6IGFueSwgbWFwcGluZ0NvbnRleHQ6IGJyZWV6ZS5NYXBwaW5nQ29udGV4dCwgbm9kZUNvbnRleHQ6IGJyZWV6ZS5Ob2RlQ29udGV4dCkge1xyXG4gICAgICBsZXQgcmVzdWx0OiBhbnkgPSB7fTtcclxuICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgbGV0IG1ldGFkYXRhID0gbm9kZS5fX21ldGFkYXRhO1xyXG4gICAgICBpZiAobWV0YWRhdGEgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIFRPRE86IG1heSBiZSBhYmxlIHRvIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCBieSBjYWNoaW5nIG9mIHRoZSBwcmV2aW91cyB2YWx1ZS5cclxuICAgICAgICBsZXQgZW50aXR5VHlwZU5hbWUgPSBicmVlemUuTWV0YWRhdGFTdG9yZS5ub3JtYWxpemVUeXBlTmFtZShtZXRhZGF0YS50eXBlKTtcclxuICAgICAgICBsZXQgZXQgPSBlbnRpdHlUeXBlTmFtZSAmJiBtYXBwaW5nQ29udGV4dC5lbnRpdHlNYW5hZ2VyLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShlbnRpdHlUeXBlTmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgLy8gT0RhdGEgcmVzcG9uc2UgZG9lc24ndCBkaXN0aW5ndWlzaCBhIHByb2plY3Rpb24gZnJvbSBhIHdob2xlIGVudGl0eS5cclxuICAgICAgICAvLyBXZSdsbCBhc3N1bWUgdGhhdCB3aG9sZS1lbnRpdHkgZGF0YSB3b3VsZCBoYXZlIGF0IGxlYXN0IGFzIG1hbnkgcHJvcGVydGllcyAgKDw9KVxyXG4gICAgICAgIC8vIGFzIHRoZSBFbnRpdHlUeXBlIGhhcyBtYXBwZWQgcHJvcGVydGllcyBvbiB0aGUgYmFzaXMgdGhhdFxyXG4gICAgICAgIC8vIG1vc3QgcHJvamVjdGlvbnMgcmVtb3ZlIHByb3BlcnRpZXMgcmF0aGVyIHRoYW4gYWRkIHRoZW0uXHJcbiAgICAgICAgLy8gSWYgbm90LCBhc3N1bWUgaXQncyBhIHByb2plY3Rpb24gYW5kIGRvIE5PVCB0cmVhdCBhcyBhbiBlbnRpdHlcclxuICAgICAgICBpZiAoZXQgJiYgZXQuX21hcHBlZFByb3BlcnRpZXNDb3VudCA8PSBPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAvLyBpZiAoZXQgJiYgZXQuX21hcHBlZFByb3BlcnRpZXNDb3VudCA9PT0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoIC0gMSkgeyAvLyBPTERcclxuICAgICAgICAgIHJlc3VsdC5lbnRpdHlUeXBlID0gZXQ7XHJcbiAgICAgICAgICBsZXQgdXJpS2V5ID0gbWV0YWRhdGEudXJpIHx8IG1ldGFkYXRhLmlkO1xyXG4gICAgICAgICAgaWYgKHVyaUtleSkge1xyXG4gICAgICAgICAgICAvLyBTdHJpcCBiYXNlVXJpIHRvIG1ha2UgdXJpS2V5IGEgcmVsYXRpdmUgdXJpXHJcbiAgICAgICAgICAgIC8vIFRvZG86IHdoeSBpcyB0aGlzIG5lY2Vzc2FyeSB3aGVuIGFic29sdXRlIHdvcmtzIGZvciBldmVyeSBPRGF0YSBzb3VyY2UgdGVzdGVkP1xyXG4gICAgICAgICAgICBsZXQgcmUgPSBuZXcgUmVnRXhwKCdeJyArIG1hcHBpbmdDb250ZXh0LmRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lLCAnaScpO1xyXG4gICAgICAgICAgICB1cmlLZXkgPSB1cmlLZXkucmVwbGFjZShyZSwgJycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0LmV4dHJhTWV0YWRhdGEgPSB7XHJcbiAgICAgICAgICAgIHVyaUtleTogdXJpS2V5LFxyXG4gICAgICAgICAgICBldGFnOiBtZXRhZGF0YS5ldGFnXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBPRGF0YSB2MyAtIHByb2plY3Rpb24gYXJyYXlzIHdpbGwgYmUgZW5jbG9zZWQgaW4gYSByZXN1bHRzIGFycmF5XHJcbiAgICAgIGlmIChub2RlLnJlc3VsdHMpIHtcclxuICAgICAgICByZXN1bHQubm9kZSA9IG5vZGUucmVzdWx0cztcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IG5vZGVDb250ZXh0LnByb3BlcnR5TmFtZTtcclxuICAgICAgcmVzdWx0Lmlnbm9yZSA9IG5vZGUuX19kZWZlcnJlZCAhPSBudWxsIHx8IHByb3BlcnR5TmFtZSA9PT0gXCJfX21ldGFkYXRhXCIgfHxcclxuICAgICAgICAvLyBFbnRpdHlLZXkgcHJvcGVydGllcyBjYW4gYmUgcHJvZHVjZWQgYnkgRURNWCBtb2RlbHNcclxuICAgICAgICAocHJvcGVydHlOYW1lID09PSBcIkVudGl0eUtleVwiICYmIG5vZGUuJHR5cGUgJiYgY29yZS5zdHJpbmdTdGFydHNXaXRoKG5vZGUuJHR5cGUsIFwiU3lzdGVtLkRhdGFcIikpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICB9KTtcclxuXHJcbiAgZ2V0QWJzb2x1dGVVcmwoZGF0YVNlcnZpY2U6IGJyZWV6ZS5EYXRhU2VydmljZSwgdXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCBzZXJ2aWNlTmFtZSA9IGRhdGFTZXJ2aWNlLnF1YWxpZnlVcmwoJycpO1xyXG4gICAgLy8gb25seSBwcmVmaXggd2l0aCBzZXJ2aWNlTmFtZSBpZiBub3QgYWxyZWFkeSBvbiB0aGUgdXJsXHJcbiAgICBsZXQgYmFzZSA9IChjb3JlLnN0cmluZ1N0YXJ0c1dpdGgodXJsLCBzZXJ2aWNlTmFtZSkpID8gJycgOiBzZXJ2aWNlTmFtZTtcclxuICAgIC8vIElmIG5vIHByb3RvY29sLCB0dXJuIGJhc2UgaW50byBhbiBhYnNvbHV0ZSBVUklcclxuICAgIGlmICh3aW5kb3cgJiYgc2VydmljZU5hbWUuaW5kZXhPZignLy8nKSA8IDApIHtcclxuICAgICAgLy8gbm8gcHJvdG9jb2w7IG1ha2UgaXQgYWJzb2x1dGVcclxuICAgICAgYmFzZSA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArXHJcbiAgICAgICAgKGNvcmUuc3RyaW5nU3RhcnRzV2l0aChzZXJ2aWNlTmFtZSwgJy8nKSA/ICcnIDogJy8nKSArXHJcbiAgICAgICAgYmFzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBiYXNlICsgdXJsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um91dGVQcmVmaXgoZGF0YVNlcnZpY2U6IGJyZWV6ZS5EYXRhU2VydmljZSkge1xyXG4gICAgLy8gR2V0IHRoZSByb3V0ZVByZWZpeCBmcm9tIGEgV2ViIEFQSSBPRGF0YSBzZXJ2aWNlIG5hbWUuXHJcbiAgICAvLyBUaGUgcm91dGVQcmVmaXggaXMgcHJlc3VtZWQgdG8gYmUgdGhlIHBhdGhuYW1lIHdpdGhpbiB0aGUgZGF0YVNlcnZpY2Uuc2VydmljZU5hbWVcclxuICAgIC8vIEV4YW1wbGVzIG9mIHNlcnZpY2VuYW1lIC0+IHJvdXRlUHJlZml4OlxyXG4gICAgLy8gICAnaHR0cDovL2xvY2FsaG9zdDo1NTgwMi9vZGF0YS8nIC0+ICdvZGF0YS8nXHJcbiAgICAvLyAgICdodHRwOi8vMTk4LjE1NC4xMjEuNzUvc2VydmljZS9vZGF0YS8nIC0+ICdzZXJ2aWNlL29kYXRhLydcclxuICAgIGxldCBwYXJzZXI6IGFueTtcclxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICdvYmplY3QnKSB7IC8vIGJyb3dzZXJcclxuICAgICAgcGFyc2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICBwYXJzZXIuaHJlZiA9IGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lO1xyXG4gICAgfSBlbHNlIHsgLy8gbm9kZVxyXG4gICAgICAvLyBUT0RPOiBob3cgdG8gYmVzdCBoYW5kbGUgdGhpc1xyXG4gICAgICAvLyBhc3N1bWVzIGV4aXN0ZW5jZSBvZiBub2RlJ3MgdXJsLnBhcnNlIG1ldGhvZC5cclxuICAgICAgcGFyc2VyID0gdXJsLnBhcnNlKGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lKTtcclxuICAgIH1cclxuICAgIGxldCBwcmVmaXggPSBwYXJzZXIucGF0aG5hbWU7XHJcbiAgICBpZiAocHJlZml4WzBdID09PSAnLycpIHtcclxuICAgICAgcHJlZml4ID0gcHJlZml4LnN1YnN0cigxKTtcclxuICAgIH0gLy8gZHJvcCBsZWFkaW5nICcvJyAgKGFsbCBidXQgSUUpXHJcbiAgICBpZiAocHJlZml4LnN1YnN0cigtMSkgIT09ICcvJykge1xyXG4gICAgICBwcmVmaXggKz0gJy8nO1xyXG4gICAgfSAgICAgIC8vIGVuc3VyZSB0cmFpbGluZyAnLydcclxuICAgIHJldHVybiBwcmVmaXg7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLy8gY3J1ZGUgc2VyaWFsaXplci4gIERvZXNuJ3QgcmVjdXJzZVxyXG5mdW5jdGlvbiB0b1F1ZXJ5U3RyaW5nKG9iajogT2JqZWN0KSB7XHJcbiAgbGV0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZvciAobGV0IGkgaW4gb2JqKSB7XHJcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGkpICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2ldKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwYXJ0cy5qb2luKFwiJlwiKTtcclxufVxyXG5cclxuLyoqIFRyYW5zZm9ybSBkYXRhIHByb3BlcnRpZXMgd2hpbGUgdW53cmFwcGluZyBlbnRpdGllcyAqL1xyXG5mdW5jdGlvbiB0cmFuc2Zvcm1WYWx1ZShwcm9wOiBicmVlemUuRGF0YVByb3BlcnR5LCB2YWw6IGFueSkge1xyXG4gIGlmIChwcm9wLmlzVW5tYXBwZWQpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgaWYgKHByb3AuZGF0YVR5cGUgPT09IGJyZWV6ZS5EYXRhVHlwZS5EYXRlVGltZU9mZnNldCkge1xyXG4gICAgLy8gVGhlIGRhdGFqcyBsaWIgdHJpZXMgdG8gdHJlYXQgY2xpZW50IGRhdGVUaW1lcyB0aGF0IGFyZSBkZWZpbmVkIGFzIERhdGVUaW1lT2Zmc2V0IG9uIHRoZSBzZXJ2ZXIgZGlmZmVyZW50bHlcclxuICAgIC8vIGZyb20gb3RoZXIgZGF0ZVRpbWVzLiBUaGlzIGZpeCBjb21wZW5zYXRlcyBiZWZvcmUgdGhlIHNhdmUuXHJcbiAgICB2YWwgPSB2YWwgJiYgbmV3IERhdGUodmFsLmdldFRpbWUoKSAtICh2YWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbiAgfSBlbHNlIGlmIChwcm9wLmRhdGFUeXBlID09PSBicmVlemUuRGF0YVR5cGUuRGF0ZU9ubHkpIHtcclxuICAgIHZhbCA9IGJyZWV6ZS5EYXRhVHlwZS50b0RhdGVPbmx5U3RyaW5nKHZhbCk7XHJcbiAgfSBlbHNlIGlmICgocHJvcC5kYXRhVHlwZSBhcyBicmVlemUuRGF0YVR5cGUpLnF1b3RlSnNvbk9EYXRhKSB7XHJcbiAgICB2YWwgPSB2YWwgIT0gbnVsbCA/IHZhbC50b1N0cmluZygpIDogdmFsO1xyXG4gIH1cclxuICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVDaGFuZ2VSZXF1ZXN0cyhzYXZlQ29udGV4dDogT0RhdGFTYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogYnJlZXplLlNhdmVCdW5kbGUpIHtcclxuICBsZXQgY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yID0gKHNhdmVDb250ZXh0LmFkYXB0ZXIgYXMgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIpLl9jcmVhdGVDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ioc2F2ZUNvbnRleHQsIHNhdmVCdW5kbGUpO1xyXG4gIGxldCBjaGFuZ2VSZXF1ZXN0czogYW55W10gPSBbXTtcclxuICBsZXQgdGVtcEtleXM6IGJyZWV6ZS5FbnRpdHlLZXlbXSA9IFtdO1xyXG4gIGxldCBjb250ZW50S2V5czogYnJlZXplLkVudGl0eVtdID0gW107XHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBzYXZlQ29udGV4dC5lbnRpdHlNYW5hZ2VyO1xyXG4gIGxldCBoZWxwZXIgPSBlbnRpdHlNYW5hZ2VyLmhlbHBlcjtcclxuICBsZXQgaWQgPSAwO1xyXG4gIGxldCByb3V0ZVByZWZpeCA9IHNhdmVDb250ZXh0LnJvdXRlUHJlZml4O1xyXG5cclxuICBzYXZlQnVuZGxlLmVudGl0aWVzLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eSwgaW5kZXgpIHtcclxuICAgIGxldCBhc3BlY3QgPSBlbnRpdHkuZW50aXR5QXNwZWN0O1xyXG4gICAgaWQgPSBpZCArIDE7IC8vIHdlIGFyZSBkZWxpYmVyYXRlbHkgc2tpcHBpbmcgaWQ9MCBiZWNhdXNlIENvbnRlbnQtSUQgPSAwIHNlZW1zIHRvIGJlIGlnbm9yZWQuXHJcbiAgICBsZXQgcmVxdWVzdCA9IHsgaGVhZGVyczogeyBcIkNvbnRlbnQtSURcIjogaWQsIFwiRGF0YVNlcnZpY2VWZXJzaW9uXCI6IFwiMi4wXCIgfSB9IGFzIGFueTtcclxuICAgIGNvbnRlbnRLZXlzW2lkXSA9IGVudGl0eTtcclxuICAgIGlmIChhc3BlY3QuZW50aXR5U3RhdGUuaXNBZGRlZCgpKSB7XHJcbiAgICAgIHJlcXVlc3QucmVxdWVzdFVyaSA9IHJvdXRlUHJlZml4ICsgZW50aXR5LmVudGl0eVR5cGUuZGVmYXVsdFJlc291cmNlTmFtZTtcclxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIlBPU1RcIjtcclxuICAgICAgcmVxdWVzdC5kYXRhID0gaGVscGVyLnVud3JhcEluc3RhbmNlKGVudGl0eSwgdHJhbnNmb3JtVmFsdWUpO1xyXG4gICAgICB0ZW1wS2V5c1tpZF0gPSBhc3BlY3QuZ2V0S2V5KCk7XHJcbiAgICB9IGVsc2UgaWYgKGFzcGVjdC5lbnRpdHlTdGF0ZS5pc01vZGlmaWVkKCkpIHtcclxuICAgICAgdXBkYXRlRGVsZXRlTWVyZ2VSZXF1ZXN0KHJlcXVlc3QsIGFzcGVjdCwgcm91dGVQcmVmaXghKTtcclxuICAgICAgcmVxdWVzdC5tZXRob2QgPSBcIk1FUkdFXCI7XHJcbiAgICAgIHJlcXVlc3QuZGF0YSA9IGhlbHBlci51bndyYXBDaGFuZ2VkVmFsdWVzKGVudGl0eSwgZW50aXR5TWFuYWdlci5tZXRhZGF0YVN0b3JlLCB0cmFuc2Zvcm1WYWx1ZSk7XHJcbiAgICAgIC8vIHNob3VsZCBiZSBhIFBBVENIL01FUkdFXHJcbiAgICB9IGVsc2UgaWYgKGFzcGVjdC5lbnRpdHlTdGF0ZS5pc0RlbGV0ZWQoKSkge1xyXG4gICAgICB1cGRhdGVEZWxldGVNZXJnZVJlcXVlc3QocmVxdWVzdCwgYXNwZWN0LCByb3V0ZVByZWZpeCEpO1xyXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IFwiREVMRVRFXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXF1ZXN0ID0gY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLmdldFJlcXVlc3QocmVxdWVzdCwgZW50aXR5LCBpbmRleCk7XHJcbiAgICBjaGFuZ2VSZXF1ZXN0cy5wdXNoKHJlcXVlc3QpO1xyXG4gIH0pO1xyXG4gIHNhdmVDb250ZXh0LmNvbnRlbnRLZXlzID0gY29udGVudEtleXM7XHJcbiAgc2F2ZUNvbnRleHQudGVtcEtleXMgPSB0ZW1wS2V5cztcclxuICBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IuZG9uZShjaGFuZ2VSZXF1ZXN0cyk7XHJcbiAgcmV0dXJuIHtcclxuICAgIF9fYmF0Y2hSZXF1ZXN0czogW1xyXG4gICAgICB7XHJcbiAgICAgICAgX19jaGFuZ2VSZXF1ZXN0czogY2hhbmdlUmVxdWVzdHNcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH07XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVEZWxldGVNZXJnZVJlcXVlc3QocmVxdWVzdDogYW55LCBhc3BlY3Q6IGJyZWV6ZS5FbnRpdHlBc3BlY3QsIHJvdXRlUHJlZml4OiBzdHJpbmcpIHtcclxuICBsZXQgdXJpS2V5OiBzdHJpbmc7XHJcbiAgbGV0IGV4dHJhTWV0YWRhdGEgPSBhc3BlY3QuZXh0cmFNZXRhZGF0YTtcclxuICBpZiAoZXh0cmFNZXRhZGF0YSA9PSBudWxsKSB7XHJcbiAgICB1cmlLZXkgPSBnZXRVcmlLZXkoYXNwZWN0KTtcclxuICAgIGFzcGVjdC5leHRyYU1ldGFkYXRhID0ge1xyXG4gICAgICB1cmlLZXk6IHVyaUtleVxyXG4gICAgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgdXJpS2V5ID0gZXh0cmFNZXRhZGF0YS51cmlLZXk7XHJcbiAgICBpZiAoZXh0cmFNZXRhZGF0YS5ldGFnKSB7XHJcbiAgICAgIHJlcXVlc3QuaGVhZGVyc1tcIklmLU1hdGNoXCJdID0gZXh0cmFNZXRhZGF0YS5ldGFnO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXF1ZXN0LnJlcXVlc3RVcmkgPVxyXG4gICAgLy8gdXNlIHJvdXRlUHJlZml4IGlmIHVyaUtleSBsYWNrcyBwcm90b2NvbCAoaS5lLiwgcmVsYXRpdmUgdXJpKVxyXG4gICAgdXJpS2V5LmluZGV4T2YoJy8vJykgPiAwID8gdXJpS2V5IDogcm91dGVQcmVmaXggKyB1cmlLZXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFVyaUtleShhc3BlY3Q6IGJyZWV6ZS5FbnRpdHlBc3BlY3QpIHtcclxuICBsZXQgZW50aXR5VHlwZSA9IGFzcGVjdC5lbnRpdHkhLmVudGl0eVR5cGU7XHJcbiAgbGV0IHJlc291cmNlTmFtZSA9IGVudGl0eVR5cGUuZGVmYXVsdFJlc291cmNlTmFtZTtcclxuICBsZXQga3BzID0gZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzO1xyXG4gIGxldCB1cmlLZXkgPSByZXNvdXJjZU5hbWUgKyBcIihcIjtcclxuICBpZiAoa3BzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgdXJpS2V5ID0gdXJpS2V5ICsgZm10UHJvcGVydHkoa3BzWzBdLCBhc3BlY3QpICsgXCIpXCI7XHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCBkZWxpbSA9IFwiXCI7XHJcbiAgICBrcHMuZm9yRWFjaChmdW5jdGlvbiAoa3ApIHtcclxuICAgICAgdXJpS2V5ID0gdXJpS2V5ICsgZGVsaW0gKyBrcC5uYW1lT25TZXJ2ZXIgKyBcIj1cIiArIGZtdFByb3BlcnR5KGtwLCBhc3BlY3QpO1xyXG4gICAgICBkZWxpbSA9IFwiLFwiO1xyXG4gICAgfSk7XHJcbiAgICB1cmlLZXkgPSB1cmlLZXkgKyBcIilcIjtcclxuICB9XHJcbiAgcmV0dXJuIHVyaUtleTtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10UHJvcGVydHkocHJvcDogYnJlZXplLkRhdGFQcm9wZXJ0eSwgYXNwZWN0OiBicmVlemUuRW50aXR5QXNwZWN0KSB7XHJcbiAgcmV0dXJuIChwcm9wLmRhdGFUeXBlIGFzIGJyZWV6ZS5EYXRhVHlwZSkuZm10T0RhdGEhKGFzcGVjdC5nZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVFcnJvcihlcnJvcjogYW55LCB1cmw6IHN0cmluZykge1xyXG4gIC8vIE9EYXRhIGVycm9ycyBjYW4gaGF2ZSB0aGUgbWVzc2FnZSBidXJpZWQgdmVyeSBkZWVwbHkgLSBhbmQgbm9ub2J2aW91c2x5XHJcbiAgLy8gdGhpcyBjb2RlIGlzIHRyaWNreSBzbyBiZSBjYXJlZnVsIGNoYW5naW5nIHRoZSByZXNwb25zZS5ib2R5IHBhcnNpbmcuXHJcbiAgbGV0IHJlc3VsdCA9IG5ldyBFcnJvcigpIGFzIGJyZWV6ZS5TZXJ2ZXJFcnJvcjtcclxuICBsZXQgcmVzcG9uc2UgPSBlcnJvciAmJiBlcnJvci5yZXNwb25zZTtcclxuICBpZiAoIXJlc3BvbnNlKSB7XHJcbiAgICAvLyBpbiBjYXNlIERhdGFKUyByZXR1cm5zIFwiTm8gaGFuZGxlciBmb3IgdGhpcyBkYXRhXCJcclxuICAgIHJlc3VsdC5tZXNzYWdlID0gZXJyb3I7XHJcbiAgICByZXN1bHQuc3RhdHVzVGV4dCA9IGVycm9yO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgcmVzdWx0Lm1lc3NhZ2UgPSByZXNwb25zZS5zdGF0dXNUZXh0O1xyXG4gIHJlc3VsdC5zdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdHVzVGV4dDtcclxuICByZXN1bHQuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcclxuICAvLyBub24gc3RkXHJcbiAgaWYgKHVybCkgcmVzdWx0LnVybCA9IHVybDtcclxuICByZXN1bHQuYm9keSA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgaWYgKHJlc3BvbnNlLmJvZHkpIHtcclxuICAgIGxldCBuZXh0RXJyOiBhbnk7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgYm9keSA9IEpTT04ucGFyc2UocmVzcG9uc2UuYm9keSk7XHJcbiAgICAgIHJlc3VsdC5ib2R5ID0gYm9keTtcclxuICAgICAgLy8gT0RhdGEgdjMgbG9naWNcclxuICAgICAgaWYgKGJvZHlbJ29kYXRhLmVycm9yJ10pIHtcclxuICAgICAgICBib2R5ID0gYm9keVsnb2RhdGEuZXJyb3InXTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgbXNnID0gXCJcIjtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIG5leHRFcnIgPSBib2R5LmVycm9yIHx8IGJvZHkuaW5uZXJlcnJvcjtcclxuICAgICAgICBpZiAoIW5leHRFcnIpIG1zZyA9IG1zZyArIGdldE1lc3NhZ2UoYm9keSk7XHJcbiAgICAgICAgbmV4dEVyciA9IG5leHRFcnIgfHwgYm9keS5pbnRlcm5hbGV4Y2VwdGlvbjtcclxuICAgICAgICBib2R5ID0gbmV4dEVyciB8fCBib2R5O1xyXG4gICAgICB9IHdoaWxlIChuZXh0RXJyKTtcclxuICAgICAgaWYgKG1zZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmVzdWx0Lm1lc3NhZ2UgPSBtc2c7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG4gIGJyZWV6ZS5BYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlci5fY2F0Y2hOb0Nvbm5lY3Rpb25FcnJvcihyZXN1bHQpO1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE1lc3NhZ2UoYm9keTogYW55KSB7XHJcbiAgbGV0IG1zZyA9IGJvZHkubWVzc2FnZSB8fCBcIlwiO1xyXG4gIHJldHVybiAoKHR5cGVvZiAobXNnKSA9PT0gXCJzdHJpbmdcIikgPyBtc2cgOiBtc2cudmFsdWUpICsgXCI7IFwiO1xyXG59XHJcblxyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyKTtcclxuXHJcblxyXG5sZXQgd2ViQXBpT0RhdGFDdG9yID0gZnVuY3Rpb24gKCkge1xyXG4gIHRoaXMubmFtZSA9IFwid2ViQXBpT0RhdGFcIjtcclxufTtcclxuXHJcbmJyZWV6ZS5jb3JlLmV4dGVuZCh3ZWJBcGlPRGF0YUN0b3IucHJvdG90eXBlLCBEYXRhU2VydmljZU9EYXRhQWRhcHRlci5wcm90b3R5cGUpO1xyXG5cclxuYnJlZXplLmNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCB3ZWJBcGlPRGF0YUN0b3IgYXMgYW55KTtcclxuLy8gT0RhdGEgNCBhZGFwdGVyXHJcbmxldCB3ZWJBcGlPRGF0YTRDdG9yID0gZnVuY3Rpb24gKCkge1xyXG4gIHRoaXMubmFtZSA9IFwid2ViQXBpT0RhdGE0XCI7XHJcbn07XHJcbmJyZWV6ZS5jb3JlLmV4dGVuZCh3ZWJBcGlPRGF0YTRDdG9yLnByb3RvdHlwZSwgd2ViQXBpT0RhdGFDdG9yLnByb3RvdHlwZSk7XHJcbndlYkFwaU9EYXRhNEN0b3IucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgLy8gQWFyZ2guLi4gdGhleSBtb3ZlZCB0aGUgY2hlZXNlLlxyXG4gIGxldCBkYXRhanMgPSBjb3JlLnJlcXVpcmVMaWIoXCJkYXRhanNcIiwgXCJOZWVkZWQgdG8gc3VwcG9ydCByZW1vdGUgT0RhdGEgdjQgc2VydmljZXNcIik7XHJcbiAgT0RhdGEgPSBkYXRhanMuVjQub0RhdGE7XHJcbiAgT0RhdGEuanNvbi5qc29uSGFuZGxlci5yZWNvZ25pemVEYXRlcyA9IHRydWU7XHJcbn07XHJcbndlYkFwaU9EYXRhNEN0b3IucHJvdG90eXBlLmhlYWRlcnMgPSB7IFwiT0RhdGEtVmVyc2lvblwiOiBcIjQuMFwiIH07XHJcbmJyZWV6ZS5jb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgd2ViQXBpT0RhdGE0Q3RvciBhcyBhbnkpO1xyXG5cclxuXHJcblxyXG5cclxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './adapter-data-service-odata';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLWNsaWVudC1hZGFwdGVyLWRhdGEtc2VydmljZS1vZGF0YS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEvIiwic291cmNlcyI6WyJicmVlemUtY2xpZW50LWFkYXB0ZXItZGF0YS1zZXJ2aWNlLW9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9hZGFwdGVyLWRhdGEtc2VydmljZS1vZGF0YSc7XG4iXX0=