breeze-client 2.1.6-mjs → 2.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/LICENSE +1 -1
  2. package/adapter-ajax-angularjs/{index.d.ts → breeze-client-adapter-ajax-angularjs.d.ts} +0 -1
  3. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +1 -0
  4. package/adapter-ajax-angularjs/package.json +13 -0
  5. package/adapter-ajax-fetch/{index.d.ts → breeze-client-adapter-ajax-fetch.d.ts} +0 -1
  6. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +1 -0
  7. package/adapter-ajax-fetch/package.json +13 -0
  8. package/adapter-ajax-httpclient/{index.d.ts → breeze-client-adapter-ajax-httpclient.d.ts} +0 -1
  9. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +1 -0
  10. package/adapter-ajax-httpclient/package.json +13 -0
  11. package/adapter-ajax-jquery/{index.d.ts → breeze-client-adapter-ajax-jquery.d.ts} +0 -1
  12. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +1 -0
  13. package/adapter-ajax-jquery/package.json +13 -0
  14. package/adapter-ajax-post/{index.d.ts → breeze-client-adapter-ajax-post.d.ts} +0 -1
  15. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +1 -0
  16. package/adapter-ajax-post/package.json +13 -0
  17. package/adapter-data-service-odata/{index.d.ts → breeze-client-adapter-data-service-odata.d.ts} +0 -1
  18. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +1 -0
  19. package/adapter-data-service-odata/package.json +13 -0
  20. package/adapter-data-service-webapi/{index.d.ts → breeze-client-adapter-data-service-webapi.d.ts} +0 -1
  21. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +1 -0
  22. package/adapter-data-service-webapi/package.json +13 -0
  23. package/adapter-model-library-backing-store/{index.d.ts → breeze-client-adapter-model-library-backing-store.d.ts} +0 -1
  24. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +1 -0
  25. package/adapter-model-library-backing-store/package.json +13 -0
  26. package/adapter-model-library-ko/{index.d.ts → breeze-client-adapter-model-library-ko.d.ts} +0 -1
  27. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +1 -0
  28. package/adapter-model-library-ko/package.json +13 -0
  29. package/adapter-uri-builder-json/{index.d.ts → breeze-client-adapter-uri-builder-json.d.ts} +0 -1
  30. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +1 -0
  31. package/adapter-uri-builder-json/package.json +13 -0
  32. package/adapter-uri-builder-odata/{index.d.ts → breeze-client-adapter-uri-builder-odata.d.ts} +0 -1
  33. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +1 -0
  34. package/adapter-uri-builder-odata/package.json +13 -0
  35. package/breeze-client.d.ts +8 -0
  36. package/breeze-client.metadata.json +1 -0
  37. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +190 -0
  38. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +1 -0
  39. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +2 -0
  40. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +1 -0
  41. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +190 -0
  42. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +1 -0
  43. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +2 -0
  44. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +1 -0
  45. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +195 -0
  46. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +1 -0
  47. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +2 -0
  48. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +1 -0
  49. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +115 -0
  50. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +1 -0
  51. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +2 -0
  52. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +1 -0
  53. package/bundles/breeze-client-adapter-ajax-post.umd.js +92 -0
  54. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +1 -0
  55. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +2 -0
  56. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +1 -0
  57. package/bundles/breeze-client-adapter-data-service-odata.umd.js +747 -0
  58. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -0
  59. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +16 -0
  60. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -0
  61. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +333 -0
  62. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -0
  63. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +16 -0
  64. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -0
  65. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +280 -0
  66. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +1 -0
  67. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +2 -0
  68. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +1 -0
  69. package/bundles/breeze-client-adapter-model-library-ko.umd.js +252 -0
  70. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +1 -0
  71. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +2 -0
  72. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +1 -0
  73. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +96 -0
  74. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +1 -0
  75. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +2 -0
  76. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +1 -0
  77. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +262 -0
  78. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +1 -0
  79. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +2 -0
  80. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +1 -0
  81. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +258 -0
  82. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +1 -0
  83. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +2 -0
  84. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +1 -0
  85. package/bundles/breeze-client-mixin-save-queuing.umd.js +579 -0
  86. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +1 -0
  87. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +16 -0
  88. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +1 -0
  89. package/bundles/breeze-client.umd.js +14231 -0
  90. package/bundles/breeze-client.umd.js.map +1 -0
  91. package/bundles/breeze-client.umd.min.js +16 -0
  92. package/bundles/breeze-client.umd.min.js.map +1 -0
  93. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +130 -0
  94. package/esm2015/adapter-ajax-angularjs/adapter-core.js +49 -0
  95. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  96. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +130 -0
  97. package/esm2015/adapter-ajax-fetch/adapter-core.js +49 -0
  98. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  99. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +137 -0
  100. package/esm2015/adapter-ajax-httpclient/adapter-core.js +49 -0
  101. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  102. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +103 -0
  103. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  104. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +77 -0
  105. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  106. package/esm2015/adapter-data-service-odata/adapter-core.js +49 -0
  107. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +463 -0
  108. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  109. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +100 -0
  110. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  111. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +268 -0
  112. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  113. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +240 -0
  114. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  115. package/esm2015/adapter-uri-builder-json/adapter-core.js +49 -0
  116. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +36 -0
  117. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  118. package/esm2015/adapter-uri-builder-odata/adapter-core.js +49 -0
  119. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +192 -0
  120. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  121. package/esm2015/breeze-client.js +9 -0
  122. package/esm2015/index.js +2 -0
  123. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  124. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  125. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  126. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +400 -0
  127. package/esm2015/src/abstract-data-service-adapter.js +327 -0
  128. package/esm2015/src/array.js +4 -0
  129. package/esm2015/src/assert-param.js +312 -0
  130. package/esm2015/src/breeze.js +85 -0
  131. package/esm2015/src/complex-array.js +119 -0
  132. package/esm2015/src/config.js +223 -0
  133. package/esm2015/src/core.js +714 -0
  134. package/esm2015/src/csdl-metadata-parser.js +385 -0
  135. package/esm2015/src/data-service.js +203 -0
  136. package/esm2015/src/data-type.js +503 -0
  137. package/esm2015/src/default-property-interceptor.js +460 -0
  138. package/{esm2022/src/entity-action.mjs → esm2015/src/entity-action.js} +25 -25
  139. package/esm2015/src/entity-aspect.js +804 -0
  140. package/esm2015/src/entity-group.js +187 -0
  141. package/esm2015/src/entity-key.js +116 -0
  142. package/esm2015/src/entity-manager.js +2094 -0
  143. package/esm2015/src/entity-metadata.js +2109 -0
  144. package/esm2015/src/entity-query.js +1015 -0
  145. package/esm2015/src/entity-state.js +107 -0
  146. package/esm2015/src/enum.js +141 -0
  147. package/esm2015/src/event.js +256 -0
  148. package/esm2015/src/interface-registry.js +41 -0
  149. package/esm2015/src/key-generator.js +108 -0
  150. package/esm2015/src/local-query-comparison-options.js +65 -0
  151. package/esm2015/src/mapping-context.js +411 -0
  152. package/esm2015/src/naming-convention.js +88 -0
  153. package/esm2015/src/observable-array.js +185 -0
  154. package/esm2015/src/predicate.js +1242 -0
  155. package/esm2015/src/primitive-array.js +87 -0
  156. package/esm2015/src/query-options.js +152 -0
  157. package/esm2015/src/relation-array.js +175 -0
  158. package/esm2015/src/save-options.js +41 -0
  159. package/esm2015/src/unattached-children-map.js +58 -0
  160. package/esm2015/src/validate.js +991 -0
  161. package/esm2015/src/validation-options.js +64 -0
  162. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +132 -0
  163. package/esm5/adapter-ajax-angularjs/adapter-core.js +49 -0
  164. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  165. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +132 -0
  166. package/esm5/adapter-ajax-fetch/adapter-core.js +49 -0
  167. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  168. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +139 -0
  169. package/esm5/adapter-ajax-httpclient/adapter-core.js +49 -0
  170. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  171. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +105 -0
  172. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  173. package/esm5/adapter-ajax-post/adapter-ajax-post.js +81 -0
  174. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  175. package/esm5/adapter-data-service-odata/adapter-core.js +49 -0
  176. package/{esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs → esm5/adapter-data-service-odata/adapter-data-service-odata.js} +147 -138
  177. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  178. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +105 -0
  179. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  180. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +270 -0
  181. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  182. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +242 -0
  183. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  184. package/esm5/adapter-uri-builder-json/adapter-core.js +49 -0
  185. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +38 -0
  186. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  187. package/esm5/adapter-uri-builder-odata/adapter-core.js +49 -0
  188. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +197 -0
  189. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  190. package/esm5/breeze-client.js +9 -0
  191. package/esm5/index.js +2 -0
  192. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  193. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  194. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  195. package/esm5/mixin-save-queuing/mixin-save-queuing.js +412 -0
  196. package/esm5/src/abstract-data-service-adapter.js +333 -0
  197. package/esm5/src/array.js +4 -0
  198. package/esm5/src/assert-param.js +317 -0
  199. package/esm5/src/breeze.js +85 -0
  200. package/esm5/src/complex-array.js +119 -0
  201. package/esm5/src/config.js +228 -0
  202. package/esm5/src/core.js +722 -0
  203. package/esm5/src/csdl-metadata-parser.js +385 -0
  204. package/esm5/src/data-service.js +207 -0
  205. package/esm5/src/data-type.js +510 -0
  206. package/esm5/src/default-property-interceptor.js +460 -0
  207. package/esm5/src/entity-action.js +52 -0
  208. package/esm5/src/entity-aspect.js +810 -0
  209. package/esm5/src/entity-group.js +189 -0
  210. package/esm5/src/entity-key.js +118 -0
  211. package/esm5/src/entity-manager.js +2112 -0
  212. package/esm5/src/entity-metadata.js +2144 -0
  213. package/esm5/src/entity-query.js +1042 -0
  214. package/esm5/src/entity-state.js +114 -0
  215. package/esm5/src/enum.js +144 -0
  216. package/esm5/src/event.js +259 -0
  217. package/esm5/src/interface-registry.js +43 -0
  218. package/esm5/src/key-generator.js +111 -0
  219. package/esm5/src/local-query-comparison-options.js +67 -0
  220. package/esm5/src/mapping-context.js +413 -0
  221. package/{esm2022/src/naming-convention.mjs → esm5/src/naming-convention.js} +29 -35
  222. package/esm5/src/observable-array.js +201 -0
  223. package/esm5/src/predicate.js +1307 -0
  224. package/esm5/src/primitive-array.js +87 -0
  225. package/esm5/src/query-options.js +167 -0
  226. package/esm5/src/relation-array.js +175 -0
  227. package/esm5/src/save-options.js +43 -0
  228. package/esm5/src/unattached-children-map.js +60 -0
  229. package/{esm2022/src/validate.mjs → esm5/src/validate.js} +110 -116
  230. package/esm5/src/validation-options.js +66 -0
  231. package/{fesm2022/breeze-client-adapter-ajax-angularjs.mjs → fesm2015/breeze-client-adapter-ajax-angularjs.js} +1 -6
  232. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  233. package/{fesm2022/breeze-client-adapter-ajax-fetch.mjs → fesm2015/breeze-client-adapter-ajax-fetch.js} +4 -9
  234. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +1 -0
  235. package/{fesm2022/breeze-client-adapter-ajax-httpclient.mjs → fesm2015/breeze-client-adapter-ajax-httpclient.js} +4 -6
  236. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  237. package/{fesm2022/breeze-client-adapter-ajax-jquery.mjs → fesm2015/breeze-client-adapter-ajax-jquery.js} +2 -6
  238. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +1 -0
  239. package/{fesm2022/breeze-client-adapter-ajax-post.mjs → fesm2015/breeze-client-adapter-ajax-post.js} +1 -1
  240. package/fesm2015/breeze-client-adapter-ajax-post.js.map +1 -0
  241. package/{fesm2022/breeze-client-adapter-data-service-odata.mjs → fesm2015/breeze-client-adapter-data-service-odata.js} +69 -68
  242. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -0
  243. package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → fesm2015/breeze-client-adapter-data-service-webapi.js} +30 -30
  244. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -0
  245. package/{fesm2022/breeze-client-adapter-model-library-backing-store.mjs → fesm2015/breeze-client-adapter-model-library-backing-store.js} +13 -14
  246. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  247. package/{fesm2022/breeze-client-adapter-model-library-ko.mjs → fesm2015/breeze-client-adapter-model-library-ko.js} +13 -14
  248. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +1 -0
  249. package/{fesm2022/breeze-client-adapter-uri-builder-json.mjs → fesm2015/breeze-client-adapter-uri-builder-json.js} +8 -9
  250. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +1 -0
  251. package/{fesm2022/breeze-client-adapter-uri-builder-odata.mjs → fesm2015/breeze-client-adapter-uri-builder-odata.js} +86 -86
  252. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  253. package/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → fesm2015/breeze-client-mixin-get-entity-graph.js} +1 -1
  254. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +1 -0
  255. package/{fesm2022/breeze-client-mixin-save-queuing.mjs → fesm2015/breeze-client-mixin-save-queuing.js} +2 -23
  256. package/fesm2015/breeze-client-mixin-save-queuing.js.map +1 -0
  257. package/{fesm2022/breeze-client.mjs → fesm2015/breeze-client.js} +1624 -2073
  258. package/fesm2015/breeze-client.js.map +1 -0
  259. package/fesm5/breeze-client-adapter-ajax-angularjs.js +186 -0
  260. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  261. package/fesm5/breeze-client-adapter-ajax-fetch.js +186 -0
  262. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +1 -0
  263. package/fesm5/breeze-client-adapter-ajax-httpclient.js +193 -0
  264. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  265. package/fesm5/breeze-client-adapter-ajax-jquery.js +111 -0
  266. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +1 -0
  267. package/fesm5/breeze-client-adapter-ajax-post.js +86 -0
  268. package/fesm5/breeze-client-adapter-ajax-post.js.map +1 -0
  269. package/fesm5/breeze-client-adapter-data-service-odata.js +523 -0
  270. package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -0
  271. package/fesm5/breeze-client-adapter-data-service-webapi.js +111 -0
  272. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -0
  273. package/fesm5/breeze-client-adapter-model-library-backing-store.js +276 -0
  274. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  275. package/fesm5/breeze-client-adapter-model-library-ko.js +248 -0
  276. package/fesm5/breeze-client-adapter-model-library-ko.js.map +1 -0
  277. package/fesm5/breeze-client-adapter-uri-builder-json.js +92 -0
  278. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +1 -0
  279. package/fesm5/breeze-client-adapter-uri-builder-odata.js +250 -0
  280. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  281. package/fesm5/breeze-client-mixin-get-entity-graph.js +254 -0
  282. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +1 -0
  283. package/fesm5/breeze-client-mixin-save-queuing.js +356 -0
  284. package/fesm5/breeze-client-mixin-save-queuing.js.map +1 -0
  285. package/fesm5/breeze-client.js +13953 -0
  286. package/fesm5/breeze-client.js.map +1 -0
  287. package/mixin-get-entity-graph/{index.d.ts → breeze-client-mixin-get-entity-graph.d.ts} +0 -1
  288. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +1 -0
  289. package/mixin-get-entity-graph/package.json +13 -0
  290. package/mixin-save-queuing/{index.d.ts → breeze-client-mixin-save-queuing.d.ts} +0 -1
  291. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +1 -0
  292. package/mixin-save-queuing/package.json +13 -0
  293. package/package.json +11 -93
  294. package/src/abstract-data-service-adapter.d.ts +20 -0
  295. package/src/config.d.ts +1 -1
  296. package/src/core.d.ts +1 -1
  297. package/src/entity-aspect.d.ts +1 -1
  298. package/src/entity-metadata.d.ts +6 -8
  299. package/src/entity-query.d.ts +18 -4
  300. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -135
  301. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +0 -49
  302. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
  303. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -135
  304. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +0 -49
  305. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
  306. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -139
  307. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +0 -49
  308. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
  309. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -107
  310. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
  311. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
  312. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
  313. package/esm2022/adapter-data-service-odata/adapter-core.mjs +0 -49
  314. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
  315. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -100
  316. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
  317. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -269
  318. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
  319. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -241
  320. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
  321. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +0 -49
  322. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -37
  323. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
  324. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +0 -49
  325. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -191
  326. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
  327. package/esm2022/breeze-client.mjs +0 -5
  328. package/esm2022/index.mjs +0 -2
  329. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
  330. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
  331. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
  332. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +0 -421
  333. package/esm2022/src/abstract-data-service-adapter.mjs +0 -294
  334. package/esm2022/src/array.mjs +0 -4
  335. package/esm2022/src/assert-param.mjs +0 -330
  336. package/esm2022/src/breeze.mjs +0 -85
  337. package/esm2022/src/complex-array.mjs +0 -117
  338. package/esm2022/src/config.mjs +0 -232
  339. package/esm2022/src/core.mjs +0 -712
  340. package/esm2022/src/csdl-metadata-parser.mjs +0 -385
  341. package/esm2022/src/data-service.mjs +0 -239
  342. package/esm2022/src/data-type.mjs +0 -507
  343. package/esm2022/src/default-property-interceptor.mjs +0 -460
  344. package/esm2022/src/entity-aspect.mjs +0 -897
  345. package/esm2022/src/entity-group.mjs +0 -192
  346. package/esm2022/src/entity-key.mjs +0 -127
  347. package/esm2022/src/entity-manager.mjs +0 -2183
  348. package/esm2022/src/entity-metadata.mjs +0 -2242
  349. package/esm2022/src/entity-query.mjs +0 -1005
  350. package/esm2022/src/entity-state.mjs +0 -107
  351. package/esm2022/src/enum.mjs +0 -143
  352. package/esm2022/src/event.mjs +0 -264
  353. package/esm2022/src/interface-registry.mjs +0 -39
  354. package/esm2022/src/key-generator.mjs +0 -110
  355. package/esm2022/src/local-query-comparison-options.mjs +0 -75
  356. package/esm2022/src/mapping-context.mjs +0 -422
  357. package/esm2022/src/observable-array.mjs +0 -183
  358. package/esm2022/src/predicate.mjs +0 -1259
  359. package/esm2022/src/primitive-array.mjs +0 -85
  360. package/esm2022/src/query-options.mjs +0 -160
  361. package/esm2022/src/relation-array.mjs +0 -173
  362. package/esm2022/src/save-options.mjs +0 -51
  363. package/esm2022/src/unattached-children-map.mjs +0 -56
  364. package/esm2022/src/validation-options.mjs +0 -78
  365. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  366. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  367. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  368. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  369. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +0 -1
  370. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  371. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  372. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  373. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  374. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  375. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  376. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  377. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +0 -1
  378. package/fesm2022/breeze-client.mjs.map +0 -1
