breeze-client 2.1.2 → 2.1.3-mjs

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 (397) hide show
  1. package/LICENSE +1 -1
  2. package/adapter-ajax-angularjs/{breeze-client-adapter-ajax-angularjs.d.ts → index.d.ts} +1 -0
  3. package/adapter-ajax-fetch/{breeze-client-adapter-ajax-fetch.d.ts → index.d.ts} +1 -0
  4. package/adapter-ajax-httpclient/{breeze-client-adapter-ajax-httpclient.d.ts → index.d.ts} +1 -0
  5. package/adapter-ajax-jquery/{breeze-client-adapter-ajax-jquery.d.ts → index.d.ts} +1 -0
  6. package/adapter-ajax-post/{breeze-client-adapter-ajax-post.d.ts → index.d.ts} +1 -0
  7. package/adapter-data-service-odata/{breeze-client-adapter-data-service-odata.d.ts → index.d.ts} +1 -0
  8. package/adapter-data-service-webapi/{breeze-client-adapter-data-service-webapi.d.ts → index.d.ts} +1 -0
  9. package/adapter-model-library-backing-store/{breeze-client-adapter-model-library-backing-store.d.ts → index.d.ts} +1 -0
  10. package/adapter-model-library-ko/{breeze-client-adapter-model-library-ko.d.ts → index.d.ts} +1 -0
  11. package/adapter-uri-builder-json/{breeze-client-adapter-uri-builder-json.d.ts → index.d.ts} +1 -0
  12. package/adapter-uri-builder-odata/{breeze-client-adapter-uri-builder-odata.d.ts → index.d.ts} +1 -0
  13. package/esm2020/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +130 -0
  14. package/esm2020/adapter-ajax-angularjs/adapter-core.mjs +49 -0
  15. package/esm2020/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
  16. package/esm2020/adapter-ajax-fetch/adapter-ajax-fetch.mjs +132 -0
  17. package/esm2020/adapter-ajax-fetch/adapter-core.mjs +49 -0
  18. package/esm2020/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
  19. package/esm2020/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +137 -0
  20. package/esm2020/adapter-ajax-httpclient/adapter-core.mjs +49 -0
  21. package/esm2020/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
  22. package/esm2020/adapter-ajax-jquery/adapter-ajax-jquery.mjs +103 -0
  23. package/esm2020/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
  24. package/esm2020/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
  25. package/esm2020/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
  26. package/esm2020/adapter-data-service-odata/adapter-core.mjs +49 -0
  27. package/esm2020/adapter-data-service-odata/adapter-data-service-odata.mjs +456 -0
  28. package/esm2020/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
  29. package/esm2020/adapter-data-service-webapi/adapter-data-service-webapi.mjs +93 -0
  30. package/esm2020/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
  31. package/esm2020/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +268 -0
  32. package/esm2020/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
  33. package/esm2020/adapter-model-library-ko/adapter-model-library-ko.mjs +240 -0
  34. package/esm2020/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
  35. package/esm2020/adapter-uri-builder-json/adapter-core.mjs +49 -0
  36. package/esm2020/adapter-uri-builder-json/adapter-uri-builder-json.mjs +36 -0
  37. package/esm2020/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
  38. package/esm2020/adapter-uri-builder-odata/adapter-core.mjs +49 -0
  39. package/esm2020/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +190 -0
  40. package/esm2020/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
  41. package/esm2020/breeze-client.mjs +5 -0
  42. package/esm2020/index.mjs +2 -0
  43. package/esm2020/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
  44. package/esm2020/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
  45. package/esm2020/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
  46. package/esm2020/mixin-save-queuing/mixin-save-queuing.mjs +400 -0
  47. package/esm2020/src/abstract-data-service-adapter.mjs +296 -0
  48. package/esm2020/src/array.mjs +4 -0
  49. package/esm2020/src/assert-param.mjs +312 -0
  50. package/esm2020/src/breeze.mjs +85 -0
  51. package/esm2020/src/complex-array.mjs +117 -0
  52. package/esm2020/src/config.mjs +223 -0
  53. package/esm2020/src/core.mjs +707 -0
  54. package/esm2020/src/csdl-metadata-parser.mjs +385 -0
  55. package/esm2020/src/data-service.mjs +203 -0
  56. package/esm2020/src/data-type.mjs +444 -0
  57. package/esm2020/src/default-property-interceptor.mjs +460 -0
  58. package/esm2020/src/entity-action.mjs +45 -0
  59. package/esm2020/src/entity-aspect.mjs +806 -0
  60. package/esm2020/src/entity-group.mjs +187 -0
  61. package/esm2020/src/entity-key.mjs +116 -0
  62. package/esm2020/src/entity-manager.mjs +2094 -0
  63. package/esm2020/src/entity-metadata.mjs +2109 -0
  64. package/esm2020/src/entity-query.mjs +996 -0
  65. package/esm2020/src/entity-state.mjs +99 -0
  66. package/esm2020/src/enum.mjs +141 -0
  67. package/esm2020/src/event.mjs +256 -0
  68. package/esm2020/src/interface-registry.mjs +41 -0
  69. package/esm2020/src/key-generator.mjs +108 -0
  70. package/esm2020/src/local-query-comparison-options.mjs +65 -0
  71. package/esm2020/src/mapping-context.mjs +405 -0
  72. package/esm2020/src/naming-convention.mjs +88 -0
  73. package/esm2020/src/observable-array.mjs +183 -0
  74. package/esm2020/src/predicate.mjs +1232 -0
  75. package/esm2020/src/primitive-array.mjs +85 -0
  76. package/esm2020/src/query-options.mjs +152 -0
  77. package/esm2020/src/relation-array.mjs +173 -0
  78. package/esm2020/src/save-options.mjs +41 -0
  79. package/esm2020/src/unattached-children-map.mjs +58 -0
  80. package/esm2020/src/validate.mjs +988 -0
  81. package/esm2020/src/validation-options.mjs +64 -0
  82. package/fesm2015/{breeze-client-adapter-ajax-angularjs.js → breeze-client-adapter-ajax-angularjs.mjs} +1 -1
  83. package/fesm2015/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  84. package/fesm2015/{breeze-client-adapter-ajax-fetch.js → breeze-client-adapter-ajax-fetch.mjs} +5 -3
  85. package/fesm2015/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  86. package/fesm2015/{breeze-client-adapter-ajax-httpclient.js → breeze-client-adapter-ajax-httpclient.mjs} +1 -1
  87. package/fesm2015/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  88. package/fesm2015/{breeze-client-adapter-ajax-jquery.js → breeze-client-adapter-ajax-jquery.mjs} +2 -2
  89. package/fesm2015/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  90. package/fesm2015/{breeze-client-adapter-ajax-post.js → breeze-client-adapter-ajax-post.mjs} +1 -1
  91. package/fesm2015/breeze-client-adapter-ajax-post.mjs.map +1 -0
  92. package/fesm2015/{breeze-client-adapter-data-service-odata.js → breeze-client-adapter-data-service-odata.mjs} +20 -22
  93. package/fesm2015/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  94. package/fesm2015/{breeze-client-adapter-data-service-webapi.js → breeze-client-adapter-data-service-webapi.mjs} +13 -13
  95. package/fesm2015/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  96. package/fesm2015/{breeze-client-adapter-model-library-backing-store.js → breeze-client-adapter-model-library-backing-store.mjs} +13 -13
  97. package/fesm2015/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  98. package/fesm2015/{breeze-client-adapter-model-library-ko.js → breeze-client-adapter-model-library-ko.mjs} +13 -13
  99. package/fesm2015/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  100. package/fesm2015/{breeze-client-adapter-uri-builder-json.js → breeze-client-adapter-uri-builder-json.mjs} +8 -8
  101. package/fesm2015/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  102. package/fesm2015/{breeze-client-adapter-uri-builder-odata.js → breeze-client-adapter-uri-builder-odata.mjs} +85 -86
  103. package/fesm2015/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  104. package/fesm2015/{breeze-client-mixin-get-entity-graph.js → breeze-client-mixin-get-entity-graph.mjs} +1 -1
  105. package/fesm2015/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  106. package/fesm2015/{breeze-client-mixin-save-queuing.js → breeze-client-mixin-save-queuing.mjs} +1 -1
  107. package/fesm2015/breeze-client-mixin-save-queuing.mjs.map +1 -0
  108. package/fesm2015/{breeze-client.js → breeze-client.mjs} +417 -422
  109. package/fesm2015/breeze-client.mjs.map +1 -0
  110. package/{fesm5/breeze-client-adapter-ajax-angularjs.js → fesm2020/breeze-client-adapter-ajax-angularjs.mjs} +41 -42
  111. package/fesm2020/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  112. package/{fesm5/breeze-client-adapter-ajax-fetch.js → fesm2020/breeze-client-adapter-ajax-fetch.mjs} +44 -43
  113. package/fesm2020/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  114. package/{fesm5/breeze-client-adapter-ajax-httpclient.js → fesm2020/breeze-client-adapter-ajax-httpclient.mjs} +43 -44
  115. package/fesm2020/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  116. package/{fesm5/breeze-client-adapter-ajax-jquery.js → fesm2020/breeze-client-adapter-ajax-jquery.mjs} +18 -19
  117. package/fesm2020/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  118. package/{fesm5/breeze-client-adapter-ajax-post.js → fesm2020/breeze-client-adapter-ajax-post.mjs} +8 -11
  119. package/fesm2020/breeze-client-adapter-ajax-post.mjs.map +1 -0
  120. package/{fesm5/breeze-client-adapter-data-service-odata.js → fesm2020/breeze-client-adapter-data-service-odata.mjs} +126 -134
  121. package/fesm2020/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  122. package/{fesm5/breeze-client-adapter-data-service-webapi.js → fesm2020/breeze-client-adapter-data-service-webapi.mjs} +38 -42
  123. package/fesm2020/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  124. package/{fesm5/breeze-client-adapter-model-library-backing-store.js → fesm2020/breeze-client-adapter-model-library-backing-store.mjs} +63 -64
  125. package/fesm2020/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  126. package/{fesm5/breeze-client-adapter-model-library-ko.js → fesm2020/breeze-client-adapter-model-library-ko.mjs} +57 -58
  127. package/fesm2020/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  128. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs +91 -0
  129. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  130. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs +245 -0
  131. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  132. package/{fesm5/breeze-client-mixin-get-entity-graph.js → fesm2020/breeze-client-mixin-get-entity-graph.mjs} +45 -45
  133. package/fesm2020/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  134. package/{fesm5/breeze-client-mixin-save-queuing.js → fesm2020/breeze-client-mixin-save-queuing.mjs} +116 -126
  135. package/fesm2020/breeze-client-mixin-save-queuing.mjs.map +1 -0
  136. package/{fesm5/breeze-client.js → fesm2020/breeze-client.mjs} +3403 -3615
  137. package/fesm2020/breeze-client.mjs.map +1 -0
  138. package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
  139. package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
  140. package/package.json +126 -12
  141. package/src/entity-metadata.d.ts +6 -4
  142. package/src/entity-query.d.ts +1 -1
  143. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  144. package/adapter-ajax-angularjs/package.json +0 -13
  145. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  146. package/adapter-ajax-fetch/package.json +0 -13
  147. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  148. package/adapter-ajax-httpclient/package.json +0 -17
  149. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  150. package/adapter-ajax-jquery/package.json +0 -13
  151. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  152. package/adapter-ajax-post/package.json +0 -13
  153. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  154. package/adapter-data-service-odata/package.json +0 -13
  155. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  156. package/adapter-data-service-webapi/package.json +0 -13
  157. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  158. package/adapter-model-library-backing-store/package.json +0 -13
  159. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  160. package/adapter-model-library-ko/package.json +0 -13
  161. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  162. package/adapter-uri-builder-json/package.json +0 -13
  163. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  164. package/adapter-uri-builder-odata/package.json +0 -13
  165. package/breeze-client.d.ts +0 -8
  166. package/breeze-client.metadata.json +0 -1
  167. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  168. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  169. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  170. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  171. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  172. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  173. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  174. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  175. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  176. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  177. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  178. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  179. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  180. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  181. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  182. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  183. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  184. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  185. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  186. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  187. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -743
  188. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  189. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  190. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  191. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -326
  192. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  193. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  194. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  195. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  196. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  197. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  198. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  199. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  200. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  201. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  202. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  203. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  204. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  205. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  206. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  207. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  208. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  209. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  210. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  211. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  212. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  213. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  214. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  215. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
  216. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  217. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  218. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  219. package/bundles/breeze-client.umd.js +0 -14094
  220. package/bundles/breeze-client.umd.js.map +0 -1
  221. package/bundles/breeze-client.umd.min.js +0 -16
  222. package/bundles/breeze-client.umd.min.js.map +0 -1
  223. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  224. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  225. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  226. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  227. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  228. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  229. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  230. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  231. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  232. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  233. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  234. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  235. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  236. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  237. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -459
  238. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  239. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -93
  240. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  241. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  242. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  243. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  244. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  245. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  246. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  247. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  248. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  249. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  250. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  251. package/esm2015/breeze-client.js +0 -9
  252. package/esm2015/index.js +0 -2
  253. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  254. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  255. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  256. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  257. package/esm2015/public_api.js +0 -2
  258. package/esm2015/src/abstract-data-service-adapter.js +0 -296
  259. package/esm2015/src/array.js +0 -4
  260. package/esm2015/src/assert-param.js +0 -312
  261. package/esm2015/src/breeze.js +0 -85
  262. package/esm2015/src/complex-array.js +0 -119
  263. package/esm2015/src/config.js +0 -223
  264. package/esm2015/src/core.js +0 -706
  265. package/esm2015/src/csdl-metadata-parser.js +0 -385
  266. package/esm2015/src/data-service.js +0 -203
  267. package/esm2015/src/data-type.js +0 -444
  268. package/esm2015/src/default-property-interceptor.js +0 -459
  269. package/esm2015/src/entity-action.js +0 -45
  270. package/esm2015/src/entity-aspect.js +0 -806
  271. package/esm2015/src/entity-group.js +0 -187
  272. package/esm2015/src/entity-key.js +0 -116
  273. package/esm2015/src/entity-manager.js +0 -2094
  274. package/esm2015/src/entity-metadata.js +0 -2109
  275. package/esm2015/src/entity-query.js +0 -996
  276. package/esm2015/src/entity-state.js +0 -99
  277. package/esm2015/src/enum.js +0 -141
  278. package/esm2015/src/event.js +0 -256
  279. package/esm2015/src/interface-registry.js +0 -41
  280. package/esm2015/src/key-generator.js +0 -108
  281. package/esm2015/src/local-query-comparison-options.js +0 -65
  282. package/esm2015/src/mapping-context.js +0 -405
  283. package/esm2015/src/naming-convention.js +0 -88
  284. package/esm2015/src/observable-array.js +0 -185
  285. package/esm2015/src/predicate.js +0 -1235
  286. package/esm2015/src/primitive-array.js +0 -87
  287. package/esm2015/src/query-options.js +0 -152
  288. package/esm2015/src/relation-array.js +0 -175
  289. package/esm2015/src/save-options.js +0 -41
  290. package/esm2015/src/unattached-children-map.js +0 -58
  291. package/esm2015/src/validate.js +0 -991
  292. package/esm2015/src/validation-options.js +0 -64
  293. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
  294. package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
  295. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  296. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
  297. package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
  298. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  299. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
  300. package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
  301. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  302. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
  303. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  304. package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
  305. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  306. package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
  307. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +0 -466
  308. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  309. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -98
  310. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  311. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
  312. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  313. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
  314. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  315. package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
  316. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
  317. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  318. package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
  319. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
  320. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  321. package/esm5/breeze-client.js +0 -9
  322. package/esm5/index.js +0 -2
  323. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  324. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  325. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  326. package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -412
  327. package/esm5/public_api.js +0 -2
  328. package/esm5/src/abstract-data-service-adapter.js +0 -302
  329. package/esm5/src/array.js +0 -4
  330. package/esm5/src/assert-param.js +0 -317
  331. package/esm5/src/breeze.js +0 -85
  332. package/esm5/src/complex-array.js +0 -119
  333. package/esm5/src/config.js +0 -228
  334. package/esm5/src/core.js +0 -714
  335. package/esm5/src/csdl-metadata-parser.js +0 -385
  336. package/esm5/src/data-service.js +0 -207
  337. package/esm5/src/data-type.js +0 -451
  338. package/esm5/src/default-property-interceptor.js +0 -459
  339. package/esm5/src/entity-action.js +0 -52
  340. package/esm5/src/entity-aspect.js +0 -812
  341. package/esm5/src/entity-group.js +0 -189
  342. package/esm5/src/entity-key.js +0 -118
  343. package/esm5/src/entity-manager.js +0 -2112
  344. package/esm5/src/entity-metadata.js +0 -2144
  345. package/esm5/src/entity-query.js +0 -1023
  346. package/esm5/src/entity-state.js +0 -106
  347. package/esm5/src/enum.js +0 -144
  348. package/esm5/src/event.js +0 -259
  349. package/esm5/src/interface-registry.js +0 -43
  350. package/esm5/src/key-generator.js +0 -111
  351. package/esm5/src/local-query-comparison-options.js +0 -67
  352. package/esm5/src/mapping-context.js +0 -407
  353. package/esm5/src/naming-convention.js +0 -90
  354. package/esm5/src/observable-array.js +0 -201
  355. package/esm5/src/predicate.js +0 -1300
  356. package/esm5/src/primitive-array.js +0 -87
  357. package/esm5/src/query-options.js +0 -167
  358. package/esm5/src/relation-array.js +0 -175
  359. package/esm5/src/save-options.js +0 -43
  360. package/esm5/src/unattached-children-map.js +0 -60
  361. package/esm5/src/validate.js +0 -996
  362. package/esm5/src/validation-options.js +0 -66
  363. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  364. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  365. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  366. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  367. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  368. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  369. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  370. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  371. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  372. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  373. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  374. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  375. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  376. package/fesm2015/breeze-client.js.map +0 -1
  377. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  378. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  379. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  380. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  381. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  382. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  383. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  384. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  385. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  386. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  387. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  388. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  389. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  390. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  391. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  392. package/fesm5/breeze-client.js.map +0 -1
  393. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  394. package/mixin-get-entity-graph/package.json +0 -13
  395. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  396. package/mixin-save-queuing/package.json +0 -13
  397. package/public_api.d.ts +0 -1
