breeze-client 2.1.5-mjs → 2.1.5

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 (394) hide show
  1. package/adapter-ajax-angularjs/{index.d.ts → breeze-client-adapter-ajax-angularjs.d.ts} +0 -1
  2. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +1 -0
  3. package/adapter-ajax-angularjs/package.json +13 -0
  4. package/adapter-ajax-fetch/{index.d.ts → breeze-client-adapter-ajax-fetch.d.ts} +0 -1
  5. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +1 -0
  6. package/adapter-ajax-fetch/package.json +13 -0
  7. package/adapter-ajax-httpclient/{index.d.ts → breeze-client-adapter-ajax-httpclient.d.ts} +0 -1
  8. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +1 -0
  9. package/adapter-ajax-httpclient/package.json +13 -0
  10. package/adapter-ajax-jquery/{index.d.ts → breeze-client-adapter-ajax-jquery.d.ts} +0 -1
  11. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +1 -0
  12. package/adapter-ajax-jquery/package.json +13 -0
  13. package/adapter-ajax-post/{index.d.ts → breeze-client-adapter-ajax-post.d.ts} +0 -1
  14. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +1 -0
  15. package/adapter-ajax-post/package.json +13 -0
  16. package/adapter-data-service-odata/{index.d.ts → breeze-client-adapter-data-service-odata.d.ts} +0 -1
  17. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +1 -0
  18. package/adapter-data-service-odata/package.json +13 -0
  19. package/adapter-data-service-webapi/{index.d.ts → breeze-client-adapter-data-service-webapi.d.ts} +0 -1
  20. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +1 -0
  21. package/adapter-data-service-webapi/package.json +13 -0
  22. package/adapter-model-library-backing-store/{index.d.ts → breeze-client-adapter-model-library-backing-store.d.ts} +0 -1
  23. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +1 -0
  24. package/adapter-model-library-backing-store/package.json +13 -0
  25. package/adapter-model-library-ko/{index.d.ts → breeze-client-adapter-model-library-ko.d.ts} +0 -1
  26. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +1 -0
  27. package/adapter-model-library-ko/package.json +13 -0
  28. package/adapter-uri-builder-json/{index.d.ts → breeze-client-adapter-uri-builder-json.d.ts} +0 -1
  29. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +1 -0
  30. package/adapter-uri-builder-json/package.json +13 -0
  31. package/adapter-uri-builder-odata/{index.d.ts → breeze-client-adapter-uri-builder-odata.d.ts} +0 -1
  32. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +1 -0
  33. package/adapter-uri-builder-odata/package.json +13 -0
  34. package/breeze-client.d.ts +8 -0
  35. package/breeze-client.metadata.json +1 -0
  36. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +190 -0
  37. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +1 -0
  38. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +2 -0
  39. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +1 -0
  40. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +190 -0
  41. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +1 -0
  42. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +2 -0
  43. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +1 -0
  44. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +195 -0
  45. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +1 -0
  46. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +2 -0
  47. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +1 -0
  48. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +115 -0
  49. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +1 -0
  50. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +2 -0
  51. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +1 -0
  52. package/bundles/breeze-client-adapter-ajax-post.umd.js +92 -0
  53. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +1 -0
  54. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +2 -0
  55. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +1 -0
  56. package/bundles/breeze-client-adapter-data-service-odata.umd.js +743 -0
  57. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -0
  58. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +16 -0
  59. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -0
  60. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +326 -0
  61. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -0
  62. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +16 -0
  63. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -0
  64. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +280 -0
  65. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +1 -0
  66. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +2 -0
  67. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +1 -0
  68. package/bundles/breeze-client-adapter-model-library-ko.umd.js +252 -0
  69. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +1 -0
  70. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +2 -0
  71. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +1 -0
  72. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +96 -0
  73. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +1 -0
  74. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +2 -0
  75. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +1 -0
  76. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +262 -0
  77. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +1 -0
  78. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +2 -0
  79. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +1 -0
  80. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +258 -0
  81. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +1 -0
  82. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +2 -0
  83. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +1 -0
  84. package/bundles/breeze-client-mixin-save-queuing.umd.js +579 -0
  85. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +1 -0
  86. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +16 -0
  87. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +1 -0
  88. package/bundles/breeze-client.umd.js +14098 -0
  89. package/bundles/breeze-client.umd.js.map +1 -0
  90. package/bundles/breeze-client.umd.min.js +16 -0
  91. package/bundles/breeze-client.umd.min.js.map +1 -0
  92. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +130 -0
  93. package/esm2015/adapter-ajax-angularjs/adapter-core.js +49 -0
  94. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  95. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +130 -0
  96. package/esm2015/adapter-ajax-fetch/adapter-core.js +49 -0
  97. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  98. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +137 -0
  99. package/esm2015/adapter-ajax-httpclient/adapter-core.js +49 -0
  100. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  101. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +103 -0
  102. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  103. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +77 -0
  104. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  105. package/esm2015/adapter-data-service-odata/adapter-core.js +49 -0
  106. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +459 -0
  107. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  108. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +93 -0
  109. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  110. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +268 -0
  111. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  112. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +240 -0
  113. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  114. package/esm2015/adapter-uri-builder-json/adapter-core.js +49 -0
  115. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +36 -0
  116. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  117. package/esm2015/adapter-uri-builder-odata/adapter-core.js +49 -0
  118. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +192 -0
  119. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  120. package/esm2015/breeze-client.js +9 -0
  121. package/esm2015/index.js +2 -0
  122. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  123. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  124. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  125. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +400 -0
  126. package/esm2015/src/abstract-data-service-adapter.js +296 -0
  127. package/esm2015/src/array.js +4 -0
  128. package/esm2015/src/assert-param.js +312 -0
  129. package/esm2015/src/breeze.js +85 -0
  130. package/esm2015/src/complex-array.js +119 -0
  131. package/esm2015/src/config.js +223 -0
  132. package/esm2015/src/core.js +709 -0
  133. package/esm2015/src/csdl-metadata-parser.js +385 -0
  134. package/esm2015/src/data-service.js +203 -0
  135. package/esm2015/src/data-type.js +444 -0
  136. package/esm2015/src/default-property-interceptor.js +460 -0
  137. package/esm2015/src/entity-action.js +45 -0
  138. package/esm2015/src/entity-aspect.js +806 -0
  139. package/esm2015/src/entity-group.js +187 -0
  140. package/esm2015/src/entity-key.js +116 -0
  141. package/esm2015/src/entity-manager.js +2094 -0
  142. package/esm2015/src/entity-metadata.js +2109 -0
  143. package/esm2015/src/entity-query.js +996 -0
  144. package/esm2015/src/entity-state.js +99 -0
  145. package/esm2015/src/enum.js +141 -0
  146. package/esm2015/src/event.js +256 -0
  147. package/esm2015/src/interface-registry.js +41 -0
  148. package/esm2015/src/key-generator.js +108 -0
  149. package/esm2015/src/local-query-comparison-options.js +65 -0
  150. package/esm2015/src/mapping-context.js +405 -0
  151. package/esm2015/src/naming-convention.js +88 -0
  152. package/esm2015/src/observable-array.js +185 -0
  153. package/esm2015/src/predicate.js +1235 -0
  154. package/esm2015/src/primitive-array.js +87 -0
  155. package/esm2015/src/query-options.js +152 -0
  156. package/esm2015/src/relation-array.js +175 -0
  157. package/esm2015/src/save-options.js +41 -0
  158. package/esm2015/src/unattached-children-map.js +58 -0
  159. package/esm2015/src/validate.js +991 -0
  160. package/esm2015/src/validation-options.js +64 -0
  161. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +132 -0
  162. package/esm5/adapter-ajax-angularjs/adapter-core.js +49 -0
  163. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  164. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +132 -0
  165. package/esm5/adapter-ajax-fetch/adapter-core.js +49 -0
  166. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  167. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +139 -0
  168. package/esm5/adapter-ajax-httpclient/adapter-core.js +49 -0
  169. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  170. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +105 -0
  171. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  172. package/esm5/adapter-ajax-post/adapter-ajax-post.js +81 -0
  173. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  174. package/esm5/adapter-data-service-odata/adapter-core.js +49 -0
  175. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +466 -0
  176. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  177. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +98 -0
  178. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  179. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +270 -0
  180. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  181. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +242 -0
  182. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  183. package/esm5/adapter-uri-builder-json/adapter-core.js +49 -0
  184. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +38 -0
  185. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  186. package/esm5/adapter-uri-builder-odata/adapter-core.js +49 -0
  187. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +197 -0
  188. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  189. package/esm5/breeze-client.js +9 -0
  190. package/esm5/index.js +2 -0
  191. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  192. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  193. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  194. package/esm5/mixin-save-queuing/mixin-save-queuing.js +412 -0
  195. package/esm5/src/abstract-data-service-adapter.js +302 -0
  196. package/esm5/src/array.js +4 -0
  197. package/esm5/src/assert-param.js +317 -0
  198. package/esm5/src/breeze.js +85 -0
  199. package/esm5/src/complex-array.js +119 -0
  200. package/esm5/src/config.js +228 -0
  201. package/esm5/src/core.js +717 -0
  202. package/esm5/src/csdl-metadata-parser.js +385 -0
  203. package/esm5/src/data-service.js +207 -0
  204. package/esm5/src/data-type.js +451 -0
  205. package/esm5/src/default-property-interceptor.js +460 -0
  206. package/esm5/src/entity-action.js +52 -0
  207. package/esm5/src/entity-aspect.js +812 -0
  208. package/esm5/src/entity-group.js +189 -0
  209. package/esm5/src/entity-key.js +118 -0
  210. package/esm5/src/entity-manager.js +2112 -0
  211. package/esm5/src/entity-metadata.js +2144 -0
  212. package/esm5/src/entity-query.js +1023 -0
  213. package/esm5/src/entity-state.js +106 -0
  214. package/esm5/src/enum.js +144 -0
  215. package/esm5/src/event.js +259 -0
  216. package/esm5/src/interface-registry.js +43 -0
  217. package/esm5/src/key-generator.js +111 -0
  218. package/esm5/src/local-query-comparison-options.js +67 -0
  219. package/esm5/src/mapping-context.js +407 -0
  220. package/esm5/src/naming-convention.js +90 -0
  221. package/esm5/src/observable-array.js +201 -0
  222. package/esm5/src/predicate.js +1300 -0
  223. package/esm5/src/primitive-array.js +87 -0
  224. package/esm5/src/query-options.js +167 -0
  225. package/esm5/src/relation-array.js +175 -0
  226. package/esm5/src/save-options.js +43 -0
  227. package/esm5/src/unattached-children-map.js +60 -0
  228. package/esm5/src/validate.js +996 -0
  229. package/esm5/src/validation-options.js +66 -0
  230. package/fesm2015/{breeze-client-adapter-ajax-angularjs.mjs → breeze-client-adapter-ajax-angularjs.js} +1 -2
  231. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  232. package/fesm2015/{breeze-client-adapter-ajax-fetch.mjs → breeze-client-adapter-ajax-fetch.js} +3 -6
  233. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +1 -0
  234. package/fesm2015/{breeze-client-adapter-ajax-httpclient.mjs → breeze-client-adapter-ajax-httpclient.js} +1 -2
  235. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  236. package/fesm2015/{breeze-client-adapter-ajax-jquery.mjs → breeze-client-adapter-ajax-jquery.js} +2 -3
  237. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +1 -0
  238. package/{fesm2020/breeze-client-adapter-ajax-post.mjs → fesm2015/breeze-client-adapter-ajax-post.js} +1 -2
  239. package/fesm2015/breeze-client-adapter-ajax-post.js.map +1 -0
  240. package/fesm2015/{breeze-client-adapter-data-service-odata.mjs → breeze-client-adapter-data-service-odata.js} +22 -21
  241. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -0
  242. package/fesm2015/{breeze-client-adapter-data-service-webapi.mjs → breeze-client-adapter-data-service-webapi.js} +13 -14
  243. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -0
  244. package/{fesm2020/breeze-client-adapter-model-library-backing-store.mjs → fesm2015/breeze-client-adapter-model-library-backing-store.js} +13 -14
  245. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  246. package/{fesm2020/breeze-client-adapter-model-library-ko.mjs → fesm2015/breeze-client-adapter-model-library-ko.js} +13 -14
  247. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +1 -0
  248. package/{fesm2020/breeze-client-adapter-uri-builder-json.mjs → fesm2015/breeze-client-adapter-uri-builder-json.js} +8 -9
  249. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +1 -0
  250. package/{fesm2020/breeze-client-adapter-uri-builder-odata.mjs → fesm2015/breeze-client-adapter-uri-builder-odata.js} +86 -86
  251. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  252. package/fesm2015/{breeze-client-mixin-get-entity-graph.mjs → breeze-client-mixin-get-entity-graph.js} +1 -2
  253. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +1 -0
  254. package/fesm2015/{breeze-client-mixin-save-queuing.mjs → breeze-client-mixin-save-queuing.js} +1 -2
  255. package/fesm2015/breeze-client-mixin-save-queuing.js.map +1 -0
  256. package/fesm2015/{breeze-client.mjs → breeze-client.js} +417 -408
  257. package/fesm2015/breeze-client.js.map +1 -0
  258. package/{fesm2020/breeze-client-adapter-ajax-angularjs.mjs → fesm5/breeze-client-adapter-ajax-angularjs.js} +42 -42
  259. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  260. package/{fesm2020/breeze-client-adapter-ajax-fetch.mjs → fesm5/breeze-client-adapter-ajax-fetch.js} +43 -45
  261. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +1 -0
  262. package/{fesm2020/breeze-client-adapter-ajax-httpclient.mjs → fesm5/breeze-client-adapter-ajax-httpclient.js} +44 -44
  263. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  264. package/{fesm2020/breeze-client-adapter-ajax-jquery.mjs → fesm5/breeze-client-adapter-ajax-jquery.js} +19 -19
  265. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +1 -0
  266. package/{fesm2015/breeze-client-adapter-ajax-post.mjs → fesm5/breeze-client-adapter-ajax-post.js} +11 -9
  267. package/fesm5/breeze-client-adapter-ajax-post.js.map +1 -0
  268. package/{fesm2020/breeze-client-adapter-data-service-odata.mjs → fesm5/breeze-client-adapter-data-service-odata.js} +134 -127
  269. package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -0
  270. package/{fesm2020/breeze-client-adapter-data-service-webapi.mjs → fesm5/breeze-client-adapter-data-service-webapi.js} +42 -39
  271. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -0
  272. package/{fesm2015/breeze-client-adapter-model-library-backing-store.mjs → fesm5/breeze-client-adapter-model-library-backing-store.js} +64 -64
  273. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  274. package/{fesm2015/breeze-client-adapter-model-library-ko.mjs → fesm5/breeze-client-adapter-model-library-ko.js} +58 -58
  275. package/fesm5/breeze-client-adapter-model-library-ko.js.map +1 -0
  276. package/fesm5/breeze-client-adapter-uri-builder-json.js +92 -0
  277. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +1 -0
  278. package/fesm5/breeze-client-adapter-uri-builder-odata.js +250 -0
  279. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  280. package/{fesm2020/breeze-client-mixin-get-entity-graph.mjs → fesm5/breeze-client-mixin-get-entity-graph.js} +45 -46
  281. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +1 -0
  282. package/{fesm2020/breeze-client-mixin-save-queuing.mjs → fesm5/breeze-client-mixin-save-queuing.js} +126 -117
  283. package/fesm5/breeze-client-mixin-save-queuing.js.map +1 -0
  284. package/{fesm2020/breeze-client.mjs → fesm5/breeze-client.js} +3629 -3413
  285. package/fesm5/breeze-client.js.map +1 -0
  286. package/mixin-get-entity-graph/{index.d.ts → breeze-client-mixin-get-entity-graph.d.ts} +0 -1
  287. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +1 -0
  288. package/mixin-get-entity-graph/package.json +13 -0
  289. package/mixin-save-queuing/{index.d.ts → breeze-client-mixin-save-queuing.d.ts} +0 -1
  290. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +1 -0
  291. package/mixin-save-queuing/package.json +13 -0
  292. package/package.json +11 -125
  293. package/src/entity-metadata.d.ts +4 -6
  294. package/src/entity-query.d.ts +1 -1
  295. package/esm2020/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -130
  296. package/esm2020/adapter-ajax-angularjs/adapter-core.mjs +0 -49
  297. package/esm2020/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
  298. package/esm2020/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -132
  299. package/esm2020/adapter-ajax-fetch/adapter-core.mjs +0 -49
  300. package/esm2020/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
  301. package/esm2020/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -137
  302. package/esm2020/adapter-ajax-httpclient/adapter-core.mjs +0 -49
  303. package/esm2020/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
  304. package/esm2020/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -103
  305. package/esm2020/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
  306. package/esm2020/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
  307. package/esm2020/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
  308. package/esm2020/adapter-data-service-odata/adapter-core.mjs +0 -49
  309. package/esm2020/adapter-data-service-odata/adapter-data-service-odata.mjs +0 -456
  310. package/esm2020/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
  311. package/esm2020/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -93
  312. package/esm2020/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
  313. package/esm2020/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -268
  314. package/esm2020/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
  315. package/esm2020/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -240
  316. package/esm2020/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
  317. package/esm2020/adapter-uri-builder-json/adapter-core.mjs +0 -49
  318. package/esm2020/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -36
  319. package/esm2020/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
  320. package/esm2020/adapter-uri-builder-odata/adapter-core.mjs +0 -49
  321. package/esm2020/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -190
  322. package/esm2020/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
  323. package/esm2020/breeze-client.mjs +0 -5
  324. package/esm2020/index.mjs +0 -2
  325. package/esm2020/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
  326. package/esm2020/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
  327. package/esm2020/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
  328. package/esm2020/mixin-save-queuing/mixin-save-queuing.mjs +0 -400
  329. package/esm2020/src/abstract-data-service-adapter.mjs +0 -296
  330. package/esm2020/src/array.mjs +0 -4
  331. package/esm2020/src/assert-param.mjs +0 -312
  332. package/esm2020/src/breeze.mjs +0 -85
  333. package/esm2020/src/complex-array.mjs +0 -117
  334. package/esm2020/src/config.mjs +0 -223
  335. package/esm2020/src/core.mjs +0 -707
  336. package/esm2020/src/csdl-metadata-parser.mjs +0 -385
  337. package/esm2020/src/data-service.mjs +0 -203
  338. package/esm2020/src/data-type.mjs +0 -444
  339. package/esm2020/src/default-property-interceptor.mjs +0 -460
  340. package/esm2020/src/entity-action.mjs +0 -45
  341. package/esm2020/src/entity-aspect.mjs +0 -806
  342. package/esm2020/src/entity-group.mjs +0 -187
  343. package/esm2020/src/entity-key.mjs +0 -116
  344. package/esm2020/src/entity-manager.mjs +0 -2094
  345. package/esm2020/src/entity-metadata.mjs +0 -2109
  346. package/esm2020/src/entity-query.mjs +0 -996
  347. package/esm2020/src/entity-state.mjs +0 -99
  348. package/esm2020/src/enum.mjs +0 -141
  349. package/esm2020/src/event.mjs +0 -256
  350. package/esm2020/src/interface-registry.mjs +0 -41
  351. package/esm2020/src/key-generator.mjs +0 -108
  352. package/esm2020/src/local-query-comparison-options.mjs +0 -65
  353. package/esm2020/src/mapping-context.mjs +0 -405
  354. package/esm2020/src/naming-convention.mjs +0 -88
  355. package/esm2020/src/observable-array.mjs +0 -183
  356. package/esm2020/src/predicate.mjs +0 -1232
  357. package/esm2020/src/primitive-array.mjs +0 -85
  358. package/esm2020/src/query-options.mjs +0 -152
  359. package/esm2020/src/relation-array.mjs +0 -173
  360. package/esm2020/src/save-options.mjs +0 -41
  361. package/esm2020/src/unattached-children-map.mjs +0 -58
  362. package/esm2020/src/validate.mjs +0 -988
  363. package/esm2020/src/validation-options.mjs +0 -64
  364. package/fesm2015/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  365. package/fesm2015/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  366. package/fesm2015/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  367. package/fesm2015/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  368. package/fesm2015/breeze-client-adapter-ajax-post.mjs.map +0 -1
  369. package/fesm2015/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  370. package/fesm2015/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  371. package/fesm2015/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  372. package/fesm2015/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  373. package/fesm2015/breeze-client-adapter-uri-builder-json.mjs +0 -92
  374. package/fesm2015/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  375. package/fesm2015/breeze-client-adapter-uri-builder-odata.mjs +0 -246
  376. package/fesm2015/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  377. package/fesm2015/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  378. package/fesm2015/breeze-client-mixin-save-queuing.mjs.map +0 -1
  379. package/fesm2015/breeze-client.mjs.map +0 -1
  380. package/fesm2020/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  381. package/fesm2020/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  382. package/fesm2020/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  383. package/fesm2020/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  384. package/fesm2020/breeze-client-adapter-ajax-post.mjs.map +0 -1
  385. package/fesm2020/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  386. package/fesm2020/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  387. package/fesm2020/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  388. package/fesm2020/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  389. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  390. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  391. package/fesm2020/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  392. package/fesm2020/breeze-client-mixin-save-queuing.mjs.map +0 -1
  393. package/fesm2020/breeze-client.mjs.map +0 -1
  394. package/mjs/README.md +0 -17
