breeze-client 2.1.7 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/README.md +8 -4
  2. package/adapter-ajax-angularjs/{breeze-client-adapter-ajax-angularjs.d.ts → index.d.ts} +1 -0
  3. package/adapter-ajax-fetch/{breeze-client-adapter-ajax-fetch.d.ts → index.d.ts} +1 -0
  4. package/adapter-ajax-httpclient/{breeze-client-adapter-ajax-httpclient.d.ts → index.d.ts} +1 -0
  5. package/adapter-ajax-jquery/{breeze-client-adapter-ajax-jquery.d.ts → index.d.ts} +1 -0
  6. package/adapter-ajax-post/{breeze-client-adapter-ajax-post.d.ts → index.d.ts} +1 -0
  7. package/adapter-data-service-odata/{breeze-client-adapter-data-service-odata.d.ts → index.d.ts} +1 -0
  8. package/adapter-data-service-webapi/{breeze-client-adapter-data-service-webapi.d.ts → index.d.ts} +1 -0
  9. package/adapter-model-library-backing-store/{breeze-client-adapter-model-library-backing-store.d.ts → index.d.ts} +1 -0
  10. package/adapter-model-library-ko/{breeze-client-adapter-model-library-ko.d.ts → index.d.ts} +1 -0
  11. package/adapter-uri-builder-json/{breeze-client-adapter-uri-builder-json.d.ts → index.d.ts} +1 -0
  12. package/adapter-uri-builder-odata/{breeze-client-adapter-uri-builder-odata.d.ts → index.d.ts} +1 -0
  13. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +135 -0
  14. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +49 -0
  15. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
  16. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +135 -0
  17. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +49 -0
  18. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
  19. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +139 -0
  20. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +49 -0
  21. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
  22. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +107 -0
  23. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
  24. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
  25. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
  26. package/esm2022/adapter-data-service-odata/adapter-core.mjs +49 -0
  27. package/{esm5/adapter-data-service-odata/adapter-data-service-odata.js → esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs} +138 -147
  28. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
  29. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +100 -0
  30. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
  31. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +269 -0
  32. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
  33. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +241 -0
  34. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
  35. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +49 -0
  36. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +37 -0
  37. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
  38. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +49 -0
  39. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +191 -0
  40. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
  41. package/esm2022/breeze-client.mjs +5 -0
  42. package/esm2022/index.mjs +2 -0
  43. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
  44. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
  45. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
  46. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +421 -0
  47. package/esm2022/src/abstract-data-service-adapter.mjs +325 -0
  48. package/esm2022/src/array.mjs +4 -0
  49. package/esm2022/src/assert-param.mjs +330 -0
  50. package/esm2022/src/breeze.mjs +85 -0
  51. package/esm2022/src/complex-array.mjs +117 -0
  52. package/esm2022/src/config.mjs +232 -0
  53. package/esm2022/src/core.mjs +712 -0
  54. package/esm2022/src/csdl-metadata-parser.mjs +385 -0
  55. package/esm2022/src/data-service.mjs +239 -0
  56. package/{esm2015/src/data-type.js → esm2022/src/data-type.mjs} +131 -124
  57. package/esm2022/src/default-property-interceptor.mjs +460 -0
  58. package/{esm2015/src/entity-action.js → esm2022/src/entity-action.mjs} +25 -25
  59. package/esm2022/src/entity-aspect.mjs +897 -0
  60. package/esm2022/src/entity-group.mjs +192 -0
  61. package/esm2022/src/entity-key.mjs +127 -0
  62. package/esm2022/src/entity-manager.mjs +2183 -0
  63. package/esm2022/src/entity-metadata.mjs +2242 -0
  64. package/esm2022/src/entity-query.mjs +1024 -0
  65. package/esm2022/src/entity-state.mjs +107 -0
  66. package/esm2022/src/enum.mjs +143 -0
  67. package/esm2022/src/event.mjs +264 -0
  68. package/esm2022/src/interface-registry.mjs +39 -0
  69. package/esm2022/src/key-generator.mjs +110 -0
  70. package/esm2022/src/local-query-comparison-options.mjs +75 -0
  71. package/esm2022/src/mapping-context.mjs +422 -0
  72. package/{esm5/src/naming-convention.js → esm2022/src/naming-convention.mjs} +35 -29
  73. package/esm2022/src/observable-array.mjs +183 -0
  74. package/esm2022/src/predicate.mjs +1259 -0
  75. package/esm2022/src/primitive-array.mjs +85 -0
  76. package/esm2022/src/query-options.mjs +160 -0
  77. package/esm2022/src/relation-array.mjs +173 -0
  78. package/esm2022/src/save-options.mjs +51 -0
  79. package/esm2022/src/unattached-children-map.mjs +56 -0
  80. package/{esm5/src/validate.js → esm2022/src/validate.mjs} +116 -110
  81. package/esm2022/src/validation-options.mjs +78 -0
  82. package/{fesm2015/breeze-client-adapter-ajax-angularjs.js → fesm2022/breeze-client-adapter-ajax-angularjs.mjs} +6 -1
  83. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  84. package/{fesm2015/breeze-client-adapter-ajax-fetch.js → fesm2022/breeze-client-adapter-ajax-fetch.mjs} +9 -4
  85. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  86. package/{fesm2015/breeze-client-adapter-ajax-httpclient.js → fesm2022/breeze-client-adapter-ajax-httpclient.mjs} +6 -4
  87. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  88. package/{fesm2015/breeze-client-adapter-ajax-jquery.js → fesm2022/breeze-client-adapter-ajax-jquery.mjs} +6 -2
  89. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  90. package/{fesm2015/breeze-client-adapter-ajax-post.js → fesm2022/breeze-client-adapter-ajax-post.mjs} +1 -1
  91. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +1 -0
  92. package/{fesm2015/breeze-client-adapter-data-service-odata.js → fesm2022/breeze-client-adapter-data-service-odata.mjs} +68 -69
  93. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  94. package/{fesm2015/breeze-client-adapter-data-service-webapi.js → fesm2022/breeze-client-adapter-data-service-webapi.mjs} +30 -30
  95. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  96. package/{fesm2015/breeze-client-adapter-model-library-backing-store.js → fesm2022/breeze-client-adapter-model-library-backing-store.mjs} +14 -13
  97. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  98. package/{fesm2015/breeze-client-adapter-model-library-ko.js → fesm2022/breeze-client-adapter-model-library-ko.mjs} +14 -13
  99. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  100. package/{fesm2015/breeze-client-adapter-uri-builder-json.js → fesm2022/breeze-client-adapter-uri-builder-json.mjs} +9 -8
  101. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  102. package/{fesm2015/breeze-client-adapter-uri-builder-odata.js → fesm2022/breeze-client-adapter-uri-builder-odata.mjs} +86 -86
  103. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  104. package/{fesm2015/breeze-client-mixin-get-entity-graph.js → fesm2022/breeze-client-mixin-get-entity-graph.mjs} +1 -1
  105. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  106. package/{fesm2015/breeze-client-mixin-save-queuing.js → fesm2022/breeze-client-mixin-save-queuing.mjs} +23 -2
  107. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +1 -0
  108. package/{fesm2015/breeze-client.js → fesm2022/breeze-client.mjs} +2039 -1537
  109. package/fesm2022/breeze-client.mjs.map +1 -0
  110. package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
  111. package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
  112. package/package.json +94 -12
  113. package/src/config.d.ts +1 -1
  114. package/src/core.d.ts +1 -1
  115. package/src/entity-aspect.d.ts +1 -1
  116. package/src/entity-metadata.d.ts +8 -6
  117. package/src/entity-query.d.ts +1 -1
  118. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  119. package/adapter-ajax-angularjs/package.json +0 -13
  120. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  121. package/adapter-ajax-fetch/package.json +0 -13
  122. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  123. package/adapter-ajax-httpclient/package.json +0 -13
  124. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  125. package/adapter-ajax-jquery/package.json +0 -13
  126. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  127. package/adapter-ajax-post/package.json +0 -13
  128. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  129. package/adapter-data-service-odata/package.json +0 -13
  130. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  131. package/adapter-data-service-webapi/package.json +0 -13
  132. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  133. package/adapter-model-library-backing-store/package.json +0 -13
  134. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  135. package/adapter-model-library-ko/package.json +0 -13
  136. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  137. package/adapter-uri-builder-json/package.json +0 -13
  138. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  139. package/adapter-uri-builder-odata/package.json +0 -13
  140. package/breeze-client.d.ts +0 -8
  141. package/breeze-client.metadata.json +0 -1
  142. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  143. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  144. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  145. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  146. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  147. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  148. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  149. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  150. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  151. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  152. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  153. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  154. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  155. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  156. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  157. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  158. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  159. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  160. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  161. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  162. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -747
  163. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  164. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  165. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  166. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -333
  167. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  168. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  169. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  170. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  171. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  172. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  173. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  174. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  175. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  176. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  177. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  178. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  179. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  180. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  181. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  182. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  183. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  184. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  185. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  186. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  187. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  188. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  189. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  190. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
  191. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  192. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  193. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  194. package/bundles/breeze-client.umd.js +0 -14231
  195. package/bundles/breeze-client.umd.js.map +0 -1
  196. package/bundles/breeze-client.umd.min.js +0 -16
  197. package/bundles/breeze-client.umd.min.js.map +0 -1
  198. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  199. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  200. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  201. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  202. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  203. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  204. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  205. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  206. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  207. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  208. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  209. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  210. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  211. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  212. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -463
  213. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  214. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -100
  215. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  216. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  217. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  218. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  219. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  220. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  221. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  222. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  223. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  224. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  225. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  226. package/esm2015/breeze-client.js +0 -9
  227. package/esm2015/index.js +0 -2
  228. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  229. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  230. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  231. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  232. package/esm2015/src/abstract-data-service-adapter.js +0 -327
  233. package/esm2015/src/array.js +0 -4
  234. package/esm2015/src/assert-param.js +0 -312
  235. package/esm2015/src/breeze.js +0 -85
  236. package/esm2015/src/complex-array.js +0 -119
  237. package/esm2015/src/config.js +0 -223
  238. package/esm2015/src/core.js +0 -714
  239. package/esm2015/src/csdl-metadata-parser.js +0 -385
  240. package/esm2015/src/data-service.js +0 -203
  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 -510
  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/observable-array.js +0 -201
  324. package/esm5/src/predicate.js +0 -1307
  325. package/esm5/src/primitive-array.js +0 -87
  326. package/esm5/src/query-options.js +0 -167
  327. package/esm5/src/relation-array.js +0 -175
  328. package/esm5/src/save-options.js +0 -43
  329. package/esm5/src/unattached-children-map.js +0 -60
  330. package/esm5/src/validation-options.js +0 -66
  331. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  332. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  333. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  334. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  335. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  336. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  337. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  338. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  339. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  340. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  341. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  342. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  343. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  344. package/fesm2015/breeze-client.js.map +0 -1
  345. package/fesm5/breeze-client-adapter-ajax-angularjs.js +0 -186
  346. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  347. package/fesm5/breeze-client-adapter-ajax-fetch.js +0 -186
  348. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  349. package/fesm5/breeze-client-adapter-ajax-httpclient.js +0 -193
  350. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  351. package/fesm5/breeze-client-adapter-ajax-jquery.js +0 -111
  352. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  353. package/fesm5/breeze-client-adapter-ajax-post.js +0 -86
  354. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  355. package/fesm5/breeze-client-adapter-data-service-odata.js +0 -523
  356. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  357. package/fesm5/breeze-client-adapter-data-service-webapi.js +0 -111
  358. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  359. package/fesm5/breeze-client-adapter-model-library-backing-store.js +0 -276
  360. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  361. package/fesm5/breeze-client-adapter-model-library-ko.js +0 -248
  362. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  363. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  364. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  365. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  366. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  367. package/fesm5/breeze-client-mixin-get-entity-graph.js +0 -254
  368. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  369. package/fesm5/breeze-client-mixin-save-queuing.js +0 -356
  370. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  371. package/fesm5/breeze-client.js +0 -13953
  372. package/fesm5/breeze-client.js.map +0 -1
  373. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  374. package/mixin-get-entity-graph/package.json +0 -13
  375. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  376. package/mixin-save-queuing/package.json +0 -13
