breeze-client 2.1.2 → 2.1.3-mjs

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 (397) hide show
  1. package/LICENSE +1 -1
  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/esm2020/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +130 -0
  14. package/esm2020/adapter-ajax-angularjs/adapter-core.mjs +49 -0
  15. package/esm2020/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
  16. package/esm2020/adapter-ajax-fetch/adapter-ajax-fetch.mjs +132 -0
  17. package/esm2020/adapter-ajax-fetch/adapter-core.mjs +49 -0
  18. package/esm2020/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
  19. package/esm2020/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +137 -0
  20. package/esm2020/adapter-ajax-httpclient/adapter-core.mjs +49 -0
  21. package/esm2020/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
  22. package/esm2020/adapter-ajax-jquery/adapter-ajax-jquery.mjs +103 -0
  23. package/esm2020/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
  24. package/esm2020/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
  25. package/esm2020/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
  26. package/esm2020/adapter-data-service-odata/adapter-core.mjs +49 -0
  27. package/esm2020/adapter-data-service-odata/adapter-data-service-odata.mjs +456 -0
  28. package/esm2020/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
  29. package/esm2020/adapter-data-service-webapi/adapter-data-service-webapi.mjs +93 -0
  30. package/esm2020/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
  31. package/esm2020/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +268 -0
  32. package/esm2020/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
  33. package/esm2020/adapter-model-library-ko/adapter-model-library-ko.mjs +240 -0
  34. package/esm2020/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
  35. package/esm2020/adapter-uri-builder-json/adapter-core.mjs +49 -0
  36. package/esm2020/adapter-uri-builder-json/adapter-uri-builder-json.mjs +36 -0
  37. package/esm2020/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
  38. package/esm2020/adapter-uri-builder-odata/adapter-core.mjs +49 -0
  39. package/esm2020/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +190 -0
  40. package/esm2020/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
  41. package/esm2020/breeze-client.mjs +5 -0
  42. package/esm2020/index.mjs +2 -0
  43. package/esm2020/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
  44. package/esm2020/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
  45. package/esm2020/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
  46. package/esm2020/mixin-save-queuing/mixin-save-queuing.mjs +400 -0
  47. package/esm2020/src/abstract-data-service-adapter.mjs +296 -0
  48. package/esm2020/src/array.mjs +4 -0
  49. package/esm2020/src/assert-param.mjs +312 -0
  50. package/esm2020/src/breeze.mjs +85 -0
  51. package/esm2020/src/complex-array.mjs +117 -0
  52. package/esm2020/src/config.mjs +223 -0
  53. package/esm2020/src/core.mjs +707 -0
  54. package/esm2020/src/csdl-metadata-parser.mjs +385 -0
  55. package/esm2020/src/data-service.mjs +203 -0
  56. package/esm2020/src/data-type.mjs +444 -0
  57. package/esm2020/src/default-property-interceptor.mjs +460 -0
  58. package/esm2020/src/entity-action.mjs +45 -0
  59. package/esm2020/src/entity-aspect.mjs +806 -0
  60. package/esm2020/src/entity-group.mjs +187 -0
  61. package/esm2020/src/entity-key.mjs +116 -0
  62. package/esm2020/src/entity-manager.mjs +2094 -0
  63. package/esm2020/src/entity-metadata.mjs +2109 -0
  64. package/esm2020/src/entity-query.mjs +996 -0
  65. package/esm2020/src/entity-state.mjs +99 -0
  66. package/esm2020/src/enum.mjs +141 -0
  67. package/esm2020/src/event.mjs +256 -0
  68. package/esm2020/src/interface-registry.mjs +41 -0
  69. package/esm2020/src/key-generator.mjs +108 -0
  70. package/esm2020/src/local-query-comparison-options.mjs +65 -0
  71. package/esm2020/src/mapping-context.mjs +405 -0
  72. package/esm2020/src/naming-convention.mjs +88 -0
  73. package/esm2020/src/observable-array.mjs +183 -0
  74. package/esm2020/src/predicate.mjs +1232 -0
  75. package/esm2020/src/primitive-array.mjs +85 -0
  76. package/esm2020/src/query-options.mjs +152 -0
  77. package/esm2020/src/relation-array.mjs +173 -0
  78. package/esm2020/src/save-options.mjs +41 -0
  79. package/esm2020/src/unattached-children-map.mjs +58 -0
  80. package/esm2020/src/validate.mjs +988 -0
  81. package/esm2020/src/validation-options.mjs +64 -0
  82. package/fesm2015/{breeze-client-adapter-ajax-angularjs.js → breeze-client-adapter-ajax-angularjs.mjs} +1 -1
  83. package/fesm2015/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  84. package/fesm2015/{breeze-client-adapter-ajax-fetch.js → breeze-client-adapter-ajax-fetch.mjs} +5 -3
  85. package/fesm2015/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  86. package/fesm2015/{breeze-client-adapter-ajax-httpclient.js → breeze-client-adapter-ajax-httpclient.mjs} +1 -1
  87. package/fesm2015/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  88. package/fesm2015/{breeze-client-adapter-ajax-jquery.js → breeze-client-adapter-ajax-jquery.mjs} +2 -2
  89. package/fesm2015/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  90. package/fesm2015/{breeze-client-adapter-ajax-post.js → breeze-client-adapter-ajax-post.mjs} +1 -1
  91. package/fesm2015/breeze-client-adapter-ajax-post.mjs.map +1 -0
  92. package/fesm2015/{breeze-client-adapter-data-service-odata.js → breeze-client-adapter-data-service-odata.mjs} +20 -22
  93. package/fesm2015/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  94. package/fesm2015/{breeze-client-adapter-data-service-webapi.js → breeze-client-adapter-data-service-webapi.mjs} +13 -13
  95. package/fesm2015/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  96. package/fesm2015/{breeze-client-adapter-model-library-backing-store.js → breeze-client-adapter-model-library-backing-store.mjs} +13 -13
  97. package/fesm2015/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  98. package/fesm2015/{breeze-client-adapter-model-library-ko.js → breeze-client-adapter-model-library-ko.mjs} +13 -13
  99. package/fesm2015/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  100. package/fesm2015/{breeze-client-adapter-uri-builder-json.js → breeze-client-adapter-uri-builder-json.mjs} +8 -8
  101. package/fesm2015/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  102. package/fesm2015/{breeze-client-adapter-uri-builder-odata.js → breeze-client-adapter-uri-builder-odata.mjs} +85 -86
  103. package/fesm2015/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  104. package/fesm2015/{breeze-client-mixin-get-entity-graph.js → breeze-client-mixin-get-entity-graph.mjs} +1 -1
  105. package/fesm2015/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  106. package/fesm2015/{breeze-client-mixin-save-queuing.js → breeze-client-mixin-save-queuing.mjs} +1 -1
  107. package/fesm2015/breeze-client-mixin-save-queuing.mjs.map +1 -0
  108. package/fesm2015/{breeze-client.js → breeze-client.mjs} +417 -422
  109. package/fesm2015/breeze-client.mjs.map +1 -0
  110. package/{fesm5/breeze-client-adapter-ajax-angularjs.js → fesm2020/breeze-client-adapter-ajax-angularjs.mjs} +41 -42
  111. package/fesm2020/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  112. package/{fesm5/breeze-client-adapter-ajax-fetch.js → fesm2020/breeze-client-adapter-ajax-fetch.mjs} +44 -43
  113. package/fesm2020/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  114. package/{fesm5/breeze-client-adapter-ajax-httpclient.js → fesm2020/breeze-client-adapter-ajax-httpclient.mjs} +43 -44
  115. package/fesm2020/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  116. package/{fesm5/breeze-client-adapter-ajax-jquery.js → fesm2020/breeze-client-adapter-ajax-jquery.mjs} +18 -19
  117. package/fesm2020/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  118. package/{fesm5/breeze-client-adapter-ajax-post.js → fesm2020/breeze-client-adapter-ajax-post.mjs} +8 -11
  119. package/fesm2020/breeze-client-adapter-ajax-post.mjs.map +1 -0
  120. package/{fesm5/breeze-client-adapter-data-service-odata.js → fesm2020/breeze-client-adapter-data-service-odata.mjs} +126 -134
  121. package/fesm2020/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  122. package/{fesm5/breeze-client-adapter-data-service-webapi.js → fesm2020/breeze-client-adapter-data-service-webapi.mjs} +38 -42
  123. package/fesm2020/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  124. package/{fesm5/breeze-client-adapter-model-library-backing-store.js → fesm2020/breeze-client-adapter-model-library-backing-store.mjs} +63 -64
  125. package/fesm2020/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  126. package/{fesm5/breeze-client-adapter-model-library-ko.js → fesm2020/breeze-client-adapter-model-library-ko.mjs} +57 -58
  127. package/fesm2020/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  128. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs +91 -0
  129. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  130. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs +245 -0
  131. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  132. package/{fesm5/breeze-client-mixin-get-entity-graph.js → fesm2020/breeze-client-mixin-get-entity-graph.mjs} +45 -45
  133. package/fesm2020/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  134. package/{fesm5/breeze-client-mixin-save-queuing.js → fesm2020/breeze-client-mixin-save-queuing.mjs} +116 -126
  135. package/fesm2020/breeze-client-mixin-save-queuing.mjs.map +1 -0
  136. package/{fesm5/breeze-client.js → fesm2020/breeze-client.mjs} +3403 -3615
  137. package/fesm2020/breeze-client.mjs.map +1 -0
  138. package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
  139. package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
  140. package/package.json +126 -12
  141. package/src/entity-metadata.d.ts +6 -4
  142. package/src/entity-query.d.ts +1 -1
  143. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  144. package/adapter-ajax-angularjs/package.json +0 -13
  145. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  146. package/adapter-ajax-fetch/package.json +0 -13
  147. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  148. package/adapter-ajax-httpclient/package.json +0 -17
  149. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  150. package/adapter-ajax-jquery/package.json +0 -13
  151. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  152. package/adapter-ajax-post/package.json +0 -13
  153. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  154. package/adapter-data-service-odata/package.json +0 -13
  155. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  156. package/adapter-data-service-webapi/package.json +0 -13
  157. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  158. package/adapter-model-library-backing-store/package.json +0 -13
  159. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  160. package/adapter-model-library-ko/package.json +0 -13
  161. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  162. package/adapter-uri-builder-json/package.json +0 -13
  163. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  164. package/adapter-uri-builder-odata/package.json +0 -13
  165. package/breeze-client.d.ts +0 -8
  166. package/breeze-client.metadata.json +0 -1
  167. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  168. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  169. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  170. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  171. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  172. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  173. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  174. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  175. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  176. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  177. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  178. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  179. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  180. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  181. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  182. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  183. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  184. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  185. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  186. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  187. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -743
  188. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  189. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  190. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  191. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -326
  192. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  193. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  194. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  195. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  196. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  197. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  198. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  199. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  200. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  201. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  202. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  203. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  204. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  205. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  206. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  207. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  208. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  209. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  210. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  211. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  212. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  213. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  214. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  215. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
  216. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  217. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  218. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  219. package/bundles/breeze-client.umd.js +0 -14094
  220. package/bundles/breeze-client.umd.js.map +0 -1
  221. package/bundles/breeze-client.umd.min.js +0 -16
  222. package/bundles/breeze-client.umd.min.js.map +0 -1
  223. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  224. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  225. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  226. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  227. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  228. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  229. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  230. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  231. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  232. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  233. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  234. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  235. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  236. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  237. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -459
  238. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  239. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -93
  240. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  241. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  242. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  243. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  244. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  245. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  246. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  247. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  248. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  249. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  250. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  251. package/esm2015/breeze-client.js +0 -9
  252. package/esm2015/index.js +0 -2
  253. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  254. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  255. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  256. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  257. package/esm2015/public_api.js +0 -2
  258. package/esm2015/src/abstract-data-service-adapter.js +0 -296
  259. package/esm2015/src/array.js +0 -4
  260. package/esm2015/src/assert-param.js +0 -312
  261. package/esm2015/src/breeze.js +0 -85
  262. package/esm2015/src/complex-array.js +0 -119
  263. package/esm2015/src/config.js +0 -223
  264. package/esm2015/src/core.js +0 -706
  265. package/esm2015/src/csdl-metadata-parser.js +0 -385
  266. package/esm2015/src/data-service.js +0 -203
  267. package/esm2015/src/data-type.js +0 -444
  268. package/esm2015/src/default-property-interceptor.js +0 -459
  269. package/esm2015/src/entity-action.js +0 -45
  270. package/esm2015/src/entity-aspect.js +0 -806
  271. package/esm2015/src/entity-group.js +0 -187
  272. package/esm2015/src/entity-key.js +0 -116
  273. package/esm2015/src/entity-manager.js +0 -2094
  274. package/esm2015/src/entity-metadata.js +0 -2109
  275. package/esm2015/src/entity-query.js +0 -996
  276. package/esm2015/src/entity-state.js +0 -99
  277. package/esm2015/src/enum.js +0 -141
  278. package/esm2015/src/event.js +0 -256
  279. package/esm2015/src/interface-registry.js +0 -41
  280. package/esm2015/src/key-generator.js +0 -108
  281. package/esm2015/src/local-query-comparison-options.js +0 -65
  282. package/esm2015/src/mapping-context.js +0 -405
  283. package/esm2015/src/naming-convention.js +0 -88
  284. package/esm2015/src/observable-array.js +0 -185
  285. package/esm2015/src/predicate.js +0 -1235
  286. package/esm2015/src/primitive-array.js +0 -87
  287. package/esm2015/src/query-options.js +0 -152
  288. package/esm2015/src/relation-array.js +0 -175
  289. package/esm2015/src/save-options.js +0 -41
  290. package/esm2015/src/unattached-children-map.js +0 -58
  291. package/esm2015/src/validate.js +0 -991
  292. package/esm2015/src/validation-options.js +0 -64
  293. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
  294. package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
  295. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  296. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
  297. package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
  298. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  299. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
  300. package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
  301. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  302. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
  303. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  304. package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
  305. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  306. package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
  307. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +0 -466
  308. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  309. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -98
  310. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  311. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
  312. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  313. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
  314. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  315. package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
  316. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
  317. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  318. package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
  319. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
  320. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  321. package/esm5/breeze-client.js +0 -9
  322. package/esm5/index.js +0 -2
  323. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  324. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  325. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  326. package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -412
  327. package/esm5/public_api.js +0 -2
  328. package/esm5/src/abstract-data-service-adapter.js +0 -302
  329. package/esm5/src/array.js +0 -4
  330. package/esm5/src/assert-param.js +0 -317
  331. package/esm5/src/breeze.js +0 -85
  332. package/esm5/src/complex-array.js +0 -119
  333. package/esm5/src/config.js +0 -228
  334. package/esm5/src/core.js +0 -714
  335. package/esm5/src/csdl-metadata-parser.js +0 -385
  336. package/esm5/src/data-service.js +0 -207
  337. package/esm5/src/data-type.js +0 -451
  338. package/esm5/src/default-property-interceptor.js +0 -459
  339. package/esm5/src/entity-action.js +0 -52
  340. package/esm5/src/entity-aspect.js +0 -812
  341. package/esm5/src/entity-group.js +0 -189
  342. package/esm5/src/entity-key.js +0 -118
  343. package/esm5/src/entity-manager.js +0 -2112
  344. package/esm5/src/entity-metadata.js +0 -2144
  345. package/esm5/src/entity-query.js +0 -1023
  346. package/esm5/src/entity-state.js +0 -106
  347. package/esm5/src/enum.js +0 -144
  348. package/esm5/src/event.js +0 -259
  349. package/esm5/src/interface-registry.js +0 -43
  350. package/esm5/src/key-generator.js +0 -111
  351. package/esm5/src/local-query-comparison-options.js +0 -67
  352. package/esm5/src/mapping-context.js +0 -407
  353. package/esm5/src/naming-convention.js +0 -90
  354. package/esm5/src/observable-array.js +0 -201
  355. package/esm5/src/predicate.js +0 -1300
  356. package/esm5/src/primitive-array.js +0 -87
  357. package/esm5/src/query-options.js +0 -167
  358. package/esm5/src/relation-array.js +0 -175
  359. package/esm5/src/save-options.js +0 -43
  360. package/esm5/src/unattached-children-map.js +0 -60
  361. package/esm5/src/validate.js +0 -996
  362. package/esm5/src/validation-options.js +0 -66
  363. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  364. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  365. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  366. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  367. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  368. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  369. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  370. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  371. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  372. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  373. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  374. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  375. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  376. package/fesm2015/breeze-client.js.map +0 -1
  377. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  378. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  379. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  380. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  381. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  382. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  383. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  384. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  385. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  386. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  387. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  388. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  389. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  390. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  391. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  392. package/fesm5/breeze-client.js.map +0 -1
  393. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  394. package/mixin-get-entity-graph/package.json +0 -13
  395. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  396. package/mixin-save-queuing/package.json +0 -13
  397. package/public_api.d.ts +0 -1