@@ -0,0 +1,114 @@
1
+ import { __extends } from "tslib";
2
+ import { BreezeEnum } from './enum';
3
+ /**
4
+ EntityState is an 'Enum' containing all of the valid states for an 'Entity'.
5
+ **/
6
+ var EntityState = /** @class */ (function (_super) {
7
+ __extends(EntityState, _super);
8
+ function EntityState() {
9
+ return _super !== null && _super.apply(this, arguments) || this;
10
+ }
11
+ /**
12
+ Returns whether an entityState instance is EntityState.Unchanged.
13
+ > var es = anEntity.entityAspect.entityState;
14
+ > return es.isUnchanged();
15
+
16
+ is the same as
17
+ > return es === EntityState.Unchanged;
18
+ **/
19
+ EntityState.prototype.isUnchanged = function () {
20
+ return this === EntityState.Unchanged;
21
+ };
22
+ /**
23
+ Return whether an entityState instance is EntityState.Added.
24
+
25
+ > var es = anEntity.entityAspect.entityState;
26
+ > return es.isAdded();
27
+
28
+ is the same as
29
+ > return es === EntityState.Added;
30
+ **/
31
+ EntityState.prototype.isAdded = function () {
32
+ return this === EntityState.Added;
33
+ };
34
+ /**
35
+ Returns whether an entityState instance is EntityState.Modified.
36
+ > var es = anEntity.entityAspect.entityState;
37
+ > return es.isModified();
38
+
39
+ is the same as
40
+ > return es === EntityState.Modified;
41
+ **/
42
+ EntityState.prototype.isModified = function () {
43
+ return this === EntityState.Modified;
44
+ };
45
+ /**
46
+ Returns whether an entityState instance is EntityState.Deleted.
47
+ > var es = anEntity.entityAspect.entityState;
48
+ > return es.isDeleted();
49
+
50
+ is the same as
51
+
52
+ > return es === EntityState.Deleted;
53
+ **/
54
+ EntityState.prototype.isDeleted = function () {
55
+ return this === EntityState.Deleted;
56
+ };
57
+ /**
58
+ Returns whether an entityState instance is EntityState.Detached.
59
+ > var es = anEntity.entityAspect.entityState;
60
+ > return es.isDetached();
61
+
62
+ is the same as
63
+ > return es === EntityState.Detached;
64
+ **/
65
+ EntityState.prototype.isDetached = function () {
66
+ return this === EntityState.Detached;
67
+ };
68
+ /** Return true if EntityState is Deleted or Detached */
69
+ EntityState.prototype.isDeletedOrDetached = function () {
70
+ return this === EntityState.Detached || this === EntityState.Detached;
71
+ };
72
+ /**
73
+ Returns whether an entityState instance is EntityState.Unchanged or EntityState.Modified.
74
+ > var es = anEntity.entityAspect.entityState;
75
+ > return es.isUnchangedOrModified();
76
+
77
+ is the same as
78
+ > return es === EntityState.Unchanged || es === EntityState.Modified
79
+ **/
80
+ EntityState.prototype.isUnchangedOrModified = function () {
81
+ return this === EntityState.Unchanged || this === EntityState.Modified;
82
+ };
83
+ /** Return true if EntityStatis is Added or Modified */
84
+ EntityState.prototype.isAddedOrModified = function () {
85
+ return this === EntityState.Added || this === EntityState.Modified;
86
+ };
87
+ /** Returns whether an entityState instance is EntityState.Added or EntityState.Modified or EntityState.Deleted.
88
+ > var es = anEntity.entityAspect.entityState;
89
+ > return es.isAddedModifiedOrDeleted();
90
+
91
+ is the same as
92
+ > return es === EntityState.Added || es === EntityState.Modified || es === EntityState.Deleted
93
+ **/
94
+ EntityState.prototype.isAddedModifiedOrDeleted = function () {
95
+ return this === EntityState.Added ||
96
+ this === EntityState.Modified ||
97
+ this === EntityState.Deleted;
98
+ };
99
+ /** The 'Unchanged' state. **/
100
+ EntityState.Unchanged = new EntityState();
101
+ /** The 'Added' state. **/
102
+ EntityState.Added = new EntityState();
103
+ /** The 'Modified' state. **/
104
+ EntityState.Modified = new EntityState();
105
+ /** The 'Deleted' state. **/
106
+ EntityState.Deleted = new EntityState();
107
+ /** The 'Detached' state. **/
108
+ EntityState.Detached = new EntityState();
109
+ return EntityState;
110
+ }(BreezeEnum));
111
+ export { EntityState };
112
+ EntityState.prototype._$typeName = "EntityState";
113
+ Error['x'] = EntityState.resolveSymbols();
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9lbnRpdHktc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFcEM7O0dBRUc7QUFDSDtJQUFpQywrQkFBVTtJQUEzQzs7SUE4R0EsQ0FBQztJQWpHQzs7Ozs7OztPQU9HO0lBQ0gsaUNBQVcsR0FBWDtRQUNFLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsNkJBQU8sR0FBUDtRQUNFLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxnQ0FBVSxHQUFWO1FBQ0UsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCwrQkFBUyxHQUFUO1FBQ0UsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGdDQUFVLEdBQVY7UUFDRSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx3REFBd0Q7SUFDeEQseUNBQW1CLEdBQW5CO1FBQ0UsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVEsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDJDQUFxQixHQUFyQjtRQUNFLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxTQUFTLElBQUksSUFBSSxLQUFLLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDekUsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCx1Q0FBaUIsR0FBakI7UUFDRSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCw4Q0FBd0IsR0FBeEI7UUFDRSxPQUFPLElBQUksS0FBSyxXQUFXLENBQUMsS0FBSztZQUMvQixJQUFJLEtBQUssV0FBVyxDQUFDLFFBQVE7WUFDN0IsSUFBSSxLQUFLLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDakMsQ0FBQztJQTFHRCw4QkFBOEI7SUFDdkIscUJBQVMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLDRCQUE0QjtJQUNyQixpQkFBSyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDakMsZ0NBQWdDO0lBQ3pCLG9CQUFRLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNwQyw4QkFBOEI7SUFDdkIsbUJBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ25DLCtCQUErQjtJQUN4QixvQkFBUSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFtR3RDLGtCQUFDO0NBQUEsQUE5R0QsQ0FBaUMsVUFBVSxHQThHMUM7U0E5R1ksV0FBVztBQStHeEIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO0FBQ2pELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVlemVFbnVtIH0gZnJvbSAnLi9lbnVtJztcclxuXHJcbi8qKlxyXG5FbnRpdHlTdGF0ZSBpcyBhbiAnRW51bScgY29udGFpbmluZyBhbGwgb2YgdGhlIHZhbGlkIHN0YXRlcyBmb3IgYW4gJ0VudGl0eScuXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgRW50aXR5U3RhdGUgZXh0ZW5kcyBCcmVlemVFbnVtIHtcclxuXHJcbiAgLyoqIFRoZSAnVW5jaGFuZ2VkJyBzdGF0ZS4gKiovXHJcbiAgc3RhdGljIFVuY2hhbmdlZCA9IG5ldyBFbnRpdHlTdGF0ZSgpO1xyXG4gIC8qKiAgVGhlICdBZGRlZCcgc3RhdGUuICAqKi9cclxuICBzdGF0aWMgQWRkZWQgPSBuZXcgRW50aXR5U3RhdGUoKTtcclxuICAvKiogIFRoZSAnTW9kaWZpZWQnIHN0YXRlLiAgICoqL1xyXG4gIHN0YXRpYyBNb2RpZmllZCA9IG5ldyBFbnRpdHlTdGF0ZSgpO1xyXG4gIC8qKiAgVGhlICdEZWxldGVkJyBzdGF0ZS4gICoqL1xyXG4gIHN0YXRpYyBEZWxldGVkID0gbmV3IEVudGl0eVN0YXRlKCk7XHJcbiAgLyoqICBUaGUgJ0RldGFjaGVkJyBzdGF0ZS4gICoqL1xyXG4gIHN0YXRpYyBEZXRhY2hlZCA9IG5ldyBFbnRpdHlTdGF0ZSgpO1xyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHdoZXRoZXIgYW4gZW50aXR5U3RhdGUgaW5zdGFuY2UgaXMgRW50aXR5U3RhdGUuVW5jaGFuZ2VkLlxyXG4gID4gICAgIHZhciBlcyA9IGFuRW50aXR5LmVudGl0eUFzcGVjdC5lbnRpdHlTdGF0ZTtcclxuICA+ICAgICByZXR1cm4gZXMuaXNVbmNoYW5nZWQoKTtcclxuXHJcbiAgaXMgdGhlIHNhbWUgYXNcclxuICA+ICAgICByZXR1cm4gZXMgPT09IEVudGl0eVN0YXRlLlVuY2hhbmdlZDtcclxuICAqKi9cclxuICBpc1VuY2hhbmdlZCgpIHtcclxuICAgIHJldHVybiB0aGlzID09PSBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm4gd2hldGhlciBhbiBlbnRpdHlTdGF0ZSBpbnN0YW5jZSBpcyBFbnRpdHlTdGF0ZS5BZGRlZC5cclxuICBcclxuICA+ICAgICB2YXIgZXMgPSBhbkVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGU7XHJcbiAgPiAgICAgcmV0dXJuIGVzLmlzQWRkZWQoKTtcclxuXHJcbiAgaXMgdGhlIHNhbWUgYXNcclxuICA+ICAgICByZXR1cm4gZXMgPT09IEVudGl0eVN0YXRlLkFkZGVkO1xyXG4gICoqL1xyXG4gIGlzQWRkZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcyA9PT0gRW50aXR5U3RhdGUuQWRkZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHdoZXRoZXIgYW4gZW50aXR5U3RhdGUgaW5zdGFuY2UgaXMgRW50aXR5U3RhdGUuTW9kaWZpZWQuXHJcbiAgPiAgICAgdmFyIGVzID0gYW5FbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gID4gICAgIHJldHVybiBlcy5pc01vZGlmaWVkKCk7XHJcblxyXG4gIGlzIHRoZSBzYW1lIGFzXHJcbiAgPiAgICAgcmV0dXJuIGVzID09PSBFbnRpdHlTdGF0ZS5Nb2RpZmllZDtcclxuICAqKi9cclxuICBpc01vZGlmaWVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMgPT09IEVudGl0eVN0YXRlLk1vZGlmaWVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB3aGV0aGVyIGFuIGVudGl0eVN0YXRlIGluc3RhbmNlIGlzIEVudGl0eVN0YXRlLkRlbGV0ZWQuXHJcbiAgPiAgICAgdmFyIGVzID0gYW5FbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gID4gICAgIHJldHVybiBlcy5pc0RlbGV0ZWQoKTtcclxuXHJcbiAgaXMgdGhlIHNhbWUgYXNcclxuICBcclxuICA+ICAgICByZXR1cm4gZXMgPT09IEVudGl0eVN0YXRlLkRlbGV0ZWQ7XHJcbiAgKiovXHJcbiAgaXNEZWxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMgPT09IEVudGl0eVN0YXRlLkRlbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIHdoZXRoZXIgYW4gZW50aXR5U3RhdGUgaW5zdGFuY2UgaXMgRW50aXR5U3RhdGUuRGV0YWNoZWQuXHJcbiAgPiAgICAgdmFyIGVzID0gYW5FbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gID4gICAgIHJldHVybiBlcy5pc0RldGFjaGVkKCk7XHJcblxyXG4gIGlzIHRoZSBzYW1lIGFzXHJcbiAgPiAgICAgcmV0dXJuIGVzID09PSBFbnRpdHlTdGF0ZS5EZXRhY2hlZDtcclxuICAqKi9cclxuICBpc0RldGFjaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMgPT09IEVudGl0eVN0YXRlLkRldGFjaGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybiB0cnVlIGlmIEVudGl0eVN0YXRlIGlzIERlbGV0ZWQgb3IgRGV0YWNoZWQgKi9cclxuICBpc0RlbGV0ZWRPckRldGFjaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMgPT09IEVudGl0eVN0YXRlLkRldGFjaGVkIHx8IHRoaXMgPT09IEVudGl0eVN0YXRlLkRldGFjaGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB3aGV0aGVyIGFuIGVudGl0eVN0YXRlIGluc3RhbmNlIGlzIEVudGl0eVN0YXRlLlVuY2hhbmdlZCBvciBFbnRpdHlTdGF0ZS5Nb2RpZmllZC5cclxuICA+ICAgICB2YXIgZXMgPSBhbkVudGl0eS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGU7XHJcbiAgPiAgICAgcmV0dXJuIGVzLmlzVW5jaGFuZ2VkT3JNb2RpZmllZCgpO1xyXG5cclxuICBpcyB0aGUgc2FtZSBhc1xyXG4gID4gICAgIHJldHVybiBlcyA9PT0gRW50aXR5U3RhdGUuVW5jaGFuZ2VkIHx8IGVzID09PSBFbnRpdHlTdGF0ZS5Nb2RpZmllZFxyXG4gICoqL1xyXG4gIGlzVW5jaGFuZ2VkT3JNb2RpZmllZCgpIHtcclxuICAgIHJldHVybiB0aGlzID09PSBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQgfHwgdGhpcyA9PT0gRW50aXR5U3RhdGUuTW9kaWZpZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJuIHRydWUgaWYgRW50aXR5U3RhdGlzIGlzIEFkZGVkIG9yIE1vZGlmaWVkICovXHJcbiAgaXNBZGRlZE9yTW9kaWZpZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcyA9PT0gRW50aXR5U3RhdGUuQWRkZWQgfHwgdGhpcyA9PT0gRW50aXR5U3RhdGUuTW9kaWZpZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJucyB3aGV0aGVyIGFuIGVudGl0eVN0YXRlIGluc3RhbmNlIGlzIEVudGl0eVN0YXRlLkFkZGVkIG9yIEVudGl0eVN0YXRlLk1vZGlmaWVkIG9yIEVudGl0eVN0YXRlLkRlbGV0ZWQuXHJcbiAgPiAgICAgdmFyIGVzID0gYW5FbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gID4gICAgIHJldHVybiBlcy5pc0FkZGVkTW9kaWZpZWRPckRlbGV0ZWQoKTtcclxuXHJcbiAgaXMgdGhlIHNhbWUgYXNcclxuICA+ICAgICByZXR1cm4gZXMgPT09IEVudGl0eVN0YXRlLkFkZGVkIHx8IGVzID09PSBFbnRpdHlTdGF0ZS5Nb2RpZmllZCB8fCBlcyA9PT0gRW50aXR5U3RhdGUuRGVsZXRlZFxyXG4gICoqL1xyXG4gIGlzQWRkZWRNb2RpZmllZE9yRGVsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzID09PSBFbnRpdHlTdGF0ZS5BZGRlZCB8fFxyXG4gICAgICB0aGlzID09PSBFbnRpdHlTdGF0ZS5Nb2RpZmllZCB8fFxyXG4gICAgICB0aGlzID09PSBFbnRpdHlTdGF0ZS5EZWxldGVkO1xyXG4gIH1cclxuXHJcbn1cclxuRW50aXR5U3RhdGUucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIkVudGl0eVN0YXRlXCI7XHJcbkVycm9yWyd4J10gPSBFbnRpdHlTdGF0ZS5yZXNvbHZlU3ltYm9scygpO1xyXG4iXX0=
@@ -0,0 +1,144 @@
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
+ var BreezeEnum = /** @class */ (function () {
50
+ /** */
51
+ function BreezeEnum(propertiesObj) {
52
+ var _this = this;
53
+ if (propertiesObj) {
54
+ Object.keys(propertiesObj).forEach(function (key) { return _this[key] = propertiesObj[key]; });
55
+ }
56
+ }
57
+ /**
58
+ Returns all of the symbols contained within this Enum.
59
+ > let symbols = DayOfWeek.getSymbols();
60
+ @return All of the symbols contained within this Enum.
61
+ **/
62
+ BreezeEnum.getSymbols = function () {
63
+ return this.resolveSymbols().map(function (ks) { return ks.symbol; });
64
+ };
65
+ /**
66
+ Returns the names of all of the symbols contained within this Enum.
67
+ > let symbols = DayOfWeek.getNames();
68
+ @return All of the names of the symbols contained within this Enum.
69
+ **/
70
+ BreezeEnum.getNames = function () {
71
+ return this.resolveSymbols().map(function (ks) { return ks.name; });
72
+ };
73
+ /**
74
+ Returns an Enum symbol given its name.
75
+ > let dayOfWeek = DayOfWeek.from("Thursday");
76
+ > // nowdayOfWeek === DayOfWeek.Thursday
77
+ @param name - Name for which an enum symbol should be returned.
78
+ @return The symbol that matches the name or 'undefined' if not found.
79
+ **/
80
+ BreezeEnum.fromName = function (name) {
81
+ return this[name];
82
+ };
83
+ /**
84
+ Seals this enum so that no more symbols may be added to it. This should only be called after all symbols
85
+ have already been added to the Enum. This method also sets the 'name' property on each of the symbols.
86
+ > DayOfWeek.resolveSymbols();
87
+ **/
88
+ BreezeEnum.resolveSymbols = function () {
89
+ if (this._resolvedNamesAndSymbols)
90
+ return this._resolvedNamesAndSymbols;
91
+ var result = [];
92
+ for (var key in this) {
93
+ if (this.hasOwnProperty(key)) {
94
+ var symb = this[key];
95
+ if (symb instanceof BreezeEnum) {
96
+ result.push({ name: key, symbol: symb });
97
+ this[key] = symb;
98
+ symb.name = key;
99
+ }
100
+ }
101
+ }
102
+ this._resolvedNamesAndSymbols = result;
103
+ return result;
104
+ };
105
+ /**
106
+ Returns whether an Enum contains a specified symbol.
107
+ > let symbol = DayOfWeek.Friday;
108
+ > if (DayOfWeek.contains(symbol)) {
109
+ > // do something
110
+ > }
111
+ @param sym - Object or symbol to test.
112
+ @return Whether this Enum contains the specified symbol.
113
+ **/
114
+ BreezeEnum.contains = function (sym) {
115
+ if (!(sym instanceof BreezeEnum)) {
116
+ return false;
117
+ }
118
+ return this[sym.name] != null;
119
+ };
120
+ // /**
121
+ // Checks if an object is an Enum 'symbol'. Use the 'contains' method instead of this one
122
+ // if you want to test for a specific Enum.
123
+ // > if (Enum.isSymbol(DayOfWeek.Wednesday)) {
124
+ // > // do something ...
125
+ // > };
126
+ // **/
127
+ // static isSymbol(obj: any) {
128
+ // return obj instanceof BreezeEnum;
129
+ // };
130
+ /** Returns the string name of this Enum */
131
+ BreezeEnum.prototype.toString = function () {
132
+ return this.name;
133
+ };
134
+ /** Return enum name and symbol name */
135
+ BreezeEnum.prototype.toJSON = function () {
136
+ return {
137
+ _$typeName: this['_$typeName'] || this.constructor.name,
138
+ name: this.name
139
+ };
140
+ };
141
+ return BreezeEnum;
142
+ }());
143
+ export { BreezeEnum };
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdDRTtBQUNGO0lBU0UsT0FBTztJQUNQLG9CQUFZLGFBQXNCO1FBQWxDLGlCQUlDO1FBSEMsSUFBSSxhQUFhLEVBQUU7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHLElBQUssT0FBQSxLQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUE5QixDQUE4QixDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHFCQUFVLEdBQWpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQUEsRUFBRSxJQUFJLE9BQUEsRUFBRSxDQUFDLE1BQU0sRUFBVCxDQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFRLEdBQWY7UUFDRSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxFQUFFLENBQUMsSUFBSSxFQUFQLENBQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQkFBUSxHQUFmLFVBQWdCLElBQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx5QkFBYyxHQUFyQjtRQUNFLElBQUksSUFBSSxDQUFDLHdCQUF3QjtZQUFFLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQ3hFLElBQUksTUFBTSxHQUEwQyxFQUFFLENBQUM7UUFFdkQsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksSUFBSSxZQUFZLFVBQVUsRUFBRTtvQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2lCQUNqQjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLG1CQUFRLEdBQWYsVUFBZ0IsR0FBZTtRQUM3QixJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksVUFBVSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUdELE1BQU07SUFDTiwwRkFBMEY7SUFDMUYsNENBQTRDO0lBQzVDLGtEQUFrRDtJQUNsRCw4QkFBOEI7SUFDOUIsV0FBVztJQUNYLE1BQU07SUFDTiw4QkFBOEI7SUFDOUIsc0NBQXNDO0lBQ3RDLEtBQUs7SUFFTCwyQ0FBMkM7SUFDM0MsNkJBQVEsR0FBUjtRQUNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLDJCQUFNLEdBQU47UUFDRSxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSyxJQUFJLENBQUMsV0FBbUIsQ0FBQyxJQUFJO1lBQ2hFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVILGlCQUFDO0FBQUQsQ0FBQyxBQTlHRCxJQThHQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAyMDEyLTIwMjMgSWRlYUJsYWRlLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgXHJcbiAqIFVzZSwgcmVwcm9kdWN0aW9uLCBkaXN0cmlidXRpb24sIGFuZCBtb2RpZmljYXRpb24gb2YgdGhpcyBjb2RlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBcclxuICogY29uZGl0aW9ucyBvZiB0aGUgSWRlYUJsYWRlIEJyZWV6ZSBsaWNlbnNlLCBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5icmVlemVqcy5jb20vbGljZW5zZVxyXG4gKlxyXG4gKiBBdXRob3I6IEpheSBUcmFiYW5kXHJcbiAqL1xyXG5cclxuLyoqXHJcbkJhc2UgY2xhc3MgZm9yIGFsbCBCcmVlemUgZW51bWVyYXRpb25zLCBzdWNoIGFzIEVudGl0eVN0YXRlLCBEYXRhVHlwZSwgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSBldGMuXHJcbkEgQnJlZXplIEVudW0gaXMgYSBuYW1lc3BhY2VkIHNldCBvZiBjb25zdGFudCB2YWx1ZXMuICBFYWNoIEVudW0gY29uc2lzdHMgb2YgYSBncm91cCBvZiByZWxhdGVkIGNvbnN0YW50cywgY2FsbGVkICdzeW1ib2xzJy5cclxuVW5saWtlIGVudW1zIGluIHNvbWUgb3RoZXIgZW52aXJvbm1lbnRzLCBlYWNoICdzeW1ib2wnIGNhbiBoYXZlIGJvdGggbWV0aG9kcyBhbmQgcHJvcGVydGllcy5cclxuPiAgICAgY2xhc3MgRGF5T2ZXZWVrIGV4dGVuZHMgQnJlZXplRW51bSB7XHJcbj4gICAgICAgZGF5SW5kZXg6IG51bWJlcjtcclxuPiAgICAgICBpc1dlZWtlbmQ/OiBib29sZWFuO1xyXG4+ICAgICAgIG5leHREYXkoKSB7XHJcbj4gICAgICAgICBsZXQgbmV4dEluZGV4ID0gKHRoaXMuZGF5SW5kZXggKyAxKSAlIDc7XHJcbj4gICAgICAgICByZXR1cm4gRGF5T2ZXZWVrLmdldFN5bWJvbHMoKVtuZXh0SW5kZXhdO1xyXG4+ICAgICAgIH1cclxuPlxyXG4+ICAgICAgIHN0YXRpYyBNb25kYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAwfSk7XHJcbj4gICAgICAgc3RhdGljIFR1ZXNkYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAxIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBXZWRuZXNkYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiAyIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBUaHVyc2RheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDMgfSk7XHJcbj4gICAgICAgc3RhdGljIEZyaWRheSA9IG5ldyBEYXlPZldlZWsoIHsgZGF5SW5kZXg6IDQgfSk7XHJcbj4gICAgICAgc3RhdGljIFNhdHVyZGF5ID0gbmV3IERheU9mV2VlayggeyBkYXlJbmRleDogNSwgaXNXZWVrZW5kOiB0cnVlIH0pO1xyXG4+ICAgICAgIHN0YXRpYyBTdW5kYXkgPSBuZXcgRGF5T2ZXZWVrKCB7IGRheUluZGV4OiA2LCBpc1dlZWtlbmQ6IHRydWUgfSk7XHJcbj4gICAgIH1cclxuPlxyXG4+ICAgICBkZXNjcmliZShcIkRheU9mV2Vla1wiLCAoKSA9PiB7XHJcbj4gICAgICAgdGVzdChcInNob3VsZCBzdXBwb3J0IGZ1bGwgZW51bSBjYXBhYmlsaXRpZXNcIiwgZnVuY3Rpb24oKSB7XHJcbj4gICAgICAgICAvLyAvLyBjdXN0b20gbWV0aG9kc1xyXG4+ICAgICAgICAgbGV0IGRvd1N5bWJvbHMgPSBEYXlPZldlZWsuZ2V0U3ltYm9scygpO1xyXG4+ICAgICAgICAgZXhwZWN0KGRvd1N5bWJvbHMubGVuZ3RoKS50b0JlKDcpO1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5Nb25kYXkubmV4dERheSgpKS50b0JlKERheU9mV2Vlay5UdWVzZGF5KTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuU3VuZGF5Lm5leHREYXkoKSkudG9CZShEYXlPZldlZWsuTW9uZGF5KTtcclxuPiAgICAgICAvLyAvLyBjdXN0b20gcHJvcGVydGllc1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5UdWVzZGF5LmlzV2Vla2VuZCkudG9CZSh1bmRlZmluZWQpO1xyXG4+ICAgICAgICAgZXhwZWN0KERheU9mV2Vlay5TYXR1cmRheS5pc1dlZWtlbmQpLnRvQmUodHJ1ZSk7XHJcbj4gICAgICAgLy8gLy8gU3RhbmRhcmQgZW51bSBjYXBhYmlsaXRpZXNcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuVGh1cnNkYXkgaW5zdGFuY2VvZiBEYXlPZldlZWspLnRvQmUodHJ1ZSk7XHJcbj4gICAgICAgICBleHBlY3QoQnJlZXplRW51bS5pc1N5bWJvbChEYXlPZldlZWsuV2VkbmVzZGF5KSkudG9CZSh0cnVlKTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuY29udGFpbnMoRGF5T2ZXZWVrLlRodXJzZGF5KSkudG9CZSh0cnVlKTtcclxuPiAgICAgICAgIGV4cGVjdChEYXlPZldlZWsuRnJpZGF5LnRvU3RyaW5nKCkpLnRvQmUoXCJGcmlkYXlcIik7XHJcbj4gICAgICAgfSk7XHJcbj4gICB9KTtcclxuTm90ZSB0aGF0IHdlIGhhdmUgRXJyb3JbJ3gnXSA9IC4uLiBpbiBzb21lIHBsYWNlcyBpbiB0aGUgY29kZSB0byBwcmV2ZW50IFRlcnNlciBmcm9tIG9wdGltaXppbmcgb3V0IHNvbWUgaW1wb3J0YW50IGNhbGxzLlxyXG5AZHluYW1pY1xyXG4qL1xyXG5leHBvcnQgY2xhc3MgQnJlZXplRW51bSB7XHJcbiAgLy8gLy8gVE9ETzogdGhpbmsgYWJvdXQgQ29tcG9zaXRlRW51bSAoZmxhZ3MgaW1wbCkuXHJcbiAgLyoqIFRoZSBuYW1lIG9mIHRoaXMgc3ltYm9sICovXHJcbiAgZGVjbGFyZSBuYW1lOiBzdHJpbmc7XHJcbiAgLyoqIFR5cGUgb2YgdGhlIGVudW07IHNldCBpbiBwcm90b3R5cGUgb2YgZWFjaCBlbnVtICovXHJcbiAgZGVjbGFyZSBfJHR5cGVOYW1lOiBzdHJpbmc7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIF9yZXNvbHZlZE5hbWVzQW5kU3ltYm9sczogeyBuYW1lOiBzdHJpbmcsIHN5bWJvbDogQnJlZXplRW51bSB9W107XHJcblxyXG4gIC8qKiAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzT2JqPzogT2JqZWN0KSB7XHJcbiAgICBpZiAocHJvcGVydGllc09iaikge1xyXG4gICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzT2JqKS5mb3JFYWNoKChrZXkpID0+IHRoaXNba2V5XSA9IHByb3BlcnRpZXNPYmpba2V5XSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGFsbCBvZiB0aGUgc3ltYm9scyBjb250YWluZWQgd2l0aGluIHRoaXMgRW51bS5cclxuICA+ICAgICBsZXQgc3ltYm9scyA9IERheU9mV2Vlay5nZXRTeW1ib2xzKCk7XHJcbiAgQHJldHVybiBBbGwgb2YgdGhlIHN5bWJvbHMgY29udGFpbmVkIHdpdGhpbiB0aGlzIEVudW0uXHJcbiAgKiovXHJcbiAgc3RhdGljIGdldFN5bWJvbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU3ltYm9scygpLm1hcChrcyA9PiBrcy5zeW1ib2wpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgbmFtZXMgb2YgYWxsIG9mIHRoZSBzeW1ib2xzIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBFbnVtLlxyXG4gID4gICAgIGxldCBzeW1ib2xzID0gRGF5T2ZXZWVrLmdldE5hbWVzKCk7XHJcbiAgQHJldHVybiAgQWxsIG9mIHRoZSBuYW1lcyBvZiB0aGUgc3ltYm9scyBjb250YWluZWQgd2l0aGluIHRoaXMgRW51bS5cclxuICAqKi9cclxuICBzdGF0aWMgZ2V0TmFtZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU3ltYm9scygpLm1hcChrcyA9PiBrcy5uYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYW4gRW51bSBzeW1ib2wgZ2l2ZW4gaXRzIG5hbWUuXHJcbiAgPiAgICAgbGV0IGRheU9mV2VlayA9IERheU9mV2Vlay5mcm9tKFwiVGh1cnNkYXlcIik7XHJcbiAgPiAgICAgLy8gbm93ZGF5T2ZXZWVrID09PSBEYXlPZldlZWsuVGh1cnNkYXlcclxuICBAcGFyYW0gbmFtZSAtIE5hbWUgZm9yIHdoaWNoIGFuIGVudW0gc3ltYm9sIHNob3VsZCBiZSByZXR1cm5lZC5cclxuICBAcmV0dXJuIFRoZSBzeW1ib2wgdGhhdCBtYXRjaGVzIHRoZSBuYW1lIG9yICd1bmRlZmluZWQnIGlmIG5vdCBmb3VuZC5cclxuICAqKi9cclxuICBzdGF0aWMgZnJvbU5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpc1tuYW1lXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFNlYWxzIHRoaXMgZW51bSBzbyB0aGF0IG5vIG1vcmUgc3ltYm9scyBtYXkgYmUgYWRkZWQgdG8gaXQuIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGFsbCBzeW1ib2xzXHJcbiAgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIEVudW0uIFRoaXMgbWV0aG9kIGFsc28gc2V0cyB0aGUgJ25hbWUnIHByb3BlcnR5IG9uIGVhY2ggb2YgdGhlIHN5bWJvbHMuXHJcbiAgPiAgICAgRGF5T2ZXZWVrLnJlc29sdmVTeW1ib2xzKCk7XHJcbiAgKiovXHJcbiAgc3RhdGljIHJlc29sdmVTeW1ib2xzKCkge1xyXG4gICAgaWYgKHRoaXMuX3Jlc29sdmVkTmFtZXNBbmRTeW1ib2xzKSByZXR1cm4gdGhpcy5fcmVzb2x2ZWROYW1lc0FuZFN5bWJvbHM7XHJcbiAgICBsZXQgcmVzdWx0OiB7bmFtZTogc3RyaW5nLCBzeW1ib2w6IEJyZWV6ZUVudW0gfVtdID0gW107XHJcblxyXG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMpIHtcclxuICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgIGxldCBzeW1iID0gdGhpc1trZXldO1xyXG4gICAgICAgIGlmIChzeW1iIGluc3RhbmNlb2YgQnJlZXplRW51bSkge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goIHsgbmFtZToga2V5LCBzeW1ib2w6IHN5bWIgfSk7XHJcbiAgICAgICAgICB0aGlzW2tleV0gPSBzeW1iO1xyXG4gICAgICAgICAgc3ltYi5uYW1lID0ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fcmVzb2x2ZWROYW1lc0FuZFN5bWJvbHMgPSByZXN1bHQ7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB3aGV0aGVyIGFuIEVudW0gY29udGFpbnMgYSBzcGVjaWZpZWQgc3ltYm9sLlxyXG4gID4gICAgIGxldCBzeW1ib2wgPSBEYXlPZldlZWsuRnJpZGF5O1xyXG4gID4gICAgIGlmIChEYXlPZldlZWsuY29udGFpbnMoc3ltYm9sKSkge1xyXG4gID4gICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICA+ICAgICB9XHJcbiAgQHBhcmFtIHN5bSAtIE9iamVjdCBvciBzeW1ib2wgdG8gdGVzdC5cclxuICBAcmV0dXJuIFdoZXRoZXIgdGhpcyBFbnVtIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3ltYm9sLlxyXG4gICoqL1xyXG4gIHN0YXRpYyBjb250YWlucyhzeW06IEJyZWV6ZUVudW0pIHtcclxuICAgIGlmICghKHN5bSBpbnN0YW5jZW9mIEJyZWV6ZUVudW0pKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpc1tzeW0ubmFtZV0gIT0gbnVsbDtcclxuICB9XHJcblxyXG5cclxuICAvLyAvKipcclxuICAvLyBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIEVudW0gJ3N5bWJvbCcuIFVzZSB0aGUgJ2NvbnRhaW5zJyBtZXRob2QgaW5zdGVhZCBvZiB0aGlzIG9uZSBcclxuICAvLyBpZiB5b3Ugd2FudCB0byB0ZXN0IGZvciBhIHNwZWNpZmljIEVudW0uIFxyXG4gIC8vID4gICAgIGlmIChFbnVtLmlzU3ltYm9sKERheU9mV2Vlay5XZWRuZXNkYXkpKSB7XHJcbiAgLy8gPiAgICAgICAvLyBkbyBzb21ldGhpbmcgLi4uXHJcbiAgLy8gPiAgICAgfTtcclxuICAvLyAqKi9cclxuICAvLyBzdGF0aWMgaXNTeW1ib2wob2JqOiBhbnkpIHtcclxuICAvLyAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBCcmVlemVFbnVtO1xyXG4gIC8vIH07XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgbmFtZSBvZiB0aGlzIEVudW0gKi9cclxuICB0b1N0cmluZygpIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJuIGVudW0gbmFtZSBhbmQgc3ltYm9sIG5hbWUgKi9cclxuICB0b0pTT04oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBfJHR5cGVOYW1lOiB0aGlzWydfJHR5cGVOYW1lJ10gfHwgKHRoaXMuY29uc3RydWN0b3IgYXMgYW55KS5uYW1lLFxyXG4gICAgICBuYW1lOiB0aGlzLm5hbWVcclxuICAgIH07XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbiJdfQ==
@@ -0,0 +1,259 @@
1
+ import { core } from './core';
2
+ import { assertParam } from './assert-param';
3
+ function publishCore(that, data, errorCallback) {
4
+ var 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
+ var BreezeEvent = /** @class */ (function () {
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
+ function BreezeEvent(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
+ var subs = this._subscribers;
60
+ var 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
+ BreezeEvent.prototype.publish = function (data, publishAsync, errorCallback) {
103
+ if (publishAsync === void 0) { publishAsync = false; }
104
+ if (!BreezeEvent._isEnabled(this.name, this.publisher))
105
+ return false;
106
+ if (publishAsync === true) {
107
+ setTimeout(publishCore, 0, this, data, errorCallback);
108
+ }
109
+ else {
110
+ publishCore(this, data, errorCallback);
111
+ }
112
+ return true;
113
+ };
114
+ /**
115
+ Publish data for this event asynchronously.
116
+ > // Assume 'salaryEvent' is previously constructed Event
117
+ > salaryEvent.publishAsync( { eventType: "payRaise", amount: 100 });
118
+
119
+ And we can add a handler in case the subscriber 'mishandles' the event.
120
+ > salaryEvent.publishAsync( { eventType: "payRaise", amount: 100 }, function(error) {
121
+ > // do something with the 'error' object
122
+ > });
123
+ @param data - Data to publish
124
+ @param errorCallback - Function to be called for any errors that occur during publication. If omitted,
125
+ errors will be eaten.
126
+ **/
127
+ BreezeEvent.prototype.publishAsync = function (data, errorCallback) {
128
+ this.publish(data, true, errorCallback);
129
+ };
130
+ /**
131
+ Subscribe to this event.
132
+ > // Assume 'salaryEvent' is previously constructed Event
133
+ > salaryEvent.subscribe(function (eventArgs) {
134
+ > if (eventArgs.eventType === "payRaise") {
135
+ > // do something
136
+ > }
137
+ > });
138
+
139
+ There are several built in Breeze events, such as [[EntityAspect.propertyChanged]], [[EntityAspect.validationErrorsChanged]] as well.
140
+ > // Assume order is a preexisting 'order' entity
141
+ > order.entityAspect.propertyChanged.subscribe(function (pcEvent) {
142
+ > if ( pcEvent.propertyName === "OrderDate") {
143
+ > // do something
144
+ > }
145
+ > });
146
+ @param callback- Function to be called whenever 'data' is published for this event.
147
+ @param callback.data - {Object} Whatever 'data' was published. This should be documented on the specific event.
148
+ @return This is a key for 'unsubscription'. It can be passed to the 'unsubscribe' method.
149
+ **/
150
+ BreezeEvent.prototype.subscribe = function (callback) {
151
+ if (!this._subscribers) {
152
+ this._subscribers = [];
153
+ }
154
+ var unsubKey = BreezeEvent.__nextUnsubKey;
155
+ this._subscribers.push({ unsubKey: unsubKey, callback: callback });
156
+ ++BreezeEvent.__nextUnsubKey;
157
+ return unsubKey;
158
+ };
159
+ /** remove all subscribers */
160
+ BreezeEvent.prototype.clear = function () {
161
+ this._subscribers = null;
162
+ };
163
+ /** event bubbling - document later. */
164
+ // null or undefined 'getParentFn' means Event does not need to bubble i.e. that it is always enabled - .
165
+ BreezeEvent.bubbleEvent = function (target, getParentFn) {
166
+ target._getEventParent = getParentFn || null;
167
+ };
168
+ /**
169
+ Enables or disables the named event for an object and all of its children.
170
+ > BreezeEvent.enable(“propertyChanged”, myEntityManager, false)
171
+
172
+ will disable all EntityAspect.propertyChanged events within a EntityManager.
173
+ > BreezeEvent.enable(“propertyChanged”, myEntityManager, true)
174
+
175
+ will enable all EntityAspect.propertyChanged events within a EntityManager.
176
+ > BreezeEvent.enable(“propertyChanged”, myEntity.entityAspect, false)
177
+
178
+ will disable EntityAspect.propertyChanged events for a specific entity.
179
+ > BreezeEvent.enable(“propertyChanged”, myEntity.entityAspect, null)
180
+
181
+ will removes any enabling / disabling at the entity aspect level so now any 'Event.enable' calls at the EntityManager level,
182
+ made either previously or in the future, will control notification.
183
+ > BreezeEvent.enable(“validationErrorsChanged”, myEntityManager, function(em) {
184
+ > return em.customTag === “blue”;
185
+ > })
186
+
187
+
188
+ will either enable or disable myEntityManager based on the current value of a ‘customTag’ property on myEntityManager.
189
+ Note that this is dynamic, changing the customTag value will cause events to be enabled or disabled immediately.
190
+ @param eventName - The name of the event.
191
+ @param target - The object at which enabling or disabling will occur. All event notifications that occur to this object or
192
+ children of this object will be enabled or disabled.
193
+ @param isEnabled - A boolean, a null or a function that returns either a boolean or a null.
194
+ **/
195
+ BreezeEvent.enable = function (eventName, obj, isEnabled) {
196
+ assertParam(eventName, "eventName").isNonEmptyString().check();
197
+ assertParam(obj, "obj").isObject().check();
198
+ assertParam(isEnabled, "isEnabled").isBoolean().isOptional().or().isFunction().check();
199
+ var ob = obj;
200
+ if (!ob._$eventMap) {
201
+ ob._$eventMap = {};
202
+ }
203
+ ob._$eventMap[eventName] = isEnabled;
204
+ };
205
+ /**
206
+ Returns whether for a specific event and a specific object and its children, notification is enabled or disabled or not set.
207
+ > BreezeEvent.isEnabled(“propertyChanged”, myEntityManager)
208
+ >
209
+ @param eventName - The name of the event.
210
+ @param target - The object for which we want to know if notifications are enabled.
211
+ @return A null is returned if this value has not been set.
212
+ **/
213
+ BreezeEvent.isEnabled = function (eventName, obj) {
214
+ assertParam(eventName, "eventName").isNonEmptyString().check();
215
+ assertParam(obj, "obj").isObject().check();
216
+ // null is ok - it just means that the object is at the top level.
217
+ if (obj._getEventParent === undefined) {
218
+ throw new Error("This object does not support event enabling/disabling");
219
+ }
220
+ // return ctor._isEnabled(getFullEventName(eventName), obj);
221
+ return BreezeEvent._isEnabled(eventName, 3);
222
+ };
223
+ /** @hidden @internal */
224
+ BreezeEvent.__eventNameMap = {};
225
+ /** @hidden @internal */
226
+ BreezeEvent.__nextUnsubKey = 1;
227
+ /** @hidden @internal */
228
+ BreezeEvent._isEnabled = function (eventName, obj) {
229
+ var isEnabled = null;
230
+ var ob = obj;
231
+ var 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
+ var parent_1 = ob._getEventParent && ob._getEventParent();
245
+ if (parent_1) {
246
+ return !!this._isEnabled(eventName, parent_1);
247
+ }
248
+ else {
249
+ // default if not explicitly disabled.
250
+ return true;
251
+ }
252
+ }
253
+ };
254
+ return BreezeEvent;
255
+ }());
256
+ export { BreezeEvent };
257
+ // legacy support - deliberately not typed
258
+ core.Event = BreezeEvent;
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLFNBQVMsV0FBVyxDQUFJLElBQW9CLEVBQUUsSUFBTyxFQUFFLGFBQWlDO0lBQ3RGLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDcEMsSUFBSSxDQUFDLFdBQVc7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM5QixnQ0FBZ0M7SUFDaEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDN0IsSUFBSTtZQUNGLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEI7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLENBQUMsQ0FBQyxPQUFPLEdBQUcsOEJBQThCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN2RCxJQUFJLGFBQWEsRUFBRTtnQkFDakIsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO2lCQUFNLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUNyQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0I7aUJBQU07Z0JBQ0wsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDekI7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsQ0FBUTtJQUNwQyx1QkFBdUI7SUFDdkIsc0JBQXNCO0FBQ3hCLENBQUM7QUFTRDs7O0dBR0c7QUFDSDtJQWdCRTs7Ozs7OztPQU9HO0lBQ0gscUJBQVksSUFBWSxFQUFFLFNBQWlCLEVBQUUsb0JBQXdDO1FBMkZyRjs7Ozs7Ozs7Ozs7V0FXRztRQUNILGdC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eyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgYXNzZXJ0UGFyYW0gfSBmcm9tICcuL2Fzc2VydC1wYXJhbSc7XHJcblxyXG5mdW5jdGlvbiBwdWJsaXNoQ29yZTxUPih0aGF0OiBCcmVlemVFdmVudDxUPiwgZGF0YTogVCwgZXJyb3JDYWxsYmFjaz86IChlOiBFcnJvcikgPT4gYW55KSB7XHJcbiAgbGV0IHN1YnNjcmliZXJzID0gdGhhdC5fc3Vic2NyaWJlcnM7XHJcbiAgaWYgKCFzdWJzY3JpYmVycykgcmV0dXJuIHRydWU7XHJcbiAgLy8gc3Vic2NyaWJlcnMgZnJvbSBvdXRlciBzY29wZS5cclxuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBzLmNhbGxiYWNrKGRhdGEpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBlLmNvbnRleHQgPSBcInVuYWJsZSB0byBwdWJsaXNoIG9uIHRvcGljOiBcIiArIHRoYXQubmFtZTtcclxuICAgICAgaWYgKGVycm9yQ2FsbGJhY2spIHtcclxuICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoYXQuX2RlZmF1bHRFcnJvckNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhhdC5fZGVmYXVsdEVycm9yQ2FsbGJhY2soZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmFsbGJhY2tFcnJvckhhbmRsZXIoZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZmFsbGJhY2tFcnJvckhhbmRsZXIoZTogRXJyb3IpIHtcclxuICAvLyBUT0RPOiBtYXliZSBsb2cgdGhpc1xyXG4gIC8vIGZvciBub3cgZG8gbm90aGluZztcclxufVxyXG5cclxuXHJcbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbiB7XHJcbiAgdW5zdWJLZXk6IG51bWJlcjtcclxuICBjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gYW55O1xyXG59XHJcblxyXG4vKipcclxuQ2xhc3MgdG8gc3VwcG9ydCBiYXNpYyBldmVudCBwdWJsaWNhdGlvbiBhbmQgc3Vic2NyaXB0aW9uIHNlbWFudGljcy5cclxuQGR5bmFtaWNcclxuKiovXHJcbmV4cG9ydCBjbGFzcyBCcmVlemVFdmVudDxUPiB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIF9fZXZlbnROYW1lTWFwID0ge307XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIF9fbmV4dFVuc3ViS2V5ID0gMTtcclxuICAvKiogVGhlIG5hbWUgb2YgdGhpcyBFdmVudCAqL1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKiogVGhlIG9iamVjdCBkb2luZyB0aGUgcHVibGljYXRpb24uIGkuZS4gdGhlIG9iamVjdCB0byB3aGljaCB0aGlzIGV2ZW50IGlzIGF0dGFjaGVkLiAqL1xyXG4gIHB1Ymxpc2hlcjogT2JqZWN0O1xyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfc3Vic2NyaWJlcnM6IFN1YnNjcmlwdGlvbltdO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9kZWZhdWx0RXJyb3JDYWxsYmFjazogKGU6IEVycm9yKSA9PiBhbnk7XHJcblxyXG5cclxuICAvKipcclxuICBDb25zdHJ1Y3RvciBmb3IgYW4gRXZlbnRcclxuICA+ICAgICBzYWxhcnlFdmVudCA9IG5ldyBCcmVlemVFdmVudChcInNhbGFyeUV2ZW50XCIsIHBlcnNvbik7XHJcbiAgQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQuXHJcbiAgQHBhcmFtIHB1Ymxpc2hlciAtIFRoZSBvYmplY3QgdGhhdCB3aWxsIGJlIGRvaW5nIHRoZSBwdWJsaWNhdGlvbi4gaS5lLiB0aGUgb2JqZWN0IHRvIHdoaWNoIHRoaXMgZXZlbnQgaXMgYXR0YWNoZWQuXHJcbiAgQHBhcmFtIGRlZmF1bHRFcnJvckNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gY2FsbCB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgc3Vic2NyaXB0aW9uIGV4ZWN1dGlvbi4gXHJcbiAgSWYgb21pdHRlZCB0aGVuIHN1YnNjcmliZXIgbm90aWZpY2F0aW9uIGZhaWx1cmVzIHdpbGwgYmUgaWdub3JlZC5cclxuICAqKi9cclxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHB1Ymxpc2hlcjogT2JqZWN0LCBkZWZhdWx0RXJyb3JDYWxsYmFjaz86IChlOiBFcnJvcikgPT4gYW55KSB7XHJcbiAgICBhc3NlcnRQYXJhbShuYW1lLCBcImV2ZW50TmFtZVwiKS5pc05vbkVtcHR5U3RyaW5nKCkuY2hlY2soKTtcclxuICAgIGFzc2VydFBhcmFtKHB1Ymxpc2hlciwgXCJwdWJsaXNoZXJcIikuaXNPYmplY3QoKS5jaGVjaygpO1xyXG5cclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAvLyByZWdpc3RlciB0aGUgbmFtZVxyXG4gICAgQnJlZXplRXZlbnQuX19ldmVudE5hbWVNYXBbbmFtZV0gPSB0cnVlO1xyXG4gICAgdGhpcy5wdWJsaXNoZXIgPSBwdWJsaXNoZXI7XHJcbiAgICBpZiAoZGVmYXVsdEVycm9yQ2FsbGJhY2spIHtcclxuICAgICAgdGhpcy5fZGVmYXVsdEVycm9yQ2FsbGJhY2sgPSBkZWZhdWx0RXJyb3JDYWxsYmFjaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFB1Ymxpc2ggZGF0YSBmb3IgdGhpcyBldmVudC5cclxuICA+ICAgICAgLy8gQXNzdW1lICdzYWxhcnlFdmVudCcgaXMgcHJldmlvdXNseSBjb25zdHJ1Y3RlZCBFdmVudFxyXG4gID4gICAgICBzYWxhcnlFdmVudC5wdWJsaXNoKCB7IGV2ZW50VHlwZTogXCJwYXlSYWlzZVwiLCBhbW91bnQ6IDEwMCB9KTtcclxuXHJcbiAgVGhpcyBldmVudCBjYW4gYWxzbyBiZSBwdWJsaXNoZWQgYXN5Y2hyb25vdXNseVxyXG4gID4gICAgICBzYWxhcnlFdmVudC5wdWJsaXNoKCB7IGV2ZW50VHlwZTogXCJwYXlSYWlzZVwiLCBhbW91bnQ6IDEwMCB9LCB0cnVlKTtcclxuXHJcbiAgQW5kIHdlIGNhbiBhZGQgYSBoYW5kbGVyIGluIGNhc2UgdGhlIHN1YnNjcmliZXIgJ21pc2hhbmRsZXMnIHRoZSBldmVudC5cclxuICA+ICAgICAgc2FsYXJ5RXZlbnQucHVibGlzaCggeyBldmVudFR5cGU6IFwicGF5UmFpc2VcIiwgYW1vdW50OiAxMDAgfSwgdHJ1ZSwgZnVuY3Rpb24oZXJyb3IpIHtcclxuICA+ICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSAnZXJyb3InIG9iamVjdFxyXG4gID4gICAgICB9KTtcclxuICBAcGFyYW0gZGF0YSAtIERhdGEgdG8gcHVibGlzaFxyXG4gIEBwYXJhbSBwdWJsaXNoQXN5bmMgLSAoZGVmYXVsdD1mYWxzZSkgV2hldGhlciB0byBwdWJsaXNoIGFzeW5jaG9ub3VzbHkgb3Igbm90LlxyXG4gIEBwYXJhbSBlcnJvckNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBhbnkgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIHB1YmxpY2F0aW9uLiBJZiBvbWl0dGVkLFxyXG4gIGVycm9ycyB3aWxsIGJlIGVhdGVuLlxyXG4gIEByZXR1cm4gZmFsc2UgaWYgZXZlbnQgaXMgZGlzYWJsZWQ7IHRydWUgb3RoZXJ3aXNlLlxyXG4gICoqL1xyXG4gIHB1Ymxpc2goZGF0YTogVCwgcHVibGlzaEFzeW5jOiBib29sZWFuID0gZmFsc2UsIGVycm9yQ2FsbGJhY2s/OiAoZTogRXJyb3IpID0+IGFueSkge1xyXG5cclxuICAgIGlmICghQnJlZXplRXZlbnQuX2lzRW5hYmxlZCh0aGlzLm5hbWUsIHRoaXMucHVibGlzaGVyKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChwdWJsaXNoQXN5bmMgPT09IHRydWUpIHtcclxuICAgICAgc2V0VGltZW91dChwdWJsaXNoQ29yZSwgMCwgdGhpcywgZGF0YSwgZXJyb3JDYWxsYmFjayk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwdWJsaXNoQ29yZSh0aGlzLCBkYXRhLCBlcnJvckNhbGxiYWNrKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUHVibGlzaCBkYXRhIGZvciB0aGlzIGV2ZW50IGFzeW5jaHJvbm91c2x5LlxyXG4gID4gICAgICAvLyBBc3N1bWUgJ3NhbGFyeUV2ZW50JyBpcyBwcmV2aW91c2x5IGNvbnN0cnVjdGVkIEV2ZW50XHJcbiAgPiAgICAgIHNhbGFyeUV2ZW50LnB1Ymxpc2hBc3luYyggeyBldmVudFR5cGU6IFwicGF5UmFpc2VcIiwgYW1vdW50OiAxMDAgfSk7XHJcblxyXG4gIEFuZCB3ZSBjYW4gYWRkIGEgaGFuZGxlciBpbiBjYXNlIHRoZSBzdWJzY3JpYmVyICdtaXNoYW5kbGVzJyB0aGUgZXZlbnQuXHJcbiAgPiAgICAgIHNhbGFyeUV2ZW50LnB1Ymxpc2hBc3luYyggeyBldmVudFR5cGU6IFwicGF5UmFpc2VcIiwgYW1vdW50OiAxMDAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcclxuICA+ICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHRoZSAnZXJyb3InIG9iamVjdFxyXG4gID4gICAgICB9KTtcclxuICBAcGFyYW0gZGF0YSAtIERhdGEgdG8gcHVibGlzaFxyXG4gIEBwYXJhbSBlcnJvckNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBhbnkgZXJyb3JzIHRoYXQgb2NjdXIgZHVyaW5nIHB1YmxpY2F0aW9uLiBJZiBvbWl0dGVkLFxyXG4gIGVycm9ycyB3aWxsIGJlIGVhdGVuLlxyXG4gICoqL1xyXG4gIHB1Ymxpc2hBc3luYyhkYXRhOiBULCBlcnJvckNhbGxiYWNrOiAoZTogRXJyb3IpID0+IGFueSkge1xyXG4gICAgdGhpcy5wdWJsaXNoKGRhdGEsIHRydWUsIGVycm9yQ2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgU3Vic2NyaWJlIHRvIHRoaXMgZXZlbnQuXHJcbiAgPiAgICAgIC8vIEFzc3VtZSAnc2FsYXJ5RXZlbnQnIGlzIHByZXZpb3VzbHkgY29uc3RydWN0ZWQgRXZlbnRcclxuICA+ICAgICAgc2FsYXJ5RXZlbnQuc3Vic2NyaWJlKGZ1bmN0aW9uIChldmVudEFyZ3MpIHtcclxuICA+ICAgICAgICAgIGlmIChldmVudEFyZ3MuZXZlbnRUeXBlID09PSBcInBheVJhaXNlXCIpIHtcclxuICA+ICAgICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICA+ICAgICAgICAgIH1cclxuICA+ICAgICAgfSk7XHJcblxyXG4gIFRoZXJlIGFyZSBzZXZlcmFsIGJ1aWx0IGluIEJyZWV6ZSBldmVudHMsIHN1Y2ggYXMgW1tFbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkXV0sIFtbRW50aXR5QXNwZWN0LnZhbGlkYXRpb25FcnJvcnNDaGFuZ2VkXV0gYXMgd2VsbC5cclxuICA+ICAgICAgLy8gQXNzdW1lIG9yZGVyIGlzIGEgcHJlZXhpc3RpbmcgJ29yZGVyJyBlbnRpdHlcclxuICA+ICAgICAgb3JkZXIuZW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZC5zdWJzY3JpYmUoZnVuY3Rpb24gKHBjRXZlbnQpIHtcclxuICA+ICAgICAgICAgIGlmICggcGNFdmVudC5wcm9wZXJ0eU5hbWUgPT09IFwiT3JkZXJEYXRlXCIpIHtcclxuICA+ICAgICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcclxuICA+ICAgICAgICAgIH1cclxuICA+ICAgICAgfSk7XHJcbiAgQHBhcmFtIGNhbGxiYWNrLSBGdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgJ2RhdGEnIGlzIHB1Ymxpc2hlZCBmb3IgdGhpcyBldmVudC5cclxuICBAcGFyYW0gY2FsbGJhY2suZGF0YSAtIHtPYmplY3R9IFdoYXRldmVyICdkYXRhJyB3YXMgcHVibGlzaGVkLiAgVGhpcyBzaG91bGQgYmUgZG9jdW1lbnRlZCBvbiB0aGUgc3BlY2lmaWMgZXZlbnQuXHJcbiAgQHJldHVybiBUaGlzIGlzIGEga2V5IGZvciAndW5zdWJzY3JpcHRpb24nLiAgSXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgJ3Vuc3Vic2NyaWJlJyBtZXRob2QuXHJcbiAgKiovXHJcbiAgc3Vic2NyaWJlKGNhbGxiYWNrOiAoZGF0YTogVCkgPT4gYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuX3N1YnNjcmliZXJzKSB7XHJcbiAgICAgIHRoaXMuX3N1YnNjcmliZXJzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHVuc3ViS2V5ID0gQnJlZXplRXZlbnQuX19uZXh0VW5zdWJLZXk7XHJcbiAgICB0aGlzLl9zdWJzY3JpYmVycy5wdXNoKHsgdW5zdWJLZXk6IHVuc3ViS2V5LCBjYWxsYmFjazogY2FsbGJhY2sgfSk7XHJcbiAgICArK0JyZWV6ZUV2ZW50Ll9fbmV4dFVuc3ViS2V5O1xyXG4gICAgcmV0dXJuIHVuc3ViS2V5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgVW5zdWJzY3JpYmUgZnJvbSB0aGlzIGV2ZW50LlxyXG4gID4gICAgICAvLyBBc3N1bWUgb3JkZXIgaXMgYSBwcmVleGlzdGluZyAnb3JkZXInIGVudGl0eVxyXG4gID4gICAgICBsZXQgdG9rZW4gPSBvcmRlci5lbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkLnN1YnNjcmliZShmdW5jdGlvbiAocGNFdmVudCkge1xyXG4gID4gICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZ1xyXG4gID4gICAgICB9KTtcclxuICA+ICAgICAgLy8gc29tZXRpbWUgbGF0ZXJcclxuICA+ICAgICAgb3JkZXIuZW50aXR5QXNwZWN0LnByb3BlcnR5Q2hhbmdlZC51bnN1YnNjcmliZSh0b2tlbik7XHJcbiAgQHBhcmFtIHVuc3ViS2V5IC0gVGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhlICdzdWJzY3JpYmUnIG1ldGhvZCBtYXkgYmUgdXNlZCB0byB1bnN1YnNjcmliZSBoZXJlLlxyXG4gIEByZXR1cm4gV2hldGhlciB1bnN1YnNjcmlwdGlvbiBvY2N1cmVkLiBUaGlzIHdpbGwgcmV0dXJuIGZhbHNlIGlmIGFscmVhZHkgdW5zdWJzY3JpYmVkIG9yIGlmIHRoZSBrZXkgc2ltcGx5XHJcbiAgY2Fubm90IGJlIGZvdW5kLlxyXG4gICoqL1xyXG4gIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKHVuc3ViS2V5OiBudW1iZXIpIHtcclxuICAgIGlmICghdGhpcy5fc3Vic2NyaWJlcnMpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBzdWJzID0gdGhpcy5fc3Vic2NyaWJlcnM7XHJcbiAgICBsZXQgaXggPSBjb3JlLmFycmF5SW5kZXhPZihzdWJzLCBmdW5jdGlvbiAocykge1xyXG4gICAgICByZXR1cm4gcy51bnN1YktleSA9PT0gdW5zdWJLZXk7XHJcbiAgICB9KTtcclxuICAgIGlmIChpeCAhPT0gLTEpIHtcclxuICAgICAgc3Vicy5zcGxpY2UoaXgsIDEpO1xyXG4gICAgICBpZiAoc3Vicy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVycyA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqIHJlbW92ZSBhbGwgc3Vic2NyaWJlcnMgKi9cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuX3N1YnNjcmliZXJzID0gPGFueT5udWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqIGV2ZW50IGJ1YmJsaW5nIC0gZG9jdW1lbnQgbGF0ZXIuICovXHJcblxyXG4gIC8vIG51bGwgb3IgdW5kZWZpbmVkICdnZXRQYXJlbnRGbicgbWVhbnMgRXZlbnQgZG9lcyBub3QgbmVlZCB0byBidWJibGUgaS5lLiB0aGF0IGl0IGlzIGFsd2F5cyBlbmFibGVkIC0gLlxyXG4gIHN0YXRpYyBidWJibGVFdmVudCh0YXJnZXQ6IGFueSwgZ2V0UGFyZW50Rm4/OiAoKCkgPT4gYW55KSkge1xyXG4gICAgdGFyZ2V0Ll9nZXRFdmVudFBhcmVudCA9IGdldFBhcmVudEZuIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBuYW1lZCBldmVudCBmb3IgYW4gb2JqZWN0IGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuLlxyXG4gID4gICAgICBCcmVlemVFdmVudC5lbmFibGUo4oCccHJvcGVydHlDaGFuZ2Vk4oCdLCBteUVudGl0eU1hbmFnZXIsIGZhbHNlKVxyXG5cclxuICB3aWxsIGRpc2FibGUgYWxsIEVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQgZXZlbnRzIHdpdGhpbiBhIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIEJyZWV6ZUV2ZW50LmVuYWJsZSjigJxwcm9wZXJ0eUNoYW5nZWTigJ0sIG15RW50aXR5TWFuYWdlciwgdHJ1ZSlcclxuXHJcbiAgd2lsbCBlbmFibGUgYWxsIEVudGl0eUFzcGVjdC5wcm9wZXJ0eUNoYW5nZWQgZXZlbnRzIHdpdGhpbiBhIEVudGl0eU1hbmFnZXIuXHJcbiAgPiAgICAgIEJyZWV6ZUV2ZW50LmVuYWJsZSjigJxwcm9wZXJ0eUNoYW5nZWTigJ0sIG15RW50aXR5LmVudGl0eUFzcGVjdCwgZmFsc2UpXHJcblxyXG4gIHdpbGwgZGlzYWJsZSBFbnRpdHlBc3BlY3QucHJvcGVydHlDaGFuZ2VkIGV2ZW50cyBmb3IgYSBzcGVjaWZpYyBlbnRpdHkuXHJcbiAgPiAgICAgIEJyZWV6ZUV2ZW50LmVuYWJsZSjigJxwcm9wZXJ0eUNoYW5nZWTigJ0sIG15RW50aXR5LmVudGl0eUFzcGVjdCwgbnVsbClcclxuXHJcbiAgd2lsbCByZW1vdmVzIGFueSBlbmFibGluZyAvIGRpc2FibGluZyBhdCB0aGUgZW50aXR5IGFzcGVjdCBsZXZlbCBzbyBub3cgYW55ICdFdmVudC5lbmFibGUnIGNhbGxzIGF0IHRoZSBFbnRpdHlNYW5hZ2VyIGxldmVsLFxyXG4gIG1hZGUgZWl0aGVyIHByZXZpb3VzbHkgb3IgaW4gdGhlIGZ1dHVyZSwgd2lsbCBjb250cm9sIG5vdGlmaWNhdGlvbi5cclxuICA+ICAgICAgQnJlZXplRXZlbnQuZW5hYmxlKOKAnHZhbGlkYXRpb25FcnJvcnNDaGFuZ2Vk4oCdLCBteUVudGl0eU1hbmFnZXIsIGZ1bmN0aW9uKGVtKSB7XHJcbiAgPiAgICAgICAgICByZXR1cm4gZW0uY3VzdG9tVGFnID09PSDigJxibHVl4oCdO1xyXG4gID4gICAgICB9KVxyXG5cclxuXHJcbiAgd2lsbCBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUgbXlFbnRpdHlNYW5hZ2VyIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEg4oCYY3VzdG9tVGFn4oCZIHByb3BlcnR5IG9uIG15RW50aXR5TWFuYWdlci5cclxuICBOb3RlIHRoYXQgdGhpcyBpcyBkeW5hbWljLCBjaGFuZ2luZyB0aGUgY3VzdG9tVGFnIHZhbHVlIHdpbGwgY2F1c2UgZXZlbnRzIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW1tZWRpYXRlbHkuXHJcbiAgQHBhcmFtIGV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cclxuICBAcGFyYW0gdGFyZ2V0IC0gVGhlIG9iamVjdCBhdCB3aGljaCBlbmFibGluZyBvciBkaXNhYmxpbmcgd2lsbCBvY2N1ci4gIEFsbCBldmVudCBub3RpZmljYXRpb25zIHRoYXQgb2NjdXIgdG8gdGhpcyBvYmplY3Qgb3JcclxuICBjaGlsZHJlbiBvZiB0aGlzIG9iamVjdCB3aWxsIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuXHJcbiAgQHBhcmFtIGlzRW5hYmxlZCAtIEEgYm9vbGVhbiwgYSBudWxsIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlciBhIGJvb2xlYW4gb3IgYSBudWxsLlxyXG4gICoqL1xyXG4gc3RhdGljIGVuYWJsZShldmVudE5hbWU6IHN0cmluZywgb2JqOiBPYmplY3QsIGlzRW5hYmxlZDogYm9vbGVhbiB8ICgoeDogYW55KSA9PiBib29sZWFuKSkge1xyXG4gICAgYXNzZXJ0UGFyYW0oZXZlbnROYW1lLCBcImV2ZW50TmFtZVwiKS5pc05vbkVtcHR5U3RyaW5nKCkuY2hlY2soKTtcclxuICAgIGFzc2VydFBhcmFtKG9iaiwgXCJvYmpcIikuaXNPYmplY3QoKS5jaGVjaygpO1xyXG4gICAgYXNzZXJ0UGFyYW0oaXNFbmFibGVkLCBcImlzRW5hYmxlZFwiKS5pc0Jvb2xlYW4oKS5pc09wdGlvbmFsKCkub3IoKS5pc0Z1bmN0aW9uKCkuY2hlY2soKTtcclxuICAgIGxldCBvYiA9IDxhbnk+b2JqO1xyXG4gICAgaWYgKCFvYi5fJGV2ZW50TWFwKSB7XHJcbiAgICAgIG9iLl8kZXZlbnRNYXAgPSB7fTtcclxuICAgIH1cclxuICAgIG9iLl8kZXZlbnRNYXBbZXZlbnROYW1lXSA9IGlzRW5hYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgd2hldGhlciBmb3IgYSBzcGVjaWZpYyBldmVudCBhbmQgYSBzcGVjaWZpYyBvYmplY3QgYW5kIGl0cyBjaGlsZHJlbiwgbm90aWZpY2F0aW9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgb3Igbm90IHNldC5cclxuICA+ICAgICAgQnJlZXplRXZlbnQuaXNFbmFibGVkKOKAnHByb3BlcnR5Q2hhbmdlZOKAnSwgbXlFbnRpdHlNYW5hZ2VyKVxyXG4gID4gXHJcbiAgQHBhcmFtIGV2ZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudC5cclxuICBAcGFyYW0gdGFyZ2V0IC0gVGhlIG9iamVjdCBmb3Igd2hpY2ggd2Ugd2FudCB0byBrbm93IGlmIG5vdGlmaWNhdGlvbnMgYXJlIGVuYWJsZWQuXHJcbiAgQHJldHVybiBBIG51bGwgaXMgcmV0dXJuZWQgaWYgdGhpcyB2YWx1ZSBoYXMgbm90IGJlZW4gc2V0LlxyXG4gICoqL1xyXG4gIHN0YXRpYyBpc0VuYWJsZWQoZXZlbnROYW1lOiBzdHJpbmcsIG9iajogT2JqZWN0KSB7XHJcbiAgICBhc3NlcnRQYXJhbShldmVudE5hbWUsIFwiZXZlbnROYW1lXCIpLmlzTm9uRW1wdHlTdHJpbmcoKS5jaGVjaygpO1xyXG4gICAgYXNzZXJ0UGFyYW0ob2JqLCBcIm9ialwiKS5pc09iamVjdCgpLmNoZWNrKCk7XHJcbiAgICAvLyBudWxsIGlzIG9rIC0gaXQganVzdCBtZWFucyB0aGF0IHRoZSBvYmplY3QgaXMgYXQgdGhlIHRvcCBsZXZlbC5cclxuICAgIGlmICgoPGFueT5vYmopLl9nZXRFdmVudFBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgb2JqZWN0IGRvZXMgbm90IHN1cHBvcnQgZXZlbnQgZW5hYmxpbmcvZGlzYWJsaW5nXCIpO1xyXG4gICAgfVxyXG4gICAgLy8gcmV0dXJuIGN0b3IuX2lzRW5hYmxlZChnZXRGdWxsRXZlbnROYW1lKGV2ZW50TmFtZSksIG9iaik7XHJcbiAgICByZXR1cm4gQnJlZXplRXZlbnQuX2lzRW5hYmxlZChldmVudE5hbWUsIDMpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIF9pc0VuYWJsZWQgPSBmdW5jdGlvbiAoZXZlbnROYW1lOiBzdHJpbmcsIG9iajogT2JqZWN0KSB7XHJcbiAgICBsZXQgaXNFbmFibGVkOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IG9iID0gPGFueT5vYmo7XHJcbiAgICBsZXQgZXZlbnRNYXAgPSBvYi5fJGV2ZW50TWFwO1xyXG4gICAgaWYgKGV2ZW50TWFwKSB7XHJcbiAgICAgIGlzRW5hYmxlZCA9IGV2ZW50TWFwW2V2ZW50TmFtZV07XHJcbiAgICB9XHJcbiAgICBpZiAoaXNFbmFibGVkICE9IG51bGwpIHtcclxuICAgICAgaWYgKHR5cGVvZiBpc0VuYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gISFpc0VuYWJsZWQob2JqKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISFpc0VuYWJsZWQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwYXJlbnQgPSBvYi5fZ2V0RXZlbnRQYXJlbnQgJiYgb2IuX2dldEV2ZW50UGFyZW50KCk7XHJcbiAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLl9pc0VuYWJsZWQoZXZlbnROYW1lLCBwYXJlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGRlZmF1bHQgaWYgbm90IGV4cGxpY2l0bHkgZGlzYWJsZWQuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuXHJcbn1cclxuXHJcbi8vIGxlZ2FjeSBzdXBwb3J0IC0gZGVsaWJlcmF0ZWx5IG5vdCB0eXBlZFxyXG4oY29yZSBhcyBhbnkpLkV2ZW50ID0gQnJlZXplRXZlbnQ7Il19