breeze-client 2.2.1-cjs → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/adapter-ajax-angularjs/{breeze-client-adapter-ajax-angularjs.d.ts → index.d.ts} +1 -0
  2. package/adapter-ajax-fetch/{breeze-client-adapter-ajax-fetch.d.ts → index.d.ts} +1 -0
  3. package/adapter-ajax-httpclient/{breeze-client-adapter-ajax-httpclient.d.ts → index.d.ts} +1 -0
  4. package/adapter-ajax-jquery/{breeze-client-adapter-ajax-jquery.d.ts → index.d.ts} +1 -0
  5. package/adapter-ajax-post/{breeze-client-adapter-ajax-post.d.ts → index.d.ts} +1 -0
  6. package/adapter-data-service-odata/{breeze-client-adapter-data-service-odata.d.ts → index.d.ts} +1 -0
  7. package/adapter-data-service-webapi/{breeze-client-adapter-data-service-webapi.d.ts → index.d.ts} +1 -0
  8. package/adapter-model-library-backing-store/{breeze-client-adapter-model-library-backing-store.d.ts → index.d.ts} +1 -0
  9. package/adapter-model-library-ko/{breeze-client-adapter-model-library-ko.d.ts → index.d.ts} +1 -0
  10. package/adapter-uri-builder-json/{breeze-client-adapter-uri-builder-json.d.ts → index.d.ts} +1 -0
  11. package/adapter-uri-builder-odata/{breeze-client-adapter-uri-builder-odata.d.ts → index.d.ts} +1 -0
  12. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +135 -0
  13. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +49 -0
  14. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
  15. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +135 -0
  16. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +49 -0
  17. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
  18. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +139 -0
  19. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +49 -0
  20. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
  21. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +107 -0
  22. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
  23. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
  24. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
  25. package/esm2022/adapter-data-service-odata/adapter-core.mjs +49 -0
  26. package/{esm5/adapter-data-service-odata/adapter-data-service-odata.js → esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs} +138 -147
  27. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
  28. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +100 -0
  29. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
  30. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +269 -0
  31. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
  32. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +241 -0
  33. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
  34. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +49 -0
  35. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +37 -0
  36. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
  37. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +49 -0
  38. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +191 -0
  39. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
  40. package/esm2022/breeze-client.mjs +5 -0
  41. package/esm2022/index.mjs +2 -0
  42. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
  43. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
  44. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
  45. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +421 -0
  46. package/esm2022/src/abstract-data-service-adapter.mjs +325 -0
  47. package/esm2022/src/array.mjs +4 -0
  48. package/esm2022/src/assert-param.mjs +330 -0
  49. package/esm2022/src/breeze.mjs +85 -0
  50. package/esm2022/src/complex-array.mjs +117 -0
  51. package/esm2022/src/config.mjs +232 -0
  52. package/esm2022/src/core.mjs +712 -0
  53. package/esm2022/src/csdl-metadata-parser.mjs +385 -0
  54. package/esm2022/src/data-service.mjs +221 -0
  55. package/esm2022/src/data-type.mjs +510 -0
  56. package/esm2022/src/default-property-interceptor.mjs +460 -0
  57. package/{esm2015/src/entity-action.js → esm2022/src/entity-action.mjs} +25 -25
  58. package/esm2022/src/entity-aspect.mjs +897 -0
  59. package/esm2022/src/entity-group.mjs +192 -0
  60. package/esm2022/src/entity-key.mjs +125 -0
  61. package/esm2022/src/entity-manager.mjs +2163 -0
  62. package/esm2022/src/entity-metadata.mjs +2242 -0
  63. package/esm2022/src/entity-query.mjs +1024 -0
  64. package/esm2022/src/entity-state.mjs +107 -0
  65. package/esm2022/src/enum.mjs +143 -0
  66. package/esm2022/src/event.mjs +264 -0
  67. package/esm2022/src/interface-registry.mjs +39 -0
  68. package/esm2022/src/key-generator.mjs +110 -0
  69. package/esm2022/src/local-query-comparison-options.mjs +65 -0
  70. package/esm2022/src/mapping-context.mjs +411 -0
  71. package/esm2022/src/naming-convention.mjs +92 -0
  72. package/esm2022/src/observable-array.mjs +183 -0
  73. package/esm2022/src/predicate.mjs +1259 -0
  74. package/esm2022/src/primitive-array.mjs +85 -0
  75. package/esm2022/src/query-options.mjs +152 -0
  76. package/esm2022/src/relation-array.mjs +173 -0
  77. package/esm2022/src/save-options.mjs +41 -0
  78. package/esm2022/src/unattached-children-map.mjs +56 -0
  79. package/esm2022/src/validate.mjs +995 -0
  80. package/esm2022/src/validation-options.mjs +64 -0
  81. package/{fesm2015/breeze-client-adapter-ajax-angularjs.js → fesm2022/breeze-client-adapter-ajax-angularjs.mjs} +6 -1
  82. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  83. package/{fesm2015/breeze-client-adapter-ajax-fetch.js → fesm2022/breeze-client-adapter-ajax-fetch.mjs} +9 -4
  84. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  85. package/{fesm2015/breeze-client-adapter-ajax-httpclient.js → fesm2022/breeze-client-adapter-ajax-httpclient.mjs} +6 -4
  86. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  87. package/{fesm2015/breeze-client-adapter-ajax-jquery.js → fesm2022/breeze-client-adapter-ajax-jquery.mjs} +6 -2
  88. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  89. package/{fesm2015/breeze-client-adapter-ajax-post.js → fesm2022/breeze-client-adapter-ajax-post.mjs} +1 -1
  90. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +1 -0
  91. package/{fesm2015/breeze-client-adapter-data-service-odata.js → fesm2022/breeze-client-adapter-data-service-odata.mjs} +68 -69
  92. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  93. package/{fesm2015/breeze-client-adapter-data-service-webapi.js → fesm2022/breeze-client-adapter-data-service-webapi.mjs} +30 -30
  94. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  95. package/{fesm2015/breeze-client-adapter-model-library-backing-store.js → fesm2022/breeze-client-adapter-model-library-backing-store.mjs} +14 -13
  96. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  97. package/{fesm2015/breeze-client-adapter-model-library-ko.js → fesm2022/breeze-client-adapter-model-library-ko.mjs} +14 -13
  98. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  99. package/{fesm2015/breeze-client-adapter-uri-builder-json.js → fesm2022/breeze-client-adapter-uri-builder-json.mjs} +9 -8
  100. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  101. package/{fesm2015/breeze-client-adapter-uri-builder-odata.js → fesm2022/breeze-client-adapter-uri-builder-odata.mjs} +86 -86
  102. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  103. package/{fesm2015/breeze-client-mixin-get-entity-graph.js → fesm2022/breeze-client-mixin-get-entity-graph.mjs} +1 -1
  104. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  105. package/{fesm2015/breeze-client-mixin-save-queuing.js → fesm2022/breeze-client-mixin-save-queuing.mjs} +23 -2
  106. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +1 -0
  107. package/{fesm2015/breeze-client.js → fesm2022/breeze-client.mjs} +1933 -1538
  108. package/fesm2022/breeze-client.mjs.map +1 -0
  109. package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
  110. package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
  111. package/package.json +94 -12
  112. package/src/config.d.ts +1 -1
  113. package/src/core.d.ts +1 -1
  114. package/src/entity-aspect.d.ts +1 -1
  115. package/src/entity-metadata.d.ts +8 -6
  116. package/src/entity-query.d.ts +1 -1
  117. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  118. package/adapter-ajax-angularjs/package.json +0 -13
  119. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  120. package/adapter-ajax-fetch/package.json +0 -13
  121. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  122. package/adapter-ajax-httpclient/package.json +0 -13
  123. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  124. package/adapter-ajax-jquery/package.json +0 -13
  125. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  126. package/adapter-ajax-post/package.json +0 -13
  127. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  128. package/adapter-data-service-odata/package.json +0 -13
  129. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  130. package/adapter-data-service-webapi/package.json +0 -13
  131. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  132. package/adapter-model-library-backing-store/package.json +0 -13
  133. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  134. package/adapter-model-library-ko/package.json +0 -13
  135. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  136. package/adapter-uri-builder-json/package.json +0 -13
  137. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  138. package/adapter-uri-builder-odata/package.json +0 -13
  139. package/breeze-client.d.ts +0 -8
  140. package/breeze-client.metadata.json +0 -1
  141. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  142. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  143. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  144. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  145. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  146. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  147. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  148. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  149. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  150. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  151. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  152. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  153. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  154. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  155. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  156. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  157. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  158. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  159. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  160. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  161. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -747
  162. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  163. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  164. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  165. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -333
  166. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  167. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  168. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  169. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  170. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  171. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  172. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  173. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  174. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  175. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  176. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  177. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  178. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  179. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  180. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  181. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  182. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  183. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  184. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  185. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  186. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  187. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  188. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  189. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
  190. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  191. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  192. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  193. package/bundles/breeze-client.umd.js +0 -14234
  194. package/bundles/breeze-client.umd.js.map +0 -1
  195. package/bundles/breeze-client.umd.min.js +0 -16
  196. package/bundles/breeze-client.umd.min.js.map +0 -1
  197. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  198. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  199. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  200. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  201. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  202. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  203. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  204. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  205. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  206. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  207. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  208. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  209. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  210. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  211. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -463
  212. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  213. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -100
  214. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  215. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  216. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  217. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  218. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  219. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  220. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  221. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  222. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  223. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  224. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  225. package/esm2015/breeze-client.js +0 -9
  226. package/esm2015/index.js +0 -2
  227. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  228. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  229. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  230. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  231. package/esm2015/src/abstract-data-service-adapter.js +0 -327
  232. package/esm2015/src/array.js +0 -4
  233. package/esm2015/src/assert-param.js +0 -312
  234. package/esm2015/src/breeze.js +0 -85
  235. package/esm2015/src/complex-array.js +0 -119
  236. package/esm2015/src/config.js +0 -223
  237. package/esm2015/src/core.js +0 -714
  238. package/esm2015/src/csdl-metadata-parser.js +0 -385
  239. package/esm2015/src/data-service.js +0 -203
  240. package/esm2015/src/data-type.js +0 -506
  241. package/esm2015/src/default-property-interceptor.js +0 -460
  242. package/esm2015/src/entity-aspect.js +0 -804
  243. package/esm2015/src/entity-group.js +0 -187
  244. package/esm2015/src/entity-key.js +0 -116
  245. package/esm2015/src/entity-manager.js +0 -2094
  246. package/esm2015/src/entity-metadata.js +0 -2109
  247. package/esm2015/src/entity-query.js +0 -1015
  248. package/esm2015/src/entity-state.js +0 -107
  249. package/esm2015/src/enum.js +0 -141
  250. package/esm2015/src/event.js +0 -256
  251. package/esm2015/src/interface-registry.js +0 -41
  252. package/esm2015/src/key-generator.js +0 -108
  253. package/esm2015/src/local-query-comparison-options.js +0 -65
  254. package/esm2015/src/mapping-context.js +0 -411
  255. package/esm2015/src/naming-convention.js +0 -88
  256. package/esm2015/src/observable-array.js +0 -185
  257. package/esm2015/src/predicate.js +0 -1242
  258. package/esm2015/src/primitive-array.js +0 -87
  259. package/esm2015/src/query-options.js +0 -152
  260. package/esm2015/src/relation-array.js +0 -175
  261. package/esm2015/src/save-options.js +0 -41
  262. package/esm2015/src/unattached-children-map.js +0 -58
  263. package/esm2015/src/validate.js +0 -991
  264. package/esm2015/src/validation-options.js +0 -64
  265. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
  266. package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
  267. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  268. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
  269. package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
  270. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  271. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
  272. package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
  273. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  274. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
  275. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  276. package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
  277. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  278. package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
  279. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  280. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -105
  281. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  282. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
  283. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  284. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
  285. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  286. package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
  287. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
  288. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  289. package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
  290. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
  291. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  292. package/esm5/breeze-client.js +0 -9
  293. package/esm5/index.js +0 -2
  294. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  295. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  296. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  297. package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -412
  298. package/esm5/src/abstract-data-service-adapter.js +0 -333
  299. package/esm5/src/array.js +0 -4
  300. package/esm5/src/assert-param.js +0 -317
  301. package/esm5/src/breeze.js +0 -85
  302. package/esm5/src/complex-array.js +0 -119
  303. package/esm5/src/config.js +0 -228
  304. package/esm5/src/core.js +0 -722
  305. package/esm5/src/csdl-metadata-parser.js +0 -385
  306. package/esm5/src/data-service.js +0 -207
  307. package/esm5/src/data-type.js +0 -513
  308. package/esm5/src/default-property-interceptor.js +0 -460
  309. package/esm5/src/entity-action.js +0 -52
  310. package/esm5/src/entity-aspect.js +0 -810
  311. package/esm5/src/entity-group.js +0 -189
  312. package/esm5/src/entity-key.js +0 -118
  313. package/esm5/src/entity-manager.js +0 -2112
  314. package/esm5/src/entity-metadata.js +0 -2144
  315. package/esm5/src/entity-query.js +0 -1042
  316. package/esm5/src/entity-state.js +0 -114
  317. package/esm5/src/enum.js +0 -144
  318. package/esm5/src/event.js +0 -259
  319. package/esm5/src/interface-registry.js +0 -43
  320. package/esm5/src/key-generator.js +0 -111
  321. package/esm5/src/local-query-comparison-options.js +0 -67
  322. package/esm5/src/mapping-context.js +0 -413
  323. package/esm5/src/naming-convention.js +0 -90
  324. package/esm5/src/observable-array.js +0 -201
  325. package/esm5/src/predicate.js +0 -1307
  326. package/esm5/src/primitive-array.js +0 -87
  327. package/esm5/src/query-options.js +0 -167
  328. package/esm5/src/relation-array.js +0 -175
  329. package/esm5/src/save-options.js +0 -43
  330. package/esm5/src/unattached-children-map.js +0 -60
  331. package/esm5/src/validate.js +0 -996
  332. package/esm5/src/validation-options.js +0 -66
  333. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  334. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  335. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  336. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  337. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  338. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  339. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  340. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  341. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  342. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  343. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  344. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  345. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  346. package/fesm2015/breeze-client.js.map +0 -1
  347. package/fesm5/breeze-client-adapter-ajax-angularjs.js +0 -186
  348. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  349. package/fesm5/breeze-client-adapter-ajax-fetch.js +0 -186
  350. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  351. package/fesm5/breeze-client-adapter-ajax-httpclient.js +0 -193
  352. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  353. package/fesm5/breeze-client-adapter-ajax-jquery.js +0 -111
  354. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  355. package/fesm5/breeze-client-adapter-ajax-post.js +0 -86
  356. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  357. package/fesm5/breeze-client-adapter-data-service-odata.js +0 -523
  358. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  359. package/fesm5/breeze-client-adapter-data-service-webapi.js +0 -111
  360. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  361. package/fesm5/breeze-client-adapter-model-library-backing-store.js +0 -276
  362. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  363. package/fesm5/breeze-client-adapter-model-library-ko.js +0 -248
  364. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  365. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  366. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  367. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  368. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  369. package/fesm5/breeze-client-mixin-get-entity-graph.js +0 -254
  370. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  371. package/fesm5/breeze-client-mixin-save-queuing.js +0 -356
  372. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  373. package/fesm5/breeze-client.js +0 -13956
  374. package/fesm5/breeze-client.js.map +0 -1
  375. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  376. package/mixin-get-entity-graph/package.json +0 -13
  377. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  378. package/mixin-save-queuing/package.json +0 -13
