breeze-client 2.2.1-cjs → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/adapter-ajax-angularjs/{breeze-client-adapter-ajax-angularjs.d.ts → index.d.ts} +1 -0
  2. package/adapter-ajax-fetch/{breeze-client-adapter-ajax-fetch.d.ts → index.d.ts} +1 -0
  3. package/adapter-ajax-httpclient/{breeze-client-adapter-ajax-httpclient.d.ts → index.d.ts} +1 -0
  4. package/adapter-ajax-jquery/{breeze-client-adapter-ajax-jquery.d.ts → index.d.ts} +1 -0
  5. package/adapter-ajax-post/{breeze-client-adapter-ajax-post.d.ts → index.d.ts} +1 -0
  6. package/adapter-data-service-odata/{breeze-client-adapter-data-service-odata.d.ts → index.d.ts} +1 -0
  7. package/adapter-data-service-webapi/{breeze-client-adapter-data-service-webapi.d.ts → index.d.ts} +1 -0
  8. package/adapter-model-library-backing-store/{breeze-client-adapter-model-library-backing-store.d.ts → index.d.ts} +1 -0
  9. package/adapter-model-library-ko/{breeze-client-adapter-model-library-ko.d.ts → index.d.ts} +1 -0
  10. package/adapter-uri-builder-json/{breeze-client-adapter-uri-builder-json.d.ts → index.d.ts} +1 -0
  11. package/adapter-uri-builder-odata/{breeze-client-adapter-uri-builder-odata.d.ts → index.d.ts} +1 -0
  12. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +135 -0
  13. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +49 -0
  14. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
  15. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +135 -0
  16. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +49 -0
  17. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
  18. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +139 -0
  19. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +49 -0
  20. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
  21. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +107 -0
  22. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
  23. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
  24. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
  25. package/esm2022/adapter-data-service-odata/adapter-core.mjs +49 -0
  26. package/{esm5/adapter-data-service-odata/adapter-data-service-odata.js → esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs} +138 -147
  27. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
  28. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +100 -0
  29. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
  30. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +269 -0
  31. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
  32. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +241 -0
  33. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
  34. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +49 -0
  35. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +37 -0
  36. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
  37. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +49 -0
  38. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +191 -0
  39. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
  40. package/esm2022/breeze-client.mjs +5 -0
  41. package/esm2022/index.mjs +2 -0
  42. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
  43. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
  44. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
  45. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +421 -0
  46. package/esm2022/src/abstract-data-service-adapter.mjs +325 -0
  47. package/esm2022/src/array.mjs +4 -0
  48. package/esm2022/src/assert-param.mjs +330 -0
  49. package/esm2022/src/breeze.mjs +85 -0
  50. package/esm2022/src/complex-array.mjs +117 -0
  51. package/esm2022/src/config.mjs +232 -0
  52. package/esm2022/src/core.mjs +712 -0
  53. package/esm2022/src/csdl-metadata-parser.mjs +385 -0
  54. package/esm2022/src/data-service.mjs +221 -0
  55. package/esm2022/src/data-type.mjs +510 -0
  56. package/esm2022/src/default-property-interceptor.mjs +460 -0
  57. package/{esm2015/src/entity-action.js → esm2022/src/entity-action.mjs} +25 -25
  58. package/esm2022/src/entity-aspect.mjs +897 -0
  59. package/esm2022/src/entity-group.mjs +192 -0
  60. package/esm2022/src/entity-key.mjs +125 -0
  61. package/esm2022/src/entity-manager.mjs +2163 -0
  62. package/esm2022/src/entity-metadata.mjs +2242 -0
  63. package/esm2022/src/entity-query.mjs +1024 -0
  64. package/esm2022/src/entity-state.mjs +107 -0
  65. package/esm2022/src/enum.mjs +143 -0
  66. package/esm2022/src/event.mjs +264 -0
  67. package/esm2022/src/interface-registry.mjs +39 -0
  68. package/esm2022/src/key-generator.mjs +110 -0
  69. package/esm2022/src/local-query-comparison-options.mjs +65 -0
  70. package/esm2022/src/mapping-context.mjs +411 -0
  71. package/esm2022/src/naming-convention.mjs +92 -0
  72. package/esm2022/src/observable-array.mjs +183 -0
  73. package/esm2022/src/predicate.mjs +1259 -0
  74. package/esm2022/src/primitive-array.mjs +85 -0
  75. package/esm2022/src/query-options.mjs +152 -0
  76. package/esm2022/src/relation-array.mjs +173 -0
  77. package/esm2022/src/save-options.mjs +41 -0
  78. package/esm2022/src/unattached-children-map.mjs +56 -0
  79. package/esm2022/src/validate.mjs +995 -0
  80. package/esm2022/src/validation-options.mjs +64 -0
  81. package/{fesm2015/breeze-client-adapter-ajax-angularjs.js → fesm2022/breeze-client-adapter-ajax-angularjs.mjs} +6 -1
  82. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  83. package/{fesm2015/breeze-client-adapter-ajax-fetch.js → fesm2022/breeze-client-adapter-ajax-fetch.mjs} +9 -4
  84. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  85. package/{fesm2015/breeze-client-adapter-ajax-httpclient.js → fesm2022/breeze-client-adapter-ajax-httpclient.mjs} +6 -4
  86. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  87. package/{fesm2015/breeze-client-adapter-ajax-jquery.js → fesm2022/breeze-client-adapter-ajax-jquery.mjs} +6 -2
  88. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  89. package/{fesm2015/breeze-client-adapter-ajax-post.js → fesm2022/breeze-client-adapter-ajax-post.mjs} +1 -1
  90. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +1 -0
  91. package/{fesm2015/breeze-client-adapter-data-service-odata.js → fesm2022/breeze-client-adapter-data-service-odata.mjs} +68 -69
  92. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  93. package/{fesm2015/breeze-client-adapter-data-service-webapi.js → fesm2022/breeze-client-adapter-data-service-webapi.mjs} +30 -30
  94. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  95. package/{fesm2015/breeze-client-adapter-model-library-backing-store.js → fesm2022/breeze-client-adapter-model-library-backing-store.mjs} +14 -13
  96. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  97. package/{fesm2015/breeze-client-adapter-model-library-ko.js → fesm2022/breeze-client-adapter-model-library-ko.mjs} +14 -13
  98. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  99. package/{fesm2015/breeze-client-adapter-uri-builder-json.js → fesm2022/breeze-client-adapter-uri-builder-json.mjs} +9 -8
  100. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  101. package/{fesm2015/breeze-client-adapter-uri-builder-odata.js → fesm2022/breeze-client-adapter-uri-builder-odata.mjs} +86 -86
  102. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  103. package/{fesm2015/breeze-client-mixin-get-entity-graph.js → fesm2022/breeze-client-mixin-get-entity-graph.mjs} +1 -1
  104. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  105. package/{fesm2015/breeze-client-mixin-save-queuing.js → fesm2022/breeze-client-mixin-save-queuing.mjs} +23 -2
  106. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +1 -0
  107. package/{fesm2015/breeze-client.js → fesm2022/breeze-client.mjs} +1933 -1538
  108. package/fesm2022/breeze-client.mjs.map +1 -0
  109. package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
  110. package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
  111. package/package.json +94 -12
  112. package/src/config.d.ts +1 -1
  113. package/src/core.d.ts +1 -1
  114. package/src/entity-aspect.d.ts +1 -1
  115. package/src/entity-metadata.d.ts +8 -6
  116. package/src/entity-query.d.ts +1 -1
  117. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  118. package/adapter-ajax-angularjs/package.json +0 -13
  119. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  120. package/adapter-ajax-fetch/package.json +0 -13
  121. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  122. package/adapter-ajax-httpclient/package.json +0 -13
  123. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  124. package/adapter-ajax-jquery/package.json +0 -13
  125. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  126. package/adapter-ajax-post/package.json +0 -13
  127. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  128. package/adapter-data-service-odata/package.json +0 -13
  129. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  130. package/adapter-data-service-webapi/package.json +0 -13
  131. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  132. package/adapter-model-library-backing-store/package.json +0 -13
  133. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  134. package/adapter-model-library-ko/package.json +0 -13
  135. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  136. package/adapter-uri-builder-json/package.json +0 -13
  137. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  138. package/adapter-uri-builder-odata/package.json +0 -13
  139. package/breeze-client.d.ts +0 -8
  140. package/breeze-client.metadata.json +0 -1
  141. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  142. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  143. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  144. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  145. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  146. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  147. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  148. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  149. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  150. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  151. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  152. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  153. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  154. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  155. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  156. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  157. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  158. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  159. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  160. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  161. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -747
  162. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  163. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  164. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  165. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -333
  166. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  167. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  168. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  169. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  170. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  171. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  172. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  173. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  174. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  175. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  176. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  177. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  178. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  179. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  180. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  181. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  182. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  183. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  184. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  185. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  186. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  187. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  188. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  189. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
  190. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  191. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  192. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  193. package/bundles/breeze-client.umd.js +0 -14234
  194. package/bundles/breeze-client.umd.js.map +0 -1
  195. package/bundles/breeze-client.umd.min.js +0 -16
  196. package/bundles/breeze-client.umd.min.js.map +0 -1
  197. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  198. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  199. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  200. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  201. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  202. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  203. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  204. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  205. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  206. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  207. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  208. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  209. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  210. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  211. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -463
  212. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  213. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -100
  214. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  215. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  216. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  217. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  218. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  219. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  220. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  221. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  222. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  223. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  224. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  225. package/esm2015/breeze-client.js +0 -9
  226. package/esm2015/index.js +0 -2
  227. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  228. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  229. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  230. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  231. package/esm2015/src/abstract-data-service-adapter.js +0 -327
  232. package/esm2015/src/array.js +0 -4
  233. package/esm2015/src/assert-param.js +0 -312
  234. package/esm2015/src/breeze.js +0 -85
  235. package/esm2015/src/complex-array.js +0 -119
  236. package/esm2015/src/config.js +0 -223
  237. package/esm2015/src/core.js +0 -714
  238. package/esm2015/src/csdl-metadata-parser.js +0 -385
  239. package/esm2015/src/data-service.js +0 -203
  240. package/esm2015/src/data-type.js +0 -506
  241. package/esm2015/src/default-property-interceptor.js +0 -460
  242. package/esm2015/src/entity-aspect.js +0 -804
  243. package/esm2015/src/entity-group.js +0 -187
  244. package/esm2015/src/entity-key.js +0 -116
  245. package/esm2015/src/entity-manager.js +0 -2094
  246. package/esm2015/src/entity-metadata.js +0 -2109
  247. package/esm2015/src/entity-query.js +0 -1015
  248. package/esm2015/src/entity-state.js +0 -107
  249. package/esm2015/src/enum.js +0 -141
  250. package/esm2015/src/event.js +0 -256
  251. package/esm2015/src/interface-registry.js +0 -41
  252. package/esm2015/src/key-generator.js +0 -108
  253. package/esm2015/src/local-query-comparison-options.js +0 -65
  254. package/esm2015/src/mapping-context.js +0 -411
  255. package/esm2015/src/naming-convention.js +0 -88
  256. package/esm2015/src/observable-array.js +0 -185
  257. package/esm2015/src/predicate.js +0 -1242
  258. package/esm2015/src/primitive-array.js +0 -87
  259. package/esm2015/src/query-options.js +0 -152
  260. package/esm2015/src/relation-array.js +0 -175
  261. package/esm2015/src/save-options.js +0 -41
  262. package/esm2015/src/unattached-children-map.js +0 -58
  263. package/esm2015/src/validate.js +0 -991
  264. package/esm2015/src/validation-options.js +0 -64
  265. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
  266. package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
  267. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  268. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
  269. package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
  270. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  271. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
  272. package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
  273. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  274. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
  275. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  276. package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
  277. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  278. package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
  279. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  280. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -105
  281. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  282. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
  283. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  284. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
  285. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  286. package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
  287. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
  288. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  289. package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
  290. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
  291. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  292. package/esm5/breeze-client.js +0 -9
  293. package/esm5/index.js +0 -2
  294. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  295. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  296. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  297. package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -412
  298. package/esm5/src/abstract-data-service-adapter.js +0 -333
  299. package/esm5/src/array.js +0 -4
  300. package/esm5/src/assert-param.js +0 -317
  301. package/esm5/src/breeze.js +0 -85
  302. package/esm5/src/complex-array.js +0 -119
  303. package/esm5/src/config.js +0 -228
  304. package/esm5/src/core.js +0 -722
  305. package/esm5/src/csdl-metadata-parser.js +0 -385
  306. package/esm5/src/data-service.js +0 -207
  307. package/esm5/src/data-type.js +0 -513
  308. package/esm5/src/default-property-interceptor.js +0 -460
  309. package/esm5/src/entity-action.js +0 -52
  310. package/esm5/src/entity-aspect.js +0 -810
  311. package/esm5/src/entity-group.js +0 -189
  312. package/esm5/src/entity-key.js +0 -118
  313. package/esm5/src/entity-manager.js +0 -2112
  314. package/esm5/src/entity-metadata.js +0 -2144
  315. package/esm5/src/entity-query.js +0 -1042
  316. package/esm5/src/entity-state.js +0 -114
  317. package/esm5/src/enum.js +0 -144
  318. package/esm5/src/event.js +0 -259
  319. package/esm5/src/interface-registry.js +0 -43
  320. package/esm5/src/key-generator.js +0 -111
  321. package/esm5/src/local-query-comparison-options.js +0 -67
  322. package/esm5/src/mapping-context.js +0 -413
  323. package/esm5/src/naming-convention.js +0 -90
  324. package/esm5/src/observable-array.js +0 -201
  325. package/esm5/src/predicate.js +0 -1307
  326. package/esm5/src/primitive-array.js +0 -87
  327. package/esm5/src/query-options.js +0 -167
  328. package/esm5/src/relation-array.js +0 -175
  329. package/esm5/src/save-options.js +0 -43
  330. package/esm5/src/unattached-children-map.js +0 -60
  331. package/esm5/src/validate.js +0 -996
  332. package/esm5/src/validation-options.js +0 -66
  333. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  334. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  335. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  336. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  337. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  338. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  339. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  340. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  341. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  342. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  343. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  344. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  345. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  346. package/fesm2015/breeze-client.js.map +0 -1
  347. package/fesm5/breeze-client-adapter-ajax-angularjs.js +0 -186
  348. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  349. package/fesm5/breeze-client-adapter-ajax-fetch.js +0 -186
  350. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  351. package/fesm5/breeze-client-adapter-ajax-httpclient.js +0 -193
  352. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  353. package/fesm5/breeze-client-adapter-ajax-jquery.js +0 -111
  354. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  355. package/fesm5/breeze-client-adapter-ajax-post.js +0 -86
  356. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  357. package/fesm5/breeze-client-adapter-data-service-odata.js +0 -523
  358. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  359. package/fesm5/breeze-client-adapter-data-service-webapi.js +0 -111
  360. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  361. package/fesm5/breeze-client-adapter-model-library-backing-store.js +0 -276
  362. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  363. package/fesm5/breeze-client-adapter-model-library-ko.js +0 -248
  364. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  365. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  366. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  367. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  368. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  369. package/fesm5/breeze-client-mixin-get-entity-graph.js +0 -254
  370. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  371. package/fesm5/breeze-client-mixin-save-queuing.js +0 -356
  372. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  373. package/fesm5/breeze-client.js +0 -13956
  374. package/fesm5/breeze-client.js.map +0 -1
  375. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  376. package/mixin-get-entity-graph/package.json +0 -13
  377. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  378. package/mixin-save-queuing/package.json +0 -13