@@ -1,456 +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
- function transformValue(prop, val) {
289
- if (prop.isUnmapped)
290
- return undefined;
291
- if (prop.dataType === breeze.DataType.DateTimeOffset) {
292
- // The datajs lib tries to treat client dateTimes that are defined as DateTimeOffset on the server differently
293
- // from other dateTimes. This fix compensates before the save.
294
- val = val && new Date(val.getTime() - (val.getTimezoneOffset() * 60000));
295
- }
296
- else if (prop.dataType.quoteJsonOData) {
297
- val = val != null ? val.toString() : val;
298
- }
299
- return val;
300
- }
301
- function createChangeRequests(saveContext, saveBundle) {
302
- let changeRequestInterceptor = saveContext.adapter._createChangeRequestInterceptor(saveContext, saveBundle);
303
- let changeRequests = [];
304
- let tempKeys = [];
305
- let contentKeys = [];
306
- let entityManager = saveContext.entityManager;
307
- let helper = entityManager.helper;
308
- let id = 0;
309
- let routePrefix = saveContext.routePrefix;
310
- saveBundle.entities.forEach(function (entity, index) {
311
- let aspect = entity.entityAspect;
312
- id = id + 1; // we are deliberately skipping id=0 because Content-ID = 0 seems to be ignored.
313
- let request = { headers: { "Content-ID": id, "DataServiceVersion": "2.0" } };
314
- contentKeys[id] = entity;
315
- if (aspect.entityState.isAdded()) {
316
- request.requestUri = routePrefix + entity.entityType.defaultResourceName;
317
- request.method = "POST";
318
- request.data = helper.unwrapInstance(entity, transformValue);
319
- tempKeys[id] = aspect.getKey();
320
- }
321
- else if (aspect.entityState.isModified()) {
322
- updateDeleteMergeRequest(request, aspect, routePrefix);
323
- request.method = "MERGE";
324
- request.data = helper.unwrapChangedValues(entity, entityManager.metadataStore, transformValue);
325
- // should be a PATCH/MERGE
326
- }
327
- else if (aspect.entityState.isDeleted()) {
328
- updateDeleteMergeRequest(request, aspect, routePrefix);
329
- request.method = "DELETE";
330
- }
331
- else {
332
- return;
333
- }
334
- request = changeRequestInterceptor.getRequest(request, entity, index);
335
- changeRequests.push(request);
336
- });
337
- saveContext.contentKeys = contentKeys;
338
- saveContext.tempKeys = tempKeys;
339
- changeRequestInterceptor.done(changeRequests);
340
- return {
341
- __batchRequests: [
342
- {
343
- __changeRequests: changeRequests
344
- }
345
- ]
346
- };
347
- }
348
- function updateDeleteMergeRequest(request, aspect, routePrefix) {
349
- let uriKey;
350
- let extraMetadata = aspect.extraMetadata;
351
- if (extraMetadata == null) {
352
- uriKey = getUriKey(aspect);
353
- aspect.extraMetadata = {
354
- uriKey: uriKey
355
- };
356
- }
357
- else {
358
- uriKey = extraMetadata.uriKey;
359
- if (extraMetadata.etag) {
360
- request.headers["If-Match"] = extraMetadata.etag;
361
- }
362
- }
363
- request.requestUri =
364
- // use routePrefix if uriKey lacks protocol (i.e., relative uri)
365
- uriKey.indexOf('//') > 0 ? uriKey : routePrefix + uriKey;
366
- }
367
- function getUriKey(aspect) {
368
- let entityType = aspect.entity.entityType;
369
- let resourceName = entityType.defaultResourceName;
370
- let kps = entityType.keyProperties;
371
- let uriKey = resourceName + "(";
372
- if (kps.length === 1) {
373
- uriKey = uriKey + fmtProperty(kps[0], aspect) + ")";
374
- }
375
- else {
376
- let delim = "";
377
- kps.forEach(function (kp) {
378
- uriKey = uriKey + delim + kp.nameOnServer + "=" + fmtProperty(kp, aspect);
379
- delim = ",";
380
- });
381
- uriKey = uriKey + ")";
382
- }
383
- return uriKey;
384
- }
385
- function fmtProperty(prop, aspect) {
386
- return prop.dataType.fmtOData(aspect.getPropertyValue(prop.name));
387
- }
388
- function createError(error, url) {
389
- // OData errors can have the message buried very deeply - and nonobviously
390
- // this code is tricky so be careful changing the response.body parsing.
391
- let result = new Error();
392
- let response = error && error.response;
393
- if (!response) {
394
- // in case DataJS returns "No handler for this data"
395
- result.message = error;
396
- result.statusText = error;
397
- return result;
398
- }
399
- result.message = response.statusText;
400
- result.statusText = response.statusText;
401
- result.status = response.statusCode;
402
- // non std
403
- if (url)
404
- result.url = url;
405
- result.body = response.body;
406
- if (response.body) {
407
- let nextErr;
408
- try {
409
- let body = JSON.parse(response.body);
410
- result.body = body;
411
- // OData v3 logic
412
- if (body['odata.error']) {
413
- body = body['odata.error'];
414
- }
415
- let msg = "";
416
- do {
417
- nextErr = body.error || body.innererror;
418
- if (!nextErr)
419
- msg = msg + getMessage(body);
420
- nextErr = nextErr || body.internalexception;
421
- body = nextErr || body;
422
- } while (nextErr);
423
- if (msg.length > 0) {
424
- result.message = msg;
425
- }
426
- }
427
- catch (e) {
428
- }
429
- }
430
- breeze.AbstractDataServiceAdapter._catchNoConnectionError(result);
431
- return result;
432
- }
433
- function getMessage(body) {
434
- let msg = body.message || "";
435
- return ((typeof (msg) === "string") ? msg : msg.value) + "; ";
436
- }
437
- breeze.config.registerAdapter("dataService", DataServiceODataAdapter);
438
- let webApiODataCtor = function () {
439
- this.name = "webApiOData";
440
- };
441
- breeze.core.extend(webApiODataCtor.prototype, DataServiceODataAdapter.prototype);
442
- breeze.config.registerAdapter("dataService", webApiODataCtor);
443
- // OData 4 adapter
444
- let webApiOData4Ctor = function () {
445
- this.name = "webApiOData4";
446
- };
447
- breeze.core.extend(webApiOData4Ctor.prototype, webApiODataCtor.prototype);
448
- webApiOData4Ctor.prototype.initialize = function () {
449
- // Aargh... they moved the cheese.
450
- let datajs = core.requireLib("datajs", "Needed to support remote OData v4 services");
451
- OData = datajs.V4.oData;
452
- OData.json.jsonHandler.recognizeDates = true;
453
- };
454
- webApiOData4Ctor.prototype.headers = { "OData-Version": "4.0" };
455
- breeze.config.registerAdapter("dataService", webApiOData4Ctor);
456
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlci1kYXRhLXNlcnZpY2Utb2RhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQVl2QixjQUFjO0FBQ2QsTUFBTSxPQUFPLHVCQUF3QixTQUFRLE1BQU0sQ0FBQywwQkFBMEI7SUFRNUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQU5WLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsc0ZBQXNGO1FBQ3RGLFlBQU8sR0FBRyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDO1FBa04xQyx1QkFBa0IsR0FBOEIsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUM7WUFDNUUsSUFBSSxFQUFFLGVBQWU7WUFFckIsU0FBUyxFQUFFLFVBQVUsSUFBUyxFQUFFLGNBQXFDLEVBQUUsV0FBK0I7Z0JBQ3BHLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxJQUFJLElBQUksSUFBSTtvQkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDL0IsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO29CQUNwQixrRkFBa0Y7b0JBQ2xGLElBQUksY0FBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzRSxJQUFJLEVBQUUsR0FBRyxjQUFjLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFD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c0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYnJlZXplIGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBhcHBlbmRRdWVyeVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJy4vYWRhcHRlci1jb3JlJztcclxuXHJcbmxldCBjb3JlID0gYnJlZXplLmNvcmU7XHJcblxyXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueTtcclxuZGVjbGFyZSB2YXIgZG9jdW1lbnQ6IGFueTtcclxuZGVjbGFyZSB2YXIgdXJsOiBhbnk7IC8vIG5lZWRlZCB0byBhY2Nlc3Mgbm9kZSdzIHVybC5wYXJzZVxyXG5kZWNsYXJlIHZhciBPRGF0YTogYW55O1xyXG5cclxuaW50ZXJmYWNlIE9EYXRhU2F2ZUNvbnRleHQgZXh0ZW5kcyBicmVlemUuU2F2ZUNvbnRleHQge1xyXG4gIHRlbXBLZXlzOiBicmVlemUuRW50aXR5S2V5W107XHJcbiAgY29udGVudEtleXM6IGJyZWV6ZS5FbnRpdHlbXTtcclxufVxyXG5cclxuLyoqIEBoaWRkZW4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyIGV4dGVuZHMgYnJlZXplLkFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcmVsYXRpdmVVcmw6IGJvb2xlYW4gfCAoKGRzOiBicmVlemUuRGF0YVNlcnZpY2UsIHVybDogc3RyaW5nKSA9PiBzdHJpbmcpO1xyXG4gIC8vIF9jYXRjaE5vQ29ubmVjdGlvbkVycm9yID0gYWJzdHJhY3REc2FQcm90by5fY2F0Y2hOb0Nvbm5lY3Rpb25FcnJvcjtcclxuICAvLyBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IgPSBhYnN0cmFjdERzYVByb3RvLmNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcjtcclxuICAvLyBfY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yID0gYWJzdHJhY3REc2FQcm90by5fY3JlYXRlQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG4gIGhlYWRlcnMgPSB7IFwiRGF0YVNlcnZpY2VWZXJzaW9uXCI6IFwiMi4wXCIgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gXCJPRGF0YVwiO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlZ2lzdGVyKGNvbmZpZz86IGJyZWV6ZS5CcmVlemVDb25maWcpIHtcclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCBicmVlemUuY29uZmlnO1xyXG4gICAgY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyKTtcclxuICAgIHJldHVybiBjb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZShcImRhdGFTZXJ2aWNlXCIsIFwiT0RhdGFcIiwgdHJ1ZSkgYXMgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXI7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKCkge1xyXG4gICAgT0RhdGEgPSBjb3JlLnJlcXVpcmVMaWIoXCJPRGF0YVwiLCBcIk5lZWRlZCB0byBzdXBwb3J0IHJlbW90ZSBPRGF0YSBzZXJ2aWNlc1wiKTtcclxuICAgIE9EYXRhLmpzb25IYW5kbGVyLnJlY29nbml6ZURhdGVzID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvLyBBYnNvbHV0ZSBVUkwgaXMgdGhlIGRlZmF1bHQgYXMgb2YgQnJlZXplIDEuNS41LiAgXHJcbiAgLy8gVG8gdXNlIHJlbGF0aXZlIFVSTCAobGlrZSBwcmUtMS41LjUpLCBhZGQgYWRhcHRlckluc3RhbmNlLnJlbGF0aXZlVXJsID0gdHJ1ZTpcclxuICAvL1xyXG4gIC8vICAgICBsZXQgZHMgPSBicmVlemUuY29uZmlnLmluaXRpYWxpemVBZGFwdGVySW5zdGFuY2UoXCJkYXRhU2VydmljZVwiLCBcIndlYkFwaU9EYXRhXCIpO1xyXG4gIC8vICAgICBkcy5yZWxhdGl2ZVVybCA9IHRydWU7IFxyXG4gIC8vXHJcbiAgLy8gVG8gdXNlIGN1c3RvbSB1cmwgY29uc3RydWN0aW9uLCBhZGQgYWRhcHRlckluc3RhbmNlLnJlbGF0aXZlVXJsID0gbXlmdW5jdGlvbihkYXRhU2VydmljZSwgdXJsKTpcclxuICAvL1xyXG4gIC8vICAgICBsZXQgZHMgPSBicmVlemUuY29uZmlnLmluaXRpYWxpemVBZGFwdGVySW5zdGFuY2UoXCJkYXRhU2VydmljZVwiLCBcIndlYkFwaU9EYXRhXCIpO1xyXG4gIC8vICAgICBkcy5yZWxhdGl2ZVVybCA9IGZ1bmN0aW9uKGRhdGFTZXJ2aWNlLCB1cmwpIHtcclxuICAvLyAgICAgICAgcmV0dXJuIHNvbWVob3dDb252ZXJ0KHVybCk7XHJcbiAgLy8gICAgIH1cclxuICAvL1xyXG5cclxuICBmZXRjaE1ldGFkYXRhKG1ldGFkYXRhU3RvcmU6IGJyZWV6ZS5NZXRhZGF0YVN0b3JlLCBkYXRhU2VydmljZTogYnJlZXplLkRhdGFTZXJ2aWNlKSB7XHJcbiAgICBsZXQgc2VydmljZU5hbWUgPSBkYXRhU2VydmljZS5zZXJ2aWNlTmFtZTtcclxuXHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5yZWxhdGl2ZVVybCA9PT0gdHJ1ZSkge1xyXG4gICAgICB1cmwgPSBkYXRhU2VydmljZS5xdWFsaWZ5VXJsKCckbWV0YWRhdGEnKTtcclxuICAgIH0gZWxzZSBpZiAoY29yZS5pc0Z1bmN0aW9uKHRoaXMucmVsYXRpdmVVcmwpKSB7XHJcbiAgICAgIHVybCA9ICh0aGlzLnJlbGF0aXZlVXJsIGFzIGFueSkoZGF0YVNlcnZpY2UsICckbWV0YWRhdGEnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVybCA9IHRoaXMuZ2V0QWJzb2x1dGVVcmwoZGF0YVNlcnZpY2UsICckbWV0YWRhdGEnKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWhlYWRlcnMgPSBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKTtcclxuICAgIChtaGVhZGVycyBhcyBhbnkpLkFjY2VwdCA9ICdhcHBsaWNhdGlvbi8qOyBvZGF0YS5tZXRhZGF0YT1mdWxsJztcclxuXHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gT0RhdGEucmVhZCh1cmwsXHJcbiAgICAgIE9EYXRhLnJlYWQoe1xyXG4gICAgICAgIHJlcXVlc3RVcmk6IHVybCxcclxuICAgICAgICAvLyBoZWFkZXJzOiB7IFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwifVxyXG4gICAgICAgIGhlYWRlcnM6IG1oZWFkZXJzXHJcbiAgICAgIH0sXHJcbiAgICAgICAgZnVuY3Rpb24gKGRhdGE6IGFueSkge1xyXG4gICAgICAgICAgLy8gZGF0YS5kYXRhU2VydmljZXMuc2NoZW1hIGlzIGFuIGFycmF5IG9mIHNjaGVtYXMuIHdpdGggcHJvcGVydGllcyBvZlxyXG4gICAgICAgICAgLy8gZW50aXR5Q29udGFpbmVyW10sIGFzc29jaWF0aW9uW10sIGVudGl0eVR5cGVbXSwgYW5kIG5hbWVzcGFjZS5cclxuICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5kYXRhU2VydmljZXMpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yID0gbmV3IEVycm9yKFwiTWV0YWRhdGEgcXVlcnkgZmFpbGVkIGZvcjogXCIgKyB1cmwpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBjc2RsTWV0YWRhdGEgPSBkYXRhLmRhdGFTZXJ2aWNlcztcclxuXHJcbiAgICAgICAgICAvLyBtaWdodCBoYXZlIGJlZW4gZmV0Y2hlZCBieSBhbm90aGVyIHF1ZXJ5XHJcbiAgICAgICAgICBpZiAoIW1ldGFkYXRhU3RvcmUuaGFzTWV0YWRhdGFGb3Ioc2VydmljZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgbWV0YWRhdGFTdG9yZS5pbXBvcnRNZXRhZGF0YShjc2RsTWV0YWRhdGEpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJNZXRhZGF0YSBxdWVyeSBmYWlsZWQgZm9yIFwiICsgdXJsICsgXCI7IFVuYWJsZSB0byBwcm9jZXNzIHJldHVybmVkIG1ldGFkYXRhOiBcIiArIGUubWVzc2FnZSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZXRhZGF0YVN0b3JlLmFkZERhdGFTZXJ2aWNlKGRhdGFTZXJ2aWNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShjc2RsTWV0YWRhdGEpO1xyXG5cclxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgbGV0IGVyciA9IGNyZWF0ZUVycm9yKGVycm9yLCB1cmwpO1xyXG4gICAgICAgICAgZXJyLm1lc3NhZ2UgPSBcIk1ldGFkYXRhIHF1ZXJ5IGZhaWxlZCBmb3I6IFwiICsgdXJsICsgXCI7IFwiICsgKGVyci5tZXNzYWdlIHx8IFwiXCIpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgT0RhdGEubWV0YWRhdGFIYW5kbGVyXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZXhlY3V0ZVF1ZXJ5KG1hcHBpbmdDb250ZXh0OiBicmVlemUuTWFwcGluZ0NvbnRleHQpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIGlmICh0aGlzLnJlbGF0aXZlVXJsID09PSB0cnVlKSB7XHJcbiAgICAgIHVybCA9IG1hcHBpbmdDb250ZXh0LmdldFVybCgpO1xyXG4gICAgfSBlbHNlIGlmIChjb3JlLmlzRnVuY3Rpb24odGhpcy5yZWxhdGl2ZVVybCkpIHtcclxuICAgICAgdXJsID0gKHRoaXMucmVsYXRpdmVVcmwgYXMgYW55KShtYXBwaW5nQ29udGV4dC5kYXRhU2VydmljZSwgbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gdGhpcy5nZXRBYnNvbHV0ZVVybChtYXBwaW5nQ29udGV4dC5kYXRhU2VydmljZSwgbWFwcGluZ0NvbnRleHQuZ2V0VXJsKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBxdWVyeSBwYXJhbXMgaWYgLndpdGhQYXJhbWV0ZXJzIHdhcyB1c2VkXHJcbiAgICBsZXQgcXVlcnkgPSBtYXBwaW5nQ29udGV4dC5xdWVyeSBhcyBicmVlemUuRW50aXR5UXVlcnk7XHJcbiAgICBpZiAoIWNvcmUuaXNFbXB0eShxdWVyeS5wYXJhbWV0ZXJzKSkge1xyXG4gICAgICBsZXQgcGFyYW1TdHJpbmcgPSB0b1F1ZXJ5U3RyaW5nKHF1ZXJ5LnBhcmFtZXRlcnMpO1xyXG4gICAgICB1cmwgPSBhcHBlbmRRdWVyeVN0cmluZ1BhcmFtZXRlcih1cmwsIHBhcmFtU3RyaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlPGJyZWV6ZS5RdWVyeVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBPRGF0YS5yZWFkKHtcclxuICAgICAgICByZXF1ZXN0VXJpOiB1cmwsXHJcbiAgICAgICAgaGVhZGVyczogY29yZS5leHRlbmQoe30sIHRoaXMuaGVhZGVycylcclxuICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZGF0YTogYW55LCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgICBsZXQgaW5saW5lQ291bnQ6IGFueTtcclxuICAgICAgICAgIGlmIChkYXRhLl9fY291bnQpIHtcclxuICAgICAgICAgICAgLy8gT0RhdGEgY2FuIHJldHVybiBkYXRhLl9fY291bnQgYXMgYSBzdHJpbmdcclxuICAgICAgICAgICAgaW5saW5lQ291bnQgPSBwYXJzZUludChkYXRhLl9fY291bnQsIDEwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIE9kYXRhIHJldHVybnMgZGlmZmVyZW50IHJlc3VsdCBzdHJ1Y3R1cmUgd2hlbiBpdCByZXR1cm5zIG11bHRpcGxlIGVudGl0aWVzIChkYXRhLnJlc3VsdHMpIHZzIHNpbmdsZSBlbnRpdHkgKGRhdGEgZGlyZWN0bHkpLlxyXG4gICAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3Lm9kYXRhLm9yZy9kb2N1bWVudGF0aW9uL29kYXRhLXZlcnNpb24tMi0wL2pzb24tZm9ybWF0LyNSZXByZXNlbnRpbmdDb2xsZWN0aW9uc09mRW50cmllc1xyXG4gICAgICAgICAgLy8gYW5kIGh0dHA6Ly93d3cub2RhdGEub3JnL2RvY3VtZW50YXRpb24vb2RhdGEtdmVyc2lvbi0yLTAvanNvbi1mb3JtYXQvI1JlcHJlc2VudGluZ0VudHJpZXNcclxuICAgICAgICAgIGxldCByZXN1bHRzOiBhbnk7XHJcbiAgICAgICAgICBpZiAoZGF0YS5yZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSBkYXRhLnJlc3VsdHM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHRzID0gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHsgcmVzdWx0czogcmVzdWx0cywgaW5saW5lQ291bnQ6IGlubGluZUNvdW50LCBodHRwUmVzcG9uc2U6IHJlc3BvbnNlLCBxdWVyeTogcXVlcnkgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihlcnJvciwgdXJsKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuICB9XHJcblxyXG5cclxuICBzYXZlQ2hhbmdlcyhvZGF0YVNhdmVDb250ZXh0OiBicmVlemUuU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IGJyZWV6ZS5TYXZlQnVuZGxlKTogUHJvbWlzZTxicmVlemUuU2F2ZVJlc3VsdD4ge1xyXG4gICAgbGV0IGFkYXB0ZXIgPSBvZGF0YVNhdmVDb250ZXh0LmFkYXB0ZXIgPSB0aGlzO1xyXG4gICAgbGV0IHNhdmVDb250ZXh0ID0gb2RhdGFTYXZlQ29udGV4dCBhcyBPRGF0YVNhdmVDb250ZXh0O1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMucmVsYXRpdmVVcmwgPT09IHRydWUpIHtcclxuICAgICAgc2F2ZUNvbnRleHQucm91dGVQcmVmaXggPSBhZGFwdGVyLmdldFJvdXRlUHJlZml4KHNhdmVDb250ZXh0LmRhdGFTZXJ2aWNlKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UucXVhbGlmeVVybChcIiRiYXRjaFwiKTtcclxuICAgIH0gZWxzZSBpZiAoY29yZS5pc0Z1bmN0aW9uKGFkYXB0ZXIucmVsYXRpdmVVcmwpKSB7XHJcbiAgICAgIHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ID0gKGFkYXB0ZXIucmVsYXRpdmVVcmwgYXMgRnVuY3Rpb24pKHNhdmVDb250ZXh0LmRhdGFTZXJ2aWNlLCAnJyk7XHJcbiAgICAgIHVybCA9IHNhdmVDb250ZXh0LnJvdXRlUHJlZml4ICsgJyRiYXRjaCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzYXZlQ29udGV4dC5yb3V0ZVByZWZpeCA9IGFkYXB0ZXIuZ2V0QWJzb2x1dGVVcmwoc2F2ZUNvbnRleHQuZGF0YVNlcnZpY2UsICcnKTtcclxuICAgICAgdXJsID0gc2F2ZUNvbnRleHQucm91dGVQcmVmaXggKyAnJGJhdGNoJztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjcmVhdGVDaGFuZ2VSZXF1ZXN0cyhzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgICBsZXQgdGVtcEtleXMgPSBzYXZlQ29udGV4dC50ZW1wS2V5cztcclxuICAgIGxldCBjb250ZW50S2V5cyA9IHNhdmVDb250ZXh0LmNvbnRlbnRLZXlzO1xyXG4gICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxicmVlemUuU2F2ZVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBPRGF0YS5yZXF1ZXN0KHtcclxuICAgICAgICBoZWFkZXJzOiBjb3JlLmV4dGVuZCh7fSwgdGhpcy5oZWFkZXJzKSxcclxuICAgICAgICByZXF1ZXN0VXJpOiB1cmwsXHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBkYXRhOiByZXF1ZXN0RGF0YVxyXG4gICAgICB9LCBmdW5jdGlvbiAoZGF0YTogYW55LCByZXNwb25zZTogYW55KSB7XHJcbiAgICAgICAgbGV0IGVudGl0aWVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGxldCBrZXlNYXBwaW5nczogYnJlZXplLktleU1hcHBpbmdbXSA9IFtdO1xyXG4gICAgICAgIGxldCBzYXZlUmVzdWx0OiBicmVlemUuU2F2ZVJlc3VsdCA9IHsgZW50aXRpZXM6IGVudGl0aWVzLCBrZXlNYXBwaW5nczoga2V5TWFwcGluZ3MgfTtcclxuICAgICAgICBkYXRhLl9fYmF0Y2hSZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoYnI6IGFueSkge1xyXG4gICAgICAgICAgYnIuX19jaGFuZ2VSZXNwb25zZXMuZm9yRWFjaChmdW5jdGlvbiAoY3I6IGFueSkge1xyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBjci5yZXNwb25zZSB8fCBjcjtcclxuICAgICAgICAgICAgbGV0IHN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xyXG4gICAgICAgICAgICBpZiAoKCFzdGF0dXNDb2RlKSB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xyXG4gICAgICAgICAgICAgIHJlamVjdChjcmVhdGVFcnJvcihjciwgdXJsKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgY29udGVudElkID0gY3IuaGVhZGVyc1tcIkNvbnRlbnQtSURcIl07XHJcbiAgICAgICAgICAgIC8vIE9saW5nbyBzZW5kcyBkaWZmZXJlbnQgY2FzZSBvZiAnSUQnIGZvciB0aGUgaGVhZGVyIG5hbWUuXHJcbiAgICAgICAgICAgIGlmICghY29udGVudElkKSB7XHJcbiAgICAgICAgICAgICAgY29udGVudElkID0gY3IuaGVhZGVyc1tcIkNvbnRlbnQtSWRcIl07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCByYXdFbnRpdHkgPSBjci5kYXRhO1xyXG4gICAgICAgICAgICBpZiAocmF3RW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRlbXBLZXkgPSB0ZW1wS2V5c1tjb250ZW50SWRdO1xyXG4gICAgICAgICAgICAgIGlmICh0ZW1wS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW50aXR5VHlwZSA9IHRlbXBLZXkuZW50aXR5VHlwZTtcclxuICAgICAgICAgICAgICAgIGlmIChlbnRpdHlUeXBlLmF1dG9HZW5lcmF0ZWRLZXlUeXBlICE9PSBicmVlemUuQXV0b0dlbmVyYXRlZEtleVR5cGUuTm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdGVtcFZhbHVlID0gdGVtcEtleS52YWx1ZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgIGxldCByZWFsS2V5ID0gZW50aXR5VHlwZS5nZXRFbnRpdHlLZXlGcm9tUmF3RW50aXR5KHJhd0VudGl0eSwgYnJlZXplLkRhdGFQcm9wZXJ0eS5nZXRSYXdWYWx1ZUZyb21TZXJ2ZXIpO1xyXG4gICAgICAgICAgICAgICAgICBsZXQga2V5TWFwcGluZyA9IHsgZW50aXR5VHlwZU5hbWU6IGVudGl0eVR5cGUubmFtZSwgdGVtcFZhbHVlOiB0ZW1wVmFsdWUsIHJlYWxWYWx1ZTogcmVhbEtleS52YWx1ZXNbMF0gfTtcclxuICAgICAgICAgICAgICAgICAga2V5TWFwcGluZ3MucHVzaChrZXlNYXBwaW5nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZW50aXRpZXMucHVzaChyYXdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxldCBvcmlnRW50aXR5ID0gY29udGVudEtleXNbY29udGVudElkXTtcclxuICAgICAgICAgICAgICBlbnRpdGllcy5wdXNoKG9yaWdFbnRpdHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzb2x2ZShzYXZlUmVzdWx0KTtcclxuICAgICAgfSwgZnVuY3Rpb24gKGVycjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihlcnIsIHVybCkpO1xyXG4gICAgICB9LCBPRGF0YS5iYXRjaEhhbmRsZXIpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcHJvbWlzZTtcclxuXHJcbiAgfVxyXG5cclxuICBqc29uUmVzdWx0c0FkYXB0ZXI6IGJyZWV6ZS5Kc29uUmVzdWx0c0FkYXB0ZXIgPSBuZXcgYnJlZXplLkpzb25SZXN1bHRzQWRhcHRlcih7XHJcbiAgICBuYW1lOiBcIk9EYXRhX2RlZmF1bHRcIixcclxuXHJcbiAgICB2aXNpdE5vZGU6IGZ1bmN0aW9uIChub2RlOiBhbnksIG1hcHBpbmdDb250ZXh0OiBicmVlemUuTWFwcGluZ0NvbnRleHQsIG5vZGVDb250ZXh0OiBicmVlemUuTm9kZUNvbnRleHQpIHtcclxuICAgICAgbGV0IHJlc3VsdDogYW55ID0ge307XHJcbiAgICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIGxldCBtZXRhZGF0YSA9IG5vZGUuX19tZXRhZGF0YTtcclxuICAgICAgaWYgKG1ldGFkYXRhICE9IG51bGwpIHtcclxuICAgICAgICAvLyBUT0RPOiBtYXkgYmUgYWJsZSB0byBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnQgYnkgY2FjaGluZyBvZiB0aGUgcHJldmlvdXMgdmFsdWUuXHJcbiAgICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gYnJlZXplLk1ldGFkYXRhU3RvcmUubm9ybWFsaXplVHlwZU5hbWUobWV0YWRhdGEudHlwZSk7XHJcbiAgICAgICAgbGV0IGV0ID0gZW50aXR5VHlwZU5hbWUgJiYgbWFwcGluZ0NvbnRleHQuZW50aXR5TWFuYWdlci5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoZW50aXR5VHlwZU5hbWUsIHRydWUpO1xyXG4gICAgICAgIC8vIE9EYXRhIHJlc3BvbnNlIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYSBwcm9qZWN0aW9uIGZyb20gYSB3aG9sZSBlbnRpdHkuXHJcbiAgICAgICAgLy8gV2UnbGwgYXNzdW1lIHRoYXQgd2hvbGUtZW50aXR5IGRhdGEgd291bGQgaGF2ZSBhdCBsZWFzdCBhcyBtYW55IHByb3BlcnRpZXMgICg8PSlcclxuICAgICAgICAvLyBhcyB0aGUgRW50aXR5VHlwZSBoYXMgbWFwcGVkIHByb3BlcnRpZXMgb24gdGhlIGJhc2lzIHRoYXRcclxuICAgICAgICAvLyBtb3N0IHByb2plY3Rpb25zIHJlbW92ZSBwcm9wZXJ0aWVzIHJhdGhlciB0aGFuIGFkZCB0aGVtLlxyXG4gICAgICAgIC8vIElmIG5vdCwgYXNzdW1lIGl0J3MgYSBwcm9qZWN0aW9uIGFuZCBkbyBOT1QgdHJlYXQgYXMgYW4gZW50aXR5XHJcbiAgICAgICAgaWYgKGV0ICYmIGV0Ll9tYXBwZWRQcm9wZXJ0aWVzQ291bnQgPD0gT2JqZWN0LmtleXMobm9kZSkubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgLy8gaWYgKGV0ICYmIGV0Ll9tYXBwZWRQcm9wZXJ0aWVzQ291bnQgPT09IE9iamVjdC5rZXlzKG5vZGUpLmxlbmd0aCAtIDEpIHsgLy8gT0xEXHJcbiAgICAgICAgICByZXN1bHQuZW50aXR5VHlwZSA9IGV0O1xyXG4gICAgICAgICAgbGV0IHVyaUtleSA9IG1ldGFkYXRhLnVyaSB8fCBtZXRhZGF0YS5pZDtcclxuICAgICAgICAgIGlmICh1cmlLZXkpIHtcclxuICAgICAgICAgICAgLy8gU3RyaXAgYmFzZVVyaSB0byBtYWtlIHVyaUtleSBhIHJlbGF0aXZlIHVyaVxyXG4gICAgICAgICAgICAvLyBUb2RvOiB3aHkgaXMgdGhpcyBuZWNlc3Nhcnkgd2hlbiBhYnNvbHV0ZSB3b3JrcyBmb3IgZXZlcnkgT0RhdGEgc291cmNlIHRlc3RlZD9cclxuICAgICAgICAgICAgbGV0IHJlID0gbmV3IFJlZ0V4cCgnXicgKyBtYXBwaW5nQ29udGV4dC5kYXRhU2VydmljZS5zZXJ2aWNlTmFtZSwgJ2knKTtcclxuICAgICAgICAgICAgdXJpS2V5ID0gdXJpS2V5LnJlcGxhY2UocmUsICcnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdC5leHRyYU1ldGFkYXRhID0ge1xyXG4gICAgICAgICAgICB1cmlLZXk6IHVyaUtleSxcclxuICAgICAgICAgICAgZXRhZzogbWV0YWRhdGEuZXRhZ1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gT0RhdGEgdjMgLSBwcm9qZWN0aW9uIGFycmF5cyB3aWxsIGJlIGVuY2xvc2VkIGluIGEgcmVzdWx0cyBhcnJheVxyXG4gICAgICBpZiAobm9kZS5yZXN1bHRzKSB7XHJcbiAgICAgICAgcmVzdWx0Lm5vZGUgPSBub2RlLnJlc3VsdHM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBwcm9wZXJ0eU5hbWUgPSBub2RlQ29udGV4dC5wcm9wZXJ0eU5hbWU7XHJcbiAgICAgIHJlc3VsdC5pZ25vcmUgPSBub2RlLl9fZGVmZXJyZWQgIT0gbnVsbCB8fCBwcm9wZXJ0eU5hbWUgPT09IFwiX19tZXRhZGF0YVwiIHx8XHJcbiAgICAgICAgLy8gRW50aXR5S2V5IHByb3BlcnRpZXMgY2FuIGJlIHByb2R1Y2VkIGJ5IEVETVggbW9kZWxzXHJcbiAgICAgICAgKHByb3BlcnR5TmFtZSA9PT0gXCJFbnRpdHlLZXlcIiAmJiBub2RlLiR0eXBlICYmIGNvcmUuc3RyaW5nU3RhcnRzV2l0aChub2RlLiR0eXBlLCBcIlN5c3RlbS5EYXRhXCIpKTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIGdldEFic29sdXRlVXJsKGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UsIHVybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgc2VydmljZU5hbWUgPSBkYXRhU2VydmljZS5xdWFsaWZ5VXJsKCcnKTtcclxuICAgIC8vIG9ubHkgcHJlZml4IHdpdGggc2VydmljZU5hbWUgaWYgbm90IGFscmVhZHkgb24gdGhlIHVybFxyXG4gICAgbGV0IGJhc2UgPSAoY29yZS5zdHJpbmdTdGFydHNXaXRoKHVybCwgc2VydmljZU5hbWUpKSA/ICcnIDogc2VydmljZU5hbWU7XHJcbiAgICAvLyBJZiBubyBwcm90b2NvbCwgdHVybiBiYXNlIGludG8gYW4gYWJzb2x1dGUgVVJJXHJcbiAgICBpZiAod2luZG93ICYmIHNlcnZpY2VOYW1lLmluZGV4T2YoJy8vJykgPCAwKSB7XHJcbiAgICAgIC8vIG5vIHByb3RvY29sOyBtYWtlIGl0IGFic29sdXRlXHJcbiAgICAgIGJhc2UgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgK1xyXG4gICAgICAgIChjb3JlLnN0cmluZ1N0YXJ0c1dpdGgoc2VydmljZU5hbWUsICcvJykgPyAnJyA6ICcvJykgK1xyXG4gICAgICAgIGJhc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmFzZSArIHVybDtcclxuICB9XHJcblxyXG4gIGdldFJvdXRlUHJlZml4KGRhdGFTZXJ2aWNlOiBicmVlemUuRGF0YVNlcnZpY2UpIHtcclxuICAgIC8vIEdldCB0aGUgcm91dGVQcmVmaXggZnJvbSBhIFdlYiBBUEkgT0RhdGEgc2VydmljZSBuYW1lLlxyXG4gICAgLy8gVGhlIHJvdXRlUHJlZml4IGlzIHByZXN1bWVkIHRvIGJlIHRoZSBwYXRobmFtZSB3aXRoaW4gdGhlIGRhdGFTZXJ2aWNlLnNlcnZpY2VOYW1lXHJcbiAgICAvLyBFeGFtcGxlcyBvZiBzZXJ2aWNlbmFtZSAtPiByb3V0ZVByZWZpeDpcclxuICAgIC8vICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6NTU4MDIvb2RhdGEvJyAtPiAnb2RhdGEvJ1xyXG4gICAgLy8gICAnaHR0cDovLzE5OC4xNTQuMTIxLjc1L3NlcnZpY2Uvb2RhdGEvJyAtPiAnc2VydmljZS9vZGF0YS8nXHJcbiAgICBsZXQgcGFyc2VyOiBhbnk7XHJcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JykgeyAvLyBicm93c2VyXHJcbiAgICAgIHBhcnNlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgcGFyc2VyLmhyZWYgPSBkYXRhU2VydmljZS5zZXJ2aWNlTmFtZTtcclxuICAgIH0gZWxzZSB7IC8vIG5vZGVcclxuICAgICAgLy8gVE9ETzogaG93IHRvIGJlc3QgaGFuZGxlIHRoaXNcclxuICAgICAgLy8gYXNzdW1lcyBleGlzdGVuY2Ugb2Ygbm9kZSdzIHVybC5wYXJzZSBtZXRob2QuXHJcbiAgICAgIHBhcnNlciA9IHVybC5wYXJzZShkYXRhU2VydmljZS5zZXJ2aWNlTmFtZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgcHJlZml4ID0gcGFyc2VyLnBhdGhuYW1lO1xyXG4gICAgaWYgKHByZWZpeFswXSA9PT0gJy8nKSB7XHJcbiAgICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHIoMSk7XHJcbiAgICB9IC8vIGRyb3AgbGVhZGluZyAnLycgIChhbGwgYnV0IElFKVxyXG4gICAgaWYgKHByZWZpeC5zdWJzdHIoLTEpICE9PSAnLycpIHtcclxuICAgICAgcHJlZml4ICs9ICcvJztcclxuICAgIH0gICAgICAvLyBlbnN1cmUgdHJhaWxpbmcgJy8nXHJcbiAgICByZXR1cm4gcHJlZml4O1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8vIGNydWRlIHNlcmlhbGl6ZXIuICBEb2Vzbid0IHJlY3Vyc2VcclxuZnVuY3Rpb24gdG9RdWVyeVN0cmluZyhvYmo6IE9iamVjdCkge1xyXG4gIGxldCBwYXJ0czogc3RyaW5nW10gPSBbXTtcclxuICBmb3IgKGxldCBpIGluIG9iaikge1xyXG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICBwYXJ0cy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpKSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtpXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcGFydHMuam9pbihcIiZcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyYW5zZm9ybVZhbHVlKHByb3A6IGJyZWV6ZS5EYXRhUHJvcGVydHksIHZhbDogYW55KSB7XHJcbiAgaWYgKHByb3AuaXNVbm1hcHBlZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICBpZiAocHJvcC5kYXRhVHlwZSA9PT0gYnJlZXplLkRhdGFUeXBlLkRhdGVUaW1lT2Zmc2V0KSB7XHJcbiAgICAvLyBUaGUgZGF0YWpzIGxpYiB0cmllcyB0byB0cmVhdCBjbGllbnQgZGF0ZVRpbWVzIHRoYXQgYXJlIGRlZmluZWQgYXMgRGF0ZVRpbWVPZmZzZXQgb24gdGhlIHNlcnZlciBkaWZmZXJlbnRseVxyXG4gICAgLy8gZnJvbSBvdGhlciBkYXRlVGltZXMuIFRoaXMgZml4IGNvbXBlbnNhdGVzIGJlZm9yZSB0aGUgc2F2ZS5cclxuICAgIHZhbCA9IHZhbCAmJiBuZXcgRGF0ZSh2YWwuZ2V0VGltZSgpIC0gKHZhbC5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcclxuICB9IGVsc2UgaWYgKChwcm9wLmRhdGFUeXBlIGFzIGJyZWV6ZS5EYXRhVHlwZSkucXVvdGVKc29uT0RhdGEpIHtcclxuICAgIHZhbCA9IHZhbCAhPSBudWxsID8gdmFsLnRvU3RyaW5nKCkgOiB2YWw7XHJcbiAgfVxyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUNoYW5nZVJlcXVlc3RzKHNhdmVDb250ZXh0OiBPRGF0YVNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBicmVlemUuU2F2ZUJ1bmRsZSkge1xyXG4gIGxldCBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IgPSAoc2F2ZUNvbnRleHQuYWRhcHRlciBhcyBEYXRhU2VydmljZU9EYXRhQWRhcHRlcikuX2NyZWF0ZUNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcihzYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZSk7XHJcbiAgbGV0IGNoYW5nZVJlcXVlc3RzOiBhbnlbXSA9IFtdO1xyXG4gIGxldCB0ZW1wS2V5czogYnJlZXplLkVudGl0eUtleVtdID0gW107XHJcbiAgbGV0IGNvbnRlbnRLZXlzOiBicmVlemUuRW50aXR5W10gPSBbXTtcclxuICBsZXQgZW50aXR5TWFuYWdlciA9IHNhdmVDb250ZXh0LmVudGl0eU1hbmFnZXI7XHJcbiAgbGV0IGhlbHBlciA9IGVudGl0eU1hbmFnZXIuaGVscGVyO1xyXG4gIGxldCBpZCA9IDA7XHJcbiAgbGV0IHJvdXRlUHJlZml4ID0gc2F2ZUNvbnRleHQucm91dGVQcmVmaXg7XHJcblxyXG4gIHNhdmVCdW5kbGUuZW50aXRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50aXR5LCBpbmRleCkge1xyXG4gICAgbGV0IGFzcGVjdCA9IGVudGl0eS5lbnRpdHlBc3BlY3Q7XHJcbiAgICBpZCA9IGlkICsgMTsgLy8gd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBpZD0wIGJlY2F1c2UgQ29udGVudC1JRCA9IDAgc2VlbXMgdG8gYmUgaWdub3JlZC5cclxuICAgIGxldCByZXF1ZXN0ID0geyBoZWFkZXJzOiB7IFwiQ29udGVudC1JRFwiOiBpZCwgXCJEYXRhU2VydmljZVZlcnNpb25cIjogXCIyLjBcIiB9IH0gYXMgYW55O1xyXG4gICAgY29udGVudEtleXNbaWRdID0gZW50aXR5O1xyXG4gICAgaWYgKGFzcGVjdC5lbnRpdHlTdGF0ZS5pc0FkZGVkKCkpIHtcclxuICAgICAgcmVxdWVzdC5yZXF1ZXN0VXJpID0gcm91dGVQcmVmaXggKyBlbnRpdHkuZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lO1xyXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IFwiUE9TVFwiO1xyXG4gICAgICByZXF1ZXN0LmRhdGEgPSBoZWxwZXIudW53cmFwSW5zdGFuY2UoZW50aXR5LCB0cmFuc2Zvcm1WYWx1ZSk7XHJcbiAgICAgIHRlbXBLZXlzW2lkXSA9IGFzcGVjdC5nZXRLZXkoKTtcclxuICAgIH0gZWxzZSBpZiAoYXNwZWN0LmVudGl0eVN0YXRlLmlzTW9kaWZpZWQoKSkge1xyXG4gICAgICB1cGRhdGVEZWxldGVNZXJnZVJlcXVlc3QocmVxdWVzdCwgYXNwZWN0LCByb3V0ZVByZWZpeCEpO1xyXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IFwiTUVSR0VcIjtcclxuICAgICAgcmVxdWVzdC5kYXRhID0gaGVscGVyLnVud3JhcENoYW5nZWRWYWx1ZXMoZW50aXR5LCBlbnRpdHlNYW5hZ2VyLm1ldGFkYXRhU3RvcmUsIHRyYW5zZm9ybVZhbHVlKTtcclxuICAgICAgLy8gc2hvdWxkIGJlIGEgUEFUQ0gvTUVSR0VcclxuICAgIH0gZWxzZSBpZiAoYXNwZWN0LmVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSB7XHJcbiAgICAgIHVwZGF0ZURlbGV0ZU1lcmdlUmVxdWVzdChyZXF1ZXN0LCBhc3BlY3QsIHJvdXRlUHJlZml4ISk7XHJcbiAgICAgIHJlcXVlc3QubWV0aG9kID0gXCJERUxFVEVcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlcXVlc3QgPSBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3IuZ2V0UmVxdWVzdChyZXF1ZXN0LCBlbnRpdHksIGluZGV4KTtcclxuICAgIGNoYW5nZVJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XHJcbiAgfSk7XHJcbiAgc2F2ZUNvbnRleHQuY29udGVudEtleXMgPSBjb250ZW50S2V5cztcclxuICBzYXZlQ29udGV4dC50ZW1wS2V5cyA9IHRlbXBLZXlzO1xyXG4gIGNoYW5nZVJlcXVlc3RJbnRlcmNlcHRvci5kb25lKGNoYW5nZVJlcXVlc3RzKTtcclxuICByZXR1cm4ge1xyXG4gICAgX19iYXRjaFJlcXVlc3RzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBfX2NoYW5nZVJlcXVlc3RzOiBjaGFuZ2VSZXF1ZXN0c1xyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZURlbGV0ZU1lcmdlUmVxdWVzdChyZXF1ZXN0OiBhbnksIGFzcGVjdDogYnJlZXplLkVudGl0eUFzcGVjdCwgcm91dGVQcmVmaXg6IHN0cmluZykge1xyXG4gIGxldCB1cmlLZXk6IHN0cmluZztcclxuICBsZXQgZXh0cmFNZXRhZGF0YSA9IGFzcGVjdC5leHRyYU1ldGFkYXRhO1xyXG4gIGlmIChleHRyYU1ldGFkYXRhID09IG51bGwpIHtcclxuICAgIHVyaUtleSA9IGdldFVyaUtleShhc3BlY3QpO1xyXG4gICAgYXNwZWN0LmV4dHJhTWV0YWRhdGEgPSB7XHJcbiAgICAgIHVyaUtleTogdXJpS2V5XHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICB1cmlLZXkgPSBleHRyYU1ldGFkYXRhLnVyaUtleTtcclxuICAgIGlmIChleHRyYU1ldGFkYXRhLmV0YWcpIHtcclxuICAgICAgcmVxdWVzdC5oZWFkZXJzW1wiSWYtTWF0Y2hcIl0gPSBleHRyYU1ldGFkYXRhLmV0YWc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlcXVlc3QucmVxdWVzdFVyaSA9XHJcbiAgICAvLyB1c2Ugcm91dGVQcmVmaXggaWYgdXJpS2V5IGxhY2tzIHByb3RvY29sIChpLmUuLCByZWxhdGl2ZSB1cmkpXHJcbiAgICB1cmlLZXkuaW5kZXhPZignLy8nKSA+IDAgPyB1cmlLZXkgOiByb3V0ZVByZWZpeCArIHVyaUtleTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VXJpS2V5KGFzcGVjdDogYnJlZXplLkVudGl0eUFzcGVjdCkge1xyXG4gIGxldCBlbnRpdHlUeXBlID0gYXNwZWN0LmVudGl0eSEuZW50aXR5VHlwZTtcclxuICBsZXQgcmVzb3VyY2VOYW1lID0gZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lO1xyXG4gIGxldCBrcHMgPSBlbnRpdHlUeXBlLmtleVByb3BlcnRpZXM7XHJcbiAgbGV0IHVyaUtleSA9IHJlc291cmNlTmFtZSArIFwiKFwiO1xyXG4gIGlmIChrcHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICB1cmlLZXkgPSB1cmlLZXkgKyBmbXRQcm9wZXJ0eShrcHNbMF0sIGFzcGVjdCkgKyBcIilcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IGRlbGltID0gXCJcIjtcclxuICAgIGtwcy5mb3JFYWNoKGZ1bmN0aW9uIChrcCkge1xyXG4gICAgICB1cmlLZXkgPSB1cmlLZXkgKyBkZWxpbSArIGtwLm5hbWVPblNlcnZlciArIFwiPVwiICsgZm10UHJvcGVydHkoa3AsIGFzcGVjdCk7XHJcbiAgICAgIGRlbGltID0gXCIsXCI7XHJcbiAgICB9KTtcclxuICAgIHVyaUtleSA9IHVyaUtleSArIFwiKVwiO1xyXG4gIH1cclxuICByZXR1cm4gdXJpS2V5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRQcm9wZXJ0eShwcm9wOiBicmVlemUuRGF0YVByb3BlcnR5LCBhc3BlY3Q6IGJyZWV6ZS5FbnRpdHlBc3BlY3QpIHtcclxuICByZXR1cm4gKHByb3AuZGF0YVR5cGUgYXMgYnJlZXplLkRhdGFUeXBlKS5mbXRPRGF0YSEoYXNwZWN0LmdldFByb3BlcnR5VmFsdWUocHJvcC5uYW1lKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUVycm9yKGVycm9yOiBhbnksIHVybDogc3RyaW5nKSB7XHJcbiAgLy8gT0RhdGEgZXJyb3JzIGNhbiBoYXZlIHRoZSBtZXNzYWdlIGJ1cmllZCB2ZXJ5IGRlZXBseSAtIGFuZCBub25vYnZpb3VzbHlcclxuICAvLyB0aGlzIGNvZGUgaXMgdHJpY2t5IHNvIGJlIGNhcmVmdWwgY2hhbmdpbmcgdGhlIHJlc3BvbnNlLmJvZHkgcGFyc2luZy5cclxuICBsZXQgcmVzdWx0ID0gbmV3IEVycm9yKCkgYXMgYnJlZXplLlNlcnZlckVycm9yO1xyXG4gIGxldCByZXNwb25zZSA9IGVycm9yICYmIGVycm9yLnJlc3BvbnNlO1xyXG4gIGlmICghcmVzcG9uc2UpIHtcclxuICAgIC8vIGluIGNhc2UgRGF0YUpTIHJldHVybnMgXCJObyBoYW5kbGVyIGZvciB0aGlzIGRhdGFcIlxyXG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBlcnJvcjtcclxuICAgIHJlc3VsdC5zdGF0dXNUZXh0ID0gZXJyb3I7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuICByZXN1bHQubWVzc2FnZSA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XHJcbiAgcmVzdWx0LnN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0dXNUZXh0O1xyXG4gIHJlc3VsdC5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xyXG4gIC8vIG5vbiBzdGRcclxuICBpZiAodXJsKSByZXN1bHQudXJsID0gdXJsO1xyXG4gIHJlc3VsdC5ib2R5ID0gcmVzcG9uc2UuYm9keTtcclxuICBpZiAocmVzcG9uc2UuYm9keSkge1xyXG4gICAgbGV0IG5leHRFcnI6IGFueTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBib2R5ID0gSlNPTi5wYXJzZShyZXNwb25zZS5ib2R5KTtcclxuICAgICAgcmVzdWx0LmJvZHkgPSBib2R5O1xyXG4gICAgICAvLyBPRGF0YSB2MyBsb2dpY1xyXG4gICAgICBpZiAoYm9keVsnb2RhdGEuZXJyb3InXSkge1xyXG4gICAgICAgIGJvZHkgPSBib2R5WydvZGF0YS5lcnJvciddO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBtc2cgPSBcIlwiO1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgbmV4dEVyciA9IGJvZHkuZXJyb3IgfHwgYm9keS5pbm5lcmVycm9yO1xyXG4gICAgICAgIGlmICghbmV4dEVycikgbXNnID0gbXNnICsgZ2V0TWVzc2FnZShib2R5KTtcclxuICAgICAgICBuZXh0RXJyID0gbmV4dEVyciB8fCBib2R5LmludGVybmFsZXhjZXB0aW9uO1xyXG4gICAgICAgIGJvZHkgPSBuZXh0RXJyIHx8IGJvZHk7XHJcbiAgICAgIH0gd2hpbGUgKG5leHRFcnIpO1xyXG4gICAgICBpZiAobXNnLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXN1bHQubWVzc2FnZSA9IG1zZztcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG5cclxuICAgIH1cclxuICB9XHJcbiAgYnJlZXplLkFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLl9jYXRjaE5vQ29ubmVjdGlvbkVycm9yKHJlc3VsdCk7XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWVzc2FnZShib2R5OiBhbnkpIHtcclxuICBsZXQgbXNnID0gYm9keS5tZXNzYWdlIHx8IFwiXCI7XHJcbiAgcmV0dXJuICgodHlwZW9mIChtc2cpID09PSBcInN0cmluZ1wiKSA/IG1zZyA6IG1zZy52YWx1ZSkgKyBcIjsgXCI7XHJcbn1cclxuXHJcbmJyZWV6ZS5jb25maWcucmVnaXN0ZXJBZGFwdGVyKFwiZGF0YVNlcnZpY2VcIiwgRGF0YVNlcnZpY2VPRGF0YUFkYXB0ZXIpO1xyXG5cclxuXHJcbmxldCB3ZWJBcGlPRGF0YUN0b3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgdGhpcy5uYW1lID0gXCJ3ZWJBcGlPRGF0YVwiO1xyXG59O1xyXG5cclxuYnJlZXplLmNvcmUuZXh0ZW5kKHdlYkFwaU9EYXRhQ3Rvci5wcm90b3R5cGUsIERhdGFTZXJ2aWNlT0RhdGFBZGFwdGVyLnByb3RvdHlwZSk7XHJcblxyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcImRhdGFTZXJ2aWNlXCIsIHdlYkFwaU9EYXRhQ3RvciBhcyBhbnkpO1xyXG4vLyBPRGF0YSA0IGFkYXB0ZXJcclxubGV0IHdlYkFwaU9EYXRhNEN0b3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgdGhpcy5uYW1lID0gXCJ3ZWJBcGlPRGF0YTRcIjtcclxufTtcclxuYnJlZXplLmNvcmUuZXh0ZW5kKHdlYkFwaU9EYXRhNEN0b3IucHJvdG90eXBlLCB3ZWJBcGlPRGF0YUN0b3IucHJvdG90eXBlKTtcclxud2ViQXBpT0RhdGE0Q3Rvci5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAvLyBBYXJnaC4uLiB0aGV5IG1vdmVkIHRoZSBjaGVlc2UuXHJcbiAgbGV0IGRhdGFqcyA9IGNvcmUucmVxdWlyZUxpYihcImRhdGFqc1wiLCBcIk5lZWRlZCB0byBzdXBwb3J0IHJlbW90ZSBPRGF0YSB2NCBzZXJ2aWNlc1wiKTtcclxuICBPRGF0YSA9IGRhdGFqcy5WNC5vRGF0YTtcclxuICBPRGF0YS5qc29uLmpzb25IYW5kbGVyLnJlY29nbml6ZURhdGVzID0gdHJ1ZTtcclxufTtcclxud2ViQXBpT0RhdGE0Q3Rvci5wcm90b3R5cGUuaGVhZGVycyA9IHsgXCJPRGF0YS1WZXJzaW9uXCI6IFwiNC4wXCIgfTtcclxuYnJlZXplLmNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJkYXRhU2VydmljZVwiLCB3ZWJBcGlPRGF0YTRDdG9yIGFzIGFueSk7XHJcblxyXG5cclxuXHJcblxyXG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLWNsaWVudC1hZGFwdGVyLWRhdGEtc2VydmljZS1vZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9icmVlemUtY2xpZW50LWFkYXB0ZXItZGF0YS1zZXJ2aWNlLW9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9hZGFwdGVyLWRhdGEtc2VydmljZS1vZGF0YSc7XG4iXX0=