@@ -1,413 +0,0 @@
1
- import { core } from './core';
2
- import { DataType } from './data-type';
3
- import { EntityState } from './entity-state';
4
- import { EntityAction } from './entity-action';
5
- import { EntityType, DataProperty } from './entity-metadata';
6
- import { MergeStrategy } from './query-options';
7
- import { EntityQuery } from './entity-query';
8
- /**
9
- For use by breeze plugin authors only. The class is for use in building a [[IDataServiceAdapter]] implementation.
10
- @adapter (see [[IDataServiceAdapter]])
11
- @hidden
12
- */
13
- var MappingContext = /** @class */ (function () {
14
- function MappingContext(config) {
15
- this.rawValueFn = DataProperty.getRawValueFromServer; // think about passing this in later.
16
- core.extend(this, config, [
17
- "query", "entityManager", "dataService", "mergeOptions"
18
- ]);
19
- // calc'd props
20
- this.refMap = {};
21
- this.deferredFns = [];
22
- this.jsonResultsAdapter = this.dataService.jsonResultsAdapter;
23
- this.metadataStore = this.entityManager.metadataStore;
24
- this.rawValueFn = DataProperty.getRawValueFromServer; // think about passing this in later.
25
- }
26
- MappingContext.prototype.getUrl = function () {
27
- var query = this.query;
28
- if (!query) {
29
- throw new Error("query cannot be empty");
30
- }
31
- var uriString;
32
- if (typeof query === 'string') {
33
- uriString = query;
34
- }
35
- else if (query instanceof EntityQuery) {
36
- uriString = this.dataService.uriBuilder.buildUri(query, this.metadataStore);
37
- }
38
- else {
39
- throw new Error("unable to recognize query parameter as either a string or an EntityQuery");
40
- }
41
- return this.dataService.qualifyUrl(uriString);
42
- };
43
- MappingContext.prototype.visitAndMerge = function (nodes, nodeContext) {
44
- var query = this.query;
45
- var jra = this.jsonResultsAdapter;
46
- nodeContext = nodeContext || {};
47
- var that = this;
48
- var result = core.map(nodes, function (node) {
49
- if (query == null && node.entityAspect) {
50
- // don't bother merging a result from a save that was not returned from the server.
51
- if (node.entityAspect.entityState.isDeleted()) {
52
- that.entityManager.detachEntity(node);
53
- }
54
- else {
55
- node.entityAspect.acceptChanges();
56
- }
57
- return node;
58
- }
59
- var meta = jra.visitNode(node, that, nodeContext) || {};
60
- node = meta.node || node;
61
- if (query && nodeContext.nodeType === "root" && !meta.entityType) {
62
- meta.entityType = query instanceof EntityQuery && query._getToEntityType && query._getToEntityType(that.metadataStore);
63
- }
64
- return processMeta(that, node, meta);
65
- }, this.mergeOptions.includeDeleted);
66
- if (result.filter && !this.mergeOptions.includeDeleted) {
67
- // result may have deleted entities because related nodes were processed
68
- result = result.filter(function (x) { return x && (!x.entityAspect || !x.entityAspect.entityState.isDeleted()); });
69
- }
70
- return result;
71
- };
72
- MappingContext.prototype.processDeferred = function () {
73
- if (this.deferredFns.length > 0) {
74
- this.deferredFns.forEach(function (fn) {
75
- fn();
76
- });
77
- }
78
- };
79
- return MappingContext;
80
- }());
81
- export { MappingContext };
82
- MappingContext.prototype._$typeName = "MappingContext";
83
- function processMeta(mc, node, meta, assignFn) {
84
- // == is deliberate here instead of ===
85
- if (meta.ignore || node == null) {
86
- return null;
87
- }
88
- else if (meta.nodeRefId) {
89
- var refValue_1 = resolveEntityRef(mc, meta.nodeRefId);
90
- if (typeof refValue_1 === "function" && assignFn != null) {
91
- mc.deferredFns.push(function () {
92
- assignFn(refValue_1);
93
- });
94
- return undefined; // deferred and will be set later;
95
- }
96
- return refValue_1;
97
- }
98
- else if (meta.entityType) {
99
- var entityType = meta.entityType;
100
- if (mc.mergeOptions.noTracking) {
101
- node = processNoMerge(mc, entityType, node);
102
- if (entityType.noTrackingFn) {
103
- node = entityType.noTrackingFn(node, entityType);
104
- }
105
- if (meta.nodeId) {
106
- mc.refMap[meta.nodeId] = node;
107
- }
108
- return node;
109
- }
110
- else {
111
- if (entityType.isComplexType) {
112
- // because we still need to do serverName to client name processing
113
- return processNoMerge(mc, entityType, node);
114
- }
115
- else {
116
- return mergeEntity(mc, node, meta);
117
- }
118
- }
119
- }
120
- else {
121
- if ((!meta.passThru) && typeof node === 'object' && !core.isDate(node)) {
122
- node = processAnonType(mc, node);
123
- }
124
- // updating the refMap for entities is handled by updateEntityRef for entities.
125
- if (meta.nodeId) {
126
- mc.refMap[meta.nodeId] = node;
127
- }
128
- return node;
129
- }
130
- }
131
- function processNoMerge(mc, stype, node) {
132
- var result = {};
133
- stype.dataProperties.forEach(function (dp) {
134
- if (dp.isComplexProperty) {
135
- result[dp.name] = core.map(node[dp.nameOnServer], function (v) {
136
- return processNoMerge(mc, dp.dataType, v);
137
- });
138
- }
139
- else {
140
- result[dp.name] = DataType.parseRawValue(node[dp.nameOnServer], dp.dataType);
141
- }
142
- });
143
- (stype instanceof EntityType) && stype.navigationProperties.forEach(function (np) {
144
- var nodeContext = { nodeType: "navProp", navigationProperty: np };
145
- visitNode(node[np.nameOnServer], mc, nodeContext, result, np.name);
146
- });
147
- return result;
148
- }
149
- function processAnonType(mc, node) {
150
- // node is guaranteed to be an object by this point, i.e. not a scalar
151
- var keyFn = mc.metadataStore.namingConvention.serverPropertyNameToClient;
152
- var result = {};
153
- core.objectForEach(node, function (key, value) {
154
- var newKey = keyFn(key);
155
- var nodeContext = { nodeType: "anonProp", propertyName: newKey };
156
- visitNode(value, mc, nodeContext, result, newKey);
157
- });
158
- return result;
159
- }
160
- function visitNode(node, mc, nodeContext, result, key) {
161
- var jra = mc.jsonResultsAdapter;
162
- var meta = jra.visitNode(node, mc, nodeContext) || {};
163
- // allows visitNode to change the value;
164
- node = meta.node || node;
165
- if (meta.ignore)
166
- return;
167
- if (meta.passThru)
168
- return node;
169
- if (Array.isArray(node)) {
170
- nodeContext.nodeType = nodeContext.nodeType + "Item";
171
- result[key] = node.map(function (v, ix) {
172
- meta = jra.visitNode(v, mc, nodeContext) || {};
173
- v = meta.node || v;
174
- return processMeta(mc, v, meta, function (refValue) {
175
- result[key][ix] = refValue();
176
- });
177
- });
178
- }
179
- else {
180
- result[key] = processMeta(mc, node, meta, function (refValue) {
181
- result[key] = refValue();
182
- });
183
- }
184
- }
185
- function resolveEntityRef(mc, nodeRefId) {
186
- var entity = mc.refMap[nodeRefId];
187
- if (entity === undefined) {
188
- return function () {
189
- return mc.refMap[nodeRefId];
190
- };
191
- }
192
- else {
193
- return entity;
194
- }
195
- }
196
- function updateEntityRef(mc, targetEntity, node) {
197
- var nodeId = node._$meta.nodeId;
198
- if (!nodeId && node._$meta.extraMetadata) {
199
- // odata case. refMap isn't really used, but is returned as data.retrievedEntities, so we populated it anyway.
200
- nodeId = node._$meta.extraMetadata.uriKey;
201
- }
202
- if (nodeId != null) {
203
- mc.refMap[nodeId] = targetEntity;
204
- }
205
- }
206
- // can return null for a deleted entity if includeDeleted == false
207
- function mergeEntity(mc, node, meta) {
208
- node._$meta = meta;
209
- var em = mc.entityManager;
210
- var entityType = meta.entityType;
211
- if (typeof (entityType) === 'string') {
212
- entityType = mc.metadataStore._getStructuralType(entityType, false);
213
- }
214
- node.entityType = entityType;
215
- var mergeStrategy = mc.mergeOptions.mergeStrategy;
216
- var isSaving = mc.query == null;
217
- var entityKey = entityType.getEntityKeyFromRawEntity(node, mc.rawValueFn);
218
- var targetEntity = em.getEntityByKey(entityKey);
219
- if (targetEntity) {
220
- if (isSaving && targetEntity.entityAspect.entityState.isDeleted()) {
221
- em.detachEntity(targetEntity);
222
- return targetEntity;
223
- }
224
- var targetEntityState = targetEntity.entityAspect.entityState;
225
- if (mergeStrategy === MergeStrategy.Disallowed) {
226
- throw new Error("A MergeStrategy of 'Disallowed' prevents " + entityKey.toString() + " from being merged");
227
- }
228
- else if (mergeStrategy === MergeStrategy.SkipMerge) {
229
- updateEntityNoMerge(mc, targetEntity, node);
230
- }
231
- else {
232
- if (mergeStrategy === MergeStrategy.OverwriteChanges
233
- || targetEntityState.isUnchanged()) {
234
- updateEntity(mc, targetEntity, node);
235
- targetEntity.entityAspect.wasLoaded = true;
236
- if (meta.extraMetadata) {
237
- targetEntity.entityAspect.extraMetadata = meta.extraMetadata;
238
- }
239
- targetEntity.entityAspect.entityState = EntityState.Unchanged;
240
- clearOriginalValues(targetEntity);
241
- // propertyName not specified because multiple props EntityChangedEventArgs
242
- targetEntity.entityAspect.propertyChanged.publish({ entity: targetEntity, propertyName: null });
243
- var action = isSaving ? EntityAction.MergeOnSave : EntityAction.MergeOnQuery;
244
- em.entityChanged.publish({ entityAction: action, entity: targetEntity });
245
- // this is needed to handle an overwrite of a modified entity with an unchanged entity
246
- // which might in turn cause _hasChanges to change.
247
- if (!targetEntityState.isUnchanged()) {
248
- em._notifyStateChange(targetEntity, false);
249
- }
250
- }
251
- else {
252
- // process targetEntity (even if deleted) to ensure related nodes are handled
253
- updateEntityNoMerge(mc, targetEntity, node);
254
- if (targetEntityState === EntityState.Deleted && !mc.mergeOptions.includeDeleted) {
255
- return null;
256
- }
257
- }
258
- }
259
- }
260
- else {
261
- targetEntity = entityType._createInstanceCore();
262
- updateEntity(mc, targetEntity, node);
263
- if (meta.extraMetadata) {
264
- targetEntity.entityAspect.extraMetadata = meta.extraMetadata;
265
- }
266
- // em._attachEntityCore(targetEntity, EntityState.Unchanged, MergeStrategy.Disallowed);
267
- em._attachEntityCore(targetEntity, EntityState.Unchanged, mergeStrategy);
268
- targetEntity.entityAspect.wasLoaded = true;
269
- em.entityChanged.publish({ entityAction: EntityAction.AttachOnQuery, entity: targetEntity });
270
- }
271
- return targetEntity;
272
- }
273
- // copied from entityAspect
274
- function clearOriginalValues(target) {
275
- var aspect = target.entityAspect || target.complexAspect;
276
- aspect.originalValues = {};
277
- var stype = target.entityType || target.complexType;
278
- stype.complexProperties.forEach(function (cp) {
279
- var cos = target.getProperty(cp.name);
280
- if (cp.isScalar) {
281
- clearOriginalValues(cos);
282
- }
283
- else {
284
- cos._acceptChanges();
285
- cos.forEach(clearOriginalValues);
286
- }
287
- });
288
- }
289
- function updateEntityNoMerge(mc, targetEntity, node) {
290
- updateEntityRef(mc, targetEntity, node);
291
- // we still need to merge related entities even if top level entity wasn't modified.
292
- node.entityType.navigationProperties.forEach(function (np) {
293
- if (np.isScalar) {
294
- mergeRelatedEntityCore(mc, node, np);
295
- }
296
- else {
297
- mergeRelatedEntitiesCore(mc, node, np);
298
- }
299
- });
300
- }
301
- function updateEntity(mc, targetEntity, node) {
302
- updateEntityRef(mc, targetEntity, node);
303
- var entityType = targetEntity.entityType;
304
- entityType._updateTargetFromRaw(targetEntity, node, mc.rawValueFn);
305
- entityType.navigationProperties.forEach(function (np) {
306
- if (np.isScalar) {
307
- mergeRelatedEntity(mc, np, targetEntity, node);
308
- }
309
- else {
310
- mergeRelatedEntities(mc, np, targetEntity, node);
311
- }
312
- });
313
- }
314
- function mergeRelatedEntity(mc, navigationProperty, targetEntity, rawEntity) {
315
- var relatedEntity = mergeRelatedEntityCore(mc, rawEntity, navigationProperty);
316
- if (relatedEntity == null)
317
- return;
318
- if (typeof relatedEntity === 'function') {
319
- mc.deferredFns.push(function () {
320
- relatedEntity = relatedEntity();
321
- updateRelatedEntity(relatedEntity, targetEntity, navigationProperty);
322
- });
323
- }
324
- else {
325
- updateRelatedEntity(relatedEntity, targetEntity, navigationProperty);
326
- }
327
- }
328
- function mergeRelatedEntities(mc, navigationProperty, targetEntity, rawEntity) {
329
- var relatedEntities = mergeRelatedEntitiesCore(mc, rawEntity, navigationProperty);
330
- if (relatedEntities == null)
331
- return;
332
- var inverseProperty = navigationProperty.inverse;
333
- if (!inverseProperty)
334
- return;
335
- var originalRelatedEntities = targetEntity.getProperty(navigationProperty.name);
336
- originalRelatedEntities.wasLoaded = true;
337
- relatedEntities.forEach(function (relatedEntity) {
338
- if (typeof relatedEntity === 'function') {
339
- mc.deferredFns.push(function () {
340
- relatedEntity = relatedEntity();
341
- updateRelatedEntityInCollection(mc, relatedEntity, originalRelatedEntities, targetEntity, inverseProperty);
342
- });
343
- }
344
- else {
345
- updateRelatedEntityInCollection(mc, relatedEntity, originalRelatedEntities, targetEntity, inverseProperty);
346
- }
347
- });
348
- }
349
- function mergeRelatedEntityCore(mc, rawEntity, navigationProperty) {
350
- var relatedRawEntity = rawEntity[navigationProperty.nameOnServer];
351
- if (!relatedRawEntity)
352
- return null;
353
- var relatedEntity = mc.visitAndMerge(relatedRawEntity, { nodeType: "navProp", navigationProperty: navigationProperty });
354
- return relatedEntity;
355
- }
356
- function mergeRelatedEntitiesCore(mc, rawEntity, navigationProperty) {
357
- var relatedRawEntities = rawEntity[navigationProperty.nameOnServer];
358
- if (!relatedRawEntities)
359
- return null;
360
- // needed if what is returned is not an array and we expect one - this happens with __deferred in OData.
361
- if (!Array.isArray(relatedRawEntities)) {
362
- // return null;
363
- relatedRawEntities = relatedRawEntities.results; // OData v3 will look like this with an expand
364
- if (!relatedRawEntities) {
365
- return null;
366
- }
367
- }
368
- var relatedEntities = mc.visitAndMerge(relatedRawEntities, { nodeType: "navPropItem", navigationProperty: navigationProperty });
369
- return relatedEntities;
370
- }
371
- function updateRelatedEntity(relatedEntity, targetEntity, navigationProperty) {
372
- if (!relatedEntity)
373
- return;
374
- var propName = navigationProperty.name;
375
- var currentRelatedEntity = targetEntity.getProperty(propName);
376
- // check if the related entity is already hooked up
377
- if (currentRelatedEntity !== relatedEntity) {
378
- // if not hook up both directions.
379
- targetEntity.setProperty(propName, relatedEntity);
380
- var inverseProperty = navigationProperty.inverse;
381
- if (!inverseProperty)
382
- return;
383
- if (inverseProperty.isScalar) {
384
- relatedEntity.setProperty(inverseProperty.name, targetEntity);
385
- }
386
- else {
387
- var collection = relatedEntity.getProperty(inverseProperty.name);
388
- collection.push(targetEntity);
389
- }
390
- }
391
- }
392
- function updateRelatedEntityInCollection(mc, relatedEntity, relatedEntities, targetEntity, inverseProperty) {
393
- if (!relatedEntity)
394
- return;
395
- // don't update relatedCollection if preserveChanges & relatedEntity has an fkChange.
396
- if (relatedEntity.entityAspect.entityState === EntityState.Modified
397
- && mc.mergeOptions.mergeStrategy === MergeStrategy.PreserveChanges) {
398
- var origValues_1 = relatedEntity.entityAspect.originalValues;
399
- var fkWasModified = inverseProperty.relatedDataProperties.some(function (dp) {
400
- return origValues_1[dp.name] != undefined;
401
- });
402
- if (fkWasModified)
403
- return;
404
- }
405
- // check if the related entity is already hooked up
406
- var thisEntity = relatedEntity.getProperty(inverseProperty.name);
407
- if (thisEntity !== targetEntity) {
408
- // if not - hook it up.
409
- relatedEntities.push(relatedEntity);
410
- relatedEntity.setProperty(inverseProperty.name, targetEntity);
411
- }
412
- }
413
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGluZy1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9tYXBwaW5nLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFHLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxXQUFXLEVBQUcsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFpQixVQUFVLEVBQWtCLFlBQVksRUFBc0IsTUFBTSxtQkFBbUIsQ0FBQztBQUVoSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBc0I3Qzs7OztFQUlFO0FBQ0Y7SUFpQkUsd0JBQVksTUFBNEI7UUFieEMsZUFBVSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLHFDQUFxQztRQWVwRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYztTQUN4RCxDQUFDLENBQUM7UUFFSCxlQUFlO1FBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQztRQUN0RCxJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLHFDQUFxQztJQUM3RixD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YSxDQUFDLGVBQWUsRUFBRTtRQUNwRSxJQUFJLFlBQVUsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUMzRCxJQUFJLGFBQWEsR0FBRyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6RSxPQUFPLFlBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxhQUFhO1lBQUUsT0FBTztLQUMzQjtJQUNELG1EQUFtRDtJQUNuRCxJQUFJLFVBQVUsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqRSxJQUFJLFVBQVUsS0FBSyxZQUFZLEVBQUU7UUFDL0IsdUJBQXVCO1FBQ3ZCLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQy9EO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTZXJ2aWNlQWRhcHRlciB9IGZyb20gJy4vaW50ZXJmYWNlLXJlZ2lzdHJ5JztcclxuaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IERhdGFUeXBlICB9IGZyb20gJy4vZGF0YS10eXBlJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UsIEpzb25SZXN1bHRzQWRhcHRlciwgTm9kZUNvbnRleHQsIE5vZGVNZXRhIH0gZnJvbSAnLi9kYXRhLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZSAgfSBmcm9tICcuL2VudGl0eS1zdGF0ZSc7XHJcbmltcG9ydCB7IEVudGl0eUFjdGlvbiB9IGZyb20gJy4vZW50aXR5LWFjdGlvbic7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIFN0cnVjdHVyYWxUeXBlLCBEYXRhUHJvcGVydHksIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gJy4vZW50aXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBNZXJnZVN0cmF0ZWd5IH0gZnJvbSAnLi9xdWVyeS1vcHRpb25zJztcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5UXVlcnkgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcblxyXG5cclxuLyoqXHJcbkZvciB1c2UgYnkgYnJlZXplIHBsdWdpbiBhdXRob3JzIG9ubHkuIFRoZSBjbGFzcyBpcyBmb3IgdXNlIGluIGJ1aWxkaW5nIGEgW1tJRGF0YVNlcnZpY2VBZGFwdGVyXV0gaW1wbGVtZW50YXRpb24uIFxyXG5AYWRhcHRlciAoc2VlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dKSAgICBcclxuQGhpZGRlbiBcclxuKi9cclxuZXhwb3J0IGludGVyZmFjZSBNZXJnZU9wdGlvbnMge1xyXG4gIG1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3k7XHJcbiAgaW5jbHVkZURlbGV0ZWQ/OiBib29sZWFuO1xyXG4gIG5vVHJhY2tpbmc/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKiogQGhpZGRlbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE1hcHBpbmdDb250ZXh0Q29uZmlnIHtcclxuICBkYXRhU2VydmljZTogRGF0YVNlcnZpY2U7XHJcbiAgcXVlcnk/OiBFbnRpdHlRdWVyeSB8IHN0cmluZztcclxuICBlbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyO1xyXG4gIG1lcmdlT3B0aW9uczogTWVyZ2VPcHRpb25zO1xyXG59XHJcblxyXG4vKipcclxuRm9yIHVzZSBieSBicmVlemUgcGx1Z2luIGF1dGhvcnMgb25seS4gVGhlIGNsYXNzIGlzIGZvciB1c2UgaW4gYnVpbGRpbmcgYSBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXSBpbXBsZW1lbnRhdGlvbi4gXHJcbkBhZGFwdGVyIChzZWUgW1tJRGF0YVNlcnZpY2VBZGFwdGVyXV0pICAgIFxyXG5AaGlkZGVuIFxyXG4qL1xyXG5leHBvcnQgY2xhc3MgTWFwcGluZ0NvbnRleHQge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIGRlY2xhcmUgXyR0eXBlTmFtZTogc3RyaW5nOyAvLyBvbiBwcm90b3R5cGVcclxuXHJcbiAgcmF3VmFsdWVGbiA9IERhdGFQcm9wZXJ0eS5nZXRSYXdWYWx1ZUZyb21TZXJ2ZXI7IC8vIHRoaW5rIGFib3V0IHBhc3NpbmcgdGhpcyBpbiBsYXRlci5cclxuXHJcbiAgZGVjbGFyZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2U7XHJcbiAgZGVjbGFyZSBxdWVyeTogRW50aXR5UXVlcnkgfCBzdHJpbmc7XHJcbiAgZGVjbGFyZSBlbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyO1xyXG4gIGRlY2xhcmUgbWVyZ2VPcHRpb25zOiBNZXJnZU9wdGlvbnM7XHJcbiAgZGVjbGFyZSBhZGFwdGVyOiBEYXRhU2VydmljZUFkYXB0ZXI7ICAvLyBhc3NpZ25lZCBpbiB0aGUgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIuXHJcblxyXG4gIGRlY2xhcmUgcmVmTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyAvLyBUT0RPXHJcbiAgZGVjbGFyZSBkZWZlcnJlZEZuczogRnVuY3Rpb25bXTsgLy8gVE9ET1xyXG4gIGRlY2xhcmUganNvblJlc3VsdHNBZGFwdGVyOiBKc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgZGVjbGFyZSBtZXRhZGF0YVN0b3JlOiBNZXRhZGF0YVN0b3JlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb25maWc6IE1hcHBpbmdDb250ZXh0Q29uZmlnKSB7XHJcblxyXG4gICAgY29yZS5leHRlbmQodGhpcywgY29uZmlnLCBbXHJcbiAgICAgIFwicXVlcnlcIiwgXCJlbnRpdHlNYW5hZ2VyXCIsIFwiZGF0YVNlcnZpY2VcIiwgXCJtZXJnZU9wdGlvbnNcIlxyXG4gICAgXSk7XHJcblxyXG4gICAgLy8gY2FsYydkIHByb3BzXHJcbiAgICB0aGlzLnJlZk1hcCA9IHt9O1xyXG4gICAgdGhpcy5kZWZlcnJlZEZucyA9IFtdO1xyXG4gICAgdGhpcy5qc29uUmVzdWx0c0FkYXB0ZXIgPSB0aGlzLmRhdGFTZXJ2aWNlLmpzb25SZXN1bHRzQWRhcHRlcjtcclxuICAgIHRoaXMubWV0YWRhdGFTdG9yZSA9IHRoaXMuZW50aXR5TWFuYWdlci5tZXRhZGF0YVN0b3JlO1xyXG4gICAgdGhpcy5yYXdWYWx1ZUZuID0gRGF0YVByb3BlcnR5LmdldFJhd1ZhbHVlRnJvbVNlcnZlcjsgLy8gdGhpbmsgYWJvdXQgcGFzc2luZyB0aGlzIGluIGxhdGVyLlxyXG4gIH1cclxuXHJcbiAgZ2V0VXJsKCkge1xyXG4gICAgbGV0IHF1ZXJ5ID0gdGhpcy5xdWVyeTtcclxuICAgIGlmICghcXVlcnkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicXVlcnkgY2Fubm90IGJlIGVtcHR5XCIpO1xyXG4gICAgfVxyXG4gICAgbGV0IHVyaVN0cmluZzogc3RyaW5nO1xyXG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdXJpU3RyaW5nID0gcXVlcnk7XHJcbiAgICB9IGVsc2UgaWYgKHF1ZXJ5IGluc3RhbmNlb2YgRW50aXR5UXVlcnkpIHtcclxuICAgICAgdXJpU3RyaW5nID0gdGhpcy5kYXRhU2VydmljZS51cmlCdWlsZGVyIS5idWlsZFVyaShxdWVyeSwgdGhpcy5tZXRhZGF0YVN0b3JlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byByZWNvZ25pemUgcXVlcnkgcGFyYW1ldGVyIGFzIGVpdGhlciBhIHN0cmluZyBvciBhbiBFbnRpdHlRdWVyeVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLnF1YWxpZnlVcmwodXJpU3RyaW5nKTtcclxuICB9XHJcblxyXG4gIHZpc2l0QW5kTWVyZ2Uobm9kZXM6IGFueVtdLCBub2RlQ29udGV4dDogYW55KSB7XHJcbiAgICBsZXQgcXVlcnkgPSB0aGlzLnF1ZXJ5O1xyXG4gICAgbGV0IGpyYSA9IHRoaXMuanNvblJlc3VsdHNBZGFwdGVyO1xyXG4gICAgbm9kZUNvbnRleHQgPSBub2RlQ29udGV4dCB8fCB7fTtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIGxldCByZXN1bHQgPSBjb3JlLm1hcChub2RlcywgZnVuY3Rpb24gKG5vZGUpIHtcclxuICAgICAgaWYgKHF1ZXJ5ID09IG51bGwgJiYgbm9kZS5lbnRpdHlBc3BlY3QpIHtcclxuICAgICAgICAvLyBkb24ndCBib3RoZXIgbWVyZ2luZyBhIHJlc3VsdCBmcm9tIGEgc2F2ZSB0aGF0IHdhcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICAgIGlmIChub2RlLmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZS5pc0RlbGV0ZWQoKSkge1xyXG4gICAgICAgICAgdGhhdC5lbnRpdHlNYW5hZ2VyLmRldGFjaEVudGl0eShub2RlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbm9kZS5lbnRpdHlBc3BlY3QuYWNjZXB0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG1ldGEgPSBqcmEudmlzaXROb2RlKG5vZGUsIHRoYXQsIG5vZGVDb250ZXh0KSB8fCB7fTtcclxuICAgICAgbm9kZSA9IG1ldGEubm9kZSB8fCBub2RlO1xyXG4gICAgICBpZiAocXVlcnkgJiYgbm9kZUNvbnRleHQubm9kZVR5cGUgPT09IFwicm9vdFwiICYmICFtZXRhLmVudGl0eVR5cGUpIHtcclxuICAgICAgICBtZXRhLmVudGl0eVR5cGUgPSBxdWVyeSBpbnN0YW5jZW9mIEVudGl0eVF1ZXJ5ICYmICBxdWVyeS5fZ2V0VG9FbnRpdHlUeXBlICYmIHF1ZXJ5Ll9nZXRUb0VudGl0eVR5cGUodGhhdC5tZXRhZGF0YVN0b3JlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcHJvY2Vzc01ldGEodGhhdCwgbm9kZSwgbWV0YSk7XHJcbiAgICB9LCB0aGlzLm1lcmdlT3B0aW9ucy5pbmNsdWRlRGVsZXRlZCk7XHJcblxyXG4gICAgaWYgKHJlc3VsdC5maWx0ZXIgJiYgIXRoaXMubWVyZ2VPcHRpb25zLmluY2x1ZGVEZWxldGVkKSB7XHJcbiAgICAgIC8vIHJlc3VsdCBtYXkgaGF2ZSBkZWxldGVkIGVudGl0aWVzIGJlY2F1c2UgcmVsYXRlZCBub2RlcyB3ZXJlIHByb2Nlc3NlZFxyXG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKCh4OiBhbnkpID0+IHggJiYgKCF4LmVudGl0eUFzcGVjdCB8fCAheC5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNEZWxldGVkKCkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0RlZmVycmVkKCkge1xyXG4gICAgaWYgKHRoaXMuZGVmZXJyZWRGbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmRlZmVycmVkRm5zLmZvckVhY2goKGZuKSA9PiB7XHJcbiAgICAgICAgZm4oKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbk1hcHBpbmdDb250ZXh0LnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJNYXBwaW5nQ29udGV4dFwiO1xyXG5cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NNZXRhKG1jOiBNYXBwaW5nQ29udGV4dCwgbm9kZTogYW55LCBtZXRhOiBOb2RlTWV0YSwgYXNzaWduRm4/OiAodmFsOiBhbnkpID0+IHZvaWQpIHtcclxuICAvLyA9PSBpcyBkZWxpYmVyYXRlIGhlcmUgaW5zdGVhZCBvZiA9PT1cclxuICBpZiAobWV0YS5pZ25vcmUgfHwgbm9kZSA9PSBudWxsKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9IGVsc2UgaWYgKG1ldGEubm9kZVJlZklkKSB7XHJcbiAgICBsZXQgcmVmVmFsdWUgPSByZXNvbHZlRW50aXR5UmVmKG1jLCBtZXRhLm5vZGVSZWZJZCk7XHJcbiAgICBpZiAodHlwZW9mIHJlZlZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiYgYXNzaWduRm4gIT0gbnVsbCkge1xyXG4gICAgICBtYy5kZWZlcnJlZEZucy5wdXNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBhc3NpZ25GbihyZWZWYWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBkZWZlcnJlZCBhbmQgd2lsbCBiZSBzZXQgbGF0ZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVmVmFsdWU7XHJcbiAgfSBlbHNlIGlmIChtZXRhLmVudGl0eVR5cGUpIHtcclxuICAgIGxldCBlbnRpdHlUeXBlID0gbWV0YS5lbnRpdHlUeXBlO1xyXG4gICAgaWYgKG1jLm1lcmdlT3B0aW9ucy5ub1RyYWNraW5nKSB7XHJcbiAgICAgIG5vZGUgPSBwcm9jZXNzTm9NZXJnZShtYywgZW50aXR5VHlwZSwgbm9kZSk7XHJcbiAgICAgIGlmIChlbnRpdHlUeXBlLm5vVHJhY2tpbmdGbikge1xyXG4gICAgICAgIG5vZGUgPSBlbnRpdHlUeXBlLm5vVHJhY2tpbmdGbihub2RlLCBlbnRpdHlUeXBlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobWV0YS5ub2RlSWQpIHtcclxuICAgICAgICBtYy5yZWZNYXBbbWV0YS5ub2RlSWRdID0gbm9kZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbm9kZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChlbnRpdHlUeXBlLmlzQ29tcGxleFR5cGUpIHtcclxuICAgICAgICAvLyBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdG8gZG8gc2VydmVyTmFtZSB0byBjbGllbnQgbmFtZSBwcm9jZXNzaW5nXHJcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NOb01lcmdlKG1jLCBlbnRpdHlUeXBlLCBub2RlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbWVyZ2VFbnRpdHkobWMsIG5vZGUsIG1ldGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuXHJcbiAgICBpZiAoKCFtZXRhLnBhc3NUaHJ1KSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgISBjb3JlLmlzRGF0ZShub2RlKSkge1xyXG4gICAgICBub2RlID0gcHJvY2Vzc0Fub25UeXBlKG1jLCBub2RlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB1cGRhdGluZyB0aGUgcmVmTWFwIGZvciBlbnRpdGllcyBpcyBoYW5kbGVkIGJ5IHVwZGF0ZUVudGl0eVJlZiBmb3IgZW50aXRpZXMuXHJcbiAgICBpZiAobWV0YS5ub2RlSWQpIHtcclxuICAgICAgbWMucmVmTWFwW21ldGEubm9kZUlkXSA9IG5vZGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9kZTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NOb01lcmdlKG1jOiBNYXBwaW5nQ29udGV4dCwgc3R5cGU6IFN0cnVjdHVyYWxUeXBlLCBub2RlOiBhbnkpIHtcclxuICBsZXQgcmVzdWx0ID0ge30gYXMgUmVjb3JkPHN0cmluZywgYW55PjtcclxuXHJcbiAgc3R5cGUuZGF0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoZHApIHtcclxuICAgIGlmIChkcC5pc0NvbXBsZXhQcm9wZXJ0eSkge1xyXG4gICAgICByZXN1bHRbZHAubmFtZV0gPSBjb3JlLm1hcChub2RlW2RwLm5hbWVPblNlcnZlcl0sICh2OiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gcHJvY2Vzc05vTWVyZ2UobWMsIGRwLmRhdGFUeXBlIGFzIGFueSwgdik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0W2RwLm5hbWVdID0gRGF0YVR5cGUucGFyc2VSYXdWYWx1ZShub2RlW2RwLm5hbWVPblNlcnZlcl0sIGRwLmRhdGFUeXBlIGFzIERhdGFUeXBlKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgKHN0eXBlIGluc3RhbmNlb2YgRW50aXR5VHlwZSkgJiYgc3R5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaCggKG5wKSA9PiB7XHJcbiAgICBsZXQgbm9kZUNvbnRleHQgPSB7IG5vZGVUeXBlOiBcIm5hdlByb3BcIiwgbmF2aWdhdGlvblByb3BlcnR5OiBucCB9O1xyXG4gICAgdmlzaXROb2RlKG5vZGVbbnAubmFtZU9uU2VydmVyXSwgbWMsIG5vZGVDb250ZXh0LCByZXN1bHQsIG5wLm5hbWUpO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzQW5vblR5cGUobWM6IE1hcHBpbmdDb250ZXh0LCBub2RlOiBhbnkpIHtcclxuICAvLyBub2RlIGlzIGd1YXJhbnRlZWQgdG8gYmUgYW4gb2JqZWN0IGJ5IHRoaXMgcG9pbnQsIGkuZS4gbm90IGEgc2NhbGFyXHJcbiAgbGV0IGtleUZuID0gbWMubWV0YWRhdGFTdG9yZS5uYW1pbmdDb252ZW50aW9uLnNlcnZlclByb3BlcnR5TmFtZVRvQ2xpZW50O1xyXG4gIGxldCByZXN1bHQgPSB7fTtcclxuXHJcbiAgY29yZS5vYmplY3RGb3JFYWNoKG5vZGUsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XHJcbiAgICBsZXQgbmV3S2V5ID0ga2V5Rm4oa2V5KTtcclxuICAgIGxldCBub2RlQ29udGV4dCA9IHsgbm9kZVR5cGU6IFwiYW5vblByb3BcIiwgcHJvcGVydHlOYW1lOiBuZXdLZXkgfTtcclxuICAgIHZpc2l0Tm9kZSh2YWx1ZSwgbWMsIG5vZGVDb250ZXh0LCByZXN1bHQsIG5ld0tleSk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gdmlzaXROb2RlKG5vZGU6IGFueSwgbWM6IE1hcHBpbmdDb250ZXh0LCBub2RlQ29udGV4dDogTm9kZUNvbnRleHQsIHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55Piwga2V5OiBzdHJpbmcpIHtcclxuICBsZXQganJhID0gbWMuanNvblJlc3VsdHNBZGFwdGVyO1xyXG4gIGxldCBtZXRhID0ganJhLnZpc2l0Tm9kZShub2RlLCBtYywgbm9kZUNvbnRleHQpIHx8IHt9O1xyXG4gIC8vIGFsbG93cyB2aXNpdE5vZGUgdG8gY2hhbmdlIHRoZSB2YWx1ZTtcclxuICBub2RlID0gbWV0YS5ub2RlIHx8IG5vZGU7XHJcblxyXG4gIGlmIChtZXRhLmlnbm9yZSkgcmV0dXJuO1xyXG4gIGlmIChtZXRhLnBhc3NUaHJ1KSByZXR1cm4gbm9kZTtcclxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xyXG4gICAgbm9kZUNvbnRleHQubm9kZVR5cGUgPSBub2RlQ29udGV4dC5ub2RlVHlwZSArIFwiSXRlbVwiO1xyXG4gICAgcmVzdWx0W2tleV0gPSBub2RlLm1hcChmdW5jdGlvbiAodiwgaXgpIHtcclxuICAgICAgbWV0YSA9IGpyYS52aXNpdE5vZGUodiwgbWMsIG5vZGVDb250ZXh0KSB8fCB7fTtcclxuICAgICAgdiA9IG1ldGEubm9kZSB8fCB2O1xyXG4gICAgICByZXR1cm4gcHJvY2Vzc01ldGEobWMsIHYsIG1ldGEsIGZ1bmN0aW9uIChyZWZWYWx1ZSkge1xyXG4gICAgICAgIHJlc3VsdFtrZXldW2l4XSA9IHJlZlZhbHVlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJlc3VsdFtrZXldID0gcHJvY2Vzc01ldGEobWMsIG5vZGUsIG1ldGEsIGZ1bmN0aW9uIChyZWZWYWx1ZSkge1xyXG4gICAgICByZXN1bHRba2V5XSA9IHJlZlZhbHVlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVFbnRpdHlSZWYobWM6IE1hcHBpbmdDb250ZXh0LCBub2RlUmVmSWQ6IHN0cmluZykge1xyXG4gIGxldCBlbnRpdHkgPSBtYy5yZWZNYXBbbm9kZVJlZklkXTtcclxuICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBtYy5yZWZNYXBbbm9kZVJlZklkXTtcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBlbnRpdHk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVFbnRpdHlSZWYobWM6IE1hcHBpbmdDb250ZXh0LCB0YXJnZXRFbnRpdHk6IGFueSwgbm9kZTogYW55KSB7XHJcbiAgbGV0IG5vZGVJZCA9IG5vZGUuXyRtZXRhLm5vZGVJZDtcclxuICBpZiAoIW5vZGVJZCAmJiBub2RlLl8kbWV0YS5leHRyYU1ldGFkYXRhKSB7XHJcbiAgICAvLyBvZGF0YSBjYXNlLiAgcmVmTWFwIGlzbid0IHJlYWxseSB1c2VkLCBidXQgaXMgcmV0dXJuZWQgYXMgZGF0YS5yZXRyaWV2ZWRFbnRpdGllcywgc28gd2UgcG9wdWxhdGVkIGl0IGFueXdheS5cclxuICAgIG5vZGVJZCA9IG5vZGUuXyRtZXRhLmV4dHJhTWV0YWRhdGEudXJpS2V5O1xyXG4gIH1cclxuICBpZiAobm9kZUlkICE9IG51bGwpIHtcclxuICAgIG1jLnJlZk1hcFtub2RlSWRdID0gdGFyZ2V0RW50aXR5O1xyXG4gIH1cclxufVxyXG5cclxuLy8gY2FuIHJldHVybiBudWxsIGZvciBhIGRlbGV0ZWQgZW50aXR5IGlmIGluY2x1ZGVEZWxldGVkID09IGZhbHNlXHJcbmZ1bmN0aW9uIG1lcmdlRW50aXR5KG1jOiBNYXBwaW5nQ29udGV4dCwgbm9kZTogYW55LCBtZXRhOiBOb2RlTWV0YSkge1xyXG4gIG5vZGUuXyRtZXRhID0gbWV0YTtcclxuICBsZXQgZW0gPSBtYy5lbnRpdHlNYW5hZ2VyO1xyXG5cclxuICBsZXQgZW50aXR5VHlwZSA9IG1ldGEuZW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlO1xyXG4gIGlmICh0eXBlb2YgKGVudGl0eVR5cGUpID09PSAnc3RyaW5nJykge1xyXG4gICAgZW50aXR5VHlwZSA9IG1jLm1ldGFkYXRhU3RvcmUuX2dldFN0cnVjdHVyYWxUeXBlKGVudGl0eVR5cGUsIGZhbHNlKSBhcyBFbnRpdHlUeXBlO1xyXG4gIH1cclxuICBub2RlLmVudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xyXG5cclxuICBsZXQgbWVyZ2VTdHJhdGVneSA9IG1jLm1lcmdlT3B0aW9ucy5tZXJnZVN0cmF0ZWd5O1xyXG4gIGxldCBpc1NhdmluZyA9IG1jLnF1ZXJ5ID09IG51bGw7XHJcblxyXG4gIGxldCBlbnRpdHlLZXkgPSBlbnRpdHlUeXBlLmdldEVudGl0eUtleUZyb21SYXdFbnRpdHkobm9kZSwgbWMucmF3VmFsdWVGbik7XHJcbiAgbGV0IHRhcmdldEVudGl0eSA9IGVtLmdldEVudGl0eUJ5S2V5KGVudGl0eUtleSk7XHJcbiAgaWYgKHRhcmdldEVudGl0eSkge1xyXG4gICAgaWYgKGlzU2F2aW5nICYmIHRhcmdldEVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUuaXNEZWxldGVkKCkpIHtcclxuICAgICAgZW0uZGV0YWNoRW50aXR5KHRhcmdldEVudGl0eSk7XHJcbiAgICAgIHJldHVybiB0YXJnZXRFbnRpdHk7XHJcbiAgICB9XHJcbiAgICBsZXQgdGFyZ2V0RW50aXR5U3RhdGUgPSB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gICAgaWYgKG1lcmdlU3RyYXRlZ3kgPT09IE1lcmdlU3RyYXRlZ3kuRGlzYWxsb3dlZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIE1lcmdlU3RyYXRlZ3kgb2YgJ0Rpc2FsbG93ZWQnIHByZXZlbnRzIFwiICsgZW50aXR5S2V5LnRvU3RyaW5nKCkgKyBcIiBmcm9tIGJlaW5nIG1lcmdlZFwiKTtcclxuICAgIH0gZWxzZSBpZiAobWVyZ2VTdHJhdGVneSA9PT0gTWVyZ2VTdHJhdGVneS5Ta2lwTWVyZ2UpIHtcclxuICAgICAgdXBkYXRlRW50aXR5Tm9NZXJnZShtYywgdGFyZ2V0RW50aXR5LCBub2RlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChtZXJnZVN0cmF0ZWd5ID09PSBNZXJnZVN0cmF0ZWd5Lk92ZXJ3cml0ZUNoYW5nZXNcclxuICAgICAgICB8fCB0YXJnZXRFbnRpdHlTdGF0ZS5pc1VuY2hhbmdlZCgpKSB7XHJcbiAgICAgICAgdXBkYXRlRW50aXR5KG1jLCB0YXJnZXRFbnRpdHksIG5vZGUpO1xyXG4gICAgICAgIHRhcmdldEVudGl0eS5lbnRpdHlBc3BlY3Qud2FzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAobWV0YS5leHRyYU1ldGFkYXRhKSB7XHJcbiAgICAgICAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LmV4dHJhTWV0YWRhdGEgPSBtZXRhLmV4dHJhTWV0YWRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRhcmdldEVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUgPSBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQ7XHJcbiAgICAgICAgY2xlYXJPcmlnaW5hbFZhbHVlcyh0YXJnZXRFbnRpdHkpO1xyXG4gICAgICAgIC8vIHByb3BlcnR5TmFtZSBub3Qgc3BlY2lmaWVkIGJlY2F1c2UgbXVsdGlwbGUgcHJvcHMgRW50aXR5Q2hhbmdlZEV2ZW50QXJnc1xyXG4gICAgICAgIHRhcmdldEVudGl0eS5lbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkLnB1Ymxpc2goeyBlbnRpdHk6IHRhcmdldEVudGl0eSwgcHJvcGVydHlOYW1lOiBudWxsIH0pO1xyXG4gICAgICAgIGxldCBhY3Rpb24gPSBpc1NhdmluZyA/IEVudGl0eUFjdGlvbi5NZXJnZU9uU2F2ZSA6IEVudGl0eUFjdGlvbi5NZXJnZU9uUXVlcnk7XHJcbiAgICAgICAgZW0uZW50aXR5Q2hhbmdlZC5wdWJsaXNoKHsgZW50aXR5QWN0aW9uOiBhY3Rpb24sIGVudGl0eTogdGFyZ2V0RW50aXR5IH0pO1xyXG4gICAgICAgIC8vIHRoaXMgaXMgbmVlZGVkIHRvIGhhbmRsZSBhbiBvdmVyd3JpdGUgb2YgYSBtb2RpZmllZCBlbnRpdHkgd2l0aCBhbiB1bmNoYW5nZWQgZW50aXR5XHJcbiAgICAgICAgLy8gd2hpY2ggbWlnaHQgaW4gdHVybiBjYXVzZSBfaGFzQ2hhbmdlcyB0byBjaGFuZ2UuXHJcbiAgICAgICAgaWYgKCF0YXJnZXRFbnRpdHlTdGF0ZS5pc1VuY2hhbmdlZCgpKSB7XHJcbiAgICAgICAgICBlbS5fbm90aWZ5U3RhdGVDaGFuZ2UodGFyZ2V0RW50aXR5LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHByb2Nlc3MgdGFyZ2V0RW50aXR5IChldmVuIGlmIGRlbGV0ZWQpIHRvIGVuc3VyZSByZWxhdGVkIG5vZGVzIGFyZSBoYW5kbGVkXHJcbiAgICAgICAgdXBkYXRlRW50aXR5Tm9NZXJnZShtYywgdGFyZ2V0RW50aXR5LCBub2RlKTtcclxuICAgICAgICBpZiAodGFyZ2V0RW50aXR5U3RhdGUgPT09IEVudGl0eVN0YXRlLkRlbGV0ZWQgJiYgIW1jLm1lcmdlT3B0aW9ucy5pbmNsdWRlRGVsZXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRhcmdldEVudGl0eSA9IGVudGl0eVR5cGUuX2NyZWF0ZUluc3RhbmNlQ29yZSgpIGFzIEVudGl0eTtcclxuXHJcbiAgICB1cGRhdGVFbnRpdHkobWMsIHRhcmdldEVudGl0eSwgbm9kZSk7XHJcblxyXG4gICAgaWYgKG1ldGEuZXh0cmFNZXRhZGF0YSkge1xyXG4gICAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LmV4dHJhTWV0YWRhdGEgPSBtZXRhLmV4dHJhTWV0YWRhdGE7XHJcbiAgICB9XHJcbiAgICAvLyBlbS5fYXR0YWNoRW50aXR5Q29yZSh0YXJnZXRFbnRpdHksIEVudGl0eVN0YXRlLlVuY2hhbmdlZCwgTWVyZ2VTdHJhdGVneS5EaXNhbGxvd2VkKTtcclxuICAgIGVtLl9hdHRhY2hFbnRpdHlDb3JlKHRhcmdldEVudGl0eSwgRW50aXR5U3RhdGUuVW5jaGFuZ2VkLCBtZXJnZVN0cmF0ZWd5KTtcclxuICAgIHRhcmdldEVudGl0eS5lbnRpdHlBc3BlY3Qud2FzTG9hZGVkID0gdHJ1ZTtcclxuICAgIGVtLmVudGl0eUNoYW5nZWQucHVibGlzaCh7IGVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLkF0dGFjaE9uUXVlcnksIGVudGl0eTogdGFyZ2V0RW50aXR5IH0pO1xyXG4gIH1cclxuICByZXR1cm4gdGFyZ2V0RW50aXR5O1xyXG59XHJcblxyXG4vLyBjb3BpZWQgZnJvbSBlbnRpdHlBc3BlY3RcclxuZnVuY3Rpb24gY2xlYXJPcmlnaW5hbFZhbHVlcyh0YXJnZXQ6IGFueSkge1xyXG4gIGxldCBhc3BlY3QgPSB0YXJnZXQuZW50aXR5QXNwZWN0IHx8IHRhcmdldC5jb21wbGV4QXNwZWN0O1xyXG4gIGFzcGVjdC5vcmlnaW5hbFZhbHVlcyA9IHt9O1xyXG4gIGxldCBzdHlwZSA9IHRhcmdldC5lbnRpdHlUeXBlIHx8IHRhcmdldC5jb21wbGV4VHlwZTtcclxuICBzdHlwZS5jb21wbGV4UHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChjcDogYW55KSB7XHJcbiAgICBsZXQgY29zID0gdGFyZ2V0LmdldFByb3BlcnR5KGNwLm5hbWUpO1xyXG4gICAgaWYgKGNwLmlzU2NhbGFyKSB7XHJcbiAgICAgIGNsZWFyT3JpZ2luYWxWYWx1ZXMoY29zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvcy5fYWNjZXB0Q2hhbmdlcygpO1xyXG4gICAgICBjb3MuZm9yRWFjaChjbGVhck9yaWdpbmFsVmFsdWVzKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZUVudGl0eU5vTWVyZ2UobWM6IE1hcHBpbmdDb250ZXh0LCB0YXJnZXRFbnRpdHk6IEVudGl0eSwgbm9kZTogYW55KSB7XHJcbiAgdXBkYXRlRW50aXR5UmVmKG1jLCB0YXJnZXRFbnRpdHksIG5vZGUpO1xyXG4gIC8vIHdlIHN0aWxsIG5lZWQgdG8gbWVyZ2UgcmVsYXRlZCBlbnRpdGllcyBldmVuIGlmIHRvcCBsZXZlbCBlbnRpdHkgd2Fzbid0IG1vZGlmaWVkLlxyXG4gIG5vZGUuZW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChucDogTmF2aWdhdGlvblByb3BlcnR5KSB7XHJcbiAgICBpZiAobnAuaXNTY2FsYXIpIHtcclxuICAgICAgbWVyZ2VSZWxhdGVkRW50aXR5Q29yZShtYywgbm9kZSwgbnApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWVyZ2VSZWxhdGVkRW50aXRpZXNDb3JlKG1jLCBub2RlLCBucCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZUVudGl0eShtYzogTWFwcGluZ0NvbnRleHQsIHRhcmdldEVudGl0eTogRW50aXR5LCBub2RlOiBhbnkpIHtcclxuICB1cGRhdGVFbnRpdHlSZWYobWMsIHRhcmdldEVudGl0eSwgbm9kZSk7XHJcbiAgbGV0IGVudGl0eVR5cGUgPSB0YXJnZXRFbnRpdHkuZW50aXR5VHlwZTtcclxuICBlbnRpdHlUeXBlLl91cGRhdGVUYXJnZXRGcm9tUmF3KHRhcmdldEVudGl0eSwgbm9kZSwgbWMucmF3VmFsdWVGbik7XHJcblxyXG4gIGVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAobnApIHtcclxuICAgIGlmIChucC5pc1NjYWxhcikge1xyXG4gICAgICBtZXJnZVJlbGF0ZWRFbnRpdHkobWMsIG5wLCB0YXJnZXRFbnRpdHksIG5vZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWVyZ2VSZWxhdGVkRW50aXRpZXMobWMsIG5wLCB0YXJnZXRFbnRpdHksIG5vZGUpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtZXJnZVJlbGF0ZWRFbnRpdHkobWM6IE1hcHBpbmdDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSwgdGFyZ2V0RW50aXR5OiBFbnRpdHksIHJhd0VudGl0eTogYW55KSB7XHJcblxyXG4gIGxldCByZWxhdGVkRW50aXR5ID0gbWVyZ2VSZWxhdGVkRW50aXR5Q29yZShtYywgcmF3RW50aXR5LCBuYXZpZ2F0aW9uUHJvcGVydHkpO1xyXG4gIGlmIChyZWxhdGVkRW50aXR5ID09IG51bGwpIHJldHVybjtcclxuICBpZiAodHlwZW9mIHJlbGF0ZWRFbnRpdHkgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIG1jLmRlZmVycmVkRm5zLnB1c2goZnVuY3Rpb24gKCkge1xyXG4gICAgICByZWxhdGVkRW50aXR5ID0gcmVsYXRlZEVudGl0eSgpO1xyXG4gICAgICB1cGRhdGVSZWxhdGVkRW50aXR5KHJlbGF0ZWRFbnRpdHksIHRhcmdldEVudGl0eSwgbmF2aWdhdGlvblByb3BlcnR5KTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB1cGRhdGVSZWxhdGVkRW50aXR5KHJlbGF0ZWRFbnRpdHksIHRhcmdldEVudGl0eSwgbmF2aWdhdGlvblByb3BlcnR5KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1lcmdlUmVsYXRlZEVudGl0aWVzKG1jOiBNYXBwaW5nQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHksIHRhcmdldEVudGl0eTogRW50aXR5LCByYXdFbnRpdHk6IGFueSkge1xyXG4gIGxldCByZWxhdGVkRW50aXRpZXMgPSBtZXJnZVJlbGF0ZWRFbnRpdGllc0NvcmUobWMsIHJhd0VudGl0eSwgbmF2aWdhdGlvblByb3BlcnR5KTtcclxuICBpZiAocmVsYXRlZEVudGl0aWVzID09IG51bGwpIHJldHVybjtcclxuXHJcbiAgbGV0IGludmVyc2VQcm9wZXJ0eSA9IG5hdmlnYXRpb25Qcm9wZXJ0eS5pbnZlcnNlO1xyXG4gIGlmICghaW52ZXJzZVByb3BlcnR5KSByZXR1cm47XHJcblxyXG4gIGxldCBvcmlnaW5hbFJlbGF0ZWRFbnRpdGllcyA9IHRhcmdldEVudGl0eS5nZXRQcm9wZXJ0eShuYXZpZ2F0aW9uUHJvcGVydHkubmFtZSk7XHJcbiAgb3JpZ2luYWxSZWxhdGVkRW50aXRpZXMud2FzTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgcmVsYXRlZEVudGl0aWVzLmZvckVhY2goZnVuY3Rpb24gKHJlbGF0ZWRFbnRpdHk6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiByZWxhdGVkRW50aXR5ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIG1jLmRlZmVycmVkRm5zLnB1c2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJlbGF0ZWRFbnRpdHkgPSByZWxhdGVkRW50aXR5KCk7XHJcbiAgICAgICAgdXBkYXRlUmVsYXRlZEVudGl0eUluQ29sbGVjdGlvbihtYywgcmVsYXRlZEVudGl0eSwgb3JpZ2luYWxSZWxhdGVkRW50aXRpZXMsIHRhcmdldEVudGl0eSwgaW52ZXJzZVByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXBkYXRlUmVsYXRlZEVudGl0eUluQ29sbGVjdGlvbihtYywgcmVsYXRlZEVudGl0eSwgb3JpZ2luYWxSZWxhdGVkRW50aXRpZXMsIHRhcmdldEVudGl0eSwgaW52ZXJzZVByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1lcmdlUmVsYXRlZEVudGl0eUNvcmUobWM6IE1hcHBpbmdDb250ZXh0LCByYXdFbnRpdHk6IGFueSwgbmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkpIHtcclxuICBsZXQgcmVsYXRlZFJhd0VudGl0eSA9IHJhd0VudGl0eVtuYXZpZ2F0aW9uUHJvcGVydHkubmFtZU9uU2VydmVyXTtcclxuICBpZiAoIXJlbGF0ZWRSYXdFbnRpdHkpIHJldHVybiBudWxsO1xyXG5cclxuICBsZXQgcmVsYXRlZEVudGl0eSA9IG1jLnZpc2l0QW5kTWVyZ2UocmVsYXRlZFJhd0VudGl0eSwgeyBub2RlVHlwZTogXCJuYXZQcm9wXCIsIG5hdmlnYXRpb25Qcm9wZXJ0eTogbmF2aWdhdGlvblByb3BlcnR5IH0pO1xyXG4gIHJldHVybiByZWxhdGVkRW50aXR5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBtZXJnZVJlbGF0ZWRFbnRpdGllc0NvcmUobWM6IE1hcHBpbmdDb250ZXh0LCByYXdFbnRpdHk6IGFueSwgbmF2aWdhdGlvblByb3BlcnR5OiBOYXZpZ2F0aW9uUHJvcGVydHkpIHtcclxuICBsZXQgcmVsYXRlZFJhd0VudGl0aWVzID0gcmF3RW50aXR5W25hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lT25TZXJ2ZXJdO1xyXG4gIGlmICghcmVsYXRlZFJhd0VudGl0aWVzKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgLy8gbmVlZGVkIGlmIHdoYXQgaXMgcmV0dXJuZWQgaXMgbm90IGFuIGFycmF5IGFuZCB3ZSBleHBlY3Qgb25lIC0gdGhpcyBoYXBwZW5zIHdpdGggX19kZWZlcnJlZCBpbiBPRGF0YS5cclxuICBpZiAoIUFycmF5LmlzQXJyYXkocmVsYXRlZFJhd0VudGl0aWVzKSkge1xyXG4gICAgLy8gcmV0dXJuIG51bGw7XHJcbiAgICByZWxhdGVkUmF3RW50aXRpZXMgPSByZWxhdGVkUmF3RW50aXRpZXMucmVzdWx0czsgLy8gT0RhdGEgdjMgd2lsbCBsb29rIGxpa2UgdGhpcyB3aXRoIGFuIGV4cGFuZFxyXG4gICAgaWYgKCFyZWxhdGVkUmF3RW50aXRpZXMpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgcmVsYXRlZEVudGl0aWVzID0gbWMudmlzaXRBbmRNZXJnZShyZWxhdGVkUmF3RW50aXRpZXMsIHsgbm9kZVR5cGU6IFwibmF2UHJvcEl0ZW1cIiwgbmF2aWdhdGlvblByb3BlcnR5OiBuYXZpZ2F0aW9uUHJvcGVydHkgfSk7XHJcbiAgcmV0dXJuIHJlbGF0ZWRFbnRpdGllcztcclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlUmVsYXRlZEVudGl0eShyZWxhdGVkRW50aXR5OiBFbnRpdHksIHRhcmdldEVudGl0eTogRW50aXR5LCBuYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSkge1xyXG4gIGlmICghcmVsYXRlZEVudGl0eSkgcmV0dXJuO1xyXG4gIGxldCBwcm9wTmFtZSA9IG5hdmlnYXRpb25Qcm9wZXJ0eS5uYW1lO1xyXG4gIGxldCBjdXJyZW50UmVsYXRlZEVudGl0eSA9IHRhcmdldEVudGl0eS5nZXRQcm9wZXJ0eShwcm9wTmFtZSk7XHJcblxyXG4gIC8vIGNoZWNrIGlmIHRoZSByZWxhdGVkIGVudGl0eSBpcyBhbHJlYWR5IGhvb2tlZCB1cFxyXG4gIGlmIChjdXJyZW50UmVsYXRlZEVudGl0eSAhPT0gcmVsYXRlZEVudGl0eSkge1xyXG4gICAgLy8gaWYgbm90IGhvb2sgdXAgYm90aCBkaXJlY3Rpb25zLlxyXG4gICAgdGFyZ2V0RW50aXR5LnNldFByb3BlcnR5KHByb3BOYW1lLCByZWxhdGVkRW50aXR5KTtcclxuICAgIGxldCBpbnZlcnNlUHJvcGVydHkgPSBuYXZpZ2F0aW9uUHJvcGVydHkuaW52ZXJzZTtcclxuICAgIGlmICghaW52ZXJzZVByb3BlcnR5KSByZXR1cm47XHJcbiAgICBpZiAoaW52ZXJzZVByb3BlcnR5LmlzU2NhbGFyKSB7XHJcbiAgICAgIHJlbGF0ZWRFbnRpdHkuc2V0UHJvcGVydHkoaW52ZXJzZVByb3BlcnR5Lm5hbWUsIHRhcmdldEVudGl0eSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgY29sbGVjdGlvbiA9IHJlbGF0ZWRFbnRpdHkuZ2V0UHJvcGVydHkoaW52ZXJzZVByb3BlcnR5Lm5hbWUpO1xyXG4gICAgICBjb2xsZWN0aW9uLnB1c2godGFyZ2V0RW50aXR5KTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVSZWxhdGVkRW50aXR5SW5Db2xsZWN0aW9uKG1jOiBNYXBwaW5nQ29udGV4dCwgcmVsYXRlZEVudGl0eTogRW50aXR5IHwgdW5kZWZpbmVkLFxyXG4gICAgcmVsYXRlZEVudGl0aWVzOiBFbnRpdHlbXSwgdGFyZ2V0RW50aXR5OiBFbnRpdHksIGludmVyc2VQcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5KSB7XHJcbiAgaWYgKCFyZWxhdGVkRW50aXR5KSByZXR1cm47XHJcblxyXG4gIC8vIGRvbid0IHVwZGF0ZSByZWxhdGVkQ29sbGVjdGlvbiBpZiBwcmVzZXJ2ZUNoYW5nZXMgJiByZWxhdGVkRW50aXR5IGhhcyBhbiBma0NoYW5nZS5cclxuICBpZiAocmVsYXRlZEVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUgPT09IEVudGl0eVN0YXRlLk1vZGlmaWVkXHJcbiAgICAmJiBtYy5tZXJnZU9wdGlvbnMubWVyZ2VTdHJhdGVneSA9PT0gTWVyZ2VTdHJhdGVneS5QcmVzZXJ2ZUNoYW5nZXMpIHtcclxuICAgIGxldCBvcmlnVmFsdWVzID0gcmVsYXRlZEVudGl0eS5lbnRpdHlBc3BlY3Qub3JpZ2luYWxWYWx1ZXM7XHJcbiAgICBsZXQgZmtXYXNNb2RpZmllZCA9IGludmVyc2VQcm9wZXJ0eS5yZWxhdGVkRGF0YVByb3BlcnRpZXMuc29tZShmdW5jdGlvbiAoZHApIHtcclxuICAgICAgcmV0dXJuIG9yaWdWYWx1ZXNbZHAubmFtZV0gIT0gdW5kZWZpbmVkO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoZmtXYXNNb2RpZmllZCkgcmV0dXJuO1xyXG4gIH1cclxuICAvLyBjaGVjayBpZiB0aGUgcmVsYXRlZCBlbnRpdHkgaXMgYWxyZWFkeSBob29rZWQgdXBcclxuICBsZXQgdGhpc0VudGl0eSA9IHJlbGF0ZWRFbnRpdHkuZ2V0UHJvcGVydHkoaW52ZXJzZVByb3BlcnR5Lm5hbWUpO1xyXG5cclxuICBpZiAodGhpc0VudGl0eSAhPT0gdGFyZ2V0RW50aXR5KSB7XHJcbiAgICAvLyBpZiBub3QgLSBob29rIGl0IHVwLlxyXG4gICAgcmVsYXRlZEVudGl0aWVzLnB1c2gocmVsYXRlZEVudGl0eSk7XHJcbiAgICByZWxhdGVkRW50aXR5LnNldFByb3BlcnR5KGludmVyc2VQcm9wZXJ0eS5uYW1lLCB0YXJnZXRFbnRpdHkpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbiJdfQ==
@@ -1,90 +0,0 @@
1
- import { assertConfig } from './assert-param';
2
- import { core } from './core';
3
- import { config } from './config';
4
- /**
5
- A NamingConvention instance is used to specify the naming conventions under which a MetadataStore
6
- will translate property names between the server and the javascript client.
7
-
8
- The default NamingConvention does not perform any translation, it simply passes property names thru unchanged.
9
- @dynamic
10
- **/
11
- var NamingConvention = /** @class */ (function () {
12
- /**
13
- NamingConvention constructor
14
- > // A naming convention that converts the first character of every property name to uppercase on the server
15
- > // and lowercase on the client.
16
- > var namingConv = new NamingConvention({
17
- > serverPropertyNameToClient: function(serverPropertyName) {
18
- > return serverPropertyName.substr(0, 1).toLowerCase() + serverPropertyName.substr(1);
19
- > },
20
- > clientPropertyNameToServer: function(clientPropertyName) {
21
- > return clientPropertyName.substr(0, 1).toUpperCase() + clientPropertyName.substr(1);
22
- > }
23
- > });
24
- > var ms = new MetadataStore({ namingConvention: namingConv });
25
- > var em = new EntityManager( { metadataStore: ms });
26
- **/
27
- function NamingConvention(ncConfig) {
28
- assertConfig(ncConfig || {})
29
- .whereParam("name").isOptional().isString()
30
- .whereParam("serverPropertyNameToClient").isFunction()
31
- .whereParam("clientPropertyNameToServer").isFunction()
32
- .applyAll(this);
33
- if (!this.name) {
34
- this.name = core.getUuid();
35
- }
36
- config._storeObject(this, "NamingConvention", this.name);
37
- }
38
- /**
39
- Sets the 'defaultInstance' by creating a copy of the current 'defaultInstance' and then applying all of the properties of the current instance.
40
- The current instance is returned unchanged.
41
- > var namingConv = new NamingConvention({
42
- > serverPropertyNameToClient: function(serverPropertyName) {
43
- > return serverPropertyName.substr(0, 1).toLowerCase() + serverPropertyName.substr(1);
44
- > },
45
- > clientPropertyNameToServer: function(clientPropertyName) {
46
- > return clientPropertyName.substr(0, 1).toUpperCase() + clientPropertyName.substr(1);
47
- > }
48
- > });
49
- > namingConv.setAsDefault();
50
- **/
51
- NamingConvention.prototype.setAsDefault = function () {
52
- return core.setAsDefault(this, NamingConvention);
53
- };
54
- /**
55
-
56
-
57
- /**
58
- A noop naming convention - This is the default unless another is specified.
59
- **/
60
- NamingConvention.none = new NamingConvention({
61
- name: "noChange",
62
- serverPropertyNameToClient: function (serverPropertyName) {
63
- return serverPropertyName;
64
- },
65
- clientPropertyNameToServer: function (clientPropertyName) {
66
- return clientPropertyName;
67
- }
68
- });
69
- /**
70
- The "camelCase" naming convention - This implementation only lowercases the first character of the server property name
71
- but leaves the rest of the property name intact. If a more complicated version is needed then one should be created via the ctor.
72
- **/
73
- NamingConvention.camelCase = new NamingConvention({
74
- name: "camelCase",
75
- serverPropertyNameToClient: function (serverPropertyName) {
76
- return serverPropertyName.substr(0, 1).toLowerCase() + serverPropertyName.substr(1);
77
- },
78
- clientPropertyNameToServer: function (clientPropertyName) {
79
- return clientPropertyName.substr(0, 1).toUpperCase() + clientPropertyName.substr(1);
80
- }
81
- });
82
- /**
83
- The default value whenever NamingConventions are not specified.
84
- **/
85
- NamingConvention.defaultInstance = new NamingConvention(NamingConvention.none);
86
- return NamingConvention;
87
- }());
88
- export { NamingConvention };
89
- NamingConvention.prototype._$typeName = "NamingConvention";
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtaW5nLWNvbnZlbnRpb24uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL25hbWluZy1jb252ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFjbEM7Ozs7OztHQU1HO0FBQ0g7SUFVRTs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILDBCQUFZLFFBQWdDO1FBQzFDLFlBQVksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO2FBQ3ZCLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUU7YUFDMUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLENBQUMsVUFBVSxFQUFFO2FBQ3JELFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLFVBQVUsRUFBRTthQUNyRCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QjtRQUNELE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBcUNEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILHVDQUFZLEdBQVo7UUFDRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQWxERDs7Ozs7T0FLRztJQUNJLHFCQUFJLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztRQUNqQyxJQUFJLEVBQUUsVUFBVTtRQUNoQiwwQkFBMEIsRUFBRSxVQUFDLGtCQUFrQjtZQUM3QyxPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUM7UUFDRCwwQkFBMEIsRUFBRSxVQUFDLGtCQUFrQjtZQUM3QyxPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUM7S0FDRixDQUFDLENBQUM7SUFFSDs7O09BR0c7SUFDSSwwQkFBUyxHQUFHLElBQUksZ0JBQWdCLENBQUM7UUFDdEMsSUFBSSxFQUFFLFdBQVc7UUFDakIsMEJBQTBCLEVBQUUsVUFBQyxrQkFBa0I7WUFDN0MsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBQ0QsMEJBQTBCLEVBQUUsVUFBQyxrQkFBa0I7WUFDN0MsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSSxnQ0FBZSxHQUFHLElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFtQnZFLHVCQUFDO0NBQUEsQUF6RkQsSUF5RkM7U0F6RlksZ0JBQWdCO0FBMkY3QixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0Q29uZmlnIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5cclxuLy8gVE9ETzogc3Ryb25nbHkgdHlwZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgdG8gbmFtaW5nIGNvbnZlbnRpb24gY29udmVydGVyIGZucy5cclxuXHJcbi8qKiBDb25maWd1cmF0aW9uIGluZm8gdG8gYmUgcGFzc2VkIHRvIHRoZSBbW05hbWluZ0NvbnZlbnRpb25dXSBjb25zdHJ1Y3RvciAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE5hbWluZ0NvbnZlbnRpb25Db25maWcge1xyXG4gIC8qKiBUaGUgbmFtZSBvZiB0aGlzIE5hbWluZ0NvbnZlbnRpb24gKi9cclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIC8qKiBGdW5jdGlvbiB0aGF0IHRha2VzIGEgc2VydmVyIHByb3BlcnR5IG5hbWUgYWRkIGNvbnZlcnRzIGl0IGludG8gYSBjbGllbnQgc2lkZSBwcm9wZXJ0eSBuYW1lLiAgKi9cclxuICBzZXJ2ZXJQcm9wZXJ0eU5hbWVUb0NsaWVudD86IChubTogc3RyaW5nLCBjb250ZXh0PzogYW55KSA9PiBzdHJpbmc7XHJcbiAgLyoqIEZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjbGllbnQgcHJvcGVydHkgbmFtZSBhZGQgY29udmVydHMgaXQgaW50byBhIHNlcnZlciBzaWRlIHByb3BlcnR5IG5hbWUuICovXHJcbiAgY2xpZW50UHJvcGVydHlOYW1lVG9TZXJ2ZXI/OiAobm06IHN0cmluZywgY29udGV4dD86IGFueSkgPT4gc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuQSBOYW1pbmdDb252ZW50aW9uIGluc3RhbmNlIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIHVuZGVyIHdoaWNoIGEgTWV0YWRhdGFTdG9yZVxyXG53aWxsIHRyYW5zbGF0ZSBwcm9wZXJ0eSBuYW1lcyBiZXR3ZWVuIHRoZSBzZXJ2ZXIgYW5kIHRoZSBqYXZhc2NyaXB0IGNsaWVudC5cclxuXHJcblRoZSBkZWZhdWx0IE5hbWluZ0NvbnZlbnRpb24gZG9lcyBub3QgcGVyZm9ybSBhbnkgdHJhbnNsYXRpb24sIGl0IHNpbXBseSBwYXNzZXMgcHJvcGVydHkgbmFtZXMgdGhydSB1bmNoYW5nZWQuXHJcbkBkeW5hbWljXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgTmFtaW5nQ29udmVudGlvbiB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgZGVjbGFyZSBfJHR5cGVOYW1lOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBuYW1lIG9mIHRoaXMgTmFtaW5nQ29udmVudGlvbi4gX19SZWFkIE9ubHlfXyAqL1xyXG4gIGRlY2xhcmUgbmFtZTogc3RyaW5nO1xyXG4gIC8qKiBGdW5jdGlvbiB0aGF0IHRha2VzIGEgc2VydmVyIHByb3BlcnR5IG5hbWUgYWRkIGNvbnZlcnRzIGl0IGludG8gYSBjbGllbnQgc2lkZSBwcm9wZXJ0eSBuYW1lLiAgX19SZWFkIE9ubHlfXyAqL1xyXG4gIHNlcnZlclByb3BlcnR5TmFtZVRvQ2xpZW50OiAobm06IHN0cmluZywgY29udGV4dD86IGFueSkgPT4gc3RyaW5nO1xyXG4gIC8qKiBGdW5jdGlvbiB0aGF0IHRha2VzIGEgY2xpZW50IHByb3BlcnR5IG5hbWUgYWRkIGNvbnZlcnRzIGl0IGludG8gYSBzZXJ2ZXIgc2lkZSBwcm9wZXJ0eSBuYW1lLiBfX1JlYWQgT25seV9fICovXHJcbiAgY2xpZW50UHJvcGVydHlOYW1lVG9TZXJ2ZXI6IChubTogc3RyaW5nLCBjb250ZXh0PzogYW55KSA9PiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gIE5hbWluZ0NvbnZlbnRpb24gY29uc3RydWN0b3JcclxuICA+ICAgICAgLy8gQSBuYW1pbmcgY29udmVudGlvbiB0aGF0IGNvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgZXZlcnkgcHJvcGVydHkgbmFtZSB0byB1cHBlcmNhc2Ugb24gdGhlIHNlcnZlclxyXG4gID4gICAgICAvLyBhbmQgbG93ZXJjYXNlIG9uIHRoZSBjbGllbnQuXHJcbiAgPiAgICAgIHZhciBuYW1pbmdDb252ID0gbmV3IE5hbWluZ0NvbnZlbnRpb24oe1xyXG4gID4gICAgICAgICAgc2VydmVyUHJvcGVydHlOYW1lVG9DbGllbnQ6IGZ1bmN0aW9uKHNlcnZlclByb3BlcnR5TmFtZSkge1xyXG4gID4gICAgICAgICAgICAgIHJldHVybiBzZXJ2ZXJQcm9wZXJ0eU5hbWUuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyBzZXJ2ZXJQcm9wZXJ0eU5hbWUuc3Vic3RyKDEpO1xyXG4gID4gICAgICAgICAgfSxcclxuICA+ICAgICAgICAgIGNsaWVudFByb3BlcnR5TmFtZVRvU2VydmVyOiBmdW5jdGlvbihjbGllbnRQcm9wZXJ0eU5hbWUpIHtcclxuICA+ICAgICAgICAgICAgICByZXR1cm4gY2xpZW50UHJvcGVydHlOYW1lLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgY2xpZW50UHJvcGVydHlOYW1lLnN1YnN0cigxKTtcclxuICA+ICAgICAgICAgIH0gICAgICAgICAgICBcclxuICA+ICAgICAgfSk7XHJcbiAgPiAgICAgIHZhciBtcyA9IG5ldyBNZXRhZGF0YVN0b3JlKHsgbmFtaW5nQ29udmVudGlvbjogbmFtaW5nQ29udiB9KTtcclxuICA+ICAgICAgdmFyIGVtID0gbmV3IEVudGl0eU1hbmFnZXIoIHsgbWV0YWRhdGFTdG9yZTogbXMgfSk7XHJcbiAgKiovXHJcbiAgY29uc3RydWN0b3IobmNDb25maWc6IE5hbWluZ0NvbnZlbnRpb25Db25maWcgKSB7XHJcbiAgICBhc3NlcnRDb25maWcobmNDb25maWcgfHwge30pXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJuYW1lXCIpLmlzT3B0aW9uYWwoKS5pc1N0cmluZygpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJzZXJ2ZXJQcm9wZXJ0eU5hbWVUb0NsaWVudFwiKS5pc0Z1bmN0aW9uKClcclxuICAgICAgICAud2hlcmVQYXJhbShcImNsaWVudFByb3BlcnR5TmFtZVRvU2VydmVyXCIpLmlzRnVuY3Rpb24oKVxyXG4gICAgICAgIC5hcHBseUFsbCh0aGlzKTtcclxuICAgIGlmICghdGhpcy5uYW1lKSB7XHJcbiAgICAgIHRoaXMubmFtZSA9IGNvcmUuZ2V0VXVpZCgpO1xyXG4gICAgfVxyXG4gICAgY29uZmlnLl9zdG9yZU9iamVjdCh0aGlzLCBcIk5hbWluZ0NvbnZlbnRpb25cIiwgdGhpcy5uYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG5cclxuXHJcbiAgLyoqXHJcbiAgQSBub29wIG5hbWluZyBjb252ZW50aW9uIC0gVGhpcyBpcyB0aGUgZGVmYXVsdCB1bmxlc3MgYW5vdGhlciBpcyBzcGVjaWZpZWQuXHJcbiAgKiovXHJcbiAgc3RhdGljIG5vbmUgPSBuZXcgTmFtaW5nQ29udmVudGlvbih7XHJcbiAgICBuYW1lOiBcIm5vQ2hhbmdlXCIsXHJcbiAgICBzZXJ2ZXJQcm9wZXJ0eU5hbWVUb0NsaWVudDogKHNlcnZlclByb3BlcnR5TmFtZSkgPT4ge1xyXG4gICAgICByZXR1cm4gc2VydmVyUHJvcGVydHlOYW1lO1xyXG4gICAgfSxcclxuICAgIGNsaWVudFByb3BlcnR5TmFtZVRvU2VydmVyOiAoY2xpZW50UHJvcGVydHlOYW1lKSA9PiB7XHJcbiAgICAgIHJldHVybiBjbGllbnRQcm9wZXJ0eU5hbWU7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8qKlxyXG4gIFRoZSBcImNhbWVsQ2FzZVwiIG5hbWluZyBjb252ZW50aW9uIC0gVGhpcyBpbXBsZW1lbnRhdGlvbiBvbmx5IGxvd2VyY2FzZXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc2VydmVyIHByb3BlcnR5IG5hbWVcclxuICBidXQgbGVhdmVzIHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eSBuYW1lIGludGFjdC4gIElmIGEgbW9yZSBjb21wbGljYXRlZCB2ZXJzaW9uIGlzIG5lZWRlZCB0aGVuIG9uZSBzaG91bGQgYmUgY3JlYXRlZCB2aWEgdGhlIGN0b3IuXHJcbiAgKiovXHJcbiAgc3RhdGljIGNhbWVsQ2FzZSA9IG5ldyBOYW1pbmdDb252ZW50aW9uKHtcclxuICAgIG5hbWU6IFwiY2FtZWxDYXNlXCIsXHJcbiAgICBzZXJ2ZXJQcm9wZXJ0eU5hbWVUb0NsaWVudDogKHNlcnZlclByb3BlcnR5TmFtZSkgPT4ge1xyXG4gICAgICByZXR1cm4gc2VydmVyUHJvcGVydHlOYW1lLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpICsgc2VydmVyUHJvcGVydHlOYW1lLnN1YnN0cigxKTtcclxuICAgIH0sXHJcbiAgICBjbGllbnRQcm9wZXJ0eU5hbWVUb1NlcnZlcjogKGNsaWVudFByb3BlcnR5TmFtZSkgPT4ge1xyXG4gICAgICByZXR1cm4gY2xpZW50UHJvcGVydHlOYW1lLnN1YnN0cigwLCAxKS50b1VwcGVyQ2FzZSgpICsgY2xpZW50UHJvcGVydHlOYW1lLnN1YnN0cigxKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLyoqXHJcbiAgVGhlIGRlZmF1bHQgdmFsdWUgd2hlbmV2ZXIgTmFtaW5nQ29udmVudGlvbnMgYXJlIG5vdCBzcGVjaWZpZWQuXHJcbiAgKiovXHJcbiAgc3RhdGljIGRlZmF1bHRJbnN0YW5jZSA9IG5ldyBOYW1pbmdDb252ZW50aW9uKE5hbWluZ0NvbnZlbnRpb24ubm9uZSk7XHJcblxyXG4gIC8qKlxyXG4gIFNldHMgdGhlICdkZWZhdWx0SW5zdGFuY2UnIGJ5IGNyZWF0aW5nIGEgY29weSBvZiB0aGUgY3VycmVudCAnZGVmYXVsdEluc3RhbmNlJyBhbmQgdGhlbiBhcHBseWluZyBhbGwgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UuXHJcbiAgVGhlIGN1cnJlbnQgaW5zdGFuY2UgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxyXG4gID4gICAgICB2YXIgbmFtaW5nQ29udiA9IG5ldyBOYW1pbmdDb252ZW50aW9uKHtcclxuICA+ICAgICAgICAgIHNlcnZlclByb3BlcnR5TmFtZVRvQ2xpZW50OiBmdW5jdGlvbihzZXJ2ZXJQcm9wZXJ0eU5hbWUpIHtcclxuICA+ICAgICAgICAgICAgICByZXR1cm4gc2VydmVyUHJvcGVydHlOYW1lLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpICsgc2VydmVyUHJvcGVydHlOYW1lLnN1YnN0cigxKTtcclxuICA+ICAgICAgICAgIH0sXHJcbiAgPiAgICAgICAgICBjbGllbnRQcm9wZXJ0eU5hbWVUb1NlcnZlcjogZnVuY3Rpb24oY2xpZW50UHJvcGVydHlOYW1lKSB7XHJcbiAgPiAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudFByb3BlcnR5TmFtZS5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKSArIGNsaWVudFByb3BlcnR5TmFtZS5zdWJzdHIoMSk7XHJcbiAgPiAgICAgICAgICB9ICAgICAgICAgICAgXHJcbiAgPiAgICAgIH0pO1xyXG4gID4gICAgICBuYW1pbmdDb252LnNldEFzRGVmYXVsdCgpO1xyXG4gICoqL1xyXG4gIHNldEFzRGVmYXVsdCgpIHtcclxuICAgIHJldHVybiBjb3JlLnNldEFzRGVmYXVsdCh0aGlzLCBOYW1pbmdDb252ZW50aW9uKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5OYW1pbmdDb252ZW50aW9uLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJOYW1pbmdDb252ZW50aW9uXCI7XHJcblxyXG5cclxuXHJcblxyXG4iXX0=