breeze-client 2.2.0 → 2.2.1-cjs

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