@@ -0,0 +1,99 @@
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
+ /**
64
+ Returns whether an entityState instance is EntityState.Unchanged or EntityState.Modified.
65
+ > var es = anEntity.entityAspect.entityState;
66
+ > return es.isUnchangedOrModified();
67
+
68
+ is the same as
69
+ > return es === EntityState.Unchanged || es === EntityState.Modified
70
+ **/
71
+ isUnchangedOrModified() {
72
+ return this === EntityState.Unchanged || this === EntityState.Modified;
73
+ }
74
+ /** Returns whether an entityState instance is EntityState.Added or EntityState.Modified or EntityState.Deleted.
75
+ > var es = anEntity.entityAspect.entityState;
76
+ > return es.isAddedModifiedOrDeleted();
77
+
78
+ is the same as
79
+ > return es === EntityState.Added || es === EntityState.Modified || es === EntityState.Deleted
80
+ **/
81
+ isAddedModifiedOrDeleted() {
82
+ return this === EntityState.Added ||
83
+ this === EntityState.Modified ||
84
+ this === EntityState.Deleted;
85
+ }
86
+ }
87
+ /** The 'Unchanged' state. **/
88
+ EntityState.Unchanged = new EntityState();
89
+ /** The 'Added' state. **/
90
+ EntityState.Added = new EntityState();
91
+ /** The 'Modified' state. **/
92
+ EntityState.Modified = new EntityState();
93
+ /** The 'Deleted' state. **/
94
+ EntityState.Deleted = new EntityState();
95
+ /** The 'Detached' state. **/
96
+ EntityState.Detached = new EntityState();
97
+ EntityState.prototype._$typeName = "EntityState";
98
+ Error['x'] = EntityState.resolveSymbols();
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VudGl0eS1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXBDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVksU0FBUSxVQUFVO0lBYXpDOzs7Ozs7O09BT0c7SUFDSCxXQUFXO1FBQ1QsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxPQUFPO1FBQ0wsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFVBQVU7UUFDUixPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsVUFBVTtRQUNSLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUN6RSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLO1lBQy9CLElBQUksS0FBSyxXQUFXLENBQUMsUUFBUTtZQUM3QixJQUFJLEtBQUssV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUNqQyxDQUFDOztBQWhHRCw4QkFBOEI7QUFDdkIscUJBQVMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ3JDLDRCQUE0QjtBQUNyQixpQkFBSyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDakMsZ0NBQWdDO0FBQ3pCLG9CQUFRLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNwQyw4QkFBOEI7QUFDdkIsbUJBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ25DLCtCQUErQjtBQUN4QixvQkFBUSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUEwRnRDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztBQUNqRCxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlZXplRW51bSB9IGZyb20gJy4vZW51bSc7XHJcblxyXG4vKipcclxuRW50aXR5U3RhdGUgaXMgYW4gJ0VudW0nIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSB2YWxpZCBzdGF0ZXMgZm9yIGFuICdFbnRpdHknLlxyXG4qKi9cclxuZXhwb3J0IGNsYXNzIEVudGl0eVN0YXRlIGV4dGVuZHMgQnJlZXplRW51bSB7XHJcblxyXG4gIC8qKiBUaGUgJ1VuY2hhbmdlZCcgc3RhdGUuICoqL1xyXG4gIHN0YXRpYyBVbmNoYW5nZWQgPSBuZXcgRW50aXR5U3RhdGUoKTtcclxuICAvKiogIFRoZSAnQWRkZWQnIHN0YXRlLiAgKiovXHJcbiAgc3RhdGljIEFkZGVkID0gbmV3IEVudGl0eVN0YXRlKCk7XHJcbiAgLyoqICBUaGUgJ01vZGlmaWVkJyBzdGF0ZS4gICAqKi9cclxuICBzdGF0aWMgTW9kaWZpZWQgPSBuZXcgRW50aXR5U3RhdGUoKTtcclxuICAvKiogIFRoZSAnRGVsZXRlZCcgc3RhdGUuICAqKi9cclxuICBzdGF0aWMgRGVsZXRlZCA9IG5ldyBFbnRpdHlTdGF0ZSgpO1xyXG4gIC8qKiAgVGhlICdEZXRhY2hlZCcgc3RhdGUuICAqKi9cclxuICBzdGF0aWMgRGV0YWNoZWQgPSBuZXcgRW50aXR5U3RhdGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB3aGV0aGVyIGFuIGVudGl0eVN0YXRlIGluc3RhbmNlIGlzIEVudGl0eVN0YXRlLlVuY2hhbmdlZC5cclxuICA+ICAgICB2YXIgZXMgPSBhbkVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGU7XHJcbiAgPiAgICAgcmV0dXJuIGVzLmlzVW5jaGFuZ2VkKCk7XHJcblxyXG4gIGlzIHRoZSBzYW1lIGFzXHJcbiAgPiAgICAgcmV0dXJuIGVzID09PSBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQ7XHJcbiAgKiovXHJcbiAgaXNVbmNoYW5nZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcyA9PT0gRW50aXR5U3RhdGUuVW5jaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJuIHdoZXRoZXIgYW4gZW50aXR5U3RhdGUgaW5zdGFuY2UgaXMgRW50aXR5U3RhdGUuQWRkZWQuXHJcbiAgXHJcbiAgPiAgICAgdmFyIGVzID0gYW5FbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gID4gICAgIHJldHVybiBlcy5pc0FkZGVkKCk7XHJcblxyXG4gIGlzIHRoZSBzYW1lIGFzXHJcbiAgPiAgICAgcmV0dXJuIGVzID09PSBFbnRpdHlTdGF0ZS5BZGRlZDtcclxuICAqKi9cclxuICBpc0FkZGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMgPT09IEVudGl0eVN0YXRlLkFkZGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB3aGV0aGVyIGFuIGVudGl0eVN0YXRlIGluc3RhbmNlIGlzIEVudGl0eVN0YXRlLk1vZGlmaWVkLlxyXG4gID4gICAgIHZhciBlcyA9IGFuRW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICA+ICAgICByZXR1cm4gZXMuaXNNb2RpZmllZCgpO1xyXG5cclxuICBpcyB0aGUgc2FtZSBhc1xyXG4gID4gICAgIHJldHVybiBlcyA9PT0gRW50aXR5U3RhdGUuTW9kaWZpZWQ7XHJcbiAgKiovXHJcbiAgaXNNb2RpZmllZCgpIHtcclxuICAgIHJldHVybiB0aGlzID09PSBFbnRpdHlTdGF0ZS5Nb2RpZmllZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgd2hldGhlciBhbiBlbnRpdHlTdGF0ZSBpbnN0YW5jZSBpcyBFbnRpdHlTdGF0ZS5EZWxldGVkLlxyXG4gID4gICAgIHZhciBlcyA9IGFuRW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICA+ICAgICByZXR1cm4gZXMuaXNEZWxldGVkKCk7XHJcblxyXG4gIGlzIHRoZSBzYW1lIGFzXHJcbiAgXHJcbiAgPiAgICAgcmV0dXJuIGVzID09PSBFbnRpdHlTdGF0ZS5EZWxldGVkO1xyXG4gICoqL1xyXG4gIGlzRGVsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzID09PSBFbnRpdHlTdGF0ZS5EZWxldGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB3aGV0aGVyIGFuIGVudGl0eVN0YXRlIGluc3RhbmNlIGlzIEVudGl0eVN0YXRlLkRldGFjaGVkLlxyXG4gID4gICAgIHZhciBlcyA9IGFuRW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICA+ICAgICByZXR1cm4gZXMuaXNEZXRhY2hlZCgpO1xyXG5cclxuICBpcyB0aGUgc2FtZSBhc1xyXG4gID4gICAgIHJldHVybiBlcyA9PT0gRW50aXR5U3RhdGUuRGV0YWNoZWQ7XHJcbiAgKiovXHJcbiAgaXNEZXRhY2hlZCgpIHtcclxuICAgIHJldHVybiB0aGlzID09PSBFbnRpdHlTdGF0ZS5EZXRhY2hlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgd2hldGhlciBhbiBlbnRpdHlTdGF0ZSBpbnN0YW5jZSBpcyBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQgb3IgRW50aXR5U3RhdGUuTW9kaWZpZWQuXHJcbiAgPiAgICAgdmFyIGVzID0gYW5FbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gID4gICAgIHJldHVybiBlcy5pc1VuY2hhbmdlZE9yTW9kaWZpZWQoKTtcclxuXHJcbiAgaXMgdGhlIHNhbWUgYXNcclxuICA+ICAgICByZXR1cm4gZXMgPT09IEVudGl0eVN0YXRlLlVuY2hhbmdlZCB8fCBlcyA9PT0gRW50aXR5U3RhdGUuTW9kaWZpZWRcclxuICAqKi9cclxuICBpc1VuY2hhbmdlZE9yTW9kaWZpZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcyA9PT0gRW50aXR5U3RhdGUuVW5jaGFuZ2VkIHx8IHRoaXMgPT09IEVudGl0eVN0YXRlLk1vZGlmaWVkO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgd2hldGhlciBhbiBlbnRpdHlTdGF0ZSBpbnN0YW5jZSBpcyBFbnRpdHlTdGF0ZS5BZGRlZCBvciBFbnRpdHlTdGF0ZS5Nb2RpZmllZCBvciBFbnRpdHlTdGF0ZS5EZWxldGVkLlxyXG4gID4gICAgIHZhciBlcyA9IGFuRW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICA+ICAgICByZXR1cm4gZXMuaXNBZGRlZE1vZGlmaWVkT3JEZWxldGVkKCk7XHJcblxyXG4gIGlzIHRoZSBzYW1lIGFzXHJcbiAgPiAgICAgcmV0dXJuIGVzID09PSBFbnRpdHlTdGF0ZS5BZGRlZCB8fCBlcyA9PT0gRW50aXR5U3RhdGUuTW9kaWZpZWQgfHwgZXMgPT09IEVudGl0eVN0YXRlLkRlbGV0ZWRcclxuICAqKi9cclxuICBpc0FkZGVkTW9kaWZpZWRPckRlbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcyA9PT0gRW50aXR5U3RhdGUuQWRkZWQgfHxcclxuICAgICAgdGhpcyA9PT0gRW50aXR5U3RhdGUuTW9kaWZpZWQgfHxcclxuICAgICAgdGhpcyA9PT0gRW50aXR5U3RhdGUuRGVsZXRlZDtcclxuICB9XHJcblxyXG59XHJcbkVudGl0eVN0YXRlLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJFbnRpdHlTdGF0ZVwiO1xyXG5FcnJvclsneCddID0gRW50aXR5U3RhdGUucmVzb2x2ZVN5bWJvbHMoKTtcclxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBd0NFO0FBQ0YsTUFBTSxPQUFPLFVBQVU7SUFTckIsT0FBTztJQUNQLFlBQVksYUFBc0I7UUFDaEMsSUFBSSxhQUFhLEVBQUU7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM3RTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGNBQWM7UUFDbkIsSUFBSSxJQUFJLENBQUMsd0JBQXdCO1lBQUUsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDeEUsSUFBSSxNQUFNLEdBQTBDLEVBQUUsQ0FBQztRQUV2RCxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFO29CQUM5QixNQUFNLENBQUMsSUFBSSxDQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7aUJBQ2pCO2FBQ0Y7U0FDRjtRQUNELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxNQUFNLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFlO1FBQzdCLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxVQUFVLENBQUMsRUFBRTtZQUNoQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBR0QsTUFBTTtJQUNOLDBGQUEwRjtJQUMxRiw0Q0FBNEM7SUFDNUMsa0RBQWtEO0lBQ2xELDhCQUE4QjtJQUM5QixXQUFXO0lBQ1gsTUFBTTtJQUNOLDhCQUE4QjtJQUM5QixzQ0FBc0M7SUFDdEMsS0FBSztJQUVMLDJDQUEyQztJQUMzQyxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsTUFBTTtRQUNKLE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFLLElBQUksQ0FBQyxXQUFtQixDQUFDLElBQUk7WUFDaEUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgMjAxMi0yMDIzIElkZWFCbGFkZSwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gIFxyXG4gKiBVc2UsIHJlcHJvZHVjdGlvbiwgZGlzdHJpYnV0aW9uLCBhbmQgbW9kaWZpY2F0aW9uIG9mIHRoaXMgY29kZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgXHJcbiAqIGNvbmRpdGlvbnMgb2YgdGhlIElkZWFCbGFkZSBCcmVlemUgbGljZW5zZSwgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYnJlZXplanMuY29tL2xpY2Vuc2VcclxuICpcclxuICogQXV0aG9yOiBKYXkgVHJhYmFuZFxyXG4gKi9cclxuXHJcbi8qKlxyXG5CYXNlIGNsYXNzIGZvciBhbGwgQnJlZXplIGVudW1lcmF0aW9ucywgc3VjaCBhcyBFbnRpdHlTdGF0ZSwgRGF0YVR5cGUsIEZldGNoU3RyYXRlZ3ksIE1lcmdlU3RyYXRlZ3kgZXRjLlxyXG5BIEJyZWV6ZSBFbnVtIGlzIGEgbmFtZXNwYWNlZCBzZXQgb2YgY29uc3RhbnQgdmFsdWVzLiAgRWFjaCBFbnVtIGNvbnNpc3RzIG9mIGEgZ3JvdXAgb2YgcmVsYXRlZCBjb25zdGFudHMsIGNhbGxlZCAnc3ltYm9scycuXHJcblVubGlrZSBlbnVtcyBpbiBzb21lIG90aGVyIGVudmlyb25tZW50cywgZWFjaCAnc3ltYm9sJyBjYW4gaGF2ZSBib3RoIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuXHJcbj4gICAgIGNsYXNzIERheU9mV2VlayBleHRlbmRzIEJyZWV6ZUVudW0ge1xyXG4+ICAgICAgIGRheUluZGV4OiBudW1iZXI7XHJcbj4gICAgICAgaXNXZWVrZW5kPzogYm9vbGVhbjtcclxuPiAgICAgICBuZXh0RGF5KCkge1xyXG4+ICAgICAgICAgbGV0IG5leHRJbmRleCA9ICh0aGlzLmRheUluZGV4ICsgMSkgJSA3O1xyXG4+ICAgICAgICAgcmV0dXJuIERheU9mV2Vlay5nZXRTeW1ib2xzKClbbmV4dEluZGV4XTtcclxuPiAgICAgICB9XHJcbj5cclxuPiAgICAgICBzdGF0aWMgTW9uZGF5ID0gbmV3IERheU9mV2VlayggeyBkYXlJbmRleDogMH0pO1xyXG4+ICAgICAgIHN0YXRpYyBUdWVzZGF5ID0gbmV3IERheU9mV2VlayggeyBkYXlJbmRleDogMSB9KTtcclxuPiAgICAgICBzdGF0aWMgV2VkbmVzZGF5ID0gbmV3IERheU9mV2VlayggeyBkYXlJbmRleDogMiB9KTtcclxuPiAgICAgICBzdGF0aWMgVGh1cnNkYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAzIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBGcmlkYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiA0IH0pO1xyXG4+ICAgICAgIHN0YXRpYyBTYXR1cmRheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDUsIGlzV2Vla2VuZDogdHJ1ZSB9KTtcclxuPiAgICAgICBzdGF0aWMgU3VuZGF5ID0gbmV3IERheU9mV2VlayggeyBkYXlJbmRleDogNiwgaXNXZWVrZW5kOiB0cnVlIH0pO1xyXG4+ICAgICB9XHJcbj5cclxuPiAgICAgZGVzY3JpYmUoXCJEYXlPZldlZWtcIiwgKCkgPT4ge1xyXG4+ICAgICAgIHRlc3QoXCJzaG91bGQgc3VwcG9ydCBmdWxsIGVudW0gY2FwYWJpbGl0aWVzXCIsIGZ1bmN0aW9uKCkge1xyXG4+ICAgICAgICAgLy8gLy8gY3VzdG9tIG1ldGhvZHNcclxuPiAgICAgICAgIGxldCBkb3dTeW1ib2xzID0gRGF5T2ZXZWVrLmdldFN5bWJvbHMoKTtcclxuPiAgICAgICAgIGV4cGVjdChkb3dTeW1ib2xzLmxlbmd0aCkudG9CZSg3KTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuTW9uZGF5Lm5leHREYXkoKSkudG9CZShEYXlPZldlZWsuVHVlc2RheSk7XHJcbj4gICAgICAgICBleHBlY3QoRGF5T2ZXZWVrLlN1bmRheS5uZXh0RGF5KCkpLnRvQmUoRGF5T2ZXZWVrLk1vbmRheSk7XHJcbj4gICAgICAgLy8gLy8gY3VzdG9tIHByb3BlcnRpZXNcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuVHVlc2RheS5pc1dlZWtlbmQpLnRvQmUodW5kZWZpbmVkKTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuU2F0dXJkYXkuaXNXZWVrZW5kKS50b0JlKHRydWUpO1xyXG4+ICAgICAgIC8vIC8vIFN0YW5kYXJkIGVudW0gY2FwYWJpbGl0aWVzXHJcbj4gICAgICAgICBleHBlY3QoRGF5T2ZXZWVrLlRodXJzZGF5IGluc3RhbmNlb2YgRGF5T2ZXZWVrKS50b0JlKHRydWUpO1xyXG4+ICAgICAgICAgZXhwZWN0KEJyZWV6ZUVudW0uaXNTeW1ib2woRGF5T2ZXZWVrLldlZG5lc2RheSkpLnRvQmUodHJ1ZSk7XHJcbj4gICAgICAgICBleHBlY3QoRGF5T2ZXZWVrLmNvbnRhaW5zKERheU9mV2Vlay5UaHVyc2RheSkpLnRvQmUodHJ1ZSk7XHJcbj4gICAgICAgICBleHBlY3QoRGF5T2ZXZWVrLkZyaWRheS50b1N0cmluZygpKS50b0JlKFwiRnJpZGF5XCIpO1xyXG4+ICAgICAgIH0pO1xyXG4+ICAgfSk7XHJcbk5vdGUgdGhhdCB3ZSBoYXZlIEVycm9yWyd4J10gPSAuLi4gaW4gc29tZSBwbGFjZXMgaW4gdGhlIGNvZGUgdG8gcHJldmVudCBUZXJzZXIgZnJvbSBvcHRpbWl6aW5nIG91dCBzb21lIGltcG9ydGFudCBjYWxscy5cclxuQGR5bmFtaWNcclxuKi9cclxuZXhwb3J0IGNsYXNzIEJyZWV6ZUVudW0ge1xyXG4gIC8vIC8vIFRPRE86IHRoaW5rIGFib3V0IENvbXBvc2l0ZUVudW0gKGZsYWdzIGltcGwpLlxyXG4gIC8qKiBUaGUgbmFtZSBvZiB0aGlzIHN5bWJvbCAqL1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKiogVHlwZSBvZiB0aGUgZW51bTsgc2V0IGluIHByb3RvdHlwZSBvZiBlYWNoIGVudW0gKi9cclxuICBfJHR5cGVOYW1lOiBzdHJpbmc7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIF9yZXNvbHZlZE5hbWVzQW5kU3ltYm9sczogeyBuYW1lOiBzdHJpbmcsIHN5bWJvbDogQnJlZXplRW51bSB9W107XHJcblxyXG4gIC8qKiAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzT2JqPzogT2JqZWN0KSB7XHJcbiAgICBpZiAocHJvcGVydGllc09iaikge1xyXG4gICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzT2JqKS5mb3JFYWNoKChrZXkpID0+IHRoaXNba2V5XSA9IHByb3BlcnRpZXNPYmpba2V5XSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGFsbCBvZiB0aGUgc3ltYm9scyBjb250YWluZWQgd2l0aGluIHRoaXMgRW51bS5cclxuICA+ICAgICBsZXQgc3ltYm9scyA9IERheU9mV2Vlay5nZXRTeW1ib2xzKCk7XHJcbiAgQHJldHVybiBBbGwgb2YgdGhlIHN5bWJvbHMgY29udGFpbmVkIHdpdGhpbiB0aGlzIEVudW0uXHJcbiAgKiovXHJcbiAgc3RhdGljIGdldFN5bWJvbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU3ltYm9scygpLm1hcChrcyA9PiBrcy5zeW1ib2wpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIG9mIHRoZSBzeW1ib2xzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBFbnVtLlxyXG4gID4gICAgIGxldCBzeW1ib2xzID0gRGF5T2ZXZWVrLmdldE5hbWVzKCk7XHJcbiAgQHJldHVybiAgQWxsIG9mIHRoZSBuYW1lcyBvZiB0aGUgc3ltYm9scyBjb250YWluZWQgd2l0aGluIHRoaXMgRW51bS5cclxuICAqKi9cclxuICBzdGF0aWMgZ2V0TmFtZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU3ltYm9scygpLm1hcChrcyA9PiBrcy5uYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYW4gRW51bSBzeW1ib2wgZ2l2ZW4gaXRzIG5hbWUuXHJcbiAgPiAgICAgbGV0IGRheU9mV2VlayA9IERheU9mV2Vlay5mcm9tKFwiVGh1cnNkYXlcIik7XHJcbiAgPiAgICAgLy8gbm93ZGF5T2ZXZWVrID09PSBEYXlPZldlZWsuVGh1cnNkYXlcclxuICBAcGFyYW0gbmFtZSAtIE5hbWUgZm9yIHdoaWNoIGFuIGVudW0gc3ltYm9sIHNob3VsZCBiZSByZXR1cm5lZC5cclxuICBAcmV0dXJuIFRoZSBzeW1ib2wgdGhhdCBtYXRjaGVzIHRoZSBuYW1lIG9yICd1bmRlZmluZWQnIGlmIG5vdCBmb3VuZC5cclxuICAqKi9cclxuICBzdGF0aWMgZnJvbU5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpc1tuYW1lXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFNlYWxzIHRoaXMgZW51bSBzbyB0aGF0IG5vIG1vcmUgc3ltYm9scyBtYXkgYmUgYWRkZWQgdG8gaXQuIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGFsbCBzeW1ib2xzXHJcbiAgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIEVudW0uIFRoaXMgbWV0aG9kIGFsc28gc2V0cyB0aGUgJ25hbWUnIHByb3BlcnR5IG9uIGVhY2ggb2YgdGhlIHN5bWJvbHMuXHJcbiAgPiAgICAgRGF5T2ZXZWVrLnJlc29sdmVTeW1ib2xzKCk7XHJcbiAgKiovXHJcbiAgc3RhdGljIHJlc29sdmVTeW1ib2xzKCkge1xyXG4gICAgaWYgKHRoaXMuX3Jlc29sdmVkTmFtZXNBbmRTeW1ib2xzKSByZXR1cm4gdGhpcy5fcmVzb2x2ZWROYW1lc0FuZFN5bWJvbHM7XHJcbiAgICBsZXQgcmVzdWx0OiB7bmFtZTogc3RyaW5nLCBzeW1ib2w6IEJyZWV6ZUVudW0gfVtdID0gW107XHJcblxyXG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMpIHtcclxuICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGxldCBzeW1iID0gdGhpc1trZXldO1xyXG4gICAgICAgIGlmIChzeW1iIGluc3RhbmNlb2YgQnJlZXplRW51bSkge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goIHsgbmFtZToga2V5LCBzeW1ib2w6IHN5bWIgfSk7XHJcbiAgICAgICAgICB0aGlzW2tleV0gPSBzeW1iO1xyXG4gICAgICAgICAgc3ltYi5uYW1lID0ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVzb2x2ZWROYW1lc0FuZFN5bWJvbHMgPSByZXN1bHQ7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB3aGV0aGVyIGFuIEVudW0gY29udGFpbnMgYSBzcGVjaWZpZWQgc3ltYm9sLlxyXG4gID4gICAgIGxldCBzeW1ib2wgPSBEYXlPZldlZWsuRnJpZGF5O1xyXG4gID4gICAgIGlmIChEYXlPZldlZWsuY29udGFpbnMoc3ltYm9sKSkge1xyXG4gID4gICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICA+ICAgICB9XHJcbiAgQHBhcmFtIHN5bSAtIE9iamVjdCBvciBzeW1ib2wgdG8gdGVzdC5cclxuICBAcmV0dXJuIFdoZXRoZXIgdGhpcyBFbnVtIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3ltYm9sLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBjb250YWlucyhzeW06IEJyZWV6ZUVudW0pIHtcclxuICAgIGlmICghKHN5bSBpbnN0YW5jZW9mIEJyZWV6ZUVudW0pKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpc1tzeW0ubmFtZV0gIT0gbnVsbDtcclxuICB9XHJcblxyXG5cclxuICAvLyAvKipcclxuICAvLyBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIEVudW0gJ3N5bWJvbCcuIFVzZSB0aGUgJ2NvbnRhaW5zJyBtZXRob2QgaW5zdGVhZCBvZiB0aGlzIG9uZSBcclxuICAvLyBpZiB5b3Ugd2FudCB0byB0ZXN0IGZvciBhIHNwZWNpZmljIEVudW0uIFxyXG4gIC8vID4gICAgIGlmIChFbnVtLmlzU3ltYm9sKERheU9mV2Vlay5XZWRuZXNkYXkpKSB7XHJcbiAgLy8gPiAgICAgICAvLyBkbyBzb21ldGhpbmcgLi4uXHJcbiAgLy8gPiAgICAgfTtcclxuICAvLyAqKi9cclxuICAvLyBzdGF0aWMgaXNTeW1ib2wob2JqOiBhbnkpIHtcclxuICAvLyAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBCcmVlemVFbnVtO1xyXG4gIC8vIH07XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgbmFtZSBvZiB0aGlzIEVudW0gKi9cclxuICB0b1N0cmluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJuIGVudW0gbmFtZSBhbmQgc3ltYm9sIG5hbWUgKi9cclxuICB0b0pTT04oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBfJHR5cGVOYW1lOiB0aGlzWydfJHR5cGVOYW1lJ10gfHwgKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KS5uYW1lLFxyXG4gICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH07XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbiJdfQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsU0FBUyxXQUFXLENBQUksSUFBb0IsRUFBRSxJQUFPLEVBQUUsYUFBaUM7SUFDdEYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUNwQyxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzlCLGdDQUFnQztJQUNoQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUM3QixJQUFJO1lBQ0YsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsQ0FBQyxDQUFDLE9BQU8sR0FBRyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3ZELElBQUksYUFBYSxFQUFFO2dCQUNqQixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEI7aUJBQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQjtpQkFBTTtnQkFDTCxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6QjtTQUNGO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxDQUFRO0lBQ3BDLHVCQUF1QjtJQUN2QixzQkFBc0I7QUFDeEIsQ0FBQztBQVNEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxXQUFXO0lBZ0J0Qjs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxJQUFZLEVBQUUsU0FBaUIsRUFBRSxvQkFBd0M7UUEyRnJGOzs7Ozs7Ozs7OztXQVdHO1FBQ0gsZ0JBQVcsR0FBRyxVQUFVLFFBQWdCO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUNyQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQzdCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztpQkFDMUI7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxPQUFPLEtBQUssQ0FBQzthQUNkO1FBQ0gsQ0FBQyxDQUFDO1FBckhBLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxRCxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLG9CQUFvQjtRQUNwQixXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLG9CQUFvQixFQUFFO1lBQ3hCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxPQUFPLENBQUMsSUFBTyxFQUFFLGVBQXdCLEtBQUssRUFBRSxhQUFpQztRQUUvRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUVyRSxJQUFJLFlBQVksS0FBSyxJQUFJLEVBQUU7WUFDekIsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN2RDthQUFNO1lBQ0wsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxZQUFZLENBQUMsSUFBTyxFQUFFLGFBQWdDO1FBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSCxTQUFTLENBQUMsUUFBMEI7UUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7U0FDeEI7UUFFRCxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNuRSxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUM7UUFDN0IsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQStCRCw2QkFBNkI7SUFDN0IsS0FBSztRQUNILElBQUksQ0FBQyxZQUFZLEdBQVEsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCx1Q0FBdUM7SUFFdkMseUdBQXlHO0lBQ3pHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBVyxFQUFFLFdBQXlCO1FBQ3ZELE1BQU0sQ0FBQyxlQUFlLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMEJHO0lBQ0osTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFpQixFQUFFLEdBQVcsRUFBRSxTQUEwQztRQUNyRixXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0QsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZGLElBQUksRUFBRSxHQUFRLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUNsQixFQUFFLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztTQUNwQjtRQUNELEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFpQixFQUFFLEdBQVc7UUFDN0MsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9ELFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0Msa0VBQWtFO1FBQ2xFLElBQVUsR0FBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsNERBQTREO1FBQzVELE9BQU8sV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQzs7QUFsTkQsd0JBQXdCO0FBQ2pCLDBCQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzNCLHdCQUF3QjtBQUNqQiwwQkFBYyxHQUFHLENBQUMsQ0FBQztBQWlOMUIsd0JBQXdCO0FBQ2pCLHNCQUFVLEdBQUcsVUFBVSxTQUFpQixFQUFFLEdBQVc7SUFDMUQsSUFBSSxTQUFTLEdBQVEsSUFBSSxDQUFDO0lBQzFCLElBQUksRUFBRSxHQUFRLEdBQUcsQ0FBQztJQUNsQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO0lBQzdCLElBQUksUUFBUSxFQUFFO1FBQ1osU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNqQztJQUNELElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtRQUNyQixJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVUsRUFBRTtZQUNuQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7YUFBTTtZQUNMLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNwQjtLQUNGO1NBQU07UUFDTCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4RCxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDTCxzQ0FBc0M7WUFDdEMsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0FBQ0gsQ0FBQyxDQUFDO0FBS0osMENBQTBDO0FBQ3pDLElBQVksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5cclxuZnVuY3Rpb24gcHVibGlzaENvcmU8VD4odGhhdDogQnJlZXplRXZlbnQ8VD4sIGRhdGE6IFQsIGVycm9yQ2FsbGJhY2s/OiAoZTogRXJyb3IpID0+IGFueSkge1xyXG4gIGxldCBzdWJzY3JpYmVycyA9IHRoYXQuX3N1YnNjcmliZXJzO1xyXG4gIGlmICghc3Vic2NyaWJlcnMpIHJldHVybiB0cnVlO1xyXG4gIC8vIHN1YnNjcmliZXJzIGZyb20gb3V0ZXIgc2NvcGUuXHJcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAocykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcy5jYWxsYmFjayhkYXRhKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgZS5jb250ZXh0ID0gXCJ1bmFibGUgdG8gcHVibGlzaCBvbiB0b3BpYzogXCIgKyB0aGF0Lm5hbWU7XHJcbiAgICAgIGlmIChlcnJvckNhbGxiYWNrKSB7XHJcbiAgICAgICAgZXJyb3JDYWxsYmFjayhlKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGF0Ll9kZWZhdWx0RXJyb3JDYWxsYmFjaykge1xyXG4gICAgICAgIHRoYXQuX2RlZmF1bHRFcnJvckNhbGxiYWNrKGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZhbGxiYWNrRXJyb3JIYW5kbGVyKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZhbGxiYWNrRXJyb3JIYW5kbGVyKGU6IEVycm9yKSB7XHJcbiAgLy8gVE9ETzogbWF5YmUgbG9nIHRoaXNcclxuICAvLyBmb3Igbm93IGRvIG5vdGhpbmc7XHJcbn1cclxuXHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpcHRpb24ge1xyXG4gIHVuc3ViS2V5OiBudW1iZXI7XHJcbiAgY2FsbGJhY2s6IChkYXRhOiBhbnkpID0+IGFueTtcclxufVxyXG5cclxuLyoqXHJcbkNsYXNzIHRvIHN1cHBvcnQgYmFzaWMgZXZlbnQgcHVibGljYXRpb24gYW5kIHN1YnNjcmlwdGlvbiBzZW1hbnRpY3MuXHJcbkBkeW5hbWljXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgQnJlZXplRXZlbnQ8VD4ge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHN0YXRpYyBfX2V2ZW50TmFtZU1hcCA9IHt9O1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHN0YXRpYyBfX25leHRVbnN1YktleSA9IDE7XHJcbiAgLyoqIFRoZSBuYW1lIG9mIHRoaXMgRXZlbnQgKi9cclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBvYmplY3QgZG9pbmcgdGhlIHB1YmxpY2F0aW9uLiBpLmUuIHRoZSBvYmplY3QgdG8gd2hpY2ggdGhpcyBldmVudCBpcyBhdHRhY2hlZC4gKi9cclxuICBwdWJsaXNoZXI6IE9iamVjdDtcclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX3N1YnNjcmliZXJzOiBTdWJzY3JpcHRpb25bXTtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfZGVmYXVsdEVycm9yQ2FsbGJhY2s6IChlOiBFcnJvcikgPT4gYW55O1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgQ29uc3RydWN0b3IgZm9yIGFuIEV2ZW50XHJcbiAgPiAgICAgc2FsYXJ5RXZlbnQgPSBuZXcgQnJlZXplRXZlbnQoXCJzYWxhcnlFdmVudFwiLCBwZXJzb24pO1xyXG4gIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50LlxyXG4gIEBwYXJhbSBwdWJsaXNoZXIgLSBUaGUgb2JqZWN0IHRoYXQgd2lsbCBiZSBkb2luZyB0aGUgcHVibGljYXRpb24uIGkuZS4gdGhlIG9iamVjdCB0byB3aGljaCB0aGlzIGV2ZW50IGlzIGF0dGFjaGVkLlxyXG4gIEBwYXJhbSBkZWZhdWx0RXJyb3JDYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHN1YnNjcmlwdGlvbiBleGVjdXRpb24uIFxyXG4gIElmIG9taXR0ZWQgdGhlbiBzdWJzY3JpYmVyIG5vdGlmaWNhdGlvbiBmYWlsdXJlcyB3aWxsIGJlIGlnbm9yZWQuXHJcbiAgKiovXHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwdWJsaXNoZXI6IE9iamVjdCwgZGVmYXVsdEVycm9yQ2FsbGJhY2s/OiAoZTogRXJyb3IpID0+IGFueSkge1xyXG4gICAgYXNzZXJ0UGFyYW0obmFtZSwgXCJldmVudE5hbWVcIikuaXNOb25FbXB0eVN0cmluZygpLmNoZWNrKCk7XHJcbiAgICBhc3NlcnRQYXJhbShwdWJsaXNoZXIsIFwicHVibGlzaGVyXCIpLmlzT2JqZWN0KCkuY2hlY2soKTtcclxuXHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgLy8gcmVnaXN0ZXIgdGhlIG5hbWVcclxuICAgIEJyZWV6ZUV2ZW50Ll9fZXZlbnROYW1lTWFwW25hbWVdID0gdHJ1ZTtcclxuICAgIHRoaXMucHVibGlzaGVyID0gcHVibGlzaGVyO1xyXG4gICAgaWYgKGRlZmF1bHRFcnJvckNhbGxiYWNrKSB7XHJcbiAgICAgIHRoaXMuX2RlZmF1bHRFcnJvckNhbGxiYWNrID0gZGVmYXVsdEVycm9yQ2FsbGJhY2s7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBQdWJsaXNoIGRhdGEgZm9yIHRoaXMgZXZlbnQuXHJcbiAgPiAgICAgIC8vIEFzc3VtZSAnc2FsYXJ5RXZlbnQnIGlzIHByZXZpb3VzbHkgY29uc3RydWN0ZWQgRXZlbnRcclxuICA+ICAgICAgc2FsYXJ5RXZlbnQucHVibGlzaCggeyBldmVudFR5cGU6IFwicGF5UmFpc2VcIiwgYW1vdW50OiAxMDAgfSk7XHJcblxyXG4gIFRoaXMgZXZlbnQgY2FuIGFsc28gYmUgcHVibGlzaGVkIGFzeWNocm9ub3VzbHlcclxuICA+ICAgICAgc2FsYXJ5RXZlbnQucHVibGlzaCggeyBldmVudFR5cGU6IFwicGF5UmFpc2VcIiwgYW1vdW50OiAxMDAgfSwgdHJ1ZSk7XHJcblxyXG4gIEFuZCB3ZSBjYW4gYWRkIGEgaGFuZGxlciBpbiBjYXNlIHRoZSBzdWJzY3JpYmVyICdtaXNoYW5kbGVzJyB0aGUgZXZlbnQuXHJcbiAgPiAgICAgIHNhbGFyeUV2ZW50LnB1Ymxpc2goIHsgZXZlbnRUeXBlOiBcInBheVJhaXNlXCIsIGFtb3VudDogMTAwIH0sIHRydWUsIGZ1bmN0aW9uKGVycm9yKSB7XHJcbiAgPiAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgJ2Vycm9yJyBvYmplY3RcclxuICA+ICAgICAgfSk7XHJcbiAgQHBhcmFtIGRhdGEgLSBEYXRhIHRvIHB1Ymxpc2hcclxuICBAcGFyYW0gcHVibGlzaEFzeW5jIC0gKGRlZmF1bHQ9ZmFsc2UpIFdoZXRoZXIgdG8gcHVibGlzaCBhc3luY2hvbm91c2x5IG9yIG5vdC5cclxuICBAcGFyYW0gZXJyb3JDYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgYW55IGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyBwdWJsaWNhdGlvbi4gSWYgb21pdHRlZCxcclxuICBlcnJvcnMgd2lsbCBiZSBlYXRlbi5cclxuICBAcmV0dXJuIGZhbHNlIGlmIGV2ZW50IGlzIGRpc2FibGVkOyB0cnVlIG90aGVyd2lzZS5cclxuICAqKi9cclxuICBwdWJsaXNoKGRhdGE6IFQsIHB1Ymxpc2hBc3luYzogYm9vbGVhbiA9IGZhbHNlLCBlcnJvckNhbGxiYWNrPzogKGU6IEVycm9yKSA9PiBhbnkpIHtcclxuXHJcbiAgICBpZiAoIUJyZWV6ZUV2ZW50Ll9pc0VuYWJsZWQodGhpcy5uYW1lLCB0aGlzLnB1Ymxpc2hlcikpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAocHVibGlzaEFzeW5jID09PSB0cnVlKSB7XHJcbiAgICAgIHNldFRpbWVvdXQocHVibGlzaENvcmUsIDAsIHRoaXMsIGRhdGEsIGVycm9yQ2FsbGJhY2spO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcHVibGlzaENvcmUodGhpcywgZGF0YSwgZXJyb3JDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFB1Ymxpc2ggZGF0YSBmb3IgdGhpcyBldmVudCBhc3luY2hyb25vdXNseS5cclxuICA+ICAgICAgLy8gQXNzdW1lICdzYWxhcnlFdmVudCcgaXMgcHJldmlvdXNseSBjb25zdHJ1Y3RlZCBFdmVudFxyXG4gID4gICAgICBzYWxhcnlFdmVudC5wdWJsaXNoQXN5bmMoIHsgZXZlbnRUeXBlOiBcInBheVJhaXNlXCIsIGFtb3VudDogMTAwIH0pO1xyXG5cclxuICBBbmQgd2UgY2FuIGFkZCBhIGhhbmRsZXIgaW4gY2FzZSB0aGUgc3Vic2NyaWJlciAnbWlzaGFuZGxlcycgdGhlIGV2ZW50LlxyXG4gID4gICAgICBzYWxhcnlFdmVudC5wdWJsaXNoQXN5bmMoIHsgZXZlbnRUeXBlOiBcInBheVJhaXNlXCIsIGFtb3VudDogMTAwIH0sIGZ1bmN0aW9uKGVycm9yKSB7XHJcbiAgPiAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgJ2Vycm9yJyBvYmplY3RcclxuICA+ICAgICAgfSk7XHJcbiAgQHBhcmFtIGRhdGEgLSBEYXRhIHRvIHB1Ymxpc2hcclxuICBAcGFyYW0gZXJyb3JDYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgYW55IGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyBwdWJsaWNhdGlvbi4gSWYgb21pdHRlZCxcclxuICBlcnJvcnMgd2lsbCBiZSBlYXRlbi5cclxuICAqKi9cclxuICBwdWJsaXNoQXN5bmMoZGF0YTogVCwgZXJyb3JDYWxsYmFjazogKGU6IEVycm9yKSA9PiBhbnkpIHtcclxuICAgIHRoaXMucHVibGlzaChkYXRhLCB0cnVlLCBlcnJvckNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFN1YnNjcmliZSB0byB0aGlzIGV2ZW50LlxyXG4gID4gICAgICAvLyBBc3N1bWUgJ3NhbGFyeUV2ZW50JyBpcyBwcmV2aW91c2x5IGNvbnN0cnVjdGVkIEV2ZW50XHJcbiAgPiAgICAgIHNhbGFyeUV2ZW50LnN1YnNjcmliZShmdW5jdGlvbiAoZXZlbnRBcmdzKSB7XHJcbiAgPiAgICAgICAgICBpZiAoZXZlbnRBcmdzLmV2ZW50VHlwZSA9PT0gXCJwYXlSYWlzZVwiKSB7XHJcbiAgPiAgICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nXHJcbiAgPiAgICAgICAgICB9XHJcbiAgPiAgICAgIH0pO1xyXG5cclxuICBUaGVyZSBhcmUgc2V2ZXJhbCBidWlsdCBpbiBCcmVlemUgZXZlbnRzLCBzdWNoIGFzIFtbRW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZF1dLCBbW0VudGl0eUFzcGVjdC52YWxpZGF0aW9uRXJyb3JzQ2hhbmdlZF1dIGFzIHdlbGwuXHJcbiAgPiAgICAgIC8vIEFzc3VtZSBvcmRlciBpcyBhIHByZWV4aXN0aW5nICdvcmRlcicgZW50aXR5XHJcbiAgPiAgICAgIG9yZGVyLmVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQuc3Vic2NyaWJlKGZ1bmN0aW9uIChwY0V2ZW50KSB7XHJcbiAgPiAgICAgICAgICBpZiAoIHBjRXZlbnQucHJvcGVydHlOYW1lID09PSBcIk9yZGVyRGF0ZVwiKSB7XHJcbiAgPiAgICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nXHJcbiAgPiAgICAgICAgICB9XHJcbiAgPiAgICAgIH0pO1xyXG4gIEBwYXJhbSBjYWxsYmFjay0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW5ldmVyICdkYXRhJyBpcyBwdWJsaXNoZWQgZm9yIHRoaXMgZXZlbnQuXHJcbiAgQHBhcmFtIGNhbGxiYWNrLmRhdGEgLSB7T2JqZWN0fSBXaGF0ZXZlciAnZGF0YScgd2FzIHB1Ymxpc2hlZC4gIFRoaXMgc2hvdWxkIGJlIGRvY3VtZW50ZWQgb24gdGhlIHNwZWNpZmljIGV2ZW50LlxyXG4gIEByZXR1cm4gVGhpcyBpcyBhIGtleSBmb3IgJ3Vuc3Vic2NyaXB0aW9uJy4gIEl0IGNhbiBiZSBwYXNzZWQgdG8gdGhlICd1bnN1YnNjcmliZScgbWV0aG9kLlxyXG4gICoqL1xyXG4gIHN1YnNjcmliZShjYWxsYmFjazogKGRhdGE6IFQpID0+IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpYmVycykge1xyXG4gICAgICB0aGlzLl9zdWJzY3JpYmVycyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB1bnN1YktleSA9IEJyZWV6ZUV2ZW50Ll9fbmV4dFVuc3ViS2V5O1xyXG4gICAgdGhpcy5fc3Vic2NyaWJlcnMucHVzaCh7IHVuc3ViS2V5OiB1bnN1YktleSwgY2FsbGJhY2s6IGNhbGxiYWNrIH0pO1xyXG4gICAgKytCcmVlemVFdmVudC5fX25leHRVbnN1YktleTtcclxuICAgIHJldHVybiB1bnN1YktleTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFVuc3Vic2NyaWJlIGZyb20gdGhpcyBldmVudC5cclxuICA+ICAgICAgLy8gQXNzdW1lIG9yZGVyIGlzIGEgcHJlZXhpc3RpbmcgJ29yZGVyJyBlbnRpdHlcclxuICA+ICAgICAgbGV0IHRva2VuID0gb3JkZXIuZW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZC5zdWJzY3JpYmUoZnVuY3Rpb24gKHBjRXZlbnQpIHtcclxuICA+ICAgICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICA+ICAgICAgfSk7XHJcbiAgPiAgICAgIC8vIHNvbWV0aW1lIGxhdGVyXHJcbiAgPiAgICAgIG9yZGVyLmVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQudW5zdWJzY3JpYmUodG9rZW4pO1xyXG4gIEBwYXJhbSB1bnN1YktleSAtIFRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHRoZSAnc3Vic2NyaWJlJyBtZXRob2QgbWF5IGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgaGVyZS5cclxuICBAcmV0dXJuIFdoZXRoZXIgdW5zdWJzY3JpcHRpb24gb2NjdXJlZC4gVGhpcyB3aWxsIHJldHVybiBmYWxzZSBpZiBhbHJlYWR5IHVuc3Vic2NyaWJlZCBvciBpZiB0aGUga2V5IHNpbXBseVxyXG4gIGNhbm5vdCBiZSBmb3VuZC5cclxuICAqKi9cclxuICB1bnN1YnNjcmliZSA9IGZ1bmN0aW9uICh1bnN1YktleTogbnVtYmVyKSB7XHJcbiAgICBpZiAoIXRoaXMuX3N1YnNjcmliZXJzKSByZXR1cm4gZmFsc2U7XHJcbiAgICBsZXQgc3VicyA9IHRoaXMuX3N1YnNjcmliZXJzO1xyXG4gICAgbGV0IGl4ID0gY29yZS5hcnJheUluZGV4T2Yoc3VicywgZnVuY3Rpb24gKHMpIHtcclxuICAgICAgcmV0dXJuIHMudW5zdWJLZXkgPT09IHVuc3ViS2V5O1xyXG4gICAgfSk7XHJcbiAgICBpZiAoaXggIT09IC0xKSB7XHJcbiAgICAgIHN1YnMuc3BsaWNlKGl4LCAxKTtcclxuICAgICAgaWYgKHN1YnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlcnMgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKiByZW1vdmUgYWxsIHN1YnNjcmliZXJzICovXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLl9zdWJzY3JpYmVycyA9IDxhbnk+bnVsbDtcclxuICB9XHJcblxyXG4gIC8qKiBldmVudCBidWJibGluZyAtIGRvY3VtZW50IGxhdGVyLiAqL1xyXG5cclxuICAvLyBudWxsIG9yIHVuZGVmaW5lZCAnZ2V0UGFyZW50Rm4nIG1lYW5zIEV2ZW50IGRvZXMgbm90IG5lZWQgdG8gYnViYmxlIGkuZS4gdGhhdCBpdCBpcyBhbHdheXMgZW5hYmxlZCAtIC5cclxuICBzdGF0aWMgYnViYmxlRXZlbnQodGFyZ2V0OiBhbnksIGdldFBhcmVudEZuPzogKCgpID0+IGFueSkpIHtcclxuICAgIHRhcmdldC5fZ2V0RXZlbnRQYXJlbnQgPSBnZXRQYXJlbnRGbiB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgbmFtZWQgZXZlbnQgZm9yIGFuIG9iamVjdCBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbi5cclxuICA+ICAgICAgQnJlZXplRXZlbnQuZW5hYmxlKOKAnHByb3BlcnR5Q2hhbmdlZOKAnSwgbXlFbnRpdHlNYW5hZ2VyLCBmYWxzZSlcclxuXHJcbiAgd2lsbCBkaXNhYmxlIGFsbCBFbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkIGV2ZW50cyB3aXRoaW4gYSBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICBCcmVlemVFdmVudC5lbmFibGUo4oCccHJvcGVydHlDaGFuZ2Vk4oCdLCBteUVudGl0eU1hbmFnZXIsIHRydWUpXHJcblxyXG4gIHdpbGwgZW5hYmxlIGFsbCBFbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkIGV2ZW50cyB3aXRoaW4gYSBFbnRpdHlNYW5hZ2VyLlxyXG4gID4gICAgICBCcmVlemVFdmVudC5lbmFibGUo4oCccHJvcGVydHlDaGFuZ2Vk4oCdLCBteUVudGl0eS5lbnRpdHlBc3BlY3QsIGZhbHNlKVxyXG5cclxuICB3aWxsIGRpc2FibGUgRW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZCBldmVudHMgZm9yIGEgc3BlY2lmaWMgZW50aXR5LlxyXG4gID4gICAgICBCcmVlemVFdmVudC5lbmFibGUo4oCccHJvcGVydHlDaGFuZ2Vk4oCdLCBteUVudGl0eS5lbnRpdHlBc3BlY3QsIG51bGwpXHJcblxyXG4gIHdpbGwgcmVtb3ZlcyBhbnkgZW5hYmxpbmcgLyBkaXNhYmxpbmcgYXQgdGhlIGVudGl0eSBhc3BlY3QgbGV2ZWwgc28gbm93IGFueSAnRXZlbnQuZW5hYmxlJyBjYWxscyBhdCB0aGUgRW50aXR5TWFuYWdlciBsZXZlbCxcclxuICBtYWRlIGVpdGhlciBwcmV2aW91c2x5IG9yIGluIHRoZSBmdXR1cmUsIHdpbGwgY29udHJvbCBub3RpZmljYXRpb24uXHJcbiAgPiAgICAgIEJyZWV6ZUV2ZW50LmVuYWJsZSjigJx2YWxpZGF0aW9uRXJyb3JzQ2hhbmdlZOKAnSwgbXlFbnRpdHlNYW5hZ2VyLCBmdW5jdGlvbihlbSkge1xyXG4gID4gICAgICAgICAgcmV0dXJuIGVtLmN1c3RvbVRhZyA9PT0g4oCcYmx1ZeKAnTtcclxuICA+ICAgICAgfSlcclxuXHJcblxyXG4gIHdpbGwgZWl0aGVyIGVuYWJsZSBvciBkaXNhYmxlIG15RW50aXR5TWFuYWdlciBiYXNlZCBvbiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIOKAmGN1c3RvbVRhZ+KAmSBwcm9wZXJ0eSBvbiBteUVudGl0eU1hbmFnZXIuXHJcbiAgTm90ZSB0aGF0IHRoaXMgaXMgZHluYW1pYywgY2hhbmdpbmcgdGhlIGN1c3RvbVRhZyB2YWx1ZSB3aWxsIGNhdXNlIGV2ZW50cyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGltbWVkaWF0ZWx5LlxyXG4gIEBwYXJhbSBldmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXHJcbiAgQHBhcmFtIHRhcmdldCAtIFRoZSBvYmplY3QgYXQgd2hpY2ggZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHdpbGwgb2NjdXIuICBBbGwgZXZlbnQgbm90aWZpY2F0aW9ucyB0aGF0IG9jY3VyIHRvIHRoaXMgb2JqZWN0IG9yXHJcbiAgY2hpbGRyZW4gb2YgdGhpcyBvYmplY3Qgd2lsbCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxyXG4gIEBwYXJhbSBpc0VuYWJsZWQgLSBBIGJvb2xlYW4sIGEgbnVsbCBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIgYSBib29sZWFuIG9yIGEgbnVsbC5cclxuICAqKi9cclxuIHN0YXRpYyBlbmFibGUoZXZlbnROYW1lOiBzdHJpbmcsIG9iajogT2JqZWN0LCBpc0VuYWJsZWQ6IGJvb2xlYW4gfCAoKHg6IGFueSkgPT4gYm9vbGVhbikpIHtcclxuICAgIGFzc2VydFBhcmFtKGV2ZW50TmFtZSwgXCJldmVudE5hbWVcIikuaXNOb25FbXB0eVN0cmluZygpLmNoZWNrKCk7XHJcbiAgICBhc3NlcnRQYXJhbShvYmosIFwib2JqXCIpLmlzT2JqZWN0KCkuY2hlY2soKTtcclxuICAgIGFzc2VydFBhcmFtKGlzRW5hYmxlZCwgXCJpc0VuYWJsZWRcIikuaXNCb29sZWFuKCkuaXNPcHRpb25hbCgpLm9yKCkuaXNGdW5jdGlvbigpLmNoZWNrKCk7XHJcbiAgICBsZXQgb2IgPSA8YW55Pm9iajtcclxuICAgIGlmICghb2IuXyRldmVudE1hcCkge1xyXG4gICAgICBvYi5fJGV2ZW50TWFwID0ge307XHJcbiAgICB9XHJcbiAgICBvYi5fJGV2ZW50TWFwW2V2ZW50TmFtZV0gPSBpc0VuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHdoZXRoZXIgZm9yIGEgc3BlY2lmaWMgZXZlbnQgYW5kIGEgc3BlY2lmaWMgb2JqZWN0IGFuZCBpdHMgY2hpbGRyZW4sIG5vdGlmaWNhdGlvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkIG9yIG5vdCBzZXQuXHJcbiAgPiAgICAgIEJyZWV6ZUV2ZW50LmlzRW5hYmxlZCjigJxwcm9wZXJ0eUNoYW5nZWTigJ0sIG15RW50aXR5TWFuYWdlcilcclxuICA+IFxyXG4gIEBwYXJhbSBldmVudE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXHJcbiAgQHBhcmFtIHRhcmdldCAtIFRoZSBvYmplY3QgZm9yIHdoaWNoIHdlIHdhbnQgdG8ga25vdyBpZiBub3RpZmljYXRpb25zIGFyZSBlbmFibGVkLlxyXG4gIEByZXR1cm4gQSBudWxsIGlzIHJldHVybmVkIGlmIHRoaXMgdmFsdWUgaGFzIG5vdCBiZWVuIHNldC5cclxuICAqKi9cclxuICBzdGF0aWMgaXNFbmFibGVkKGV2ZW50TmFtZTogc3RyaW5nLCBvYmo6IE9iamVjdCkge1xyXG4gICAgYXNzZXJ0UGFyYW0oZXZlbnROYW1lLCBcImV2ZW50TmFtZVwiKS5pc05vbkVtcHR5U3RyaW5nKCkuY2hlY2soKTtcclxuICAgIGFzc2VydFBhcmFtKG9iaiwgXCJvYmpcIikuaXNPYmplY3QoKS5jaGVjaygpO1xyXG4gICAgLy8gbnVsbCBpcyBvayAtIGl0IGp1c3QgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGlzIGF0IHRoZSB0b3AgbGV2ZWwuXHJcbiAgICBpZiAoKDxhbnk+b2JqKS5fZ2V0RXZlbnRQYXJlbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG9iamVjdCBkb2VzIG5vdCBzdXBwb3J0IGV2ZW50IGVuYWJsaW5nL2Rpc2FibGluZ1wiKTtcclxuICAgIH1cclxuICAgIC8vIHJldHVybiBjdG9yLl9pc0VuYWJsZWQoZ2V0RnVsbEV2ZW50TmFtZShldmVudE5hbWUpLCBvYmopO1xyXG4gICAgcmV0dXJuIEJyZWV6ZUV2ZW50Ll9pc0VuYWJsZWQoZXZlbnROYW1lLCAzKTtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHN0YXRpYyBfaXNFbmFibGVkID0gZnVuY3Rpb24gKGV2ZW50TmFtZTogc3RyaW5nLCBvYmo6IE9iamVjdCkge1xyXG4gICAgbGV0IGlzRW5hYmxlZDogYW55ID0gbnVsbDtcclxuICAgIGxldCBvYiA9IDxhbnk+b2JqO1xyXG4gICAgbGV0IGV2ZW50TWFwID0gb2IuXyRldmVudE1hcDtcclxuICAgIGlmIChldmVudE1hcCkge1xyXG4gICAgICBpc0VuYWJsZWQgPSBldmVudE1hcFtldmVudE5hbWVdO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzRW5hYmxlZCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgaXNFbmFibGVkID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuICEhaXNFbmFibGVkKG9iaik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhaXNFbmFibGVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcGFyZW50ID0gb2IuX2dldEV2ZW50UGFyZW50ICYmIG9iLl9nZXRFdmVudFBhcmVudCgpO1xyXG4gICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5faXNFbmFibGVkKGV2ZW50TmFtZSwgcGFyZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBkZWZhdWx0IGlmIG5vdCBleHBsaWNpdGx5IGRpc2FibGVkLlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcblxyXG59XHJcblxyXG4vLyBsZWdhY3kgc3VwcG9ydCAtIGRlbGliZXJhdGVseSBub3QgdHlwZWRcclxuKGNvcmUgYXMgYW55KS5FdmVudCA9IEJyZWV6ZUV2ZW50OyJdfQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2ludGVyZmFjZS1yZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBZSxNQUFNLFVBQVUsQ0FBQztBQWU3RCx3Q0FBd0M7QUFDeEMsTUFBTSxPQUFPLGlCQUFpQjtJQUE5QjtRQUNJLFNBQUksR0FBRyxJQUFJLFlBQVksQ0FBYyxNQUFNLENBQUMsQ0FBQztRQUM3QyxpQkFBWSxHQUFHLElBQUksWUFBWSxDQUFzQixjQUFjLENBQUMsQ0FBQztRQUNyRSxnQkFBVyxHQUFHLElBQUksWUFBWSxDQUFxQixhQUFhLENBQUMsQ0FBQztRQUNsRSxlQUFVLEdBQUcsSUFBSSxZQUFZLENBQW9CLFlBQVksQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FBQTtBQXVCRCxNQUFNLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7QUFDckQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxrQkFBa0IsR0FBRztJQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxHQUFHLElBQUksQ0FBQyxJQUFJO1lBQzlFLGlJQUFpSSxDQUFDLENBQUM7S0FDMUk7SUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7QUFDaEMsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLDBCQUEwQixHQUFHLFVBQVUsUUFBaUM7SUFDM0UsWUFBWSxDQUFDLFFBQVEsQ0FBQztTQUNqQixVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsVUFBVSxFQUFFO1NBQ3RDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLEVBQUU7U0FDdkMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRTtTQUMvQixVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxFQUFFO1NBQ3JDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgYXNzZXJ0Q29uZmlnIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBjb25maWcsIEludGVyZmFjZURlZiwgQmFzZUFkYXB0ZXIgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IE1hcHBpbmdDb250ZXh0IH0gZnJvbSAnLi9tYXBwaW5nLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBFbnRpdHlRdWVyeSB9IGZyb20gJy4vZW50aXR5LXF1ZXJ5JztcclxuaW1wb3J0IHsgTWV0YWRhdGFTdG9yZSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgSnNvblJlc3VsdHNBZGFwdGVyLCBEYXRhU2VydmljZSB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgU2F2ZUNvbnRleHQsIFNhdmVCdW5kbGUsIFF1ZXJ5UmVzdWx0LCBTYXZlUmVzdWx0LCBIdHRwUmVzcG9uc2UgfSBmcm9tICcuL2VudGl0eS1tYW5hZ2VyJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlUmVnaXN0cnlDb25maWcge1xyXG4gICAgYWpheD86IEludGVyZmFjZURlZjxBamF4QWRhcHRlcj47XHJcbiAgICBtb2RlbExpYnJhcnk/OiBJbnRlcmZhY2VEZWY8TW9kZWxMaWJyYXJ5QWRhcHRlcj47XHJcbiAgICBkYXRhU2VydmljZT86IEludGVyZmFjZURlZjxEYXRhU2VydmljZUFkYXB0ZXI+O1xyXG4gICAgdXJpQnVpbGRlcj86IEludGVyZmFjZURlZjxVcmlCdWlsZGVyQWRhcHRlcj47XHJcbn1cclxuXHJcbi8qKiBSZWdpc3RlcnMgYWRhcHRlcnMgdXNlZCBieSBCcmVlemUgKi9cclxuZXhwb3J0IGNsYXNzIEludGVyZmFjZVJlZ2lzdHJ5IHtcclxuICAgIGFqYXggPSBuZXcgSW50ZXJmYWNlRGVmPEFqYXhBZGFwdGVyPihcImFqYXhcIik7XHJcbiAgICBtb2RlbExpYnJhcnkgPSBuZXcgSW50ZXJmYWNlRGVmPE1vZGVsTGlicmFyeUFkYXB0ZXI+KFwibW9kZWxMaWJyYXJ5XCIpO1xyXG4gICAgZGF0YVNlcnZpY2UgPSBuZXcgSW50ZXJmYWNlRGVmPERhdGFTZXJ2aWNlQWRhcHRlcj4oXCJkYXRhU2VydmljZVwiKTtcclxuICAgIHVyaUJ1aWxkZXIgPSBuZXcgSW50ZXJmYWNlRGVmPFVyaUJ1aWxkZXJBZGFwdGVyPihcInVyaUJ1aWxkZXJcIik7XHJcbn1cclxuXHJcbi8vIFRoaXMgbW9kdWxlIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlUmVnaXN0cnkgYnkgZXh0ZW5kaW5nIGNvbmZpZ1xyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSBtb2R1bGUgXCIuL2NvbmZpZ1wiIHtcclxuICAgIGludGVyZmFjZSBCcmVlemVDb25maWcge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgIEluaXRpYWxpemVzIGEgY29sbGVjdGlvbiBvZiBhZGFwdGVyIGltcGxlbWVudGF0aW9ucyBhbmQgbWFrZXMgZWFjaCBvbmUgdGhlIGRlZmF1bHQgZm9yIGl0cyBjb3JyZXNwb25kaW5nIGludGVyZmFjZS5cclxuICAgICAgICBAbWV0aG9kIGluaXRpYWxpemVBZGFwdGVySW5zdGFuY2VzXHJcbiAgICAgICAgQHBhcmFtIGNvbmZpZyB7T2JqZWN0fVxyXG4gICAgICAgIEBwYXJhbSBbY29uZmlnLmFqYXhdIHtTdHJpbmd9IC0gdGhlIG5hbWUgb2YgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgXCJhamF4XCIgYWRhcHRlclxyXG4gICAgICAgIEBwYXJhbSBbY29uZmlnLmRhdGFTZXJ2aWNlXSB7U3RyaW5nfSAtIHRoZSBuYW1lIG9mIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIFwiZGF0YVNlcnZpY2VcIiBhZGFwdGVyXHJcbiAgICAgICAgQHBhcmFtIFtjb25maWcubW9kZWxMaWJyYXJ5XSB7U3RyaW5nfSAtIHRoZSBuYW1lIG9mIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIFwibW9kZWxMaWJyYXJ5XCIgYWRhcHRlclxyXG4gICAgICAgIEBwYXJhbSBbY29uZmlnLnVyaUJ1aWxkZXJdIHtTdHJpbmd9IC0gdGhlIG5hbWUgb2YgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgXCJ1cmlCdWlsZGVyXCIgYWRhcHRlclxyXG4gICAgICAgIEByZXR1cm4gW2FycmF5IG9mIGluc3RhbmNlc11cclxuICAgICAgICAqKi9cclxuICAgICAgICBpbml0aWFsaXplQWRhcHRlckluc3RhbmNlcyhpckNvbmZpZzogSW50ZXJmYWNlUmVnaXN0cnlDb25maWcpOiB2b2lkO1xyXG5cclxuICAgICAgICAvLyBzdHJvbmdseSB0eXBlZCB2ZXJzaW9uXHJcbiAgICAgICAgaW50ZXJmYWNlUmVnaXN0cnk6IEludGVyZmFjZVJlZ2lzdHJ5O1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25maWcuaW50ZXJmYWNlUmVnaXN0cnkgPSBuZXcgSW50ZXJmYWNlUmVnaXN0cnkoKTtcclxuY29uZmlnLl9pbnRlcmZhY2VSZWdpc3RyeSA9IGNvbmZpZy5pbnRlcmZhY2VSZWdpc3RyeTtcclxuY29uZmlnLmludGVyZmFjZVJlZ2lzdHJ5Lm1vZGVsTGlicmFyeS5nZXREZWZhdWx0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICghdGhpcy5kZWZhdWx0SW5zdGFuY2UpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gbG9jYXRlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSAnXCIgKyB0aGlzLm5hbWUgK1xyXG4gICAgICAgICAgICBcIicgaW50ZXJmYWNlLiAgUG9zc2libGUgb3B0aW9ucyBhcmUgJ2tvJywgJ2JhY2tpbmdTdG9yZScgb3IgJ2JhY2tib25lJy4gU2VlIHRoZSBicmVlemUuY29uZmlnLmluaXRpYWxpemVBZGFwdGVySW5zdGFuY2VzIG1ldGhvZC5cIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0SW5zdGFuY2U7XHJcbn07XHJcblxyXG4vKipcclxuSW5pdGlhbGl6ZXMgYSBjb2xsZWN0aW9uIG9mIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25zIGFuZCBtYWtlcyBlYWNoIG9uZSB0aGUgZGVmYXVsdCBmb3IgaXRzIGNvcnJlc3BvbmRpbmcgaW50ZXJmYWNlLlxyXG5AbWV0aG9kIGluaXRpYWxpemVBZGFwdGVySW5zdGFuY2VzXHJcbkBwYXJhbSBjb25maWcge09iamVjdH1cclxuQHBhcmFtIFtjb25maWcuYWpheF0ge1N0cmluZ30gLSB0aGUgbmFtZSBvZiBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBcImFqYXhcIiBhZGFwdGVyXHJcbkBwYXJhbSBbY29uZmlnLmRhdGFTZXJ2aWNlXSB7U3RyaW5nfSAtIHRoZSBuYW1lIG9mIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIFwiZGF0YVNlcnZpY2VcIiBhZGFwdGVyXHJcbkBwYXJhbSBbY29uZmlnLm1vZGVsTGlicmFyeV0ge1N0cmluZ30gLSB0aGUgbmFtZSBvZiBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBcIm1vZGVsTGlicmFyeVwiIGFkYXB0ZXJcclxuQHBhcmFtIFtjb25maWcudXJpQnVpbGRlcl0ge1N0cmluZ30gLSB0aGUgbmFtZSBvZiBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBcInVyaUJ1aWxkZXJcIiBhZGFwdGVyXHJcbkByZXR1cm4gW2FycmF5IG9mIGluc3RhbmNlc11cclxuKiovXHJcbmNvbmZpZy5pbml0aWFsaXplQWRhcHRlckluc3RhbmNlcyA9IGZ1bmN0aW9uIChpckNvbmZpZzogSW50ZXJmYWNlUmVnaXN0cnlDb25maWcpIHtcclxuICAgIGFzc2VydENvbmZpZyhpckNvbmZpZylcclxuICAgICAgICAud2hlcmVQYXJhbShcImRhdGFTZXJ2aWNlXCIpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwibW9kZWxMaWJyYXJ5XCIpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiYWpheFwiKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcInVyaUJ1aWxkZXJcIikuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLmFwcGx5QWxsKHRoaXMsIGZhbHNlKTtcclxuICAgIHJldHVybiBjb3JlLm9iamVjdE1hcChjb25maWcsIHRoaXMuaW5pdGlhbGl6ZUFkYXB0ZXJJbnN0YW5jZSk7XHJcbn07XHJcblxyXG4vKiogRGF0YVNlcnZpY2VBZGFwdGVyIEFqYXggcmVxdWVzdCBjb25maWd1cmF0aW9uICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWpheENvbmZpZyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIC8qKiBHRVQsIFBPU1QsIGV0Yy4gKi9cclxuICAgIHR5cGU/OiBzdHJpbmc7XHJcbiAgICAvKioganNvbiwgZXRjLiAqL1xyXG4gICAgZGF0YVR5cGU/OiBzdHJpbmc7XHJcbiAgICBjb250ZW50VHlwZT86IHN0cmluZztcclxuICAgIGNyb3NzRG9tYWluPzogc3RyaW5nIHwgYm9vbGVhbjtcclxuICAgIGhlYWRlcnM/OiB7fTtcclxuICAgIGRhdGE/OiBhbnk7XHJcbiAgICBwYXJhbXM/OiB7fTtcclxuICAgIHN1Y2Nlc3M6IChyZXM6IEh0dHBSZXNwb25zZSkgPT4gdm9pZDtcclxuICAgIGVycm9yOiAocmVzOiAoSHR0cFJlc3BvbnNlIHwgRXJyb3IpKSA9PiB2b2lkO1xyXG59XHJcblxyXG4vKiogUmVxdWVzdCBzZW50IGJ5IEFqYXhBZGFwdGVyICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWpheFJlcXVlc3Qge1xyXG4gICAgLyoqIEFqYXhBZGFwdGVyIHRoYXQgaW5pdGlhdGVkIHRoZSByZXF1ZXN0ICovXHJcbiAgICBhZGFwdGVyOiBBamF4QWRhcHRlcjtcclxuICAgIC8qKiBSZXF1ZXN0IGNvbmZpZ3VyYXRpb24gKi9cclxuICAgIGNvbmZpZzogUmVxdWVzdEluaXQ7XHJcbiAgICAvKiogY29uZmlnIGZyb20gdGhlIERhdGFTZXJ2aWNlQWRhcHRlciB0aGF0IGNhbGxlZCB0aGUgQWpheEFkYXB0ZXIgKi9cclxuICAgIGRzYUNvbmZpZzogQWpheENvbmZpZztcclxuICAgIC8qKiBGdW5jdGlvbiBjYWxsZWQgb24gcmVzcG9uc2UgZXJyb3IgKi9cclxuICAgIGVycm9yOiAoc3RhdHVzOiBudW1iZXIsIHN0YXR1c1RleHQ6IHN0cmluZywgYm9keTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UsIGVycm9yVGhyb3duOiBhbnkpID0+IHZvaWQ7XHJcbiAgICAvKiogRnVuY3Rpb24gY2FsbGVkIG9uIHJlc3BvbnNlIHN1Y2Nlc3MgKi9cclxuICAgIHN1Y2Nlc3M6IChkYXRhOiBhbnksIHN0YXR1c1RleHQ6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB2b2lkO1xyXG59XHJcblxyXG4vKiogSGFuZGxlcyBBSkFYIHJlcXVlc3RzIHRvIHNlcnZlciAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFqYXhBZGFwdGVyIGV4dGVuZHMgQmFzZUFkYXB0ZXIge1xyXG4gICAgLyoqIEZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgdGhlIGFqYXggcmVxdWVzdCBhbmQgY2FsbHMgdGhlIHN1Y2Nlc3Mgb3IgZXJyb3IgZnVuY3Rpb24gKi9cclxuICAgIGFqYXgoY29uZmlnOiBBamF4Q29uZmlnKTogdm9pZDtcclxuICAgIC8qKiBDb250YWluZXIgZm9yIGhlYWRlcnMgdG8gYmUgYWRkZWQgdG8gZWFjaCByZXF1ZXN0ICovXHJcbiAgICBkZWZhdWx0U2V0dGluZ3M6IHsgaGVhZGVycz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9IH07XHJcbiAgICAvKiogRnVuY3Rpb24gdG8gYWxsb3cgbWFuaXB1bGF0aW5nIHRoZSByZXF1ZXN0IGJlZm9yZSBzZW5kaW5nICovXHJcbiAgICByZXF1ZXN0SW50ZXJjZXB0b3I/OiAocmVxOiBBamF4UmVxdWVzdCkgPT4gdm9pZDtcclxufVxyXG5cclxuLyoqIEFkYXB0cyBicmVlemUgY2hhbmdlLXRyYWNraW5nIHRvIHRoZSBVSSBmcmFtZXdvcmsgKi9cclxuZXhwb3J0IGludGVyZmFjZSBNb2RlbExpYnJhcnlBZGFwdGVyIGV4dGVuZHMgQmFzZUFkYXB0ZXIge1xyXG4gICAgZ2V0VHJhY2thYmxlUHJvcGVydHlOYW1lczogKGVudGl0eTogYW55KSA9PiBzdHJpbmdbXTtcclxuICAgIGluaXRpYWxpemVFbnRpdHlQcm90b3R5cGUocHJvdG86IE9iamVjdCk6IHZvaWQ7XHJcbiAgICBzdGFydFRyYWNraW5nKGVudGl0eTogYW55LCBlbnRpdHlDdG9yOiBGdW5jdGlvbik6IHZvaWQ7XHJcbiAgICBjcmVhdGVDdG9yPzogRnVuY3Rpb247XHJcbn1cclxuXHJcbi8qKiBSZXNoYXBlcyBkYXRhIG1vdmluZyBiZXR3ZWVuIGJyZWV6ZSBhbmQgc2VydmVyICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNlcnZpY2VBZGFwdGVyIGV4dGVuZHMgQmFzZUFkYXB0ZXIge1xyXG4gICAgZmV0Y2hNZXRhZGF0YShtZXRhZGF0YVN0b3JlOiBNZXRhZGF0YVN0b3JlLCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UpOiBQcm9taXNlPGFueT47ICAvLyByZXN1bHQgb2YgUHJvbWlzZSBpcyBlaXRoZXIgcmF3TWV0YWRhdGEgb3IgYSBzdHJpbmcgZXhwbGFpbmluZyB3aHkgbm90LlxyXG4gICAgZXhlY3V0ZVF1ZXJ5KG1hcHBpbmdDb250ZXh0OiBNYXBwaW5nQ29udGV4dCk6IFByb21pc2U8UXVlcnlSZXN1bHQ+OyAgIC8vIHJlc3VsdCBvZiBleGVjdXRlUXVlcnkgd2lsbCBnZXQgcGFzc2VkIHRvIEpzb25SZXN1bHRzQWRhcHRlciBleHRyYWN0UmVzdWx0cyBtZXRob2RcclxuICAgIHNhdmVDaGFuZ2VzKHNhdmVDb250ZXh0OiBTYXZlQ29udGV4dCwgc2F2ZUJ1bmRsZTogU2F2ZUJ1bmRsZSk6IFByb21pc2U8U2F2ZVJlc3VsdD47XHJcbiAgICBjaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I6IENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvckN0b3I7XHJcbiAgICBqc29uUmVzdWx0c0FkYXB0ZXI6IEpzb25SZXN1bHRzQWRhcHRlcjtcclxufVxyXG5cclxuLyoqIEZ1bmN0aW9uIGNhbGxlZCBieSBBamF4QWRhcHRlciBiZWZvcmUgc2VuZGluZyByZXF1ZXN0ICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWpheFJlcXVlc3RJbnRlcmNlcHRvciB7XHJcbiAgICAocmVxOiBBamF4UmVxdWVzdCkgOiB2b2lkO1xyXG4gICAgLyoqIFdoZXRoZXIgdG8gcmVtb3ZlIHRoZSBpbnRlcmNlcHRvciBhZnRlciBpdCBpcyBjYWxsZWQgKi9cclxuICAgIG9uZVRpbWU6IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKiBCdWlsZHMgVVJJIGZvciBwZXJmb3JtaW5nIHF1ZXJpZXMuICBTZXJpYWxpemVzIHRoZSBFbnRpdHlRdWVyeSBhY2NvcmRpbmcgdG8gdGhlIFVSSSBzeW50YXguICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXJpQnVpbGRlckFkYXB0ZXIgZXh0ZW5kcyBCYXNlQWRhcHRlciB7XHJcbiAgICBidWlsZFVyaShxdWVyeTogRW50aXR5UXVlcnksIG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUpOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvckN0b3Ige1xyXG4gICAgbmV3IChzYXZlQ29udGV4dDogU2F2ZUNvbnRleHQsIHNhdmVCdW5kbGU6IFNhdmVCdW5kbGUpOiBDaGFuZ2VSZXF1ZXN0SW50ZXJjZXB0b3I7XHJcbn1cclxuXHJcbi8qKiBBbGxvd3MgbWFuaXB1bGF0aW5nIGRhdGEgaW4gRGF0YVNlcnZpY2VBZGFwdGVyIGJlZm9yZSBzZW5kaW5nIHRvIHNlcnZlciAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVJlcXVlc3RJbnRlcmNlcHRvciB7XHJcbiAgICBvbmVUaW1lPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgIFByZXBhcmUgYW5kIHJldHVybiB0aGUgc2F2ZSBkYXRhIGZvciBhbiBlbnRpdHkgY2hhbmdlLXNldC5cclxuICBcclxuICAgICBUaGUgYWRhcHRlciBjYWxscyB0aGlzIG1ldGhvZCBmb3IgZWFjaCBlbnRpdHkgaW4gdGhlIGNoYW5nZS1zZXQsXHJcbiAgICAgYWZ0ZXIgaXQgaGFzIHByZXBhcmVkIGEgXCJjaGFuZ2UgcmVxdWVzdFwiIGZvciB0aGF0IG9iamVjdC5cclxuICBcclxuICAgICBUaGUgbWV0aG9kIGNhbiBkbyBhbnl0aGluZyB0byB0aGUgcmVxdWVzdCBidXQgaXQgbXVzdCByZXR1cm4gYSB2YWxpZCwgbm9uLW51bGwgcmVxdWVzdC5cclxuICAgICBAZXhhbXBsZVxyXG4gICAgIHRoaXMuZ2V0UmVxdWVzdCA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBlbnRpdHksIGluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIGFsdGVyIHRoZSByZXF1ZXN0IHRoYXQgdGhlIGFkYXB0ZXIgcHJlcGFyZWQgZm9yIHRoaXMgZW50aXR5XHJcbiAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBlbnRpdHksIHNhdmVDb250ZXh0LCBhbmQgc2F2ZUJ1bmRsZVxyXG4gICAgICAgICAgICAvLyBlLmcuLCBhZGQgYSBjdXN0b20gaGVhZGVyIG9yIHBydW5lIHRoZSBvcmlnaW5hbFZhbHVlc01hcFxyXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgICAgICB9O1xyXG4gICAgIEBtZXRob2QgZ2V0UmVxdWVzdFxyXG4gICAgIEBwYXJhbSByZXF1ZXN0IHtPYmplY3R9IFRoZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBhZGFwdGVyJ3MgcmVxdWVzdCB0byBzYXZlIHRoaXMgZW50aXR5LlxyXG4gICAgIEBwYXJhbSBlbnRpdHkge0VudGl0eX0gVGhlIGVudGl0eS10by1iZS1zYXZlIGFzIGl0IGlzIGluIGNhY2hlXHJcbiAgICAgQHBhcmFtIGluZGV4IHtJbnRlZ2VyfSBUaGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGlzIGVudGl0eSBpbiB0aGUgY2hhbmdlLXNldCBhcnJheVxyXG4gICAgIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgcG90ZW50aWFsbHkgcmV2aXNlZCByZXF1ZXN0LlxyXG4gICAgICoqL1xyXG4gICAgZ2V0UmVxdWVzdChyZXF1ZXN0OiBhbnksIGVudGl0eTogRW50aXR5LCBpbmRleDogbnVtYmVyKTogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgIExhc3QgY2hhbmNlIHRvIGNoYW5nZSBhbnl0aGluZyBhYm91dCB0aGUgJ3JlcXVlc3RzJyBhcnJheVxyXG4gICAgIGFmdGVyIGl0IGhhcyBiZWVuIGJ1aWx0IHdpdGggcmVxdWVzdHMgZm9yIGFsbCBvZiB0aGUgZW50aXRpZXMtdG8tYmUtc2F2ZWQuXHJcbiAgXHJcbiAgICAgVGhlICdyZXF1ZXN0cycgYXJyYXkgaXMgdGhlIHNhbWUgYXMgJ3NhdmVCdW5kbGUuZW50aXRpZXMnIGluIG1hbnkgaW1wbGVtZW50YXRpb25zXHJcbiAgXHJcbiAgICAgVGhpcyBtZXRob2QgY2FuIGRvIGFueXRoaW5nIHRvIHRoZSBhcnJheSBpbmNsdWRpbmcgYWRkIGFuZCByZW1vdmUgcmVxdWVzdHMuXHJcbiAgICAgSXQncyB1cCB0byB5b3UgdG8gZW5zdXJlIHRoYXQgc2VydmVyIHdpbGwgYWNjZXB0IHRoZSByZXF1ZXN0cyBhcnJheSBkYXRhIGFzIHZhbGlkLlxyXG4gIFxyXG4gICAgIFJldHVybmVkIHZhbHVlIGlzIGlnbm9yZWQuXHJcbiAgICAgQGV4YW1wbGVcclxuICAgICB0aGlzLmRvbmUgPSBmdW5jdGlvbiAocmVxdWVzdHMpIHtcclxuICAgICAgICAgICAgLy8gYWx0ZXIgdGhlIGFycmF5IG9mIHJlcXVlc3RzIHJlcHJlc2VudGluZyB0aGUgZW50aXJlIGNoYW5nZS1zZXRcclxuICAgICAgICAgICAgLy8gYmFzZWQgb24gdGhlIHNhdmVDb250ZXh0IGFuZCBzYXZlQnVuZGxlXHJcbiAgICAgICAgfTtcclxuICAgICBAbWV0aG9kIGRvbmVcclxuICAgICBAcGFyYW0gcmVxdWVzdHMge0FycmF5IG9mIE9iamVjdH0gVGhlIGFkYXB0ZXIncyBhcnJheSBvZiByZXF1ZXN0IGZvciB0aGlzIGNoYW5nZXNldC5cclxuICAgICAqKi9cclxuICAgIGRvbmUocmVxdWVzdHM6IE9iamVjdFtdKTogdm9pZDtcclxufSJdfQ==