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,107 @@
1
+ import { BreezeEnum } from './enum';
2
+ /**
3
+ EntityState is an 'Enum' containing all of the valid states for an 'Entity'.
4
+ **/
5
+ export class EntityState extends BreezeEnum {
6
+ /**
7
+ Returns whether an entityState instance is EntityState.Unchanged.
8
+ > var es = anEntity.entityAspect.entityState;
9
+ > return es.isUnchanged();
10
+
11
+ is the same as
12
+ > return es === EntityState.Unchanged;
13
+ **/
14
+ isUnchanged() {
15
+ return this === EntityState.Unchanged;
16
+ }
17
+ /**
18
+ Return whether an entityState instance is EntityState.Added.
19
+
20
+ > var es = anEntity.entityAspect.entityState;
21
+ > return es.isAdded();
22
+
23
+ is the same as
24
+ > return es === EntityState.Added;
25
+ **/
26
+ isAdded() {
27
+ return this === EntityState.Added;
28
+ }
29
+ /**
30
+ Returns whether an entityState instance is EntityState.Modified.
31
+ > var es = anEntity.entityAspect.entityState;
32
+ > return es.isModified();
33
+
34
+ is the same as
35
+ > return es === EntityState.Modified;
36
+ **/
37
+ isModified() {
38
+ return this === EntityState.Modified;
39
+ }
40
+ /**
41
+ Returns whether an entityState instance is EntityState.Deleted.
42
+ > var es = anEntity.entityAspect.entityState;
43
+ > return es.isDeleted();
44
+
45
+ is the same as
46
+
47
+ > return es === EntityState.Deleted;
48
+ **/
49
+ isDeleted() {
50
+ return this === EntityState.Deleted;
51
+ }
52
+ /**
53
+ Returns whether an entityState instance is EntityState.Detached.
54
+ > var es = anEntity.entityAspect.entityState;
55
+ > return es.isDetached();
56
+
57
+ is the same as
58
+ > return es === EntityState.Detached;
59
+ **/
60
+ isDetached() {
61
+ return this === EntityState.Detached;
62
+ }
63
+ /** Return true if EntityState is Deleted or Detached */
64
+ isDeletedOrDetached() {
65
+ return this === EntityState.Detached || this === EntityState.Detached;
66
+ }
67
+ /**
68
+ Returns whether an entityState instance is EntityState.Unchanged or EntityState.Modified.
69
+ > var es = anEntity.entityAspect.entityState;
70
+ > return es.isUnchangedOrModified();
71
+
72
+ is the same as
73
+ > return es === EntityState.Unchanged || es === EntityState.Modified
74
+ **/
75
+ isUnchangedOrModified() {
76
+ return this === EntityState.Unchanged || this === EntityState.Modified;
77
+ }
78
+ /** Return true if EntityStatis is Added or Modified */
79
+ isAddedOrModified() {
80
+ return this === EntityState.Added || this === EntityState.Modified;
81
+ }
82
+ /** Returns whether an entityState instance is EntityState.Added or EntityState.Modified or EntityState.Deleted.
83
+ > var es = anEntity.entityAspect.entityState;
84
+ > return es.isAddedModifiedOrDeleted();
85
+
86
+ is the same as
87
+ > return es === EntityState.Added || es === EntityState.Modified || es === EntityState.Deleted
88
+ **/
89
+ isAddedModifiedOrDeleted() {
90
+ return this === EntityState.Added ||
91
+ this === EntityState.Modified ||
92
+ this === EntityState.Deleted;
93
+ }
94
+ }
95
+ /** The 'Unchanged' state. **/
96
+ EntityState.Unchanged = new EntityState();
97
+ /** The 'Added' state. **/
98
+ EntityState.Added = new EntityState();
99
+ /** The 'Modified' state. **/
100
+ EntityState.Modified = new EntityState();
101
+ /** The 'Deleted' state. **/
102
+ EntityState.Deleted = new EntityState();
103
+ /** The 'Detached' state. **/
104
+ EntityState.Detached = new EntityState();
105
+ EntityState.prototype._$typeName = "EntityState";
106
+ Error['x'] = EntityState.resolveSymbols();
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9lbnRpdHktc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVwQzs7R0FFRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsVUFBVTtJQWF6Qzs7Ozs7OztPQU9HO0lBQ0gsV0FBVztRQUNULE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsT0FBTztRQUNMLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxVQUFVO1FBQ1IsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFVBQVU7UUFDUixPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxRQUFRLElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUN6RSxDQUFDO0lBRUQsdURBQXVEO0lBQ3ZELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHdCQUF3QjtRQUN0QixPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsS0FBSztZQUMvQixJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVE7WUFDN0IsSUFBSSxLQUFLLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDakMsQ0FBQzs7QUExR0QsOEJBQThCO0FBQ3ZCLHFCQUFTLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNyQyw0QkFBNEI7QUFDckIsaUJBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2pDLGdDQUFnQztBQUN6QixvQkFBUSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDcEMsOEJBQThCO0FBQ3ZCLG1CQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNuQywrQkFBK0I7QUFDeEIsb0JBQVEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBb0d0QyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7QUFDakQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWV6ZUVudW0gfSBmcm9tICcuL2VudW0nO1xyXG5cclxuLyoqXHJcbkVudGl0eVN0YXRlIGlzIGFuICdFbnVtJyBjb250YWluaW5nIGFsbCBvZiB0aGUgdmFsaWQgc3RhdGVzIGZvciBhbiAnRW50aXR5Jy5cclxuKiovXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlTdGF0ZSBleHRlbmRzIEJyZWV6ZUVudW0ge1xyXG5cclxuICAvKiogVGhlICdVbmNoYW5nZWQnIHN0YXRlLiAqKi9cclxuICBzdGF0aWMgVW5jaGFuZ2VkID0gbmV3IEVudGl0eVN0YXRlKCk7XHJcbiAgLyoqICBUaGUgJ0FkZGVkJyBzdGF0ZS4gICoqL1xyXG4gIHN0YXRpYyBBZGRlZCA9IG5ldyBFbnRpdHlTdGF0ZSgpO1xyXG4gIC8qKiAgVGhlICdNb2RpZmllZCcgc3RhdGUuICAgKiovXHJcbiAgc3RhdGljIE1vZGlmaWVkID0gbmV3IEVudGl0eVN0YXRlKCk7XHJcbiAgLyoqICBUaGUgJ0RlbGV0ZWQnIHN0YXRlLiAgKiovXHJcbiAgc3RhdGljIERlbGV0ZWQgPSBuZXcgRW50aXR5U3RhdGUoKTtcclxuICAvKiogIFRoZSAnRGV0YWNoZWQnIHN0YXRlLiAgKiovXHJcbiAgc3RhdGljIERldGFjaGVkID0gbmV3IEVudGl0eVN0YXRlKCk7XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgd2hldGhlciBhbiBlbnRpdHlTdGF0ZSBpbnN0YW5jZSBpcyBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQuXHJcbiAgPiAgICAgdmFyIGVzID0gYW5FbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gID4gICAgIHJldHVybiBlcy5pc1VuY2hhbmdlZCgpO1xyXG5cclxuICBpcyB0aGUgc2FtZSBhc1xyXG4gID4gICAgIHJldHVybiBlcyA9PT0gRW50aXR5U3RhdGUuVW5jaGFuZ2VkO1xyXG4gICoqL1xyXG4gIGlzVW5jaGFuZ2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMgPT09IEVudGl0eVN0YXRlLlVuY2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybiB3aGV0aGVyIGFuIGVudGl0eVN0YXRlIGluc3RhbmNlIGlzIEVudGl0eVN0YXRlLkFkZGVkLlxyXG4gIFxyXG4gID4gICAgIHZhciBlcyA9IGFuRW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICA+ICAgICByZXR1cm4gZXMuaXNBZGRlZCgpO1xyXG5cclxuICBpcyB0aGUgc2FtZSBhc1xyXG4gID4gICAgIHJldHVybiBlcyA9PT0gRW50aXR5U3RhdGUuQWRkZWQ7XHJcbiAgKiovXHJcbiAgaXNBZGRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzID09PSBFbnRpdHlTdGF0ZS5BZGRlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgd2hldGhlciBhbiBlbnRpdHlTdGF0ZSBpbnN0YW5jZSBpcyBFbnRpdHlTdGF0ZS5Nb2RpZmllZC5cclxuICA+ICAgICB2YXIgZXMgPSBhbkVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGU7XHJcbiAgPiAgICAgcmV0dXJuIGVzLmlzTW9kaWZpZWQoKTtcclxuXHJcbiAgaXMgdGhlIHNhbWUgYXNcclxuICA+ICAgICByZXR1cm4gZXMgPT09IEVudGl0eVN0YXRlLk1vZGlmaWVkO1xyXG4gICoqL1xyXG4gIGlzTW9kaWZpZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcyA9PT0gRW50aXR5U3RhdGUuTW9kaWZpZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHdoZXRoZXIgYW4gZW50aXR5U3RhdGUgaW5zdGFuY2UgaXMgRW50aXR5U3RhdGUuRGVsZXRlZC5cclxuICA+ICAgICB2YXIgZXMgPSBhbkVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGU7XHJcbiAgPiAgICAgcmV0dXJuIGVzLmlzRGVsZXRlZCgpO1xyXG5cclxuICBpcyB0aGUgc2FtZSBhc1xyXG4gIFxyXG4gID4gICAgIHJldHVybiBlcyA9PT0gRW50aXR5U3RhdGUuRGVsZXRlZDtcclxuICAqKi9cclxuICBpc0RlbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcyA9PT0gRW50aXR5U3RhdGUuRGVsZXRlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgd2hldGhlciBhbiBlbnRpdHlTdGF0ZSBpbnN0YW5jZSBpcyBFbnRpdHlTdGF0ZS5EZXRhY2hlZC5cclxuICA+ICAgICB2YXIgZXMgPSBhbkVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGU7XHJcbiAgPiAgICAgcmV0dXJuIGVzLmlzRGV0YWNoZWQoKTtcclxuXHJcbiAgaXMgdGhlIHNhbWUgYXNcclxuICA+ICAgICByZXR1cm4gZXMgPT09IEVudGl0eVN0YXRlLkRldGFjaGVkO1xyXG4gICoqL1xyXG4gIGlzRGV0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcyA9PT0gRW50aXR5U3RhdGUuRGV0YWNoZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJuIHRydWUgaWYgRW50aXR5U3RhdGUgaXMgRGVsZXRlZCBvciBEZXRhY2hlZCAqL1xyXG4gIGlzRGVsZXRlZE9yRGV0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcyA9PT0gRW50aXR5U3RhdGUuRGV0YWNoZWQgfHwgdGhpcyA9PT0gRW50aXR5U3RhdGUuRGV0YWNoZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHdoZXRoZXIgYW4gZW50aXR5U3RhdGUgaW5zdGFuY2UgaXMgRW50aXR5U3RhdGUuVW5jaGFuZ2VkIG9yIEVudGl0eVN0YXRlLk1vZGlmaWVkLlxyXG4gID4gICAgIHZhciBlcyA9IGFuRW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICA+ICAgICByZXR1cm4gZXMuaXNVbmNoYW5nZWRPck1vZGlmaWVkKCk7XHJcblxyXG4gIGlzIHRoZSBzYW1lIGFzXHJcbiAgPiAgICAgcmV0dXJuIGVzID09PSBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQgfHwgZXMgPT09IEVudGl0eVN0YXRlLk1vZGlmaWVkXHJcbiAgKiovXHJcbiAgaXNVbmNoYW5nZWRPck1vZGlmaWVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMgPT09IEVudGl0eVN0YXRlLlVuY2hhbmdlZCB8fCB0aGlzID09PSBFbnRpdHlTdGF0ZS5Nb2RpZmllZDtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm4gdHJ1ZSBpZiBFbnRpdHlTdGF0aXMgaXMgQWRkZWQgb3IgTW9kaWZpZWQgKi9cclxuICBpc0FkZGVkT3JNb2RpZmllZCgpIHtcclxuICAgIHJldHVybiB0aGlzID09PSBFbnRpdHlTdGF0ZS5BZGRlZCB8fCB0aGlzID09PSBFbnRpdHlTdGF0ZS5Nb2RpZmllZDtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm5zIHdoZXRoZXIgYW4gZW50aXR5U3RhdGUgaW5zdGFuY2UgaXMgRW50aXR5U3RhdGUuQWRkZWQgb3IgRW50aXR5U3RhdGUuTW9kaWZpZWQgb3IgRW50aXR5U3RhdGUuRGVsZXRlZC5cclxuICA+ICAgICB2YXIgZXMgPSBhbkVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGU7XHJcbiAgPiAgICAgcmV0dXJuIGVzLmlzQWRkZWRNb2RpZmllZE9yRGVsZXRlZCgpO1xyXG5cclxuICBpcyB0aGUgc2FtZSBhc1xyXG4gID4gICAgIHJldHVybiBlcyA9PT0gRW50aXR5U3RhdGUuQWRkZWQgfHwgZXMgPT09IEVudGl0eVN0YXRlLk1vZGlmaWVkIHx8IGVzID09PSBFbnRpdHlTdGF0ZS5EZWxldGVkXHJcbiAgKiovXHJcbiAgaXNBZGRlZE1vZGlmaWVkT3JEZWxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMgPT09IEVudGl0eVN0YXRlLkFkZGVkIHx8XHJcbiAgICAgIHRoaXMgPT09IEVudGl0eVN0YXRlLk1vZGlmaWVkIHx8XHJcbiAgICAgIHRoaXMgPT09IEVudGl0eVN0YXRlLkRlbGV0ZWQ7XHJcbiAgfVxyXG5cclxufVxyXG5FbnRpdHlTdGF0ZS5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiRW50aXR5U3RhdGVcIjtcclxuRXJyb3JbJ3gnXSA9IEVudGl0eVN0YXRlLnJlc29sdmVTeW1ib2xzKCk7XHJcbiJdfQ==
@@ -0,0 +1,141 @@
1
+ /*
2
+ * Copyright 2012-2023 IdeaBlade, Inc. All Rights Reserved.
3
+ * Use, reproduction, distribution, and modification of this code is subject to the terms and
4
+ * conditions of the IdeaBlade Breeze license, available at http://www.breezejs.com/license
5
+ *
6
+ * Author: Jay Traband
7
+ */
8
+ /**
9
+ Base class for all Breeze enumerations, such as EntityState, DataType, FetchStrategy, MergeStrategy etc.
10
+ A Breeze Enum is a namespaced set of constant values. Each Enum consists of a group of related constants, called 'symbols'.
11
+ Unlike enums in some other environments, each 'symbol' can have both methods and properties.
12
+ > class DayOfWeek extends BreezeEnum {
13
+ > dayIndex: number;
14
+ > isWeekend?: boolean;
15
+ > nextDay() {
16
+ > let nextIndex = (this.dayIndex + 1) % 7;
17
+ > return DayOfWeek.getSymbols()[nextIndex];
18
+ > }
19
+ >
20
+ > static Monday = new DayOfWeek( { dayIndex: 0});
21
+ > static Tuesday = new DayOfWeek( { dayIndex: 1 });
22
+ > static Wednesday = new DayOfWeek( { dayIndex: 2 });
23
+ > static Thursday = new DayOfWeek( { dayIndex: 3 });
24
+ > static Friday = new DayOfWeek( { dayIndex: 4 });
25
+ > static Saturday = new DayOfWeek( { dayIndex: 5, isWeekend: true });
26
+ > static Sunday = new DayOfWeek( { dayIndex: 6, isWeekend: true });
27
+ > }
28
+ >
29
+ > describe("DayOfWeek", () => {
30
+ > test("should support full enum capabilities", function() {
31
+ > // // custom methods
32
+ > let dowSymbols = DayOfWeek.getSymbols();
33
+ > expect(dowSymbols.length).toBe(7);
34
+ > expect(DayOfWeek.Monday.nextDay()).toBe(DayOfWeek.Tuesday);
35
+ > expect(DayOfWeek.Sunday.nextDay()).toBe(DayOfWeek.Monday);
36
+ > // // custom properties
37
+ > expect(DayOfWeek.Tuesday.isWeekend).toBe(undefined);
38
+ > expect(DayOfWeek.Saturday.isWeekend).toBe(true);
39
+ > // // Standard enum capabilities
40
+ > expect(DayOfWeek.Thursday instanceof DayOfWeek).toBe(true);
41
+ > expect(BreezeEnum.isSymbol(DayOfWeek.Wednesday)).toBe(true);
42
+ > expect(DayOfWeek.contains(DayOfWeek.Thursday)).toBe(true);
43
+ > expect(DayOfWeek.Friday.toString()).toBe("Friday");
44
+ > });
45
+ > });
46
+ Note that we have Error['x'] = ... in some places in the code to prevent Terser from optimizing out some important calls.
47
+ @dynamic
48
+ */
49
+ export class BreezeEnum {
50
+ /** */
51
+ constructor(propertiesObj) {
52
+ if (propertiesObj) {
53
+ Object.keys(propertiesObj).forEach((key) => this[key] = propertiesObj[key]);
54
+ }
55
+ }
56
+ /**
57
+ Returns all of the symbols contained within this Enum.
58
+ > let symbols = DayOfWeek.getSymbols();
59
+ @return All of the symbols contained within this Enum.
60
+ **/
61
+ static getSymbols() {
62
+ return this.resolveSymbols().map(ks => ks.symbol);
63
+ }
64
+ /**
65
+ Returns the names of all of the symbols contained within this Enum.
66
+ > let symbols = DayOfWeek.getNames();
67
+ @return All of the names of the symbols contained within this Enum.
68
+ **/
69
+ static getNames() {
70
+ return this.resolveSymbols().map(ks => ks.name);
71
+ }
72
+ /**
73
+ Returns an Enum symbol given its name.
74
+ > let dayOfWeek = DayOfWeek.from("Thursday");
75
+ > // nowdayOfWeek === DayOfWeek.Thursday
76
+ @param name - Name for which an enum symbol should be returned.
77
+ @return The symbol that matches the name or 'undefined' if not found.
78
+ **/
79
+ static fromName(name) {
80
+ return this[name];
81
+ }
82
+ /**
83
+ Seals this enum so that no more symbols may be added to it. This should only be called after all symbols
84
+ have already been added to the Enum. This method also sets the 'name' property on each of the symbols.
85
+ > DayOfWeek.resolveSymbols();
86
+ **/
87
+ static resolveSymbols() {
88
+ if (this._resolvedNamesAndSymbols)
89
+ return this._resolvedNamesAndSymbols;
90
+ let result = [];
91
+ for (let key in this) {
92
+ if (this.hasOwnProperty(key)) {
93
+ let symb = this[key];
94
+ if (symb instanceof BreezeEnum) {
95
+ result.push({ name: key, symbol: symb });
96
+ this[key] = symb;
97
+ symb.name = key;
98
+ }
99
+ }
100
+ }
101
+ this._resolvedNamesAndSymbols = result;
102
+ return result;
103
+ }
104
+ /**
105
+ Returns whether an Enum contains a specified symbol.
106
+ > let symbol = DayOfWeek.Friday;
107
+ > if (DayOfWeek.contains(symbol)) {
108
+ > // do something
109
+ > }
110
+ @param sym - Object or symbol to test.
111
+ @return Whether this Enum contains the specified symbol.
112
+ **/
113
+ static contains(sym) {
114
+ if (!(sym instanceof BreezeEnum)) {
115
+ return false;
116
+ }
117
+ return this[sym.name] != null;
118
+ }
119
+ // /**
120
+ // Checks if an object is an Enum 'symbol'. Use the 'contains' method instead of this one
121
+ // if you want to test for a specific Enum.
122
+ // > if (Enum.isSymbol(DayOfWeek.Wednesday)) {
123
+ // > // do something ...
124
+ // > };
125
+ // **/
126
+ // static isSymbol(obj: any) {
127
+ // return obj instanceof BreezeEnum;
128
+ // };
129
+ /** Returns the string name of this Enum */
130
+ toString() {
131
+ return this.name;
132
+ }
133
+ /** Return enum name and symbol name */
134
+ toJSON() {
135
+ return {
136
+ _$typeName: this['_$typeName'] || this.constructor.name,
137
+ name: this.name
138
+ };
139
+ }
140
+ }
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdDRTtBQUNGLE1BQU0sT0FBTyxVQUFVO0lBU3JCLE9BQU87SUFDUCxZQUFZLGFBQXNCO1FBQ2hDLElBQUksYUFBYSxFQUFFO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxjQUFjO1FBQ25CLElBQUksSUFBSSxDQUFDLHdCQUF3QjtZQUFFLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQ3hFLElBQUksTUFBTSxHQUEwQyxFQUFFLENBQUM7UUFFdkQsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksSUFBSSxZQUFZLFVBQVUsRUFBRTtvQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2lCQUNqQjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBZTtRQUM3QixJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksVUFBVSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUdELE1BQU07SUFDTiwwRkFBMEY7SUFDMUYsNENBQTRDO0lBQzVDLGtEQUFrRDtJQUNsRCw4QkFBOEI7SUFDOUIsV0FBVztJQUNYLE1BQU07SUFDTiw4QkFBOEI7SUFDOUIsc0NBQXNDO0lBQ3RDLEtBQUs7SUFFTCwyQ0FBMkM7SUFDM0MsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLE1BQU07UUFDSixPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSyxJQUFJLENBQUMsV0FBbUIsQ0FBQyxJQUFJO1lBQ2hFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IDIwMTItMjAyMyBJZGVhQmxhZGUsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICBcclxuICogVXNlLCByZXByb2R1Y3Rpb24sIGRpc3RyaWJ1dGlvbiwgYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGlzIGNvZGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIFxyXG4gKiBjb25kaXRpb25zIG9mIHRoZSBJZGVhQmxhZGUgQnJlZXplIGxpY2Vuc2UsIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmJyZWV6ZWpzLmNvbS9saWNlbnNlXHJcbiAqXHJcbiAqIEF1dGhvcjogSmF5IFRyYWJhbmRcclxuICovXHJcblxyXG4vKipcclxuQmFzZSBjbGFzcyBmb3IgYWxsIEJyZWV6ZSBlbnVtZXJhdGlvbnMsIHN1Y2ggYXMgRW50aXR5U3RhdGUsIERhdGFUeXBlLCBGZXRjaFN0cmF0ZWd5LCBNZXJnZVN0cmF0ZWd5IGV0Yy5cclxuQSBCcmVlemUgRW51bSBpcyBhIG5hbWVzcGFjZWQgc2V0IG9mIGNvbnN0YW50IHZhbHVlcy4gIEVhY2ggRW51bSBjb25zaXN0cyBvZiBhIGdyb3VwIG9mIHJlbGF0ZWQgY29uc3RhbnRzLCBjYWxsZWQgJ3N5bWJvbHMnLlxyXG5Vbmxpa2UgZW51bXMgaW4gc29tZSBvdGhlciBlbnZpcm9ubWVudHMsIGVhY2ggJ3N5bWJvbCcgY2FuIGhhdmUgYm90aCBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzLlxyXG4+ICAgICBjbGFzcyBEYXlPZldlZWsgZXh0ZW5kcyBCcmVlemVFbnVtIHtcclxuPiAgICAgICBkYXlJbmRleDogbnVtYmVyO1xyXG4+ICAgICAgIGlzV2Vla2VuZD86IGJvb2xlYW47XHJcbj4gICAgICAgbmV4dERheSgpIHtcclxuPiAgICAgICAgIGxldCBuZXh0SW5kZXggPSAodGhpcy5kYXlJbmRleCArIDEpICUgNztcclxuPiAgICAgICAgIHJldHVybiBEYXlPZldlZWsuZ2V0U3ltYm9scygpW25leHRJbmRleF07XHJcbj4gICAgICAgfVxyXG4+XHJcbj4gICAgICAgc3RhdGljIE1vbmRheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDB9KTtcclxuPiAgICAgICBzdGF0aWMgVHVlc2RheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDEgfSk7XHJcbj4gICAgICAgc3RhdGljIFdlZG5lc2RheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDIgfSk7XHJcbj4gICAgICAgc3RhdGljIFRodXJzZGF5ID0gbmV3IERheU9mV2VlayggeyBkYXlJbmRleDogMyB9KTtcclxuPiAgICAgICBzdGF0aWMgRnJpZGF5ID0gbmV3IERheU9mV2VlayggeyBkYXlJbmRleDogNCB9KTtcclxuPiAgICAgICBzdGF0aWMgU2F0dXJkYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiA1LCBpc1dlZWtlbmQ6IHRydWUgfSk7XHJcbj4gICAgICAgc3RhdGljIFN1bmRheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDYsIGlzV2Vla2VuZDogdHJ1ZSB9KTtcclxuPiAgICAgfVxyXG4+XHJcbj4gICAgIGRlc2NyaWJlKFwiRGF5T2ZXZWVrXCIsICgpID0+IHtcclxuPiAgICAgICB0ZXN0KFwic2hvdWxkIHN1cHBvcnQgZnVsbCBlbnVtIGNhcGFiaWxpdGllc1wiLCBmdW5jdGlvbigpIHtcclxuPiAgICAgICAgIC8vIC8vIGN1c3RvbSBtZXRob2RzXHJcbj4gICAgICAgICBsZXQgZG93U3ltYm9scyA9IERheU9mV2Vlay5nZXRTeW1ib2xzKCk7XHJcbj4gICAgICAgICBleHBlY3QoZG93U3ltYm9scy5sZW5ndGgpLnRvQmUoNyk7XHJcbj4gICAgICAgICBleHBlY3QoRGF5T2ZXZWVrLk1vbmRheS5uZXh0RGF5KCkpLnRvQmUoRGF5T2ZXZWVrLlR1ZXNkYXkpO1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5TdW5kYXkubmV4dERheSgpKS50b0JlKERheU9mV2Vlay5Nb25kYXkpO1xyXG4+ICAgICAgIC8vIC8vIGN1c3RvbSBwcm9wZXJ0aWVzXHJcbj4gICAgICAgICBleHBlY3QoRGF5T2ZXZWVrLlR1ZXNkYXkuaXNXZWVrZW5kKS50b0JlKHVuZGVmaW5lZCk7XHJcbj4gICAgICAgICBleHBlY3QoRGF5T2ZXZWVrLlNhdHVyZGF5LmlzV2Vla2VuZCkudG9CZSh0cnVlKTtcclxuPiAgICAgICAvLyAvLyBTdGFuZGFyZCBlbnVtIGNhcGFiaWxpdGllc1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5UaHVyc2RheSBpbnN0YW5jZW9mIERheU9mV2VlaykudG9CZSh0cnVlKTtcclxuPiAgICAgICAgIGV4cGVjdChCcmVlemVFbnVtLmlzU3ltYm9sKERheU9mV2Vlay5XZWRuZXNkYXkpKS50b0JlKHRydWUpO1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5jb250YWlucyhEYXlPZldlZWsuVGh1cnNkYXkpKS50b0JlKHRydWUpO1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5GcmlkYXkudG9TdHJpbmcoKSkudG9CZShcIkZyaWRheVwiKTtcclxuPiAgICAgICB9KTtcclxuPiAgIH0pO1xyXG5Ob3RlIHRoYXQgd2UgaGF2ZSBFcnJvclsneCddID0gLi4uIGluIHNvbWUgcGxhY2VzIGluIHRoZSBjb2RlIHRvIHByZXZlbnQgVGVyc2VyIGZyb20gb3B0aW1pemluZyBvdXQgc29tZSBpbXBvcnRhbnQgY2FsbHMuXHJcbkBkeW5hbWljXHJcbiovXHJcbmV4cG9ydCBjbGFzcyBCcmVlemVFbnVtIHtcclxuICAvLyAvLyBUT0RPOiB0aGluayBhYm91dCBDb21wb3NpdGVFbnVtIChmbGFncyBpbXBsKS5cclxuICAvKiogVGhlIG5hbWUgb2YgdGhpcyBzeW1ib2wgKi9cclxuICBkZWNsYXJlIG5hbWU6IHN0cmluZztcclxuICAvKiogVHlwZSBvZiB0aGUgZW51bTsgc2V0IGluIHByb3RvdHlwZSBvZiBlYWNoIGVudW0gKi9cclxuICBkZWNsYXJlIF8kdHlwZU5hbWU6IHN0cmluZztcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgX3Jlc29sdmVkTmFtZXNBbmRTeW1ib2xzOiB7IG5hbWU6IHN0cmluZywgc3ltYm9sOiBCcmVlemVFbnVtIH1bXTtcclxuXHJcbiAgLyoqICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByb3BlcnRpZXNPYmo/OiBPYmplY3QpIHtcclxuICAgIGlmIChwcm9wZXJ0aWVzT2JqKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXNPYmopLmZvckVhY2goKGtleSkgPT4gdGhpc1trZXldID0gcHJvcGVydGllc09ialtrZXldKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYWxsIG9mIHRoZSBzeW1ib2xzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBFbnVtLlxyXG4gID4gICAgIGxldCBzeW1ib2xzID0gRGF5T2ZXZWVrLmdldFN5bWJvbHMoKTtcclxuICBAcmV0dXJuIEFsbCBvZiB0aGUgc3ltYm9scyBjb250YWluZWQgd2l0aGluIHRoaXMgRW51bS5cclxuICAqKi9cclxuICBzdGF0aWMgZ2V0U3ltYm9scygpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc29sdmVTeW1ib2xzKCkubWFwKGtzID0+IGtzLnN5bWJvbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHRoZSBuYW1lcyBvZiBhbGwgb2YgdGhlIHN5bWJvbHMgY29udGFpbmVkIHdpdGhpbiB0aGlzIEVudW0uXHJcbiAgPiAgICAgbGV0IHN5bWJvbHMgPSBEYXlPZldlZWsuZ2V0TmFtZXMoKTtcclxuICBAcmV0dXJuICBBbGwgb2YgdGhlIG5hbWVzIG9mIHRoZSBzeW1ib2xzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBFbnVtLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBnZXROYW1lcygpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc29sdmVTeW1ib2xzKCkubWFwKGtzID0+IGtzLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhbiBFbnVtIHN5bWJvbCBnaXZlbiBpdHMgbmFtZS5cclxuICA+ICAgICBsZXQgZGF5T2ZXZWVrID0gRGF5T2ZXZWVrLmZyb20oXCJUaHVyc2RheVwiKTtcclxuICA+ICAgICAvLyBub3dkYXlPZldlZWsgPT09IERheU9mV2Vlay5UaHVyc2RheVxyXG4gIEBwYXJhbSBuYW1lIC0gTmFtZSBmb3Igd2hpY2ggYW4gZW51bSBzeW1ib2wgc2hvdWxkIGJlIHJldHVybmVkLlxyXG4gIEByZXR1cm4gVGhlIHN5bWJvbCB0aGF0IG1hdGNoZXMgdGhlIG5hbWUgb3IgJ3VuZGVmaW5lZCcgaWYgbm90IGZvdW5kLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBmcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzW25hbWVdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgU2VhbHMgdGhpcyBlbnVtIHNvIHRoYXQgbm8gbW9yZSBzeW1ib2xzIG1heSBiZSBhZGRlZCB0byBpdC4gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYWxsIHN5bWJvbHNcclxuICBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgRW51bS4gVGhpcyBtZXRob2QgYWxzbyBzZXRzIHRoZSAnbmFtZScgcHJvcGVydHkgb24gZWFjaCBvZiB0aGUgc3ltYm9scy5cclxuICA+ICAgICBEYXlPZldlZWsucmVzb2x2ZVN5bWJvbHMoKTtcclxuICAqKi9cclxuICBzdGF0aWMgcmVzb2x2ZVN5bWJvbHMoKSB7XHJcbiAgICBpZiAodGhpcy5fcmVzb2x2ZWROYW1lc0FuZFN5bWJvbHMpIHJldHVybiB0aGlzLl9yZXNvbHZlZE5hbWVzQW5kU3ltYm9scztcclxuICAgIGxldCByZXN1bHQ6IHtuYW1lOiBzdHJpbmcsIHN5bWJvbDogQnJlZXplRW51bSB9W10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcykge1xyXG4gICAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgbGV0IHN5bWIgPSB0aGlzW2tleV07XHJcbiAgICAgICAgaWYgKHN5bWIgaW5zdGFuY2VvZiBCcmVlemVFbnVtKSB7XHJcbiAgICAgICAgICByZXN1bHQucHVzaCggeyBuYW1lOiBrZXksIHN5bWJvbDogc3ltYiB9KTtcclxuICAgICAgICAgIHRoaXNba2V5XSA9IHN5bWI7XHJcbiAgICAgICAgICBzeW1iLm5hbWUgPSBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yZXNvbHZlZE5hbWVzQW5kU3ltYm9scyA9IHJlc3VsdDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHdoZXRoZXIgYW4gRW51bSBjb250YWlucyBhIHNwZWNpZmllZCBzeW1ib2wuXHJcbiAgPiAgICAgbGV0IHN5bWJvbCA9IERheU9mV2Vlay5GcmlkYXk7XHJcbiAgPiAgICAgaWYgKERheU9mV2Vlay5jb250YWlucyhzeW1ib2wpKSB7XHJcbiAgPiAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gID4gICAgIH1cclxuICBAcGFyYW0gc3ltIC0gT2JqZWN0IG9yIHN5bWJvbCB0byB0ZXN0LlxyXG4gIEByZXR1cm4gV2hldGhlciB0aGlzIEVudW0gY29udGFpbnMgdGhlIHNwZWNpZmllZCBzeW1ib2wuXHJcbiAgKiovXHJcbiAgc3RhdGljIGNvbnRhaW5zKHN5bTogQnJlZXplRW51bSkge1xyXG4gICAgaWYgKCEoc3ltIGluc3RhbmNlb2YgQnJlZXplRW51bSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzW3N5bS5uYW1lXSAhPSBudWxsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIC8qKlxyXG4gIC8vIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYW4gRW51bSAnc3ltYm9sJy4gVXNlIHRoZSAnY29udGFpbnMnIG1ldGhvZCBpbnN0ZWFkIG9mIHRoaXMgb25lIFxyXG4gIC8vIGlmIHlvdSB3YW50IHRvIHRlc3QgZm9yIGEgc3BlY2lmaWMgRW51bS4gXHJcbiAgLy8gPiAgICAgaWYgKEVudW0uaXNTeW1ib2woRGF5T2ZXZWVrLldlZG5lc2RheSkpIHtcclxuICAvLyA+ICAgICAgIC8vIGRvIHNvbWV0aGluZyAuLi5cclxuICAvLyA+ICAgICB9O1xyXG4gIC8vICoqL1xyXG4gIC8vIHN0YXRpYyBpc1N5bWJvbChvYmo6IGFueSkge1xyXG4gIC8vICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEJyZWV6ZUVudW07XHJcbiAgLy8gfTtcclxuXHJcbiAgLyoqIFJldHVybnMgdGhlIHN0cmluZyBuYW1lIG9mIHRoaXMgRW51bSAqL1xyXG4gIHRvU3RyaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm4gZW51bSBuYW1lIGFuZCBzeW1ib2wgbmFtZSAqL1xyXG4gIHRvSlNPTigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIF8kdHlwZU5hbWU6IHRoaXNbJ18kdHlwZU5hbWUnXSB8fCAodGhpcy5jb25zdHJ1Y3RvciBhcyBhbnkpLm5hbWUsXHJcbiAgICAgIG5hbWU6IHRoaXMubmFtZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuIl19
@@ -0,0 +1,256 @@
1
+ import { core } from './core';
2
+ import { assertParam } from './assert-param';
3
+ function publishCore(that, data, errorCallback) {
4
+ let subscribers = that._subscribers;
5
+ if (!subscribers)
6
+ return true;
7
+ // subscribers from outer scope.
8
+ subscribers.forEach(function (s) {
9
+ try {
10
+ s.callback(data);
11
+ }
12
+ catch (e) {
13
+ e.context = "unable to publish on topic: " + that.name;
14
+ if (errorCallback) {
15
+ errorCallback(e);
16
+ }
17
+ else if (that._defaultErrorCallback) {
18
+ that._defaultErrorCallback(e);
19
+ }
20
+ else {
21
+ fallbackErrorHandler(e);
22
+ }
23
+ }
24
+ });
25
+ }
26
+ function fallbackErrorHandler(e) {
27
+ // TODO: maybe log this
28
+ // for now do nothing;
29
+ }
30
+ /**
31
+ Class to support basic event publication and subscription semantics.
32
+ @dynamic
33
+ **/
34
+ export class BreezeEvent {
35
+ /**
36
+ Constructor for an Event
37
+ > salaryEvent = new BreezeEvent("salaryEvent", person);
38
+ @param name - The name of the event.
39
+ @param publisher - The object that will be doing the publication. i.e. the object to which this event is attached.
40
+ @param defaultErrorCallback - Function to call when an error occurs during subscription execution.
41
+ If omitted then subscriber notification failures will be ignored.
42
+ **/
43
+ constructor(name, publisher, defaultErrorCallback) {
44
+ /**
45
+ Unsubscribe from this event.
46
+ > // Assume order is a preexisting 'order' entity
47
+ > let token = order.entityAspect.propertyChanged.subscribe(function (pcEvent) {
48
+ > // do something
49
+ > });
50
+ > // sometime later
51
+ > order.entityAspect.propertyChanged.unsubscribe(token);
52
+ @param unsubKey - The value returned from the 'subscribe' method may be used to unsubscribe here.
53
+ @return Whether unsubscription occured. This will return false if already unsubscribed or if the key simply
54
+ cannot be found.
55
+ **/
56
+ this.unsubscribe = function (unsubKey) {
57
+ if (!this._subscribers)
58
+ return false;
59
+ let subs = this._subscribers;
60
+ let ix = core.arrayIndexOf(subs, function (s) {
61
+ return s.unsubKey === unsubKey;
62
+ });
63
+ if (ix !== -1) {
64
+ subs.splice(ix, 1);
65
+ if (subs.length === 0) {
66
+ this._subscribers = null;
67
+ }
68
+ return true;
69
+ }
70
+ else {
71
+ return false;
72
+ }
73
+ };
74
+ assertParam(name, "eventName").isNonEmptyString().check();
75
+ assertParam(publisher, "publisher").isObject().check();
76
+ this.name = name;
77
+ // register the name
78
+ BreezeEvent.__eventNameMap[name] = true;
79
+ this.publisher = publisher;
80
+ if (defaultErrorCallback) {
81
+ this._defaultErrorCallback = defaultErrorCallback;
82
+ }
83
+ }
84
+ /**
85
+ Publish data for this event.
86
+ > // Assume 'salaryEvent' is previously constructed Event
87
+ > salaryEvent.publish( { eventType: "payRaise", amount: 100 });
88
+
89
+ This event can also be published asychronously
90
+ > salaryEvent.publish( { eventType: "payRaise", amount: 100 }, true);
91
+
92
+ And we can add a handler in case the subscriber 'mishandles' the event.
93
+ > salaryEvent.publish( { eventType: "payRaise", amount: 100 }, true, function(error) {
94
+ > // do something with the 'error' object
95
+ > });
96
+ @param data - Data to publish
97
+ @param publishAsync - (default=false) Whether to publish asynchonously or not.
98
+ @param errorCallback - Function to be called for any errors that occur during publication. If omitted,
99
+ errors will be eaten.
100
+ @return false if event is disabled; true otherwise.
101
+ **/
102
+ publish(data, publishAsync = false, errorCallback) {
103
+ if (!BreezeEvent._isEnabled(this.name, this.publisher))
104
+ return false;
105
+ if (publishAsync === true) {
106
+ setTimeout(publishCore, 0, this, data, errorCallback);
107
+ }
108
+ else {
109
+ publishCore(this, data, errorCallback);
110
+ }
111
+ return true;
112
+ }
113
+ /**
114
+ Publish data for this event asynchronously.
115
+ > // Assume 'salaryEvent' is previously constructed Event
116
+ > salaryEvent.publishAsync( { eventType: "payRaise", amount: 100 });
117
+
118
+ And we can add a handler in case the subscriber 'mishandles' the event.
119
+ > salaryEvent.publishAsync( { eventType: "payRaise", amount: 100 }, function(error) {
120
+ > // do something with the 'error' object
121
+ > });
122
+ @param data - Data to publish
123
+ @param errorCallback - Function to be called for any errors that occur during publication. If omitted,
124
+ errors will be eaten.
125
+ **/
126
+ publishAsync(data, errorCallback) {
127
+ this.publish(data, true, errorCallback);
128
+ }
129
+ /**
130
+ Subscribe to this event.
131
+ > // Assume 'salaryEvent' is previously constructed Event
132
+ > salaryEvent.subscribe(function (eventArgs) {
133
+ > if (eventArgs.eventType === "payRaise") {
134
+ > // do something
135
+ > }
136
+ > });
137
+
138
+ There are several built in Breeze events, such as [[EntityAspect.propertyChanged]], [[EntityAspect.validationErrorsChanged]] as well.
139
+ > // Assume order is a preexisting 'order' entity
140
+ > order.entityAspect.propertyChanged.subscribe(function (pcEvent) {
141
+ > if ( pcEvent.propertyName === "OrderDate") {
142
+ > // do something
143
+ > }
144
+ > });
145
+ @param callback- Function to be called whenever 'data' is published for this event.
146
+ @param callback.data - {Object} Whatever 'data' was published. This should be documented on the specific event.
147
+ @return This is a key for 'unsubscription'. It can be passed to the 'unsubscribe' method.
148
+ **/
149
+ subscribe(callback) {
150
+ if (!this._subscribers) {
151
+ this._subscribers = [];
152
+ }
153
+ let unsubKey = BreezeEvent.__nextUnsubKey;
154
+ this._subscribers.push({ unsubKey: unsubKey, callback: callback });
155
+ ++BreezeEvent.__nextUnsubKey;
156
+ return unsubKey;
157
+ }
158
+ /** remove all subscribers */
159
+ clear() {
160
+ this._subscribers = null;
161
+ }
162
+ /** event bubbling - document later. */
163
+ // null or undefined 'getParentFn' means Event does not need to bubble i.e. that it is always enabled - .
164
+ static bubbleEvent(target, getParentFn) {
165
+ target._getEventParent = getParentFn || null;
166
+ }
167
+ /**
168
+ Enables or disables the named event for an object and all of its children.
169
+ > BreezeEvent.enable(“propertyChanged”, myEntityManager, false)
170
+
171
+ will disable all EntityAspect.propertyChanged events within a EntityManager.
172
+ > BreezeEvent.enable(“propertyChanged”, myEntityManager, true)
173
+
174
+ will enable all EntityAspect.propertyChanged events within a EntityManager.
175
+ > BreezeEvent.enable(“propertyChanged”, myEntity.entityAspect, false)
176
+
177
+ will disable EntityAspect.propertyChanged events for a specific entity.
178
+ > BreezeEvent.enable(“propertyChanged”, myEntity.entityAspect, null)
179
+
180
+ will removes any enabling / disabling at the entity aspect level so now any 'Event.enable' calls at the EntityManager level,
181
+ made either previously or in the future, will control notification.
182
+ > BreezeEvent.enable(“validationErrorsChanged”, myEntityManager, function(em) {
183
+ > return em.customTag === “blue”;
184
+ > })
185
+
186
+
187
+ will either enable or disable myEntityManager based on the current value of a ‘customTag’ property on myEntityManager.
188
+ Note that this is dynamic, changing the customTag value will cause events to be enabled or disabled immediately.
189
+ @param eventName - The name of the event.
190
+ @param target - The object at which enabling or disabling will occur. All event notifications that occur to this object or
191
+ children of this object will be enabled or disabled.
192
+ @param isEnabled - A boolean, a null or a function that returns either a boolean or a null.
193
+ **/
194
+ static enable(eventName, obj, isEnabled) {
195
+ assertParam(eventName, "eventName").isNonEmptyString().check();
196
+ assertParam(obj, "obj").isObject().check();
197
+ assertParam(isEnabled, "isEnabled").isBoolean().isOptional().or().isFunction().check();
198
+ let ob = obj;
199
+ if (!ob._$eventMap) {
200
+ ob._$eventMap = {};
201
+ }
202
+ ob._$eventMap[eventName] = isEnabled;
203
+ }
204
+ /**
205
+ Returns whether for a specific event and a specific object and its children, notification is enabled or disabled or not set.
206
+ > BreezeEvent.isEnabled(“propertyChanged”, myEntityManager)
207
+ >
208
+ @param eventName - The name of the event.
209
+ @param target - The object for which we want to know if notifications are enabled.
210
+ @return A null is returned if this value has not been set.
211
+ **/
212
+ static isEnabled(eventName, obj) {
213
+ assertParam(eventName, "eventName").isNonEmptyString().check();
214
+ assertParam(obj, "obj").isObject().check();
215
+ // null is ok - it just means that the object is at the top level.
216
+ if (obj._getEventParent === undefined) {
217
+ throw new Error("This object does not support event enabling/disabling");
218
+ }
219
+ // return ctor._isEnabled(getFullEventName(eventName), obj);
220
+ return BreezeEvent._isEnabled(eventName, 3);
221
+ }
222
+ }
223
+ /** @hidden @internal */
224
+ BreezeEvent.__eventNameMap = {};
225
+ /** @hidden @internal */
226
+ BreezeEvent.__nextUnsubKey = 1;
227
+ /** @hidden @internal */
228
+ BreezeEvent._isEnabled = function (eventName, obj) {
229
+ let isEnabled = null;
230
+ let ob = obj;
231
+ let eventMap = ob._$eventMap;
232
+ if (eventMap) {
233
+ isEnabled = eventMap[eventName];
234
+ }
235
+ if (isEnabled != null) {
236
+ if (typeof isEnabled === 'function') {
237
+ return !!isEnabled(obj);
238
+ }
239
+ else {
240
+ return !!isEnabled;
241
+ }
242
+ }
243
+ else {
244
+ let parent = ob._getEventParent && ob._getEventParent();
245
+ if (parent) {
246
+ return !!this._isEnabled(eventName, parent);
247
+ }
248
+ else {
249
+ // default if not explicitly disabled.
250
+ return true;
251
+ }
252
+ }
253
+ };
254
+ // legacy support - deliberately not typed
255
+ core.Event = BreezeEvent;
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLFNBQVMsV0FBVyxDQUFJLElBQW9CLEVBQUUsSUFBTyxFQUFFLGFBQWlDO0lBQ3RGLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDcEMsSUFBSSxDQUFDLFdBQVc7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM5QixnQ0FBZ0M7SUFDaEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDN0IsSUFBSTtZQUNGLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEI7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLENBQUMsQ0FBQyxPQUFPLEdBQUcsOEJBQThCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN2RCxJQUFJLGFBQWEsRUFBRTtnQkFDakIsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO2lCQUFNLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUNyQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0I7aUJBQU07Z0JBQ0wsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekI7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsQ0FBUTtJQUNwQyx1QkFBdUI7SUFDdkIsc0JBQXNCO0FBQ3hCLENBQUM7QUFTRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQWdCdEI7Ozs7Ozs7T0FPRztJQUNILFlBQVksSUFBWSxFQUFFLFNBQWlCLEVBQUUsb0JBQXdDO1FBMkZyRjs7Ozs7Ozs7Ozs7V0FXRztRQUNILGdCQUFXLEdBQUcsVUFBVSxRQUFnQjtZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDckMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUM3QixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7aUJBQzFCO2dCQUNELE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtRQUNILENBQUMsQ0FBQztRQXJIQSxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUQsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV2RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixvQkFBb0I7UUFDcEIsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxvQkFBb0IsRUFBRTtZQUN4QixJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0gsT0FBTyxDQUFDLElBQU8sRUFBRSxlQUF3QixLQUFLLEVBQUUsYUFBaUM7UUFFL0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFckUsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQ3pCLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNMLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsWUFBWSxDQUFDLElBQU8sRUFBRSxhQUFnQztRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUJHO0lBQ0gsU0FBUyxDQUFDLFFBQTBCO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbkUsRUFBRSxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQzdCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUErQkQsNkJBQTZCO0lBQzdCLEtBQUs7UUFDSCxJQUFJLENBQUMsWUFBWSxHQUFRLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsdUNBQXVDO0lBRXZDLHlHQUF5RztJQUN6RyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQVcsRUFBRSxXQUF5QjtRQUN2RCxNQUFNLENBQUMsZUFBZSxHQUFHLFdBQVcsSUFBSSxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBCRztJQUNKLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBaUIsRUFBRSxHQUFXLEVBQUUsU0FBMEM7UUFDckYsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9ELFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0MsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2RixJQUFJLEVBQUUsR0FBUSxHQUFHLENBQUM7UUFDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUU7WUFDbEIsRUFBRSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFDRCxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBaUIsRUFBRSxHQUFXO1FBQzdDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvRCxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNDLGtFQUFrRTtRQUNsRSxJQUFVLEdBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztTQUMxRTtRQUNELDREQUE0RDtRQUM1RCxPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O0FBbE5ELHdCQUF3QjtBQUNqQiwwQkFBYyxHQUFHLEVBQUUsQ0FBQztBQUMzQix3QkFBd0I7QUFDakIsMEJBQWMsR0FBRyxDQUFDLENBQUM7QUFpTjFCLHdCQUF3QjtBQUNqQixzQkFBVSxHQUFHLFVBQVUsU0FBaUIsRUFBRSxHQUFXO0lBQzFELElBQUksU0FBUyxHQUFRLElBQUksQ0FBQztJQUMxQixJQUFJLEVBQUUsR0FBUSxHQUFHLENBQUM7SUFDbEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztJQUM3QixJQUFJLFFBQVEsRUFBRTtRQUNaLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDakM7SUFDRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7UUFDckIsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUU7WUFDbkMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO2FBQU07WUFDTCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDcEI7S0FDRjtTQUFNO1FBQ0wsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEQsSUFBSSxNQUFNLEVBQUU7WUFDVixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM3QzthQUFNO1lBQ0wsc0NBQXNDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtBQUNILENBQUMsQ0FBQztBQUtKLDBDQUEwQztBQUN6QyxJQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcmUgfSBmcm9tICcuL2NvcmUnO1xyXG5pbXBvcnQgeyBhc3NlcnRQYXJhbSB9IGZyb20gJy4vYXNzZXJ0LXBhcmFtJztcclxuXHJcbmZ1bmN0aW9uIHB1Ymxpc2hDb3JlPFQ+KHRoYXQ6IEJyZWV6ZUV2ZW50PFQ+LCBkYXRhOiBULCBlcnJvckNhbGxiYWNrPzogKGU6IEVycm9yKSA9PiBhbnkpIHtcclxuICBsZXQgc3Vic2NyaWJlcnMgPSB0aGF0Ll9zdWJzY3JpYmVycztcclxuICBpZiAoIXN1YnNjcmliZXJzKSByZXR1cm4gdHJ1ZTtcclxuICAvLyBzdWJzY3JpYmVycyBmcm9tIG91dGVyIHNjb3BlLlxyXG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHMpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHMuY2FsbGJhY2soZGF0YSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGUuY29udGV4dCA9IFwidW5hYmxlIHRvIHB1Ymxpc2ggb24gdG9waWM6IFwiICsgdGhhdC5uYW1lO1xyXG4gICAgICBpZiAoZXJyb3JDYWxsYmFjaykge1xyXG4gICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhhdC5fZGVmYXVsdEVycm9yQ2FsbGJhY2spIHtcclxuICAgICAgICB0aGF0Ll9kZWZhdWx0RXJyb3JDYWxsYmFjayhlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmYWxsYmFja0Vycm9ySGFuZGxlcihlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmYWxsYmFja0Vycm9ySGFuZGxlcihlOiBFcnJvcikge1xyXG4gIC8vIFRPRE86IG1heWJlIGxvZyB0aGlzXHJcbiAgLy8gZm9yIG5vdyBkbyBub3RoaW5nO1xyXG59XHJcblxyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaXB0aW9uIHtcclxuICB1bnN1YktleTogbnVtYmVyO1xyXG4gIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG5DbGFzcyB0byBzdXBwb3J0IGJhc2ljIGV2ZW50IHB1YmxpY2F0aW9uIGFuZCBzdWJzY3JpcHRpb24gc2VtYW50aWNzLlxyXG5AZHluYW1pY1xyXG4qKi9cclxuZXhwb3J0IGNsYXNzIEJyZWV6ZUV2ZW50PFQ+IHtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgX19ldmVudE5hbWVNYXAgPSB7fTtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgX19uZXh0VW5zdWJLZXkgPSAxO1xyXG4gIC8qKiBUaGUgbmFtZSBvZiB0aGlzIEV2ZW50ICovXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIC8qKiBUaGUgb2JqZWN0IGRvaW5nIHRoZSBwdWJsaWNhdGlvbi4gaS5lLiB0aGUgb2JqZWN0IHRvIHdoaWNoIHRoaXMgZXZlbnQgaXMgYXR0YWNoZWQuICovXHJcbiAgcHVibGlzaGVyOiBPYmplY3Q7XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9zdWJzY3JpYmVyczogU3Vic2NyaXB0aW9uW107XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX2RlZmF1bHRFcnJvckNhbGxiYWNrOiAoZTogRXJyb3IpID0+IGFueTtcclxuXHJcblxyXG4gIC8qKlxyXG4gIENvbnN0cnVjdG9yIGZvciBhbiBFdmVudFxyXG4gID4gICAgIHNhbGFyeUV2ZW50ID0gbmV3IEJyZWV6ZUV2ZW50KFwic2FsYXJ5RXZlbnRcIiwgcGVyc29uKTtcclxuICBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cclxuICBAcGFyYW0gcHVibGlzaGVyIC0gVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgZG9pbmcgdGhlIHB1YmxpY2F0aW9uLiBpLmUuIHRoZSBvYmplY3QgdG8gd2hpY2ggdGhpcyBldmVudCBpcyBhdHRhY2hlZC5cclxuICBAcGFyYW0gZGVmYXVsdEVycm9yQ2FsbGJhY2sgLSBGdW5jdGlvbiB0byBjYWxsIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBzdWJzY3JpcHRpb24gZXhlY3V0aW9uLiBcclxuICBJZiBvbWl0dGVkIHRoZW4gc3Vic2NyaWJlciBub3RpZmljYXRpb24gZmFpbHVyZXMgd2lsbCBiZSBpZ25vcmVkLlxyXG4gICoqL1xyXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgcHVibGlzaGVyOiBPYmplY3QsIGRlZmF1bHRFcnJvckNhbGxiYWNrPzogKGU6IEVycm9yKSA9PiBhbnkpIHtcclxuICAgIGFzc2VydFBhcmFtKG5hbWUsIFwiZXZlbnROYW1lXCIpLmlzTm9uRW1wdHlTdHJpbmcoKS5jaGVjaygpO1xyXG4gICAgYXNzZXJ0UGFyYW0ocHVibGlzaGVyLCBcInB1Ymxpc2hlclwiKS5pc09iamVjdCgpLmNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIC8vIHJlZ2lzdGVyIHRoZSBuYW1lXHJcbiAgICBCcmVlemVFdmVudC5fX2V2ZW50TmFtZU1hcFtuYW1lXSA9IHRydWU7XHJcbiAgICB0aGlzLnB1Ymxpc2hlciA9IHB1Ymxpc2hlcjtcclxuICAgIGlmIChkZWZhdWx0RXJyb3JDYWxsYmFjaykge1xyXG4gICAgICB0aGlzLl9kZWZhdWx0RXJyb3JDYWxsYmFjayA9IGRlZmF1bHRFcnJvckNhbGxiYWNrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUHVibGlzaCBkYXRhIGZvciB0aGlzIGV2ZW50LlxyXG4gID4gICAgICAvLyBBc3N1bWUgJ3NhbGFyeUV2ZW50JyBpcyBwcmV2aW91c2x5IGNvbnN0cnVjdGVkIEV2ZW50XHJcbiAgPiAgICAgIHNhbGFyeUV2ZW50LnB1Ymxpc2goIHsgZXZlbnRUeXBlOiBcInBheVJhaXNlXCIsIGFtb3VudDogMTAwIH0pO1xyXG5cclxuICBUaGlzIGV2ZW50IGNhbiBhbHNvIGJlIHB1Ymxpc2hlZCBhc3ljaHJvbm91c2x5XHJcbiAgPiAgICAgIHNhbGFyeUV2ZW50LnB1Ymxpc2goIHsgZXZlbnRUeXBlOiBcInBheVJhaXNlXCIsIGFtb3VudDogMTAwIH0sIHRydWUpO1xyXG5cclxuICBBbmQgd2UgY2FuIGFkZCBhIGhhbmRsZXIgaW4gY2FzZSB0aGUgc3Vic2NyaWJlciAnbWlzaGFuZGxlcycgdGhlIGV2ZW50LlxyXG4gID4gICAgICBzYWxhcnlFdmVudC5wdWJsaXNoKCB7IGV2ZW50VHlwZTogXCJwYXlSYWlzZVwiLCBhbW91bnQ6IDEwMCB9LCB0cnVlLCBmdW5jdGlvbihlcnJvcikge1xyXG4gID4gICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlICdlcnJvcicgb2JqZWN0XHJcbiAgPiAgICAgIH0pO1xyXG4gIEBwYXJhbSBkYXRhIC0gRGF0YSB0byBwdWJsaXNoXHJcbiAgQHBhcmFtIHB1Ymxpc2hBc3luYyAtIChkZWZhdWx0PWZhbHNlKSBXaGV0aGVyIHRvIHB1Ymxpc2ggYXN5bmNob25vdXNseSBvciBub3QuXHJcbiAgQHBhcmFtIGVycm9yQ2FsbGJhY2sgLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGFueSBlcnJvcnMgdGhhdCBvY2N1ciBkdXJpbmcgcHVibGljYXRpb24uIElmIG9taXR0ZWQsXHJcbiAgZXJyb3JzIHdpbGwgYmUgZWF0ZW4uXHJcbiAgQHJldHVybiBmYWxzZSBpZiBldmVudCBpcyBkaXNhYmxlZDsgdHJ1ZSBvdGhlcndpc2UuXHJcbiAgKiovXHJcbiAgcHVibGlzaChkYXRhOiBULCBwdWJsaXNoQXN5bmM6IGJvb2xlYW4gPSBmYWxzZSwgZXJyb3JDYWxsYmFjaz86IChlOiBFcnJvcikgPT4gYW55KSB7XHJcblxyXG4gICAgaWYgKCFCcmVlemVFdmVudC5faXNFbmFibGVkKHRoaXMubmFtZSwgdGhpcy5wdWJsaXNoZXIpKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKHB1Ymxpc2hBc3luYyA9PT0gdHJ1ZSkge1xyXG4gICAgICBzZXRUaW1lb3V0KHB1Ymxpc2hDb3JlLCAwLCB0aGlzLCBkYXRhLCBlcnJvckNhbGxiYWNrKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHB1Ymxpc2hDb3JlKHRoaXMsIGRhdGEsIGVycm9yQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBQdWJsaXNoIGRhdGEgZm9yIHRoaXMgZXZlbnQgYXN5bmNocm9ub3VzbHkuXHJcbiAgPiAgICAgIC8vIEFzc3VtZSAnc2FsYXJ5RXZlbnQnIGlzIHByZXZpb3VzbHkgY29uc3RydWN0ZWQgRXZlbnRcclxuICA+ICAgICAgc2FsYXJ5RXZlbnQucHVibGlzaEFzeW5jKCB7IGV2ZW50VHlwZTogXCJwYXlSYWlzZVwiLCBhbW91bnQ6IDEwMCB9KTtcclxuXHJcbiAgQW5kIHdlIGNhbiBhZGQgYSBoYW5kbGVyIGluIGNhc2UgdGhlIHN1YnNjcmliZXIgJ21pc2hhbmRsZXMnIHRoZSBldmVudC5cclxuICA+ICAgICAgc2FsYXJ5RXZlbnQucHVibGlzaEFzeW5jKCB7IGV2ZW50VHlwZTogXCJwYXlSYWlzZVwiLCBhbW91bnQ6IDEwMCB9LCBmdW5jdGlvbihlcnJvcikge1xyXG4gID4gICAgICAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggdGhlICdlcnJvcicgb2JqZWN0XHJcbiAgPiAgICAgIH0pO1xyXG4gIEBwYXJhbSBkYXRhIC0gRGF0YSB0byBwdWJsaXNoXHJcbiAgQHBhcmFtIGVycm9yQ2FsbGJhY2sgLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQgZm9yIGFueSBlcnJvcnMgdGhhdCBvY2N1ciBkdXJpbmcgcHVibGljYXRpb24uIElmIG9taXR0ZWQsXHJcbiAgZXJyb3JzIHdpbGwgYmUgZWF0ZW4uXHJcbiAgKiovXHJcbiAgcHVibGlzaEFzeW5jKGRhdGE6IFQsIGVycm9yQ2FsbGJhY2s6IChlOiBFcnJvcikgPT4gYW55KSB7XHJcbiAgICB0aGlzLnB1Ymxpc2goZGF0YSwgdHJ1ZSwgZXJyb3JDYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBTdWJzY3JpYmUgdG8gdGhpcyBldmVudC5cclxuICA+ICAgICAgLy8gQXNzdW1lICdzYWxhcnlFdmVudCcgaXMgcHJldmlvdXNseSBjb25zdHJ1Y3RlZCBFdmVudFxyXG4gID4gICAgICBzYWxhcnlFdmVudC5zdWJzY3JpYmUoZnVuY3Rpb24gKGV2ZW50QXJncykge1xyXG4gID4gICAgICAgICAgaWYgKGV2ZW50QXJncy5ldmVudFR5cGUgPT09IFwicGF5UmFpc2VcIikge1xyXG4gID4gICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gID4gICAgICAgICAgfVxyXG4gID4gICAgICB9KTtcclxuXHJcbiAgVGhlcmUgYXJlIHNldmVyYWwgYnVpbHQgaW4gQnJlZXplIGV2ZW50cywgc3VjaCBhcyBbW0VudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWRdXSwgW1tFbnRpdHlBc3BlY3QudmFsaWRhdGlvbkVycm9yc0NoYW5nZWRdXSBhcyB3ZWxsLlxyXG4gID4gICAgICAvLyBBc3N1bWUgb3JkZXIgaXMgYSBwcmVleGlzdGluZyAnb3JkZXInIGVudGl0eVxyXG4gID4gICAgICBvcmRlci5lbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkLnN1YnNjcmliZShmdW5jdGlvbiAocGNFdmVudCkge1xyXG4gID4gICAgICAgICAgaWYgKCBwY0V2ZW50LnByb3BlcnR5TmFtZSA9PT0gXCJPcmRlckRhdGVcIikge1xyXG4gID4gICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gID4gICAgICAgICAgfVxyXG4gID4gICAgICB9KTtcclxuICBAcGFyYW0gY2FsbGJhY2stIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuZXZlciAnZGF0YScgaXMgcHVibGlzaGVkIGZvciB0aGlzIGV2ZW50LlxyXG4gIEBwYXJhbSBjYWxsYmFjay5kYXRhIC0ge09iamVjdH0gV2hhdGV2ZXIgJ2RhdGEnIHdhcyBwdWJsaXNoZWQuICBUaGlzIHNob3VsZCBiZSBkb2N1bWVudGVkIG9uIHRoZSBzcGVjaWZpYyBldmVudC5cclxuICBAcmV0dXJuIFRoaXMgaXMgYSBrZXkgZm9yICd1bnN1YnNjcmlwdGlvbicuICBJdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSAndW5zdWJzY3JpYmUnIG1ldGhvZC5cclxuICAqKi9cclxuICBzdWJzY3JpYmUoY2FsbGJhY2s6IChkYXRhOiBUKSA9PiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5fc3Vic2NyaWJlcnMpIHtcclxuICAgICAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdW5zdWJLZXkgPSBCcmVlemVFdmVudC5fX25leHRVbnN1YktleTtcclxuICAgIHRoaXMuX3N1YnNjcmliZXJzLnB1c2goeyB1bnN1YktleTogdW5zdWJLZXksIGNhbGxiYWNrOiBjYWxsYmFjayB9KTtcclxuICAgICsrQnJlZXplRXZlbnQuX19uZXh0VW5zdWJLZXk7XHJcbiAgICByZXR1cm4gdW5zdWJLZXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBVbnN1YnNjcmliZSBmcm9tIHRoaXMgZXZlbnQuXHJcbiAgPiAgICAgIC8vIEFzc3VtZSBvcmRlciBpcyBhIHByZWV4aXN0aW5nICdvcmRlcicgZW50aXR5XHJcbiAgPiAgICAgIGxldCB0b2tlbiA9IG9yZGVyLmVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQuc3Vic2NyaWJlKGZ1bmN0aW9uIChwY0V2ZW50KSB7XHJcbiAgPiAgICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nXHJcbiAgPiAgICAgIH0pO1xyXG4gID4gICAgICAvLyBzb21ldGltZSBsYXRlclxyXG4gID4gICAgICBvcmRlci5lbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkLnVuc3Vic2NyaWJlKHRva2VuKTtcclxuICBAcGFyYW0gdW5zdWJLZXkgLSBUaGUgdmFsdWUgcmV0dXJuZWQgZnJvbSB0aGUgJ3N1YnNjcmliZScgbWV0aG9kIG1heSBiZSB1c2VkIHRvIHVuc3Vic2NyaWJlIGhlcmUuXHJcbiAgQHJldHVybiBXaGV0aGVyIHVuc3Vic2NyaXB0aW9uIG9jY3VyZWQuIFRoaXMgd2lsbCByZXR1cm4gZmFsc2UgaWYgYWxyZWFkeSB1bnN1YnNjcmliZWQgb3IgaWYgdGhlIGtleSBzaW1wbHlcclxuICBjYW5ub3QgYmUgZm91bmQuXHJcbiAgKiovXHJcbiAgdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAodW5zdWJLZXk6IG51bWJlcikge1xyXG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpYmVycykgcmV0dXJuIGZhbHNlO1xyXG4gICAgbGV0IHN1YnMgPSB0aGlzLl9zdWJzY3JpYmVycztcclxuICAgIGxldCBpeCA9IGNvcmUuYXJyYXlJbmRleE9mKHN1YnMsIGZ1bmN0aW9uIChzKSB7XHJcbiAgICAgIHJldHVybiBzLnVuc3ViS2V5ID09PSB1bnN1YktleTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGl4ICE9PSAtMSkge1xyXG4gICAgICBzdWJzLnNwbGljZShpeCwgMSk7XHJcbiAgICAgIGlmIChzdWJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuX3N1YnNjcmliZXJzID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvKiogcmVtb3ZlIGFsbCBzdWJzY3JpYmVycyAqL1xyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5fc3Vic2NyaWJlcnMgPSA8YW55Pm51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogZXZlbnQgYnViYmxpbmcgLSBkb2N1bWVudCBsYXRlci4gKi9cclxuXHJcbiAgLy8gbnVsbCBvciB1bmRlZmluZWQgJ2dldFBhcmVudEZuJyBtZWFucyBFdmVudCBkb2VzIG5vdCBuZWVkIHRvIGJ1YmJsZSBpLmUuIHRoYXQgaXQgaXMgYWx3YXlzIGVuYWJsZWQgLSAuXHJcbiAgc3RhdGljIGJ1YmJsZUV2ZW50KHRhcmdldDogYW55LCBnZXRQYXJlbnRGbj86ICgoKSA9PiBhbnkpKSB7XHJcbiAgICB0YXJnZXQuX2dldEV2ZW50UGFyZW50ID0gZ2V0UGFyZW50Rm4gfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIG5hbWVkIGV2ZW50IGZvciBhbiBvYmplY3QgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4uXHJcbiAgPiAgICAgIEJyZWV6ZUV2ZW50LmVuYWJsZSjigJxwcm9wZXJ0eUNoYW5nZWTigJ0sIG15RW50aXR5TWFuYWdlciwgZmFsc2UpXHJcblxyXG4gIHdpbGwgZGlzYWJsZSBhbGwgRW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZCBldmVudHMgd2l0aGluIGEgRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgQnJlZXplRXZlbnQuZW5hYmxlKOKAnHByb3BlcnR5Q2hhbmdlZOKAnSwgbXlFbnRpdHlNYW5hZ2VyLCB0cnVlKVxyXG5cclxuICB3aWxsIGVuYWJsZSBhbGwgRW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZCBldmVudHMgd2l0aGluIGEgRW50aXR5TWFuYWdlci5cclxuICA+ICAgICAgQnJlZXplRXZlbnQuZW5hYmxlKOKAnHByb3BlcnR5Q2hhbmdlZOKAnSwgbXlFbnRpdHkuZW50aXR5QXNwZWN0LCBmYWxzZSlcclxuXHJcbiAgd2lsbCBkaXNhYmxlIEVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQgZXZlbnRzIGZvciBhIHNwZWNpZmljIGVudGl0eS5cclxuICA+ICAgICAgQnJlZXplRXZlbnQuZW5hYmxlKOKAnHByb3BlcnR5Q2hhbmdlZOKAnSwgbXlFbnRpdHkuZW50aXR5QXNwZWN0LCBudWxsKVxyXG5cclxuICB3aWxsIHJlbW92ZXMgYW55IGVuYWJsaW5nIC8gZGlzYWJsaW5nIGF0IHRoZSBlbnRpdHkgYXNwZWN0IGxldmVsIHNvIG5vdyBhbnkgJ0V2ZW50LmVuYWJsZScgY2FsbHMgYXQgdGhlIEVudGl0eU1hbmFnZXIgbGV2ZWwsXHJcbiAgbWFkZSBlaXRoZXIgcHJldmlvdXNseSBvciBpbiB0aGUgZnV0dXJlLCB3aWxsIGNvbnRyb2wgbm90aWZpY2F0aW9uLlxyXG4gID4gICAgICBCcmVlemVFdmVudC5lbmFibGUo4oCcdmFsaWRhdGlvbkVycm9yc0NoYW5nZWTigJ0sIG15RW50aXR5TWFuYWdlciwgZnVuY3Rpb24oZW0pIHtcclxuICA+ICAgICAgICAgIHJldHVybiBlbS5jdXN0b21UYWcgPT09IOKAnGJsdWXigJ07XHJcbiAgPiAgICAgIH0pXHJcblxyXG5cclxuICB3aWxsIGVpdGhlciBlbmFibGUgb3IgZGlzYWJsZSBteUVudGl0eU1hbmFnZXIgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSDigJhjdXN0b21UYWfigJkgcHJvcGVydHkgb24gbXlFbnRpdHlNYW5hZ2VyLlxyXG4gIE5vdGUgdGhhdCB0aGlzIGlzIGR5bmFtaWMsIGNoYW5naW5nIHRoZSBjdXN0b21UYWcgdmFsdWUgd2lsbCBjYXVzZSBldmVudHMgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBpbW1lZGlhdGVseS5cclxuICBAcGFyYW0gZXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxyXG4gIEBwYXJhbSB0YXJnZXQgLSBUaGUgb2JqZWN0IGF0IHdoaWNoIGVuYWJsaW5nIG9yIGRpc2FibGluZyB3aWxsIG9jY3VyLiAgQWxsIGV2ZW50IG5vdGlmaWNhdGlvbnMgdGhhdCBvY2N1ciB0byB0aGlzIG9iamVjdCBvclxyXG4gIGNoaWxkcmVuIG9mIHRoaXMgb2JqZWN0IHdpbGwgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cclxuICBAcGFyYW0gaXNFbmFibGVkIC0gQSBib29sZWFuLCBhIG51bGwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgZWl0aGVyIGEgYm9vbGVhbiBvciBhIG51bGwuXHJcbiAgKiovXHJcbiBzdGF0aWMgZW5hYmxlKGV2ZW50TmFtZTogc3RyaW5nLCBvYmo6IE9iamVjdCwgaXNFbmFibGVkOiBib29sZWFuIHwgKCh4OiBhbnkpID0+IGJvb2xlYW4pKSB7XHJcbiAgICBhc3NlcnRQYXJhbShldmVudE5hbWUsIFwiZXZlbnROYW1lXCIpLmlzTm9uRW1wdHlTdHJpbmcoKS5jaGVjaygpO1xyXG4gICAgYXNzZXJ0UGFyYW0ob2JqLCBcIm9ialwiKS5pc09iamVjdCgpLmNoZWNrKCk7XHJcbiAgICBhc3NlcnRQYXJhbShpc0VuYWJsZWQsIFwiaXNFbmFibGVkXCIpLmlzQm9vbGVhbigpLmlzT3B0aW9uYWwoKS5vcigpLmlzRnVuY3Rpb24oKS5jaGVjaygpO1xyXG4gICAgbGV0IG9iID0gPGFueT5vYmo7XHJcbiAgICBpZiAoIW9iLl8kZXZlbnRNYXApIHtcclxuICAgICAgb2IuXyRldmVudE1hcCA9IHt9O1xyXG4gICAgfVxyXG4gICAgb2IuXyRldmVudE1hcFtldmVudE5hbWVdID0gaXNFbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB3aGV0aGVyIGZvciBhIHNwZWNpZmljIGV2ZW50IGFuZCBhIHNwZWNpZmljIG9iamVjdCBhbmQgaXRzIGNoaWxkcmVuLCBub3RpZmljYXRpb24gaXMgZW5hYmxlZCBvciBkaXNhYmxlZCBvciBub3Qgc2V0LlxyXG4gID4gICAgICBCcmVlemVFdmVudC5pc0VuYWJsZWQo4oCccHJvcGVydHlDaGFuZ2Vk4oCdLCBteUVudGl0eU1hbmFnZXIpXHJcbiAgPiBcclxuICBAcGFyYW0gZXZlbnROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxyXG4gIEBwYXJhbSB0YXJnZXQgLSBUaGUgb2JqZWN0IGZvciB3aGljaCB3ZSB3YW50IHRvIGtub3cgaWYgbm90aWZpY2F0aW9ucyBhcmUgZW5hYmxlZC5cclxuICBAcmV0dXJuIEEgbnVsbCBpcyByZXR1cm5lZCBpZiB0aGlzIHZhbHVlIGhhcyBub3QgYmVlbiBzZXQuXHJcbiAgKiovXHJcbiAgc3RhdGljIGlzRW5hYmxlZChldmVudE5hbWU6IHN0cmluZywgb2JqOiBPYmplY3QpIHtcclxuICAgIGFzc2VydFBhcmFtKGV2ZW50TmFtZSwgXCJldmVudE5hbWVcIikuaXNOb25FbXB0eVN0cmluZygpLmNoZWNrKCk7XHJcbiAgICBhc3NlcnRQYXJhbShvYmosIFwib2JqXCIpLmlzT2JqZWN0KCkuY2hlY2soKTtcclxuICAgIC8vIG51bGwgaXMgb2sgLSBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlIG9iamVjdCBpcyBhdCB0aGUgdG9wIGxldmVsLlxyXG4gICAgaWYgKCg8YW55Pm9iaikuX2dldEV2ZW50UGFyZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBvYmplY3QgZG9lcyBub3Qgc3VwcG9ydCBldmVudCBlbmFibGluZy9kaXNhYmxpbmdcIik7XHJcbiAgICB9XHJcbiAgICAvLyByZXR1cm4gY3Rvci5faXNFbmFibGVkKGdldEZ1bGxFdmVudE5hbWUoZXZlbnROYW1lKSwgb2JqKTtcclxuICAgIHJldHVybiBCcmVlemVFdmVudC5faXNFbmFibGVkKGV2ZW50TmFtZSwgMyk7XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgX2lzRW5hYmxlZCA9IGZ1bmN0aW9uIChldmVudE5hbWU6IHN0cmluZywgb2JqOiBPYmplY3QpIHtcclxuICAgIGxldCBpc0VuYWJsZWQ6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgb2IgPSA8YW55Pm9iajtcclxuICAgIGxldCBldmVudE1hcCA9IG9iLl8kZXZlbnRNYXA7XHJcbiAgICBpZiAoZXZlbnRNYXApIHtcclxuICAgICAgaXNFbmFibGVkID0gZXZlbnRNYXBbZXZlbnROYW1lXTtcclxuICAgIH1cclxuICAgIGlmIChpc0VuYWJsZWQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodHlwZW9mIGlzRW5hYmxlZCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiAhIWlzRW5hYmxlZChvYmopO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhIWlzRW5hYmxlZDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHBhcmVudCA9IG9iLl9nZXRFdmVudFBhcmVudCAmJiBvYi5fZ2V0RXZlbnRQYXJlbnQoKTtcclxuICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuX2lzRW5hYmxlZChldmVudE5hbWUsIHBhcmVudCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZGVmYXVsdCBpZiBub3QgZXhwbGljaXRseSBkaXNhYmxlZC5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG5cclxufVxyXG5cclxuLy8gbGVnYWN5IHN1cHBvcnQgLSBkZWxpYmVyYXRlbHkgbm90IHR5cGVkXHJcbihjb3JlIGFzIGFueSkuRXZlbnQgPSBCcmVlemVFdmVudDsiXX0=
@@ -0,0 +1,41 @@
1
+ import { core } from './core';
2
+ import { assertConfig } from './assert-param';
3
+ import { config, InterfaceDef } from './config';
4
+ /** Registers adapters used by Breeze */
5
+ export class InterfaceRegistry {
6
+ constructor() {
7
+ this.ajax = new InterfaceDef("ajax");
8
+ this.modelLibrary = new InterfaceDef("modelLibrary");
9
+ this.dataService = new InterfaceDef("dataService");
10
+ this.uriBuilder = new InterfaceDef("uriBuilder");
11
+ }
12
+ }
13
+ config.interfaceRegistry = new InterfaceRegistry();
14
+ config._interfaceRegistry = config.interfaceRegistry;
15
+ config.interfaceRegistry.modelLibrary.getDefaultInstance = function () {
16
+ if (!this.defaultInstance) {
17
+ throw new Error("Unable to locate the default implementation of the '" + this.name +
18
+ "' interface. Possible options are 'ko', 'backingStore' or 'backbone'. See the breeze.config.initializeAdapterInstances method.");
19
+ }
20
+ return this.defaultInstance;
21
+ };
22
+ /**
23
+ Initializes a collection of adapter implementations and makes each one the default for its corresponding interface.
24
+ @method initializeAdapterInstances
25
+ @param config {Object}
26
+ @param [config.ajax] {String} - the name of a previously registered "ajax" adapter
27
+ @param [config.dataService] {String} - the name of a previously registered "dataService" adapter
28
+ @param [config.modelLibrary] {String} - the name of a previously registered "modelLibrary" adapter
29
+ @param [config.uriBuilder] {String} - the name of a previously registered "uriBuilder" adapter
30
+ @return [array of instances]
31
+ **/
32
+ config.initializeAdapterInstances = function (irConfig) {
33
+ assertConfig(irConfig)
34
+ .whereParam("dataService").isOptional()
35
+ .whereParam("modelLibrary").isOptional()
36
+ .whereParam("ajax").isOptional()
37
+ .whereParam("uriBuilder").isOptional()
38
+ .applyAll(this, false);
39
+ return core.objectMap(config, this.initializeAdapterInstance);
40
+ };
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9pbnRlcmZhY2UtcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWUsTUFBTSxVQUFVLENBQUM7QUFlN0Qsd0NBQXdDO0FBQ3hDLE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFDSSxTQUFJLEdBQUcsSUFBSSxZQUFZLENBQWMsTUFBTSxDQUFDLENBQUM7UUFDN0MsaUJBQVksR0FBRyxJQUFJLFlBQVksQ0FBc0IsY0FBYyxDQUFDLENBQUM7UUFDckUsZ0JBQVcsR0FBRyxJQUFJLFlBQVksQ0FBcUIsYUFBYSxDQUFDLENBQUM7UUFDbEUsZUFBVSxHQUFHLElBQUksWUFBWSxDQUFvQixZQUFZLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQUE7QUF1QkQsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztBQUNuRCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0FBQ3JELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEdBQUc7SUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7UUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsR0FBRyxJQUFJLENBQUMsSUFBSTtZQUM5RSxpSUFBaUksQ0FBQyxDQUFDO0tBQzFJO0lBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQywwQkFBMEIsR0FBRyxVQUFVLFFBQWlDO0lBQzNFLFlBQVksQ0FBQyxRQUFRLENBQUM7U0FDakIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsRUFBRTtTQUN0QyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsVUFBVSxFQUFFO1NBQ3ZDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUU7U0FDL0IsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsRUFBRTtTQUNyQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IGFzc2VydENvbmZpZyB9IGZyb20gJy4vYXNzZXJ0LXBhcmFtJztcclxuaW1wb3J0IHsgY29uZmlnLCBJbnRlcmZhY2VEZWYsIEJhc2VBZGFwdGVyIH0gZnJvbSAnLi9jb25maWcnO1xyXG5pbXBvcnQgeyBNYXBwaW5nQ29udGV4dCB9IGZyb20gJy4vbWFwcGluZy1jb250ZXh0JztcclxuaW1wb3J0IHsgRW50aXR5UXVlcnkgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcbmltcG9ydCB7IEpzb25SZXN1bHRzQWRhcHRlciwgRGF0YVNlcnZpY2UgfSBmcm9tICcuL2RhdGEtc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5LWFzcGVjdCc7XHJcbmltcG9ydCB7IFNhdmVDb250ZXh0LCBTYXZlQnVuZGxlLCBRdWVyeVJlc3VsdCwgU2F2ZVJlc3VsdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnIHtcclxuICAgIGFqYXg/OiBJbnRlcmZhY2VEZWY8QWpheEFkYXB0ZXI+O1xyXG4gICAgbW9kZWxMaWJyYXJ5PzogSW50ZXJmYWNlRGVmPE1vZGVsTGlicmFyeUFkYXB0ZXI+O1xyXG4gICAgZGF0YVNlcnZpY2U/OiBJbnRlcmZhY2VEZWY8RGF0YVNlcnZpY2VBZGFwdGVyPjtcclxuICAgIHVyaUJ1aWxkZXI/OiBJbnRlcmZhY2VEZWY8VXJpQnVpbGRlckFkYXB0ZXI+O1xyXG59XHJcblxyXG4vKiogUmVnaXN0ZXJzIGFkYXB0ZXJzIHVzZWQgYnkgQnJlZXplICovXHJcbmV4cG9ydCBjbGFzcyBJbnRlcmZhY2VSZWdpc3RyeSB7XHJcbiAgICBhamF4ID0gbmV3IEludGVyZmFjZURlZjxBamF4QWRhcHRlcj4oXCJhamF4XCIpO1xyXG4gICAgbW9kZWxMaWJyYXJ5ID0gbmV3IEludGVyZmFjZURlZjxNb2RlbExpYnJhcnlBZGFwdGVyPihcIm1vZGVsTGlicmFyeVwiKTtcclxuICAgIGRhdGFTZXJ2aWNlID0gbmV3IEludGVyZmFjZURlZjxEYXRhU2VydmljZUFkYXB0ZXI+KFwiZGF0YVNlcnZpY2VcIik7XHJcbiAgICB1cmlCdWlsZGVyID0gbmV3IEludGVyZmFjZURlZjxVcmlCdWlsZGVyQWRhcHRlcj4oXCJ1cmlCdWlsZGVyXCIpO1xyXG59XHJcblxyXG4vLyBUaGlzIG1vZHVsZSBkZXNjcmliZXMgdGhlIGludGVyZmFjZVJlZ2lzdHJ5IGJ5IGV4dGVuZGluZyBjb25maWdcclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmRlY2xhcmUgbW9kdWxlIFwiLi9jb25maWdcIiB7XHJcbiAgICBpbnRlcmZhY2UgQnJlZXplQ29uZmlnIHtcclxuICAgICAgICAvKipcclxuICAgICAgICBJbml0aWFsaXplcyBhIGNvbGxlY3Rpb24gb2YgYWRhcHRlciBpbXBsZW1lbnRhdGlvbnMgYW5kIG1ha2VzIGVhY2ggb25lIHRoZSBkZWZhdWx0IGZvciBpdHMgY29ycmVzcG9uZGluZyBpbnRlcmZhY2UuXHJcbiAgICAgICAgQG1ldGhvZCBpbml0aWFsaXplQWRhcHRlckluc3RhbmNlc1xyXG4gICAgICAgIEBwYXJhbSBjb25maWcge09iamVjdH1cclxuICAgICAgICBAcGFyYW0gW2NvbmZpZy5hamF4XSB7U3RyaW5nfSAtIHRoZSBuYW1lIG9mIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIFwiYWpheFwiIGFkYXB0ZXJcclxuICAgICAgICBAcGFyYW0gW2NvbmZpZy5kYXRhU2VydmljZV0ge1N0cmluZ30gLSB0aGUgbmFtZSBvZiBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBcImRhdGFTZXJ2aWNlXCIgYWRhcHRlclxyXG4gICAgICAgIEBwYXJhbSBbY29uZmlnLm1vZGVsTGlicmFyeV0ge1N0cmluZ30gLSB0aGUgbmFtZSBvZiBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBcIm1vZGVsTGlicmFyeVwiIGFkYXB0ZXJcclxuICAgICAgICBAcGFyYW0gW2NvbmZpZy51cmlCdWlsZGVyXSB7U3RyaW5nfSAtIHRoZSBuYW1lIG9mIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIFwidXJpQnVpbGRlclwiIGFkYXB0ZXJcclxuICAgICAgICBAcmV0dXJuIFthcnJheSBvZiBpbnN0YW5jZXNdXHJcbiAgICAgICAgKiovXHJcbiAgICAgICAgaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZXMoaXJDb25maWc6IEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnKTogdm9pZDtcclxuXHJcbiAgICAgICAgLy8gc3Ryb25nbHkgdHlwZWQgdmVyc2lvblxyXG4gICAgICAgIGludGVyZmFjZVJlZ2lzdHJ5OiBJbnRlcmZhY2VSZWdpc3RyeTtcclxuICAgIH1cclxufVxyXG5cclxuY29uZmlnLmludGVyZmFjZVJlZ2lzdHJ5ID0gbmV3IEludGVyZmFjZVJlZ2lzdHJ5KCk7XHJcbmNvbmZpZy5faW50ZXJmYWNlUmVnaXN0cnkgPSBjb25maWcuaW50ZXJmYWNlUmVnaXN0cnk7XHJcbmNvbmZpZy5pbnRlcmZhY2VSZWdpc3RyeS5tb2RlbExpYnJhcnkuZ2V0RGVmYXVsdEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuZGVmYXVsdEluc3RhbmNlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGxvY2F0ZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ1wiICsgdGhpcy5uYW1lICtcclxuICAgICAgICAgICAgXCInIGludGVyZmFjZS4gIFBvc3NpYmxlIG9wdGlvbnMgYXJlICdrbycsICdiYWNraW5nU3RvcmUnIG9yICdiYWNrYm9uZScuIFNlZSB0aGUgYnJlZXplLmNvbmZpZy5pbml0aWFsaXplQWRhcHRlckluc3RhbmNlcyBtZXRob2QuXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEluc3RhbmNlO1xyXG59O1xyXG5cclxuLyoqXHJcbkluaXRpYWxpemVzIGEgY29sbGVjdGlvbiBvZiBhZGFwdGVyIGltcGxlbWVudGF0aW9ucyBhbmQgbWFrZXMgZWFjaCBvbmUgdGhlIGRlZmF1bHQgZm9yIGl0cyBjb3JyZXNwb25kaW5nIGludGVyZmFjZS5cclxuQG1ldGhvZCBpbml0aWFsaXplQWRhcHRlckluc3RhbmNlc1xyXG5AcGFyYW0gY29uZmlnIHtPYmplY3R9XHJcbkBwYXJhbSBbY29uZmlnLmFqYXhdIHtTdHJpbmd9IC0gdGhlIG5hbWUgb2YgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgXCJhamF4XCIgYWRhcHRlclxyXG5AcGFyYW0gW2NvbmZpZy5kYXRhU2VydmljZV0ge1N0cmluZ30gLSB0aGUgbmFtZSBvZiBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBcImRhdGFTZXJ2aWNlXCIgYWRhcHRlclxyXG5AcGFyYW0gW2NvbmZpZy5tb2RlbExpYnJhcnldIHtTdHJpbmd9IC0gdGhlIG5hbWUgb2YgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgXCJtb2RlbExpYnJhcnlcIiBhZGFwdGVyXHJcbkBwYXJhbSBbY29uZmlnLnVyaUJ1aWxkZXJdIHtTdHJpbmd9IC0gdGhlIG5hbWUgb2YgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgXCJ1cmlCdWlsZGVyXCIgYWRhcHRlclxyXG5AcmV0dXJuIFthcnJheSBvZiBpbnN0YW5jZXNdXHJcbioqL1xyXG5jb25maWcuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZXMgPSBmdW5jdGlvbiAoaXJDb25maWc6IEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnKSB7XHJcbiAgICBhc3NlcnRDb25maWcoaXJDb25maWcpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJkYXRhU2VydmljZVwiKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcIm1vZGVsTGlicmFyeVwiKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcImFqYXhcIikuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJ1cmlCdWlsZGVyXCIpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC5hcHBseUFsbCh0aGlzLCBmYWxzZSk7XHJcbiAgICByZXR1cm4gY29yZS5vYmplY3RNYXAoY29uZmlnLCB0aGlzLmluaXRpYWxpemVBZGFwdGVySW5zdGFuY2UpO1xyXG59O1xyXG5cclxuLyoqIERhdGFTZXJ2aWNlQWRhcHRlciBBamF4IHJlcXVlc3QgY29uZmlndXJhdGlvbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFqYXhDb25maWcge1xyXG4gICAgdXJsOiBzdHJpbmc7XHJcbiAgICAvKiogR0VULCBQT1NULCBldGMuICovXHJcbiAgICB0eXBlPzogc3RyaW5nO1xyXG4gICAgLyoqIGpzb24sIGV0Yy4gKi9cclxuICAgIGRhdGFUeXBlPzogc3RyaW5nO1xyXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmc7XHJcbiAgICBjcm9zc0RvbWFpbj86IHN0cmluZyB8IGJvb2xlYW47XHJcbiAgICBoZWFkZXJzPzoge307XHJcbiAgICBkYXRhPzogYW55O1xyXG4gICAgcGFyYW1zPzoge307XHJcbiAgICBzdWNjZXNzOiAocmVzOiBIdHRwUmVzcG9uc2UpID0+IHZvaWQ7XHJcbiAgICBlcnJvcjogKHJlczogKEh0dHBSZXNwb25zZSB8IEVycm9yKSkgPT4gdm9pZDtcclxufVxyXG5cclxuLyoqIFJlcXVlc3Qgc2VudCBieSBBamF4QWRhcHRlciAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFqYXhSZXF1ZXN0IHtcclxuICAgIC8qKiBBamF4QWRhcHRlciB0aGF0IGluaXRpYXRlZCB0aGUgcmVxdWVzdCAqL1xyXG4gICAgYWRhcHRlcjogQWpheEFkYXB0ZXI7XHJcbiAgICAvKiogUmVxdWVzdCBjb25maWd1cmF0aW9uICovXHJcbiAgICBjb25maWc6IFJlcXVlc3RJbml0O1xyXG4gICAgLyoqIGNvbmZpZyBmcm9tIHRoZSBEYXRhU2VydmljZUFkYXB0ZXIgdGhhdCBjYWxsZWQgdGhlIEFqYXhBZGFwdGVyICovXHJcbiAgICBkc2FDb25maWc6IEFqYXhDb25maWc7XHJcbiAgICAvKiogRnVuY3Rpb24gY2FsbGVkIG9uIHJlc3BvbnNlIGVycm9yICovXHJcbiAgICBlcnJvcjogKHN0YXR1czogbnVtYmVyLCBzdGF0dXNUZXh0OiBzdHJpbmcsIGJvZHk6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlLCBlcnJvclRocm93bjogYW55KSA9PiB2b2lkO1xyXG4gICAgLyoqIEZ1bmN0aW9uIGNhbGxlZCBvbiByZXNwb25zZSBzdWNjZXNzICovXHJcbiAgICBzdWNjZXNzOiAoZGF0YTogYW55LCBzdGF0dXNUZXh0OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSkgPT4gdm9pZDtcclxufVxyXG5cclxuLyoqIEhhbmRsZXMgQUpBWCByZXF1ZXN0cyB0byBzZXJ2ZXIgKi9cclxuZXhwb3J0IGludGVyZmFjZSBBamF4QWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIHtcclxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IHBlcmZvcm1zIHRoZSBhamF4IHJlcXVlc3QgYW5kIGNhbGxzIHRoZSBzdWNjZXNzIG9yIGVycm9yIGZ1bmN0aW9uICovXHJcbiAgICBhamF4KGNvbmZpZzogQWpheENvbmZpZyk6IHZvaWQ7XHJcbiAgICAvKiogQ29udGFpbmVyIGZvciBoZWFkZXJzIHRvIGJlIGFkZGVkIHRvIGVhY2ggcmVxdWVzdCAqL1xyXG4gICAgZGVmYXVsdFNldHRpbmdzOiB7IGhlYWRlcnM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB9O1xyXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGFsbG93IG1hbmlwdWxhdGluZyB0aGUgcmVxdWVzdCBiZWZvcmUgc2VuZGluZyAqL1xyXG4gICAgcmVxdWVzdEludGVyY2VwdG9yPzogKHJlcTogQWpheFJlcXVlc3QpID0+IHZvaWQ7XHJcbn1cclxuXHJcbi8qKiBBZGFwdHMgYnJlZXplIGNoYW5nZS10cmFja2luZyB0byB0aGUgVUkgZnJhbWV3b3JrICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxMaWJyYXJ5QWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIHtcclxuICAgIGdldFRyYWNrYWJsZVByb3BlcnR5TmFtZXM6IChlbnRpdHk6IGFueSkgPT4gc3RyaW5nW107XHJcbiAgICBpbml0aWFsaXplRW50aXR5UHJvdG90eXBlKHByb3RvOiBPYmplY3QpOiB2b2lkO1xyXG4gICAgc3RhcnRUcmFja2luZyhlbnRpdHk6IGFueSwgZW50aXR5Q3RvcjogRnVuY3Rpb24pOiB2b2lkO1xyXG4gICAgY3JlYXRlQ3Rvcj86IEZ1bmN0aW9uO1xyXG59XHJcblxyXG4vKiogUmVzaGFwZXMgZGF0YSBtb3ZpbmcgYmV0d2VlbiBicmVlemUgYW5kIHNlcnZlciAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTZXJ2aWNlQWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIHtcclxuICAgIGZldGNoTWV0YWRhdGEobWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSwgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlKTogUHJvbWlzZTxhbnk+OyAgLy8gcmVzdWx0IG9mIFByb21pc2UgaXMgZWl0aGVyIHJhd01ldGFkYXRhIG9yIGEgc3RyaW5nIGV4cGxhaW5pbmcgd2h5IG5vdC5cclxuICAgIGV4ZWN1dGVRdWVyeShtYXBwaW5nQ29udGV4dDogTWFwcGluZ0NvbnRleHQpOiBQcm9taXNlPFF1ZXJ5UmVzdWx0PjsgICAvLyByZXN1bHQgb2YgZXhlY3V0ZVF1ZXJ5IHdpbGwgZ2V0IHBhc3NlZCB0byBKc29uUmVzdWx0c0FkYXB0ZXIgZXh0cmFjdFJlc3VsdHMgbWV0aG9kXHJcbiAgICBzYXZlQ2hhbmdlcyhzYXZlQ29udGV4dDogU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IFNhdmVCdW5kbGUpOiBQcm9taXNlPFNhdmVSZXN1bHQ+O1xyXG4gICAgY2hhbmdlUmVxdWVzdEludGVyY2VwdG9yOiBDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JDdG9yO1xyXG4gICAganNvblJlc3VsdHNBZGFwdGVyOiBKc29uUmVzdWx0c0FkYXB0ZXI7XHJcbn1cclxuXHJcbi8qKiBGdW5jdGlvbiBjYWxsZWQgYnkgQWpheEFkYXB0ZXIgYmVmb3JlIHNlbmRpbmcgcmVxdWVzdCAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFqYXhSZXF1ZXN0SW50ZXJjZXB0b3Ige1xyXG4gICAgKHJlcTogQWpheFJlcXVlc3QpIDogdm9pZDtcclxuICAgIC8qKiBXaGV0aGVyIHRvIHJlbW92ZSB0aGUgaW50ZXJjZXB0b3IgYWZ0ZXIgaXQgaXMgY2FsbGVkICovXHJcbiAgICBvbmVUaW1lOiBib29sZWFuO1xyXG59XHJcblxyXG4vKiogQnVpbGRzIFVSSSBmb3IgcGVyZm9ybWluZyBxdWVyaWVzLiAgU2VyaWFsaXplcyB0aGUgRW50aXR5UXVlcnkgYWNjb3JkaW5nIHRvIHRoZSBVUkkgc3ludGF4LiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVyaUJ1aWxkZXJBZGFwdGVyIGV4dGVuZHMgQmFzZUFkYXB0ZXIge1xyXG4gICAgYnVpbGRVcmkocXVlcnk6IEVudGl0eVF1ZXJ5LCBtZXRhZGF0YVN0b3JlOiBNZXRhZGF0YVN0b3JlKTogc3RyaW5nO1xyXG59XHJcblxyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3JDdG9yIHtcclxuICAgIG5ldyAoc2F2ZUNvbnRleHQ6IFNhdmVDb250ZXh0LCBzYXZlQnVuZGxlOiBTYXZlQnVuZGxlKTogQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yO1xyXG59XHJcblxyXG4vKiogQWxsb3dzIG1hbmlwdWxhdGluZyBkYXRhIGluIERhdGFTZXJ2aWNlQWRhcHRlciBiZWZvcmUgc2VuZGluZyB0byBzZXJ2ZXIgKi9cclxuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3Ige1xyXG4gICAgb25lVGltZT86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICBQcmVwYXJlIGFuZCByZXR1cm4gdGhlIHNhdmUgZGF0YSBmb3IgYW4gZW50aXR5IGNoYW5nZS1zZXQuXHJcbiAgXHJcbiAgICAgVGhlIGFkYXB0ZXIgY2FsbHMgdGhpcyBtZXRob2QgZm9yIGVhY2ggZW50aXR5IGluIHRoZSBjaGFuZ2Utc2V0LFxyXG4gICAgIGFmdGVyIGl0IGhhcyBwcmVwYXJlZCBhIFwiY2hhbmdlIHJlcXVlc3RcIiBmb3IgdGhhdCBvYmplY3QuXHJcbiAgXHJcbiAgICAgVGhlIG1ldGhvZCBjYW4gZG8gYW55dGhpbmcgdG8gdGhlIHJlcXVlc3QgYnV0IGl0IG11c3QgcmV0dXJuIGEgdmFsaWQsIG5vbi1udWxsIHJlcXVlc3QuXHJcbiAgICAgQGV4YW1wbGVcclxuICAgICB0aGlzLmdldFJlcXVlc3QgPSBmdW5jdGlvbiAocmVxdWVzdCwgZW50aXR5LCBpbmRleCkge1xyXG4gICAgICAgICAgICAvLyBhbHRlciB0aGUgcmVxdWVzdCB0aGF0IHRoZSBhZGFwdGVyIHByZXBhcmVkIGZvciB0aGlzIGVudGl0eVxyXG4gICAgICAgICAgICAvLyBiYXNlZCBvbiB0aGUgZW50aXR5LCBzYXZlQ29udGV4dCwgYW5kIHNhdmVCdW5kbGVcclxuICAgICAgICAgICAgLy8gZS5nLiwgYWRkIGEgY3VzdG9tIGhlYWRlciBvciBwcnVuZSB0aGUgb3JpZ2luYWxWYWx1ZXNNYXBcclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgICAgICAgfTtcclxuICAgICBAbWV0aG9kIGdldFJlcXVlc3RcclxuICAgICBAcGFyYW0gcmVxdWVzdCB7T2JqZWN0fSBUaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgYWRhcHRlcidzIHJlcXVlc3QgdG8gc2F2ZSB0aGlzIGVudGl0eS5cclxuICAgICBAcGFyYW0gZW50aXR5IHtFbnRpdHl9IFRoZSBlbnRpdHktdG8tYmUtc2F2ZSBhcyBpdCBpcyBpbiBjYWNoZVxyXG4gICAgIEBwYXJhbSBpbmRleCB7SW50ZWdlcn0gVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhpcyBlbnRpdHkgaW4gdGhlIGNoYW5nZS1zZXQgYXJyYXlcclxuICAgICBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHBvdGVudGlhbGx5IHJldmlzZWQgcmVxdWVzdC5cclxuICAgICAqKi9cclxuICAgIGdldFJlcXVlc3QocmVxdWVzdDogYW55LCBlbnRpdHk6IEVudGl0eSwgaW5kZXg6IG51bWJlcik6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICBMYXN0IGNoYW5jZSB0byBjaGFuZ2UgYW55dGhpbmcgYWJvdXQgdGhlICdyZXF1ZXN0cycgYXJyYXlcclxuICAgICBhZnRlciBpdCBoYXMgYmVlbiBidWlsdCB3aXRoIHJlcXVlc3RzIGZvciBhbGwgb2YgdGhlIGVudGl0aWVzLXRvLWJlLXNhdmVkLlxyXG4gIFxyXG4gICAgIFRoZSAncmVxdWVzdHMnIGFycmF5IGlzIHRoZSBzYW1lIGFzICdzYXZlQnVuZGxlLmVudGl0aWVzJyBpbiBtYW55IGltcGxlbWVudGF0aW9uc1xyXG4gIFxyXG4gICAgIFRoaXMgbWV0aG9kIGNhbiBkbyBhbnl0aGluZyB0byB0aGUgYXJyYXkgaW5jbHVkaW5nIGFkZCBhbmQgcmVtb3ZlIHJlcXVlc3RzLlxyXG4gICAgIEl0J3MgdXAgdG8geW91IHRvIGVuc3VyZSB0aGF0IHNlcnZlciB3aWxsIGFjY2VwdCB0aGUgcmVxdWVzdHMgYXJyYXkgZGF0YSBhcyB2YWxpZC5cclxuICBcclxuICAgICBSZXR1cm5lZCB2YWx1ZSBpcyBpZ25vcmVkLlxyXG4gICAgIEBleGFtcGxlXHJcbiAgICAgdGhpcy5kb25lID0gZnVuY3Rpb24gKHJlcXVlc3RzKSB7XHJcbiAgICAgICAgICAgIC8vIGFsdGVyIHRoZSBhcnJheSBvZiByZXF1ZXN0cyByZXByZXNlbnRpbmcgdGhlIGVudGlyZSBjaGFuZ2Utc2V0XHJcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBzYXZlQ29udGV4dCBhbmQgc2F2ZUJ1bmRsZVxyXG4gICAgICAgIH07XHJcbiAgICAgQG1ldGhvZCBkb25lXHJcbiAgICAgQHBhcmFtIHJlcXVlc3RzIHtBcnJheSBvZiBPYmplY3R9IFRoZSBhZGFwdGVyJ3MgYXJyYXkgb2YgcmVxdWVzdCBmb3IgdGhpcyBjaGFuZ2VzZXQuXHJcbiAgICAgKiovXHJcbiAgICBkb25lKHJlcXVlc3RzOiBPYmplY3RbXSk6IHZvaWQ7XHJcbn0iXX0=