breeze-client 2.2.0 → 2.2.1-cjs

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 (377) 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 +747 -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 +333 -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 +14234 -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 +463 -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 +100 -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 +327 -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 +714 -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 +506 -0
  136. package/esm2015/src/default-property-interceptor.js +460 -0
  137. package/{esm2022/src/entity-action.mjs → esm2015/src/entity-action.js} +25 -25
  138. package/esm2015/src/entity-aspect.js +804 -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 +1015 -0
  144. package/esm2015/src/entity-state.js +107 -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 +411 -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 +1242 -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/{esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs → esm5/adapter-data-service-odata/adapter-data-service-odata.js} +147 -138
  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 +105 -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 +333 -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 +722 -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 +513 -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 +810 -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 +1042 -0
  213. package/esm5/src/entity-state.js +114 -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 +413 -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 +1307 -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/{esm2022/src/validate.mjs → esm5/src/validate.js} +110 -116
  229. package/esm5/src/validation-options.js +66 -0
  230. package/{fesm2022/breeze-client-adapter-ajax-angularjs.mjs → fesm2015/breeze-client-adapter-ajax-angularjs.js} +1 -6
  231. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  232. package/{fesm2022/breeze-client-adapter-ajax-fetch.mjs → fesm2015/breeze-client-adapter-ajax-fetch.js} +4 -9
  233. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +1 -0
  234. package/{fesm2022/breeze-client-adapter-ajax-httpclient.mjs → fesm2015/breeze-client-adapter-ajax-httpclient.js} +4 -6
  235. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  236. package/{fesm2022/breeze-client-adapter-ajax-jquery.mjs → fesm2015/breeze-client-adapter-ajax-jquery.js} +2 -6
  237. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +1 -0
  238. package/{fesm2022/breeze-client-adapter-ajax-post.mjs → fesm2015/breeze-client-adapter-ajax-post.js} +1 -1
  239. package/fesm2015/breeze-client-adapter-ajax-post.js.map +1 -0
  240. package/{fesm2022/breeze-client-adapter-data-service-odata.mjs → fesm2015/breeze-client-adapter-data-service-odata.js} +69 -68
  241. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -0
  242. package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → fesm2015/breeze-client-adapter-data-service-webapi.js} +30 -30
  243. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -0
  244. package/{fesm2022/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/{fesm2022/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/{fesm2022/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/{fesm2022/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/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → fesm2015/breeze-client-mixin-get-entity-graph.js} +1 -1
  253. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +1 -0
  254. package/{fesm2022/breeze-client-mixin-save-queuing.mjs → fesm2015/breeze-client-mixin-save-queuing.js} +2 -23
  255. package/fesm2015/breeze-client-mixin-save-queuing.js.map +1 -0
  256. package/{fesm2022/breeze-client.mjs → fesm2015/breeze-client.js} +1543 -2042
  257. package/fesm2015/breeze-client.js.map +1 -0
  258. package/fesm5/breeze-client-adapter-ajax-angularjs.js +186 -0
  259. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  260. package/fesm5/breeze-client-adapter-ajax-fetch.js +186 -0
  261. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +1 -0
  262. package/fesm5/breeze-client-adapter-ajax-httpclient.js +193 -0
  263. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  264. package/fesm5/breeze-client-adapter-ajax-jquery.js +111 -0
  265. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +1 -0
  266. package/fesm5/breeze-client-adapter-ajax-post.js +86 -0
  267. package/fesm5/breeze-client-adapter-ajax-post.js.map +1 -0
  268. package/fesm5/breeze-client-adapter-data-service-odata.js +523 -0
  269. package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -0
  270. package/fesm5/breeze-client-adapter-data-service-webapi.js +111 -0
  271. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -0
  272. package/fesm5/breeze-client-adapter-model-library-backing-store.js +276 -0
  273. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  274. package/fesm5/breeze-client-adapter-model-library-ko.js +248 -0
  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/fesm5/breeze-client-mixin-get-entity-graph.js +254 -0
  281. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +1 -0
  282. package/fesm5/breeze-client-mixin-save-queuing.js +356 -0
  283. package/fesm5/breeze-client-mixin-save-queuing.js.map +1 -0
  284. package/fesm5/breeze-client.js +13956 -0
  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 +12 -94
  293. package/src/config.d.ts +1 -1
  294. package/src/core.d.ts +1 -1
  295. package/src/entity-aspect.d.ts +1 -1
  296. package/src/entity-metadata.d.ts +6 -8
  297. package/src/entity-query.d.ts +1 -1
  298. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -135
  299. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +0 -49
  300. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
  301. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -135
  302. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +0 -49
  303. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
  304. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -139
  305. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +0 -49
  306. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
  307. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -107
  308. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
  309. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
  310. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
  311. package/esm2022/adapter-data-service-odata/adapter-core.mjs +0 -49
  312. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
  313. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -100
  314. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
  315. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -269
  316. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
  317. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -241
  318. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
  319. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +0 -49
  320. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -37
  321. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
  322. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +0 -49
  323. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -191
  324. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
  325. package/esm2022/breeze-client.mjs +0 -5
  326. package/esm2022/index.mjs +0 -2
  327. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
  328. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
  329. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
  330. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +0 -421
  331. package/esm2022/src/abstract-data-service-adapter.mjs +0 -325
  332. package/esm2022/src/array.mjs +0 -4
  333. package/esm2022/src/assert-param.mjs +0 -330
  334. package/esm2022/src/breeze.mjs +0 -85
  335. package/esm2022/src/complex-array.mjs +0 -117
  336. package/esm2022/src/config.mjs +0 -232
  337. package/esm2022/src/core.mjs +0 -712
  338. package/esm2022/src/csdl-metadata-parser.mjs +0 -385
  339. package/esm2022/src/data-service.mjs +0 -239
  340. package/esm2022/src/data-type.mjs +0 -510
  341. package/esm2022/src/default-property-interceptor.mjs +0 -460
  342. package/esm2022/src/entity-aspect.mjs +0 -897
  343. package/esm2022/src/entity-group.mjs +0 -192
  344. package/esm2022/src/entity-key.mjs +0 -127
  345. package/esm2022/src/entity-manager.mjs +0 -2183
  346. package/esm2022/src/entity-metadata.mjs +0 -2242
  347. package/esm2022/src/entity-query.mjs +0 -1024
  348. package/esm2022/src/entity-state.mjs +0 -107
  349. package/esm2022/src/enum.mjs +0 -143
  350. package/esm2022/src/event.mjs +0 -264
  351. package/esm2022/src/interface-registry.mjs +0 -39
  352. package/esm2022/src/key-generator.mjs +0 -110
  353. package/esm2022/src/local-query-comparison-options.mjs +0 -75
  354. package/esm2022/src/mapping-context.mjs +0 -422
  355. package/esm2022/src/naming-convention.mjs +0 -96
  356. package/esm2022/src/observable-array.mjs +0 -183
  357. package/esm2022/src/predicate.mjs +0 -1259
  358. package/esm2022/src/primitive-array.mjs +0 -85
  359. package/esm2022/src/query-options.mjs +0 -160
  360. package/esm2022/src/relation-array.mjs +0 -173
  361. package/esm2022/src/save-options.mjs +0 -51
  362. package/esm2022/src/unattached-children-map.mjs +0 -56
  363. package/esm2022/src/validation-options.mjs +0 -78
  364. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  365. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  366. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  367. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  368. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +0 -1
  369. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  370. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  371. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  372. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  373. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  374. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  375. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  376. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +0 -1
  377. package/fesm2022/breeze-client.mjs.map +0 -1
@@ -0,0 +1,187 @@
1
+ import { DataProperty } from './entity-metadata';
2
+ import { EntityKey } from './entity-key';
3
+ import { EntityState } from './entity-state';
4
+ import { MergeStrategy } from './query-options';
5
+ /** @hidden @internal */
6
+ export class EntityGroup {
7
+ constructor(entityManager, entityType) {
8
+ this.entityManager = entityManager;
9
+ this.entityType = entityType;
10
+ // freeze the entityType after the first instance of this type is either created or queried.
11
+ this.entityType.isFrozen = true;
12
+ this._indexMap = {};
13
+ this._entities = [];
14
+ this._emptyIndexes = [];
15
+ }
16
+ attachEntity(entity, entityState, mergeStrategy) {
17
+ // entity should already have an aspect.
18
+ let aspect = entity.entityAspect;
19
+ if (!aspect._initialized) {
20
+ this.entityType._initializeInstance(entity);
21
+ }
22
+ delete aspect._initialized;
23
+ let keyInGroup = aspect.getKey()._keyInGroup;
24
+ let ix = this._indexMap[keyInGroup];
25
+ if (ix >= 0) {
26
+ // safecast because key was found not ix will not return a null
27
+ let targetEntity = this._entities[ix];
28
+ let targetEntityState = targetEntity.entityAspect.entityState;
29
+ let wasUnchanged = targetEntityState.isUnchanged();
30
+ if (targetEntity === entity) {
31
+ aspect.entityState = entityState;
32
+ }
33
+ else if (mergeStrategy === MergeStrategy.Disallowed) {
34
+ throw new Error("A MergeStrategy of 'Disallowed' does not allow you to attach an entity when an entity with the same key is already attached: " + aspect.getKey());
35
+ }
36
+ else if (mergeStrategy === MergeStrategy.OverwriteChanges || (mergeStrategy === MergeStrategy.PreserveChanges && wasUnchanged)) {
37
+ // unwrapInstance returns an entity with server side property names - so we need to use DataProperty.getRawValueFromServer these when we apply
38
+ // the property values back to the target.
39
+ let rawServerEntity = this.entityManager.helper.unwrapInstance(entity);
40
+ this.entityType._updateTargetFromRaw(targetEntity, rawServerEntity, DataProperty.getRawValueFromServer);
41
+ targetEntity.entityAspect.setEntityState(entityState);
42
+ }
43
+ return targetEntity;
44
+ }
45
+ else {
46
+ if (this._emptyIndexes.length === 0) {
47
+ ix = this._entities.push(entity) - 1;
48
+ }
49
+ else {
50
+ ix = this._emptyIndexes.pop();
51
+ this._entities[ix] = entity;
52
+ }
53
+ this._indexMap[keyInGroup] = ix;
54
+ aspect.entityState = entityState;
55
+ aspect.entityGroup = this;
56
+ aspect.entityManager = this.entityManager;
57
+ return entity;
58
+ }
59
+ }
60
+ detachEntity(entity) {
61
+ // by this point we have already determined that this entity
62
+ // belongs to this group.
63
+ let aspect = entity.entityAspect;
64
+ let keyInGroup = aspect.getKey()._keyInGroup;
65
+ let ix = this._indexMap[keyInGroup];
66
+ if (ix === undefined) {
67
+ // shouldn't happen.
68
+ throw new Error("internal error - entity cannot be found in group");
69
+ }
70
+ delete this._indexMap[keyInGroup];
71
+ this._emptyIndexes.push(ix);
72
+ this._entities[ix] = null;
73
+ return entity;
74
+ }
75
+ // returns entity based on an entity key defined either as an array of key values or an EntityKey
76
+ findEntityByKey(entityKey) {
77
+ let keyInGroup;
78
+ if (entityKey instanceof EntityKey) {
79
+ keyInGroup = entityKey._keyInGroup;
80
+ }
81
+ else {
82
+ keyInGroup = EntityKey.createKeyString(entityKey);
83
+ }
84
+ let ix = this._indexMap[keyInGroup];
85
+ // can't use just (ix) below because 0 is valid
86
+ let r = (ix !== undefined) ? this._entities[ix] : undefined;
87
+ // coerce null to undefined
88
+ return r == null ? undefined : r;
89
+ }
90
+ hasChanges() {
91
+ let entities = this._entities;
92
+ let unchanged = EntityState.Unchanged;
93
+ for (let i = 0, len = entities.length; i < len; i++) {
94
+ let e = entities[i];
95
+ if (e && e.entityAspect.entityState !== unchanged) {
96
+ return true;
97
+ }
98
+ }
99
+ return false;
100
+ }
101
+ getChanges() {
102
+ let entities = this._entities;
103
+ let unchanged = EntityState.Unchanged;
104
+ let changes = [];
105
+ for (let i = 0, len = entities.length; i < len; i++) {
106
+ let e = entities[i];
107
+ if (e && e.entityAspect.entityState !== unchanged) {
108
+ changes.push(e);
109
+ }
110
+ }
111
+ return changes;
112
+ }
113
+ getEntities(entityStates) {
114
+ let filter = getFilter(entityStates);
115
+ return this._entities.filter(filter);
116
+ }
117
+ _checkOperation(operationName) {
118
+ this._entities.forEach(function (entity) {
119
+ entity && entity.entityAspect._checkOperation(operationName);
120
+ });
121
+ // for chaining;
122
+ return this;
123
+ }
124
+ // do not expose this method. It is doing a special purpose INCOMPLETE fast detach operation
125
+ // just for the entityManager clear method - the entityGroup will be in an inconsistent state
126
+ // after this op, which is ok because it will be thrown away.
127
+ // TODO: rename this to be clear that it is UNSAFE...
128
+ _clear() {
129
+ this._entities.forEach(function (entity) {
130
+ if (entity != null) {
131
+ entity.entityAspect._detach();
132
+ }
133
+ });
134
+ this._entities = null;
135
+ this._indexMap = null;
136
+ this._emptyIndexes = null;
137
+ }
138
+ _updateFkVal(fkProp, oldValue, newValue) {
139
+ let fkPropName = fkProp.name;
140
+ this._entities.forEach(function (entity) {
141
+ if (entity != null) {
142
+ if (entity.getProperty(fkPropName) === oldValue) {
143
+ entity.setProperty(fkPropName, newValue);
144
+ }
145
+ }
146
+ });
147
+ }
148
+ _fixupKey(tempValue, realValue) {
149
+ // single part keys appear directly in map
150
+ let ix = this._indexMap[tempValue];
151
+ if (ix === undefined) {
152
+ throw new Error("Internal Error in key fixup - unable to locate entity");
153
+ }
154
+ let entity = this._entities[ix];
155
+ let keyPropName = entity.entityType.keyProperties[0].name;
156
+ // fks on related entities will automatically get updated by this as well
157
+ entity.setProperty(keyPropName, realValue);
158
+ delete entity.entityAspect.hasTempKey;
159
+ delete this._indexMap[tempValue];
160
+ this._indexMap[realValue] = ix;
161
+ }
162
+ _replaceKey(oldKey, newKey) {
163
+ let ix = this._indexMap[oldKey._keyInGroup];
164
+ delete this._indexMap[oldKey._keyInGroup];
165
+ this._indexMap[newKey._keyInGroup] = ix;
166
+ }
167
+ }
168
+ function getFilter(entityStates) {
169
+ if (entityStates.length === 0) {
170
+ return function (e) {
171
+ return !!e;
172
+ };
173
+ }
174
+ else if (entityStates.length === 1) {
175
+ let entityState = entityStates[0];
176
+ return function (e) {
177
+ return !!e && e.entityAspect.entityState === entityState;
178
+ };
179
+ }
180
+ else {
181
+ return function (e) {
182
+ return !!e && -1 !== entityStates.indexOf(e.entityAspect.entityState);
183
+ };
184
+ }
185
+ }
186
+ // do not expose EntityGroup - internal only
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWdyb3VwLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9lbnRpdHktZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFjLFlBQVksRUFBRyxNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRCx3QkFBd0I7QUFDeEIsTUFBTSxPQUFPLFdBQVc7SUFPdEIsWUFBWSxhQUE0QixFQUFFLFVBQXNCO1FBQzlELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLDRGQUE0RjtRQUM1RixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUdELFlBQVksQ0FBQyxNQUFjLEVBQUUsV0FBd0IsRUFBRSxhQUE2QjtRQUNsRix3Q0FBd0M7UUFDeEMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUVqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRTNCLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDN0MsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCwrREFBK0Q7WUFDL0QsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQVcsQ0FBQztZQUNoRCxJQUFJLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQzlELElBQUksWUFBWSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25ELElBQUksWUFBWSxLQUFLLE1BQU0sRUFBRTtnQkFDM0IsTUFBTSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7YUFDbEM7aUJBQU0sSUFBSSxhQUFhLEtBQUssYUFBYSxDQUFDLFVBQVUsRUFBRTtnQkFDckQsTUFBTSxJQUFJLEtBQUssQ0FBQywrSEFBK0gsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUNwSztpQkFBTSxJQUFJLGFBQWEsS0FBSyxhQUFhLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUFDLGVBQWUsSUFBSSxZQUFZLENBQUMsRUFBRTtnQkFDaEksOElBQThJO2dCQUM5SSwwQ0FBMEM7Z0JBQzFDLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUN4RyxZQUFZLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN2RDtZQUNELE9BQU8sWUFBWSxDQUFDO1NBQ3JCO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDbkMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN0QztpQkFBTTtnQkFDTCxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7YUFDN0I7WUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUNqQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUMxQixNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDMUMsT0FBTyxNQUFNLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN6Qiw0REFBNEQ7UUFDNUQseUJBQXlCO1FBQ3pCLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDakMsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUM3QyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRTtZQUNwQixvQkFBb0I7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFHRCxpR0FBaUc7SUFDakcsZUFBZSxDQUFDLFNBQW9CO1FBQ2xDLElBQUksVUFBa0IsQ0FBQztRQUN2QixJQUFJLFNBQVMsWUFBWSxTQUFTLEVBQUU7WUFDbEMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUM7U0FDcEM7YUFBTTtZQUNMLFVBQVUsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQywrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM1RCwyQkFBMkI7UUFDM0IsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDOUIsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7Z0JBQ2pELE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzlCLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDdEMsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkQsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRTtnQkFDakQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQjtTQUNGO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVcsQ0FBQyxZQUEyQjtRQUNyQyxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWEsQ0FBQztJQUNuRCxDQUFDO0lBRUQsZUFBZSxDQUFDLGFBQXFCO1FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTTtZQUNyQyxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsNEZBQTRGO0lBQzVGLDZGQUE2RjtJQUM3Riw2REFBNkQ7SUFDN0QscURBQXFEO0lBQ3JELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU07WUFDckMsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO2dCQUNsQixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQy9CO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDRixJQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUM5QixJQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUM5QixJQUFZLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQW9CLEVBQUUsUUFBYSxFQUFFLFFBQWE7UUFDN0QsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU07WUFDckMsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO2dCQUNsQixJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUMvQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDMUM7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxTQUFjLEVBQUUsU0FBYztRQUN0QywwQ0FBMEM7UUFDMUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUU7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQVcsQ0FBQztRQUMxQyxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUQseUVBQXlFO1FBQ3pFLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBaUIsRUFBRSxNQUFpQjtRQUM5QyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0NBRUY7QUFFRCxTQUFTLFNBQVMsQ0FBQyxZQUEyQjtJQUM1QyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzdCLE9BQU8sVUFBVSxDQUFTO1lBQ3hCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQztLQUNIO1NBQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNwQyxJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsT0FBTyxVQUFVLENBQVM7WUFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQztRQUMzRCxDQUFDLENBQUM7S0FDSDtTQUFNO1FBQ0wsT0FBTyxVQUFVLENBQVM7WUFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUM7S0FDSDtBQUNILENBQUM7QUFHRCw0Q0FBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBFbnRpdHlUeXBlLCBEYXRhUHJvcGVydHkgIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBFbnRpdHlLZXkgfSBmcm9tICcuL2VudGl0eS1rZXknO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gJy4vZW50aXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBNZXJnZVN0cmF0ZWd5IH0gZnJvbSAnLi9xdWVyeS1vcHRpb25zJztcclxuXHJcbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgY2xhc3MgRW50aXR5R3JvdXAge1xyXG4gIGVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXI7XHJcbiAgZW50aXR5VHlwZTogRW50aXR5VHlwZTtcclxuICBfaW5kZXhNYXA6IHsgW2luZGV4OiBzdHJpbmddOiBudW1iZXIgfTtcclxuICBfZW50aXRpZXM6IChFbnRpdHkgfCBudWxsKVtdO1xyXG4gIF9lbXB0eUluZGV4ZXM6IG51bWJlcltdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihlbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKSB7XHJcbiAgICB0aGlzLmVudGl0eU1hbmFnZXIgPSBlbnRpdHlNYW5hZ2VyO1xyXG4gICAgdGhpcy5lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcclxuICAgIC8vIGZyZWV6ZSB0aGUgZW50aXR5VHlwZSBhZnRlciB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgdGhpcyB0eXBlIGlzIGVpdGhlciBjcmVhdGVkIG9yIHF1ZXJpZWQuXHJcbiAgICB0aGlzLmVudGl0eVR5cGUuaXNGcm96ZW4gPSB0cnVlO1xyXG4gICAgdGhpcy5faW5kZXhNYXAgPSB7fTtcclxuICAgIHRoaXMuX2VudGl0aWVzID0gW107XHJcbiAgICB0aGlzLl9lbXB0eUluZGV4ZXMgPSBbXTtcclxuICB9XHJcblxyXG5cclxuICBhdHRhY2hFbnRpdHkoZW50aXR5OiBFbnRpdHksIGVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZSwgbWVyZ2VTdHJhdGVneT86IE1lcmdlU3RyYXRlZ3kpIHtcclxuICAgIC8vIGVudGl0eSBzaG91bGQgYWxyZWFkeSBoYXZlIGFuIGFzcGVjdC5cclxuICAgIGxldCBhc3BlY3QgPSBlbnRpdHkuZW50aXR5QXNwZWN0O1xyXG5cclxuICAgIGlmICghYXNwZWN0Ll9pbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLmVudGl0eVR5cGUuX2luaXRpYWxpemVJbnN0YW5jZShlbnRpdHkpO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIGFzcGVjdC5faW5pdGlhbGl6ZWQ7XHJcblxyXG4gICAgbGV0IGtleUluR3JvdXAgPSBhc3BlY3QuZ2V0S2V5KCkuX2tleUluR3JvdXA7XHJcbiAgICBsZXQgaXggPSB0aGlzLl9pbmRleE1hcFtrZXlJbkdyb3VwXTtcclxuICAgIGlmIChpeCA+PSAwKSB7XHJcbiAgICAgIC8vIHNhZmVjYXN0IGJlY2F1c2Uga2V5IHdhcyBmb3VuZCBub3QgaXggd2lsbCBub3QgcmV0dXJuIGEgbnVsbFxyXG4gICAgICBsZXQgdGFyZ2V0RW50aXR5ID0gdGhpcy5fZW50aXRpZXNbaXhdIGFzIEVudGl0eTtcclxuICAgICAgbGV0IHRhcmdldEVudGl0eVN0YXRlID0gdGFyZ2V0RW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICAgICAgbGV0IHdhc1VuY2hhbmdlZCA9IHRhcmdldEVudGl0eVN0YXRlLmlzVW5jaGFuZ2VkKCk7XHJcbiAgICAgIGlmICh0YXJnZXRFbnRpdHkgPT09IGVudGl0eSkge1xyXG4gICAgICAgIGFzcGVjdC5lbnRpdHlTdGF0ZSA9IGVudGl0eVN0YXRlO1xyXG4gICAgICB9IGVsc2UgaWYgKG1lcmdlU3RyYXRlZ3kgPT09IE1lcmdlU3RyYXRlZ3kuRGlzYWxsb3dlZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgTWVyZ2VTdHJhdGVneSBvZiAnRGlzYWxsb3dlZCcgZG9lcyBub3QgYWxsb3cgeW91IHRvIGF0dGFjaCBhbiBlbnRpdHkgd2hlbiBhbiBlbnRpdHkgd2l0aCB0aGUgc2FtZSBrZXkgaXMgYWxyZWFkeSBhdHRhY2hlZDogXCIgKyBhc3BlY3QuZ2V0S2V5KCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKG1lcmdlU3RyYXRlZ3kgPT09IE1lcmdlU3RyYXRlZ3kuT3ZlcndyaXRlQ2hhbmdlcyB8fCAobWVyZ2VTdHJhdGVneSA9PT0gTWVyZ2VTdHJhdGVneS5QcmVzZXJ2ZUNoYW5nZXMgJiYgd2FzVW5jaGFuZ2VkKSkge1xyXG4gICAgICAgIC8vIHVud3JhcEluc3RhbmNlIHJldHVybnMgYW4gZW50aXR5IHdpdGggc2VydmVyIHNpZGUgcHJvcGVydHkgbmFtZXMgLSBzbyB3ZSBuZWVkIHRvIHVzZSBEYXRhUHJvcGVydHkuZ2V0UmF3VmFsdWVGcm9tU2VydmVyIHRoZXNlIHdoZW4gd2UgYXBwbHlcclxuICAgICAgICAvLyB0aGUgcHJvcGVydHkgdmFsdWVzIGJhY2sgdG8gdGhlIHRhcmdldC5cclxuICAgICAgICBsZXQgcmF3U2VydmVyRW50aXR5ID0gdGhpcy5lbnRpdHlNYW5hZ2VyLmhlbHBlci51bndyYXBJbnN0YW5jZShlbnRpdHkpO1xyXG4gICAgICAgIHRoaXMuZW50aXR5VHlwZS5fdXBkYXRlVGFyZ2V0RnJvbVJhdyh0YXJnZXRFbnRpdHksIHJhd1NlcnZlckVudGl0eSwgRGF0YVByb3BlcnR5LmdldFJhd1ZhbHVlRnJvbVNlcnZlcik7XHJcbiAgICAgICAgdGFyZ2V0RW50aXR5LmVudGl0eUFzcGVjdC5zZXRFbnRpdHlTdGF0ZShlbnRpdHlTdGF0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRhcmdldEVudGl0eTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9lbXB0eUluZGV4ZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgaXggPSB0aGlzLl9lbnRpdGllcy5wdXNoKGVudGl0eSkgLSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGl4ID0gdGhpcy5fZW1wdHlJbmRleGVzLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0aWVzW2l4XSA9IGVudGl0eTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pbmRleE1hcFtrZXlJbkdyb3VwXSA9IGl4O1xyXG4gICAgICBhc3BlY3QuZW50aXR5U3RhdGUgPSBlbnRpdHlTdGF0ZTtcclxuICAgICAgYXNwZWN0LmVudGl0eUdyb3VwID0gdGhpcztcclxuICAgICAgYXNwZWN0LmVudGl0eU1hbmFnZXIgPSB0aGlzLmVudGl0eU1hbmFnZXI7XHJcbiAgICAgIHJldHVybiBlbnRpdHk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZXRhY2hFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcclxuICAgIC8vIGJ5IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdCB0aGlzIGVudGl0eVxyXG4gICAgLy8gYmVsb25ncyB0byB0aGlzIGdyb3VwLlxyXG4gICAgbGV0IGFzcGVjdCA9IGVudGl0eS5lbnRpdHlBc3BlY3Q7XHJcbiAgICBsZXQga2V5SW5Hcm91cCA9IGFzcGVjdC5nZXRLZXkoKS5fa2V5SW5Hcm91cDtcclxuICAgIGxldCBpeCA9IHRoaXMuX2luZGV4TWFwW2tleUluR3JvdXBdO1xyXG4gICAgaWYgKGl4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gc2hvdWxkbid0IGhhcHBlbi5cclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW50ZXJuYWwgZXJyb3IgLSBlbnRpdHkgY2Fubm90IGJlIGZvdW5kIGluIGdyb3VwXCIpO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRoaXMuX2luZGV4TWFwW2tleUluR3JvdXBdO1xyXG4gICAgdGhpcy5fZW1wdHlJbmRleGVzLnB1c2goaXgpO1xyXG4gICAgdGhpcy5fZW50aXRpZXNbaXhdID0gbnVsbDtcclxuICAgIHJldHVybiBlbnRpdHk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gcmV0dXJucyBlbnRpdHkgYmFzZWQgb24gYW4gZW50aXR5IGtleSBkZWZpbmVkIGVpdGhlciBhcyBhbiBhcnJheSBvZiBrZXkgdmFsdWVzIG9yIGFuIEVudGl0eUtleVxyXG4gIGZpbmRFbnRpdHlCeUtleShlbnRpdHlLZXk6IEVudGl0eUtleSkge1xyXG4gICAgbGV0IGtleUluR3JvdXA6IHN0cmluZztcclxuICAgIGlmIChlbnRpdHlLZXkgaW5zdGFuY2VvZiBFbnRpdHlLZXkpIHtcclxuICAgICAga2V5SW5Hcm91cCA9IGVudGl0eUtleS5fa2V5SW5Hcm91cDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGtleUluR3JvdXAgPSBFbnRpdHlLZXkuY3JlYXRlS2V5U3RyaW5nKGVudGl0eUtleSk7XHJcbiAgICB9XHJcbiAgICBsZXQgaXggPSB0aGlzLl9pbmRleE1hcFtrZXlJbkdyb3VwXTtcclxuICAgIC8vIGNhbid0IHVzZSBqdXN0IChpeCkgYmVsb3cgYmVjYXVzZSAwIGlzIHZhbGlkXHJcbiAgICBsZXQgciA9IChpeCAhPT0gdW5kZWZpbmVkKSA/IHRoaXMuX2VudGl0aWVzW2l4XSA6IHVuZGVmaW5lZDtcclxuICAgIC8vIGNvZXJjZSBudWxsIHRvIHVuZGVmaW5lZFxyXG4gICAgcmV0dXJuIHIgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHI7XHJcbiAgfVxyXG5cclxuICBoYXNDaGFuZ2VzKCkge1xyXG4gICAgbGV0IGVudGl0aWVzID0gdGhpcy5fZW50aXRpZXM7XHJcbiAgICBsZXQgdW5jaGFuZ2VkID0gRW50aXR5U3RhdGUuVW5jaGFuZ2VkO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudGl0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGxldCBlID0gZW50aXRpZXNbaV07XHJcbiAgICAgIGlmIChlICYmIGUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlICE9PSB1bmNoYW5nZWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hhbmdlcygpIHtcclxuICAgIGxldCBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVzO1xyXG4gICAgbGV0IHVuY2hhbmdlZCA9IEVudGl0eVN0YXRlLlVuY2hhbmdlZDtcclxuICAgIGxldCBjaGFuZ2VzOiBFbnRpdHlbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudGl0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGxldCBlID0gZW50aXRpZXNbaV07XHJcbiAgICAgIGlmIChlICYmIGUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlICE9PSB1bmNoYW5nZWQpIHtcclxuICAgICAgICBjaGFuZ2VzLnB1c2goZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0RW50aXRpZXMoZW50aXR5U3RhdGVzOiBFbnRpdHlTdGF0ZVtdKSB7XHJcbiAgICBsZXQgZmlsdGVyID0gZ2V0RmlsdGVyKGVudGl0eVN0YXRlcyk7XHJcbiAgICByZXR1cm4gdGhpcy5fZW50aXRpZXMuZmlsdGVyKGZpbHRlcikgYXMgRW50aXR5W107XHJcbiAgfVxyXG5cclxuICBfY2hlY2tPcGVyYXRpb24ob3BlcmF0aW9uTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9lbnRpdGllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHkpIHtcclxuICAgICAgZW50aXR5ICYmIGVudGl0eS5lbnRpdHlBc3BlY3QuX2NoZWNrT3BlcmF0aW9uKG9wZXJhdGlvbk5hbWUpO1xyXG4gICAgfSk7XHJcbiAgICAvLyBmb3IgY2hhaW5pbmc7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIGRvIG5vdCBleHBvc2UgdGhpcyBtZXRob2QuIEl0IGlzIGRvaW5nIGEgc3BlY2lhbCBwdXJwb3NlIElOQ09NUExFVEUgZmFzdCBkZXRhY2ggb3BlcmF0aW9uXHJcbiAgLy8ganVzdCBmb3IgdGhlIGVudGl0eU1hbmFnZXIgY2xlYXIgbWV0aG9kIC0gdGhlIGVudGl0eUdyb3VwIHdpbGwgYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlXHJcbiAgLy8gYWZ0ZXIgdGhpcyBvcCwgd2hpY2ggaXMgb2sgYmVjYXVzZSBpdCB3aWxsIGJlIHRocm93biBhd2F5LlxyXG4gIC8vIFRPRE86IHJlbmFtZSB0aGlzIHRvIGJlIGNsZWFyIHRoYXQgaXQgaXMgVU5TQUZFLi4uXHJcbiAgX2NsZWFyKCkge1xyXG4gICAgdGhpcy5fZW50aXRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZW50aXR5KSB7XHJcbiAgICAgIGlmIChlbnRpdHkgIT0gbnVsbCkge1xyXG4gICAgICAgIGVudGl0eS5lbnRpdHlBc3BlY3QuX2RldGFjaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgICh0aGlzIGFzIGFueSkuX2VudGl0aWVzID0gbnVsbDtcclxuICAgICh0aGlzIGFzIGFueSkuX2luZGV4TWFwID0gbnVsbDtcclxuICAgICh0aGlzIGFzIGFueSkuX2VtcHR5SW5kZXhlcyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBfdXBkYXRlRmtWYWwoZmtQcm9wOiBEYXRhUHJvcGVydHksIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIGxldCBma1Byb3BOYW1lID0gZmtQcm9wLm5hbWU7XHJcbiAgICB0aGlzLl9lbnRpdGllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHkpIHtcclxuICAgICAgaWYgKGVudGl0eSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGVudGl0eS5nZXRQcm9wZXJ0eShma1Byb3BOYW1lKSA9PT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgIGVudGl0eS5zZXRQcm9wZXJ0eShma1Byb3BOYW1lLCBuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIF9maXh1cEtleSh0ZW1wVmFsdWU6IGFueSwgcmVhbFZhbHVlOiBhbnkpIHtcclxuICAgIC8vIHNpbmdsZSBwYXJ0IGtleXMgYXBwZWFyIGRpcmVjdGx5IGluIG1hcFxyXG4gICAgbGV0IGl4ID0gdGhpcy5faW5kZXhNYXBbdGVtcFZhbHVlXTtcclxuICAgIGlmIChpeCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIEVycm9yIGluIGtleSBmaXh1cCAtIHVuYWJsZSB0byBsb2NhdGUgZW50aXR5XCIpO1xyXG4gICAgfVxyXG4gICAgbGV0IGVudGl0eSA9IHRoaXMuX2VudGl0aWVzW2l4XSBhcyBFbnRpdHk7XHJcbiAgICBsZXQga2V5UHJvcE5hbWUgPSBlbnRpdHkuZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzWzBdLm5hbWU7XHJcbiAgICAvLyBma3Mgb24gcmVsYXRlZCBlbnRpdGllcyB3aWxsIGF1dG9tYXRpY2FsbHkgZ2V0IHVwZGF0ZWQgYnkgdGhpcyBhcyB3ZWxsXHJcbiAgICBlbnRpdHkuc2V0UHJvcGVydHkoa2V5UHJvcE5hbWUsIHJlYWxWYWx1ZSk7XHJcbiAgICBkZWxldGUgZW50aXR5LmVudGl0eUFzcGVjdC5oYXNUZW1wS2V5O1xyXG4gICAgZGVsZXRlIHRoaXMuX2luZGV4TWFwW3RlbXBWYWx1ZV07XHJcbiAgICB0aGlzLl9pbmRleE1hcFtyZWFsVmFsdWVdID0gaXg7XHJcbiAgfVxyXG5cclxuICBfcmVwbGFjZUtleShvbGRLZXk6IEVudGl0eUtleSwgbmV3S2V5OiBFbnRpdHlLZXkpIHtcclxuICAgIGxldCBpeCA9IHRoaXMuX2luZGV4TWFwW29sZEtleS5fa2V5SW5Hcm91cF07XHJcbiAgICBkZWxldGUgdGhpcy5faW5kZXhNYXBbb2xkS2V5Ll9rZXlJbkdyb3VwXTtcclxuICAgIHRoaXMuX2luZGV4TWFwW25ld0tleS5fa2V5SW5Hcm91cF0gPSBpeDtcclxuICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRGaWx0ZXIoZW50aXR5U3RhdGVzOiBFbnRpdHlTdGF0ZVtdKSB7XHJcbiAgaWYgKGVudGl0eVN0YXRlcy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZTogRW50aXR5KSB7XHJcbiAgICAgIHJldHVybiAhIWU7XHJcbiAgICB9O1xyXG4gIH0gZWxzZSBpZiAoZW50aXR5U3RhdGVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgbGV0IGVudGl0eVN0YXRlID0gZW50aXR5U3RhdGVzWzBdO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlOiBFbnRpdHkpIHtcclxuICAgICAgcmV0dXJuICEhZSAmJiBlLmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZSA9PT0gZW50aXR5U3RhdGU7XHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGU6IEVudGl0eSkge1xyXG4gICAgICByZXR1cm4gISFlICYmIC0xICE9PSBlbnRpdHlTdGF0ZXMuaW5kZXhPZihlLmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZSk7XHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIGRvIG5vdCBleHBvc2UgRW50aXR5R3JvdXAgLSBpbnRlcm5hbCBvbmx5XHJcblxyXG5cclxuIl19
@@ -0,0 +1,116 @@
1
+ import { core } from './core';
2
+ import { assertParam } from './assert-param';
3
+ import { EntityType } from './entity-metadata';
4
+ import { DataType } from './data-type';
5
+ /**
6
+ An EntityKey is an object that represents the unique identity of an entity. EntityKey's are immutable.
7
+
8
+
9
+ **/
10
+ export class EntityKey {
11
+ /**
12
+ Constructs a new EntityKey. Each entity within an EntityManager will have a unique EntityKey.
13
+ > // assume em1 is an EntityManager containing a number of existing entities.
14
+ > var empType = em1.metadataStore.getEntityType("Employee");
15
+ > var entityKey = new EntityKey(empType, 1);
16
+
17
+ EntityKey's may also be found by calling EntityAspect.getKey()
18
+ > // assume employee1 is an existing Employee entity
19
+ > var empKey = employee1.entityAspect.getKey();
20
+
21
+ Multipart keys are created by passing an array as the 'keyValues' parameter
22
+ > var empTerrType = em1.metadataStore.getEntityType("EmployeeTerritory");
23
+ > var empTerrKey = new EntityKey(empTerrType, [ 1, 77]);
24
+ > // The order of the properties in the 'keyValues' array must be the same as that
25
+ > // returned by empTerrType.keyProperties
26
+ @param entityType - The [[EntityType]] of the entity.
27
+ @param keyValues - A single value or an array of values.
28
+ */
29
+ constructor(entityType, keyValues) {
30
+ assertParam(entityType, "entityType").isInstanceOf(EntityType).check();
31
+ let subtypes = entityType.getSelfAndSubtypes();
32
+ if (subtypes.length > 1) {
33
+ this._subtypes = subtypes.filter(function (st) {
34
+ return st.isAbstract === false;
35
+ });
36
+ }
37
+ if (!Array.isArray(keyValues)) {
38
+ keyValues = [keyValues];
39
+ }
40
+ this.entityType = entityType;
41
+ entityType.keyProperties.forEach(function (kp, i) {
42
+ // insure that guid keys are comparable.
43
+ if (kp.dataType === DataType.Guid) {
44
+ keyValues[i] = keyValues[i] && keyValues[i].toLowerCase ? keyValues[i].toLowerCase() : keyValues[i];
45
+ }
46
+ });
47
+ this.values = keyValues;
48
+ this._keyInGroup = EntityKey.createKeyString(keyValues);
49
+ }
50
+ toJSON() {
51
+ return {
52
+ entityType: this.entityType.name,
53
+ values: this.values
54
+ };
55
+ }
56
+ static fromJSON(json, metadataStore) {
57
+ let et = metadataStore._getStructuralType(json.entityType, true);
58
+ return new EntityKey(et, json.values);
59
+ }
60
+ /**
61
+ Used to compare EntityKeys are determine if they refer to the same Entity.
62
+ There is also an static version of 'equals' with the same functionality.
63
+
64
+ > // assume em1 is an EntityManager containing a number of existing entities.
65
+ > var empType = em1.metadataStore.getEntityType("Employee");
66
+ > var empKey1 = new EntityKey(empType, 1);
67
+ > // assume employee1 is an existing Employee entity
68
+ > var empKey2 = employee1.entityAspect.getKey();
69
+ > if (empKey1.equals(empKey2)) {
70
+ > // do something ...
71
+ > }
72
+ **/
73
+ equals(entityKey) {
74
+ if (!(entityKey instanceof EntityKey))
75
+ return false;
76
+ return (this.entityType === entityKey.entityType) &&
77
+ core.arrayEquals(this.values, entityKey.values);
78
+ }
79
+ /*
80
+ Returns a human readable representation of this EntityKey.
81
+ */
82
+ toString(altEntityType) {
83
+ return (altEntityType || this.entityType).name + '-' + this._keyInGroup;
84
+ }
85
+ /**
86
+ Used to compare EntityKeys are determine if they refer to the same Entity.
87
+ There is also an instance version of 'equals' with the same functionality.
88
+ > // assume em1 is an EntityManager containing a number of existing entities.
89
+ > var empType = em1.metadataStore.getEntityType("Employee");
90
+ > var empKey1 = new EntityKey(empType, 1);
91
+ > // assume employee1 is an existing Employee entity
92
+ > var empKey2 = employee1.entityAspect.getKey();
93
+ > if (EntityKey.equals(empKey1, empKey2)) {
94
+ > // do something ...
95
+ > }
96
+ **/
97
+ static equals(k1, k2) {
98
+ if (!(k1 instanceof EntityKey))
99
+ return false;
100
+ return k1.equals(k2);
101
+ }
102
+ /** @hidden @internal */
103
+ // TODO: we may want to compare to default values later.
104
+ _isEmpty() {
105
+ return this.values.join("").length === 0;
106
+ }
107
+ /** hidden */
108
+ // TODO: think about giving _ prefix or documenting.
109
+ static createKeyString(keyValues) {
110
+ return keyValues.join(EntityKey.ENTITY_KEY_DELIMITER);
111
+ }
112
+ }
113
+ /** @hidden @internal */
114
+ EntityKey.ENTITY_KEY_DELIMITER = ":::";
115
+ EntityKey.prototype._$typeName = "EntityKey";
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWtleS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW50aXR5LWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFpQixNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkM7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBZXBCOzs7Ozs7Ozs7Ozs7Ozs7OztNQWlCRTtJQUNGLFlBQVksVUFBc0IsRUFBRSxTQUFjO1FBQ2hELFdBQVcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZFLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDM0MsT0FBTyxFQUFFLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsU0FBUyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDekI7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQzlDLHdDQUF3QztZQUN4QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRTtnQkFDakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTFELENBQUM7SUFHRCxNQUFNO1FBQ0osT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUk7WUFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFTLEVBQUUsYUFBNEI7UUFDckQsSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFlLENBQUM7UUFDL0UsT0FBTyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxNQUFNLENBQUMsU0FBb0I7UUFDekIsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O01BRUU7SUFDRixRQUFRLENBQUMsYUFBMEI7UUFDakMsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBYSxFQUFFLEVBQWE7UUFDeEMsSUFBSSxDQUFDLENBQUMsRUFBRSxZQUFZLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzdDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLHdEQUF3RDtJQUN4RCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxhQUFhO0lBQ2Isb0RBQW9EO0lBQ3BELE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBZ0I7UUFDckMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hELENBQUM7O0FBMUhELHdCQUF3QjtBQUNqQiw4QkFBb0IsR0FBRyxLQUFLLENBQUM7QUE0SHRDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcmUgfSBmcm9tICcuL2NvcmUnO1xyXG5pbXBvcnQgeyBhc3NlcnRQYXJhbSB9IGZyb20gJy4vYXNzZXJ0LXBhcmFtJztcclxuaW1wb3J0IHsgRW50aXR5VHlwZSwgTWV0YWRhdGFTdG9yZSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuL2RhdGEtdHlwZSc7XHJcblxyXG4vKipcclxuQW4gRW50aXR5S2V5IGlzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgdGhlIHVuaXF1ZSBpZGVudGl0eSBvZiBhbiBlbnRpdHkuICBFbnRpdHlLZXkncyBhcmUgaW1tdXRhYmxlLlxyXG5cclxuXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgRW50aXR5S2V5IHtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBkZWNsYXJlIF8kdHlwZU5hbWU6IHN0cmluZzsgLy8gYWN0dWFsbHkgcGxhY2VkIG9uIHByb3RvdHlwZVxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHN0YXRpYyBFTlRJVFlfS0VZX0RFTElNSVRFUiA9IFwiOjo6XCI7XHJcbiAgLyoqICBUaGUgJ0VudGl0eVR5cGUnIHRoYXQgdGhpcyBpcyBhIGtleSBmb3IuIF9fUmVhZCBPbmx5X18gKi9cclxuICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xyXG4gIC8qKiAgQW4gYXJyYXkgb2YgdGhlIHZhbHVlcyBmb3IgdGhpcyBrZXkuIFRoaXMgd2lsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCBcclxuICB1bmxlc3MgdGhlIGVudGl0eSB0eXBlIGhhcyBhIG11bHRpcGFydCBrZXkuIF9fUmVhZCBPbmx5X18gKi9cclxuICB2YWx1ZXM6IGFueVtdO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9rZXlJbkdyb3VwOiBzdHJpbmc7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX3N1YnR5cGVzOiBFbnRpdHlUeXBlW107XHJcblxyXG4gIC8qKlxyXG4gIENvbnN0cnVjdHMgYSBuZXcgRW50aXR5S2V5LiAgRWFjaCBlbnRpdHkgd2l0aGluIGFuIEVudGl0eU1hbmFnZXIgd2lsbCBoYXZlIGEgdW5pcXVlIEVudGl0eUtleS5cclxuICA+ICAgICAvLyBhc3N1bWUgZW0xIGlzIGFuIEVudGl0eU1hbmFnZXIgY29udGFpbmluZyBhIG51bWJlciBvZiBleGlzdGluZyBlbnRpdGllcy5cclxuICA+ICAgICB2YXIgZW1wVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJFbXBsb3llZVwiKTtcclxuICA+ICAgICB2YXIgZW50aXR5S2V5ID0gbmV3IEVudGl0eUtleShlbXBUeXBlLCAxKTtcclxuXHJcbiAgRW50aXR5S2V5J3MgbWF5IGFsc28gYmUgZm91bmQgYnkgY2FsbGluZyBFbnRpdHlBc3BlY3QuZ2V0S2V5KClcclxuICA+ICAgICAvLyBhc3N1bWUgZW1wbG95ZWUxIGlzIGFuIGV4aXN0aW5nIEVtcGxveWVlIGVudGl0eVxyXG4gID4gICAgIHZhciBlbXBLZXkgPSBlbXBsb3llZTEuZW50aXR5QXNwZWN0LmdldEtleSgpO1xyXG5cclxuICBNdWx0aXBhcnQga2V5cyBhcmUgY3JlYXRlZCBieSBwYXNzaW5nIGFuIGFycmF5IGFzIHRoZSAna2V5VmFsdWVzJyBwYXJhbWV0ZXJcclxuICA+ICAgICB2YXIgZW1wVGVyclR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiRW1wbG95ZWVUZXJyaXRvcnlcIik7XHJcbiAgPiAgICAgdmFyIGVtcFRlcnJLZXkgPSBuZXcgRW50aXR5S2V5KGVtcFRlcnJUeXBlLCBbIDEsIDc3XSk7XHJcbiAgPiAgICAgLy8gVGhlIG9yZGVyIG9mIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSAna2V5VmFsdWVzJyBhcnJheSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoYXRcclxuICA+ICAgICAvLyByZXR1cm5lZCBieSBlbXBUZXJyVHlwZS5rZXlQcm9wZXJ0aWVzXHJcbiAgQHBhcmFtIGVudGl0eVR5cGUgLSBUaGUgW1tFbnRpdHlUeXBlXV0gb2YgdGhlIGVudGl0eS5cclxuICBAcGFyYW0ga2V5VmFsdWVzIC0gQSBzaW5nbGUgdmFsdWUgb3IgYW4gYXJyYXkgb2YgdmFsdWVzLiBcclxuICAqL1xyXG4gIGNvbnN0cnVjdG9yKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGtleVZhbHVlczogYW55KSB7XHJcbiAgICBhc3NlcnRQYXJhbShlbnRpdHlUeXBlLCBcImVudGl0eVR5cGVcIikuaXNJbnN0YW5jZU9mKEVudGl0eVR5cGUpLmNoZWNrKCk7XHJcbiAgICBsZXQgc3VidHlwZXMgPSBlbnRpdHlUeXBlLmdldFNlbGZBbmRTdWJ0eXBlcygpO1xyXG4gICAgaWYgKHN1YnR5cGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5fc3VidHlwZXMgPSBzdWJ0eXBlcy5maWx0ZXIoZnVuY3Rpb24gKHN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHN0LmlzQWJzdHJhY3QgPT09IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2V5VmFsdWVzKSkge1xyXG4gICAgICBrZXlWYWx1ZXMgPSBba2V5VmFsdWVzXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xyXG4gICAgZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKGtwLCBpKSB7XHJcbiAgICAgIC8vIGluc3VyZSB0aGF0IGd1aWQga2V5cyBhcmUgY29tcGFyYWJsZS5cclxuICAgICAgaWYgKGtwLmRhdGFUeXBlID09PSBEYXRhVHlwZS5HdWlkKSB7XHJcbiAgICAgICAga2V5VmFsdWVzW2ldID0ga2V5VmFsdWVzW2ldICYmIGtleVZhbHVlc1tpXS50b0xvd2VyQ2FzZSA/IGtleVZhbHVlc1tpXS50b0xvd2VyQ2FzZSgpIDoga2V5VmFsdWVzW2ldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZhbHVlcyA9IGtleVZhbHVlcztcclxuICAgIHRoaXMuX2tleUluR3JvdXAgPSBFbnRpdHlLZXkuY3JlYXRlS2V5U3RyaW5nKGtleVZhbHVlcyk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHRvSlNPTigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGVudGl0eVR5cGU6IHRoaXMuZW50aXR5VHlwZS5uYW1lLFxyXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb246IGFueSwgbWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSkge1xyXG4gICAgbGV0IGV0ID0gbWV0YWRhdGFTdG9yZS5fZ2V0U3RydWN0dXJhbFR5cGUoanNvbi5lbnRpdHlUeXBlLCB0cnVlKSBhcyBFbnRpdHlUeXBlO1xyXG4gICAgcmV0dXJuIG5ldyBFbnRpdHlLZXkoZXQsIGpzb24udmFsdWVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFVzZWQgdG8gY29tcGFyZSBFbnRpdHlLZXlzIGFyZSBkZXRlcm1pbmUgaWYgdGhleSByZWZlciB0byB0aGUgc2FtZSBFbnRpdHkuXHJcbiAgVGhlcmUgaXMgYWxzbyBhbiBzdGF0aWMgdmVyc2lvbiBvZiAnZXF1YWxzJyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuXHJcbiAgXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBlbTEgaXMgYW4gRW50aXR5TWFuYWdlciBjb250YWluaW5nIGEgbnVtYmVyIG9mIGV4aXN0aW5nIGVudGl0aWVzLlxyXG4gID4gICAgICB2YXIgZW1wVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJFbXBsb3llZVwiKTtcclxuICA+ICAgICAgdmFyIGVtcEtleTEgPSBuZXcgRW50aXR5S2V5KGVtcFR5cGUsIDEpO1xyXG4gID4gICAgICAvLyBhc3N1bWUgZW1wbG95ZWUxIGlzIGFuIGV4aXN0aW5nIEVtcGxveWVlIGVudGl0eVxyXG4gID4gICAgICB2YXIgZW1wS2V5MiA9IGVtcGxveWVlMS5lbnRpdHlBc3BlY3QuZ2V0S2V5KCk7XHJcbiAgPiAgICAgIGlmIChlbXBLZXkxLmVxdWFscyhlbXBLZXkyKSkge1xyXG4gID4gICAgICAgICAgLy8gZG8gc29tZXRoaW5nICAuLi5cclxuICA+ICAgICAgfVxyXG4gICoqL1xyXG4gIGVxdWFscyhlbnRpdHlLZXk6IEVudGl0eUtleSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCEoZW50aXR5S2V5IGluc3RhbmNlb2YgRW50aXR5S2V5KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuICh0aGlzLmVudGl0eVR5cGUgPT09IGVudGl0eUtleS5lbnRpdHlUeXBlKSAmJlxyXG4gICAgICBjb3JlLmFycmF5RXF1YWxzKHRoaXMudmFsdWVzLCBlbnRpdHlLZXkudmFsdWVzKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgUmV0dXJucyBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRW50aXR5S2V5LlxyXG4gICovXHJcbiAgdG9TdHJpbmcoYWx0RW50aXR5VHlwZT86IEVudGl0eVR5cGUpIHtcclxuICAgIHJldHVybiAoYWx0RW50aXR5VHlwZSB8fCB0aGlzLmVudGl0eVR5cGUpLm5hbWUgKyAnLScgKyB0aGlzLl9rZXlJbkdyb3VwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgVXNlZCB0byBjb21wYXJlIEVudGl0eUtleXMgYXJlIGRldGVybWluZSBpZiB0aGV5IHJlZmVyIHRvIHRoZSBzYW1lIEVudGl0eS5cclxuICBUaGVyZSBpcyBhbHNvIGFuIGluc3RhbmNlIHZlcnNpb24gb2YgJ2VxdWFscycgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LlxyXG4gID4gICAgICAvLyBhc3N1bWUgZW0xIGlzIGFuIEVudGl0eU1hbmFnZXIgY29udGFpbmluZyBhIG51bWJlciBvZiBleGlzdGluZyBlbnRpdGllcy5cclxuICA+ICAgICAgdmFyIGVtcFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiRW1wbG95ZWVcIik7XHJcbiAgPiAgICAgIHZhciBlbXBLZXkxID0gbmV3IEVudGl0eUtleShlbXBUeXBlLCAxKTtcclxuICA+ICAgICAgLy8gYXNzdW1lIGVtcGxveWVlMSBpcyBhbiBleGlzdGluZyBFbXBsb3llZSBlbnRpdHlcclxuICA+ICAgICAgdmFyIGVtcEtleTIgPSBlbXBsb3llZTEuZW50aXR5QXNwZWN0LmdldEtleSgpO1xyXG4gID4gICAgICBpZiAoRW50aXR5S2V5LmVxdWFscyhlbXBLZXkxLCBlbXBLZXkyKSkge1xyXG4gID4gICAgICAgICAgLy8gZG8gc29tZXRoaW5nICAuLi5cclxuICA+ICAgICAgfVxyXG4gICoqL1xyXG4gIHN0YXRpYyBlcXVhbHMoazE6IEVudGl0eUtleSwgazI6IEVudGl0eUtleSkge1xyXG4gICAgaWYgKCEoazEgaW5zdGFuY2VvZiBFbnRpdHlLZXkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gazEuZXF1YWxzKGsyKTtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIC8vIFRPRE86IHdlIG1heSB3YW50IHRvIGNvbXBhcmUgdG8gZGVmYXVsdCB2YWx1ZXMgbGF0ZXIuXHJcbiAgX2lzRW1wdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMuam9pbihcIlwiKS5sZW5ndGggPT09IDA7XHJcbiAgfVxyXG5cclxuICAvKiogaGlkZGVuICovXHJcbiAgLy8gVE9ETzogdGhpbmsgYWJvdXQgZ2l2aW5nIF8gcHJlZml4IG9yIGRvY3VtZW50aW5nLlxyXG4gIHN0YXRpYyBjcmVhdGVLZXlTdHJpbmcoa2V5VmFsdWVzOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGtleVZhbHVlcy5qb2luKEVudGl0eUtleS5FTlRJVFlfS0VZX0RFTElNSVRFUik7XHJcbiAgfVxyXG5cclxufVxyXG5FbnRpdHlLZXkucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIkVudGl0eUtleVwiO1xyXG5cclxuXHJcbiJdfQ==