breeze-client 2.2.0 → 2.2.1-cjs

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/adapter-ajax-angularjs/{index.d.ts → breeze-client-adapter-ajax-angularjs.d.ts} +0 -1
  2. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +1 -0
  3. package/adapter-ajax-angularjs/package.json +13 -0
  4. package/adapter-ajax-fetch/{index.d.ts → breeze-client-adapter-ajax-fetch.d.ts} +0 -1
  5. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +1 -0
  6. package/adapter-ajax-fetch/package.json +13 -0
  7. package/adapter-ajax-httpclient/{index.d.ts → breeze-client-adapter-ajax-httpclient.d.ts} +0 -1
  8. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +1 -0
  9. package/adapter-ajax-httpclient/package.json +13 -0
  10. package/adapter-ajax-jquery/{index.d.ts → breeze-client-adapter-ajax-jquery.d.ts} +0 -1
  11. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +1 -0
  12. package/adapter-ajax-jquery/package.json +13 -0
  13. package/adapter-ajax-post/{index.d.ts → breeze-client-adapter-ajax-post.d.ts} +0 -1
  14. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +1 -0
  15. package/adapter-ajax-post/package.json +13 -0
  16. package/adapter-data-service-odata/{index.d.ts → breeze-client-adapter-data-service-odata.d.ts} +0 -1
  17. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +1 -0
  18. package/adapter-data-service-odata/package.json +13 -0
  19. package/adapter-data-service-webapi/{index.d.ts → breeze-client-adapter-data-service-webapi.d.ts} +0 -1
  20. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +1 -0
  21. package/adapter-data-service-webapi/package.json +13 -0
  22. package/adapter-model-library-backing-store/{index.d.ts → breeze-client-adapter-model-library-backing-store.d.ts} +0 -1
  23. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +1 -0
  24. package/adapter-model-library-backing-store/package.json +13 -0
  25. package/adapter-model-library-ko/{index.d.ts → breeze-client-adapter-model-library-ko.d.ts} +0 -1
  26. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +1 -0
  27. package/adapter-model-library-ko/package.json +13 -0
  28. package/adapter-uri-builder-json/{index.d.ts → breeze-client-adapter-uri-builder-json.d.ts} +0 -1
  29. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +1 -0
  30. package/adapter-uri-builder-json/package.json +13 -0
  31. package/adapter-uri-builder-odata/{index.d.ts → breeze-client-adapter-uri-builder-odata.d.ts} +0 -1
  32. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +1 -0
  33. package/adapter-uri-builder-odata/package.json +13 -0
  34. package/breeze-client.d.ts +8 -0
  35. package/breeze-client.metadata.json +1 -0
  36. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +190 -0
  37. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +1 -0
  38. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +2 -0
  39. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +1 -0
  40. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +190 -0
  41. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +1 -0
  42. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +2 -0
  43. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +1 -0
  44. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +195 -0
  45. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +1 -0
  46. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +2 -0
  47. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +1 -0
  48. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +115 -0
  49. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +1 -0
  50. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +2 -0
  51. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +1 -0
  52. package/bundles/breeze-client-adapter-ajax-post.umd.js +92 -0
  53. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +1 -0
  54. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +2 -0
  55. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +1 -0
  56. package/bundles/breeze-client-adapter-data-service-odata.umd.js +747 -0
  57. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -0
  58. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +16 -0
  59. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -0
  60. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +333 -0
  61. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -0
  62. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +16 -0
  63. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -0
  64. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +280 -0
  65. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +1 -0
  66. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +2 -0
  67. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +1 -0
  68. package/bundles/breeze-client-adapter-model-library-ko.umd.js +252 -0
  69. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +1 -0
  70. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +2 -0
  71. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +1 -0
  72. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +96 -0
  73. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +1 -0
  74. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +2 -0
  75. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +1 -0
  76. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +262 -0
  77. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +1 -0
  78. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +2 -0
  79. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +1 -0
  80. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +258 -0
  81. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +1 -0
  82. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +2 -0
  83. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +1 -0
  84. package/bundles/breeze-client-mixin-save-queuing.umd.js +579 -0
  85. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +1 -0
  86. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +16 -0
  87. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +1 -0
  88. package/bundles/breeze-client.umd.js +14234 -0
  89. package/bundles/breeze-client.umd.js.map +1 -0
  90. package/bundles/breeze-client.umd.min.js +16 -0
  91. package/bundles/breeze-client.umd.min.js.map +1 -0
  92. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +130 -0
  93. package/esm2015/adapter-ajax-angularjs/adapter-core.js +49 -0
  94. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  95. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +130 -0
  96. package/esm2015/adapter-ajax-fetch/adapter-core.js +49 -0
  97. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  98. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +137 -0
  99. package/esm2015/adapter-ajax-httpclient/adapter-core.js +49 -0
  100. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  101. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +103 -0
  102. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  103. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +77 -0
  104. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  105. package/esm2015/adapter-data-service-odata/adapter-core.js +49 -0
  106. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +463 -0
  107. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  108. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +100 -0
  109. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  110. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +268 -0
  111. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  112. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +240 -0
  113. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  114. package/esm2015/adapter-uri-builder-json/adapter-core.js +49 -0
  115. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +36 -0
  116. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  117. package/esm2015/adapter-uri-builder-odata/adapter-core.js +49 -0
  118. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +192 -0
  119. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  120. package/esm2015/breeze-client.js +9 -0
  121. package/esm2015/index.js +2 -0
  122. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  123. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  124. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  125. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +400 -0
  126. package/esm2015/src/abstract-data-service-adapter.js +327 -0
  127. package/esm2015/src/array.js +4 -0
  128. package/esm2015/src/assert-param.js +312 -0
  129. package/esm2015/src/breeze.js +85 -0
  130. package/esm2015/src/complex-array.js +119 -0
  131. package/esm2015/src/config.js +223 -0
  132. package/esm2015/src/core.js +714 -0
  133. package/esm2015/src/csdl-metadata-parser.js +385 -0
  134. package/esm2015/src/data-service.js +203 -0
  135. package/esm2015/src/data-type.js +506 -0
  136. package/esm2015/src/default-property-interceptor.js +460 -0
  137. package/{esm2022/src/entity-action.mjs → esm2015/src/entity-action.js} +25 -25
  138. package/esm2015/src/entity-aspect.js +804 -0
  139. package/esm2015/src/entity-group.js +187 -0
  140. package/esm2015/src/entity-key.js +116 -0
  141. package/esm2015/src/entity-manager.js +2094 -0
  142. package/esm2015/src/entity-metadata.js +2109 -0
  143. package/esm2015/src/entity-query.js +1015 -0
  144. package/esm2015/src/entity-state.js +107 -0
  145. package/esm2015/src/enum.js +141 -0
  146. package/esm2015/src/event.js +256 -0
  147. package/esm2015/src/interface-registry.js +41 -0
  148. package/esm2015/src/key-generator.js +108 -0
  149. package/esm2015/src/local-query-comparison-options.js +65 -0
  150. package/esm2015/src/mapping-context.js +411 -0
  151. package/esm2015/src/naming-convention.js +88 -0
  152. package/esm2015/src/observable-array.js +185 -0
  153. package/esm2015/src/predicate.js +1242 -0
  154. package/esm2015/src/primitive-array.js +87 -0
  155. package/esm2015/src/query-options.js +152 -0
  156. package/esm2015/src/relation-array.js +175 -0
  157. package/esm2015/src/save-options.js +41 -0
  158. package/esm2015/src/unattached-children-map.js +58 -0
  159. package/esm2015/src/validate.js +991 -0
  160. package/esm2015/src/validation-options.js +64 -0
  161. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +132 -0
  162. package/esm5/adapter-ajax-angularjs/adapter-core.js +49 -0
  163. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  164. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +132 -0
  165. package/esm5/adapter-ajax-fetch/adapter-core.js +49 -0
  166. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  167. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +139 -0
  168. package/esm5/adapter-ajax-httpclient/adapter-core.js +49 -0
  169. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  170. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +105 -0
  171. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  172. package/esm5/adapter-ajax-post/adapter-ajax-post.js +81 -0
  173. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  174. package/esm5/adapter-data-service-odata/adapter-core.js +49 -0
  175. package/{esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs → esm5/adapter-data-service-odata/adapter-data-service-odata.js} +147 -138
  176. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  177. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +105 -0
  178. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  179. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +270 -0
  180. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  181. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +242 -0
  182. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  183. package/esm5/adapter-uri-builder-json/adapter-core.js +49 -0
  184. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +38 -0
  185. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  186. package/esm5/adapter-uri-builder-odata/adapter-core.js +49 -0
  187. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +197 -0
  188. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  189. package/esm5/breeze-client.js +9 -0
  190. package/esm5/index.js +2 -0
  191. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  192. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  193. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  194. package/esm5/mixin-save-queuing/mixin-save-queuing.js +412 -0
  195. package/esm5/src/abstract-data-service-adapter.js +333 -0
  196. package/esm5/src/array.js +4 -0
  197. package/esm5/src/assert-param.js +317 -0
  198. package/esm5/src/breeze.js +85 -0
  199. package/esm5/src/complex-array.js +119 -0
  200. package/esm5/src/config.js +228 -0
  201. package/esm5/src/core.js +722 -0
  202. package/esm5/src/csdl-metadata-parser.js +385 -0
  203. package/esm5/src/data-service.js +207 -0
  204. package/esm5/src/data-type.js +513 -0
  205. package/esm5/src/default-property-interceptor.js +460 -0
  206. package/esm5/src/entity-action.js +52 -0
  207. package/esm5/src/entity-aspect.js +810 -0
  208. package/esm5/src/entity-group.js +189 -0
  209. package/esm5/src/entity-key.js +118 -0
  210. package/esm5/src/entity-manager.js +2112 -0
  211. package/esm5/src/entity-metadata.js +2144 -0
  212. package/esm5/src/entity-query.js +1042 -0
  213. package/esm5/src/entity-state.js +114 -0
  214. package/esm5/src/enum.js +144 -0
  215. package/esm5/src/event.js +259 -0
  216. package/esm5/src/interface-registry.js +43 -0
  217. package/esm5/src/key-generator.js +111 -0
  218. package/esm5/src/local-query-comparison-options.js +67 -0
  219. package/esm5/src/mapping-context.js +413 -0
  220. package/esm5/src/naming-convention.js +90 -0
  221. package/esm5/src/observable-array.js +201 -0
  222. package/esm5/src/predicate.js +1307 -0
  223. package/esm5/src/primitive-array.js +87 -0
  224. package/esm5/src/query-options.js +167 -0
  225. package/esm5/src/relation-array.js +175 -0
  226. package/esm5/src/save-options.js +43 -0
  227. package/esm5/src/unattached-children-map.js +60 -0
  228. package/{esm2022/src/validate.mjs → esm5/src/validate.js} +110 -116
  229. package/esm5/src/validation-options.js +66 -0
  230. package/{fesm2022/breeze-client-adapter-ajax-angularjs.mjs → fesm2015/breeze-client-adapter-ajax-angularjs.js} +1 -6
  231. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  232. package/{fesm2022/breeze-client-adapter-ajax-fetch.mjs → fesm2015/breeze-client-adapter-ajax-fetch.js} +4 -9
  233. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +1 -0
  234. package/{fesm2022/breeze-client-adapter-ajax-httpclient.mjs → fesm2015/breeze-client-adapter-ajax-httpclient.js} +4 -6
  235. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  236. package/{fesm2022/breeze-client-adapter-ajax-jquery.mjs → fesm2015/breeze-client-adapter-ajax-jquery.js} +2 -6
  237. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +1 -0
  238. package/{fesm2022/breeze-client-adapter-ajax-post.mjs → fesm2015/breeze-client-adapter-ajax-post.js} +1 -1
  239. package/fesm2015/breeze-client-adapter-ajax-post.js.map +1 -0
  240. package/{fesm2022/breeze-client-adapter-data-service-odata.mjs → fesm2015/breeze-client-adapter-data-service-odata.js} +69 -68
  241. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -0
  242. package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → fesm2015/breeze-client-adapter-data-service-webapi.js} +30 -30
  243. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -0
  244. package/{fesm2022/breeze-client-adapter-model-library-backing-store.mjs → fesm2015/breeze-client-adapter-model-library-backing-store.js} +13 -14
  245. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  246. package/{fesm2022/breeze-client-adapter-model-library-ko.mjs → fesm2015/breeze-client-adapter-model-library-ko.js} +13 -14
  247. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +1 -0
  248. package/{fesm2022/breeze-client-adapter-uri-builder-json.mjs → fesm2015/breeze-client-adapter-uri-builder-json.js} +8 -9
  249. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +1 -0
  250. package/{fesm2022/breeze-client-adapter-uri-builder-odata.mjs → fesm2015/breeze-client-adapter-uri-builder-odata.js} +86 -86
  251. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  252. package/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → fesm2015/breeze-client-mixin-get-entity-graph.js} +1 -1
  253. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +1 -0
  254. package/{fesm2022/breeze-client-mixin-save-queuing.mjs → fesm2015/breeze-client-mixin-save-queuing.js} +2 -23
  255. package/fesm2015/breeze-client-mixin-save-queuing.js.map +1 -0
  256. package/{fesm2022/breeze-client.mjs → fesm2015/breeze-client.js} +1543 -2042
  257. package/fesm2015/breeze-client.js.map +1 -0
  258. package/fesm5/breeze-client-adapter-ajax-angularjs.js +186 -0
  259. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  260. package/fesm5/breeze-client-adapter-ajax-fetch.js +186 -0
  261. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +1 -0
  262. package/fesm5/breeze-client-adapter-ajax-httpclient.js +193 -0
  263. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  264. package/fesm5/breeze-client-adapter-ajax-jquery.js +111 -0
  265. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +1 -0
  266. package/fesm5/breeze-client-adapter-ajax-post.js +86 -0
  267. package/fesm5/breeze-client-adapter-ajax-post.js.map +1 -0
  268. package/fesm5/breeze-client-adapter-data-service-odata.js +523 -0
  269. package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -0
  270. package/fesm5/breeze-client-adapter-data-service-webapi.js +111 -0
  271. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -0
  272. package/fesm5/breeze-client-adapter-model-library-backing-store.js +276 -0
  273. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  274. package/fesm5/breeze-client-adapter-model-library-ko.js +248 -0
  275. package/fesm5/breeze-client-adapter-model-library-ko.js.map +1 -0
  276. package/fesm5/breeze-client-adapter-uri-builder-json.js +92 -0
  277. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +1 -0
  278. package/fesm5/breeze-client-adapter-uri-builder-odata.js +250 -0
  279. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  280. package/fesm5/breeze-client-mixin-get-entity-graph.js +254 -0
  281. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +1 -0
  282. package/fesm5/breeze-client-mixin-save-queuing.js +356 -0
  283. package/fesm5/breeze-client-mixin-save-queuing.js.map +1 -0
  284. package/fesm5/breeze-client.js +13956 -0
  285. package/fesm5/breeze-client.js.map +1 -0
  286. package/mixin-get-entity-graph/{index.d.ts → breeze-client-mixin-get-entity-graph.d.ts} +0 -1
  287. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +1 -0
  288. package/mixin-get-entity-graph/package.json +13 -0
  289. package/mixin-save-queuing/{index.d.ts → breeze-client-mixin-save-queuing.d.ts} +0 -1
  290. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +1 -0
  291. package/mixin-save-queuing/package.json +13 -0
  292. package/package.json +12 -94
  293. package/src/config.d.ts +1 -1
  294. package/src/core.d.ts +1 -1
  295. package/src/entity-aspect.d.ts +1 -1
  296. package/src/entity-metadata.d.ts +6 -8
  297. package/src/entity-query.d.ts +1 -1
  298. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -135
  299. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +0 -49
  300. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
  301. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -135
  302. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +0 -49
  303. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
  304. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -139
  305. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +0 -49
  306. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
  307. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -107
  308. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
  309. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
  310. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
  311. package/esm2022/adapter-data-service-odata/adapter-core.mjs +0 -49
  312. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
  313. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -100
  314. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
  315. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -269
  316. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
  317. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -241
  318. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
  319. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +0 -49
  320. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -37
  321. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
  322. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +0 -49
  323. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -191
  324. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
  325. package/esm2022/breeze-client.mjs +0 -5
  326. package/esm2022/index.mjs +0 -2
  327. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
  328. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
  329. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
  330. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +0 -421
  331. package/esm2022/src/abstract-data-service-adapter.mjs +0 -325
  332. package/esm2022/src/array.mjs +0 -4
  333. package/esm2022/src/assert-param.mjs +0 -330
  334. package/esm2022/src/breeze.mjs +0 -85
  335. package/esm2022/src/complex-array.mjs +0 -117
  336. package/esm2022/src/config.mjs +0 -232
  337. package/esm2022/src/core.mjs +0 -712
  338. package/esm2022/src/csdl-metadata-parser.mjs +0 -385
  339. package/esm2022/src/data-service.mjs +0 -239
  340. package/esm2022/src/data-type.mjs +0 -510
  341. package/esm2022/src/default-property-interceptor.mjs +0 -460
  342. package/esm2022/src/entity-aspect.mjs +0 -897
  343. package/esm2022/src/entity-group.mjs +0 -192
  344. package/esm2022/src/entity-key.mjs +0 -127
  345. package/esm2022/src/entity-manager.mjs +0 -2183
  346. package/esm2022/src/entity-metadata.mjs +0 -2242
  347. package/esm2022/src/entity-query.mjs +0 -1024
  348. package/esm2022/src/entity-state.mjs +0 -107
  349. package/esm2022/src/enum.mjs +0 -143
  350. package/esm2022/src/event.mjs +0 -264
  351. package/esm2022/src/interface-registry.mjs +0 -39
  352. package/esm2022/src/key-generator.mjs +0 -110
  353. package/esm2022/src/local-query-comparison-options.mjs +0 -75
  354. package/esm2022/src/mapping-context.mjs +0 -422
  355. package/esm2022/src/naming-convention.mjs +0 -96
  356. package/esm2022/src/observable-array.mjs +0 -183
  357. package/esm2022/src/predicate.mjs +0 -1259
  358. package/esm2022/src/primitive-array.mjs +0 -85
  359. package/esm2022/src/query-options.mjs +0 -160
  360. package/esm2022/src/relation-array.mjs +0 -173
  361. package/esm2022/src/save-options.mjs +0 -51
  362. package/esm2022/src/unattached-children-map.mjs +0 -56
  363. package/esm2022/src/validation-options.mjs +0 -78
  364. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  365. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  366. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  367. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  368. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +0 -1
  369. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  370. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  371. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  372. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  373. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  374. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  375. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  376. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +0 -1
  377. package/fesm2022/breeze-client.mjs.map +0 -1
