breeze-client 2.2.0 → 2.2.1-cjs

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