@@ -1,459 +0,0 @@
1
- import { core } from './core';
2
- import { EntityKey } from './entity-key';
3
- import { EntityAspect } from './entity-aspect';
4
- import { EntityState } from './entity-state';
5
- import { EntityAction } from './entity-action';
6
- import { EntityQuery } from './entity-query';
7
- /** @hidden @internal */
8
- export function defaultPropertyInterceptor(property, newValue, rawAccessorFn) {
9
- // 'this' is the entity itself in this context.
10
- if (newValue === undefined)
11
- newValue = null; // remove? to allow assignment to undefined in Babel constructors?
12
- var oldValue = rawAccessorFn();
13
- var dataType = property.dataType;
14
- if (dataType && dataType.parse) {
15
- // attempts to coerce a value to the correct type - if this fails return the value unchanged
16
- if (Array.isArray(newValue) && !property.isScalar) {
17
- newValue = newValue.map(function (nv) {
18
- return dataType.parse(nv, typeof nv);
19
- });
20
- }
21
- else {
22
- newValue = dataType.parse(newValue, typeof newValue);
23
- }
24
- }
25
- // exit if no change - extra cruft is because dateTimes don't compare cleanly.
26
- if (newValue === oldValue || (dataType && dataType.normalize && newValue && oldValue && dataType.normalize(newValue) === dataType.normalize(oldValue))) {
27
- return;
28
- }
29
- // CANNOT DO NEXT LINE because it has the possibility of creating a new property
30
- // 'entityAspect' on 'this'. - Not permitted by IE inside of a defined property on a prototype.
31
- // let entityAspect = new EntityAspect(this);
32
- var propertyName;
33
- var entityAspect = this.entityAspect;
34
- if (entityAspect) {
35
- propertyName = property.name;
36
- }
37
- else {
38
- var localAspect = this.complexAspect;
39
- if (localAspect) {
40
- entityAspect = localAspect.getEntityAspect();
41
- propertyName = localAspect.getPropertyPath(property.name);
42
- }
43
- else {
44
- // does not yet have an EntityAspect so just set the prop
45
- rawAccessorFn(newValue);
46
- return;
47
- }
48
- }
49
- // Note that we need to handle multiple properties in process, not just one in order to avoid recursion.
50
- // ( except in the case of null propagation with fks where null -> 0 in some cases.)
51
- // (this may not be needed because of the newValue === oldValue test above)
52
- var inProcess = entityAspect._inProcess = entityAspect._inProcess || [];
53
- // check for recursion
54
- if (inProcess.indexOf(property) >= 0)
55
- return;
56
- inProcess.push(property);
57
- try {
58
- var context = {
59
- parent: this,
60
- property: property,
61
- newValue: newValue,
62
- oldValue: oldValue,
63
- propertyName: propertyName,
64
- entityAspect: entityAspect
65
- };
66
- if (property.isComplexProperty) {
67
- setDpValueComplex(context, rawAccessorFn);
68
- }
69
- else if (property.isDataProperty) {
70
- setDpValueSimple(context, rawAccessorFn);
71
- }
72
- else {
73
- setNpValue(context, rawAccessorFn);
74
- }
75
- postChangeEvents(context);
76
- }
77
- finally {
78
- inProcess.pop();
79
- }
80
- }
81
- function setDpValueSimple(context, rawAccessorFn) {
82
- var parent = context.parent;
83
- var property = context.property;
84
- var entityAspect = context.entityAspect;
85
- var oldValue = context.oldValue;
86
- var newValue = context.newValue;
87
- var entityManager = entityAspect.entityManager;
88
- if (!property.isScalar) {
89
- throw new Error("Nonscalar data properties are readonly - items may be added or removed but the collection may not be changed.");
90
- }
91
- // store an original value for this property if not already set
92
- if (entityAspect.entityState.isUnchangedOrModified()) {
93
- var propName = property.name;
94
- // localAspect is not the same as entityAspect for complex props
95
- var localAspect = EntityAspect.isEntity(parent) ? parent.entityAspect : parent.complexAspect;
96
- if (localAspect.originalValues[propName] === undefined) {
97
- // otherwise this entry will be skipped during serialization
98
- localAspect.originalValues[propName] = oldValue !== undefined ? oldValue : property.defaultValue;
99
- }
100
- }
101
- // if we are changing the key update our internal entityGroup indexes.
102
- if (property.isPartOfKey && entityManager && !entityManager.isLoading) {
103
- // 'entityType' on the next line be null for complex properties but it will only be ref'd within this
104
- // fn when the property is part of the key
105
- var entityType = parent.entityType;
106
- var keyProps = entityType.keyProperties;
107
- var values = keyProps.map(function (p) {
108
- if (p === property) {
109
- return newValue;
110
- }
111
- else {
112
- return parent.getProperty(p.name);
113
- }
114
- });
115
- var newKey = new EntityKey(entityType, values);
116
- if (entityManager.getEntityByKey(newKey)) {
117
- throw new Error("An entity with this key is already in the cache: " + newKey.toString());
118
- }
119
- var oldKey = parent.entityAspect.getKey();
120
- var eg = entityManager._findEntityGroup(entityType);
121
- eg._replaceKey(oldKey, newKey);
122
- }
123
- // process related updates ( the inverse relationship) first so that collection dups check works properly.
124
- // update inverse relationship
125
- var relatedNavProp = property.relatedNavigationProperty;
126
- if (relatedNavProp && entityManager) {
127
- // Example: bidirectional fkDataProperty: 1->n: order -> orderDetails
128
- // orderDetail.orderId <- newOrderId || null
129
- // ==> orderDetail.order = lookupOrder(newOrderId)
130
- // ==> (see set navProp above)
131
- // and
132
- // Example: bidirectional fkDataProperty: 1->1: order -> internationalOrder
133
- // internationalOrder.orderId <- newOrderId || null
134
- // ==> internationalOrder.order = lookupOrder(newOrderId)
135
- // ==> (see set navProp above)
136
- if (newValue != null) {
137
- var relatedEntity = void 0;
138
- var key = void 0;
139
- if (relatedNavProp.invForeignKeyNames.length) {
140
- // property is related by field which is not the PK
141
- var query = new EntityQuery(relatedNavProp.entityType.defaultResourceName).where(relatedNavProp.invForeignKeyNames[0], 'eq', newValue);
142
- var qresult = entityManager.executeQueryLocally(query);
143
- if (qresult.length === 1) {
144
- relatedEntity = qresult[0];
145
- }
146
- }
147
- else {
148
- // property is related by the PK
149
- key = new EntityKey(relatedNavProp.entityType, [newValue]);
150
- relatedEntity = entityManager.getEntityByKey(key);
151
- }
152
- if (relatedEntity) {
153
- parent.setProperty(relatedNavProp.name, relatedEntity);
154
- }
155
- else {
156
- // it may not have been fetched yet in which case we want to add it as an unattachedChild.
157
- if (key) {
158
- // TODO currently _linkRelatedentities only works with PK relations, so we only add those.
159
- entityManager._unattachedChildrenMap.addChild(key, relatedNavProp, parent);
160
- }
161
- parent.setProperty(relatedNavProp.name, null);
162
- }
163
- }
164
- else {
165
- parent.setProperty(relatedNavProp.name, null);
166
- }
167
- }
168
- else if (property.inverseNavigationProperty && entityManager && !entityManager._inKeyFixup) {
169
- // Example: unidirectional fkDataProperty: 1->n: region -> territories
170
- // territory.regionId <- newRegionId
171
- // ==> lookupRegion(newRegionId).territories.push(territory)
172
- // and
173
- // Example: unidirectional fkDataProperty: 1->1: order -> internationalOrder
174
- // internationalOrder.orderId <- newOrderId
175
- // ==> lookupOrder(newOrderId).internationalOrder = internationalOrder
176
- // and
177
- // Example: unidirectional fkDataProperty: 1->n: region -> territories
178
- // territory.regionId <- null
179
- // ==> lookupRegion(territory.oldRegionId).territories.remove(oldTerritory);
180
- // and
181
- // Example: unidirectional fkDataProperty: 1->1: order -> internationalOrder
182
- // internationalOrder.orderId <- null
183
- // ==> lookupOrder(internationalOrder.oldOrderId).internationalOrder = null;
184
- var invNavProp = property.inverseNavigationProperty;
185
- if (oldValue != null) {
186
- var key = new EntityKey(invNavProp.parentType, [oldValue]);
187
- var relatedEntity = entityManager.getEntityByKey(key);
188
- if (relatedEntity) {
189
- if (invNavProp.isScalar) {
190
- relatedEntity.setProperty(invNavProp.name, null);
191
- }
192
- else {
193
- // remove 'this' from old related nav prop
194
- var relatedArray = relatedEntity.getProperty(invNavProp.name);
195
- // arr.splice(arr.indexOf(value_to_remove), 1);
196
- relatedArray.splice(relatedArray.indexOf(parent), 1);
197
- }
198
- }
199
- }
200
- if (newValue != null) {
201
- var key = new EntityKey(invNavProp.parentType, [newValue]);
202
- var relatedEntity = entityManager.getEntityByKey(key);
203
- if (relatedEntity) {
204
- if (invNavProp.isScalar) {
205
- relatedEntity.setProperty(invNavProp.name, parent);
206
- }
207
- else {
208
- relatedEntity.getProperty(invNavProp.name).push(parent);
209
- }
210
- }
211
- else {
212
- // it may not have been fetched yet in which case we want to add it as an unattachedChild.
213
- entityManager._unattachedChildrenMap.addChild(key, invNavProp, parent);
214
- }
215
- }
216
- }
217
- rawAccessorFn(newValue);
218
- updateStateAndValidate(context);
219
- // if (property.isPartOfKey && (!this.complexAspect)) {
220
- if (property.isPartOfKey) {
221
- // propogate pk change to all related entities;
222
- var entityType = parent.entityType;
223
- var propertyIx_1 = entityType.keyProperties.indexOf(property);
224
- // this part handles order.orderId => orderDetail.orderId
225
- // but won't handle product.productId => orderDetail.productId because product
226
- // doesn't have an orderDetails property.
227
- entityType.navigationProperties.forEach(function (np) {
228
- var inverseNp = np.inverse;
229
- var fkNames = inverseNp ? inverseNp.foreignKeyNames : np.invForeignKeyNames;
230
- if (fkNames.length === 0)
231
- return;
232
- var npValue = parent.getProperty(np.name);
233
- if (!npValue)
234
- return;
235
- var fkName = fkNames[propertyIx_1];
236
- if (np.isScalar) {
237
- npValue.setProperty(fkName, newValue);
238
- }
239
- else {
240
- npValue.slice(0).forEach(function (iv) {
241
- iv.setProperty(fkName, newValue);
242
- });
243
- }
244
- });
245
- // this handles unidirectional problems not covered above.
246
- if (entityManager) {
247
- var inverseForeignKeyProperties = entityType.inverseForeignKeyProperties;
248
- var baseEntityType = entityType.baseEntityType;
249
- while (baseEntityType) {
250
- inverseForeignKeyProperties = inverseForeignKeyProperties.concat(baseEntityType.inverseForeignKeyProperties);
251
- baseEntityType = baseEntityType.baseEntityType;
252
- }
253
- inverseForeignKeyProperties.forEach(function (invFkProp) {
254
- if (invFkProp.relatedNavigationProperty.inverse == null) {
255
- // this next step may be slow - it iterates over all of the entities in a group;
256
- // hopefully it doesn't happen often.
257
- entityManager._updateFkVal(invFkProp, oldValue, newValue);
258
- }
259
- });
260
- }
261
- // insure that cached key is updated.
262
- entityAspect.getKey(true);
263
- }
264
- }
265
- function setDpValueComplex(context, rawAccessorFn) {
266
- var property = context.property;
267
- var oldValue = context.oldValue;
268
- var newValue = context.newValue;
269
- // To get here it must be a ComplexProperty
270
- // 'dataType' will be a complexType
271
- var dataType = property.dataType;
272
- if (property.isScalar) {
273
- if (!newValue) {
274
- throw new Error(core.formatString("You cannot set the '%1' property to null because it's datatype is the ComplexType: '%2'", property.name, property.dataType.name));
275
- }
276
- if (!oldValue) {
277
- var ctor = dataType.getCtor();
278
- oldValue = new ctor();
279
- rawAccessorFn(oldValue);
280
- }
281
- dataType.dataProperties.forEach(function (dp) {
282
- var pn = dp.name;
283
- var nv = newValue.getProperty(pn);
284
- oldValue.setProperty(pn, nv);
285
- });
286
- }
287
- else {
288
- throw new Error(core.formatString("You cannot set the non-scalar complex property: '%1' on the type: '%2'." +
289
- "Instead get the property and use array functions like 'push' or 'splice' to change its contents.", property.name, property.parentType.name));
290
- }
291
- }
292
- function setNpValue(context, rawAccessorFn) {
293
- var parent = context.parent;
294
- var property = context.property;
295
- var entityAspect = context.entityAspect;
296
- var oldValue = context.oldValue;
297
- var newValue = context.newValue;
298
- if (!property.isScalar) {
299
- throw new Error("Nonscalar navigation properties are readonly - entities can be added or removed but the collection may not be changed.");
300
- }
301
- var entityManager = entityAspect.entityManager;
302
- var inverseProp = property.inverse;
303
- // manage attachment -
304
- if (newValue != null) {
305
- if (!newValue.entityAspect) {
306
- return;
307
- }
308
- var newAspect = newValue.entityAspect;
309
- if (entityManager) {
310
- if (newAspect.entityState.isDetached()) {
311
- if (!entityManager.isLoading) {
312
- entityManager.attachEntity(newValue, EntityState.Added);
313
- }
314
- }
315
- else {
316
- if (newAspect.entityManager !== entityManager) {
317
- throw new Error("An Entity cannot be attached to an entity in another EntityManager. One of the two entities must be detached first.");
318
- }
319
- }
320
- }
321
- else {
322
- if (newAspect && newAspect.entityManager) {
323
- entityManager = newAspect.entityManager;
324
- if (!entityManager.isLoading) {
325
- entityManager.attachEntity(entityAspect.entity, EntityState.Added);
326
- }
327
- }
328
- }
329
- }
330
- // process related updates ( the inverse relationship) first so that collection dups check works properly.
331
- // update inverse relationship
332
- if (inverseProp) {
333
- ///
334
- if (inverseProp.isScalar) {
335
- // Example: bidirectional navProperty: 1->1: order -> internationalOrder
336
- // order.internationalOrder <- internationalOrder || null
337
- // ==> (oldInternationalOrder.order = null)
338
- // ==> internationalOrder.order = order
339
- if (oldValue != null) {
340
- // TODO: null -> NullEntity later
341
- oldValue.setProperty(inverseProp.name, null);
342
- }
343
- if (newValue != null) {
344
- newValue.setProperty(inverseProp.name, parent);
345
- }
346
- }
347
- else {
348
- // Example: bidirectional navProperty: 1->n: order -> orderDetails
349
- // orderDetail.order <- newOrder || null
350
- // ==> (oldOrder).orderDetails.remove(orderDetail)
351
- // ==> order.orderDetails.push(newOrder)
352
- if (oldValue != null) {
353
- var oldSiblings = oldValue.getProperty(inverseProp.name);
354
- var ix = oldSiblings.indexOf(parent);
355
- if (ix !== -1) {
356
- oldSiblings.splice(ix, 1);
357
- }
358
- }
359
- if (newValue != null) {
360
- var siblings = newValue.getProperty(inverseProp.name);
361
- // recursion check if already in the collection is performed by the relationArray
362
- siblings.push(parent);
363
- }
364
- }
365
- }
366
- else if (property.invForeignKeyNames && entityManager && !entityManager._inKeyFixup) {
367
- var invForeignKeyNames = property.invForeignKeyNames;
368
- if (newValue != null) {
369
- // Example: unidirectional navProperty: 1->1: order -> internationalOrder
370
- // order.InternationalOrder <- internationalOrder
371
- // ==> internationalOrder.orderId = orderId
372
- // and
373
- // Example: unidirectional navProperty: 1->n: order -> orderDetails
374
- // orderDetail.order <-xxx newOrder
375
- // ==> CAN'T HAPPEN because if unidirectional because orderDetail will not have an order prop
376
- var pkValues_1 = parent.entityAspect.getKey().values;
377
- invForeignKeyNames.forEach(function (fkName, i) {
378
- newValue.setProperty(fkName, pkValues_1[i]);
379
- });
380
- }
381
- else {
382
- // Example: unidirectional navProperty: 1->1: order -> internationalOrder
383
- // order.internationalOrder <- null
384
- // ==> (old internationalOrder).orderId = null
385
- // and
386
- // Example: unidirectional navProperty: 1->n: order -> orderDetails
387
- // orderDetail.order <-xxx newOrder
388
- // ==> CAN'T HAPPEN because if unidirectional because orderDetail will not have an order prop
389
- if (oldValue != null) {
390
- invForeignKeyNames.forEach(function (fkName) {
391
- var fkProp = oldValue.entityType.getProperty(fkName);
392
- if (!fkProp.isPartOfKey) {
393
- // don't update with null if fk is part of the key
394
- oldValue.setProperty(fkName, null);
395
- }
396
- });
397
- }
398
- }
399
- }
400
- rawAccessorFn(newValue);
401
- updateStateAndValidate(context);
402
- // update fk data property - this can only occur if this navProperty has
403
- // a corresponding fk on this entity.
404
- if (property.relatedDataProperties) {
405
- var entityState = entityAspect.entityState;
406
- // if either side of nav prop is detached don't clear fks. Note: oldValue in next line cannot be null so no check is needed.
407
- if (newValue == null && (entityState.isDetached() || oldValue.entityAspect.entityState.isDetached()))
408
- return;
409
- if (entityState.isDeleted())
410
- return;
411
- // we may have inverse props indicating the related prop on the other entity, if it is not the other entity's PK
412
- var inverseKeyProps = property.invForeignKeyNames;
413
- if (!(inverseKeyProps && inverseKeyProps.length)) {
414
- // otherwise, this prop is related to the other entity's PK
415
- inverseKeyProps = property.entityType.keyProperties.map(function (k) { return k.name; });
416
- }
417
- inverseKeyProps.forEach(function (keyProp, i) {
418
- var relatedDataProp = property.relatedDataProperties[i];
419
- // Do not trash related property if it is part of that entity's key
420
- if (newValue || !relatedDataProp.isPartOfKey) {
421
- var relatedValue = newValue ? newValue.getProperty(keyProp) : relatedDataProp.defaultValue;
422
- parent.setProperty(relatedDataProp.name, relatedValue);
423
- }
424
- });
425
- }
426
- }
427
- function postChangeEvents(context) {
428
- var entityAspect = context.entityAspect;
429
- var entityManager = entityAspect.entityManager;
430
- var entity = entityAspect.entity;
431
- var propChangedArgs = { entity: entity, parent: context.parent, property: context.property, propertyName: context.propertyName, oldValue: context.oldValue, newValue: context.newValue };
432
- if (entityManager) {
433
- // propertyChanged will be fired during loading but we only want to fire it once per entity, not once per property.
434
- // so propertyChanged is fired in the entityManager mergeEntity method if not fired here.
435
- if ((!entityManager.isLoading) && (!entityManager.isRejectingChanges)) {
436
- entityAspect.propertyChanged.publish(propChangedArgs);
437
- // don't fire entityChanged event if propertyChanged is suppressed.
438
- entityManager.entityChanged.publish({ entityAction: EntityAction.PropertyChange, entity: entity, args: propChangedArgs });
439
- }
440
- }
441
- else {
442
- entityAspect.propertyChanged.publish(propChangedArgs);
443
- }
444
- }
445
- function updateStateAndValidate(context) {
446
- var entityAspect = context.entityAspect;
447
- var entityManager = entityAspect.entityManager;
448
- if (entityManager == null || entityManager.isLoading)
449
- return;
450
- var property = context.property;
451
- if (entityAspect.entityState.isUnchanged() && !property.isUnmapped) {
452
- entityAspect.setModified();
453
- }
454
- if (entityManager.validationOptions.validateOnPropertyChange) {
455
- // entityAspect.entity is NOT the same as parent in the code below. It's use is deliberate.
456
- entityAspect._validateProperty(context.newValue, { entity: entityAspect.entity, property: property, propertyName: context.propertyName, oldValue: context.oldValue });
457
- }
458
- }
459
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZGVmYXVsdC1wcm9wZXJ0eS1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBMkMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3Qyx3QkFBd0I7QUFDeEIsTUFBTSxVQUFVLDBCQUEwQixDQUF5QixRQUF3QixFQUFFLFFBQWEsRUFBRSxhQUF1QjtJQUNqSSwrQ0FBK0M7SUFFL0MsSUFBSSxRQUFRLEtBQUssU0FBUztRQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxrRUFBa0U7SUFDL0csSUFBSSxRQUFRLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFFL0IsSUFBSSxRQUFRLEdBQUksUUFBZ0IsQ0FBQyxRQUFRLENBQUM7SUFDMUMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtRQUM5Qiw0RkFBNEY7UUFDNUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNqRCxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztTQUNKO2FB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QUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztLQUMxSDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgQ29tcGxleFR5cGUsIERhdGFQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5QXNwZWN0LCBDb21wbGV4QXNwZWN0LCBFbnRpdHksIFN0cnVjdHVyYWxPYmplY3QgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5UXVlcnkgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRQcm9wZXJ0eUludGVyY2VwdG9yKHRoaXM6IFN0cnVjdHVyYWxPYmplY3QsIHByb3BlcnR5OiBFbnRpdHlQcm9wZXJ0eSwgbmV3VmFsdWU6IGFueSwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuICAvLyAndGhpcycgaXMgdGhlIGVudGl0eSBpdHNlbGYgaW4gdGhpcyBjb250ZXh0LlxyXG5cclxuICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkgbmV3VmFsdWUgPSBudWxsOyAvLyByZW1vdmU/IHRvIGFsbG93IGFzc2lnbm1lbnQgdG8gdW5kZWZpbmVkIGluIEJhYmVsIGNvbnN0cnVjdG9ycz9cclxuICBsZXQgb2xkVmFsdWUgPSByYXdBY2Nlc3NvckZuKCk7XHJcblxyXG4gIGxldCBkYXRhVHlwZSA9IChwcm9wZXJ0eSBhcyBhbnkpLmRhdGFUeXBlO1xyXG4gIGlmIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5wYXJzZSkge1xyXG4gICAgLy8gYXR0ZW1wdHMgdG8gY29lcmNlIGEgdmFsdWUgdG8gdGhlIGNvcnJlY3QgdHlwZSAtIGlmIHRoaXMgZmFpbHMgcmV0dXJuIHRoZSB2YWx1ZSB1bmNoYW5nZWRcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJiAhcHJvcGVydHkuaXNTY2FsYXIpIHtcclxuICAgICAgbmV3VmFsdWUgPSBuZXdWYWx1ZS5tYXAoZnVuY3Rpb24gKG52KSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFUeXBlLnBhcnNlKG52LCB0eXBlb2YgbnYpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gZGF0YVR5cGUucGFyc2UobmV3VmFsdWUsIHR5cGVvZiBuZXdWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBleGl0IGlmIG5vIGNoYW5nZSAtIGV4dHJhIGNydWZ0IGlzIGJlY2F1c2UgZGF0ZVRpbWVzIGRvbid0IGNvbXBhcmUgY2xlYW5seS5cclxuICBpZiAobmV3VmFsdWUgPT09IG9sZFZhbHVlIHx8IChkYXRhVHlwZSAmJiBkYXRhVHlwZS5ub3JtYWxpemUgJiYgbmV3VmFsdWUgJiYgb2xkVmFsdWUgJiYgZGF0YVR5cGUubm9ybWFsaXplKG5ld1ZhbHVlKSA9PT0gZGF0YVR5cGUubm9ybWFsaXplKG9sZFZhbHVlKSkpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIENBTk5PVCBETyBORVhUIExJTkUgYmVjYXVzZSBpdCBoYXMgdGhlIHBvc3NpYmlsaXR5IG9mIGNyZWF0aW5nIGEgbmV3IHByb3BlcnR5XHJcbiAgLy8gJ2VudGl0eUFzcGVjdCcgb24gJ3RoaXMnLiAgLSBOb3QgcGVybWl0dGVkIGJ5IElFIGluc2lkZSBvZiBhIGRlZmluZWQgcHJvcGVydHkgb24gYSBwcm90b3R5cGUuXHJcbiAgLy8gbGV0IGVudGl0eUFzcGVjdCA9IG5ldyBFbnRpdHlBc3BlY3QodGhpcyk7XHJcblxyXG4gIGxldCBwcm9wZXJ0eU5hbWU6IHN0cmluZztcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gKHRoaXMgYXMgYW55KS5lbnRpdHlBc3BlY3QgYXMgRW50aXR5QXNwZWN0O1xyXG4gIGlmIChlbnRpdHlBc3BlY3QpIHtcclxuICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Lm5hbWU7XHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCBsb2NhbEFzcGVjdCA9ICh0aGlzIGFzIGFueSkuY29tcGxleEFzcGVjdCBhcyBDb21wbGV4QXNwZWN0O1xyXG4gICAgaWYgKGxvY2FsQXNwZWN0KSB7XHJcbiAgICAgIGVudGl0eUFzcGVjdCA9IGxvY2FsQXNwZWN0LmdldEVudGl0eUFzcGVjdCgpO1xyXG4gICAgICBwcm9wZXJ0eU5hbWUgPSBsb2NhbEFzcGVjdC5nZXRQcm9wZXJ0eVBhdGgocHJvcGVydHkubmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBFbnRpdHlBc3BlY3Qgc28ganVzdCBzZXQgdGhlIHByb3BcclxuICAgICAgcmF3QWNjZXNzb3JGbihuZXdWYWx1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGhhbmRsZSBtdWx0aXBsZSBwcm9wZXJ0aWVzIGluIHByb2Nlc3MsIG5vdCBqdXN0IG9uZSBpbiBvcmRlciB0byBhdm9pZCByZWN1cnNpb24uXHJcbiAgLy8gKCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgbnVsbCBwcm9wYWdhdGlvbiB3aXRoIGZrcyB3aGVyZSBudWxsIC0+IDAgaW4gc29tZSBjYXNlcy4pXHJcbiAgLy8gKHRoaXMgbWF5IG5vdCBiZSBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgbmV3VmFsdWUgPT09IG9sZFZhbHVlIHRlc3QgYWJvdmUpXHJcbiAgbGV0IGluUHJvY2VzcyA9IGVudGl0eUFzcGVjdC5faW5Qcm9jZXNzID0gZW50aXR5QXNwZWN0Ll9pblByb2Nlc3MgfHwgW107XHJcbiAgLy8gY2hlY2sgZm9yIHJlY3Vyc2lvblxyXG4gIGlmIChpblByb2Nlc3MuaW5kZXhPZihwcm9wZXJ0eSkgPj0gMCkgcmV0dXJuO1xyXG4gIGluUHJvY2Vzcy5wdXNoKHByb3BlcnR5KTtcclxuXHJcbiAgdHJ5IHtcclxuXHJcbiAgICBsZXQgY29udGV4dDogSUNvbnRleHQgPSB7XHJcbiAgICAgIHBhcmVudDogdGhpcyxcclxuICAgICAgcHJvcGVydHk6IHByb3BlcnR5LFxyXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXHJcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcclxuICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXHJcbiAgICAgIGVudGl0eUFzcGVjdDogZW50aXR5QXNwZWN0XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICgocHJvcGVydHkgYXMgYW55KS5pc0NvbXBsZXhQcm9wZXJ0eSkge1xyXG4gICAgICBzZXREcFZhbHVlQ29tcGxleChjb250ZXh0LCByYXdBY2Nlc3NvckZuKTtcclxuICAgIH0gZWxzZSBpZiAocHJvcGVydHkuaXNEYXRhUHJvcGVydHkpIHtcclxuICAgICAgc2V0RHBWYWx1ZVNpbXBsZShjb250ZXh0LCByYXdBY2Nlc3NvckZuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldE5wVmFsdWUoY29udGV4dCwgcmF3QWNjZXNzb3JGbik7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdENoYW5nZUV2ZW50cyhjb250ZXh0KTtcclxuXHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIGluUHJvY2Vzcy5wb3AoKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBJQ29udGV4dCB7XHJcbiAgcGFyZW50OiBTdHJ1Y3R1cmFsT2JqZWN0O1xyXG4gIHByb3BlcnR5OiBFbnRpdHlQcm9wZXJ0eTtcclxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcclxuICBlbnRpdHlBc3BlY3Q6IEVudGl0eUFzcGVjdDtcclxuICBvbGRWYWx1ZTogYW55O1xyXG4gIG5ld1ZhbHVlOiBhbnk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldERwVmFsdWVTaW1wbGUoY29udGV4dDogSUNvbnRleHQsIHJhd0FjY2Vzc29yRm46IGFueSkge1xyXG4gIGxldCBwYXJlbnQgPSBjb250ZXh0LnBhcmVudDtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIERhdGFQcm9wZXJ0eTtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcbiAgbGV0IG9sZFZhbHVlID0gY29udGV4dC5vbGRWYWx1ZTtcclxuICBsZXQgbmV3VmFsdWUgPSBjb250ZXh0Lm5ld1ZhbHVlO1xyXG5cclxuICBsZXQgZW50aXR5TWFuYWdlciA9IGVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG5cclxuICBpZiAoIXByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb25zY2FsYXIgZGF0YSBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSAtIGl0ZW1zIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGJ1dCB0aGUgY29sbGVjdGlvbiBtYXkgbm90IGJlIGNoYW5nZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8gc3RvcmUgYW4gb3JpZ2luYWwgdmFsdWUgZm9yIHRoaXMgcHJvcGVydHkgaWYgbm90IGFscmVhZHkgc2V0XHJcbiAgaWYgKGVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZS5pc1VuY2hhbmdlZE9yTW9kaWZpZWQoKSkge1xyXG4gICAgbGV0IHByb3BOYW1lID0gcHJvcGVydHkubmFtZTtcclxuICAgIC8vIGxvY2FsQXNwZWN0IGlzIG5vdCB0aGUgc2FtZSBhcyBlbnRpdHlBc3BlY3QgZm9yIGNvbXBsZXggcHJvcHNcclxuICAgIGxldCBsb2NhbEFzcGVjdCA9IEVudGl0eUFzcGVjdC5pc0VudGl0eShwYXJlbnQpID8gcGFyZW50LmVudGl0eUFzcGVjdCA6IHBhcmVudC5jb21wbGV4QXNwZWN0O1xyXG4gICAgaWYgKGxvY2FsQXNwZWN0Lm9yaWdpbmFsVmFsdWVzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vIG90aGVyd2lzZSB0aGlzIGVudHJ5IHdpbGwgYmUgc2tpcHBlZCBkdXJpbmcgc2VyaWFsaXphdGlvblxyXG4gICAgICBsb2NhbEFzcGVjdC5vcmlnaW5hbFZhbHVlc1twcm9wTmFtZV0gPSBvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gb2xkVmFsdWUgOiBwcm9wZXJ0eS5kZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpZiB3ZSBhcmUgY2hhbmdpbmcgdGhlIGtleSB1cGRhdGUgb3VyIGludGVybmFsIGVudGl0eUdyb3VwIGluZGV4ZXMuXHJcbiAgaWYgKHByb3BlcnR5LmlzUGFydE9mS2V5ICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuaXNMb2FkaW5nKSB7XHJcbiAgICAvLyAnZW50aXR5VHlwZScgb24gdGhlIG5leHQgbGluZSBiZSBudWxsIGZvciBjb21wbGV4IHByb3BlcnRpZXMgYnV0IGl0IHdpbGwgb25seSBiZSByZWYnZCB3aXRoaW4gdGhpc1xyXG4gICAgLy8gZm4gd2hlbiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiB0aGUga2V5XHJcbiAgICBsZXQgZW50aXR5VHlwZSA9IChwYXJlbnQgYXMgRW50aXR5KS5lbnRpdHlUeXBlO1xyXG4gICAgbGV0IGtleVByb3BzID0gZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzO1xyXG4gICAgbGV0IHZhbHVlcyA9IGtleVByb3BzLm1hcChmdW5jdGlvbiAocCkge1xyXG4gICAgICBpZiAocCA9PT0gcHJvcGVydHkpIHtcclxuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRQcm9wZXJ0eShwLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGxldCBuZXdLZXkgPSBuZXcgRW50aXR5S2V5KGVudGl0eVR5cGUsIHZhbHVlcyk7XHJcbiAgICBpZiAoZW50aXR5TWFuYWdlci5nZXRFbnRpdHlCeUtleShuZXdLZXkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFuIGVudGl0eSB3aXRoIHRoaXMga2V5IGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlOiBcIiArIG5ld0tleS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIGxldCBvbGRLZXkgPSAocGFyZW50IGFzIEVudGl0eSkuZW50aXR5QXNwZWN0LmdldEtleSgpO1xyXG4gICAgbGV0IGVnID0gZW50aXR5TWFuYWdlci5fZmluZEVudGl0eUdyb3VwKGVudGl0eVR5cGUpO1xyXG4gICAgZWcuX3JlcGxhY2VLZXkob2xkS2V5LCBuZXdLZXkpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJvY2VzcyByZWxhdGVkIHVwZGF0ZXMgKCB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXApIGZpcnN0IHNvIHRoYXQgY29sbGVjdGlvbiBkdXBzIGNoZWNrIHdvcmtzIHByb3Blcmx5LlxyXG4gIC8vIHVwZGF0ZSBpbnZlcnNlIHJlbGF0aW9uc2hpcFxyXG5cclxuICBsZXQgcmVsYXRlZE5hdlByb3AgPSBwcm9wZXJ0eS5yZWxhdGVkTmF2aWdhdGlvblByb3BlcnR5O1xyXG4gIGlmIChyZWxhdGVkTmF2UHJvcCAmJiBlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAvLyBFeGFtcGxlOiBiaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT5uOiBvcmRlciAtPiBvcmRlckRldGFpbHNcclxuICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVySWQgPC0gbmV3T3JkZXJJZCB8fCBudWxsXHJcbiAgICAvLyAgICA9PT4gb3JkZXJEZXRhaWwub3JkZXIgPSBsb29rdXBPcmRlcihuZXdPcmRlcklkKVxyXG4gICAgLy8gICAgPT0+IChzZWUgc2V0IG5hdlByb3AgYWJvdmUpXHJcbiAgICAvLyAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IGJpZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgLy8gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVySWQgPC0gbmV3T3JkZXJJZCB8fCBudWxsXHJcbiAgICAvLyAgICA9PT4gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVyID0gbG9va3VwT3JkZXIobmV3T3JkZXJJZClcclxuICAgIC8vICAgID09PiAoc2VlIHNldCBuYXZQcm9wIGFib3ZlKVxyXG5cclxuICAgIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIGxldCByZWxhdGVkRW50aXR5OiBFbnRpdHk7XHJcbiAgICAgIGxldCBrZXk6IEVudGl0eUtleTtcclxuICAgICAgaWYgKHJlbGF0ZWROYXZQcm9wLmludkZvcmVpZ25LZXlOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgICAvLyBwcm9wZXJ0eSBpcyByZWxhdGVkIGJ5IGZpZWxkIHdoaWNoIGlzIG5vdCB0aGUgUEtcclxuICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBFbnRpdHlRdWVyeShyZWxhdGVkTmF2UHJvcC5lbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWUpLndoZXJlKHJlbGF0ZWROYXZQcm9wLmludkZvcmVpZ25LZXlOYW1lc1swXSwgJ2VxJywgbmV3VmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHFyZXN1bHQgPSBlbnRpdHlNYW5hZ2VyLmV4ZWN1dGVRdWVyeUxvY2FsbHkocXVlcnkpO1xyXG4gICAgICAgIGlmIChxcmVzdWx0Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgcmVsYXRlZEVudGl0eSA9IHFyZXN1bHRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHByb3BlcnR5IGlzIHJlbGF0ZWQgYnkgdGhlIFBLXHJcbiAgICAgICAga2V5ID0gbmV3IEVudGl0eUtleShyZWxhdGVkTmF2UHJvcC5lbnRpdHlUeXBlLCBbbmV3VmFsdWVdKTtcclxuICAgICAgICByZWxhdGVkRW50aXR5ID0gZW50aXR5TWFuYWdlci5nZXRFbnRpdHlCeUtleShrZXkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocmVsYXRlZEVudGl0eSkge1xyXG4gICAgICAgIHBhcmVudC5zZXRQcm9wZXJ0eShyZWxhdGVkTmF2UHJvcC5uYW1lLCByZWxhdGVkRW50aXR5KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBpdCBtYXkgbm90IGhhdmUgYmVlbiBmZXRjaGVkIHlldCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gYWRkIGl0IGFzIGFuIHVuYXR0YWNoZWRDaGlsZC5cclxuICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAvLyBUT0RPIGN1cnJlbnRseSBfbGlua1JlbGF0ZWRlbnRpdGllcyBvbmx5IHdvcmtzIHdpdGggUEsgcmVsYXRpb25zLCBzbyB3ZSBvbmx5IGFkZCB0aG9zZS5cclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIuX3VuYXR0YWNoZWRDaGlsZHJlbk1hcC5hZGRDaGlsZChrZXksIHJlbGF0ZWROYXZQcm9wLCBwYXJlbnQgYXMgRW50aXR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWROYXZQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJlbnQuc2V0UHJvcGVydHkocmVsYXRlZE5hdlByb3AubmFtZSwgbnVsbCk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChwcm9wZXJ0eS5pbnZlcnNlTmF2aWdhdGlvblByb3BlcnR5ICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuX2luS2V5Rml4dXApIHtcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT5uOiByZWdpb24gLT4gdGVycml0b3JpZXNcclxuICAgIC8vIHRlcnJpdG9yeS5yZWdpb25JZCA8LSBuZXdSZWdpb25JZFxyXG4gICAgLy8gICAgPT0+IGxvb2t1cFJlZ2lvbihuZXdSZWdpb25JZCkudGVycml0b3JpZXMucHVzaCh0ZXJyaXRvcnkpXHJcbiAgICAvLyAgICAgICAgICAgICAgICBhbmRcclxuICAgIC8vIEV4YW1wbGU6IHVuaWRpcmVjdGlvbmFsIGZrRGF0YVByb3BlcnR5OiAxLT4xOiBvcmRlciAtPiBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vIGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkIDwtIG5ld09yZGVySWRcclxuICAgIC8vICAgID09PiBsb29rdXBPcmRlcihuZXdPcmRlcklkKS5pbnRlcm5hdGlvbmFsT3JkZXIgPSBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgIC8vICAgICAgICAgICAgICAgIGFuZFxyXG4gICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPm46IHJlZ2lvbiAtPiB0ZXJyaXRvcmllc1xyXG4gICAgLy8gdGVycml0b3J5LnJlZ2lvbklkIDwtIG51bGxcclxuICAgIC8vICAgID09PiBsb29rdXBSZWdpb24odGVycml0b3J5Lm9sZFJlZ2lvbklkKS50ZXJyaXRvcmllcy5yZW1vdmUob2xkVGVycml0b3J5KTtcclxuICAgIC8vICAgICAgICAgICAgICAgIGFuZFxyXG4gICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgZmtEYXRhUHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgLy8gaW50ZXJuYXRpb25hbE9yZGVyLm9yZGVySWQgPC0gbnVsbFxyXG4gICAgLy8gICAgPT0+IGxvb2t1cE9yZGVyKGludGVybmF0aW9uYWxPcmRlci5vbGRPcmRlcklkKS5pbnRlcm5hdGlvbmFsT3JkZXIgPSBudWxsO1xyXG5cclxuICAgIGxldCBpbnZOYXZQcm9wID0gcHJvcGVydHkuaW52ZXJzZU5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuXHJcbiAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBsZXQga2V5ID0gbmV3IEVudGl0eUtleShpbnZOYXZQcm9wLnBhcmVudFR5cGUsIFtvbGRWYWx1ZV0pO1xyXG4gICAgICBsZXQgcmVsYXRlZEVudGl0eSA9IGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkoa2V5KTtcclxuICAgICAgaWYgKHJlbGF0ZWRFbnRpdHkpIHtcclxuICAgICAgICBpZiAoaW52TmF2UHJvcC5pc1NjYWxhcikge1xyXG4gICAgICAgICAgcmVsYXRlZEVudGl0eS5zZXRQcm9wZXJ0eShpbnZOYXZQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyByZW1vdmUgJ3RoaXMnIGZyb20gb2xkIHJlbGF0ZWQgbmF2IHByb3BcclxuICAgICAgICAgIGxldCByZWxhdGVkQXJyYXkgPSByZWxhdGVkRW50aXR5LmdldFByb3BlcnR5KGludk5hdlByb3AubmFtZSk7XHJcbiAgICAgICAgICAvLyBhcnIuc3BsaWNlKGFyci5pbmRleE9mKHZhbHVlX3RvX3JlbW92ZSksIDEpO1xyXG4gICAgICAgICAgcmVsYXRlZEFycmF5LnNwbGljZShyZWxhdGVkQXJyYXkuaW5kZXhPZihwYXJlbnQpLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBsZXQga2V5ID0gbmV3IEVudGl0eUtleShpbnZOYXZQcm9wLnBhcmVudFR5cGUsIFtuZXdWYWx1ZV0pO1xyXG4gICAgICBsZXQgcmVsYXRlZEVudGl0eSA9IGVudGl0eU1hbmFnZXIuZ2V0RW50aXR5QnlLZXkoa2V5KTtcclxuXHJcbiAgICAgIGlmIChyZWxhdGVkRW50aXR5KSB7XHJcbiAgICAgICAgaWYgKGludk5hdlByb3AuaXNTY2FsYXIpIHtcclxuICAgICAgICAgIHJlbGF0ZWRFbnRpdHkuc2V0UHJvcGVydHkoaW52TmF2UHJvcC5uYW1lLCBwYXJlbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWxhdGVkRW50aXR5LmdldFByb3BlcnR5KGludk5hdlByb3AubmFtZSkucHVzaChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBpdCBtYXkgbm90IGhhdmUgYmVlbiBmZXRjaGVkIHlldCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gYWRkIGl0IGFzIGFuIHVuYXR0YWNoZWRDaGlsZC5cclxuICAgICAgICBlbnRpdHlNYW5hZ2VyLl91bmF0dGFjaGVkQ2hpbGRyZW5NYXAuYWRkQ2hpbGQoa2V5LCBpbnZOYXZQcm9wLCBwYXJlbnQgYXMgRW50aXR5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJhd0FjY2Vzc29yRm4obmV3VmFsdWUpO1xyXG5cclxuICB1cGRhdGVTdGF0ZUFuZFZhbGlkYXRlKGNvbnRleHQpO1xyXG5cclxuICAvLyBpZiAocHJvcGVydHkuaXNQYXJ0T2ZLZXkgJiYgKCF0aGlzLmNvbXBsZXhBc3BlY3QpKSB7XHJcbiAgaWYgKHByb3BlcnR5LmlzUGFydE9mS2V5KSB7XHJcbiAgICAvLyBwcm9wb2dhdGUgcGsgY2hhbmdlIHRvIGFsbCByZWxhdGVkIGVudGl0aWVzO1xyXG4gICAgbGV0IGVudGl0eVR5cGUgPSAocGFyZW50IGFzIEVudGl0eSkuZW50aXR5VHlwZTtcclxuICAgIGxldCBwcm9wZXJ0eUl4ID0gZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpO1xyXG4gICAgLy8gdGhpcyBwYXJ0IGhhbmRsZXMgb3JkZXIub3JkZXJJZCA9PiBvcmRlckRldGFpbC5vcmRlcklkXHJcbiAgICAvLyBidXQgd29uJ3QgaGFuZGxlIHByb2R1Y3QucHJvZHVjdElkID0+IG9yZGVyRGV0YWlsLnByb2R1Y3RJZCBiZWNhdXNlIHByb2R1Y3RcclxuICAgIC8vIGRvZXNuJ3QgaGF2ZSBhbiBvcmRlckRldGFpbHMgcHJvcGVydHkuXHJcbiAgICBlbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKG5wKSB7XHJcbiAgICAgIGxldCBpbnZlcnNlTnAgPSBucC5pbnZlcnNlO1xyXG4gICAgICBsZXQgZmtOYW1lcyA9IGludmVyc2VOcCA/IGludmVyc2VOcC5mb3JlaWduS2V5TmFtZXMgOiBucC5pbnZGb3JlaWduS2V5TmFtZXM7XHJcblxyXG4gICAgICBpZiAoZmtOYW1lcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgbGV0IG5wVmFsdWUgPSBwYXJlbnQuZ2V0UHJvcGVydHkobnAubmFtZSk7XHJcbiAgICAgIGlmICghbnBWYWx1ZSkgcmV0dXJuO1xyXG4gICAgICBsZXQgZmtOYW1lID0gZmtOYW1lc1twcm9wZXJ0eUl4XTtcclxuICAgICAgaWYgKG5wLmlzU2NhbGFyKSB7XHJcbiAgICAgICAgbnBWYWx1ZS5zZXRQcm9wZXJ0eShma05hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBucFZhbHVlLnNsaWNlKDApLmZvckVhY2goZnVuY3Rpb24gKGl2OiBhbnkpIHtcclxuICAgICAgICAgIGl2LnNldFByb3BlcnR5KGZrTmFtZSwgbmV3VmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMgaGFuZGxlcyB1bmlkaXJlY3Rpb25hbCBwcm9ibGVtcyBub3QgY292ZXJlZCBhYm92ZS5cclxuICAgIGlmIChlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAgIGxldCBpbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmludmVyc2VGb3JlaWduS2V5UHJvcGVydGllcztcclxuICAgICAgbGV0IGJhc2VFbnRpdHlUeXBlID0gZW50aXR5VHlwZS5iYXNlRW50aXR5VHlwZTtcclxuICAgICAgd2hpbGUgKGJhc2VFbnRpdHlUeXBlKSB7XHJcbiAgICAgICAgaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzID0gaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzLmNvbmNhdChiYXNlRW50aXR5VHlwZS5pbnZlcnNlRm9yZWlnbktleVByb3BlcnRpZXMpO1xyXG4gICAgICAgIGJhc2VFbnRpdHlUeXBlID0gYmFzZUVudGl0eVR5cGUuYmFzZUVudGl0eVR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgaW52ZXJzZUZvcmVpZ25LZXlQcm9wZXJ0aWVzLmZvckVhY2goKGludkZrUHJvcCkgPT4ge1xyXG4gICAgICAgIGlmIChpbnZGa1Byb3AucmVsYXRlZE5hdmlnYXRpb25Qcm9wZXJ0eSEuaW52ZXJzZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAvLyB0aGlzIG5leHQgc3RlcCBtYXkgYmUgc2xvdyAtIGl0IGl0ZXJhdGVzIG92ZXIgYWxsIG9mIHRoZSBlbnRpdGllcyBpbiBhIGdyb3VwO1xyXG4gICAgICAgICAgLy8gaG9wZWZ1bGx5IGl0IGRvZXNuJ3QgaGFwcGVuIG9mdGVuLlxyXG4gICAgICAgICAgZW50aXR5TWFuYWdlciEuX3VwZGF0ZUZrVmFsKGludkZrUHJvcCwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluc3VyZSB0aGF0IGNhY2hlZCBrZXkgaXMgdXBkYXRlZC5cclxuICAgIGVudGl0eUFzcGVjdC5nZXRLZXkodHJ1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzZXREcFZhbHVlQ29tcGxleChjb250ZXh0OiBJQ29udGV4dCwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIERhdGFQcm9wZXJ0eTtcclxuICBsZXQgb2xkVmFsdWUgPSBjb250ZXh0Lm9sZFZhbHVlO1xyXG4gIGxldCBuZXdWYWx1ZSA9IGNvbnRleHQubmV3VmFsdWU7XHJcblxyXG4gIC8vIFRvIGdldCBoZXJlIGl0IG11c3QgYmUgYSBDb21wbGV4UHJvcGVydHlcclxuICAvLyAnZGF0YVR5cGUnIHdpbGwgYmUgYSBjb21wbGV4VHlwZVxyXG4gIGxldCBkYXRhVHlwZSA9IHByb3BlcnR5LmRhdGFUeXBlIGFzIENvbXBsZXhUeXBlO1xyXG4gIGlmIChwcm9wZXJ0eS5pc1NjYWxhcikge1xyXG4gICAgaWYgKCFuZXdWYWx1ZSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoY29yZS5mb3JtYXRTdHJpbmcoXCJZb3UgY2Fubm90IHNldCB0aGUgJyUxJyBwcm9wZXJ0eSB0byBudWxsIGJlY2F1c2UgaXQncyBkYXRhdHlwZSBpcyB0aGUgQ29tcGxleFR5cGU6ICclMidcIiwgcHJvcGVydHkubmFtZSwgcHJvcGVydHkuZGF0YVR5cGUubmFtZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb2xkVmFsdWUpIHtcclxuICAgICAgbGV0IGN0b3IgPSBkYXRhVHlwZS5nZXRDdG9yKCk7XHJcbiAgICAgIG9sZFZhbHVlID0gbmV3IGN0b3IoKTtcclxuICAgICAgcmF3QWNjZXNzb3JGbihvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBkYXRhVHlwZS5kYXRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChkcCkge1xyXG4gICAgICBsZXQgcG4gPSBkcC5uYW1lO1xyXG4gICAgICBsZXQgbnYgPSBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShwbik7XHJcbiAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KHBuLCBudik7XHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGNvcmUuZm9ybWF0U3RyaW5nKFwiWW91IGNhbm5vdCBzZXQgdGhlIG5vbi1zY2FsYXIgY29tcGxleCBwcm9wZXJ0eTogJyUxJyBvbiB0aGUgdHlwZTogJyUyJy5cIiArXHJcbiAgICAgICAgICAgIFwiSW5zdGVhZCBnZXQgdGhlIHByb3BlcnR5IGFuZCB1c2UgYXJyYXkgZnVuY3Rpb25zIGxpa2UgJ3B1c2gnIG9yICdzcGxpY2UnIHRvIGNoYW5nZSBpdHMgY29udGVudHMuXCIsXHJcbiAgICAgICAgcHJvcGVydHkubmFtZSwgcHJvcGVydHkucGFyZW50VHlwZS5uYW1lKSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gc2V0TnBWYWx1ZShjb250ZXh0OiBJQ29udGV4dCwgcmF3QWNjZXNzb3JGbjogRnVuY3Rpb24pIHtcclxuXHJcbiAgbGV0IHBhcmVudCA9IGNvbnRleHQucGFyZW50IGFzIEVudGl0eTtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcbiAgbGV0IG9sZFZhbHVlID0gY29udGV4dC5vbGRWYWx1ZTtcclxuICBsZXQgbmV3VmFsdWUgPSBjb250ZXh0Lm5ld1ZhbHVlO1xyXG5cclxuICBpZiAoIXByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb25zY2FsYXIgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGFyZSByZWFkb25seSAtIGVudGl0aWVzIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGJ1dCB0aGUgY29sbGVjdGlvbiBtYXkgbm90IGJlIGNoYW5nZWQuXCIpO1xyXG4gIH1cclxuXHJcbiAgbGV0IGVudGl0eU1hbmFnZXIgPSBlbnRpdHlBc3BlY3QuZW50aXR5TWFuYWdlcjtcclxuICBsZXQgaW52ZXJzZVByb3AgPSBwcm9wZXJ0eS5pbnZlcnNlO1xyXG5cclxuICAvLyBtYW5hZ2UgYXR0YWNobWVudCAtXHJcbiAgaWYgKG5ld1ZhbHVlICE9IG51bGwpIHtcclxuICAgIGlmICghbmV3VmFsdWUuZW50aXR5QXNwZWN0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBuZXdBc3BlY3QgPSBuZXdWYWx1ZS5lbnRpdHlBc3BlY3Q7XHJcbiAgICBpZiAoZW50aXR5TWFuYWdlcikge1xyXG4gICAgICBpZiAobmV3QXNwZWN0LmVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSkge1xyXG4gICAgICAgIGlmICghZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIuYXR0YWNoRW50aXR5KG5ld1ZhbHVlLCBFbnRpdHlTdGF0ZS5BZGRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChuZXdBc3BlY3QuZW50aXR5TWFuYWdlciAhPT0gZW50aXR5TWFuYWdlcikge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQW4gRW50aXR5IGNhbm5vdCBiZSBhdHRhY2hlZCB0byBhbiBlbnRpdHkgaW4gYW5vdGhlciBFbnRpdHlNYW5hZ2VyLiBPbmUgb2YgdGhlIHR3byBlbnRpdGllcyBtdXN0IGJlIGRldGFjaGVkIGZpcnN0LlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChuZXdBc3BlY3QgJiYgbmV3QXNwZWN0LmVudGl0eU1hbmFnZXIpIHtcclxuICAgICAgICBlbnRpdHlNYW5hZ2VyID0gbmV3QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgICAgICAgaWYgKCFlbnRpdHlNYW5hZ2VyIS5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgIGVudGl0eU1hbmFnZXIhLmF0dGFjaEVudGl0eShlbnRpdHlBc3BlY3QuZW50aXR5ISwgRW50aXR5U3RhdGUuQWRkZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJvY2VzcyByZWxhdGVkIHVwZGF0ZXMgKCB0aGUgaW52ZXJzZSByZWxhdGlvbnNoaXApIGZpcnN0IHNvIHRoYXQgY29sbGVjdGlvbiBkdXBzIGNoZWNrIHdvcmtzIHByb3Blcmx5LlxyXG4gIC8vIHVwZGF0ZSBpbnZlcnNlIHJlbGF0aW9uc2hpcFxyXG4gIGlmIChpbnZlcnNlUHJvcCkge1xyXG4gICAgLy8vXHJcbiAgICBpZiAoaW52ZXJzZVByb3AuaXNTY2FsYXIpIHtcclxuICAgICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vIG9yZGVyLmludGVybmF0aW9uYWxPcmRlciA8LSBpbnRlcm5hdGlvbmFsT3JkZXIgfHwgbnVsbFxyXG4gICAgICAvLyAgICA9PT4gKG9sZEludGVybmF0aW9uYWxPcmRlci5vcmRlciA9IG51bGwpXHJcbiAgICAgIC8vICAgID09PiBpbnRlcm5hdGlvbmFsT3JkZXIub3JkZXIgPSBvcmRlclxyXG4gICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIFRPRE86IG51bGwgLT4gTnVsbEVudGl0eSBsYXRlclxyXG4gICAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUsIG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgbmV3VmFsdWUuc2V0UHJvcGVydHkoaW52ZXJzZVByb3AubmFtZSwgcGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRXhhbXBsZTogYmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVyIDwtIG5ld09yZGVyIHx8IG51bGxcclxuICAgICAgLy8gICAgPT0+IChvbGRPcmRlcikub3JkZXJEZXRhaWxzLnJlbW92ZShvcmRlckRldGFpbClcclxuICAgICAgLy8gICAgPT0+IG9yZGVyLm9yZGVyRGV0YWlscy5wdXNoKG5ld09yZGVyKVxyXG4gICAgICBpZiAob2xkVmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBvbGRTaWJsaW5ncyA9IG9sZFZhbHVlLmdldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUpO1xyXG4gICAgICAgIGxldCBpeCA9IG9sZFNpYmxpbmdzLmluZGV4T2YocGFyZW50KTtcclxuICAgICAgICBpZiAoaXggIT09IC0xKSB7XHJcbiAgICAgICAgICBvbGRTaWJsaW5ncy5zcGxpY2UoaXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBzaWJsaW5ncyA9IG5ld1ZhbHVlLmdldFByb3BlcnR5KGludmVyc2VQcm9wLm5hbWUpO1xyXG4gICAgICAgIC8vIHJlY3Vyc2lvbiBjaGVjayBpZiBhbHJlYWR5IGluIHRoZSBjb2xsZWN0aW9uIGlzIHBlcmZvcm1lZCBieSB0aGUgcmVsYXRpb25BcnJheVxyXG4gICAgICAgIHNpYmxpbmdzLnB1c2gocGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocHJvcGVydHkuaW52Rm9yZWlnbktleU5hbWVzICYmIGVudGl0eU1hbmFnZXIgJiYgIWVudGl0eU1hbmFnZXIuX2luS2V5Rml4dXApIHtcclxuICAgIGxldCBpbnZGb3JlaWduS2V5TmFtZXMgPSBwcm9wZXJ0eS5pbnZGb3JlaWduS2V5TmFtZXM7XHJcbiAgICBpZiAobmV3VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+MTogb3JkZXIgLT4gaW50ZXJuYXRpb25hbE9yZGVyXHJcbiAgICAgIC8vIG9yZGVyLkludGVybmF0aW9uYWxPcmRlciA8LSBpbnRlcm5hdGlvbmFsT3JkZXJcclxuICAgICAgLy8gICAgPT0+IGludGVybmF0aW9uYWxPcmRlci5vcmRlcklkID0gb3JkZXJJZFxyXG4gICAgICAvLyAgICAgIGFuZFxyXG4gICAgICAvLyBFeGFtcGxlOiB1bmlkaXJlY3Rpb25hbCBuYXZQcm9wZXJ0eTogMS0+bjogb3JkZXIgLT4gb3JkZXJEZXRhaWxzXHJcbiAgICAgIC8vIG9yZGVyRGV0YWlsLm9yZGVyIDwteHh4IG5ld09yZGVyXHJcbiAgICAgIC8vICAgID09PiBDQU4nVCBIQVBQRU4gYmVjYXVzZSBpZiB1bmlkaXJlY3Rpb25hbCBiZWNhdXNlIG9yZGVyRGV0YWlsIHdpbGwgbm90IGhhdmUgYW4gb3JkZXIgcHJvcFxyXG4gICAgICBsZXQgcGtWYWx1ZXMgPSBwYXJlbnQuZW50aXR5QXNwZWN0LmdldEtleSgpLnZhbHVlcztcclxuICAgICAgaW52Rm9yZWlnbktleU5hbWVzLmZvckVhY2goIChma05hbWUsIGkpID0+IHtcclxuICAgICAgICBuZXdWYWx1ZSEuc2V0UHJvcGVydHkoZmtOYW1lLCBwa1ZhbHVlc1tpXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPjE6IG9yZGVyIC0+IGludGVybmF0aW9uYWxPcmRlclxyXG4gICAgICAvLyBvcmRlci5pbnRlcm5hdGlvbmFsT3JkZXIgPC0gbnVsbFxyXG4gICAgICAvLyAgICA9PT4gKG9sZCBpbnRlcm5hdGlvbmFsT3JkZXIpLm9yZGVySWQgPSBudWxsXHJcbiAgICAgIC8vICAgICAgICBhbmRcclxuICAgICAgLy8gRXhhbXBsZTogdW5pZGlyZWN0aW9uYWwgbmF2UHJvcGVydHk6IDEtPm46IG9yZGVyIC0+IG9yZGVyRGV0YWlsc1xyXG4gICAgICAvLyBvcmRlckRldGFpbC5vcmRlciA8LXh4eCBuZXdPcmRlclxyXG4gICAgICAvLyAgICA9PT4gQ0FOJ1QgSEFQUEVOIGJlY2F1c2UgaWYgdW5pZGlyZWN0aW9uYWwgYmVjYXVzZSBvcmRlckRldGFpbCB3aWxsIG5vdCBoYXZlIGFuIG9yZGVyIHByb3BcclxuICAgICAgaWYgKG9sZFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICBpbnZGb3JlaWduS2V5TmFtZXMuZm9yRWFjaCggKGZrTmFtZSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGZrUHJvcCA9IG9sZFZhbHVlLmVudGl0eVR5cGUuZ2V0UHJvcGVydHkoZmtOYW1lKTtcclxuICAgICAgICAgIGlmICghZmtQcm9wLmlzUGFydE9mS2V5KSB7XHJcbiAgICAgICAgICAgIC8vIGRvbid0IHVwZGF0ZSB3aXRoIG51bGwgaWYgZmsgaXMgcGFydCBvZiB0aGUga2V5XHJcbiAgICAgICAgICAgIG9sZFZhbHVlLnNldFByb3BlcnR5KGZrTmFtZSwgbnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhd0FjY2Vzc29yRm4obmV3VmFsdWUpO1xyXG5cclxuICB1cGRhdGVTdGF0ZUFuZFZhbGlkYXRlKGNvbnRleHQpO1xyXG5cclxuICAvLyB1cGRhdGUgZmsgZGF0YSBwcm9wZXJ0eSAtIHRoaXMgY2FuIG9ubHkgb2NjdXIgaWYgdGhpcyBuYXZQcm9wZXJ0eSBoYXNcclxuICAvLyBhIGNvcnJlc3BvbmRpbmcgZmsgb24gdGhpcyBlbnRpdHkuXHJcbiAgaWYgKHByb3BlcnR5LnJlbGF0ZWREYXRhUHJvcGVydGllcykge1xyXG4gICAgbGV0IGVudGl0eVN0YXRlID0gZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gICAgLy8gaWYgZWl0aGVyIHNpZGUgb2YgbmF2IHByb3AgaXMgZGV0YWNoZWQgZG9uJ3QgY2xlYXIgZmtzLiBOb3RlOiBvbGRWYWx1ZSBpbiBuZXh0IGxpbmUgY2Fubm90IGJlIG51bGwgc28gbm8gY2hlY2sgaXMgbmVlZGVkLlxyXG4gICAgaWYgKG5ld1ZhbHVlID09IG51bGwgJiYgKGVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSB8fCBvbGRWYWx1ZS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNEZXRhY2hlZCgpKSkgcmV0dXJuO1xyXG4gICAgaWYgKGVudGl0eVN0YXRlLmlzRGVsZXRlZCgpKSByZXR1cm47XHJcblxyXG4gICAgLy8gd2UgbWF5IGhhdmUgaW52ZXJzZSBwcm9wcyBpbmRpY2F0aW5nIHRoZSByZWxhdGVkIHByb3Agb24gdGhlIG90aGVyIGVudGl0eSwgaWYgaXQgaXMgbm90IHRoZSBvdGhlciBlbnRpdHkncyBQS1xyXG4gICAgbGV0IGludmVyc2VLZXlQcm9wcyA9IHByb3BlcnR5LmludkZvcmVpZ25LZXlOYW1lcztcclxuICAgIGlmICghKGludmVyc2VLZXlQcm9wcyAmJiBpbnZlcnNlS2V5UHJvcHMubGVuZ3RoKSkge1xyXG4gICAgICAvLyBvdGhlcndpc2UsIHRoaXMgcHJvcCBpcyByZWxhdGVkIHRvIHRoZSBvdGhlciBlbnRpdHkncyBQS1xyXG4gICAgICBpbnZlcnNlS2V5UHJvcHMgPSBwcm9wZXJ0eS5lbnRpdHlUeXBlLmtleVByb3BlcnRpZXMubWFwKGsgPT4gay5uYW1lKTtcclxuICAgIH1cclxuICAgIGludmVyc2VLZXlQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uIChrZXlQcm9wLCBpKSB7XHJcbiAgICAgIGxldCByZWxhdGVkRGF0YVByb3AgPSBwcm9wZXJ0eS5yZWxhdGVkRGF0YVByb3BlcnRpZXNbaV07XHJcbiAgICAgIC8vIERvIG5vdCB0cmFzaCByZWxhdGVkIHByb3BlcnR5IGlmIGl0IGlzIHBhcnQgb2YgdGhhdCBlbnRpdHkncyBrZXlcclxuICAgICAgaWYgKG5ld1ZhbHVlIHx8ICFyZWxhdGVkRGF0YVByb3AuaXNQYXJ0T2ZLZXkpIHtcclxuICAgICAgICBsZXQgcmVsYXRlZFZhbHVlID0gbmV3VmFsdWUgPyBuZXdWYWx1ZS5nZXRQcm9wZXJ0eShrZXlQcm9wKSA6IHJlbGF0ZWREYXRhUHJvcC5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgcGFyZW50LnNldFByb3BlcnR5KHJlbGF0ZWREYXRhUHJvcC5uYW1lLCByZWxhdGVkVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBvc3RDaGFuZ2VFdmVudHMoY29udGV4dDogSUNvbnRleHQpIHtcclxuICBsZXQgZW50aXR5QXNwZWN0ID0gY29udGV4dC5lbnRpdHlBc3BlY3Q7XHJcblxyXG4gIGxldCBlbnRpdHlNYW5hZ2VyID0gZW50aXR5QXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgbGV0IGVudGl0eSA9IGVudGl0eUFzcGVjdC5lbnRpdHk7XHJcblxyXG4gIGxldCBwcm9wQ2hhbmdlZEFyZ3MgPSB7IGVudGl0eTogZW50aXR5ISwgcGFyZW50OiBjb250ZXh0LnBhcmVudCwgcHJvcGVydHk6IGNvbnRleHQucHJvcGVydHksIHByb3BlcnR5TmFtZTogY29udGV4dC5wcm9wZXJ0eU5hbWUsIG9sZFZhbHVlOiBjb250ZXh0Lm9sZFZhbHVlLCBuZXdWYWx1ZTogY29udGV4dC5uZXdWYWx1ZSB9O1xyXG4gIGlmIChlbnRpdHlNYW5hZ2VyKSB7XHJcbiAgICAvLyBwcm9wZXJ0eUNoYW5nZWQgd2lsbCBiZSBmaXJlZCBkdXJpbmcgbG9hZGluZyBidXQgd2Ugb25seSB3YW50IHRvIGZpcmUgaXQgb25jZSBwZXIgZW50aXR5LCBub3Qgb25jZSBwZXIgcHJvcGVydHkuXHJcbiAgICAvLyBzbyBwcm9wZXJ0eUNoYW5nZWQgaXMgZmlyZWQgaW4gdGhlIGVudGl0eU1hbmFnZXIgbWVyZ2VFbnRpdHkgbWV0aG9kIGlmIG5vdCBmaXJlZCBoZXJlLlxyXG4gICAgaWYgKCghZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpICYmICghZW50aXR5TWFuYWdlci5pc1JlamVjdGluZ0NoYW5nZXMpKSB7XHJcbiAgICAgIGVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQucHVibGlzaChwcm9wQ2hhbmdlZEFyZ3MpO1xyXG4gICAgICAvLyBkb24ndCBmaXJlIGVudGl0eUNoYW5nZWQgZXZlbnQgaWYgcHJvcGVydHlDaGFuZ2VkIGlzIHN1cHByZXNzZWQuXHJcbiAgICAgIGVudGl0eU1hbmFnZXIuZW50aXR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5QWN0aW9uOiBFbnRpdHlBY3Rpb24uUHJvcGVydHlDaGFuZ2UsIGVudGl0eTogZW50aXR5LCBhcmdzOiBwcm9wQ2hhbmdlZEFyZ3MgfSk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQucHVibGlzaChwcm9wQ2hhbmdlZEFyZ3MpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlU3RhdGVBbmRWYWxpZGF0ZShjb250ZXh0OiBJQ29udGV4dCkge1xyXG4gIGxldCBlbnRpdHlBc3BlY3QgPSBjb250ZXh0LmVudGl0eUFzcGVjdDtcclxuICBsZXQgZW50aXR5TWFuYWdlciA9IGVudGl0eUFzcGVjdC5lbnRpdHlNYW5hZ2VyO1xyXG4gIGlmIChlbnRpdHlNYW5hZ2VyID09IG51bGwgfHwgZW50aXR5TWFuYWdlci5pc0xvYWRpbmcpIHJldHVybjtcclxuICBsZXQgcHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5O1xyXG5cclxuICBpZiAoZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzVW5jaGFuZ2VkKCkgJiYgIXByb3BlcnR5LmlzVW5tYXBwZWQpIHtcclxuICAgIGVudGl0eUFzcGVjdC5zZXRNb2RpZmllZCgpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGVudGl0eU1hbmFnZXIudmFsaWRhdGlvbk9wdGlvbnMudmFsaWRhdGVPblByb3BlcnR5Q2hhbmdlKSB7XHJcbiAgICAvLyBlbnRpdHlBc3BlY3QuZW50aXR5IGlzIE5PVCB0aGUgc2FtZSBhcyBwYXJlbnQgaW4gdGhlIGNvZGUgYmVsb3cuIEl0J3MgdXNlIGlzIGRlbGliZXJhdGUuXHJcbiAgICBlbnRpdHlBc3BlY3QuX3ZhbGlkYXRlUHJvcGVydHkoY29udGV4dC5uZXdWYWx1ZSxcclxuICAgICAgICB7IGVudGl0eTogZW50aXR5QXNwZWN0LmVudGl0eSwgcHJvcGVydHk6IHByb3BlcnR5LCBwcm9wZXJ0eU5hbWU6IGNvbnRleHQucHJvcGVydHlOYW1lLCBvbGRWYWx1ZTogY29udGV4dC5vbGRWYWx1ZSB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,52 +0,0 @@
1
- import { __extends } from "tslib";
2
- import { BreezeEnum } from './enum';
3
- /** EntityAction is an 'Enum' containing all of the valid actions that can occur to an 'Entity'.
4
-
5
- */
6
- var EntityAction = /** @class */ (function (_super) {
7
- __extends(EntityAction, _super);
8
- function EntityAction() {
9
- return _super !== null && _super.apply(this, arguments) || this;
10
- }
11
- /** Is this an 'attach' operation? ( Attach, AttachOnQuery or AttachOnImport) */
12
- EntityAction.prototype.isAttach = function () {
13
- return !!this._isAttach;
14
- };
15
- /** Is this a 'detach' operation? ( Detach, Clear) */
16
- EntityAction.prototype.isDetach = function () {
17
- return !!this._isDetach;
18
- };
19
- /** Is this a 'modification' operation? ( PropertyChange, MergeOnQuery, MergeOnSave, MergeOnImport, RejectChanges) */
20
- EntityAction.prototype.isModification = function () {
21
- return !!this._isModification;
22
- };
23
- /** Entity was attached via an AttachEntity call. */
24
- EntityAction.Attach = new EntityAction({ _isAttach: true });
25
- /** Entity was attached as a result of a query. */
26
- EntityAction.AttachOnQuery = new EntityAction({ _isAttach: true });
27
- /** Entity was attached as a result of an import. */
28
- EntityAction.AttachOnImport = new EntityAction({ _isAttach: true });
29
- /** Entity was detached */
30
- EntityAction.Detach = new EntityAction({ _isDetach: true });
31
- /** Properties on the entity were merged as a result of a query. */
32
- EntityAction.MergeOnQuery = new EntityAction({ _isModification: true });
33
- /** Properties on the entity were merged as a result of an import. */
34
- EntityAction.MergeOnImport = new EntityAction({ _isModification: true });
35
- /** Properties on the entity were merged as a result of a save */
36
- EntityAction.MergeOnSave = new EntityAction({ _isModification: true });
37
- /** A property on the entity was changed. */
38
- EntityAction.PropertyChange = new EntityAction({ _isModification: true });
39
- /** The EntityState of the entity was changed. */
40
- EntityAction.EntityStateChange = new EntityAction();
41
- /** AcceptChanges was called on the entity, or its entityState was set to Unmodified. */
42
- EntityAction.AcceptChanges = new EntityAction();
43
- /** RejectChanges was called on the entity. */
44
- EntityAction.RejectChanges = new EntityAction({ _isModification: true });
45
- /** The EntityManager was cleared. All entities detached. */
46
- EntityAction.Clear = new EntityAction({ _isDetach: true });
47
- return EntityAction;
48
- }(BreezeEnum));
49
- export { EntityAction };
50
- EntityAction.prototype._$typeName = "EntityAction";
51
- Error['x'] = EntityAction.resolveSymbols();
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW50aXR5LWFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVuQzs7RUFFRTtBQUVGO0lBQWtDLGdDQUFVO0lBQTVDOztJQW1EQSxDQUFDO0lBWkMsZ0ZBQWdGO0lBQ2hGLCtCQUFRLEdBQVI7UUFDRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFDRCxxREFBcUQ7SUFDckQsK0JBQVEsR0FBUjtRQUNFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELHFIQUFxSDtJQUNySCxxQ0FBYyxHQUFkO1FBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBaERELG9EQUFvRDtJQUM3QyxtQkFBTSxHQUFHLElBQUksWUFBWSxDQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkQsbURBQW1EO0lBQzVDLDBCQUFhLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUM1RCxxREFBcUQ7SUFDOUMsMkJBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRTdELDBCQUEwQjtJQUNuQixtQkFBTSxHQUFHLElBQUksWUFBWSxDQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdkQsbUVBQW1FO0lBQzVELHlCQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxxRUFBcUU7SUFDOUQsMEJBQWEsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLGlFQUFpRTtJQUMxRCx3QkFBVyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFakUsNENBQTRDO0lBQ3JDLDJCQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUVuRSxpREFBaUQ7SUFDMUMsOEJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUU5Qyx3RkFBd0Y7SUFDakYsMEJBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzFDLDhDQUE4QztJQUN2QywwQkFBYSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFFbEUsNkRBQTZEO0lBQ3RELGtCQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQW9CdEQsbUJBQUM7Q0FBQSxBQW5ERCxDQUFrQyxVQUFVLEdBbUQzQztTQW5EWSxZQUFZO0FBb0R6QixZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcblxyXG4vKiogRW50aXR5QWN0aW9uIGlzIGFuICdFbnVtJyBjb250YWluaW5nIGFsbCBvZiB0aGUgdmFsaWQgYWN0aW9ucyB0aGF0IGNhbiBvY2N1ciB0byBhbiAnRW50aXR5Jy4gXHJcbiBcclxuKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlBY3Rpb24gZXh0ZW5kcyBCcmVlemVFbnVtIHtcclxuXHJcbiAgLyoqIEVudGl0eSB3YXMgYXR0YWNoZWQgdmlhIGFuIEF0dGFjaEVudGl0eSBjYWxsLiAqL1xyXG4gIHN0YXRpYyBBdHRhY2ggPSBuZXcgRW50aXR5QWN0aW9uKCB7IF9pc0F0dGFjaDogdHJ1ZSB9KTtcclxuICAvKiogIEVudGl0eSB3YXMgYXR0YWNoZWQgYXMgYSByZXN1bHQgb2YgYSBxdWVyeS4gKi9cclxuICBzdGF0aWMgQXR0YWNoT25RdWVyeSA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNBdHRhY2g6IHRydWV9KTtcclxuICAvKiogIEVudGl0eSB3YXMgYXR0YWNoZWQgYXMgYSByZXN1bHQgb2YgYW4gaW1wb3J0LiAqL1xyXG4gIHN0YXRpYyBBdHRhY2hPbkltcG9ydCA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNBdHRhY2g6IHRydWV9KTtcclxuXHJcbiAgLyoqIEVudGl0eSB3YXMgZGV0YWNoZWQgKi9cclxuICBzdGF0aWMgRGV0YWNoID0gbmV3IEVudGl0eUFjdGlvbiggeyBfaXNEZXRhY2g6IHRydWUgfSk7XHJcblxyXG4gIC8qKiBQcm9wZXJ0aWVzIG9uIHRoZSBlbnRpdHkgd2VyZSBtZXJnZWQgYXMgYSByZXN1bHQgb2YgYSBxdWVyeS4gKi9cclxuICBzdGF0aWMgTWVyZ2VPblF1ZXJ5ID0gbmV3IEVudGl0eUFjdGlvbih7IF9pc01vZGlmaWNhdGlvbjogdHJ1ZSB9KTtcclxuICAvKiogUHJvcGVydGllcyBvbiB0aGUgZW50aXR5IHdlcmUgbWVyZ2VkIGFzIGEgcmVzdWx0IG9mIGFuIGltcG9ydC4gKi9cclxuICBzdGF0aWMgTWVyZ2VPbkltcG9ydCA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWUgfSk7XHJcbiAgLyoqIFByb3BlcnRpZXMgb24gdGhlIGVudGl0eSB3ZXJlIG1lcmdlZCBhcyBhIHJlc3VsdCBvZiBhIHNhdmUgKi9cclxuICBzdGF0aWMgTWVyZ2VPblNhdmUgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzTW9kaWZpY2F0aW9uOiB0cnVlIH0pO1xyXG5cclxuICAvKiogQSBwcm9wZXJ0eSBvbiB0aGUgZW50aXR5IHdhcyBjaGFuZ2VkLiAqL1xyXG4gIHN0YXRpYyBQcm9wZXJ0eUNoYW5nZSA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWV9KTtcclxuXHJcbiAgLyoqIFRoZSBFbnRpdHlTdGF0ZSBvZiB0aGUgZW50aXR5IHdhcyBjaGFuZ2VkLiAqL1xyXG4gIHN0YXRpYyBFbnRpdHlTdGF0ZUNoYW5nZSA9IG5ldyBFbnRpdHlBY3Rpb24oKTtcclxuXHJcbiAgLyoqIEFjY2VwdENoYW5nZXMgd2FzIGNhbGxlZCBvbiB0aGUgZW50aXR5LCBvciBpdHMgZW50aXR5U3RhdGUgd2FzIHNldCB0byBVbm1vZGlmaWVkLiAqL1xyXG4gIHN0YXRpYyBBY2NlcHRDaGFuZ2VzID0gbmV3IEVudGl0eUFjdGlvbigpO1xyXG4gIC8qKiBSZWplY3RDaGFuZ2VzIHdhcyBjYWxsZWQgb24gdGhlIGVudGl0eS4gKi9cclxuICBzdGF0aWMgUmVqZWN0Q2hhbmdlcyA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWV9KTtcclxuXHJcbiAgLyoqIFRoZSBFbnRpdHlNYW5hZ2VyIHdhcyBjbGVhcmVkLiAgQWxsIGVudGl0aWVzIGRldGFjaGVkLiAqL1xyXG4gIHN0YXRpYyBDbGVhciA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNEZXRhY2g6IHRydWV9KTtcclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX2lzQXR0YWNoPzogYm9vbGVhbjtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfaXNEZXRhY2g/OiBib29sZWFuO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9pc01vZGlmaWNhdGlvbjogYm9vbGVhbjtcclxuICAvKiogSXMgdGhpcyBhbiAnYXR0YWNoJyBvcGVyYXRpb24/ICggQXR0YWNoLCBBdHRhY2hPblF1ZXJ5IG9yIEF0dGFjaE9uSW1wb3J0KSAqL1xyXG4gIGlzQXR0YWNoKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5faXNBdHRhY2g7XHJcbiAgfVxyXG4gIC8qKiBJcyB0aGlzIGEgJ2RldGFjaCcgb3BlcmF0aW9uPyAoIERldGFjaCwgQ2xlYXIpICovXHJcbiAgaXNEZXRhY2goKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9pc0RldGFjaDtcclxuICB9XHJcbiAgLyoqIElzIHRoaXMgYSAnbW9kaWZpY2F0aW9uJyBvcGVyYXRpb24/ICggUHJvcGVydHlDaGFuZ2UsIE1lcmdlT25RdWVyeSwgTWVyZ2VPblNhdmUsIE1lcmdlT25JbXBvcnQsIFJlamVjdENoYW5nZXMpICovXHJcbiAgaXNNb2RpZmljYXRpb24oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9pc01vZGlmaWNhdGlvbjtcclxuICB9XHJcbn1cclxuRW50aXR5QWN0aW9uLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJFbnRpdHlBY3Rpb25cIjtcclxuRXJyb3JbJ3gnXSA9IEVudGl0eUFjdGlvbi5yZXNvbHZlU3ltYm9scygpO1xyXG5cclxuXHJcblxyXG4iXX0=