@@ -0,0 +1,312 @@
1
+ import { core } from './core';
2
+ /** @hidden @internal */
3
+ export class Param {
4
+ constructor(v, name) {
5
+ /** @hidden @internal */
6
+ this._applyOne = function (instance) {
7
+ if (this.v !== undefined) {
8
+ instance[this.name] = this.v;
9
+ }
10
+ else {
11
+ if (this.defaultValue !== undefined) {
12
+ instance[this.name] = this.defaultValue;
13
+ }
14
+ }
15
+ };
16
+ this.MESSAGE_PREFIX = "The '%1' parameter ";
17
+ this.v = v;
18
+ this.name = name;
19
+ this._contexts = [null];
20
+ }
21
+ isObject() {
22
+ return this.isTypeOf('object');
23
+ }
24
+ isBoolean() {
25
+ return this.isTypeOf('boolean');
26
+ }
27
+ isString() {
28
+ return this.isTypeOf('string');
29
+ }
30
+ isNumber() {
31
+ return this.isTypeOf('number');
32
+ }
33
+ isFunction() {
34
+ return this.isTypeOf('function');
35
+ }
36
+ isNonEmptyString() {
37
+ return addContext(this, {
38
+ fn: isNonEmptyString,
39
+ msg: "must be a nonEmpty string"
40
+ });
41
+ }
42
+ isTypeOf(typeName) {
43
+ return addContext(this, {
44
+ fn: isTypeOf,
45
+ typeName: typeName,
46
+ msg: "must be a '" + typeName + "'"
47
+ });
48
+ }
49
+ isInstanceOf(type, typeName) {
50
+ typeName = typeName || type.prototype._$typeName;
51
+ return addContext(this, {
52
+ fn: isInstanceOf,
53
+ type: type,
54
+ typeName: typeName,
55
+ msg: "must be an instance of '" + typeName + "'"
56
+ });
57
+ }
58
+ hasProperty(propertyName) {
59
+ return addContext(this, {
60
+ fn: hasProperty,
61
+ propertyName: propertyName,
62
+ msg: "must have a '" + propertyName + "' property"
63
+ });
64
+ }
65
+ isEnumOf(enumType) {
66
+ return addContext(this, {
67
+ fn: isEnumOf,
68
+ enumType: enumType,
69
+ msg: "must be an instance of the '" + (enumType.name || 'unknown') + "' enumeration"
70
+ });
71
+ }
72
+ isRequired(allowNull = false) {
73
+ return addContext(this, {
74
+ fn: isRequired,
75
+ allowNull: allowNull,
76
+ msg: "is required"
77
+ });
78
+ }
79
+ isOptional() {
80
+ let context = {
81
+ fn: isOptional,
82
+ prevContext: null,
83
+ msg: isOptionalMessage
84
+ };
85
+ return addContext(this, context);
86
+ }
87
+ isNonEmptyArray() {
88
+ return this.isArray(true);
89
+ }
90
+ isArray(mustNotBeEmpty) {
91
+ let context = {
92
+ fn: isArray,
93
+ mustNotBeEmpty: mustNotBeEmpty,
94
+ prevContext: null,
95
+ msg: isArrayMessage
96
+ };
97
+ return addContext(this, context);
98
+ }
99
+ or() {
100
+ this._contexts.push(null);
101
+ this._context = null;
102
+ return this;
103
+ }
104
+ check(defaultValue) {
105
+ let ok = exec(this);
106
+ if (ok === undefined)
107
+ return;
108
+ if (!ok) {
109
+ throw new Error(this.getMessage());
110
+ }
111
+ if (this.v !== undefined) {
112
+ return this.v;
113
+ }
114
+ else {
115
+ return defaultValue;
116
+ }
117
+ }
118
+ /** @hidden @internal */
119
+ // called from outside this file.
120
+ _addContext(context) {
121
+ return addContext(this, context);
122
+ }
123
+ getMessage() {
124
+ let that = this;
125
+ let message = this._contexts.map(function (context) {
126
+ return getMessage(context, that.v);
127
+ }).join(", or it ");
128
+ return core.formatString(this.MESSAGE_PREFIX, this.name) + " " + message;
129
+ }
130
+ withDefault(defaultValue) {
131
+ this.defaultValue = defaultValue;
132
+ return this;
133
+ }
134
+ whereParam(propName) {
135
+ return this.parent.whereParam(propName);
136
+ }
137
+ applyAll(instance, checkOnly = false) {
138
+ let parentTypeName = instance._$typeName;
139
+ let allowUnknownProperty = (parentTypeName && this.parent.config._$typeName === parentTypeName);
140
+ let clone = core.extend({}, this.parent.config);
141
+ this.parent.params.forEach(function (p) {
142
+ if (!allowUnknownProperty)
143
+ delete clone[p.name];
144
+ try {
145
+ p.check();
146
+ }
147
+ catch (e) {
148
+ throwConfigError(instance, e.message);
149
+ }
150
+ (!checkOnly) && p._applyOne(instance);
151
+ });
152
+ // should be no properties left in the clone
153
+ if (!allowUnknownProperty) {
154
+ for (let key in clone) {
155
+ // allow props with an undefined value
156
+ if (clone[key] !== undefined) {
157
+ throwConfigError(instance, core.formatString("Unknown property: '%1'.", key));
158
+ }
159
+ }
160
+ }
161
+ }
162
+ }
163
+ /** @hidden @internal */
164
+ export let assertParam = function (v, name) {
165
+ return new Param(v, name);
166
+ };
167
+ function isTypeOf(context, v) {
168
+ if (v == null)
169
+ return false;
170
+ if (typeof (v) === context.typeName)
171
+ return true;
172
+ return false;
173
+ }
174
+ function isNonEmptyString(context, v) {
175
+ if (v == null)
176
+ return false;
177
+ return (typeof (v) === 'string') && v.length > 0;
178
+ }
179
+ function isInstanceOf(context, v) {
180
+ if (v == null || context.type == null)
181
+ return false;
182
+ return (v instanceof context.type);
183
+ }
184
+ function isEnumOf(context, v) {
185
+ if (v == null || context.enumType == null)
186
+ return false;
187
+ return context.enumType.contains(v);
188
+ }
189
+ function hasProperty(context, v) {
190
+ if (v == null || context.propertyName == null)
191
+ return false;
192
+ return (v[context.propertyName] !== undefined);
193
+ }
194
+ function isRequired(context, v) {
195
+ if (context.allowNull) {
196
+ return v !== undefined;
197
+ }
198
+ else {
199
+ return v != null;
200
+ }
201
+ }
202
+ function isOptional(context, v) {
203
+ if (v == null)
204
+ return true;
205
+ let prevContext = context.prevContext;
206
+ if (prevContext && prevContext.fn) {
207
+ return prevContext.fn(prevContext, v);
208
+ }
209
+ else {
210
+ return true;
211
+ }
212
+ }
213
+ function isOptionalMessage(context, v) {
214
+ let prevContext = context.prevContext;
215
+ let element = prevContext ? " or it " + getMessage(prevContext, v) : "";
216
+ return "is optional" + element;
217
+ }
218
+ function isArray(context, v) {
219
+ if (!Array.isArray(v)) {
220
+ return false;
221
+ }
222
+ if (context.mustNotBeEmpty) {
223
+ if (v.length === 0)
224
+ return false;
225
+ }
226
+ // allow standalone is array call.
227
+ let prevContext = context.prevContext;
228
+ if (!prevContext)
229
+ return true;
230
+ let pc = prevContext;
231
+ return v.every(function (v1) {
232
+ return pc.fn && pc.fn(pc, v1);
233
+ });
234
+ }
235
+ function isArrayMessage(context, v) {
236
+ let arrayDescr = context.mustNotBeEmpty ? "a nonEmpty array" : "an array";
237
+ let prevContext = context.prevContext;
238
+ let element = prevContext ? " where each element " + getMessage(prevContext, v) : "";
239
+ return " must be " + arrayDescr + element;
240
+ }
241
+ function getMessage(context, v) {
242
+ let msg = context.msg;
243
+ if (typeof (msg) === "function") {
244
+ msg = msg(context, v);
245
+ }
246
+ return msg;
247
+ }
248
+ function addContext(that, context) {
249
+ if (that._context) {
250
+ let curContext = that._context;
251
+ while (curContext.prevContext != null) {
252
+ curContext = curContext.prevContext;
253
+ }
254
+ if (curContext.prevContext === null) {
255
+ curContext.prevContext = context;
256
+ // just update the prevContext but don't change the curContext.
257
+ return that;
258
+ }
259
+ else if (context.prevContext == null) {
260
+ context.prevContext = that._context;
261
+ }
262
+ else {
263
+ throw new Error("Illegal construction - use 'or' to combine checks");
264
+ }
265
+ }
266
+ return setContext(that, context);
267
+ }
268
+ function setContext(that, context) {
269
+ that._contexts[that._contexts.length - 1] = context;
270
+ that._context = context;
271
+ return that;
272
+ }
273
+ function exec(self) {
274
+ // clear off last one if null
275
+ let contexts = self._contexts;
276
+ if (contexts[contexts.length - 1] == null) {
277
+ contexts.pop();
278
+ }
279
+ if (contexts.length === 0) {
280
+ return undefined;
281
+ }
282
+ return contexts.some(function (context) {
283
+ return context.fn ? context.fn(context, self.v) : false;
284
+ });
285
+ }
286
+ function throwConfigError(instance, message) {
287
+ throw new Error(core.formatString("Error configuring an instance of '%1'. %2", (instance && instance._$typeName) || "object", message));
288
+ }
289
+ class ConfigParam {
290
+ constructor(config) {
291
+ if (typeof (config) !== "object") {
292
+ throw new Error("Configuration parameter should be an object, instead it is a: " + typeof (config));
293
+ }
294
+ this.config = config;
295
+ this.params = [];
296
+ }
297
+ whereParam(propName) {
298
+ let param = new Param(this.config[propName], propName);
299
+ param.parent = this;
300
+ this.params.push(param);
301
+ return param;
302
+ }
303
+ }
304
+ /** @hidden @internal */
305
+ export let assertConfig = function (config) {
306
+ return new ConfigParam(config);
307
+ };
308
+ // Param is exposed so that additional 'is' methods can be added to the prototype.
309
+ core.Param = Param;
310
+ core.assertParam = assertParam;
311
+ core.assertConfig = assertConfig;
312
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LXBhcmFtLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9hc3NlcnQtcGFyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRyxNQUFNLFFBQVEsQ0FBQztBQXNCL0Isd0JBQXdCO0FBQ3hCLE1BQU0sT0FBTyxLQUFLO0lBbUJkLFlBQVksQ0FBTSxFQUFFLElBQVk7UUEwS2hDLHdCQUF3QjtRQUN4QixjQUFTLEdBQUcsVUFBdUIsUUFBYTtZQUM1QyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUN0QixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0gsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtvQkFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUMzQzthQUNKO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsbUJBQWMsR0FBRyxxQkFBcUIsQ0FBQztRQXBMbkMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FB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QUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVlemVFbnVtIH0gZnJvbSAnLi9lbnVtJztcclxuaW1wb3J0IHsgY29yZSAgfSBmcm9tICcuL2NvcmUnO1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhcmFtQ29udGV4dCB7XHJcbiAgICB0eXBlTmFtZT86IHN0cmluZztcclxuICAgIHR5cGU/OiBGdW5jdGlvbjtcclxuICAgIHByZXZDb250ZXh0PzogSVBhcmFtQ29udGV4dDtcclxuICAgIG1zZz86IHN0cmluZyB8ICgoY29udGV4dDogSVBhcmFtQ29udGV4dCwgdjogYW55KSA9PiBzdHJpbmcpO1xyXG4gICAgbXVzdE5vdEJlRW1wdHk/OiBib29sZWFuO1xyXG4gICAgZW51bVR5cGU/OiBCcmVlemVFbnVtO1xyXG4gICAgcHJvcGVydHlOYW1lPzogc3RyaW5nO1xyXG4gICAgYWxsb3dOdWxsPzogYm9vbGVhbjtcclxuICAgIGZuPyhjb250ZXh0OiBJUGFyYW1Db250ZXh0LCB2OiBhbnkpOiBib29sZWFuO1xyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQ29uZmlnUGFyYW0ge1xyXG4gICAgY29uZmlnOiBhbnk7XHJcbiAgICBwYXJhbXM6IFBhcmFtW107XHJcbiAgICB3aGVyZVBhcmFtOiAocHJvcE5hbWU6IHN0cmluZykgPT4gUGFyYW07XHJcbn1cclxuXHJcbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgY2xhc3MgUGFyYW0ge1xyXG4gICAgLy8gVGhlICUxIHBhcmFtZXRlclxyXG4gICAgLy8gaXMgcmVxdWlyZWRcclxuICAgIC8vIG11c3QgYmUgYSAlMlxyXG4gICAgLy8gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAlMlxyXG4gICAgLy8gbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiB0aGUgJTIgZW51bWVyYXRpb25cclxuICAgIC8vIG11c3QgaGF2ZSBhICUyIHByb3BlcnR5XHJcbiAgICAvLyBtdXN0IGJlIGFuIGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudFxyXG4gICAgLy8gaXMgb3B0aW9uYWwgb3JcclxuXHJcbiAgICB2OiBhbnk7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0VmFsdWU6IGFueTtcclxuICAgIHBhcmVudDogSUNvbmZpZ1BhcmFtO1xyXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgICBfY29udGV4dDogSVBhcmFtQ29udGV4dDtcclxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gICAgX2NvbnRleHRzOiBJUGFyYW1Db250ZXh0W107XHJcblxyXG4gICAgY29uc3RydWN0b3IodjogYW55LCBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnYgPSB2O1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dHMgPSBbPGFueT5udWxsXTtcclxuICAgIH1cclxuXHJcbiAgICBpc09iamVjdCgpOiBQYXJhbSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUeXBlT2YoJ29iamVjdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQm9vbGVhbigpOiBQYXJhbSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUeXBlT2YoJ2Jvb2xlYW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1N0cmluZygpOiBQYXJhbSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUeXBlT2YoJ3N0cmluZycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTnVtYmVyKCk6IFBhcmFtIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc1R5cGVPZignbnVtYmVyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNGdW5jdGlvbigpOiBQYXJhbSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUeXBlT2YoJ2Z1bmN0aW9uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOb25FbXB0eVN0cmluZygpOiBQYXJhbSB7XHJcbiAgICAgICAgcmV0dXJuIGFkZENvbnRleHQodGhpcywge1xyXG4gICAgICAgICAgICBmbjogaXNOb25FbXB0eVN0cmluZyxcclxuICAgICAgICAgICAgbXNnOiBcIm11c3QgYmUgYSBub25FbXB0eSBzdHJpbmdcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc1R5cGVPZih0eXBlTmFtZTogc3RyaW5nKTogUGFyYW0ge1xyXG4gICAgICAgIHJldHVybiBhZGRDb250ZXh0KHRoaXMsIHtcclxuICAgICAgICAgICAgZm46IGlzVHlwZU9mLFxyXG4gICAgICAgICAgICB0eXBlTmFtZTogdHlwZU5hbWUsXHJcbiAgICAgICAgICAgIG1zZzogXCJtdXN0IGJlIGEgJ1wiICsgdHlwZU5hbWUgKyBcIidcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc0luc3RhbmNlT2YodHlwZTogRnVuY3Rpb24sIHR5cGVOYW1lPzogc3RyaW5nKTogUGFyYW0ge1xyXG4gICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWUgfHwgdHlwZS5wcm90b3R5cGUuXyR0eXBlTmFtZTtcclxuICAgICAgICByZXR1cm4gYWRkQ29udGV4dCh0aGlzLCB7XHJcbiAgICAgICAgICAgIGZuOiBpc0luc3RhbmNlT2YsXHJcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSxcclxuICAgICAgICAgICAgbXNnOiBcIm11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgJ1wiICsgdHlwZU5hbWUgKyBcIidcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBoYXNQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFBhcmFtIHtcclxuICAgICAgICByZXR1cm4gYWRkQ29udGV4dCh0aGlzLCB7XHJcbiAgICAgICAgICAgIGZuOiBoYXNQcm9wZXJ0eSxcclxuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICAgIG1zZzogXCJtdXN0IGhhdmUgYSAnXCIgKyBwcm9wZXJ0eU5hbWUgKyBcIicgcHJvcGVydHlcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc0VudW1PZihlbnVtVHlwZTogYW55KTogUGFyYW0ge1xyXG4gICAgICAgIHJldHVybiBhZGRDb250ZXh0KHRoaXMsIHtcclxuICAgICAgICAgICAgZm46IGlzRW51bU9mLFxyXG4gICAgICAgICAgICBlbnVtVHlwZTogZW51bVR5cGUsXHJcbiAgICAgICAgICAgIG1zZzogXCJtdXN0IGJlIGFuIGluc3RhbmNlIG9mIHRoZSAnXCIgKyAoZW51bVR5cGUubmFtZSB8fCAndW5rbm93bicpICsgXCInIGVudW1lcmF0aW9uXCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc1JlcXVpcmVkKGFsbG93TnVsbDogYm9vbGVhbiA9IGZhbHNlKTogUGFyYW0ge1xyXG4gICAgICAgIHJldHVybiBhZGRDb250ZXh0KHRoaXMsIHtcclxuICAgICAgICAgICAgZm46IGlzUmVxdWlyZWQsXHJcbiAgICAgICAgICAgIGFsbG93TnVsbDogYWxsb3dOdWxsLFxyXG4gICAgICAgICAgICBtc2c6IFwiaXMgcmVxdWlyZWRcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzT3B0aW9uYWwoKTogUGFyYW0ge1xyXG4gICAgICAgIGxldCBjb250ZXh0ID0ge1xyXG4gICAgICAgICAgICBmbjogaXNPcHRpb25hbCxcclxuICAgICAgICAgICAgcHJldkNvbnRleHQ6IDxhbnk+bnVsbCxcclxuICAgICAgICAgICAgbXNnOiBpc09wdGlvbmFsTWVzc2FnZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGFkZENvbnRleHQodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOb25FbXB0eUFycmF5KCk6IFBhcmFtIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0FycmF5KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQXJyYXkobXVzdE5vdEJlRW1wdHk/OiBib29sZWFuKTogUGFyYW0ge1xyXG4gICAgICAgIGxldCBjb250ZXh0ID0ge1xyXG4gICAgICAgICAgICBmbjogaXNBcnJheSxcclxuICAgICAgICAgICAgbXVzdE5vdEJlRW1wdHk6IG11c3ROb3RCZUVtcHR5LFxyXG4gICAgICAgICAgICBwcmV2Q29udGV4dDogPGFueT5udWxsLFxyXG4gICAgICAgICAgICBtc2c6IGlzQXJyYXlNZXNzYWdlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gYWRkQ29udGV4dCh0aGlzLCBjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBvcigpIHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0cy5wdXNoKDxhbnk+bnVsbCk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IDxhbnk+bnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBjaGVjayhkZWZhdWx0VmFsdWU/OiBhbnkpIHtcclxuICAgICAgICBsZXQgb2sgPSBleGVjKHRoaXMpO1xyXG4gICAgICAgIGlmIChvayA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFvaykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5nZXRNZXNzYWdlKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnY7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgICAvLyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoaXMgZmlsZS5cclxuICAgIF9hZGRDb250ZXh0KGNvbnRleHQ6IElQYXJhbUNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gYWRkQ29udGV4dCh0aGlzLCBjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZXNzYWdlKCkge1xyXG4gICAgICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgICAgICBsZXQgbWVzc2FnZSA9IHRoaXMuX2NvbnRleHRzLm1hcChmdW5jdGlvbiAoY29udGV4dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0TWVzc2FnZShjb250ZXh0LCB0aGF0LnYpO1xyXG4gICAgICAgIH0pLmpvaW4oXCIsIG9yIGl0IFwiKTtcclxuICAgICAgICByZXR1cm4gY29yZS5mb3JtYXRTdHJpbmcodGhpcy5NRVNTQUdFX1BSRUZJWCwgdGhpcy5uYW1lKSArIFwiIFwiICsgbWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICB3aXRoRGVmYXVsdChkZWZhdWx0VmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHdoZXJlUGFyYW0ocHJvcE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC53aGVyZVBhcmFtKHByb3BOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUFsbChpbnN0YW5jZTogYW55LCBjaGVja09ubHk6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBwYXJlbnRUeXBlTmFtZSA9IGluc3RhbmNlLl8kdHlwZU5hbWU7XHJcbiAgICAgICAgbGV0IGFsbG93VW5rbm93blByb3BlcnR5ID0gKHBhcmVudFR5cGVOYW1lICYmIHRoaXMucGFyZW50LmNvbmZpZy5fJHR5cGVOYW1lID09PSBwYXJlbnRUeXBlTmFtZSk7XHJcblxyXG4gICAgICAgIGxldCBjbG9uZSA9IGNvcmUuZXh0ZW5kKHt9LCB0aGlzLnBhcmVudC5jb25maWcpO1xyXG4gICAgICAgIHRoaXMucGFyZW50LnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3dVbmtub3duUHJvcGVydHkpIGRlbGV0ZSBjbG9uZVtwLm5hbWVdO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcC5jaGVjaygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvd0NvbmZpZ0Vycm9yKGluc3RhbmNlLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICghY2hlY2tPbmx5KSAmJiBwLl9hcHBseU9uZShpbnN0YW5jZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gc2hvdWxkIGJlIG5vIHByb3BlcnRpZXMgbGVmdCBpbiB0aGUgY2xvbmVcclxuICAgICAgICBpZiAoIWFsbG93VW5rbm93blByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBjbG9uZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxsb3cgcHJvcHMgd2l0aCBhbiB1bmRlZmluZWQgdmFsdWVcclxuICAgICAgICAgICAgICAgIGlmIChjbG9uZVtrZXldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvd0NvbmZpZ0Vycm9yKGluc3RhbmNlLCBjb3JlLmZvcm1hdFN0cmluZyhcIlVua25vd24gcHJvcGVydHk6ICclMScuXCIsIGtleSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gICAgX2FwcGx5T25lID0gZnVuY3Rpb24gKHRoaXM6IFBhcmFtLCBpbnN0YW5jZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMudiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlW3RoaXMubmFtZV0gPSB0aGlzLnY7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlW3RoaXMubmFtZV0gPSB0aGlzLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgTUVTU0FHRV9QUkVGSVggPSBcIlRoZSAnJTEnIHBhcmFtZXRlciBcIjtcclxuXHJcbn1cclxuXHJcbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgbGV0IGFzc2VydFBhcmFtID0gZnVuY3Rpb24gKHY6IGFueSwgbmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbmV3IFBhcmFtKHYsIG5hbWUpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gaXNUeXBlT2YoY29udGV4dDogSVBhcmFtQ29udGV4dCwgdjogYW55KSB7XHJcbiAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mICh2KSA9PT0gY29udGV4dC50eXBlTmFtZSkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTm9uRW1wdHlTdHJpbmcoY29udGV4dDogSVBhcmFtQ29udGV4dCwgdjogYW55KSB7XHJcbiAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gKHR5cGVvZiAodikgPT09ICdzdHJpbmcnKSAmJiB2Lmxlbmd0aCA+IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSW5zdGFuY2VPZihjb250ZXh0OiBJUGFyYW1Db250ZXh0LCB2OiBhbnkpIHtcclxuICAgIGlmICh2ID09IG51bGwgfHwgY29udGV4dC50eXBlID09IG51bGwpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiAodiBpbnN0YW5jZW9mIGNvbnRleHQudHlwZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRW51bU9mKGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkge1xyXG4gICAgaWYgKHYgPT0gbnVsbCB8fCBjb250ZXh0LmVudW1UeXBlID09IG51bGwgKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gKGNvbnRleHQuZW51bVR5cGUgYXMgYW55KS5jb250YWlucyh2KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFzUHJvcGVydHkoY29udGV4dDogSVBhcmFtQ29udGV4dCwgdjogYW55KSB7XHJcbiAgICBpZiAodiA9PSBudWxsIHx8IGNvbnRleHQucHJvcGVydHlOYW1lID09IG51bGwpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiAodltjb250ZXh0LnByb3BlcnR5TmFtZV0gIT09IHVuZGVmaW5lZCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUmVxdWlyZWQoY29udGV4dDogSVBhcmFtQ29udGV4dCwgdjogYW55KSB7XHJcbiAgICBpZiAoY29udGV4dC5hbGxvd051bGwpIHtcclxuICAgICAgICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdiAhPSBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09wdGlvbmFsKGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkge1xyXG4gICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICBsZXQgcHJldkNvbnRleHQgPSBjb250ZXh0LnByZXZDb250ZXh0O1xyXG4gICAgaWYgKHByZXZDb250ZXh0ICYmIHByZXZDb250ZXh0LmZuKSB7XHJcbiAgICAgICAgcmV0dXJuIHByZXZDb250ZXh0LmZuKHByZXZDb250ZXh0LCB2KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzT3B0aW9uYWxNZXNzYWdlKGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkge1xyXG4gICAgbGV0IHByZXZDb250ZXh0ID0gY29udGV4dC5wcmV2Q29udGV4dDtcclxuICAgIGxldCBlbGVtZW50ID0gcHJldkNvbnRleHQgPyBcIiBvciBpdCBcIiArIGdldE1lc3NhZ2UocHJldkNvbnRleHQsIHYpIDogXCJcIjtcclxuICAgIHJldHVybiBcImlzIG9wdGlvbmFsXCIgKyBlbGVtZW50O1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5KGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbnRleHQubXVzdE5vdEJlRW1wdHkpIHtcclxuICAgICAgICBpZiAodi5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIGFsbG93IHN0YW5kYWxvbmUgaXMgYXJyYXkgY2FsbC5cclxuICAgIGxldCBwcmV2Q29udGV4dCA9IGNvbnRleHQucHJldkNvbnRleHQ7XHJcbiAgICBpZiAoIXByZXZDb250ZXh0KSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICBsZXQgcGMgPSA8YW55PnByZXZDb250ZXh0O1xyXG4gICAgcmV0dXJuIHYuZXZlcnkoZnVuY3Rpb24gKHYxOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gcGMuZm4gJiYgcGMuZm4ocGMsIHYxKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5TWVzc2FnZShjb250ZXh0OiBJUGFyYW1Db250ZXh0LCB2OiBhbnkpIHtcclxuICAgIGxldCBhcnJheURlc2NyID0gY29udGV4dC5tdXN0Tm90QmVFbXB0eSA/IFwiYSBub25FbXB0eSBhcnJheVwiIDogXCJhbiBhcnJheVwiO1xyXG4gICAgbGV0IHByZXZDb250ZXh0ID0gY29udGV4dC5wcmV2Q29udGV4dDtcclxuICAgIGxldCBlbGVtZW50ID0gcHJldkNvbnRleHQgPyBcIiB3aGVyZSBlYWNoIGVsZW1lbnQgXCIgKyBnZXRNZXNzYWdlKHByZXZDb250ZXh0LCB2KSA6IFwiXCI7XHJcbiAgICByZXR1cm4gXCIgbXVzdCBiZSBcIiArIGFycmF5RGVzY3IgKyBlbGVtZW50O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNZXNzYWdlKGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkge1xyXG4gICAgbGV0IG1zZyA9IGNvbnRleHQubXNnO1xyXG4gICAgaWYgKHR5cGVvZiAobXNnKSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgbXNnID0gKDxhbnk+bXNnKShjb250ZXh0LCB2KTtcclxuICAgIH1cclxuICAgIHJldHVybiBtc2c7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZENvbnRleHQodGhhdDogUGFyYW0sIGNvbnRleHQ6IElQYXJhbUNvbnRleHQpIHtcclxuICAgIGlmICh0aGF0Ll9jb250ZXh0KSB7XHJcbiAgICAgICAgbGV0IGN1ckNvbnRleHQgPSB0aGF0Ll9jb250ZXh0O1xyXG5cclxuICAgICAgICB3aGlsZSAoY3VyQ29udGV4dC5wcmV2Q29udGV4dCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGN1ckNvbnRleHQgPSBjdXJDb250ZXh0LnByZXZDb250ZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1ckNvbnRleHQucHJldkNvbnRleHQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgY3VyQ29udGV4dC5wcmV2Q29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIC8vIGp1c3QgdXBkYXRlIHRoZSBwcmV2Q29udGV4dCBidXQgZG9uJ3QgY2hhbmdlIHRoZSBjdXJDb250ZXh0LlxyXG4gICAgICAgICAgICByZXR1cm4gdGhhdDtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQucHJldkNvbnRleHQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb250ZXh0LnByZXZDb250ZXh0ID0gdGhhdC5fY29udGV4dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbGxlZ2FsIGNvbnN0cnVjdGlvbiAtIHVzZSAnb3InIHRvIGNvbWJpbmUgY2hlY2tzXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzZXRDb250ZXh0KHRoYXQsIGNvbnRleHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRDb250ZXh0KHRoYXQ6IFBhcmFtLCBjb250ZXh0OiBJUGFyYW1Db250ZXh0KSB7XHJcbiAgICB0aGF0Ll9jb250ZXh0c1t0aGF0Ll9jb250ZXh0cy5sZW5ndGggLSAxXSA9IGNvbnRleHQ7XHJcbiAgICB0aGF0Ll9jb250ZXh0ID0gY29udGV4dDtcclxuICAgIHJldHVybiB0aGF0O1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZXhlYyhzZWxmOiBQYXJhbSkge1xyXG4gICAgLy8gY2xlYXIgb2ZmIGxhc3Qgb25lIGlmIG51bGxcclxuICAgIGxldCBjb250ZXh0cyA9IHNlbGYuX2NvbnRleHRzO1xyXG4gICAgaWYgKGNvbnRleHRzW2NvbnRleHRzLmxlbmd0aCAtIDFdID09IG51bGwpIHtcclxuICAgICAgICBjb250ZXh0cy5wb3AoKTtcclxuICAgIH1cclxuICAgIGlmIChjb250ZXh0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRleHRzLnNvbWUoZnVuY3Rpb24gKGNvbnRleHQ6IElQYXJhbUNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gY29udGV4dC5mbiA/IGNvbnRleHQuZm4oY29udGV4dCwgc2VsZi52KSA6IGZhbHNlO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRocm93Q29uZmlnRXJyb3IoaW5zdGFuY2U6IGFueSwgbWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoY29yZS5mb3JtYXRTdHJpbmcoXCJFcnJvciBjb25maWd1cmluZyBhbiBpbnN0YW5jZSBvZiAnJTEnLiAlMlwiLCAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuXyR0eXBlTmFtZSkgfHwgXCJvYmplY3RcIiwgbWVzc2FnZSkpO1xyXG59XHJcblxyXG5jbGFzcyBDb25maWdQYXJhbSB7XHJcbiAgICBjb25maWc6IGFueTtcclxuICAgIHBhcmFtczogUGFyYW1bXTtcclxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoY29uZmlnKSAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25maWd1cmF0aW9uIHBhcmFtZXRlciBzaG91bGQgYmUgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IGlzIGE6IFwiICsgdHlwZW9mIChjb25maWcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICB3aGVyZVBhcmFtKHByb3BOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgcGFyYW0gPSBuZXcgUGFyYW0odGhpcy5jb25maWdbcHJvcE5hbWVdLCBwcm9wTmFtZSk7XHJcbiAgICAgICAgcGFyYW0ucGFyZW50ID0gdGhpcztcclxuICAgICAgICB0aGlzLnBhcmFtcy5wdXNoKHBhcmFtKTtcclxuICAgICAgICByZXR1cm4gcGFyYW07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgbGV0IGFzc2VydENvbmZpZyA9IGZ1bmN0aW9uIChjb25maWc6IE9iamVjdCkge1xyXG4gICAgcmV0dXJuIG5ldyBDb25maWdQYXJhbShjb25maWcpIGFzIElDb25maWdQYXJhbTtcclxufTtcclxuXHJcblxyXG4vLyBQYXJhbSBpcyBleHBvc2VkIHNvIHRoYXQgYWRkaXRpb25hbCAnaXMnIG1ldGhvZHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBwcm90b3R5cGUuXHJcbihjb3JlIGFzIGFueSkuUGFyYW0gPSBQYXJhbTtcclxuKGNvcmUgYXMgYW55KS5hc3NlcnRQYXJhbSA9IGFzc2VydFBhcmFtO1xyXG4oY29yZSBhcyBhbnkpLmFzc2VydENvbmZpZyA9IGFzc2VydENvbmZpZztcclxuIl19
@@ -0,0 +1,85 @@
1
+ import { AbstractDataServiceAdapter } from './abstract-data-service-adapter';
2
+ import { assertParam, assertConfig, Param } from './assert-param';
3
+ import { BreezeConfig } from './config';
4
+ import { BreezeEnum } from './enum';
5
+ import { BreezeEvent } from './event';
6
+ import { DataService, JsonResultsAdapter } from './data-service';
7
+ import { DataType } from './data-type';
8
+ import { EntityAction } from './entity-action';
9
+ import { EntityAspect, ComplexAspect } from './entity-aspect';
10
+ import { EntityKey } from './entity-key';
11
+ import { EntityManager } from './entity-manager';
12
+ import { EntityQuery, FilterQueryOp, BooleanQueryOp, OrderByClause, ExpandClause, SelectClause } from './entity-query';
13
+ import { EntityState } from './entity-state';
14
+ import { InterfaceRegistry } from './interface-registry';
15
+ import { KeyGenerator } from './key-generator';
16
+ import { LocalQueryComparisonOptions } from './local-query-comparison-options';
17
+ import { MappingContext } from './mapping-context';
18
+ import { MetadataStore, EntityType, ComplexType, DataProperty, NavigationProperty, AutoGeneratedKeyType } from './entity-metadata';
19
+ import { NamingConvention } from './naming-convention';
20
+ import { Predicate, UnaryPredicate, BinaryPredicate, AnyAllPredicate, AndOrPredicate, LitExpr, FnExpr, PropExpr } from './predicate';
21
+ import { QueryOptions, FetchStrategy, MergeStrategy } from './query-options';
22
+ import { SaveOptions } from './save-options';
23
+ import { ValidationError, Validator } from './validate';
24
+ import { ValidationOptions } from './validation-options';
25
+ import { config } from './config';
26
+ import { core } from './core';
27
+ import { makeRelationArray, makePrimitiveArray, makeComplexArray } from './array';
28
+ export { BreezeConfig };
29
+ export { AbstractDataServiceAdapter, AndOrPredicate, AnyAllPredicate, assertConfig, assertParam, AutoGeneratedKeyType, BinaryPredicate, BreezeEnum, BreezeEvent, ComplexAspect, ComplexType, config, core, DataProperty, DataService, DataType, EntityAction, EntityAspect, EntityKey, EntityManager, EntityQuery, EntityState, EntityType, ExpandClause, FetchStrategy, FilterQueryOp, FnExpr, InterfaceRegistry, JsonResultsAdapter, KeyGenerator, LitExpr, LocalQueryComparisonOptions, makeComplexArray, makePrimitiveArray, makeRelationArray, MappingContext, MergeStrategy, MetadataStore, NamingConvention, NavigationProperty, OrderByClause, Predicate, PropExpr, QueryOptions, SaveOptions, SelectClause, UnaryPredicate, ValidationError, ValidationOptions, Validator, };
30
+ // create a breeze variable here
31
+ export const breeze = {
32
+ AbstractDataServiceAdapter: AbstractDataServiceAdapter,
33
+ assertConfig: null,
34
+ assertParam: null,
35
+ AutoGeneratedKeyType: AutoGeneratedKeyType,
36
+ BooleanQueryOp: BooleanQueryOp,
37
+ ComplexAspect: ComplexAspect,
38
+ ComplexType: ComplexType,
39
+ config: config,
40
+ core: core,
41
+ DataProperty: DataProperty,
42
+ DataService: DataService,
43
+ DataType: DataType,
44
+ EntityAction: EntityAction,
45
+ EntityAspect: EntityAspect,
46
+ EntityKey: EntityKey,
47
+ EntityManager: EntityManager,
48
+ EntityQuery: EntityQuery,
49
+ EntityState: EntityState,
50
+ EntityType: EntityType,
51
+ Event: BreezeEvent,
52
+ FetchStrategy: FetchStrategy,
53
+ FilterQueryOp: FilterQueryOp,
54
+ InterfaceRegistry: InterfaceRegistry,
55
+ JsonResultsAdapter: JsonResultsAdapter,
56
+ KeyGenerator: KeyGenerator,
57
+ LocalQueryComparisonOptions: LocalQueryComparisonOptions,
58
+ makeComplexArray: makeComplexArray,
59
+ makePrimitiveArray: makePrimitiveArray,
60
+ makeRelationArray: makeRelationArray,
61
+ MergeStrategy: MergeStrategy,
62
+ MetadataStore: MetadataStore,
63
+ NamingConvention: NamingConvention,
64
+ NavigationProperty: NavigationProperty,
65
+ OrderByClause: OrderByClause,
66
+ Param,
67
+ Predicate: Predicate,
68
+ QueryOptions: QueryOptions,
69
+ SaveOptions: SaveOptions,
70
+ ValidationError: ValidationError,
71
+ ValidationOptions: ValidationOptions,
72
+ Validator: Validator,
73
+ version: "2.1.5"
74
+ };
75
+ /** @hidden @internal */
76
+ let win;
77
+ try {
78
+ win = window ? window : (global ? global.window : undefined);
79
+ }
80
+ catch (e) {
81
+ }
82
+ if (win) {
83
+ win.breeze = breeze;
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9icmVlemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQW1ELE1BQU0sZ0JBQWdCLENBQUM7QUFDckksT0FBTyxFQUFFLFFBQVEsRUFBRyxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQXFFLE1BQU0saUJBQWlCLENBQUM7QUFDakksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFtTixNQUFNLGtCQUFrQixDQUFDO0FBQ2xRLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQWtLLE1BQU0sc0JBQXNCLENBQUM7QUFDek4sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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QyxZQUFZLEVBQUUsWUFBWTtJQUMxQiwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsYUFBYSxFQUFFLGFBQWE7SUFDNUIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxhQUFhLEVBQUUsYUFBYTtJQUM1QixLQUFLO0lBQ0wsU0FBUyxFQUFFLFNBQVM7SUFDcEIsWUFBWSxFQUFFLFlBQVk7SUFDMUIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsZUFBZSxFQUFFLGVBQWU7SUFDaEMsaUJBQWlCLEVBQUUsaUJBQWlCO0lBQ3BDLFNBQVMsRUFBRSxTQUFTO0lBQ3BCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFnQkYsd0JBQXdCO0FBQ3hCLElBQUksR0FBUSxDQUFDO0FBQ2IsSUFBSTtJQUNGLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0NBQzlEO0FBQUMsT0FBTyxDQUFDLEVBQUU7Q0FFWDtBQUNELElBQUksR0FBRyxFQUFFO0lBQ1AsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDckIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXJ9IGZyb20gJy4vYWJzdHJhY3QtZGF0YS1zZXJ2aWNlLWFkYXB0ZXInO1xyXG5pbXBvcnQgeyBhc3NlcnRQYXJhbSwgYXNzZXJ0Q29uZmlnLCBQYXJhbSB9IGZyb20gJy4vYXNzZXJ0LXBhcmFtJztcclxuaW1wb3J0IHsgQnJlZXplQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBCcmVlemVFbnVtfSBmcm9tICcuL2VudW0nO1xyXG5pbXBvcnQgeyBCcmVlemVFdmVudCB9IGZyb20gJy4vZXZlbnQnO1xyXG5pbXBvcnQgeyBDb21wbGV4QXJyYXkgfSBmcm9tICcuL2NvbXBsZXgtYXJyYXknO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZSwgRGF0YVNlcnZpY2VDb25maWcsIEpzb25SZXN1bHRzQWRhcHRlciwgSnNvblJlc3VsdHNBZGFwdGVyQ29uZmlnLCBOb2RlQ29udGV4dCwgTm9kZU1ldGEgfSBmcm9tICcuL2RhdGEtc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFUeXBlICB9IGZyb20gJy4vZGF0YS10eXBlJztcclxuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcclxuaW1wb3J0IHsgRW50aXR5QXNwZWN0LCBDb21wbGV4QXNwZWN0LCBFbnRpdHksIENvbXBsZXhPYmplY3QsIFN0cnVjdHVyYWxPYmplY3QsIFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncyB9IGZyb20gJy4vZW50aXR5LWFzcGVjdCc7XHJcbmltcG9ydCB7IEVudGl0eUtleSB9IGZyb20gJy4vZW50aXR5LWtleSc7XHJcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIEVudGl0eU1hbmFnZXJDb25maWcsIEVudGl0eUVycm9yLCBFbnRpdHlDaGFuZ2VkRXZlbnRBcmdzLCBTYXZlQ29udGV4dCwgU2F2ZUJ1bmRsZSwgSHR0cFJlc3BvbnNlLCBLZXlNYXBwaW5nLCBTZXJ2ZXJFcnJvciwgU2F2ZVJlc3VsdCwgUXVlcnlSZXN1bHQsIFZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkRXZlbnRBcmdzLCBIYXNDaGFuZ2VzQ2hhbmdlZEV2ZW50QXJncyB9IGZyb20gJy4vZW50aXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSwgRmlsdGVyUXVlcnlPcCwgQm9vbGVhblF1ZXJ5T3AsIE9yZGVyQnlDbGF1c2UsIEV4cGFuZENsYXVzZSwgU2VsZWN0Q2xhdXNlIH0gZnJvbSAnLi9lbnRpdHktcXVlcnknO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgSW50ZXJmYWNlUmVnaXN0cnksIEFqYXhBZGFwdGVyLCBBamF4Q29uZmlnLCBEYXRhU2VydmljZUFkYXB0ZXIsIE1vZGVsTGlicmFyeUFkYXB0ZXIsIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciwgVXJpQnVpbGRlckFkYXB0ZXIsIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLCBBamF4UmVxdWVzdEludGVyY2VwdG9yIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBLZXlHZW5lcmF0b3IgfSBmcm9tICcuL2tleS1nZW5lcmF0b3InO1xyXG5pbXBvcnQgeyBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMgfSBmcm9tICcuL2xvY2FsLXF1ZXJ5LWNvbXBhcmlzb24tb3B0aW9ucyc7XHJcbmltcG9ydCB7IE1hcHBpbmdDb250ZXh0IH0gZnJvbSAnLi9tYXBwaW5nLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVN0b3JlLCBFbnRpdHlUeXBlLCBDb21wbGV4VHlwZSwgU3RydWN0dXJhbFR5cGUsIERhdGFQcm9wZXJ0eSwgRW50aXR5UHJvcGVydHksIE5hdmlnYXRpb25Qcm9wZXJ0eSwgQXV0b0dlbmVyYXRlZEtleVR5cGUgICB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgTmFtaW5nQ29udmVudGlvbiB9IGZyb20gJy4vbmFtaW5nLWNvbnZlbnRpb24nO1xyXG5pbXBvcnQgeyBQcmVkaWNhdGUsIFZpc2l0Q29udGV4dCwgVmlzaXRvciwgRXhwcmVzc2lvbkNvbnRleHQsIFVuYXJ5UHJlZGljYXRlLCBCaW5hcnlQcmVkaWNhdGUsIEFueUFsbFByZWRpY2F0ZSwgQW5kT3JQcmVkaWNhdGUsIExpdEV4cHIsIEZuRXhwciwgUHJvcEV4cHIgfSBmcm9tICcuL3ByZWRpY2F0ZSc7XHJcbmltcG9ydCB7IFF1ZXJ5T3B0aW9ucywgIEZldGNoU3RyYXRlZ3ksIE1lcmdlU3RyYXRlZ3kgfSBmcm9tICcuL3F1ZXJ5LW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBTYXZlT3B0aW9ucyB9IGZyb20gJy4vc2F2ZS1vcHRpb25zJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk9wdGlvbnMgfSBmcm9tICcuL3ZhbGlkYXRpb24tb3B0aW9ucyc7XHJcblxyXG5pbXBvcnQgeyBjb25maWcsIEJhc2VBZGFwdGVyIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBjb3JlLCBDYWxsYmFjaywgRXJyb3JDYWxsYmFjayB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IG1ha2VSZWxhdGlvbkFycmF5LCBtYWtlUHJpbWl0aXZlQXJyYXksIG1ha2VDb21wbGV4QXJyYXkgfSBmcm9tICcuL2FycmF5JztcclxuXHJcbmltcG9ydCB7IFJlbGF0aW9uQXJyYXkgfSBmcm9tICcuL3JlbGF0aW9uLWFycmF5JztcclxuaW1wb3J0IHsgQXJyYXlDaGFuZ2VkQXJncyB9IGZyb20gJy4vb2JzZXJ2YWJsZS1hcnJheSc7XHJcbmV4cG9ydCB7IEJyZWV6ZUNvbmZpZywgQ29tcGxleEFycmF5LCBSZWxhdGlvbkFycmF5IH07XHJcblxyXG5leHBvcnQge1xyXG4gIEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIEFqYXhBZGFwdGVyLFxyXG4gIEFqYXhDb25maWcsXHJcbiAgQWpheFJlcXVlc3RJbnRlcmNlcHRvcixcclxuICBBbmRPclByZWRpY2F0ZSxcclxuICBBbnlBbGxQcmVkaWNhdGUsXHJcbiAgQXJyYXlDaGFuZ2VkQXJncyxcclxuICBhc3NlcnRDb25maWcsXHJcbiAgYXNzZXJ0UGFyYW0sXHJcbiAgQXV0b0dlbmVyYXRlZEtleVR5cGUsXHJcbiAgQmFzZUFkYXB0ZXIsXHJcbiAgQmluYXJ5UHJlZGljYXRlLFxyXG4gIEJyZWV6ZUVudW0sXHJcbiAgQnJlZXplRXZlbnQsIFxyXG4gIENhbGxiYWNrLFxyXG4gIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvcixcclxuICBDb21wbGV4QXNwZWN0LFxyXG4gIENvbXBsZXhPYmplY3QsXHJcbiAgQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnLFxyXG4gIGNvcmUsXHJcbiAgRGF0YVByb3BlcnR5LFxyXG4gIERhdGFTZXJ2aWNlLFxyXG4gIERhdGFTZXJ2aWNlQWRhcHRlcixcclxuICBEYXRhU2VydmljZUNvbmZpZyxcclxuICBEYXRhVHlwZSxcclxuICBFbnRpdHksXHJcbiAgRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdCxcclxuICBFbnRpdHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIEVudGl0eUVycm9yLFxyXG4gIEVudGl0eUtleSxcclxuICBFbnRpdHlNYW5hZ2VyLFxyXG4gIEVudGl0eU1hbmFnZXJDb25maWcsXHJcbiAgRW50aXR5UHJvcGVydHksXHJcbiAgRW50aXR5UXVlcnksXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5VHlwZSxcclxuICBFcnJvckNhbGxiYWNrLFxyXG4gIEV4cGFuZENsYXVzZSxcclxuICBFeHByZXNzaW9uQ29udGV4dCxcclxuICBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3AsXHJcbiAgRm5FeHByLFxyXG4gIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIEh0dHBSZXNwb25zZSxcclxuICBJbnRlcmZhY2VSZWdpc3RyeSxcclxuICBJbnRlcmZhY2VSZWdpc3RyeUNvbmZpZyxcclxuICBKc29uUmVzdWx0c0FkYXB0ZXIsXHJcbiAgSnNvblJlc3VsdHNBZGFwdGVyQ29uZmlnLFxyXG4gIEtleUdlbmVyYXRvcixcclxuICBLZXlNYXBwaW5nLFxyXG4gIExpdEV4cHIsXHJcbiAgTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5LFxyXG4gIG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1hcHBpbmdDb250ZXh0LFxyXG4gIE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZSxcclxuICBNb2RlbExpYnJhcnlBZGFwdGVyLFxyXG4gIE5hbWluZ0NvbnZlbnRpb24sXHJcbiAgTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE5vZGVDb250ZXh0LFxyXG4gIE5vZGVNZXRhLFxyXG4gIE9yZGVyQnlDbGF1c2UsXHJcbiAgUHJlZGljYXRlLFxyXG4gIFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncyxcclxuICBQcm9wRXhwcixcclxuICBRdWVyeU9wdGlvbnMsXHJcbiAgUXVlcnlSZXN1bHQsXHJcbiAgU2F2ZUJ1bmRsZSxcclxuICBTYXZlQ29udGV4dCxcclxuICBTYXZlT3B0aW9ucyxcclxuICBTYXZlUmVzdWx0LFxyXG4gIFNlbGVjdENsYXVzZSxcclxuICBTZXJ2ZXJFcnJvcixcclxuICBTdHJ1Y3R1cmFsT2JqZWN0LFxyXG4gIFN0cnVjdHVyYWxUeXBlLFxyXG4gIFVuYXJ5UHJlZGljYXRlLFxyXG4gIFVyaUJ1aWxkZXJBZGFwdGVyLFxyXG4gIFZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFZhbGlkYXRpb25FcnJvcixcclxuICBWYWxpZGF0aW9uT3B0aW9ucyxcclxuICBWYWxpZGF0b3IsXHJcbiAgVmlzaXRDb250ZXh0LFxyXG4gIFZpc2l0b3IsXHJcbn07XHJcblxyXG4vLyBjcmVhdGUgYSBicmVlemUgdmFyaWFibGUgaGVyZVxyXG5leHBvcnQgY29uc3QgYnJlZXplID0ge1xyXG4gIEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyOiBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcixcclxuICBhc3NlcnRDb25maWc6IG51bGwgYXMgYW55LFxyXG4gIGFzc2VydFBhcmFtOiBudWxsIGFzIGFueSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZTogQXV0b0dlbmVyYXRlZEtleVR5cGUsXHJcbiAgQm9vbGVhblF1ZXJ5T3A6IEJvb2xlYW5RdWVyeU9wLFxyXG4gIENvbXBsZXhBc3BlY3Q6IENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleFR5cGU6IENvbXBsZXhUeXBlLFxyXG4gIGNvbmZpZzogY29uZmlnLFxyXG4gIGNvcmU6IGNvcmUsXHJcbiAgRGF0YVByb3BlcnR5OiBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gIERhdGFUeXBlOiBEYXRhVHlwZSxcclxuICBFbnRpdHlBY3Rpb246IEVudGl0eUFjdGlvbixcclxuICBFbnRpdHlBc3BlY3Q6IEVudGl0eUFzcGVjdCxcclxuICBFbnRpdHlLZXk6IEVudGl0eUtleSxcclxuICBFbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyLFxyXG4gIEVudGl0eVF1ZXJ5OiBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZTogRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5VHlwZTogRW50aXR5VHlwZSxcclxuICBFdmVudDogQnJlZXplRXZlbnQsXHJcbiAgRmV0Y2hTdHJhdGVneTogRmV0Y2hTdHJhdGVneSxcclxuICBGaWx0ZXJRdWVyeU9wOiBGaWx0ZXJRdWVyeU9wLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5OiBJbnRlcmZhY2VSZWdpc3RyeSxcclxuICBKc29uUmVzdWx0c0FkYXB0ZXI6IEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBLZXlHZW5lcmF0b3I6IEtleUdlbmVyYXRvcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnM6IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyxcclxuICBtYWtlQ29tcGxleEFycmF5OiBtYWtlQ29tcGxleEFycmF5LFxyXG4gIG1ha2VQcmltaXRpdmVBcnJheTogbWFrZVByaW1pdGl2ZUFycmF5LFxyXG4gIG1ha2VSZWxhdGlvbkFycmF5OiBtYWtlUmVsYXRpb25BcnJheSxcclxuICBNZXJnZVN0cmF0ZWd5OiBNZXJnZVN0cmF0ZWd5LFxyXG4gIE1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUsXHJcbiAgTmFtaW5nQ29udmVudGlvbjogTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHk6IE5hdmlnYXRpb25Qcm9wZXJ0eSxcclxuICBPcmRlckJ5Q2xhdXNlOiBPcmRlckJ5Q2xhdXNlLCAvLyBmb3IgdGVzdGluZyBvbmx5XHJcbiAgUGFyYW0sXHJcbiAgUHJlZGljYXRlOiBQcmVkaWNhdGUsXHJcbiAgUXVlcnlPcHRpb25zOiBRdWVyeU9wdGlvbnMsXHJcbiAgU2F2ZU9wdGlvbnM6IFNhdmVPcHRpb25zLFxyXG4gIFZhbGlkYXRpb25FcnJvcjogVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zOiBWYWxpZGF0aW9uT3B0aW9ucyxcclxuICBWYWxpZGF0b3I6IFZhbGlkYXRvcixcclxuICB2ZXJzaW9uOiBcIjIuMS41XCJcclxufTtcclxuXHJcbi8vIGJyZWV6ZS5hc3NlcnRDb25maWcgPSBhc3NlcnRDb25maWcgYXMgYW55O1xyXG4vLyBicmVlemUuYXNzZXJ0UGFyYW0gPSBhc3NlcnRQYXJhbSBhcyBhbnk7XHJcblxyXG5leHBvcnQgbmFtZXNwYWNlIHByb21pc2VzIHtcclxuICAvKiogbm8tb3AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBicmVlemUtYnJpZGdlMi1hbmd1bGFyICovXHJcbiAgZXhwb3J0IGludGVyZmFjZSBJUHJvbWlzZVNlcnZpY2Uge31cclxufVxyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmRlY2xhcmUgdmFyIGdsb2JhbDogYW55O1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmxldCB3aW46IGFueTtcclxudHJ5IHtcclxuICB3aW4gPSB3aW5kb3cgPyB3aW5kb3cgOiAoZ2xvYmFsID8gZ2xvYmFsLndpbmRvdyA6IHVuZGVmaW5lZCk7XHJcbn0gY2F0Y2ggKGUpIHtcclxuXHJcbn1cclxuaWYgKHdpbikge1xyXG4gIHdpbi5icmVlemUgPSBicmVlemU7XHJcbn1cclxuIl19
@@ -0,0 +1,119 @@
1
+ import { core } from './core';
2
+ import { observableArray } from './observable-array';
3
+ import { BreezeEvent } from './event';
4
+ const ɵ0 = function (adds) {
5
+ return getGoodAdds(this, adds);
6
+ }, ɵ1 = function () {
7
+ observableArray.updateEntityState(this);
8
+ }, ɵ2 = function (adds) {
9
+ processAdds(this, adds);
10
+ }, ɵ3 = function (removes) {
11
+ processRemoves(this, removes);
12
+ }, ɵ4 = function () {
13
+ if (!this._origValues)
14
+ return;
15
+ let that = this;
16
+ this.forEach(function (co) {
17
+ clearAspect(co, that);
18
+ });
19
+ this.length = 0;
20
+ this._origValues.forEach(function (co) {
21
+ that.push(co);
22
+ });
23
+ }, ɵ5 = function () {
24
+ this._origValues = null;
25
+ };
26
+ let complexArrayMixin = {
27
+ // complexArray will have the following props
28
+ // parent
29
+ // propertyPath
30
+ // parentProperty
31
+ // addedItems - only if modified
32
+ // removedItems - only if modified
33
+ // each complexAspect of any entity within a complexArray
34
+ // will have its own _complexState = "A/M";
35
+ /**
36
+ Complex arrays are not actually classes, they are objects that mimic arrays. A complex array is collection of
37
+ complexTypes associated with a data property on a single entity or other complex object. i.e. customer.orders or order.orderDetails.
38
+ This collection looks like an array in that the basic methods on arrays such as 'push', 'pop', 'shift', 'unshift', 'splice'
39
+ are all provided as well as several special purpose methods.
40
+ @class {complexArray}
41
+ **/
42
+ /**
43
+ An [[Event]] that fires whenever the contents of this array changed. This event
44
+ is fired any time a new entity is attached or added to the EntityManager and happens to belong to this collection.
45
+ Adds that occur as a result of query or import operations are batched so that all of the adds or removes to any individual
46
+ collections are collected into a single notification event for each relation array.
47
+ @example
48
+ // assume order is an order entity attached to an EntityManager.
49
+ orders.arrayChanged.subscribe(
50
+ function (arrayChangedArgs) {
51
+ var addedEntities = arrayChangedArgs.added;
52
+ var removedEntities = arrayChanged.removed;
53
+ });
54
+ @event arrayChanged
55
+ @param added {Array of Entity} An array of all of the entities added to this collection.
56
+ @param removed {Array of Entity} An array of all of the removed from this collection.
57
+ @readOnly
58
+ **/
59
+ // virtual impls
60
+ _getGoodAdds: ɵ0,
61
+ _beforeChange: ɵ1,
62
+ _processAdds: ɵ2,
63
+ _processRemoves: ɵ3,
64
+ _rejectChanges: ɵ4,
65
+ _acceptChanges: ɵ5
66
+ };
67
+ // local functions
68
+ function getGoodAdds(complexArray, adds) {
69
+ // remove any that are already added here
70
+ return adds.filter(function (a) {
71
+ // return a.parent !== complexArray.parent; // TODO: check if this is actually a bug in original breezejs ???
72
+ return a.complexAspect == null || a.complexAspect.parent !== complexArray.parent;
73
+ });
74
+ }
75
+ function processAdds(complexArray, adds) {
76
+ adds.forEach(function (a) {
77
+ // if (a.parent != null) { // TODO: check if this is actually a bug in original breezejs ???
78
+ if (a.complexAspect && a.complexAspect.parent != null) {
79
+ throw new Error("The complexObject is already attached. Either clone it or remove it from its current owner");
80
+ }
81
+ setAspect(a, complexArray);
82
+ });
83
+ }
84
+ function processRemoves(complexArray, removes) {
85
+ removes.forEach(function (a) {
86
+ clearAspect(a, complexArray);
87
+ });
88
+ }
89
+ function clearAspect(co, arr) {
90
+ let coAspect = co.complexAspect;
91
+ // if not already attached - exit
92
+ if (coAspect.parent !== arr.parent)
93
+ return null;
94
+ coAspect.parent = undefined;
95
+ coAspect.parentProperty = undefined;
96
+ return coAspect;
97
+ }
98
+ function setAspect(co, arr) {
99
+ let coAspect = co.complexAspect;
100
+ // if already attached - exit
101
+ if (coAspect.parent === arr.parent)
102
+ return null;
103
+ coAspect.parent = arr.parent;
104
+ coAspect.parentProperty = arr.parentProperty;
105
+ return coAspect;
106
+ }
107
+ /** For use by breeze plugin authors only. The class is for use in building a [[IModelLibraryAdapter]] implementation.
108
+ @adapter (see [[IModelLibraryAdapter]])
109
+ @hidden
110
+ */
111
+ export function makeComplexArray(arr, parent, parentProperty) {
112
+ let arrX = arr;
113
+ observableArray.initializeParent(arrX, parent, parentProperty);
114
+ arrX.arrayChanged = new BreezeEvent("arrayChanged", arrX);
115
+ core.extend(arrX, observableArray.mixin);
116
+ return core.extend(arrX, complexArrayMixin);
117
+ }
118
+ export { ɵ0, ɵ1, ɵ2, ɵ3, ɵ4, ɵ5 };
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvY29tcGxleC1hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFHLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztXQWtEdEIsVUFBUyxJQUFXO0lBQ2hDLE9BQU8sV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQyxDQUFDLE9BRWM7SUFDYixlQUFlLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxPQUVhLFVBQVMsSUFBVztJQUNoQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUMsT0FFZ0IsVUFBUyxPQUFjO0lBQ3RDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxPQUVlO0lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQUUsT0FBTztJQUM5QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQWlCO1FBQ3RDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQWlCO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLE9BRWU7SUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUMxQixD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QUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBaUIsQ0FBQztBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSAgfSBmcm9tICcuL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlQXJyYXksIG9ic2VydmFibGVBcnJheSB9IGZyb20gJy4vb2JzZXJ2YWJsZS1hcnJheSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IENvbXBsZXhPYmplY3QsIFN0cnVjdHVyYWxPYmplY3QgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBEYXRhUHJvcGVydHkgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcblxyXG4vLyBUT0RPOiBtaXhpbiBpbXBsIGlzIG5vdCB2ZXJ5IHR5cGVzYWZlXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXhBcnJheSBleHRlbmRzIE9ic2VydmFibGVBcnJheSB7XHJcbiAgW2luZGV4OiBudW1iZXJdOiBDb21wbGV4T2JqZWN0O1xyXG4gIHBhcmVudD86IFN0cnVjdHVyYWxPYmplY3Q7XHJcbiAgcGFyZW50UHJvcGVydHk/OiBEYXRhUHJvcGVydHk7XHJcbn1cclxuXHJcbmxldCBjb21wbGV4QXJyYXlNaXhpbiA9IHtcclxuXHJcbiAgLy8gY29tcGxleEFycmF5IHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BzXHJcbiAgLy8gICAgcGFyZW50XHJcbiAgLy8gICAgcHJvcGVydHlQYXRoXHJcbiAgLy8gICAgcGFyZW50UHJvcGVydHlcclxuICAvLyAgICBhZGRlZEl0ZW1zICAtIG9ubHkgaWYgbW9kaWZpZWRcclxuICAvLyAgICByZW1vdmVkSXRlbXMgIC0gb25seSBpZiBtb2RpZmllZFxyXG4gIC8vICBlYWNoIGNvbXBsZXhBc3BlY3Qgb2YgYW55IGVudGl0eSB3aXRoaW4gYSBjb21wbGV4QXJyYXlcclxuICAvLyAgd2lsbCBoYXZlIGl0cyBvd24gX2NvbXBsZXhTdGF0ZSA9IFwiQS9NXCI7XHJcblxyXG4gIC8qKlxyXG4gICBDb21wbGV4IGFycmF5cyBhcmUgbm90IGFjdHVhbGx5IGNsYXNzZXMsIHRoZXkgYXJlIG9iamVjdHMgdGhhdCBtaW1pYyBhcnJheXMuIEEgY29tcGxleCBhcnJheSBpcyBjb2xsZWN0aW9uIG9mXHJcbiAgIGNvbXBsZXhUeXBlcyBhc3NvY2lhdGVkIHdpdGggYSBkYXRhIHByb3BlcnR5IG9uIGEgc2luZ2xlIGVudGl0eSBvciBvdGhlciBjb21wbGV4IG9iamVjdC4gaS5lLiBjdXN0b21lci5vcmRlcnMgb3Igb3JkZXIub3JkZXJEZXRhaWxzLlxyXG4gICBUaGlzIGNvbGxlY3Rpb24gbG9va3MgbGlrZSBhbiBhcnJheSBpbiB0aGF0IHRoZSBiYXNpYyBtZXRob2RzIG9uIGFycmF5cyBzdWNoIGFzICdwdXNoJywgJ3BvcCcsICdzaGlmdCcsICd1bnNoaWZ0JywgJ3NwbGljZSdcclxuICAgYXJlIGFsbCBwcm92aWRlZCBhcyB3ZWxsIGFzIHNldmVyYWwgc3BlY2lhbCBwdXJwb3NlIG1ldGhvZHMuXHJcbiAgIEBjbGFzcyB7Y29tcGxleEFycmF5fVxyXG4gICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgQW4gW1tFdmVudF1dIHRoYXQgZmlyZXMgd2hlbmV2ZXIgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgY2hhbmdlZC4gIFRoaXMgZXZlbnRcclxuICBpcyBmaXJlZCBhbnkgdGltZSBhIG5ldyBlbnRpdHkgaXMgYXR0YWNoZWQgb3IgYWRkZWQgdG8gdGhlIEVudGl0eU1hbmFnZXIgYW5kIGhhcHBlbnMgdG8gYmVsb25nIHRvIHRoaXMgY29sbGVjdGlvbi5cclxuICBBZGRzIHRoYXQgb2NjdXIgYXMgYSByZXN1bHQgb2YgcXVlcnkgb3IgaW1wb3J0IG9wZXJhdGlvbnMgYXJlIGJhdGNoZWQgc28gdGhhdCBhbGwgb2YgdGhlIGFkZHMgb3IgcmVtb3ZlcyB0byBhbnkgaW5kaXZpZHVhbFxyXG4gIGNvbGxlY3Rpb25zIGFyZSBjb2xsZWN0ZWQgaW50byBhIHNpbmdsZSBub3RpZmljYXRpb24gZXZlbnQgZm9yIGVhY2ggcmVsYXRpb24gYXJyYXkuXHJcbiAgQGV4YW1wbGVcclxuICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICBvcmRlcnMuYXJyYXlDaGFuZ2VkLnN1YnNjcmliZShcclxuICAgICAgZnVuY3Rpb24gKGFycmF5Q2hhbmdlZEFyZ3MpIHtcclxuICAgICAgICAgIHZhciBhZGRlZEVudGl0aWVzID0gYXJyYXlDaGFuZ2VkQXJncy5hZGRlZDtcclxuICAgICAgICAgIHZhciByZW1vdmVkRW50aXRpZXMgPSBhcnJheUNoYW5nZWQucmVtb3ZlZDtcclxuICAgICAgfSk7XHJcbiAgQGV2ZW50IGFycmF5Q2hhbmdlZFxyXG4gIEBwYXJhbSBhZGRlZCB7QXJyYXkgb2YgRW50aXR5fSBBbiBhcnJheSBvZiBhbGwgb2YgdGhlIGVudGl0aWVzIGFkZGVkIHRvIHRoaXMgY29sbGVjdGlvbi5cclxuICBAcGFyYW0gcmVtb3ZlZCB7QXJyYXkgb2YgRW50aXR5fSBBbiBhcnJheSBvZiBhbGwgb2YgdGhlIHJlbW92ZWQgZnJvbSB0aGlzIGNvbGxlY3Rpb24uXHJcbiAgQHJlYWRPbmx5XHJcbiAgKiovXHJcblxyXG4gICAgLy8gdmlydHVhbCBpbXBsc1xyXG4gIF9nZXRHb29kQWRkczogZnVuY3Rpb24oYWRkczogYW55W10pIHtcclxuICAgIHJldHVybiBnZXRHb29kQWRkcyh0aGlzLCBhZGRzKTtcclxuICB9LFxyXG5cclxuICBfYmVmb3JlQ2hhbmdlOiBmdW5jdGlvbigpIHtcclxuICAgIG9ic2VydmFibGVBcnJheS51cGRhdGVFbnRpdHlTdGF0ZSh0aGlzKTtcclxuICB9LFxyXG5cclxuICBfcHJvY2Vzc0FkZHM6IGZ1bmN0aW9uKGFkZHM6IGFueVtdKSB7XHJcbiAgICBwcm9jZXNzQWRkcyh0aGlzLCBhZGRzKTtcclxuICB9LFxyXG5cclxuICBfcHJvY2Vzc1JlbW92ZXM6IGZ1bmN0aW9uKHJlbW92ZXM6IGFueVtdKSB7XHJcbiAgICBwcm9jZXNzUmVtb3Zlcyh0aGlzLCByZW1vdmVzKTtcclxuICB9LFxyXG5cclxuICBfcmVqZWN0Q2hhbmdlczogZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuX29yaWdWYWx1ZXMpIHJldHVybjtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoY286IENvbXBsZXhPYmplY3QpIHtcclxuICAgICAgY2xlYXJBc3BlY3QoY28sIHRoYXQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9vcmlnVmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKGNvOiBDb21wbGV4T2JqZWN0KSB7XHJcbiAgICAgIHRoYXQucHVzaChjbyk7XHJcbiAgICB9KTtcclxuICB9LFxyXG5cclxuICBfYWNjZXB0Q2hhbmdlczogZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9vcmlnVmFsdWVzID0gbnVsbDtcclxuICB9XHJcbn07XHJcblxyXG4vLyBsb2NhbCBmdW5jdGlvbnNcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRHb29kQWRkcyhjb21wbGV4QXJyYXk6IENvbXBsZXhBcnJheSwgYWRkczogQ29tcGxleE9iamVjdFtdKSB7XHJcbiAgLy8gcmVtb3ZlIGFueSB0aGF0IGFyZSBhbHJlYWR5IGFkZGVkIGhlcmVcclxuICByZXR1cm4gYWRkcy5maWx0ZXIoZnVuY3Rpb24gKGEpIHtcclxuICAgIC8vIHJldHVybiBhLnBhcmVudCAhPT0gY29tcGxleEFycmF5LnBhcmVudDsgIC8vIFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgYWN0dWFsbHkgYSBidWcgaW4gb3JpZ2luYWwgYnJlZXplanMgPz8/XHJcbiAgICByZXR1cm4gYS5jb21wbGV4QXNwZWN0ID09IG51bGwgfHwgYS5jb21wbGV4QXNwZWN0LnBhcmVudCAhPT0gY29tcGxleEFycmF5LnBhcmVudDtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc0FkZHMoY29tcGxleEFycmF5OiBDb21wbGV4QXJyYXksIGFkZHM6IENvbXBsZXhPYmplY3RbXSkge1xyXG4gIGFkZHMuZm9yRWFjaChmdW5jdGlvbiAoYSkge1xyXG4gICAgLy8gaWYgKGEucGFyZW50ICE9IG51bGwpIHsgLy8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBhY3R1YWxseSBhIGJ1ZyBpbiBvcmlnaW5hbCBicmVlemVqcyA/Pz9cclxuICAgIGlmIChhLmNvbXBsZXhBc3BlY3QgJiYgYS5jb21wbGV4QXNwZWN0LnBhcmVudCAhPSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wbGV4T2JqZWN0IGlzIGFscmVhZHkgYXR0YWNoZWQuIEVpdGhlciBjbG9uZSBpdCBvciByZW1vdmUgaXQgZnJvbSBpdHMgY3VycmVudCBvd25lclwiKTtcclxuICAgIH1cclxuICAgIHNldEFzcGVjdChhLCBjb21wbGV4QXJyYXkpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzUmVtb3Zlcyhjb21wbGV4QXJyYXk6IENvbXBsZXhBcnJheSwgcmVtb3ZlczogQ29tcGxleE9iamVjdFtdKSB7XHJcbiAgcmVtb3Zlcy5mb3JFYWNoKGZ1bmN0aW9uIChhKSB7XHJcbiAgICBjbGVhckFzcGVjdChhLCBjb21wbGV4QXJyYXkpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGVhckFzcGVjdChjbzogQ29tcGxleE9iamVjdCwgYXJyOiBDb21wbGV4QXJyYXkpIHtcclxuICBsZXQgY29Bc3BlY3QgPSBjby5jb21wbGV4QXNwZWN0O1xyXG4gIC8vIGlmIG5vdCBhbHJlYWR5IGF0dGFjaGVkIC0gZXhpdFxyXG4gIGlmIChjb0FzcGVjdC5wYXJlbnQgIT09IGFyci5wYXJlbnQpIHJldHVybiBudWxsO1xyXG5cclxuICBjb0FzcGVjdC5wYXJlbnQgPSB1bmRlZmluZWQ7XHJcbiAgY29Bc3BlY3QucGFyZW50UHJvcGVydHkgPSB1bmRlZmluZWQ7XHJcbiAgcmV0dXJuIGNvQXNwZWN0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRBc3BlY3QoY286IENvbXBsZXhPYmplY3QsIGFycjogQ29tcGxleEFycmF5KSB7XHJcbiAgbGV0IGNvQXNwZWN0ID0gY28uY29tcGxleEFzcGVjdDtcclxuICAvLyBpZiBhbHJlYWR5IGF0dGFjaGVkIC0gZXhpdFxyXG4gIGlmIChjb0FzcGVjdC5wYXJlbnQgPT09IGFyci5wYXJlbnQpIHJldHVybiBudWxsO1xyXG4gIGNvQXNwZWN0LnBhcmVudCA9IGFyci5wYXJlbnQ7XHJcbiAgY29Bc3BlY3QucGFyZW50UHJvcGVydHkgPSBhcnIucGFyZW50UHJvcGVydHk7XHJcblxyXG4gIHJldHVybiBjb0FzcGVjdDtcclxufVxyXG5cclxuXHJcbi8qKiBGb3IgdXNlIGJ5IGJyZWV6ZSBwbHVnaW4gYXV0aG9ycyBvbmx5LiBUaGUgY2xhc3MgaXMgZm9yIHVzZSBpbiBidWlsZGluZyBhIFtbSU1vZGVsTGlicmFyeUFkYXB0ZXJdXSBpbXBsZW1lbnRhdGlvbi4gXHJcbkBhZGFwdGVyIChzZWUgW1tJTW9kZWxMaWJyYXJ5QWRhcHRlcl1dKSAgICBcclxuQGhpZGRlbiBcclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VDb21wbGV4QXJyYXkoYXJyOiBhbnlbXSwgcGFyZW50OiBTdHJ1Y3R1cmFsT2JqZWN0LCBwYXJlbnRQcm9wZXJ0eTogRGF0YVByb3BlcnR5KSB7XHJcbiAgbGV0IGFyclggPSBhcnIgYXMgYW55O1xyXG4gIG9ic2VydmFibGVBcnJheS5pbml0aWFsaXplUGFyZW50KGFyclgsIHBhcmVudCwgcGFyZW50UHJvcGVydHkpO1xyXG4gIGFyclguYXJyYXlDaGFuZ2VkID0gbmV3IEJyZWV6ZUV2ZW50KFwiYXJyYXlDaGFuZ2VkXCIsIGFyclgpO1xyXG4gIGNvcmUuZXh0ZW5kKGFyclgsIG9ic2VydmFibGVBcnJheS5taXhpbik7XHJcbiAgcmV0dXJuIGNvcmUuZXh0ZW5kKGFyclgsIGNvbXBsZXhBcnJheU1peGluKSBhcyBDb21wbGV4QXJyYXk7XHJcbn1cclxuXHJcbiJdfQ==