@@ -1,317 +0,0 @@
1
- import { core } from './core';
2
- /** @hidden @internal */
3
- var Param = /** @class */ (function () {
4
- function Param(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
- Param.prototype.isObject = function () {
22
- return this.isTypeOf('object');
23
- };
24
- Param.prototype.isBoolean = function () {
25
- return this.isTypeOf('boolean');
26
- };
27
- Param.prototype.isString = function () {
28
- return this.isTypeOf('string');
29
- };
30
- Param.prototype.isNumber = function () {
31
- return this.isTypeOf('number');
32
- };
33
- Param.prototype.isFunction = function () {
34
- return this.isTypeOf('function');
35
- };
36
- Param.prototype.isNonEmptyString = function () {
37
- return addContext(this, {
38
- fn: isNonEmptyString,
39
- msg: "must be a nonEmpty string"
40
- });
41
- };
42
- Param.prototype.isTypeOf = function (typeName) {
43
- return addContext(this, {
44
- fn: isTypeOf,
45
- typeName: typeName,
46
- msg: "must be a '" + typeName + "'"
47
- });
48
- };
49
- Param.prototype.isInstanceOf = function (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
- Param.prototype.hasProperty = function (propertyName) {
59
- return addContext(this, {
60
- fn: hasProperty,
61
- propertyName: propertyName,
62
- msg: "must have a '" + propertyName + "' property"
63
- });
64
- };
65
- Param.prototype.isEnumOf = function (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
- Param.prototype.isRequired = function (allowNull) {
73
- if (allowNull === void 0) { allowNull = false; }
74
- return addContext(this, {
75
- fn: isRequired,
76
- allowNull: allowNull,
77
- msg: "is required"
78
- });
79
- };
80
- Param.prototype.isOptional = function () {
81
- var context = {
82
- fn: isOptional,
83
- prevContext: null,
84
- msg: isOptionalMessage
85
- };
86
- return addContext(this, context);
87
- };
88
- Param.prototype.isNonEmptyArray = function () {
89
- return this.isArray(true);
90
- };
91
- Param.prototype.isArray = function (mustNotBeEmpty) {
92
- var context = {
93
- fn: isArray,
94
- mustNotBeEmpty: mustNotBeEmpty,
95
- prevContext: null,
96
- msg: isArrayMessage
97
- };
98
- return addContext(this, context);
99
- };
100
- Param.prototype.or = function () {
101
- this._contexts.push(null);
102
- this._context = null;
103
- return this;
104
- };
105
- Param.prototype.check = function (defaultValue) {
106
- var ok = exec(this);
107
- if (ok === undefined)
108
- return;
109
- if (!ok) {
110
- throw new Error(this.getMessage());
111
- }
112
- if (this.v !== undefined) {
113
- return this.v;
114
- }
115
- else {
116
- return defaultValue;
117
- }
118
- };
119
- /** @hidden @internal */
120
- // called from outside this file.
121
- Param.prototype._addContext = function (context) {
122
- return addContext(this, context);
123
- };
124
- Param.prototype.getMessage = function () {
125
- var that = this;
126
- var message = this._contexts.map(function (context) {
127
- return getMessage(context, that.v);
128
- }).join(", or it ");
129
- return core.formatString(this.MESSAGE_PREFIX, this.name) + " " + message;
130
- };
131
- Param.prototype.withDefault = function (defaultValue) {
132
- this.defaultValue = defaultValue;
133
- return this;
134
- };
135
- Param.prototype.whereParam = function (propName) {
136
- return this.parent.whereParam(propName);
137
- };
138
- Param.prototype.applyAll = function (instance, checkOnly) {
139
- if (checkOnly === void 0) { checkOnly = false; }
140
- var parentTypeName = instance._$typeName;
141
- var allowUnknownProperty = (parentTypeName && this.parent.config._$typeName === parentTypeName);
142
- var clone = core.extend({}, this.parent.config);
143
- this.parent.params.forEach(function (p) {
144
- if (!allowUnknownProperty)
145
- delete clone[p.name];
146
- try {
147
- p.check();
148
- }
149
- catch (e) {
150
- throwConfigError(instance, e.message);
151
- }
152
- (!checkOnly) && p._applyOne(instance);
153
- });
154
- // should be no properties left in the clone
155
- if (!allowUnknownProperty) {
156
- for (var key in clone) {
157
- // allow props with an undefined value
158
- if (clone[key] !== undefined) {
159
- throwConfigError(instance, core.formatString("Unknown property: '%1'.", key));
160
- }
161
- }
162
- }
163
- };
164
- return Param;
165
- }());
166
- export { Param };
167
- /** @hidden @internal */
168
- export var assertParam = function (v, name) {
169
- return new Param(v, name);
170
- };
171
- function isTypeOf(context, v) {
172
- if (v == null)
173
- return false;
174
- if (typeof (v) === context.typeName)
175
- return true;
176
- return false;
177
- }
178
- function isNonEmptyString(context, v) {
179
- if (v == null)
180
- return false;
181
- return (typeof (v) === 'string') && v.length > 0;
182
- }
183
- function isInstanceOf(context, v) {
184
- if (v == null || context.type == null)
185
- return false;
186
- return (v instanceof context.type);
187
- }
188
- function isEnumOf(context, v) {
189
- if (v == null || context.enumType == null)
190
- return false;
191
- return context.enumType.contains(v);
192
- }
193
- function hasProperty(context, v) {
194
- if (v == null || context.propertyName == null)
195
- return false;
196
- return (v[context.propertyName] !== undefined);
197
- }
198
- function isRequired(context, v) {
199
- if (context.allowNull) {
200
- return v !== undefined;
201
- }
202
- else {
203
- return v != null;
204
- }
205
- }
206
- function isOptional(context, v) {
207
- if (v == null)
208
- return true;
209
- var prevContext = context.prevContext;
210
- if (prevContext && prevContext.fn) {
211
- return prevContext.fn(prevContext, v);
212
- }
213
- else {
214
- return true;
215
- }
216
- }
217
- function isOptionalMessage(context, v) {
218
- var prevContext = context.prevContext;
219
- var element = prevContext ? " or it " + getMessage(prevContext, v) : "";
220
- return "is optional" + element;
221
- }
222
- function isArray(context, v) {
223
- if (!Array.isArray(v)) {
224
- return false;
225
- }
226
- if (context.mustNotBeEmpty) {
227
- if (v.length === 0)
228
- return false;
229
- }
230
- // allow standalone is array call.
231
- var prevContext = context.prevContext;
232
- if (!prevContext)
233
- return true;
234
- var pc = prevContext;
235
- return v.every(function (v1) {
236
- return pc.fn && pc.fn(pc, v1);
237
- });
238
- }
239
- function isArrayMessage(context, v) {
240
- var arrayDescr = context.mustNotBeEmpty ? "a nonEmpty array" : "an array";
241
- var prevContext = context.prevContext;
242
- var element = prevContext ? " where each element " + getMessage(prevContext, v) : "";
243
- return " must be " + arrayDescr + element;
244
- }
245
- function getMessage(context, v) {
246
- var msg = context.msg;
247
- if (typeof (msg) === "function") {
248
- msg = msg(context, v);
249
- }
250
- return msg;
251
- }
252
- function addContext(that, context) {
253
- if (that._context) {
254
- var curContext = that._context;
255
- while (curContext.prevContext != null) {
256
- curContext = curContext.prevContext;
257
- }
258
- if (curContext.prevContext === null) {
259
- curContext.prevContext = context;
260
- // just update the prevContext but don't change the curContext.
261
- return that;
262
- }
263
- else if (context.prevContext == null) {
264
- context.prevContext = that._context;
265
- }
266
- else {
267
- throw new Error("Illegal construction - use 'or' to combine checks");
268
- }
269
- }
270
- return setContext(that, context);
271
- }
272
- function setContext(that, context) {
273
- that._contexts[that._contexts.length - 1] = context;
274
- that._context = context;
275
- return that;
276
- }
277
- function exec(self) {
278
- // clear off last one if null
279
- var contexts = self._contexts;
280
- if (contexts[contexts.length - 1] == null) {
281
- contexts.pop();
282
- }
283
- if (contexts.length === 0) {
284
- return undefined;
285
- }
286
- return contexts.some(function (context) {
287
- return context.fn ? context.fn(context, self.v) : false;
288
- });
289
- }
290
- function throwConfigError(instance, message) {
291
- throw new Error(core.formatString("Error configuring an instance of '%1'. %2", (instance && instance._$typeName) || "object", message));
292
- }
293
- var ConfigParam = /** @class */ (function () {
294
- function ConfigParam(config) {
295
- if (typeof (config) !== "object") {
296
- throw new Error("Configuration parameter should be an object, instead it is a: " + typeof (config));
297
- }
298
- this.config = config;
299
- this.params = [];
300
- }
301
- ConfigParam.prototype.whereParam = function (propName) {
302
- var param = new Param(this.config[propName], propName);
303
- param.parent = this;
304
- this.params.push(param);
305
- return param;
306
- };
307
- return ConfigParam;
308
- }());
309
- /** @hidden @internal */
310
- export var assertConfig = function (config) {
311
- return new ConfigParam(config);
312
- };
313
- // Param is exposed so that additional 'is' methods can be added to the prototype.
314
- core.Param = Param;
315
- core.assertParam = assertParam;
316
- core.assertConfig = assertConfig;
317
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0LXBhcmFtLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9hc3NlcnQtcGFyYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRyxNQUFNLFFBQVEsQ0FBQztBQXNCL0Isd0JBQXdCO0FBQ3hCO0lBbUJJLGVBQVksQ0FBTSxFQUFFLElBQVk7UUEwS2hDLHdCQUF3QjtRQUN4QixjQUFTLEdBQUcsVUFBdUIsUUFBYTtZQUM1QyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUN0QixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0gsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtvQkFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2lCQUMzQzthQUNKO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsbUJBQWMsR0FBRyxxQkFBcUIsQ0FBQztRQXBMbkMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELHdCQUFRLEdBQVI7UUFDSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELHlCQUFTLEdBQVQ7UUFDSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELHdCQUFRLEdBQVI7UUFDSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELHdCQUFRLEdBQVI7UUFDSSxPQUFP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QU0sQ0FBQyxJQUFJLFlBQVksR0FBRyxVQUFVLE1BQWM7SUFDOUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQWlCLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBR0Ysa0ZBQWtGO0FBQ2pGLElBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCLElBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ3ZDLElBQVksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlZXplRW51bSB9IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IGNvcmUgIH0gZnJvbSAnLi9jb3JlJztcclxuXHJcbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElQYXJhbUNvbnRleHQge1xyXG4gICAgdHlwZU5hbWU/OiBzdHJpbmc7XHJcbiAgICB0eXBlPzogRnVuY3Rpb247XHJcbiAgICBwcmV2Q29udGV4dD86IElQYXJhbUNvbnRleHQ7XHJcbiAgICBtc2c/OiBzdHJpbmcgfCAoKGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkgPT4gc3RyaW5nKTtcclxuICAgIG11c3ROb3RCZUVtcHR5PzogYm9vbGVhbjtcclxuICAgIGVudW1UeXBlPzogQnJlZXplRW51bTtcclxuICAgIHByb3BlcnR5TmFtZT86IHN0cmluZztcclxuICAgIGFsbG93TnVsbD86IGJvb2xlYW47XHJcbiAgICBmbj8oY29udGV4dDogSVBhcmFtQ29udGV4dCwgdjogYW55KTogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmZpZ1BhcmFtIHtcclxuICAgIGNvbmZpZzogYW55O1xyXG4gICAgcGFyYW1zOiBQYXJhbVtdO1xyXG4gICAgd2hlcmVQYXJhbTogKHByb3BOYW1lOiBzdHJpbmcpID0+IFBhcmFtO1xyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGNsYXNzIFBhcmFtIHtcclxuICAgIC8vIFRoZSAlMSBwYXJhbWV0ZXJcclxuICAgIC8vIGlzIHJlcXVpcmVkXHJcbiAgICAvLyBtdXN0IGJlIGEgJTJcclxuICAgIC8vIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgJTJcclxuICAgIC8vIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgdGhlICUyIGVudW1lcmF0aW9uXHJcbiAgICAvLyBtdXN0IGhhdmUgYSAlMiBwcm9wZXJ0eVxyXG4gICAgLy8gbXVzdCBiZSBhbiBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnRcclxuICAgIC8vIGlzIG9wdGlvbmFsIG9yXHJcblxyXG4gICAgdjogYW55O1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgZGVmYXVsdFZhbHVlOiBhbnk7XHJcbiAgICBwYXJlbnQ6IElDb25maWdQYXJhbTtcclxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gICAgX2NvbnRleHQ6IElQYXJhbUNvbnRleHQ7XHJcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICAgIF9jb250ZXh0czogSVBhcmFtQ29udGV4dFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHY6IGFueSwgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52ID0gdjtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHRzID0gWzxhbnk+bnVsbF07XHJcbiAgICB9XHJcblxyXG4gICAgaXNPYmplY3QoKTogUGFyYW0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHlwZU9mKCdvYmplY3QnKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0Jvb2xlYW4oKTogUGFyYW0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHlwZU9mKCdib29sZWFuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTdHJpbmcoKTogUGFyYW0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHlwZU9mKCdzdHJpbmcnKTtcclxuICAgIH1cclxuXHJcbiAgICBpc051bWJlcigpOiBQYXJhbSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUeXBlT2YoJ251bWJlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRnVuY3Rpb24oKTogUGFyYW0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVHlwZU9mKCdmdW5jdGlvbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTm9uRW1wdHlTdHJpbmcoKTogUGFyYW0ge1xyXG4gICAgICAgIHJldHVybiBhZGRDb250ZXh0KHRoaXMsIHtcclxuICAgICAgICAgICAgZm46IGlzTm9uRW1wdHlTdHJpbmcsXHJcbiAgICAgICAgICAgIG1zZzogXCJtdXN0IGJlIGEgbm9uRW1wdHkgc3RyaW5nXCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaXNUeXBlT2YodHlwZU5hbWU6IHN0cmluZyk6IFBhcmFtIHtcclxuICAgICAgICByZXR1cm4gYWRkQ29udGV4dCh0aGlzLCB7XHJcbiAgICAgICAgICAgIGZuOiBpc1R5cGVPZixcclxuICAgICAgICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lLFxyXG4gICAgICAgICAgICBtc2c6IFwibXVzdCBiZSBhICdcIiArIHR5cGVOYW1lICsgXCInXCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaXNJbnN0YW5jZU9mKHR5cGU6IEZ1bmN0aW9uLCB0eXBlTmFtZT86IHN0cmluZyk6IFBhcmFtIHtcclxuICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lIHx8IHR5cGUucHJvdG90eXBlLl8kdHlwZU5hbWU7XHJcbiAgICAgICAgcmV0dXJuIGFkZENvbnRleHQodGhpcywge1xyXG4gICAgICAgICAgICBmbjogaXNJbnN0YW5jZU9mLFxyXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICB0eXBlTmFtZTogdHlwZU5hbWUsXHJcbiAgICAgICAgICAgIG1zZzogXCJtdXN0IGJlIGFuIGluc3RhbmNlIG9mICdcIiArIHR5cGVOYW1lICsgXCInXCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaGFzUHJvcGVydHkocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBQYXJhbSB7XHJcbiAgICAgICAgcmV0dXJuIGFkZENvbnRleHQodGhpcywge1xyXG4gICAgICAgICAgICBmbjogaGFzUHJvcGVydHksXHJcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICBtc2c6IFwibXVzdCBoYXZlIGEgJ1wiICsgcHJvcGVydHlOYW1lICsgXCInIHByb3BlcnR5XCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaXNFbnVtT2YoZW51bVR5cGU6IGFueSk6IFBhcmFtIHtcclxuICAgICAgICByZXR1cm4gYWRkQ29udGV4dCh0aGlzLCB7XHJcbiAgICAgICAgICAgIGZuOiBpc0VudW1PZixcclxuICAgICAgICAgICAgZW51bVR5cGU6IGVudW1UeXBlLFxyXG4gICAgICAgICAgICBtc2c6IFwibXVzdCBiZSBhbiBpbnN0YW5jZSBvZiB0aGUgJ1wiICsgKGVudW1UeXBlLm5hbWUgfHwgJ3Vua25vd24nKSArIFwiJyBlbnVtZXJhdGlvblwiXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNSZXF1aXJlZChhbGxvd051bGw6IGJvb2xlYW4gPSBmYWxzZSk6IFBhcmFtIHtcclxuICAgICAgICByZXR1cm4gYWRkQ29udGV4dCh0aGlzLCB7XHJcbiAgICAgICAgICAgIGZuOiBpc1JlcXVpcmVkLFxyXG4gICAgICAgICAgICBhbGxvd051bGw6IGFsbG93TnVsbCxcclxuICAgICAgICAgICAgbXNnOiBcImlzIHJlcXVpcmVkXCJcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc09wdGlvbmFsKCk6IFBhcmFtIHtcclxuICAgICAgICBsZXQgY29udGV4dCA9IHtcclxuICAgICAgICAgICAgZm46IGlzT3B0aW9uYWwsXHJcbiAgICAgICAgICAgIHByZXZDb250ZXh0OiA8YW55Pm51bGwsXHJcbiAgICAgICAgICAgIG1zZzogaXNPcHRpb25hbE1lc3NhZ2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBhZGRDb250ZXh0KHRoaXMsIGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTm9uRW1wdHlBcnJheSgpOiBQYXJhbSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBcnJheSh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0FycmF5KG11c3ROb3RCZUVtcHR5PzogYm9vbGVhbik6IFBhcmFtIHtcclxuICAgICAgICBsZXQgY29udGV4dCA9IHtcclxuICAgICAgICAgICAgZm46IGlzQXJyYXksXHJcbiAgICAgICAgICAgIG11c3ROb3RCZUVtcHR5OiBtdXN0Tm90QmVFbXB0eSxcclxuICAgICAgICAgICAgcHJldkNvbnRleHQ6IDxhbnk+bnVsbCxcclxuICAgICAgICAgICAgbXNnOiBpc0FycmF5TWVzc2FnZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGFkZENvbnRleHQodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3IoKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dHMucHVzaCg8YW55Pm51bGwpO1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSA8YW55Pm51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2soZGVmYXVsdFZhbHVlPzogYW55KSB7XHJcbiAgICAgICAgbGV0IG9rID0gZXhlYyh0aGlzKTtcclxuICAgICAgICBpZiAob2sgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghb2spIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuZ2V0TWVzc2FnZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnYgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gICAgLy8gY2FsbGVkIGZyb20gb3V0c2lkZSB0aGlzIGZpbGUuXHJcbiAgICBfYWRkQ29udGV4dChjb250ZXh0OiBJUGFyYW1Db250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGFkZENvbnRleHQodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVzc2FnZSgpIHtcclxuICAgICAgICBsZXQgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0aGlzLl9jb250ZXh0cy5tYXAoZnVuY3Rpb24gKGNvbnRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE1lc3NhZ2UoY29udGV4dCwgdGhhdC52KTtcclxuICAgICAgICB9KS5qb2luKFwiLCBvciBpdCBcIik7XHJcbiAgICAgICAgcmV0dXJuIGNvcmUuZm9ybWF0U3RyaW5nKHRoaXMuTUVTU0FHRV9QUkVGSVgsIHRoaXMubmFtZSkgKyBcIiBcIiArIG1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgd2l0aERlZmF1bHQoZGVmYXVsdFZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB3aGVyZVBhcmFtKHByb3BOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQud2hlcmVQYXJhbShwcm9wTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlBbGwoaW5zdGFuY2U6IGFueSwgY2hlY2tPbmx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcGFyZW50VHlwZU5hbWUgPSBpbnN0YW5jZS5fJHR5cGVOYW1lO1xyXG4gICAgICAgIGxldCBhbGxvd1Vua25vd25Qcm9wZXJ0eSA9IChwYXJlbnRUeXBlTmFtZSAmJiB0aGlzLnBhcmVudC5jb25maWcuXyR0eXBlTmFtZSA9PT0gcGFyZW50VHlwZU5hbWUpO1xyXG5cclxuICAgICAgICBsZXQgY2xvbmUgPSBjb3JlLmV4dGVuZCh7fSwgdGhpcy5wYXJlbnQuY29uZmlnKTtcclxuICAgICAgICB0aGlzLnBhcmVudC5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAocCkge1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93VW5rbm93blByb3BlcnR5KSBkZWxldGUgY2xvbmVbcC5uYW1lXTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHAuY2hlY2soKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3dDb25maWdFcnJvcihpbnN0YW5jZSwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAoIWNoZWNrT25seSkgJiYgcC5fYXBwbHlPbmUoaW5zdGFuY2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHNob3VsZCBiZSBubyBwcm9wZXJ0aWVzIGxlZnQgaW4gdGhlIGNsb25lXHJcbiAgICAgICAgaWYgKCFhbGxvd1Vua25vd25Qcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gY2xvbmUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFsbG93IHByb3BzIHdpdGggYW4gdW5kZWZpbmVkIHZhbHVlXHJcbiAgICAgICAgICAgICAgICBpZiAoY2xvbmVba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dDb25maWdFcnJvcihpbnN0YW5jZSwgY29yZS5mb3JtYXRTdHJpbmcoXCJVbmtub3duIHByb3BlcnR5OiAnJTEnLlwiLCBrZXkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICAgIF9hcHBseU9uZSA9IGZ1bmN0aW9uICh0aGlzOiBQYXJhbSwgaW5zdGFuY2U6IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnYgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZVt0aGlzLm5hbWVdID0gdGhpcy52O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVt0aGlzLm5hbWVdID0gdGhpcy5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIE1FU1NBR0VfUFJFRklYID0gXCJUaGUgJyUxJyBwYXJhbWV0ZXIgXCI7XHJcblxyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGxldCBhc3NlcnRQYXJhbSA9IGZ1bmN0aW9uICh2OiBhbnksIG5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIG5ldyBQYXJhbSh2LCBuYW1lKTtcclxufTtcclxuXHJcbmZ1bmN0aW9uIGlzVHlwZU9mKGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkge1xyXG4gICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHR5cGVvZiAodikgPT09IGNvbnRleHQudHlwZU5hbWUpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc05vbkVtcHR5U3RyaW5nKGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkge1xyXG4gICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuICh0eXBlb2YgKHYpID09PSAnc3RyaW5nJykgJiYgdi5sZW5ndGggPiAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0luc3RhbmNlT2YoY29udGV4dDogSVBhcmFtQ29udGV4dCwgdjogYW55KSB7XHJcbiAgICBpZiAodiA9PSBudWxsIHx8IGNvbnRleHQudHlwZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gKHYgaW5zdGFuY2VvZiBjb250ZXh0LnR5cGUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VudW1PZihjb250ZXh0OiBJUGFyYW1Db250ZXh0LCB2OiBhbnkpIHtcclxuICAgIGlmICh2ID09IG51bGwgfHwgY29udGV4dC5lbnVtVHlwZSA9PSBudWxsICkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIChjb250ZXh0LmVudW1UeXBlIGFzIGFueSkuY29udGFpbnModik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc1Byb3BlcnR5KGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkge1xyXG4gICAgaWYgKHYgPT0gbnVsbCB8fCBjb250ZXh0LnByb3BlcnR5TmFtZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gKHZbY29udGV4dC5wcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1JlcXVpcmVkKGNvbnRleHQ6IElQYXJhbUNvbnRleHQsIHY6IGFueSkge1xyXG4gICAgaWYgKGNvbnRleHQuYWxsb3dOdWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHYgIT0gbnVsbDtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaXNPcHRpb25hbChjb250ZXh0OiBJUGFyYW1Db250ZXh0LCB2OiBhbnkpIHtcclxuICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgbGV0IHByZXZDb250ZXh0ID0gY29udGV4dC5wcmV2Q29udGV4dDtcclxuICAgIGlmIChwcmV2Q29udGV4dCAmJiBwcmV2Q29udGV4dC5mbikge1xyXG4gICAgICAgIHJldHVybiBwcmV2Q29udGV4dC5mbihwcmV2Q29udGV4dCwgdik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc09wdGlvbmFsTWVzc2FnZShjb250ZXh0OiBJUGFyYW1Db250ZXh0LCB2OiBhbnkpIHtcclxuICAgIGxldCBwcmV2Q29udGV4dCA9IGNvbnRleHQucHJldkNvbnRleHQ7XHJcbiAgICBsZXQgZWxlbWVudCA9IHByZXZDb250ZXh0ID8gXCIgb3IgaXQgXCIgKyBnZXRNZXNzYWdlKHByZXZDb250ZXh0LCB2KSA6IFwiXCI7XHJcbiAgICByZXR1cm4gXCJpcyBvcHRpb25hbFwiICsgZWxlbWVudDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBcnJheShjb250ZXh0OiBJUGFyYW1Db250ZXh0LCB2OiBhbnkpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChjb250ZXh0Lm11c3ROb3RCZUVtcHR5KSB7XHJcbiAgICAgICAgaWYgKHYubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBhbGxvdyBzdGFuZGFsb25lIGlzIGFycmF5IGNhbGwuXHJcbiAgICBsZXQgcHJldkNvbnRleHQgPSBjb250ZXh0LnByZXZDb250ZXh0O1xyXG4gICAgaWYgKCFwcmV2Q29udGV4dCkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgbGV0IHBjID0gPGFueT5wcmV2Q29udGV4dDtcclxuICAgIHJldHVybiB2LmV2ZXJ5KGZ1bmN0aW9uICh2MTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHBjLmZuICYmIHBjLmZuKHBjLCB2MSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNBcnJheU1lc3NhZ2UoY29udGV4dDogSVBhcmFtQ29udGV4dCwgdjogYW55KSB7XHJcbiAgICBsZXQgYXJyYXlEZXNjciA9IGNvbnRleHQubXVzdE5vdEJlRW1wdHkgPyBcImEgbm9uRW1wdHkgYXJyYXlcIiA6IFwiYW4gYXJyYXlcIjtcclxuICAgIGxldCBwcmV2Q29udGV4dCA9IGNvbnRleHQucHJldkNvbnRleHQ7XHJcbiAgICBsZXQgZWxlbWVudCA9IHByZXZDb250ZXh0ID8gXCIgd2hlcmUgZWFjaCBlbGVtZW50IFwiICsgZ2V0TWVzc2FnZShwcmV2Q29udGV4dCwgdikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIFwiIG11c3QgYmUgXCIgKyBhcnJheURlc2NyICsgZWxlbWVudDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TWVzc2FnZShjb250ZXh0OiBJUGFyYW1Db250ZXh0LCB2OiBhbnkpIHtcclxuICAgIGxldCBtc2cgPSBjb250ZXh0Lm1zZztcclxuICAgIGlmICh0eXBlb2YgKG1zZykgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIG1zZyA9ICg8YW55Pm1zZykoY29udGV4dCwgdik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbXNnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRDb250ZXh0KHRoYXQ6IFBhcmFtLCBjb250ZXh0OiBJUGFyYW1Db250ZXh0KSB7XHJcbiAgICBpZiAodGhhdC5fY29udGV4dCkge1xyXG4gICAgICAgIGxldCBjdXJDb250ZXh0ID0gdGhhdC5fY29udGV4dDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGN1ckNvbnRleHQucHJldkNvbnRleHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjdXJDb250ZXh0ID0gY3VyQ29udGV4dC5wcmV2Q29udGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjdXJDb250ZXh0LnByZXZDb250ZXh0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGN1ckNvbnRleHQucHJldkNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgICAgICAvLyBqdXN0IHVwZGF0ZSB0aGUgcHJldkNvbnRleHQgYnV0IGRvbid0IGNoYW5nZSB0aGUgY3VyQ29udGV4dC5cclxuICAgICAgICAgICAgcmV0dXJuIHRoYXQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LnByZXZDb250ZXh0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgY29udGV4dC5wcmV2Q29udGV4dCA9IHRoYXQuX2NvbnRleHQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBjb25zdHJ1Y3Rpb24gLSB1c2UgJ29yJyB0byBjb21iaW5lIGNoZWNrc1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2V0Q29udGV4dCh0aGF0LCBjb250ZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gc2V0Q29udGV4dCh0aGF0OiBQYXJhbSwgY29udGV4dDogSVBhcmFtQ29udGV4dCkge1xyXG4gICAgdGhhdC5fY29udGV4dHNbdGhhdC5fY29udGV4dHMubGVuZ3RoIC0gMV0gPSBjb250ZXh0O1xyXG4gICAgdGhhdC5fY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICByZXR1cm4gdGhhdDtcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uIGV4ZWMoc2VsZjogUGFyYW0pIHtcclxuICAgIC8vIGNsZWFyIG9mZiBsYXN0IG9uZSBpZiBudWxsXHJcbiAgICBsZXQgY29udGV4dHMgPSBzZWxmLl9jb250ZXh0cztcclxuICAgIGlmIChjb250ZXh0c1tjb250ZXh0cy5sZW5ndGggLSAxXSA9PSBudWxsKSB7XHJcbiAgICAgICAgY29udGV4dHMucG9wKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29udGV4dHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250ZXh0cy5zb21lKGZ1bmN0aW9uIChjb250ZXh0OiBJUGFyYW1Db250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZm4gPyBjb250ZXh0LmZuKGNvbnRleHQsIHNlbGYudikgOiBmYWxzZTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0aHJvd0NvbmZpZ0Vycm9yKGluc3RhbmNlOiBhbnksIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGNvcmUuZm9ybWF0U3RyaW5nKFwiRXJyb3IgY29uZmlndXJpbmcgYW4gaW5zdGFuY2Ugb2YgJyUxJy4gJTJcIiwgKGluc3RhbmNlICYmIGluc3RhbmNlLl8kdHlwZU5hbWUpIHx8IFwib2JqZWN0XCIsIG1lc3NhZ2UpKTtcclxufVxyXG5cclxuY2xhc3MgQ29uZmlnUGFyYW0ge1xyXG4gICAgY29uZmlnOiBhbnk7XHJcbiAgICBwYXJhbXM6IFBhcmFtW107XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWc6IE9iamVjdCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKGNvbmZpZykgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGFuIG9iamVjdCwgaW5zdGVhZCBpdCBpcyBhOiBcIiArIHR5cGVvZiAoY29uZmlnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHRoaXMucGFyYW1zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgd2hlcmVQYXJhbShwcm9wTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtID0gbmV3IFBhcmFtKHRoaXMuY29uZmlnW3Byb3BOYW1lXSwgcHJvcE5hbWUpO1xyXG4gICAgICAgIHBhcmFtLnBhcmVudCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMucHVzaChwYXJhbSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGxldCBhc3NlcnRDb25maWcgPSBmdW5jdGlvbiAoY29uZmlnOiBPYmplY3QpIHtcclxuICAgIHJldHVybiBuZXcgQ29uZmlnUGFyYW0oY29uZmlnKSBhcyBJQ29uZmlnUGFyYW07XHJcbn07XHJcblxyXG5cclxuLy8gUGFyYW0gaXMgZXhwb3NlZCBzbyB0aGF0IGFkZGl0aW9uYWwgJ2lzJyBtZXRob2RzIGNhbiBiZSBhZGRlZCB0byB0aGUgcHJvdG90eXBlLlxyXG4oY29yZSBhcyBhbnkpLlBhcmFtID0gUGFyYW07XHJcbihjb3JlIGFzIGFueSkuYXNzZXJ0UGFyYW0gPSBhc3NlcnRQYXJhbTtcclxuKGNvcmUgYXMgYW55KS5hc3NlcnRDb25maWcgPSBhc3NlcnRDb25maWc7XHJcbiJdfQ==
@@ -1,85 +0,0 @@
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 var 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: 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
- var 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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QyxZQUFZLEVBQUUsWUFBWTtJQUMxQiwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsYUFBYSxFQUFFLGFBQWE7SUFDNUIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxhQUFhLEVBQUUsYUFBYTtJQUM1QixLQUFLLE9BQUE7SUFDTCxTQUFTLEVBQUUsU0FBUztJQUNwQixZQUFZLEVBQUUsWUFBWTtJQUMxQixXQUFXLEVBQUUsV0FBVztJQUN4QixlQUFlLEVBQUUsZUFBZTtJQUNoQyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsU0FBUyxFQUFFLFNBQVM7SUFDcEIsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQWdCRix3QkFBd0I7QUFDeEIsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJO0lBQ0YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFBQyxPQUFPLENBQUMsRUFBRTtDQUVYO0FBQ0QsSUFBSSxHQUFHLEVBQUU7SUFDUCxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztDQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcn0gZnJvbSAnLi9hYnN0cmFjdC1kYXRhLXNlcnZpY2UtYWRhcHRlcic7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtLCBhc3NlcnRDb25maWcsIFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBCcmVlemVDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IENvbXBsZXhBcnJheSB9IGZyb20gJy4vY29tcGxleC1hcnJheSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBEYXRhU2VydmljZUNvbmZpZywgSnNvblJlc3VsdHNBZGFwdGVyLCBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsIE5vZGVDb250ZXh0LCBOb2RlTWV0YSB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlBY3Rpb24gfSBmcm9tICcuL2VudGl0eS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHlBc3BlY3QsIENvbXBsZXhBc3BlY3QsIEVudGl0eSwgQ29tcGxleE9iamVjdCwgU3RydWN0dXJhbE9iamVjdCwgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TWFuYWdlckNvbmZpZywgRW50aXR5RXJyb3IsIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsIFNhdmVDb250ZXh0LCBTYXZlQnVuZGxlLCBIdHRwUmVzcG9uc2UsIEtleU1hcHBpbmcsIFNlcnZlckVycm9yLCBTYXZlUmVzdWx0LCBRdWVyeVJlc3VsdCwgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5LCBGaWx0ZXJRdWVyeU9wLCBCb29sZWFuUXVlcnlPcCwgT3JkZXJCeUNsYXVzZSwgRXhwYW5kQ2xhdXNlLCBTZWxlY3RDbGF1c2UgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9lbnRpdHktc3RhdGUnO1xyXG5pbXBvcnQgeyBJbnRlcmZhY2VSZWdpc3RyeSwgQWpheEFkYXB0ZXIsIEFqYXhDb25maWcsIERhdGFTZXJ2aWNlQWRhcHRlciwgTW9kZWxMaWJyYXJ5QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLCBVcmlCdWlsZGVyQWRhcHRlciwgSW50ZXJmYWNlUmVnaXN0cnlDb25maWcsIEFqYXhSZXF1ZXN0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyZmFjZS1yZWdpc3RyeSc7XHJcbmltcG9ydCB7IEtleUdlbmVyYXRvciB9IGZyb20gJy4va2V5LWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyB9IGZyb20gJy4vbG9jYWwtcXVlcnktY29tcGFyaXNvbi1vcHRpb25zJztcclxuaW1wb3J0IHsgTWFwcGluZ0NvbnRleHQgfSBmcm9tICcuL21hcHBpbmctY29udGV4dCc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBTdHJ1Y3R1cmFsVHlwZSwgRGF0YVByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBBdXRvR2VuZXJhdGVkS2V5VHlwZSAgIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBOYW1pbmdDb252ZW50aW9uIH0gZnJvbSAnLi9uYW1pbmctY29udmVudGlvbic7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgVmlzaXRDb250ZXh0LCBWaXNpdG9yLCBFeHByZXNzaW9uQ29udGV4dCwgVW5hcnlQcmVkaWNhdGUsIEJpbmFyeVByZWRpY2F0ZSwgQW55QWxsUHJlZGljYXRlLCBBbmRPclByZWRpY2F0ZSwgTGl0RXhwciwgRm5FeHByLCBQcm9wRXhwciB9IGZyb20gJy4vcHJlZGljYXRlJztcclxuaW1wb3J0IHsgUXVlcnlPcHRpb25zLCAgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSB9IGZyb20gJy4vcXVlcnktb3B0aW9ucyc7XHJcbmltcG9ydCB7IFNhdmVPcHRpb25zIH0gZnJvbSAnLi9zYXZlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uT3B0aW9ucyB9IGZyb20gJy4vdmFsaWRhdGlvbi1vcHRpb25zJztcclxuXHJcbmltcG9ydCB7IGNvbmZpZywgQmFzZUFkYXB0ZXIgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IGNvcmUsIENhbGxiYWNrLCBFcnJvckNhbGxiYWNrIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgbWFrZVJlbGF0aW9uQXJyYXksIG1ha2VQcmltaXRpdmVBcnJheSwgbWFrZUNvbXBsZXhBcnJheSB9IGZyb20gJy4vYXJyYXknO1xyXG5cclxuaW1wb3J0IHsgUmVsYXRpb25BcnJheSB9IGZyb20gJy4vcmVsYXRpb24tYXJyYXknO1xyXG5pbXBvcnQgeyBBcnJheUNoYW5nZWRBcmdzIH0gZnJvbSAnLi9vYnNlcnZhYmxlLWFycmF5JztcclxuZXhwb3J0IHsgQnJlZXplQ29uZmlnLCBDb21wbGV4QXJyYXksIFJlbGF0aW9uQXJyYXkgfTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIsXHJcbiAgQWpheEFkYXB0ZXIsXHJcbiAgQWpheENvbmZpZyxcclxuICBBamF4UmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIEFuZE9yUHJlZGljYXRlLFxyXG4gIEFueUFsbFByZWRpY2F0ZSxcclxuICBBcnJheUNoYW5nZWRBcmdzLFxyXG4gIGFzc2VydENvbmZpZyxcclxuICBhc3NlcnRQYXJhbSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCYXNlQWRhcHRlcixcclxuICBCaW5hcnlQcmVkaWNhdGUsXHJcbiAgQnJlZXplRW51bSxcclxuICBCcmVlemVFdmVudCwgXHJcbiAgQ2FsbGJhY2ssXHJcbiAgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleE9iamVjdCxcclxuICBDb21wbGV4VHlwZSxcclxuICBjb25maWcsXHJcbiAgY29yZSxcclxuICBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIERhdGFTZXJ2aWNlQ29uZmlnLFxyXG4gIERhdGFUeXBlLFxyXG4gIEVudGl0eSxcclxuICBFbnRpdHlBY3Rpb24sXHJcbiAgRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsXHJcbiAgRW50aXR5RXJyb3IsXHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5TWFuYWdlckNvbmZpZyxcclxuICBFbnRpdHlQcm9wZXJ0eSxcclxuICBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlLFxyXG4gIEVycm9yQ2FsbGJhY2ssXHJcbiAgRXhwYW5kQ2xhdXNlLFxyXG4gIEV4cHJlc3Npb25Db250ZXh0LFxyXG4gIEZldGNoU3RyYXRlZ3ksXHJcbiAgRmlsdGVyUXVlcnlPcCxcclxuICBGbkV4cHIsXHJcbiAgSGFzQ2hhbmdlc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsXHJcbiAgS2V5R2VuZXJhdG9yLFxyXG4gIEtleU1hcHBpbmcsXHJcbiAgTGl0RXhwcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXHJcbiAgbWFrZUNvbXBsZXhBcnJheSxcclxuICBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXksXHJcbiAgTWFwcGluZ0NvbnRleHQsXHJcbiAgTWVyZ2VTdHJhdGVneSxcclxuICBNZXRhZGF0YVN0b3JlLFxyXG4gIE1vZGVsTGlicmFyeUFkYXB0ZXIsXHJcbiAgTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHksXHJcbiAgTm9kZUNvbnRleHQsXHJcbiAgTm9kZU1ldGEsXHJcbiAgT3JkZXJCeUNsYXVzZSxcclxuICBQcmVkaWNhdGUsXHJcbiAgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFByb3BFeHByLFxyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeVJlc3VsdCxcclxuICBTYXZlQnVuZGxlLFxyXG4gIFNhdmVDb250ZXh0LFxyXG4gIFNhdmVPcHRpb25zLFxyXG4gIFNhdmVSZXN1bHQsXHJcbiAgU2VsZWN0Q2xhdXNlLFxyXG4gIFNlcnZlckVycm9yLFxyXG4gIFN0cnVjdHVyYWxPYmplY3QsXHJcbiAgU3RydWN0dXJhbFR5cGUsXHJcbiAgVW5hcnlQcmVkaWNhdGUsXHJcbiAgVXJpQnVpbGRlckFkYXB0ZXIsXHJcbiAgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcixcclxuICBWaXNpdENvbnRleHQsXHJcbiAgVmlzaXRvcixcclxufTtcclxuXHJcbi8vIGNyZWF0ZSBhIGJyZWV6ZSB2YXJpYWJsZSBoZXJlXHJcbmV4cG9ydCBjb25zdCBicmVlemUgPSB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXI6IEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIGFzc2VydENvbmZpZzogbnVsbCBhcyBhbnksXHJcbiAgYXNzZXJ0UGFyYW06IG51bGwgYXMgYW55LFxyXG4gIEF1dG9HZW5lcmF0ZWRLZXlUeXBlOiBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCb29sZWFuUXVlcnlPcDogQm9vbGVhblF1ZXJ5T3AsXHJcbiAgQ29tcGxleEFzcGVjdDogQ29tcGxleEFzcGVjdCxcclxuICBDb21wbGV4VHlwZTogQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnOiBjb25maWcsXHJcbiAgY29yZTogY29yZSxcclxuICBEYXRhUHJvcGVydHk6IERhdGFQcm9wZXJ0eSxcclxuICBEYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVR5cGU6IERhdGFUeXBlLFxyXG4gIEVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUtleTogRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5UXVlcnk6IEVudGl0eVF1ZXJ5LFxyXG4gIEVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxyXG4gIEV2ZW50OiBCcmVlemVFdmVudCxcclxuICBGZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3A6IEZpbHRlclF1ZXJ5T3AsXHJcbiAgSW50ZXJmYWNlUmVnaXN0cnk6IEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcjogSnNvblJlc3VsdHNBZGFwdGVyLFxyXG4gIEtleUdlbmVyYXRvcjogS2V5R2VuZXJhdG9yLFxyXG4gIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9uczogTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXk6IG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5OiBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXk6IG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSxcclxuICBOYW1pbmdDb252ZW50aW9uOiBOYW1pbmdDb252ZW50aW9uLFxyXG4gIE5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE9yZGVyQnlDbGF1c2U6IE9yZGVyQnlDbGF1c2UsIC8vIGZvciB0ZXN0aW5nIG9ubHlcclxuICBQYXJhbSxcclxuICBQcmVkaWNhdGU6IFByZWRpY2F0ZSxcclxuICBRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICBTYXZlT3B0aW9uczogU2F2ZU9wdGlvbnMsXHJcbiAgVmFsaWRhdGlvbkVycm9yOiBWYWxpZGF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbk9wdGlvbnM6IFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcjogVmFsaWRhdG9yLFxyXG4gIHZlcnNpb246IFwiMi4xLjVcIlxyXG59O1xyXG5cclxuLy8gYnJlZXplLmFzc2VydENvbmZpZyA9IGFzc2VydENvbmZpZyBhcyBhbnk7XHJcbi8vIGJyZWV6ZS5hc3NlcnRQYXJhbSA9IGFzc2VydFBhcmFtIGFzIGFueTtcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgcHJvbWlzZXMge1xyXG4gIC8qKiBuby1vcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGJyZWV6ZS1icmlkZ2UyLWFuZ3VsYXIgKi9cclxuICBleHBvcnQgaW50ZXJmYWNlIElQcm9taXNlU2VydmljZSB7fVxyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxubGV0IHdpbjogYW55O1xyXG50cnkge1xyXG4gIHdpbiA9IHdpbmRvdyA/IHdpbmRvdyA6IChnbG9iYWwgPyBnbG9iYWwud2luZG93IDogdW5kZWZpbmVkKTtcclxufSBjYXRjaCAoZSkge1xyXG5cclxufVxyXG5pZiAod2luKSB7XHJcbiAgd2luLmJyZWV6ZSA9IGJyZWV6ZTtcclxufVxyXG4iXX0=
@@ -1,119 +0,0 @@
1
- import { core } from './core';
2
- import { observableArray } from './observable-array';
3
- import { BreezeEvent } from './event';
4
- var ɵ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
- var 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
- var 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
- var 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
- var 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
- var 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxleC1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvY29tcGxleC1hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFHLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQztTQWtEdEIsVUFBUyxJQUFXO0lBQ2hDLE9BQU8sV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQyxDQUFDLE9BRWM7SUFDYixlQUFlLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxPQUVhLFVBQVMsSUFBVztJQUNoQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUMsT0FFZ0IsVUFBUyxPQUFjO0lBQ3RDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEMsQ0FBQyxPQUVlO0lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQUUsT0FBTztJQUM5QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7SUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQWlCO1FBQ3RDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQWlCO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLE9BRWU7SUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUMxQixD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QUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBaUIsQ0FBQztBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSAgfSBmcm9tICcuL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlQXJyYXksIG9ic2VydmFibGVBcnJheSB9IGZyb20gJy4vb2JzZXJ2YWJsZS1hcnJheSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IENvbXBsZXhPYmplY3QsIFN0cnVjdHVyYWxPYmplY3QgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5pbXBvcnQgeyBEYXRhUHJvcGVydHkgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcblxyXG4vLyBUT0RPOiBtaXhpbiBpbXBsIGlzIG5vdCB2ZXJ5IHR5cGVzYWZlXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsZXhBcnJheSBleHRlbmRzIE9ic2VydmFibGVBcnJheSB7XHJcbiAgW2luZGV4OiBudW1iZXJdOiBDb21wbGV4T2JqZWN0O1xyXG4gIHBhcmVudD86IFN0cnVjdHVyYWxPYmplY3Q7XHJcbiAgcGFyZW50UHJvcGVydHk/OiBEYXRhUHJvcGVydHk7XHJcbn1cclxuXHJcbmxldCBjb21wbGV4QXJyYXlNaXhpbiA9IHtcclxuXHJcbiAgLy8gY29tcGxleEFycmF5IHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BzXHJcbiAgLy8gICAgcGFyZW50XHJcbiAgLy8gICAgcHJvcGVydHlQYXRoXHJcbiAgLy8gICAgcGFyZW50UHJvcGVydHlcclxuICAvLyAgICBhZGRlZEl0ZW1zICAtIG9ubHkgaWYgbW9kaWZpZWRcclxuICAvLyAgICByZW1vdmVkSXRlbXMgIC0gb25seSBpZiBtb2RpZmllZFxyXG4gIC8vICBlYWNoIGNvbXBsZXhBc3BlY3Qgb2YgYW55IGVudGl0eSB3aXRoaW4gYSBjb21wbGV4QXJyYXlcclxuICAvLyAgd2lsbCBoYXZlIGl0cyBvd24gX2NvbXBsZXhTdGF0ZSA9IFwiQS9NXCI7XHJcblxyXG4gIC8qKlxyXG4gICBDb21wbGV4IGFycmF5cyBhcmUgbm90IGFjdHVhbGx5IGNsYXNzZXMsIHRoZXkgYXJlIG9iamVjdHMgdGhhdCBtaW1pYyBhcnJheXMuIEEgY29tcGxleCBhcnJheSBpcyBjb2xsZWN0aW9uIG9mXHJcbiAgIGNvbXBsZXhUeXBlcyBhc3NvY2lhdGVkIHdpdGggYSBkYXRhIHByb3BlcnR5IG9uIGEgc2luZ2xlIGVudGl0eSBvciBvdGhlciBjb21wbGV4IG9iamVjdC4gaS5lLiBjdXN0b21lci5vcmRlcnMgb3Igb3JkZXIub3JkZXJEZXRhaWxzLlxyXG4gICBUaGlzIGNvbGxlY3Rpb24gbG9va3MgbGlrZSBhbiBhcnJheSBpbiB0aGF0IHRoZSBiYXNpYyBtZXRob2RzIG9uIGFycmF5cyBzdWNoIGFzICdwdXNoJywgJ3BvcCcsICdzaGlmdCcsICd1bnNoaWZ0JywgJ3NwbGljZSdcclxuICAgYXJlIGFsbCBwcm92aWRlZCBhcyB3ZWxsIGFzIHNldmVyYWwgc3BlY2lhbCBwdXJwb3NlIG1ldGhvZHMuXHJcbiAgIEBjbGFzcyB7Y29tcGxleEFycmF5fVxyXG4gICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgQW4gW1tFdmVudF1dIHRoYXQgZmlyZXMgd2hlbmV2ZXIgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYXJyYXkgY2hhbmdlZC4gIFRoaXMgZXZlbnRcclxuICBpcyBmaXJlZCBhbnkgdGltZSBhIG5ldyBlbnRpdHkgaXMgYXR0YWNoZWQgb3IgYWRkZWQgdG8gdGhlIEVudGl0eU1hbmFnZXIgYW5kIGhhcHBlbnMgdG8gYmVsb25nIHRvIHRoaXMgY29sbGVjdGlvbi5cclxuICBBZGRzIHRoYXQgb2NjdXIgYXMgYSByZXN1bHQgb2YgcXVlcnkgb3IgaW1wb3J0IG9wZXJhdGlvbnMgYXJlIGJhdGNoZWQgc28gdGhhdCBhbGwgb2YgdGhlIGFkZHMgb3IgcmVtb3ZlcyB0byBhbnkgaW5kaXZpZHVhbFxyXG4gIGNvbGxlY3Rpb25zIGFyZSBjb2xsZWN0ZWQgaW50byBhIHNpbmdsZSBub3RpZmljYXRpb24gZXZlbnQgZm9yIGVhY2ggcmVsYXRpb24gYXJyYXkuXHJcbiAgQGV4YW1wbGVcclxuICAgICAgLy8gYXNzdW1lIG9yZGVyIGlzIGFuIG9yZGVyIGVudGl0eSBhdHRhY2hlZCB0byBhbiBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICBvcmRlcnMuYXJyYXlDaGFuZ2VkLnN1YnNjcmliZShcclxuICAgICAgZnVuY3Rpb24gKGFycmF5Q2hhbmdlZEFyZ3MpIHtcclxuICAgICAgICAgIHZhciBhZGRlZEVudGl0aWVzID0gYXJyYXlDaGFuZ2VkQXJncy5hZGRlZDtcclxuICAgICAgICAgIHZhciByZW1vdmVkRW50aXRpZXMgPSBhcnJheUNoYW5nZWQucmVtb3ZlZDtcclxuICAgICAgfSk7XHJcbiAgQGV2ZW50IGFycmF5Q2hhbmdlZFxyXG4gIEBwYXJhbSBhZGRlZCB7QXJyYXkgb2YgRW50aXR5fSBBbiBhcnJheSBvZiBhbGwgb2YgdGhlIGVudGl0aWVzIGFkZGVkIHRvIHRoaXMgY29sbGVjdGlvbi5cclxuICBAcGFyYW0gcmVtb3ZlZCB7QXJyYXkgb2YgRW50aXR5fSBBbiBhcnJheSBvZiBhbGwgb2YgdGhlIHJlbW92ZWQgZnJvbSB0aGlzIGNvbGxlY3Rpb24uXHJcbiAgQHJlYWRPbmx5XHJcbiAgKiovXHJcblxyXG4gICAgLy8gdmlydHVhbCBpbXBsc1xyXG4gIF9nZXRHb29kQWRkczogZnVuY3Rpb24oYWRkczogYW55W10pIHtcclxuICAgIHJldHVybiBnZXRHb29kQWRkcyh0aGlzLCBhZGRzKTtcclxuICB9LFxyXG5cclxuICBfYmVmb3JlQ2hhbmdlOiBmdW5jdGlvbigpIHtcclxuICAgIG9ic2VydmFibGVBcnJheS51cGRhdGVFbnRpdHlTdGF0ZSh0aGlzKTtcclxuICB9LFxyXG5cclxuICBfcHJvY2Vzc0FkZHM6IGZ1bmN0aW9uKGFkZHM6IGFueVtdKSB7XHJcbiAgICBwcm9jZXNzQWRkcyh0aGlzLCBhZGRzKTtcclxuICB9LFxyXG5cclxuICBfcHJvY2Vzc1JlbW92ZXM6IGZ1bmN0aW9uKHJlbW92ZXM6IGFueVtdKSB7XHJcbiAgICBwcm9jZXNzUmVtb3Zlcyh0aGlzLCByZW1vdmVzKTtcclxuICB9LFxyXG5cclxuICBfcmVqZWN0Q2hhbmdlczogZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuX29yaWdWYWx1ZXMpIHJldHVybjtcclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoY286IENvbXBsZXhPYmplY3QpIHtcclxuICAgICAgY2xlYXJBc3BlY3QoY28sIHRoYXQpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLl9vcmlnVmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKGNvOiBDb21wbGV4T2JqZWN0KSB7XHJcbiAgICAgIHRoYXQucHVzaChjbyk7XHJcbiAgICB9KTtcclxuICB9LFxyXG5cclxuICBfYWNjZXB0Q2hhbmdlczogZnVuY3Rpb24oKSB7XHJcbiAgICB0aGlzLl9vcmlnVmFsdWVzID0gbnVsbDtcclxuICB9XHJcbn07XHJcblxyXG4vLyBsb2NhbCBmdW5jdGlvbnNcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRHb29kQWRkcyhjb21wbGV4QXJyYXk6IENvbXBsZXhBcnJheSwgYWRkczogQ29tcGxleE9iamVjdFtdKSB7XHJcbiAgLy8gcmVtb3ZlIGFueSB0aGF0IGFyZSBhbHJlYWR5IGFkZGVkIGhlcmVcclxuICByZXR1cm4gYWRkcy5maWx0ZXIoZnVuY3Rpb24gKGEpIHtcclxuICAgIC8vIHJldHVybiBhLnBhcmVudCAhPT0gY29tcGxleEFycmF5LnBhcmVudDsgIC8vIFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgYWN0dWFsbHkgYSBidWcgaW4gb3JpZ2luYWwgYnJlZXplanMgPz8/XHJcbiAgICByZXR1cm4gYS5jb21wbGV4QXNwZWN0ID09IG51bGwgfHwgYS5jb21wbGV4QXNwZWN0LnBhcmVudCAhPT0gY29tcGxleEFycmF5LnBhcmVudDtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc0FkZHMoY29tcGxleEFycmF5OiBDb21wbGV4QXJyYXksIGFkZHM6IENvbXBsZXhPYmplY3RbXSkge1xyXG4gIGFkZHMuZm9yRWFjaChmdW5jdGlvbiAoYSkge1xyXG4gICAgLy8gaWYgKGEucGFyZW50ICE9IG51bGwpIHsgLy8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBhY3R1YWxseSBhIGJ1ZyBpbiBvcmlnaW5hbCBicmVlemVqcyA/Pz9cclxuICAgIGlmIChhLmNvbXBsZXhBc3BlY3QgJiYgYS5jb21wbGV4QXNwZWN0LnBhcmVudCAhPSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBjb21wbGV4T2JqZWN0IGlzIGFscmVhZHkgYXR0YWNoZWQuIEVpdGhlciBjbG9uZSBpdCBvciByZW1vdmUgaXQgZnJvbSBpdHMgY3VycmVudCBvd25lclwiKTtcclxuICAgIH1cclxuICAgIHNldEFzcGVjdChhLCBjb21wbGV4QXJyYXkpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9jZXNzUmVtb3Zlcyhjb21wbGV4QXJyYXk6IENvbXBsZXhBcnJheSwgcmVtb3ZlczogQ29tcGxleE9iamVjdFtdKSB7XHJcbiAgcmVtb3Zlcy5mb3JFYWNoKGZ1bmN0aW9uIChhKSB7XHJcbiAgICBjbGVhckFzcGVjdChhLCBjb21wbGV4QXJyYXkpO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjbGVhckFzcGVjdChjbzogQ29tcGxleE9iamVjdCwgYXJyOiBDb21wbGV4QXJyYXkpIHtcclxuICBsZXQgY29Bc3BlY3QgPSBjby5jb21wbGV4QXNwZWN0O1xyXG4gIC8vIGlmIG5vdCBhbHJlYWR5IGF0dGFjaGVkIC0gZXhpdFxyXG4gIGlmIChjb0FzcGVjdC5wYXJlbnQgIT09IGFyci5wYXJlbnQpIHJldHVybiBudWxsO1xyXG5cclxuICBjb0FzcGVjdC5wYXJlbnQgPSB1bmRlZmluZWQ7XHJcbiAgY29Bc3BlY3QucGFyZW50UHJvcGVydHkgPSB1bmRlZmluZWQ7XHJcbiAgcmV0dXJuIGNvQXNwZWN0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRBc3BlY3QoY286IENvbXBsZXhPYmplY3QsIGFycjogQ29tcGxleEFycmF5KSB7XHJcbiAgbGV0IGNvQXNwZWN0ID0gY28uY29tcGxleEFzcGVjdDtcclxuICAvLyBpZiBhbHJlYWR5IGF0dGFjaGVkIC0gZXhpdFxyXG4gIGlmIChjb0FzcGVjdC5wYXJlbnQgPT09IGFyci5wYXJlbnQpIHJldHVybiBudWxsO1xyXG4gIGNvQXNwZWN0LnBhcmVudCA9IGFyci5wYXJlbnQ7XHJcbiAgY29Bc3BlY3QucGFyZW50UHJvcGVydHkgPSBhcnIucGFyZW50UHJvcGVydHk7XHJcblxyXG4gIHJldHVybiBjb0FzcGVjdDtcclxufVxyXG5cclxuXHJcbi8qKiBGb3IgdXNlIGJ5IGJyZWV6ZSBwbHVnaW4gYXV0aG9ycyBvbmx5LiBUaGUgY2xhc3MgaXMgZm9yIHVzZSBpbiBidWlsZGluZyBhIFtbSU1vZGVsTGlicmFyeUFkYXB0ZXJdXSBpbXBsZW1lbnRhdGlvbi4gXHJcbkBhZGFwdGVyIChzZWUgW1tJTW9kZWxMaWJyYXJ5QWRhcHRlcl1dKSAgICBcclxuQGhpZGRlbiBcclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VDb21wbGV4QXJyYXkoYXJyOiBhbnlbXSwgcGFyZW50OiBTdHJ1Y3R1cmFsT2JqZWN0LCBwYXJlbnRQcm9wZXJ0eTogRGF0YVByb3BlcnR5KSB7XHJcbiAgbGV0IGFyclggPSBhcnIgYXMgYW55O1xyXG4gIG9ic2VydmFibGVBcnJheS5pbml0aWFsaXplUGFyZW50KGFyclgsIHBhcmVudCwgcGFyZW50UHJvcGVydHkpO1xyXG4gIGFyclguYXJyYXlDaGFuZ2VkID0gbmV3IEJyZWV6ZUV2ZW50KFwiYXJyYXlDaGFuZ2VkXCIsIGFyclgpO1xyXG4gIGNvcmUuZXh0ZW5kKGFyclgsIG9ic2VydmFibGVBcnJheS5taXhpbik7XHJcbiAgcmV0dXJuIGNvcmUuZXh0ZW5kKGFyclgsIGNvbXBsZXhBcnJheU1peGluKSBhcyBDb21wbGV4QXJyYXk7XHJcbn1cclxuXHJcbiJdfQ==