@@ -0,0 +1,85 @@
1
+ import { core } from './core';
2
+ import { observableArray } from './observable-array';
3
+ import { BreezeEvent } from './event';
4
+ // TODO: mixin impl is not very typesafe
5
+ // Not needed
6
+ // interface IPrimitiveArray extends IObservableArray {
7
+ // [index: number]: any;
8
+ // parent?: IStructuralObject;
9
+ // parentProperty?: DataProperty;
10
+ // }
11
+ let primitiveArrayMixin = {
12
+ // complexArray will have the following props
13
+ // parent
14
+ // propertyPath
15
+ // parentProperty
16
+ // addedItems - only if modified
17
+ // removedItems - only if modified
18
+ // each complexAspect of any entity within a complexArray
19
+ // will have its own _complexState = "A/M";
20
+ /**
21
+ Primitive arrays are not actually classes, they are objects that mimic arrays. A primitive array is collection of
22
+ primitive types associated with a data property on a single entity or complex object. i.e. customer.invoiceNumbers.
23
+ This collection looks like an array in that the basic methods on arrays such as 'push', 'pop', 'shift', 'unshift', 'splice'
24
+ are all provided as well as several special purpose methods.
25
+ @class {primitiveArray}
26
+ **/
27
+ /**
28
+ An [[Event]] that fires whenever the contents of this array changed. This event
29
+ is fired any time a new entity is attached or added to the EntityManager and happens to belong to this collection.
30
+ Adds that occur as a result of query or import operations are batched so that all of the adds or removes to any individual
31
+ collections are collected into a single notification event for each relation array.
32
+ @example
33
+ // assume order is an order entity attached to an EntityManager.
34
+ orders.arrayChanged.subscribe(
35
+ function (arrayChangedArgs) {
36
+ let addedEntities = arrayChangedArgs.added;
37
+ let removedEntities = arrayChanged.removed;
38
+ });
39
+ @event arrayChanged
40
+ @param added {Array of Primitives} An array of all of the items added to this collection.
41
+ @param removed {Array of Primitives} An array of all of the items removed from this collection.
42
+ @readOnly
43
+ **/
44
+ // virtual impls
45
+ _getGoodAdds: function (adds) {
46
+ return adds;
47
+ },
48
+ _beforeChange: function () {
49
+ let entityAspect = this.getEntityAspect();
50
+ if (entityAspect.entityState.isUnchanged()) {
51
+ entityAspect.setModified();
52
+ }
53
+ if (entityAspect.entityState.isModified() && !this._origValues) {
54
+ this._origValues = this.slice(0);
55
+ }
56
+ },
57
+ _processAdds: function (adds) {
58
+ // nothing needed
59
+ },
60
+ _processRemoves: function (removes) {
61
+ // nothing needed;
62
+ },
63
+ _rejectChanges: function () {
64
+ if (!this._origValues)
65
+ return;
66
+ this.length = 0;
67
+ Array.prototype.push.apply(this, this._origValues);
68
+ },
69
+ _acceptChanges: function () {
70
+ this._origValues = null;
71
+ }
72
+ };
73
+ // local functions
74
+ /** For use by breeze plugin authors only. The class is for use in building a [[IModelLibraryAdapter]] implementation.
75
+ @adapter (see [[IModelLibraryAdapter]])
76
+ @hidden
77
+ */
78
+ export function makePrimitiveArray(arr, parent, parentProperty) {
79
+ let arrX = arr;
80
+ observableArray.initializeParent(arrX, parent, parentProperty);
81
+ arrX.arrayChanged = new BreezeEvent("arrayChanged", arrX);
82
+ core.extend(arrX, observableArray.mixin);
83
+ return core.extend(arrX, primitiveArrayMixin);
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWl0aXZlLWFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ByaW1pdGl2ZS1hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFHLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSXRDLHdDQUF3QztBQUV4QyxhQUFhO0FBQ2IsdURBQXVEO0FBQ3ZELDBCQUEwQjtBQUMxQixnQ0FBZ0M7QUFDaEMsbUNBQW1DO0FBQ25DLElBQUk7QUFFSixJQUFJLG1CQUFtQixHQUFHO0lBRXhCLDZDQUE2QztJQUM3QyxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQixvQ0FBb0M7SUFDcEMsc0NBQXNDO0lBQ3RDLDBEQUEwRDtJQUMxRCw0Q0FBNEM7SUFFNUM7Ozs7OztPQU1HO0lBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFFRCxnQkFBZ0I7SUFDbEIsWUFBWSxFQUFHLFVBQVMsSUFBVztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxhQUFhLEVBQUU7UUFDYixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUMsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELFlBQVksRUFBRSxVQUFTLElBQVc7UUFDaEMsaUJBQWlCO0lBQ25CLENBQUM7SUFFRCxlQUFlLEVBQUUsVUFBUyxPQUFjO1FBQ3RDLGtCQUFrQjtJQUNwQixDQUFDO0lBR0QsY0FBYyxFQUFFO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsY0FBYyxFQUFFO1FBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztDQUNGLENBQUM7QUFDQSxrQkFBa0I7QUFFcEI7OztFQUdFO0FBQ0YsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVUsRUFBRSxNQUF3QixFQUFFLGNBQTRCO0lBQ25HLElBQUksSUFBSSxHQUFHLEdBQVUsQ0FBQztJQUN0QixlQUFlLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlICB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IG9ic2VydmFibGVBcnJheSB9IGZyb20gJy4vb2JzZXJ2YWJsZS1hcnJheSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IFN0cnVjdHVyYWxPYmplY3QgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBEYXRhUHJvcGVydHkgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcblxyXG4vLyBUT0RPOiBtaXhpbiBpbXBsIGlzIG5vdCB2ZXJ5IHR5cGVzYWZlXHJcblxyXG4vLyBOb3QgbmVlZGVkXHJcbi8vIGludGVyZmFjZSBJUHJpbWl0aXZlQXJyYXkgZXh0ZW5kcyBJT2JzZXJ2YWJsZUFycmF5IHtcclxuLy8gICBbaW5kZXg6IG51bWJlcl06IGFueTtcclxuLy8gICBwYXJlbnQ/OiBJU3RydWN0dXJhbE9iamVjdDtcclxuLy8gICBwYXJlbnRQcm9wZXJ0eT86IERhdGFQcm9wZXJ0eTtcclxuLy8gfVxyXG5cclxubGV0IHByaW1pdGl2ZUFycmF5TWl4aW4gPSB7XHJcblxyXG4gIC8vIGNvbXBsZXhBcnJheSB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wc1xyXG4gIC8vICAgIHBhcmVudFxyXG4gIC8vICAgIHByb3BlcnR5UGF0aFxyXG4gIC8vICAgIHBhcmVudFByb3BlcnR5XHJcbiAgLy8gICAgYWRkZWRJdGVtcyAgLSBvbmx5IGlmIG1vZGlmaWVkXHJcbiAgLy8gICAgcmVtb3ZlZEl0ZW1zICAtIG9ubHkgaWYgbW9kaWZpZWRcclxuICAvLyAgZWFjaCBjb21wbGV4QXNwZWN0IG9mIGFueSBlbnRpdHkgd2l0aGluIGEgY29tcGxleEFycmF5XHJcbiAgLy8gIHdpbGwgaGF2ZSBpdHMgb3duIF9jb21wbGV4U3RhdGUgPSBcIkEvTVwiO1xyXG5cclxuICAvKipcclxuICBQcmltaXRpdmUgYXJyYXlzIGFyZSBub3QgYWN0dWFsbHkgY2xhc3NlcywgdGhleSBhcmUgb2JqZWN0cyB0aGF0IG1pbWljIGFycmF5cy4gQSBwcmltaXRpdmUgYXJyYXkgaXMgY29sbGVjdGlvbiBvZlxyXG4gIHByaW1pdGl2ZSB0eXBlcyBhc3NvY2lhdGVkIHdpdGggYSBkYXRhIHByb3BlcnR5IG9uIGEgc2luZ2xlIGVudGl0eSBvciBjb21wbGV4IG9iamVjdC4gaS5lLiBjdXN0b21lci5pbnZvaWNlTnVtYmVycy5cclxuICBUaGlzIGNvbGxlY3Rpb24gbG9va3MgbGlrZSBhbiBhcnJheSBpbiB0aGF0IHRoZSBiYXNpYyBtZXRob2RzIG9uIGFycmF5cyBzdWNoIGFzICdwdXNoJywgJ3BvcCcsICdzaGlmdCcsICd1bnNoaWZ0JywgJ3NwbGljZSdcclxuICBhcmUgYWxsIHByb3ZpZGVkIGFzIHdlbGwgYXMgc2V2ZXJhbCBzcGVjaWFsIHB1cnBvc2UgbWV0aG9kcy5cclxuICBAY2xhc3Mge3ByaW1pdGl2ZUFycmF5fVxyXG4gICoqL1xyXG5cclxuICAvKipcclxuICBBbiBbW0V2ZW50XV0gdGhhdCBmaXJlcyB3aGVuZXZlciB0aGUgY29udGVudHMgb2YgdGhpcyBhcnJheSBjaGFuZ2VkLiAgVGhpcyBldmVudFxyXG4gIGlzIGZpcmVkIGFueSB0aW1lIGEgbmV3IGVudGl0eSBpcyBhdHRhY2hlZCBvciBhZGRlZCB0byB0aGUgRW50aXR5TWFuYWdlciBhbmQgaGFwcGVucyB0byBiZWxvbmcgdG8gdGhpcyBjb2xsZWN0aW9uLlxyXG4gIEFkZHMgdGhhdCBvY2N1ciBhcyBhIHJlc3VsdCBvZiBxdWVyeSBvciBpbXBvcnQgb3BlcmF0aW9ucyBhcmUgYmF0Y2hlZCBzbyB0aGF0IGFsbCBvZiB0aGUgYWRkcyBvciByZW1vdmVzIHRvIGFueSBpbmRpdmlkdWFsXHJcbiAgY29sbGVjdGlvbnMgYXJlIGNvbGxlY3RlZCBpbnRvIGEgc2luZ2xlIG5vdGlmaWNhdGlvbiBldmVudCBmb3IgZWFjaCByZWxhdGlvbiBhcnJheS5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBhc3N1bWUgb3JkZXIgaXMgYW4gb3JkZXIgZW50aXR5IGF0dGFjaGVkIHRvIGFuIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIG9yZGVycy5hcnJheUNoYW5nZWQuc3Vic2NyaWJlKFxyXG4gICAgICBmdW5jdGlvbiAoYXJyYXlDaGFuZ2VkQXJncykge1xyXG4gICAgICAgICAgbGV0IGFkZGVkRW50aXRpZXMgPSBhcnJheUNoYW5nZWRBcmdzLmFkZGVkO1xyXG4gICAgICAgICAgbGV0IHJlbW92ZWRFbnRpdGllcyA9IGFycmF5Q2hhbmdlZC5yZW1vdmVkO1xyXG4gICAgICB9KTtcclxuICBAZXZlbnQgYXJyYXlDaGFuZ2VkXHJcbiAgQHBhcmFtIGFkZGVkIHtBcnJheSBvZiBQcmltaXRpdmVzfSBBbiBhcnJheSBvZiBhbGwgb2YgdGhlIGl0ZW1zIGFkZGVkIHRvIHRoaXMgY29sbGVjdGlvbi5cclxuICBAcGFyYW0gcmVtb3ZlZCB7QXJyYXkgb2YgUHJpbWl0aXZlc30gQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSBpdGVtcyByZW1vdmVkIGZyb20gdGhpcyBjb2xsZWN0aW9uLlxyXG4gIEByZWFkT25seVxyXG4gICoqL1xyXG5cclxuICAgIC8vIHZpcnR1YWwgaW1wbHNcclxuICBfZ2V0R29vZEFkZHM6ICBmdW5jdGlvbihhZGRzOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGFkZHM7XHJcbiAgfSxcclxuXHJcbiAgX2JlZm9yZUNoYW5nZTogZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgZW50aXR5QXNwZWN0ID0gdGhpcy5nZXRFbnRpdHlBc3BlY3QoKTtcclxuICAgIGlmIChlbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNVbmNoYW5nZWQoKSkge1xyXG4gICAgICBlbnRpdHlBc3BlY3Quc2V0TW9kaWZpZWQoKTtcclxuICAgIH1cclxuICAgIGlmIChlbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNNb2RpZmllZCgpICYmICF0aGlzLl9vcmlnVmFsdWVzKSB7XHJcbiAgICAgIHRoaXMuX29yaWdWYWx1ZXMgPSB0aGlzLnNsaWNlKDApO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIF9wcm9jZXNzQWRkczogZnVuY3Rpb24oYWRkczogYW55W10pIHtcclxuICAgIC8vIG5vdGhpbmcgbmVlZGVkXHJcbiAgfSxcclxuXHJcbiAgX3Byb2Nlc3NSZW1vdmVzOiBmdW5jdGlvbihyZW1vdmVzOiBhbnlbXSkge1xyXG4gICAgLy8gbm90aGluZyBuZWVkZWQ7XHJcbiAgfSxcclxuXHJcblxyXG4gIF9yZWplY3RDaGFuZ2VzOiBmdW5jdGlvbigpIHtcclxuICAgIGlmICghdGhpcy5fb3JpZ1ZhbHVlcykgcmV0dXJuO1xyXG4gICAgdGhpcy5sZW5ndGggPSAwO1xyXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcywgdGhpcy5fb3JpZ1ZhbHVlcyk7XHJcbiAgfSxcclxuXHJcbiAgX2FjY2VwdENoYW5nZXM6IGZ1bmN0aW9uKCkge1xyXG4gICAgdGhpcy5fb3JpZ1ZhbHVlcyA9IG51bGw7XHJcbiAgfVxyXG59O1xyXG4gIC8vIGxvY2FsIGZ1bmN0aW9uc1xyXG5cclxuLyoqIEZvciB1c2UgYnkgYnJlZXplIHBsdWdpbiBhdXRob3JzIG9ubHkuIFRoZSBjbGFzcyBpcyBmb3IgdXNlIGluIGJ1aWxkaW5nIGEgW1tJTW9kZWxMaWJyYXJ5QWRhcHRlcl1dIGltcGxlbWVudGF0aW9uLiBcclxuQGFkYXB0ZXIgKHNlZSBbW0lNb2RlbExpYnJhcnlBZGFwdGVyXV0pICAgIFxyXG5AaGlkZGVuIFxyXG4qL1xyXG5leHBvcnQgZnVuY3Rpb24gbWFrZVByaW1pdGl2ZUFycmF5KGFycjogYW55W10sIHBhcmVudDogU3RydWN0dXJhbE9iamVjdCwgcGFyZW50UHJvcGVydHk6IERhdGFQcm9wZXJ0eSkge1xyXG4gIGxldCBhcnJYID0gYXJyIGFzIGFueTtcclxuICBvYnNlcnZhYmxlQXJyYXkuaW5pdGlhbGl6ZVBhcmVudChhcnJYLCBwYXJlbnQsIHBhcmVudFByb3BlcnR5KTtcclxuICBhcnJYLmFycmF5Q2hhbmdlZCA9IG5ldyBCcmVlemVFdmVudChcImFycmF5Q2hhbmdlZFwiLCBhcnJYKTtcclxuICBjb3JlLmV4dGVuZChhcnJYLCBvYnNlcnZhYmxlQXJyYXkubWl4aW4pO1xyXG4gIHJldHVybiBjb3JlLmV4dGVuZChhcnJYLCBwcmltaXRpdmVBcnJheU1peGluKTtcclxufVxyXG5cclxuXHJcbiJdfQ==
@@ -0,0 +1,160 @@
1
+ import { core } from './core';
2
+ import { BreezeEnum } from './enum';
3
+ import { assertConfig } from './assert-param';
4
+ /**
5
+ MergeStrategy is an 'Enum' that determines how entities are merged into an EntityManager.
6
+
7
+ @class MergeStrategy
8
+ @static
9
+ **/
10
+ export class MergeStrategy extends BreezeEnum {
11
+ /**
12
+ MergeStrategy.PreserveChanges updates the cached entity with the incoming values unless the cached entity is in a changed
13
+ state (added, modified, deleted) in which case the incoming values are ignored. The updated cached entity’s EntityState will
14
+ remain [[EntityState.Unchanged]] unless you’re importing entities in which case the new EntityState will
15
+ be that of the imported entities.
16
+ **/
17
+ static PreserveChanges = new MergeStrategy();
18
+ /**
19
+ MergeStrategy.OverwriteChanges always updates the cached entity with incoming values even if the entity is in
20
+ a changed state (added, modified, deleted). After the merge, the pending changes are lost.
21
+ The new EntityState will be [[EntityState/Unchanged]] unless you’re importing entities
22
+ in which case the new EntityState will be that of the imported entities.
23
+ **/
24
+ static OverwriteChanges = new MergeStrategy();
25
+ /**
26
+ SkipMerge is used to ignore incoming values. Adds the incoming entity to the cache only if there is no cached entity with the same key.
27
+ This is the fastest merge strategy but your existing cached data will remain “stale”.
28
+ **/
29
+ static SkipMerge = new MergeStrategy();
30
+ /**
31
+ Disallowed is used to throw an exception if there is an incoming entity with the same key as an entity already in the cache.
32
+ Use this strategy when you want to be sure that the incoming entity is not already in cache.
33
+ This is the default strategy for EntityManager.attachEntity.
34
+ **/
35
+ static Disallowed = new MergeStrategy();
36
+ }
37
+ MergeStrategy.prototype._$typeName = "MergeStrategy";
38
+ Error['x'] = MergeStrategy.resolveSymbols();
39
+ /**
40
+ FetchStrategy is an 'Enum' that determines how and where entities are retrieved from as a result of a query.
41
+ **/
42
+ export class FetchStrategy extends BreezeEnum {
43
+ /**
44
+ FromServer is used to tell the query to execute the query against a remote data source on the server.
45
+ **/
46
+ static FromServer = new FetchStrategy();
47
+ /**
48
+ FromLocalCache is used to tell the query to execute the query against a local EntityManager instead of going to a remote server.
49
+ **/
50
+ static FromLocalCache = new FetchStrategy();
51
+ }
52
+ FetchStrategy.prototype._$typeName = "FetchStrategy";
53
+ Error['x'] = FetchStrategy.resolveSymbols();
54
+ /**
55
+ A QueryOptions instance is used to specify the 'options' under which a query will occur.
56
+ **/
57
+ export class QueryOptions {
58
+ /** @hidden @internal */
59
+ _$typeName;
60
+ /** The [[FetchStrategy]] to use with any queries. __Read Only__ */
61
+ fetchStrategy;
62
+ /** The [[MergeStrategy]] to use with any queries. __Read Only__ */
63
+ mergeStrategy;
64
+ /** Whether to include cached deleted entities in a query result (false by default). __Read Only__ */
65
+ includeDeleted;
66
+ /**
67
+ The default instance for use whenever QueryOptions are not specified.
68
+ **/
69
+ static defaultInstance = new QueryOptions({
70
+ fetchStrategy: FetchStrategy.FromServer,
71
+ mergeStrategy: MergeStrategy.PreserveChanges,
72
+ includeDeleted: false
73
+ });
74
+ /**
75
+ QueryOptions constructor
76
+ > var newQo = new QueryOptions( { mergeStrategy: MergeStrategy.OverwriteChanges });
77
+ > // assume em1 is a preexisting EntityManager
78
+ > em1.setProperties( { queryOptions: newQo });
79
+ Any QueryOptions property that is not defined will be defaulted from any QueryOptions defined at a higher level in the breeze hierarchy, i.e.
80
+ - from query.queryOptions
81
+ - to entityManager.queryOptions
82
+ - to QueryOptions.defaultInstance;
83
+
84
+ @param config - A configuration object.
85
+ **/
86
+ constructor(config) {
87
+ QueryOptions._updateWithConfig(this, config);
88
+ }
89
+ static resolve(queryOptionsArray) {
90
+ return new QueryOptions(core.resolveProperties(queryOptionsArray, ["fetchStrategy", "mergeStrategy", "includeDeleted"]));
91
+ }
92
+ /**
93
+ Returns a copy of this QueryOptions with the specified [[MergeStrategy]],
94
+ [[FetchStrategy]], or 'includeDeleted' option applied.
95
+ > // Given an EntityManager instance, em
96
+ > var queryOptions = em.queryOptions.using(MergeStrategy.PreserveChanges);
97
+
98
+ or
99
+ > var queryOptions = em.queryOptions.using(FetchStrategy.FromLocalCache);
100
+
101
+ or
102
+ > var queryOptions = em.queryOptions.using({ mergeStrategy: MergeStrategy.OverwriteChanges });
103
+
104
+ or
105
+ > var queryOptions = em.queryOptions.using({
106
+ > includeDeleted: true,
107
+ > fetchStrategy: FetchStrategy.FromLocalCache
108
+ > });
109
+ @param config - A configuration object or a standalone [[MergeStrategy]] or [[FetchStrategy]]
110
+ @return A new QueryOptions instance.
111
+ **/
112
+ using(qoConfig) {
113
+ if (!qoConfig)
114
+ return this;
115
+ let result = new QueryOptions(this);
116
+ if (qoConfig instanceof MergeStrategy) {
117
+ qoConfig = { mergeStrategy: qoConfig };
118
+ }
119
+ else if (qoConfig instanceof FetchStrategy) {
120
+ qoConfig = { fetchStrategy: qoConfig };
121
+ }
122
+ return QueryOptions._updateWithConfig(result, qoConfig);
123
+ }
124
+ /**
125
+ Sets the 'defaultInstance' by creating a copy of the current 'defaultInstance' and then applying all of the properties of the current instance.
126
+ The current instance is returned unchanged.
127
+ > var newQo = new QueryOptions( { mergeStrategy: MergeStrategy.OverwriteChanges });
128
+ > newQo.setAsDefault();
129
+ **/
130
+ setAsDefault() {
131
+ return core.setAsDefault(this, QueryOptions);
132
+ }
133
+ toJSON() {
134
+ return core.toJson(this, {
135
+ fetchStrategy: null,
136
+ mergeStrategy: null,
137
+ includeDeleted: false
138
+ });
139
+ }
140
+ static fromJSON(json) {
141
+ return new QueryOptions({
142
+ fetchStrategy: FetchStrategy.fromName(json.fetchStrategy),
143
+ mergeStrategy: MergeStrategy.fromName(json.mergeStrategy),
144
+ includeDeleted: json.includeDeleted === true
145
+ });
146
+ }
147
+ /** @hidden @internal */
148
+ static _updateWithConfig(obj, config) {
149
+ if (config) {
150
+ assertConfig(config)
151
+ .whereParam("fetchStrategy").isEnumOf(FetchStrategy).isOptional()
152
+ .whereParam("mergeStrategy").isEnumOf(MergeStrategy).isOptional()
153
+ .whereParam("includeDeleted").isBoolean().isOptional()
154
+ .applyAll(obj);
155
+ }
156
+ return obj;
157
+ }
158
+ }
159
+ QueryOptions.prototype._$typeName = "QueryOptions";
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9xdWVyeS1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUM7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFVBQVU7SUFFM0M7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsZUFBZSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDN0M7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUU5Qzs7O09BR0c7SUFDSCxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFFdkM7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQzs7QUFJMUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDO0FBQ3JELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7QUFFNUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFVBQVU7SUFFM0M7O09BRUc7SUFDSCxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDeEM7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7O0FBRzlDLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztBQUNyRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBWTVDOztH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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgQnJlZXplRW51bSB9IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IGFzc2VydENvbmZpZyB9IGZyb20gJy4vYXNzZXJ0LXBhcmFtJztcclxuXHJcbi8qKlxyXG5NZXJnZVN0cmF0ZWd5IGlzIGFuICdFbnVtJyB0aGF0IGRldGVybWluZXMgaG93IGVudGl0aWVzIGFyZSBtZXJnZWQgaW50byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG5cclxuQGNsYXNzIE1lcmdlU3RyYXRlZ3lcclxuQHN0YXRpY1xyXG4qKi9cclxuZXhwb3J0IGNsYXNzIE1lcmdlU3RyYXRlZ3kgZXh0ZW5kcyBCcmVlemVFbnVtIHtcclxuXHJcbiAgLyoqXHJcbiAgTWVyZ2VTdHJhdGVneS5QcmVzZXJ2ZUNoYW5nZXMgdXBkYXRlcyB0aGUgY2FjaGVkIGVudGl0eSB3aXRoIHRoZSBpbmNvbWluZyB2YWx1ZXMgdW5sZXNzIHRoZSBjYWNoZWQgZW50aXR5IGlzIGluIGEgY2hhbmdlZFxyXG4gIHN0YXRlIChhZGRlZCwgbW9kaWZpZWQsIGRlbGV0ZWQpIGluIHdoaWNoIGNhc2UgdGhlIGluY29taW5nIHZhbHVlcyBhcmUgaWdub3JlZC4gVGhlIHVwZGF0ZWQgY2FjaGVkIGVudGl0eeKAmXMgRW50aXR5U3RhdGUgd2lsbFxyXG4gIHJlbWFpbiBbW0VudGl0eVN0YXRlLlVuY2hhbmdlZF1dIHVubGVzcyB5b3XigJlyZSBpbXBvcnRpbmcgZW50aXRpZXMgaW4gd2hpY2ggY2FzZSB0aGUgbmV3IEVudGl0eVN0YXRlIHdpbGxcclxuICBiZSB0aGF0IG9mIHRoZSBpbXBvcnRlZCBlbnRpdGllcy5cclxuICAqKi9cclxuICBzdGF0aWMgUHJlc2VydmVDaGFuZ2VzID0gbmV3IE1lcmdlU3RyYXRlZ3koKTtcclxuICAvKipcclxuICBNZXJnZVN0cmF0ZWd5Lk92ZXJ3cml0ZUNoYW5nZXMgYWx3YXlzIHVwZGF0ZXMgdGhlIGNhY2hlZCBlbnRpdHkgd2l0aCBpbmNvbWluZyB2YWx1ZXMgZXZlbiBpZiB0aGUgZW50aXR5IGlzIGluXHJcbiAgYSBjaGFuZ2VkIHN0YXRlIChhZGRlZCwgbW9kaWZpZWQsIGRlbGV0ZWQpLiBBZnRlciB0aGUgbWVyZ2UsIHRoZSBwZW5kaW5nIGNoYW5nZXMgYXJlIGxvc3QuXHJcbiAgVGhlIG5ldyBFbnRpdHlTdGF0ZSB3aWxsIGJlICBbW0VudGl0eVN0YXRlL1VuY2hhbmdlZF1dIHVubGVzcyB5b3XigJlyZSBpbXBvcnRpbmcgZW50aXRpZXNcclxuICBpbiB3aGljaCBjYXNlIHRoZSBuZXcgRW50aXR5U3RhdGUgd2lsbCBiZSB0aGF0IG9mIHRoZSBpbXBvcnRlZCBlbnRpdGllcy5cclxuICAqKi9cclxuICBzdGF0aWMgT3ZlcndyaXRlQ2hhbmdlcyA9IG5ldyBNZXJnZVN0cmF0ZWd5KCk7XHJcblxyXG4gIC8qKlxyXG4gIFNraXBNZXJnZSBpcyB1c2VkIHRvIGlnbm9yZSBpbmNvbWluZyB2YWx1ZXMuIEFkZHMgdGhlIGluY29taW5nIGVudGl0eSB0byB0aGUgY2FjaGUgb25seSBpZiB0aGVyZSBpcyBubyBjYWNoZWQgZW50aXR5IHdpdGggdGhlIHNhbWUga2V5LlxyXG4gIFRoaXMgaXMgdGhlIGZhc3Rlc3QgbWVyZ2Ugc3RyYXRlZ3kgYnV0IHlvdXIgZXhpc3RpbmcgY2FjaGVkIGRhdGEgd2lsbCByZW1haW4g4oCcc3RhbGXigJ0uXHJcbiAgKiovXHJcbiAgc3RhdGljIFNraXBNZXJnZSA9IG5ldyBNZXJnZVN0cmF0ZWd5KCk7XHJcblxyXG4gIC8qKlxyXG4gIERpc2FsbG93ZWQgaXMgdXNlZCB0byB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gaW5jb21pbmcgZW50aXR5IHdpdGggdGhlIHNhbWUga2V5IGFzIGFuIGVudGl0eSBhbHJlYWR5IGluIHRoZSBjYWNoZS5cclxuICBVc2UgdGhpcyBzdHJhdGVneSB3aGVuIHlvdSB3YW50IHRvIGJlIHN1cmUgdGhhdCB0aGUgaW5jb21pbmcgZW50aXR5IGlzIG5vdCBhbHJlYWR5IGluIGNhY2hlLlxyXG4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgc3RyYXRlZ3kgZm9yIEVudGl0eU1hbmFnZXIuYXR0YWNoRW50aXR5LlxyXG4gICoqL1xyXG4gIHN0YXRpYyBEaXNhbGxvd2VkID0gbmV3IE1lcmdlU3RyYXRlZ3koKTtcclxuXHJcblxyXG59XHJcbk1lcmdlU3RyYXRlZ3kucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIk1lcmdlU3RyYXRlZ3lcIjtcclxuRXJyb3JbJ3gnXSA9IE1lcmdlU3RyYXRlZ3kucmVzb2x2ZVN5bWJvbHMoKTtcclxuXHJcbi8qKlxyXG5GZXRjaFN0cmF0ZWd5IGlzIGFuICdFbnVtJyB0aGF0IGRldGVybWluZXMgaG93IGFuZCB3aGVyZSBlbnRpdGllcyBhcmUgcmV0cmlldmVkIGZyb20gYXMgYSByZXN1bHQgb2YgYSBxdWVyeS5cclxuKiovXHJcbmV4cG9ydCBjbGFzcyBGZXRjaFN0cmF0ZWd5IGV4dGVuZHMgQnJlZXplRW51bSB7XHJcblxyXG4gIC8qKlxyXG4gIEZyb21TZXJ2ZXIgaXMgdXNlZCB0byB0ZWxsIHRoZSBxdWVyeSB0byBleGVjdXRlIHRoZSBxdWVyeSBhZ2FpbnN0IGEgcmVtb3RlIGRhdGEgc291cmNlIG9uIHRoZSBzZXJ2ZXIuXHJcbiAgKiovXHJcbiAgc3RhdGljIEZyb21TZXJ2ZXIgPSBuZXcgRmV0Y2hTdHJhdGVneSgpO1xyXG4gIC8qKlxyXG4gIEZyb21Mb2NhbENhY2hlIGlzIHVzZWQgdG8gdGVsbCB0aGUgcXVlcnkgdG8gZXhlY3V0ZSB0aGUgcXVlcnkgYWdhaW5zdCBhIGxvY2FsIEVudGl0eU1hbmFnZXIgaW5zdGVhZCBvZiBnb2luZyB0byBhIHJlbW90ZSBzZXJ2ZXIuXHJcbiAgKiovXHJcbiAgc3RhdGljIEZyb21Mb2NhbENhY2hlID0gbmV3IEZldGNoU3RyYXRlZ3koKTtcclxuXHJcbn1cclxuRmV0Y2hTdHJhdGVneS5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiRmV0Y2hTdHJhdGVneVwiO1xyXG5FcnJvclsneCddID0gRmV0Y2hTdHJhdGVneS5yZXNvbHZlU3ltYm9scygpO1xyXG5cclxuLyoqIENvbmZpZ3VyYXRpb24gaW5mbyB0byBiZSBwYXNzZWQgdG8gdGhlIFtbUXVlcnlPcHRpb25zXV0gY29uc3RydWN0b3IuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlPcHRpb25zQ29uZmlnIHtcclxuICAvKiogVGhlIFtbRmV0Y2hTdHJhdGVneV1dIHRvIHVzZSB3aXRoIGFueSBxdWVyaWVzLiovXHJcbiAgZmV0Y2hTdHJhdGVneT86IEZldGNoU3RyYXRlZ3k7XHJcbiAgLyoqIFRoZSBbW01lcmdlU3RyYXRlZ3ldXSB0byB1c2Ugd2l0aCBhbnkgcXVlcmllcy4qL1xyXG4gIG1lcmdlU3RyYXRlZ3k/OiBNZXJnZVN0cmF0ZWd5O1xyXG4gIC8qKiBXaGV0aGVyIHRvIGluY2x1ZGUgY2FjaGVkIGRlbGV0ZWQgZW50aXRpZXMgaW4gYSBxdWVyeSByZXN1bHQgKGZhbHNlIGJ5IGRlZmF1bHQpLiBfX1JlYWQgT25seV9fICovXHJcbiAgaW5jbHVkZURlbGV0ZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuQSBRdWVyeU9wdGlvbnMgaW5zdGFuY2UgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSAnb3B0aW9ucycgdW5kZXIgd2hpY2ggYSBxdWVyeSB3aWxsIG9jY3VyLlxyXG4qKi9cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5T3B0aW9ucyB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgXyR0eXBlTmFtZTogc3RyaW5nO1xyXG4gIC8qKiBUaGUgW1tGZXRjaFN0cmF0ZWd5XV0gdG8gdXNlIHdpdGggYW55IHF1ZXJpZXMuIF9fUmVhZCBPbmx5X18gKi9cclxuICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5O1xyXG4gIC8qKiBUaGUgW1tNZXJnZVN0cmF0ZWd5XV0gdG8gdXNlIHdpdGggYW55IHF1ZXJpZXMuIF9fUmVhZCBPbmx5X18gKi9cclxuICBtZXJnZVN0cmF0ZWd5OiBNZXJnZVN0cmF0ZWd5O1xyXG4gIC8qKiBXaGV0aGVyIHRvIGluY2x1ZGUgY2FjaGVkIGRlbGV0ZWQgZW50aXRpZXMgaW4gYSBxdWVyeSByZXN1bHQgKGZhbHNlIGJ5IGRlZmF1bHQpLiBfX1JlYWQgT25seV9fICovXHJcbiAgaW5jbHVkZURlbGV0ZWQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gIFRoZSBkZWZhdWx0IGluc3RhbmNlIGZvciB1c2Ugd2hlbmV2ZXIgUXVlcnlPcHRpb25zIGFyZSBub3Qgc3BlY2lmaWVkLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBkZWZhdWx0SW5zdGFuY2UgPSBuZXcgUXVlcnlPcHRpb25zKHtcclxuICAgIGZldGNoU3RyYXRlZ3k6IEZldGNoU3RyYXRlZ3kuRnJvbVNlcnZlcixcclxuICAgIG1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3kuUHJlc2VydmVDaGFuZ2VzLFxyXG4gICAgaW5jbHVkZURlbGV0ZWQ6IGZhbHNlXHJcbiAgfSk7XHJcblxyXG4gIC8qKlxyXG4gIFF1ZXJ5T3B0aW9ucyBjb25zdHJ1Y3RvclxyXG4gID4gICAgIHZhciBuZXdRbyA9IG5ldyBRdWVyeU9wdGlvbnMoIHsgbWVyZ2VTdHJhdGVneTogTWVyZ2VTdHJhdGVneS5PdmVyd3JpdGVDaGFuZ2VzIH0pO1xyXG4gID4gICAgIC8vIGFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyXHJcbiAgPiAgICAgZW0xLnNldFByb3BlcnRpZXMoIHsgcXVlcnlPcHRpb25zOiBuZXdRbyB9KTtcclxuICBBbnkgUXVlcnlPcHRpb25zIHByb3BlcnR5IHRoYXQgaXMgbm90IGRlZmluZWQgd2lsbCBiZSBkZWZhdWx0ZWQgZnJvbSBhbnkgUXVlcnlPcHRpb25zIGRlZmluZWQgYXQgYSBoaWdoZXIgbGV2ZWwgaW4gdGhlIGJyZWV6ZSBoaWVyYXJjaHksIGkuZS5cclxuICAtICBmcm9tIHF1ZXJ5LnF1ZXJ5T3B0aW9uc1xyXG4gIC0gIHRvICAgZW50aXR5TWFuYWdlci5xdWVyeU9wdGlvbnNcclxuICAtICB0byAgIFF1ZXJ5T3B0aW9ucy5kZWZhdWx0SW5zdGFuY2U7XHJcblxyXG4gIEBwYXJhbSBjb25maWcgLSBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICoqL1xyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZz86IFF1ZXJ5T3B0aW9uc0NvbmZpZykge1xyXG4gICAgUXVlcnlPcHRpb25zLl91cGRhdGVXaXRoQ29uZmlnKHRoaXMsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVzb2x2ZShxdWVyeU9wdGlvbnNBcnJheTogYW55W10pIHtcclxuICAgIHJldHVybiBuZXcgUXVlcnlPcHRpb25zKGNvcmUucmVzb2x2ZVByb3BlcnRpZXMocXVlcnlPcHRpb25zQXJyYXksIFtcImZldGNoU3RyYXRlZ3lcIiwgXCJtZXJnZVN0cmF0ZWd5XCIsIFwiaW5jbHVkZURlbGV0ZWRcIl0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgUXVlcnlPcHRpb25zIHdpdGggdGhlIHNwZWNpZmllZCBbW01lcmdlU3RyYXRlZ3ldXSxcclxuICBbW0ZldGNoU3RyYXRlZ3ldXSwgb3IgJ2luY2x1ZGVEZWxldGVkJyBvcHRpb24gYXBwbGllZC5cclxuICA+ICAgICAvLyBHaXZlbiBhbiBFbnRpdHlNYW5hZ2VyIGluc3RhbmNlLCBlbVxyXG4gID4gICAgIHZhciBxdWVyeU9wdGlvbnMgPSBlbS5xdWVyeU9wdGlvbnMudXNpbmcoTWVyZ2VTdHJhdGVneS5QcmVzZXJ2ZUNoYW5nZXMpO1xyXG5cclxuICBvclxyXG4gID4gICAgIHZhciBxdWVyeU9wdGlvbnMgPSBlbS5xdWVyeU9wdGlvbnMudXNpbmcoRmV0Y2hTdHJhdGVneS5Gcm9tTG9jYWxDYWNoZSk7XHJcblxyXG4gIG9yXHJcbiAgPiAgICAgdmFyIHF1ZXJ5T3B0aW9ucyA9IGVtLnF1ZXJ5T3B0aW9ucy51c2luZyh7IG1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3kuT3ZlcndyaXRlQ2hhbmdlcyB9KTtcclxuXHJcbiAgb3JcclxuICA+ICAgICB2YXIgcXVlcnlPcHRpb25zID0gZW0ucXVlcnlPcHRpb25zLnVzaW5nKHtcclxuICA+ICAgICAgICBpbmNsdWRlRGVsZXRlZDogdHJ1ZSxcclxuICA+ICAgICAgICBmZXRjaFN0cmF0ZWd5OiAgRmV0Y2hTdHJhdGVneS5Gcm9tTG9jYWxDYWNoZSBcclxuICA+ICAgICB9KTtcclxuICBAcGFyYW0gY29uZmlnIC0gQSBjb25maWd1cmF0aW9uIG9iamVjdCBvciBhIHN0YW5kYWxvbmUgW1tNZXJnZVN0cmF0ZWd5XV0gb3IgW1tGZXRjaFN0cmF0ZWd5XV0gXHJcbiAgQHJldHVybiBBIG5ldyBRdWVyeU9wdGlvbnMgaW5zdGFuY2UuXHJcbiAgKiovXHJcbiAgdXNpbmcocW9Db25maWc6IFF1ZXJ5T3B0aW9uc0NvbmZpZyB8IE1lcmdlU3RyYXRlZ3kgfCBGZXRjaFN0cmF0ZWd5KSB7XHJcbiAgICBpZiAoIXFvQ29uZmlnKSByZXR1cm4gdGhpcztcclxuICAgIGxldCByZXN1bHQgPSBuZXcgUXVlcnlPcHRpb25zKHRoaXMpO1xyXG4gICAgaWYgKCBxb0NvbmZpZyBpbnN0YW5jZW9mIE1lcmdlU3RyYXRlZ3kpIHtcclxuICAgICAgcW9Db25maWcgPSB7IG1lcmdlU3RyYXRlZ3k6IHFvQ29uZmlnIH07XHJcbiAgICB9IGVsc2UgaWYgKCBxb0NvbmZpZyBpbnN0YW5jZW9mIEZldGNoU3RyYXRlZ3kpIHtcclxuICAgICAgcW9Db25maWcgPSB7IGZldGNoU3RyYXRlZ3k6IHFvQ29uZmlnIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUXVlcnlPcHRpb25zLl91cGRhdGVXaXRoQ29uZmlnKHJlc3VsdCwgcW9Db25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgU2V0cyB0aGUgJ2RlZmF1bHRJbnN0YW5jZScgYnkgY3JlYXRpbmcgYSBjb3B5IG9mIHRoZSBjdXJyZW50ICdkZWZhdWx0SW5zdGFuY2UnIGFuZCB0aGVuIGFwcGx5aW5nIGFsbCBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBpbnN0YW5jZS5cclxuICBUaGUgY3VycmVudCBpbnN0YW5jZSBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXHJcbiAgPiAgICAgdmFyIG5ld1FvID0gbmV3IFF1ZXJ5T3B0aW9ucyggeyBtZXJnZVN0cmF0ZWd5OiBNZXJnZVN0cmF0ZWd5Lk92ZXJ3cml0ZUNoYW5nZXMgfSk7XHJcbiAgPiAgICAgbmV3UW8uc2V0QXNEZWZhdWx0KCk7XHJcbiAgKiovXHJcbiAgc2V0QXNEZWZhdWx0KCkge1xyXG4gICAgcmV0dXJuIGNvcmUuc2V0QXNEZWZhdWx0KHRoaXMsIFF1ZXJ5T3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB0b0pTT04oKSB7XHJcbiAgICByZXR1cm4gY29yZS50b0pzb24odGhpcywge1xyXG4gICAgICBmZXRjaFN0cmF0ZWd5OiBudWxsLFxyXG4gICAgICBtZXJnZVN0cmF0ZWd5OiBudWxsLFxyXG4gICAgICBpbmNsdWRlRGVsZXRlZDogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb246IGFueSkge1xyXG4gICAgcmV0dXJuIG5ldyBRdWVyeU9wdGlvbnMoe1xyXG4gICAgICBmZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LmZyb21OYW1lKGpzb24uZmV0Y2hTdHJhdGVneSksXHJcbiAgICAgIG1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3kuZnJvbU5hbWUoanNvbi5tZXJnZVN0cmF0ZWd5KSxcclxuICAgICAgaW5jbHVkZURlbGV0ZWQ6IGpzb24uaW5jbHVkZURlbGV0ZWQgPT09IHRydWVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3VwZGF0ZVdpdGhDb25maWcob2JqOiBRdWVyeU9wdGlvbnMsIGNvbmZpZz86IFF1ZXJ5T3B0aW9uc0NvbmZpZykge1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBhc3NlcnRDb25maWcoY29uZmlnKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiZmV0Y2hTdHJhdGVneVwiKS5pc0VudW1PZihGZXRjaFN0cmF0ZWd5KS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcIm1lcmdlU3RyYXRlZ3lcIikuaXNFbnVtT2YoTWVyZ2VTdHJhdGVneSkuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJpbmNsdWRlRGVsZXRlZFwiKS5pc0Jvb2xlYW4oKS5pc09wdGlvbmFsKClcclxuICAgICAgICAuYXBwbHlBbGwob2JqKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG5cclxufVxyXG5RdWVyeU9wdGlvbnMucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIlF1ZXJ5T3B0aW9uc1wiO1xyXG4iXX0=
@@ -0,0 +1,173 @@
1
+ import { core } from './core';
2
+ import { EntityQuery } from './entity-query';
3
+ import { EntityState } from './entity-state';
4
+ import { BreezeEvent } from './event';
5
+ import { observableArray } from './observable-array';
6
+ let relationArrayMixin = {
7
+ /**
8
+ Relation arrays are not actually classes, they are objects that mimic arrays. A relation array is collection of
9
+ entities associated with a navigation property on a single entity. i.e. customer.orders or order.orderDetails.
10
+ This collection looks like an array in that the basic methods on arrays such as 'push', 'pop', 'shift', 'unshift', 'splice'
11
+ are all provided as well as several special purpose methods.
12
+ @class {relationArray}
13
+ **/
14
+ /**
15
+ An [[Event]] that fires whenever the contents of this array changed. This event
16
+ is fired any time a new entity is attached or added to the EntityManager and happens to belong to this collection.
17
+ Adds that occur as a result of query or import operations are batched so that all of the adds or removes to any individual
18
+ collections are collected into a single notification event for each relation array.
19
+ @example
20
+ // assume order is an order entity attached to an EntityManager.
21
+ orders.arrayChanged.subscribe(
22
+ function (arrayChangedArgs) {
23
+ let addedEntities = arrayChangedArgs.added;
24
+ let removedEntities = arrayChanged.removed;
25
+ });
26
+ @event arrayChanged
27
+ @param added {Array of Entity} An array of all of the entities added to this collection.
28
+ @param removed {Array of Entity} An array of all of the removed from this collection.
29
+ @readOnly
30
+ **/
31
+ /**
32
+ Performs an asynchronous load of all other the entities associated with this relationArray.
33
+ @example
34
+ // assume orders is an empty, as yet unpopulated, relation array of orders
35
+ // associated with a specific customer.
36
+ orders.load().then(...)
37
+ @method load
38
+ @param [callback] {Function}
39
+ @param [errorCallback] {Function}
40
+ @return {Promise}
41
+ **/
42
+ load: function (callback, errorCallback) {
43
+ let parent = this.parentEntity;
44
+ let query = EntityQuery.fromEntityNavigation(this.parentEntity, this.navigationProperty);
45
+ let em = parent.entityAspect.entityManager;
46
+ return em.executeQuery(query, callback, errorCallback);
47
+ },
48
+ _getEventParent: function () {
49
+ return this.parentEntity.entityAspect;
50
+ },
51
+ _getPendingPubs: function () {
52
+ let em = this.parentEntity.entityAspect.entityManager;
53
+ return em && em._pendingPubs;
54
+ },
55
+ // virtual impls
56
+ _getGoodAdds: function (adds) {
57
+ return getGoodAdds(this, adds);
58
+ },
59
+ _processAdds: function (adds) {
60
+ processAdds(this, adds);
61
+ },
62
+ _processRemoves: function (removes) {
63
+ processRemoves(this, removes);
64
+ }
65
+ };
66
+ function getGoodAdds(relationArray, adds) {
67
+ let goodAdds = checkForDups(relationArray, adds);
68
+ if (!goodAdds.length) {
69
+ return goodAdds;
70
+ }
71
+ let parentEntity = relationArray.parentEntity;
72
+ let entityManager = parentEntity.entityAspect.entityManager;
73
+ // we do not want to attach an entity during loading
74
+ // because these will all be 'attached' at a later step.
75
+ if (entityManager && !entityManager.isLoading) {
76
+ goodAdds.forEach(function (add) {
77
+ if (add.entityAspect.entityState.isDetached()) {
78
+ relationArray._inProgress = true;
79
+ try {
80
+ entityManager.attachEntity(add, EntityState.Added);
81
+ }
82
+ finally {
83
+ relationArray._inProgress = false;
84
+ }
85
+ }
86
+ });
87
+ }
88
+ return goodAdds;
89
+ }
90
+ function processAdds(relationArray, adds) {
91
+ let parentEntity = relationArray.parentEntity;
92
+ let np = relationArray.navigationProperty;
93
+ let addsInProcess = relationArray._addsInProcess;
94
+ let invNp = np.inverse;
95
+ let startIx = addsInProcess.length;
96
+ try {
97
+ adds.forEach(function (childEntity) {
98
+ addsInProcess.push(childEntity);
99
+ if (invNp) {
100
+ childEntity.setProperty(invNp.name, parentEntity);
101
+ }
102
+ else {
103
+ // This occurs with a unidirectional 1-n navigation - in this case
104
+ // we need to update the fks instead of the navProp
105
+ let pks = parentEntity.entityType.keyProperties;
106
+ np.invForeignKeyNames.forEach(function (fk, i) {
107
+ childEntity.setProperty(fk, parentEntity.getProperty(pks[i].name));
108
+ });
109
+ }
110
+ });
111
+ }
112
+ finally {
113
+ addsInProcess.splice(startIx, adds.length);
114
+ }
115
+ }
116
+ function processRemoves(relationArray, removes) {
117
+ let inp = relationArray.navigationProperty.inverse;
118
+ if (inp) {
119
+ removes.forEach(function (childEntity) {
120
+ childEntity.setProperty(inp.name, null);
121
+ });
122
+ }
123
+ }
124
+ function checkForDups(relationArray, adds) {
125
+ // don't allow dups in this array. - also prevents recursion
126
+ let parentEntity = relationArray.parentEntity;
127
+ let navProp = relationArray.navigationProperty;
128
+ let inverseProp = navProp.inverse;
129
+ let goodAdds;
130
+ if (inverseProp) {
131
+ goodAdds = adds.filter(function (a) {
132
+ if (relationArray._addsInProcess.indexOf(a) >= 0) {
133
+ return false;
134
+ }
135
+ let inverseValue = a.getProperty(inverseProp.name);
136
+ return inverseValue !== parentEntity;
137
+ });
138
+ }
139
+ else {
140
+ // This occurs with a unidirectional 1->N relation ( where there is no n -> 1)
141
+ // in this case we compare fks.
142
+ let fkPropNames = navProp.invForeignKeyNames;
143
+ let keyProps = parentEntity.entityType.keyProperties;
144
+ goodAdds = adds.filter(function (a) {
145
+ if (relationArray._addsInProcess.indexOf(a) >= 0) {
146
+ return false;
147
+ }
148
+ return fkPropNames.some(function (fk, i) {
149
+ let keyProp = keyProps[i].name;
150
+ let keyVal = parentEntity.getProperty(keyProp);
151
+ let fkVal = a.getProperty(fk);
152
+ return keyVal !== fkVal;
153
+ });
154
+ });
155
+ }
156
+ return goodAdds;
157
+ }
158
+ /** For use by breeze plugin authors only. The class is for use in building a [[IModelLibraryAdapter]] implementation.
159
+ @adapter (see [[IModelLibraryAdapter]])
160
+ @hidden
161
+ */
162
+ export function makeRelationArray(arr, parentEntity, navigationProperty) {
163
+ let arrX = arr;
164
+ arrX.parentEntity = parentEntity;
165
+ arrX.navigationProperty = navigationProperty;
166
+ arrX.arrayChanged = new BreezeEvent("arrayChanged", arrX);
167
+ // array of pushes currently in process on this relation array - used to prevent recursion.
168
+ arrX._addsInProcess = [];
169
+ // need to use mixins here instead of inheritance because we are starting from an existing array object.
170
+ core.extend(arrX, observableArray.mixin);
171
+ return core.extend(arrX, relationArrayMixin);
172
+ }
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpb24tYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVsYXRpb24tYXJyYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUk5QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFtQixlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQWN0RSxJQUFJLGtCQUFrQixHQUFHO0lBRXZCOzs7Ozs7T0FNRztJQUVIOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBR0g7Ozs7Ozs7Ozs7T0FVRztJQUNILElBQUksRUFBRSxVQUFTLFFBQStCLEVBQUUsYUFBa0M7UUFDaEYsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMvQixJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN6RixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUMzQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZUFBZSxFQUFFO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztJQUN4QyxDQUFDO0lBRUQsZUFBZSxFQUFFO1FBQ2YsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUM7SUFD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Q0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDL0IsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxNQUFNLEtBQUssS0FBSyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7O0VBR0U7QUFDRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBVSxFQUFFLFlBQW9CLEVBQUUsa0JBQXNDO0lBQ3hHLElBQUksSUFBSSxHQUFHLEdBQVUsQ0FBQztJQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7SUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsMkZBQTJGO0lBQzNGLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLHdHQUF3RztJQUN4RyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBa0IsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5LWFzcGVjdCc7XHJcbmltcG9ydCB7IFF1ZXJ5RXJyb3JDYWxsYmFjaywgUXVlcnlSZXN1bHQsIFF1ZXJ5U3VjY2Vzc0NhbGxiYWNrIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IERhdGFQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSB9IGZyb20gJy4vZW50aXR5LXF1ZXJ5JztcclxuaW1wb3J0IHsgRW50aXR5U3RhdGUgfSBmcm9tICcuL2VudGl0eS1zdGF0ZSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGVBcnJheSwgb2JzZXJ2YWJsZUFycmF5IH0gZnJvbSAnLi9vYnNlcnZhYmxlLWFycmF5JztcclxuXHJcbi8vIFRPRE86IG1peGluIGltcGwgaXMgbm90IHZlcnkgdHlwZXNhZmVcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVsYXRpb25BcnJheSBleHRlbmRzIE9ic2VydmFibGVBcnJheSB7XHJcbiAgW2luZGV4OiBudW1iZXJdOiBFbnRpdHk7XHJcbiAgcGFyZW50RW50aXR5OiBFbnRpdHk7XHJcbiAgcGFyZW50UHJvcGVydHk/OiBEYXRhUHJvcGVydHk7XHJcbiAgbmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHk7XHJcbiAgX2luUHJvZ3Jlc3M/OiBib29sZWFuO1xyXG4gIF9hZGRzSW5Qcm9jZXNzOiBFbnRpdHlbXTtcclxuICBsb2FkKHF1ZXJ5U3VjY2Vzc0NhbGxiYWNrPzogUXVlcnlTdWNjZXNzQ2FsbGJhY2ssIHF1ZXJ5RXJyb3JDYWxsYmFjaz86IFF1ZXJ5RXJyb3JDYWxsYmFjayk6IFByb21pc2U8UXVlcnlSZXN1bHQ+OyBcclxufVxyXG5cclxubGV0IHJlbGF0aW9uQXJyYXlNaXhpbiA9IHtcclxuXHJcbiAgLyoqXHJcbiAgUmVsYXRpb24gYXJyYXlzIGFyZSBub3QgYWN0dWFsbHkgY2xhc3NlcywgdGhleSBhcmUgb2JqZWN0cyB0aGF0IG1pbWljIGFycmF5cy4gQSByZWxhdGlvbiBhcnJheSBpcyBjb2xsZWN0aW9uIG9mXHJcbiAgZW50aXRpZXMgYXNzb2NpYXRlZCB3aXRoIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eSBvbiBhIHNpbmdsZSBlbnRpdHkuIGkuZS4gY3VzdG9tZXIub3JkZXJzIG9yIG9yZGVyLm9yZGVyRGV0YWlscy5cclxuICBUaGlzIGNvbGxlY3Rpb24gbG9va3MgbGlrZSBhbiBhcnJheSBpbiB0aGF0IHRoZSBiYXNpYyBtZXRob2RzIG9uIGFycmF5cyBzdWNoIGFzICdwdXNoJywgJ3BvcCcsICdzaGlmdCcsICd1bnNoaWZ0JywgJ3NwbGljZSdcclxuICBhcmUgYWxsIHByb3ZpZGVkIGFzIHdlbGwgYXMgc2V2ZXJhbCBzcGVjaWFsIHB1cnBvc2UgbWV0aG9kcy5cclxuICBAY2xhc3Mge3JlbGF0aW9uQXJyYXl9XHJcbiAgKiovXHJcblxyXG4gIC8qKlxyXG4gIEFuIFtbRXZlbnRdXSB0aGF0IGZpcmVzIHdoZW5ldmVyIHRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IGNoYW5nZWQuICBUaGlzIGV2ZW50XHJcbiAgaXMgZmlyZWQgYW55IHRpbWUgYSBuZXcgZW50aXR5IGlzIGF0dGFjaGVkIG9yIGFkZGVkIHRvIHRoZSBFbnRpdHlNYW5hZ2VyIGFuZCBoYXBwZW5zIHRvIGJlbG9uZyB0byB0aGlzIGNvbGxlY3Rpb24uXHJcbiAgQWRkcyB0aGF0IG9jY3VyIGFzIGEgcmVzdWx0IG9mIHF1ZXJ5IG9yIGltcG9ydCBvcGVyYXRpb25zIGFyZSBiYXRjaGVkIHNvIHRoYXQgYWxsIG9mIHRoZSBhZGRzIG9yIHJlbW92ZXMgdG8gYW55IGluZGl2aWR1YWxcclxuICBjb2xsZWN0aW9ucyBhcmUgY29sbGVjdGVkIGludG8gYSBzaW5nbGUgbm90aWZpY2F0aW9uIGV2ZW50IGZvciBlYWNoIHJlbGF0aW9uIGFycmF5LlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIGFzc3VtZSBvcmRlciBpcyBhbiBvcmRlciBlbnRpdHkgYXR0YWNoZWQgdG8gYW4gRW50aXR5TWFuYWdlci5cclxuICAgICAgb3JkZXJzLmFycmF5Q2hhbmdlZC5zdWJzY3JpYmUoXHJcbiAgICAgIGZ1bmN0aW9uIChhcnJheUNoYW5nZWRBcmdzKSB7XHJcbiAgICAgICAgICBsZXQgYWRkZWRFbnRpdGllcyA9IGFycmF5Q2hhbmdlZEFyZ3MuYWRkZWQ7XHJcbiAgICAgICAgICBsZXQgcmVtb3ZlZEVudGl0aWVzID0gYXJyYXlDaGFuZ2VkLnJlbW92ZWQ7XHJcbiAgICAgIH0pO1xyXG4gIEBldmVudCBhcnJheUNoYW5nZWRcclxuICBAcGFyYW0gYWRkZWQge0FycmF5IG9mIEVudGl0eX0gQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSBlbnRpdGllcyBhZGRlZCB0byB0aGlzIGNvbGxlY3Rpb24uXHJcbiAgQHBhcmFtIHJlbW92ZWQge0FycmF5IG9mIEVudGl0eX0gQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSByZW1vdmVkIGZyb20gdGhpcyBjb2xsZWN0aW9uLlxyXG4gIEByZWFkT25seVxyXG4gICoqL1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgUGVyZm9ybXMgYW4gYXN5bmNocm9ub3VzIGxvYWQgb2YgYWxsIG90aGVyIHRoZSBlbnRpdGllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyByZWxhdGlvbkFycmF5LlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIGFzc3VtZSBvcmRlcnMgaXMgYW4gZW1wdHksIGFzIHlldCB1bnBvcHVsYXRlZCwgcmVsYXRpb24gYXJyYXkgb2Ygb3JkZXJzXHJcbiAgICAgIC8vIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGN1c3RvbWVyLlxyXG4gICAgICBvcmRlcnMubG9hZCgpLnRoZW4oLi4uKVxyXG4gIEBtZXRob2QgbG9hZFxyXG4gIEBwYXJhbSBbY2FsbGJhY2tdIHtGdW5jdGlvbn1cclxuICBAcGFyYW0gW2Vycm9yQ2FsbGJhY2tdIHtGdW5jdGlvbn1cclxuICBAcmV0dXJuIHtQcm9taXNlfVxyXG4gICoqL1xyXG4gIGxvYWQ6IGZ1bmN0aW9uKGNhbGxiYWNrPzogUXVlcnlTdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s/OiBRdWVyeUVycm9yQ2FsbGJhY2spOiBQcm9taXNlPFF1ZXJ5UmVzdWx0PiB7XHJcbiAgICBsZXQgcGFyZW50ID0gdGhpcy5wYXJlbnRFbnRpdHk7XHJcbiAgICBsZXQgcXVlcnkgPSBFbnRpdHlRdWVyeS5mcm9tRW50aXR5TmF2aWdhdGlvbih0aGlzLnBhcmVudEVudGl0eSwgdGhpcy5uYXZpZ2F0aW9uUHJvcGVydHkpO1xyXG4gICAgbGV0IGVtID0gcGFyZW50LmVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gICAgcmV0dXJuIGVtLmV4ZWN1dGVRdWVyeShxdWVyeSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xyXG4gIH0sXHJcblxyXG4gIF9nZXRFdmVudFBhcmVudDogZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRFbnRpdHkuZW50aXR5QXNwZWN0O1xyXG4gIH0sXHJcblxyXG4gIF9nZXRQZW5kaW5nUHViczogZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgZW0gPSB0aGlzLnBhcmVudEVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlcjtcclxuICAgIHJldHVybiBlbSAmJiBlbS5fcGVuZGluZ1B1YnM7XHJcbiAgfSxcclxuXHJcbiAgLy8gdmlydHVhbCBpbXBsc1xyXG4gIF9nZXRHb29kQWRkczogZnVuY3Rpb24oYWRkczogRW50aXR5W10pIHtcclxuICAgIHJldHVybiBnZXRHb29kQWRkcyh0aGlzLCBhZGRzKTtcclxuICB9LFxyXG5cclxuICBfcHJvY2Vzc0FkZHM6IGZ1bmN0aW9uKGFkZHM6IEVudGl0eVtdKSB7XHJcbiAgICBwcm9jZXNzQWRkcyh0aGlzLCBhZGRzKTtcclxuICB9LFxyXG5cclxuICBfcHJvY2Vzc1JlbW92ZXM6IGZ1bmN0aW9uKHJlbW92ZXM6IEVudGl0eVtdKSB7XHJcbiAgICBwcm9jZXNzUmVtb3Zlcyh0aGlzLCByZW1vdmVzKTtcclxuICB9XHJcblxyXG59O1xyXG5cclxuZnVuY3Rpb24gZ2V0R29vZEFkZHMocmVsYXRpb25BcnJheTogUmVsYXRpb25BcnJheSwgYWRkczogRW50aXR5W10pIHtcclxuICBsZXQgZ29vZEFkZHMgPSBjaGVja0ZvckR1cHMocmVsYXRpb25BcnJheSwgYWRkcyk7XHJcbiAgaWYgKCFnb29kQWRkcy5sZW5ndGgpIHtcclxuICAgIHJldHVybiBnb29kQWRkcztcclxuICB9XHJcbiAgbGV0IHBhcmVudEVudGl0eSA9IHJlbGF0aW9uQXJyYXkucGFyZW50RW50aXR5O1xyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gcGFyZW50RW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gIC8vIHdlIGRvIG5vdCB3YW50IHRvIGF0dGFjaCBhbiBlbnRpdHkgZHVyaW5nIGxvYWRpbmdcclxuICAvLyBiZWNhdXNlIHRoZXNlIHdpbGwgYWxsIGJlICdhdHRhY2hlZCcgYXQgYSBsYXRlciBzdGVwLlxyXG4gIGlmIChlbnRpdHlNYW5hZ2VyICYmICFlbnRpdHlNYW5hZ2VyLmlzTG9hZGluZykge1xyXG4gICAgZ29vZEFkZHMuZm9yRWFjaChmdW5jdGlvbiAoYWRkKSB7XHJcbiAgICAgIGlmIChhZGQuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSkge1xyXG4gICAgICAgIHJlbGF0aW9uQXJyYXkuX2luUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBlbnRpdHlNYW5hZ2VyIS5hdHRhY2hFbnRpdHkoYWRkLCBFbnRpdHlTdGF0ZS5BZGRlZCk7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgIHJlbGF0aW9uQXJyYXkuX2luUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICByZXR1cm4gZ29vZEFkZHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NBZGRzKHJlbGF0aW9uQXJyYXk6IFJlbGF0aW9uQXJyYXksIGFkZHM6IEVudGl0eVtdKSB7XHJcbiAgbGV0IHBhcmVudEVudGl0eSA9IHJlbGF0aW9uQXJyYXkucGFyZW50RW50aXR5O1xyXG4gIGxldCBucCA9IHJlbGF0aW9uQXJyYXkubmF2aWdhdGlvblByb3BlcnR5O1xyXG4gIGxldCBhZGRzSW5Qcm9jZXNzID0gcmVsYXRpb25BcnJheS5fYWRkc0luUHJvY2VzcztcclxuXHJcbiAgbGV0IGludk5wID0gbnAuaW52ZXJzZTtcclxuICBsZXQgc3RhcnRJeCA9IGFkZHNJblByb2Nlc3MubGVuZ3RoO1xyXG4gIHRyeSB7XHJcbiAgICBhZGRzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkRW50aXR5KSB7XHJcbiAgICAgIGFkZHNJblByb2Nlc3MucHVzaChjaGlsZEVudGl0eSk7XHJcbiAgICAgIGlmIChpbnZOcCkge1xyXG4gICAgICAgIGNoaWxkRW50aXR5LnNldFByb3BlcnR5KGludk5wLm5hbWUsIHBhcmVudEVudGl0eSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVGhpcyBvY2N1cnMgd2l0aCBhIHVuaWRpcmVjdGlvbmFsIDEtbiBuYXZpZ2F0aW9uIC0gaW4gdGhpcyBjYXNlXHJcbiAgICAgICAgLy8gd2UgbmVlZCB0byB1cGRhdGUgdGhlIGZrcyBpbnN0ZWFkIG9mIHRoZSBuYXZQcm9wXHJcbiAgICAgICAgbGV0IHBrcyA9IHBhcmVudEVudGl0eS5lbnRpdHlUeXBlLmtleVByb3BlcnRpZXM7XHJcbiAgICAgICAgbnAuaW52Rm9yZWlnbktleU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKGZrLCBpKSB7XHJcbiAgICAgICAgICBjaGlsZEVudGl0eS5zZXRQcm9wZXJ0eShmaywgcGFyZW50RW50aXR5LmdldFByb3BlcnR5KHBrc1tpXS5uYW1lKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0gZmluYWxseSB7XHJcbiAgICBhZGRzSW5Qcm9jZXNzLnNwbGljZShzdGFydEl4LCBhZGRzLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc1JlbW92ZXMocmVsYXRpb25BcnJheTogUmVsYXRpb25BcnJheSwgcmVtb3ZlczogRW50aXR5W10pIHtcclxuICBsZXQgaW5wID0gcmVsYXRpb25BcnJheS5uYXZpZ2F0aW9uUHJvcGVydHkuaW52ZXJzZTtcclxuICBpZiAoaW5wKSB7XHJcbiAgICByZW1vdmVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkRW50aXR5KSB7XHJcbiAgICAgIGNoaWxkRW50aXR5LnNldFByb3BlcnR5KGlucCEubmFtZSwgbnVsbCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrRm9yRHVwcyhyZWxhdGlvbkFycmF5OiBSZWxhdGlvbkFycmF5LCBhZGRzOiBFbnRpdHlbXSkge1xyXG4gIC8vIGRvbid0IGFsbG93IGR1cHMgaW4gdGhpcyBhcnJheS4gLSBhbHNvIHByZXZlbnRzIHJlY3Vyc2lvblxyXG4gIGxldCBwYXJlbnRFbnRpdHkgPSByZWxhdGlvbkFycmF5LnBhcmVudEVudGl0eTtcclxuICBsZXQgbmF2UHJvcCA9IHJlbGF0aW9uQXJyYXkubmF2aWdhdGlvblByb3BlcnR5O1xyXG4gIGxldCBpbnZlcnNlUHJvcCA9IG5hdlByb3AuaW52ZXJzZTtcclxuICBsZXQgZ29vZEFkZHM6IEVudGl0eVtdO1xyXG4gIGlmIChpbnZlcnNlUHJvcCkge1xyXG4gICAgZ29vZEFkZHMgPSBhZGRzLmZpbHRlcihmdW5jdGlvbiAoYSkge1xyXG4gICAgICBpZiAocmVsYXRpb25BcnJheS5fYWRkc0luUHJvY2Vzcy5pbmRleE9mKGEpID49IDApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGludmVyc2VWYWx1ZSA9IGEuZ2V0UHJvcGVydHkoaW52ZXJzZVByb3AhLm5hbWUpO1xyXG4gICAgICByZXR1cm4gaW52ZXJzZVZhbHVlICE9PSBwYXJlbnRFbnRpdHk7XHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gVGhpcyBvY2N1cnMgd2l0aCBhIHVuaWRpcmVjdGlvbmFsIDEtPk4gcmVsYXRpb24gKCB3aGVyZSB0aGVyZSBpcyBubyBuIC0+IDEpXHJcbiAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgY29tcGFyZSBma3MuXHJcbiAgICBsZXQgZmtQcm9wTmFtZXMgPSBuYXZQcm9wLmludkZvcmVpZ25LZXlOYW1lcztcclxuICAgIGxldCBrZXlQcm9wcyA9IHBhcmVudEVudGl0eS5lbnRpdHlUeXBlLmtleVByb3BlcnRpZXM7XHJcbiAgICBnb29kQWRkcyA9IGFkZHMuZmlsdGVyKGZ1bmN0aW9uIChhKSB7XHJcbiAgICAgIGlmIChyZWxhdGlvbkFycmF5Ll9hZGRzSW5Qcm9jZXNzLmluZGV4T2YoYSkgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmtQcm9wTmFtZXMuc29tZShmdW5jdGlvbiAoZmssIGkpIHtcclxuICAgICAgICBsZXQga2V5UHJvcCA9IGtleVByb3BzW2ldLm5hbWU7XHJcbiAgICAgICAgbGV0IGtleVZhbCA9IHBhcmVudEVudGl0eS5nZXRQcm9wZXJ0eShrZXlQcm9wKTtcclxuICAgICAgICBsZXQgZmtWYWwgPSBhLmdldFByb3BlcnR5KGZrKTtcclxuICAgICAgICByZXR1cm4ga2V5VmFsICE9PSBma1ZhbDtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmV0dXJuIGdvb2RBZGRzO1xyXG59XHJcblxyXG4vKiogRm9yIHVzZSBieSBicmVlemUgcGx1Z2luIGF1dGhvcnMgb25seS4gVGhlIGNsYXNzIGlzIGZvciB1c2UgaW4gYnVpbGRpbmcgYSBbW0lNb2RlbExpYnJhcnlBZGFwdGVyXV0gaW1wbGVtZW50YXRpb24uIFxyXG5AYWRhcHRlciAoc2VlIFtbSU1vZGVsTGlicmFyeUFkYXB0ZXJdXSkgICAgXHJcbkBoaWRkZW4gXHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBtYWtlUmVsYXRpb25BcnJheShhcnI6IGFueVtdLCBwYXJlbnRFbnRpdHk6IEVudGl0eSwgbmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkpOiBSZWxhdGlvbkFycmF5IHtcclxuICBsZXQgYXJyWCA9IGFyciBhcyBhbnk7XHJcbiAgYXJyWC5wYXJlbnRFbnRpdHkgPSBwYXJlbnRFbnRpdHk7XHJcbiAgYXJyWC5uYXZpZ2F0aW9uUHJvcGVydHkgPSBuYXZpZ2F0aW9uUHJvcGVydHk7XHJcbiAgYXJyWC5hcnJheUNoYW5nZWQgPSBuZXcgQnJlZXplRXZlbnQoXCJhcnJheUNoYW5nZWRcIiwgYXJyWCk7XHJcbiAgLy8gYXJyYXkgb2YgcHVzaGVzIGN1cnJlbnRseSBpbiBwcm9jZXNzIG9uIHRoaXMgcmVsYXRpb24gYXJyYXkgLSB1c2VkIHRvIHByZXZlbnQgcmVjdXJzaW9uLlxyXG4gIGFyclguX2FkZHNJblByb2Nlc3MgPSBbXTtcclxuICAvLyBuZWVkIHRvIHVzZSBtaXhpbnMgaGVyZSBpbnN0ZWFkIG9mIGluaGVyaXRhbmNlIGJlY2F1c2Ugd2UgYXJlIHN0YXJ0aW5nIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkgb2JqZWN0LlxyXG4gIGNvcmUuZXh0ZW5kKGFyclgsIG9ic2VydmFibGVBcnJheS5taXhpbik7XHJcbiAgcmV0dXJuIGNvcmUuZXh0ZW5kKGFyclgsIHJlbGF0aW9uQXJyYXlNaXhpbikgYXMgUmVsYXRpb25BcnJheTtcclxufVxyXG4iXX0=
@@ -0,0 +1,51 @@
1
+ import { core } from './core';
2
+ import { assertConfig } from './assert-param';
3
+ import { DataService } from './data-service';
4
+ /**
5
+ A SaveOptions instance is used to specify the 'options' under which a save will occur.
6
+ **/
7
+ export class SaveOptions {
8
+ /** @hidden @internal */
9
+ _$typeName; // on proto
10
+ /** Resource name to be used during the save - this defaults to "SaveChanges". __Read Only__ */
11
+ resourceName;
12
+ /** The DataService to be used for this save. __Read Only__ */
13
+ dataService;
14
+ /** Whether multiple saves can be in-flight at the same time. The default is false. __Read Only__ */
15
+ allowConcurrentSaves;
16
+ /** Free form value that will be sent to the server during the save. __Read Only__ */
17
+ tag;
18
+ /** The default value whenever SaveOptions are not specified. */
19
+ static defaultInstance = new SaveOptions({ allowConcurrentSaves: false });
20
+ constructor(config) {
21
+ SaveOptions._updateWithConfig(this, config);
22
+ }
23
+ /**
24
+ Sets the 'defaultInstance' by creating a copy of the current 'defaultInstance' and then applying all of the properties of the current instance.
25
+ The current instance is returned unchanged.
26
+ **/
27
+ setAsDefault() {
28
+ return core.setAsDefault(this, SaveOptions);
29
+ }
30
+ /**
31
+ Returns a copy of this SaveOptions with the specified config options applied.
32
+ > var saveOptions = em1.saveOptions.using( {resourceName: "anotherResource" });
33
+ **/
34
+ using(config) {
35
+ return SaveOptions._updateWithConfig(this, config);
36
+ }
37
+ /** @hidden @internal */
38
+ static _updateWithConfig(obj, config) {
39
+ if (config) {
40
+ assertConfig(config)
41
+ .whereParam("resourceName").isOptional().isString()
42
+ .whereParam("dataService").isOptional().isInstanceOf(DataService)
43
+ .whereParam("allowConcurrentSaves").isBoolean().isOptional()
44
+ .whereParam("tag").isOptional()
45
+ .applyAll(obj);
46
+ }
47
+ return obj;
48
+ }
49
+ }
50
+ SaveOptions.prototype._$typeName = "SaveOptions";
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NhdmUtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFjN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUN0Qix3QkFBd0I7SUFDeEIsVUFBVSxDQUFTLENBQUMsV0FBVztJQUMvQiwrRkFBK0Y7SUFDL0YsWUFBWSxDQUFTO0lBQ3JCLDhEQUE4RDtJQUM5RCxXQUFXLENBQWM7SUFDekIsb0dBQW9HO0lBQ3BHLG9CQUFvQixDQUFVO0lBQzlCLHFGQUFxRjtJQUNyRixHQUFHLENBQU07SUFFVCxnRUFBZ0U7SUFDaEUsTUFBTSxDQUFDLGVBQWUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7SUFFekUsWUFBWSxNQUEwQjtRQUNwQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFHRDs7O09BR0c7SUFDSCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLE1BQXlCO1FBQzdCLE9BQU8sV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsd0JBQXdCO0lBQ2hCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFnQixFQUFFLE1BQXlCO1FBQzFFLElBQUksTUFBTSxFQUFFO1lBQ1YsWUFBWSxDQUFDLE1BQU0sQ0FBQztpQkFDZixVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFO2lCQUNsRCxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztpQkFDaEUsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFO2lCQUMzRCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFO2lCQUM5QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O0FBR0gsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IGFzc2VydENvbmZpZyB9IGZyb20gJy4vYXNzZXJ0LXBhcmFtJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuL2RhdGEtc2VydmljZSc7XHJcblxyXG4vKiogQ29uZmlndXJhdGlvbiBpbmZvIHRvIGJlIHBhc3NlZCB0byB0aGUgW1tTYXZlT3B0aW9uc11dIGNvbnN0cnVjdG9yICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZU9wdGlvbnNDb25maWcge1xyXG4gIC8qKiBSZXNvdXJjZSBuYW1lIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSBzYXZlIC0gdGhpcyBkZWZhdWx0cyB0byBcIlNhdmVDaGFuZ2VzXCIgKi9cclxuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBEYXRhU2VydmljZSB0byBiZSB1c2VkIGZvciB0aGlzIHNhdmUuICovXHJcbiAgZGF0YVNlcnZpY2U/OiBEYXRhU2VydmljZTtcclxuICAvKiogV2hldGhlciBtdWx0aXBsZSBzYXZlcyBjYW4gYmUgaW4tZmxpZ2h0IGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBkZWZhdWx0IGlzIGZhbHNlLiAqL1xyXG4gIGFsbG93Q29uY3VycmVudFNhdmVzPzogYm9vbGVhbjtcclxuICAvKiogRnJlZSBmb3JtIHZhbHVlIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgZHVyaW5nIHRoZSBzYXZlLiAqL1xyXG4gIHRhZz86IGFueTtcclxufVxyXG5cclxuLyoqXHJcbkEgU2F2ZU9wdGlvbnMgaW5zdGFuY2UgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSAnb3B0aW9ucycgdW5kZXIgd2hpY2ggYSBzYXZlIHdpbGwgb2NjdXIuXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgU2F2ZU9wdGlvbnMge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF8kdHlwZU5hbWU6IHN0cmluZzsgLy8gb24gcHJvdG9cclxuICAvKiogUmVzb3VyY2UgbmFtZSB0byBiZSB1c2VkIGR1cmluZyB0aGUgc2F2ZSAtIHRoaXMgZGVmYXVsdHMgdG8gXCJTYXZlQ2hhbmdlc1wiLiBfX1JlYWQgT25seV9fICovXHJcbiAgcmVzb3VyY2VOYW1lOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBEYXRhU2VydmljZSB0byBiZSB1c2VkIGZvciB0aGlzIHNhdmUuIF9fUmVhZCBPbmx5X18gKi9cclxuICBkYXRhU2VydmljZTogRGF0YVNlcnZpY2U7XHJcbiAgLyoqIFdoZXRoZXIgbXVsdGlwbGUgc2F2ZXMgY2FuIGJlIGluLWZsaWdodCBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgZGVmYXVsdCBpcyBmYWxzZS4gX19SZWFkIE9ubHlfXyAqL1xyXG4gIGFsbG93Q29uY3VycmVudFNhdmVzOiBib29sZWFuO1xyXG4gIC8qKiBGcmVlIGZvcm0gdmFsdWUgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdGhlIHNlcnZlciBkdXJpbmcgdGhlIHNhdmUuIF9fUmVhZCBPbmx5X18gKi9cclxuICB0YWc6IGFueTtcclxuXHJcbiAgLyoqIFRoZSBkZWZhdWx0IHZhbHVlIHdoZW5ldmVyIFNhdmVPcHRpb25zIGFyZSBub3Qgc3BlY2lmaWVkLiAqL1xyXG4gIHN0YXRpYyBkZWZhdWx0SW5zdGFuY2UgPSBuZXcgU2F2ZU9wdGlvbnMoeyBhbGxvd0NvbmN1cnJlbnRTYXZlczogZmFsc2V9KTtcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnPzogU2F2ZU9wdGlvbnNDb25maWcpIHtcclxuICAgIFNhdmVPcHRpb25zLl91cGRhdGVXaXRoQ29uZmlnKHRoaXMsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgU2V0cyB0aGUgJ2RlZmF1bHRJbnN0YW5jZScgYnkgY3JlYXRpbmcgYSBjb3B5IG9mIHRoZSBjdXJyZW50ICdkZWZhdWx0SW5zdGFuY2UnIGFuZCB0aGVuIGFwcGx5aW5nIGFsbCBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBpbnN0YW5jZS5cclxuICBUaGUgY3VycmVudCBpbnN0YW5jZSBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXHJcbiAgKiovXHJcbiAgc2V0QXNEZWZhdWx0KCkge1xyXG4gICAgcmV0dXJuIGNvcmUuc2V0QXNEZWZhdWx0KHRoaXMsIFNhdmVPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgU2F2ZU9wdGlvbnMgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZyBvcHRpb25zIGFwcGxpZWQuXHJcbiAgPiAgICAgdmFyIHNhdmVPcHRpb25zID0gZW0xLnNhdmVPcHRpb25zLnVzaW5nKCB7cmVzb3VyY2VOYW1lOiBcImFub3RoZXJSZXNvdXJjZVwiIH0pO1xyXG4gICoqL1xyXG4gIHVzaW5nKGNvbmZpZzogU2F2ZU9wdGlvbnNDb25maWcpIHtcclxuICAgIHJldHVybiBTYXZlT3B0aW9ucy5fdXBkYXRlV2l0aENvbmZpZyh0aGlzLCBjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3VwZGF0ZVdpdGhDb25maWcob2JqOiBTYXZlT3B0aW9ucywgY29uZmlnOiBTYXZlT3B0aW9uc0NvbmZpZykge1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBhc3NlcnRDb25maWcoY29uZmlnKVxyXG4gICAgICAgICAgLndoZXJlUGFyYW0oXCJyZXNvdXJjZU5hbWVcIikuaXNPcHRpb25hbCgpLmlzU3RyaW5nKClcclxuICAgICAgICAgIC53aGVyZVBhcmFtKFwiZGF0YVNlcnZpY2VcIikuaXNPcHRpb25hbCgpLmlzSW5zdGFuY2VPZihEYXRhU2VydmljZSlcclxuICAgICAgICAgIC53aGVyZVBhcmFtKFwiYWxsb3dDb25jdXJyZW50U2F2ZXNcIikuaXNCb29sZWFuKCkuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgICAud2hlcmVQYXJhbShcInRhZ1wiKS5pc09wdGlvbmFsKClcclxuICAgICAgICAgIC5hcHBseUFsbChvYmopO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG59XHJcblNhdmVPcHRpb25zLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJTYXZlT3B0aW9uc1wiO1xyXG5cclxuXHJcblxyXG4iXX0=
@@ -0,0 +1,56 @@
1
+ import { core } from './core';
2
+ /** @hidden @internal */
3
+ // Represents entities not yet attached to navigationProperties.
4
+ export class UnattachedChildrenMap {
5
+ // key is EntityKey.toString(), value is array of { navigationProperty, children }
6
+ map = {};
7
+ addChild(parentEntityKey, navigationProperty, child) {
8
+ let tuple = this.getTuple(parentEntityKey, navigationProperty);
9
+ if (!tuple) {
10
+ tuple = { navigationProperty: navigationProperty, children: [] };
11
+ core.getArray(this.map, parentEntityKey.toString()).push(tuple);
12
+ }
13
+ tuple.children.push(child);
14
+ }
15
+ removeChildren(parentEntityKeyString, navigationProperty) {
16
+ let tuples = this.map[parentEntityKeyString];
17
+ if (!tuples)
18
+ return;
19
+ core.arrayRemoveItem(tuples, (t) => {
20
+ return t.navigationProperty === navigationProperty;
21
+ });
22
+ if (!tuples.length) {
23
+ delete this.map[parentEntityKeyString];
24
+ }
25
+ }
26
+ getTuple(parentEntityKey, navigationProperty) {
27
+ let tuples = this.getTuples(parentEntityKey);
28
+ if (!tuples)
29
+ return null;
30
+ let tuple = core.arrayFirst(tuples, function (t) {
31
+ return t.navigationProperty === navigationProperty;
32
+ });
33
+ return tuple;
34
+ }
35
+ getTuples(parentEntityKey) {
36
+ let allTuples = [];
37
+ let tuples = this.map[parentEntityKey.toString()];
38
+ if (tuples) {
39
+ allTuples = allTuples.concat(tuples);
40
+ }
41
+ let entityType = parentEntityKey.entityType;
42
+ while (entityType.baseEntityType) {
43
+ entityType = entityType.baseEntityType;
44
+ let baseKey = parentEntityKey.toString(entityType);
45
+ tuples = this.map[baseKey];
46
+ if (tuples) {
47
+ allTuples = allTuples.concat(tuples);
48
+ }
49
+ }
50
+ return (allTuples.length) ? allTuples : undefined;
51
+ }
52
+ getTuplesByString(parentEntityKeyString) {
53
+ return this.map[parentEntityKeyString];
54
+ }
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hdHRhY2hlZC1jaGlsZHJlbi1tYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5hdHRhY2hlZC1jaGlsZHJlbi1tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQVc5Qix3QkFBd0I7QUFDeEIsaUVBQWlFO0FBQ2pFLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMsa0ZBQWtGO0lBQ2xGLEdBQUcsR0FBcUMsRUFBRSxDQUFDO0lBRzNDLFFBQVEsQ0FBQyxlQUEwQixFQUFFLGtCQUFzQyxFQUFFLEtBQWE7UUFDeEYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsS0FBSyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakU7UUFDRCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYyxDQUFDLHFCQUE2QixFQUFFLGtCQUFzQztRQUNsRixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDdEMsT0FBTyxDQUFDLENBQUMsa0JBQWtCLEtBQUssa0JBQWtCLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsZUFBMEIsRUFBRSxrQkFBc0M7UUFDekUsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQztZQUM3QyxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsS0FBSyxrQkFBa0IsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVMsQ0FBQyxlQUEwQjtRQUNsQyxJQUFJLFNBQVMsR0FBZ0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxNQUFNLEVBQUU7WUFDVixTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksVUFBVSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUM7UUFDNUMsT0FBTyxVQUFVLENBQUMsY0FBYyxFQUFFO1lBQ2hDLFVBQVUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQ3ZDLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0IsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDdEM7U0FDRjtRQUNELE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxxQkFBNkI7UUFDN0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDekMsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5LWFzcGVjdCc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuXHJcbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElOYXZUdXBsZSB7XHJcbiAgbmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHk7XHJcbiAgY2hpbGRyZW46IEVudGl0eVtdO1xyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuLy8gUmVwcmVzZW50cyBlbnRpdGllcyBub3QgeWV0IGF0dGFjaGVkIHRvIG5hdmlnYXRpb25Qcm9wZXJ0aWVzLiBcclxuZXhwb3J0IGNsYXNzIFVuYXR0YWNoZWRDaGlsZHJlbk1hcCB7XHJcbiAgLy8ga2V5IGlzIEVudGl0eUtleS50b1N0cmluZygpLCB2YWx1ZSBpcyBhcnJheSBvZiB7IG5hdmlnYXRpb25Qcm9wZXJ0eSwgY2hpbGRyZW4gfVxyXG4gIG1hcDogeyBbaW5kZXg6IHN0cmluZ106IElOYXZUdXBsZVtdIH0gPSB7fTtcclxuXHJcblxyXG4gIGFkZENoaWxkKHBhcmVudEVudGl0eUtleTogRW50aXR5S2V5LCBuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSwgY2hpbGQ6IEVudGl0eSkge1xyXG4gICAgbGV0IHR1cGxlID0gdGhpcy5nZXRUdXBsZShwYXJlbnRFbnRpdHlLZXksIG5hdmlnYXRpb25Qcm9wZXJ0eSk7XHJcbiAgICBpZiAoIXR1cGxlKSB7XHJcbiAgICAgIHR1cGxlID0geyBuYXZpZ2F0aW9uUHJvcGVydHk6IG5hdmlnYXRpb25Qcm9wZXJ0eSwgY2hpbGRyZW46IFtdIH07XHJcbiAgICAgIGNvcmUuZ2V0QXJyYXkodGhpcy5tYXAsIHBhcmVudEVudGl0eUtleS50b1N0cmluZygpKS5wdXNoKHR1cGxlKTtcclxuICAgIH1cclxuICAgIHR1cGxlLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2hpbGRyZW4ocGFyZW50RW50aXR5S2V5U3RyaW5nOiBzdHJpbmcsIG5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5KSB7XHJcbiAgICBsZXQgdHVwbGVzID0gdGhpcy5tYXBbcGFyZW50RW50aXR5S2V5U3RyaW5nXTtcclxuICAgIGlmICghdHVwbGVzKSByZXR1cm47XHJcbiAgICBjb3JlLmFycmF5UmVtb3ZlSXRlbSh0dXBsZXMsICh0OiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHQubmF2aWdhdGlvblByb3BlcnR5ID09PSBuYXZpZ2F0aW9uUHJvcGVydHk7XHJcbiAgICB9KTtcclxuICAgIGlmICghdHVwbGVzLmxlbmd0aCkge1xyXG4gICAgICBkZWxldGUgdGhpcy5tYXBbcGFyZW50RW50aXR5S2V5U3RyaW5nXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFR1cGxlKHBhcmVudEVudGl0eUtleTogRW50aXR5S2V5LCBuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSkge1xyXG4gICAgbGV0IHR1cGxlcyA9IHRoaXMuZ2V0VHVwbGVzKHBhcmVudEVudGl0eUtleSk7XHJcbiAgICBpZiAoIXR1cGxlcykgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgdHVwbGUgPSBjb3JlLmFycmF5Rmlyc3QodHVwbGVzLCBmdW5jdGlvbiAodCkge1xyXG4gICAgICByZXR1cm4gdC5uYXZpZ2F0aW9uUHJvcGVydHkgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHR1cGxlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHVwbGVzKHBhcmVudEVudGl0eUtleTogRW50aXR5S2V5KSB7XHJcbiAgICBsZXQgYWxsVHVwbGVzOiBJTmF2VHVwbGVbXSA9IFtdO1xyXG4gICAgbGV0IHR1cGxlcyA9IHRoaXMubWFwW3BhcmVudEVudGl0eUtleS50b1N0cmluZygpXTtcclxuICAgIGlmICh0dXBsZXMpIHtcclxuICAgICAgYWxsVHVwbGVzID0gYWxsVHVwbGVzLmNvbmNhdCh0dXBsZXMpO1xyXG4gICAgfVxyXG4gICAgbGV0IGVudGl0eVR5cGUgPSBwYXJlbnRFbnRpdHlLZXkuZW50aXR5VHlwZTtcclxuICAgIHdoaWxlIChlbnRpdHlUeXBlLmJhc2VFbnRpdHlUeXBlKSB7XHJcbiAgICAgIGVudGl0eVR5cGUgPSBlbnRpdHlUeXBlLmJhc2VFbnRpdHlUeXBlO1xyXG4gICAgICBsZXQgYmFzZUtleSA9IHBhcmVudEVudGl0eUtleS50b1N0cmluZyhlbnRpdHlUeXBlKTtcclxuICAgICAgdHVwbGVzID0gdGhpcy5tYXBbYmFzZUtleV07XHJcbiAgICAgIGlmICh0dXBsZXMpIHtcclxuICAgICAgICBhbGxUdXBsZXMgPSBhbGxUdXBsZXMuY29uY2F0KHR1cGxlcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAoYWxsVHVwbGVzLmxlbmd0aCkgPyBhbGxUdXBsZXMgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRUdXBsZXNCeVN0cmluZyhwYXJlbnRFbnRpdHlLZXlTdHJpbmc6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwW3BhcmVudEVudGl0eUtleVN0cmluZ107XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=