breeze-client 2.1.6 → 2.1.7-mjs

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/LICENSE +1 -1
  2. package/adapter-ajax-angularjs/{breeze-client-adapter-ajax-angularjs.d.ts → index.d.ts} +1 -0
  3. package/adapter-ajax-fetch/{breeze-client-adapter-ajax-fetch.d.ts → index.d.ts} +1 -0
  4. package/adapter-ajax-httpclient/{breeze-client-adapter-ajax-httpclient.d.ts → index.d.ts} +1 -0
  5. package/adapter-ajax-jquery/{breeze-client-adapter-ajax-jquery.d.ts → index.d.ts} +1 -0
  6. package/adapter-ajax-post/{breeze-client-adapter-ajax-post.d.ts → index.d.ts} +1 -0
  7. package/adapter-data-service-odata/{breeze-client-adapter-data-service-odata.d.ts → index.d.ts} +1 -0
  8. package/adapter-data-service-webapi/{breeze-client-adapter-data-service-webapi.d.ts → index.d.ts} +1 -0
  9. package/adapter-model-library-backing-store/{breeze-client-adapter-model-library-backing-store.d.ts → index.d.ts} +1 -0
  10. package/adapter-model-library-ko/{breeze-client-adapter-model-library-ko.d.ts → index.d.ts} +1 -0
  11. package/adapter-uri-builder-json/{breeze-client-adapter-uri-builder-json.d.ts → index.d.ts} +1 -0
  12. package/adapter-uri-builder-odata/{breeze-client-adapter-uri-builder-odata.d.ts → index.d.ts} +1 -0
  13. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +135 -0
  14. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +49 -0
  15. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
  16. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +135 -0
  17. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +49 -0
  18. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
  19. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +139 -0
  20. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +49 -0
  21. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
  22. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +107 -0
  23. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
  24. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
  25. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
  26. package/esm2022/adapter-data-service-odata/adapter-core.mjs +49 -0
  27. package/{esm5/adapter-data-service-odata/adapter-data-service-odata.js → esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs} +138 -147
  28. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
  29. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +100 -0
  30. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
  31. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +269 -0
  32. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
  33. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +241 -0
  34. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
  35. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +49 -0
  36. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +37 -0
  37. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
  38. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +49 -0
  39. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +191 -0
  40. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
  41. package/esm2022/breeze-client.mjs +5 -0
  42. package/esm2022/index.mjs +2 -0
  43. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
  44. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
  45. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
  46. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +421 -0
  47. package/esm2022/src/abstract-data-service-adapter.mjs +325 -0
  48. package/esm2022/src/array.mjs +4 -0
  49. package/esm2022/src/assert-param.mjs +330 -0
  50. package/esm2022/src/breeze.mjs +85 -0
  51. package/esm2022/src/complex-array.mjs +117 -0
  52. package/esm2022/src/config.mjs +232 -0
  53. package/esm2022/src/core.mjs +712 -0
  54. package/esm2022/src/csdl-metadata-parser.mjs +385 -0
  55. package/esm2022/src/data-service.mjs +239 -0
  56. package/esm2022/src/data-type.mjs +507 -0
  57. package/esm2022/src/default-property-interceptor.mjs +460 -0
  58. package/{esm2015/src/entity-action.js → esm2022/src/entity-action.mjs} +25 -25
  59. package/esm2022/src/entity-aspect.mjs +897 -0
  60. package/esm2022/src/entity-group.mjs +192 -0
  61. package/esm2022/src/entity-key.mjs +127 -0
  62. package/esm2022/src/entity-manager.mjs +2183 -0
  63. package/esm2022/src/entity-metadata.mjs +2242 -0
  64. package/esm2022/src/entity-query.mjs +1024 -0
  65. package/esm2022/src/entity-state.mjs +107 -0
  66. package/esm2022/src/enum.mjs +143 -0
  67. package/esm2022/src/event.mjs +264 -0
  68. package/esm2022/src/interface-registry.mjs +39 -0
  69. package/esm2022/src/key-generator.mjs +110 -0
  70. package/esm2022/src/local-query-comparison-options.mjs +75 -0
  71. package/esm2022/src/mapping-context.mjs +422 -0
  72. package/{esm5/src/naming-convention.js → esm2022/src/naming-convention.mjs} +35 -29
  73. package/esm2022/src/observable-array.mjs +183 -0
  74. package/esm2022/src/predicate.mjs +1259 -0
  75. package/esm2022/src/primitive-array.mjs +85 -0
  76. package/esm2022/src/query-options.mjs +160 -0
  77. package/esm2022/src/relation-array.mjs +173 -0
  78. package/esm2022/src/save-options.mjs +51 -0
  79. package/esm2022/src/unattached-children-map.mjs +56 -0
  80. package/{esm5/src/validate.js → esm2022/src/validate.mjs} +116 -110
  81. package/esm2022/src/validation-options.mjs +78 -0
  82. package/{fesm2015/breeze-client-adapter-ajax-angularjs.js → fesm2022/breeze-client-adapter-ajax-angularjs.mjs} +6 -1
  83. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  84. package/{fesm2015/breeze-client-adapter-ajax-fetch.js → fesm2022/breeze-client-adapter-ajax-fetch.mjs} +9 -4
  85. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  86. package/{fesm2015/breeze-client-adapter-ajax-httpclient.js → fesm2022/breeze-client-adapter-ajax-httpclient.mjs} +6 -4
  87. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  88. package/{fesm2015/breeze-client-adapter-ajax-jquery.js → fesm2022/breeze-client-adapter-ajax-jquery.mjs} +6 -2
  89. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  90. package/{fesm2015/breeze-client-adapter-ajax-post.js → fesm2022/breeze-client-adapter-ajax-post.mjs} +1 -1
  91. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +1 -0
  92. package/{fesm2015/breeze-client-adapter-data-service-odata.js → fesm2022/breeze-client-adapter-data-service-odata.mjs} +68 -69
  93. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  94. package/{fesm2015/breeze-client-adapter-data-service-webapi.js → fesm2022/breeze-client-adapter-data-service-webapi.mjs} +30 -30
  95. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  96. package/{fesm2015/breeze-client-adapter-model-library-backing-store.js → fesm2022/breeze-client-adapter-model-library-backing-store.mjs} +14 -13
  97. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  98. package/{fesm2015/breeze-client-adapter-model-library-ko.js → fesm2022/breeze-client-adapter-model-library-ko.mjs} +14 -13
  99. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  100. package/{fesm2015/breeze-client-adapter-uri-builder-json.js → fesm2022/breeze-client-adapter-uri-builder-json.mjs} +9 -8
  101. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  102. package/{fesm2015/breeze-client-adapter-uri-builder-odata.js → fesm2022/breeze-client-adapter-uri-builder-odata.mjs} +86 -86
  103. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  104. package/{fesm2015/breeze-client-mixin-get-entity-graph.js → fesm2022/breeze-client-mixin-get-entity-graph.mjs} +1 -1
  105. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  106. package/{fesm2015/breeze-client-mixin-save-queuing.js → fesm2022/breeze-client-mixin-save-queuing.mjs} +23 -2
  107. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +1 -0
  108. package/{fesm2015/breeze-client.js → fesm2022/breeze-client.mjs} +2126 -1577
  109. package/fesm2022/breeze-client.mjs.map +1 -0
  110. package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
  111. package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
  112. package/package.json +93 -11
  113. package/src/abstract-data-service-adapter.d.ts +20 -0
  114. package/src/config.d.ts +1 -1
  115. package/src/core.d.ts +1 -1
  116. package/src/entity-aspect.d.ts +1 -1
  117. package/src/entity-metadata.d.ts +8 -6
  118. package/src/entity-query.d.ts +18 -4
  119. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  120. package/adapter-ajax-angularjs/package.json +0 -13
  121. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  122. package/adapter-ajax-fetch/package.json +0 -13
  123. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  124. package/adapter-ajax-httpclient/package.json +0 -13
  125. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  126. package/adapter-ajax-jquery/package.json +0 -13
  127. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  128. package/adapter-ajax-post/package.json +0 -13
  129. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  130. package/adapter-data-service-odata/package.json +0 -13
  131. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  132. package/adapter-data-service-webapi/package.json +0 -13
  133. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  134. package/adapter-model-library-backing-store/package.json +0 -13
  135. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  136. package/adapter-model-library-ko/package.json +0 -13
  137. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  138. package/adapter-uri-builder-json/package.json +0 -13
  139. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  140. package/adapter-uri-builder-odata/package.json +0 -13
  141. package/breeze-client.d.ts +0 -8
  142. package/breeze-client.metadata.json +0 -1
  143. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  144. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  145. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  146. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  147. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  148. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  149. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  150. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  151. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  152. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  153. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  154. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  155. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  156. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  157. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  158. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  159. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  160. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  161. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  162. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  163. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -747
  164. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  165. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  166. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  167. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -333
  168. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  169. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  170. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  171. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  172. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  173. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  174. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  175. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  176. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  177. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  178. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  179. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  180. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  181. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  182. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  183. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  184. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  185. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  186. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  187. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  188. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  189. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  190. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  191. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
  192. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  193. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  194. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  195. package/bundles/breeze-client.umd.js +0 -14181
  196. package/bundles/breeze-client.umd.js.map +0 -1
  197. package/bundles/breeze-client.umd.min.js +0 -16
  198. package/bundles/breeze-client.umd.min.js.map +0 -1
  199. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  200. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  201. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  202. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  203. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  204. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  205. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  206. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  207. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  208. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  209. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  210. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  211. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  212. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  213. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -463
  214. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  215. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -100
  216. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  217. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  218. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  219. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  220. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  221. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  222. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  223. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  224. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  225. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  226. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  227. package/esm2015/breeze-client.js +0 -9
  228. package/esm2015/index.js +0 -2
  229. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  230. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  231. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  232. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  233. package/esm2015/src/abstract-data-service-adapter.js +0 -296
  234. package/esm2015/src/array.js +0 -4
  235. package/esm2015/src/assert-param.js +0 -312
  236. package/esm2015/src/breeze.js +0 -85
  237. package/esm2015/src/complex-array.js +0 -119
  238. package/esm2015/src/config.js +0 -223
  239. package/esm2015/src/core.js +0 -714
  240. package/esm2015/src/csdl-metadata-parser.js +0 -385
  241. package/esm2015/src/data-service.js +0 -203
  242. package/esm2015/src/data-type.js +0 -503
  243. package/esm2015/src/default-property-interceptor.js +0 -460
  244. package/esm2015/src/entity-aspect.js +0 -804
  245. package/esm2015/src/entity-group.js +0 -187
  246. package/esm2015/src/entity-key.js +0 -116
  247. package/esm2015/src/entity-manager.js +0 -2094
  248. package/esm2015/src/entity-metadata.js +0 -2109
  249. package/esm2015/src/entity-query.js +0 -996
  250. package/esm2015/src/entity-state.js +0 -107
  251. package/esm2015/src/enum.js +0 -141
  252. package/esm2015/src/event.js +0 -256
  253. package/esm2015/src/interface-registry.js +0 -41
  254. package/esm2015/src/key-generator.js +0 -108
  255. package/esm2015/src/local-query-comparison-options.js +0 -65
  256. package/esm2015/src/mapping-context.js +0 -411
  257. package/esm2015/src/naming-convention.js +0 -88
  258. package/esm2015/src/observable-array.js +0 -185
  259. package/esm2015/src/predicate.js +0 -1242
  260. package/esm2015/src/primitive-array.js +0 -87
  261. package/esm2015/src/query-options.js +0 -152
  262. package/esm2015/src/relation-array.js +0 -175
  263. package/esm2015/src/save-options.js +0 -41
  264. package/esm2015/src/unattached-children-map.js +0 -58
  265. package/esm2015/src/validate.js +0 -991
  266. package/esm2015/src/validation-options.js +0 -64
  267. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
  268. package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
  269. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  270. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
  271. package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
  272. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  273. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
  274. package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
  275. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  276. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
  277. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  278. package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
  279. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  280. package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
  281. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  282. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -105
  283. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  284. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
  285. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  286. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
  287. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  288. package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
  289. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
  290. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  291. package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
  292. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
  293. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  294. package/esm5/breeze-client.js +0 -9
  295. package/esm5/index.js +0 -2
  296. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  297. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  298. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  299. package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -412
  300. package/esm5/src/abstract-data-service-adapter.js +0 -302
  301. package/esm5/src/array.js +0 -4
  302. package/esm5/src/assert-param.js +0 -317
  303. package/esm5/src/breeze.js +0 -85
  304. package/esm5/src/complex-array.js +0 -119
  305. package/esm5/src/config.js +0 -228
  306. package/esm5/src/core.js +0 -722
  307. package/esm5/src/csdl-metadata-parser.js +0 -385
  308. package/esm5/src/data-service.js +0 -207
  309. package/esm5/src/data-type.js +0 -510
  310. package/esm5/src/default-property-interceptor.js +0 -460
  311. package/esm5/src/entity-action.js +0 -52
  312. package/esm5/src/entity-aspect.js +0 -810
  313. package/esm5/src/entity-group.js +0 -189
  314. package/esm5/src/entity-key.js +0 -118
  315. package/esm5/src/entity-manager.js +0 -2112
  316. package/esm5/src/entity-metadata.js +0 -2144
  317. package/esm5/src/entity-query.js +0 -1023
  318. package/esm5/src/entity-state.js +0 -114
  319. package/esm5/src/enum.js +0 -144
  320. package/esm5/src/event.js +0 -259
  321. package/esm5/src/interface-registry.js +0 -43
  322. package/esm5/src/key-generator.js +0 -111
  323. package/esm5/src/local-query-comparison-options.js +0 -67
  324. package/esm5/src/mapping-context.js +0 -413
  325. package/esm5/src/observable-array.js +0 -201
  326. package/esm5/src/predicate.js +0 -1307
  327. package/esm5/src/primitive-array.js +0 -87
  328. package/esm5/src/query-options.js +0 -167
  329. package/esm5/src/relation-array.js +0 -175
  330. package/esm5/src/save-options.js +0 -43
  331. package/esm5/src/unattached-children-map.js +0 -60
  332. package/esm5/src/validation-options.js +0 -66
  333. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  334. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  335. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  336. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  337. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  338. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  339. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  340. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  341. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  342. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  343. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  344. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  345. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  346. package/fesm2015/breeze-client.js.map +0 -1
  347. package/fesm5/breeze-client-adapter-ajax-angularjs.js +0 -186
  348. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  349. package/fesm5/breeze-client-adapter-ajax-fetch.js +0 -186
  350. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  351. package/fesm5/breeze-client-adapter-ajax-httpclient.js +0 -193
  352. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  353. package/fesm5/breeze-client-adapter-ajax-jquery.js +0 -111
  354. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  355. package/fesm5/breeze-client-adapter-ajax-post.js +0 -86
  356. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  357. package/fesm5/breeze-client-adapter-data-service-odata.js +0 -523
  358. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  359. package/fesm5/breeze-client-adapter-data-service-webapi.js +0 -111
  360. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  361. package/fesm5/breeze-client-adapter-model-library-backing-store.js +0 -276
  362. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  363. package/fesm5/breeze-client-adapter-model-library-ko.js +0 -248
  364. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  365. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  366. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  367. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  368. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  369. package/fesm5/breeze-client-mixin-get-entity-graph.js +0 -254
  370. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  371. package/fesm5/breeze-client-mixin-save-queuing.js +0 -356
  372. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  373. package/fesm5/breeze-client.js +0 -13903
  374. package/fesm5/breeze-client.js.map +0 -1
  375. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  376. package/mixin-get-entity-graph/package.json +0 -13
  377. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  378. package/mixin-save-queuing/package.json +0 -13
@@ -0,0 +1,191 @@
1
+ import * as breeze from 'breeze-client';
2
+ import { appendQueryStringParameter } from './adapter-core';
3
+ export class UriBuilderODataAdapter {
4
+ name;
5
+ constructor() {
6
+ this.name = "odata";
7
+ }
8
+ static register(config) {
9
+ config = config || breeze.config;
10
+ config.registerAdapter("uriBuilder", UriBuilderODataAdapter);
11
+ return config.initializeAdapterInstance("uriBuilder", "odata", true);
12
+ }
13
+ initialize() { }
14
+ buildUri(entityQuery, metadataStore) {
15
+ // force entityType validation;
16
+ let entityType = entityQuery._getFromEntityType(metadataStore, false);
17
+ if (!entityType) {
18
+ // anonymous type but still has naming convention info avail
19
+ entityType = new breeze.EntityType(metadataStore);
20
+ }
21
+ let queryOptions = {};
22
+ queryOptions["$filter"] = toWhereODataFragment(entityQuery.wherePredicate);
23
+ queryOptions["$orderby"] = toOrderByODataFragment(entityQuery.orderByClause);
24
+ if (entityQuery.skipCount) {
25
+ queryOptions["$skip"] = entityQuery.skipCount;
26
+ }
27
+ if (entityQuery.takeCount != null) {
28
+ queryOptions["$top"] = entityQuery.takeCount;
29
+ }
30
+ queryOptions["$expand"] = toExpandODataFragment(entityQuery.expandClause);
31
+ queryOptions["$select"] = toSelectODataFragment(entityQuery.selectClause);
32
+ if (entityQuery.inlineCountEnabled) {
33
+ queryOptions["$inlinecount"] = "allpages";
34
+ }
35
+ const qoText = toQueryOptionsString(queryOptions);
36
+ return appendQueryStringParameter(entityQuery.resourceName, qoText);
37
+ // private methods to this func.
38
+ function toWhereODataFragment(wherePredicate) {
39
+ if (!wherePredicate)
40
+ return undefined;
41
+ // validation occurs inside of the toODataFragment call here.
42
+ let frag = wherePredicate.visit({ entityType: entityType }, toODataFragmentVisitor);
43
+ return (frag && frag.length > 0) ? frag : undefined;
44
+ }
45
+ function toOrderByODataFragment(orderByClause) {
46
+ if (!orderByClause)
47
+ return undefined;
48
+ orderByClause.validate(entityType);
49
+ let strings = orderByClause.items.map(function (item) {
50
+ return entityType.clientPropertyPathToServer(item.propertyPath, "/") + (item.isDesc ? " desc" : "");
51
+ });
52
+ // should return something like CompanyName,Address/City desc
53
+ return strings.join(',');
54
+ }
55
+ function toSelectODataFragment(selectClause) {
56
+ if (!selectClause)
57
+ return undefined;
58
+ selectClause.validate(entityType);
59
+ let frag = selectClause.propertyPaths.map(function (pp) {
60
+ return entityType.clientPropertyPathToServer(pp, "/");
61
+ }).join(",");
62
+ return frag;
63
+ }
64
+ function toExpandODataFragment(expandClause) {
65
+ if (!expandClause)
66
+ return undefined;
67
+ // no validate on expand clauses currently.
68
+ // expandClause.validate(entityType);
69
+ let frag = expandClause.propertyPaths.map(function (pp) {
70
+ return entityType.clientPropertyPathToServer(pp, "/");
71
+ }).join(",");
72
+ return frag;
73
+ }
74
+ function toQueryOptionsString(queryOptions) {
75
+ let qoStrings = [];
76
+ for (let qoName in queryOptions) {
77
+ let qoValue = queryOptions[qoName];
78
+ if (qoValue !== undefined) {
79
+ if (qoValue instanceof Array) {
80
+ qoValue.forEach(function (qov) {
81
+ qoStrings.push(qoName + "=" + encodeURIComponent(qov));
82
+ });
83
+ }
84
+ else {
85
+ qoStrings.push(qoName + "=" + encodeURIComponent(qoValue));
86
+ }
87
+ }
88
+ }
89
+ if (qoStrings.length > 0) {
90
+ return qoStrings.join("&");
91
+ }
92
+ else {
93
+ return "";
94
+ }
95
+ }
96
+ }
97
+ }
98
+ breeze.Predicate.prototype.toODataFragment = function (context) {
99
+ return this.visit(context, toODataFragmentVisitor);
100
+ };
101
+ let toODataFragmentVisitor = {
102
+ passthruPredicate: function () {
103
+ return this.value;
104
+ },
105
+ unaryPredicate: function (context) {
106
+ let predVal = this.pred.visit(context);
107
+ return odataOpFrom(this) + " " + "(" + predVal + ")";
108
+ },
109
+ binaryPredicate: function (context) {
110
+ let expr1Val = this.expr1.visit(context);
111
+ let expr2Val = this.expr2.visit(context);
112
+ let prefix = context.prefix;
113
+ if (prefix) {
114
+ expr1Val = prefix + "/" + expr1Val;
115
+ }
116
+ let odataOp = odataOpFrom(this);
117
+ if (this.op.key === 'in') {
118
+ let result = expr2Val.map(function (v) {
119
+ return "(" + expr1Val + " eq " + v + ")";
120
+ }).join(" or ");
121
+ return result;
122
+ }
123
+ else if (this.op.isFunction) {
124
+ if (odataOp === "substringof") {
125
+ return odataOp + "(" + expr2Val + "," + expr1Val + ") eq true";
126
+ }
127
+ else {
128
+ return odataOp + "(" + expr1Val + "," + expr2Val + ") eq true";
129
+ }
130
+ }
131
+ else {
132
+ return expr1Val + " " + odataOp + " " + expr2Val;
133
+ }
134
+ },
135
+ andOrPredicate: function (context) {
136
+ let result = this.preds.map(function (pred) {
137
+ let predVal = pred.visit(context);
138
+ return "(" + predVal + ")";
139
+ }).join(" " + odataOpFrom(this) + " ");
140
+ return result;
141
+ },
142
+ anyAllPredicate: function (context) {
143
+ let exprVal = this.expr.visit(context);
144
+ if (!this.pred.op) { // added 21-Oct-2016 to fix breeze.js issue #172
145
+ return exprVal + "/" + odataOpFrom(this) + "()";
146
+ }
147
+ let prefix = context.prefix;
148
+ if (prefix) {
149
+ exprVal = prefix + "/" + exprVal;
150
+ prefix = "x" + (parseInt(prefix.substring(1)) + 1);
151
+ }
152
+ else {
153
+ prefix = "x1";
154
+ }
155
+ // need to create a new context because of 'prefix'
156
+ let newContext = breeze.core.extend({}, context);
157
+ newContext.entityType = this.expr.dataType;
158
+ newContext.prefix = prefix;
159
+ let newPredVal = this.pred.visit(newContext);
160
+ return exprVal + "/" + odataOpFrom(this) + "(" + prefix + ": " + newPredVal + ")";
161
+ },
162
+ litExpr: function () {
163
+ if (Array.isArray(this.value)) {
164
+ return this.value.map(function (v) { return this.dataType.fmtOData(v); }, this);
165
+ }
166
+ else {
167
+ return this.dataType.fmtOData(this.value);
168
+ }
169
+ },
170
+ propExpr: function (context) {
171
+ let entityType = context.entityType;
172
+ // '/' is the OData path delimiter
173
+ return entityType ? entityType.clientPropertyPathToServer(this.propertyPath, "/") : this.propertyPath;
174
+ },
175
+ fnExpr: function (context) {
176
+ let exprVals = this.exprs.map(function (expr) {
177
+ return expr.visit(context);
178
+ });
179
+ return this.fnName + "(" + exprVals.join(",") + ")";
180
+ }
181
+ };
182
+ let _operatorMap = {
183
+ 'contains': 'substringof'
184
+ };
185
+ function odataOpFrom(node) {
186
+ let op = node.op.key;
187
+ let odataOp = _operatorMap[op];
188
+ return odataOp || op;
189
+ }
190
+ breeze.config.registerAdapter("uriBuilder", UriBuilderODataAdapter);
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci11cmktYnVpbGRlci1vZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZGFwdGVyLXVyaS1idWlsZGVyLW9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELE1BQU0sT0FBTyxzQkFBc0I7SUFFakMsSUFBSSxDQUFTO0lBRWI7UUFDRSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUE0QjtRQUMxQyxNQUFNLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDakMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUM3RCxPQUFPLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBMkIsQ0FBQztJQUNqRyxDQUFDO0lBRUQsVUFBVSxLQUFLLENBQUM7SUFFaEIsUUFBUSxDQUFDLFdBQStCLEVBQUUsYUFBbUM7UUFDM0UsK0JBQStCO1FBQy9CLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLDREQUE0RDtZQUM1RCxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0UsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLHNCQUFzQixDQUFD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QUcsQ0FBQyxVQUFVLElBQUk7WUFDMUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN0RCxDQUFDO0NBQ0YsQ0FBQztBQUVGLElBQUksWUFBWSxHQUFHO0lBQ2pCLFVBQVUsRUFBRSxhQUFhO0NBQzFCLENBQUM7QUFFRixTQUFTLFdBQVcsQ0FBQyxJQUFTO0lBQzVCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ3JCLElBQUksT0FBTyxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixPQUFPLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYnJlZXplIGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBhcHBlbmRRdWVyeVN0cmluZ1BhcmFtZXRlciB9IGZyb20gJy4vYWRhcHRlci1jb3JlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBVcmlCdWlsZGVyT0RhdGFBZGFwdGVyIGltcGxlbWVudHMgYnJlZXplLlVyaUJ1aWxkZXJBZGFwdGVyIHtcclxuXHJcbiAgbmFtZTogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwib2RhdGFcIjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyByZWdpc3Rlcihjb25maWc/OiBicmVlemUuQnJlZXplQ29uZmlnKSB7XHJcbiAgICBjb25maWcgPSBjb25maWcgfHwgYnJlZXplLmNvbmZpZztcclxuICAgIGNvbmZpZy5yZWdpc3RlckFkYXB0ZXIoXCJ1cmlCdWlsZGVyXCIsIFVyaUJ1aWxkZXJPRGF0YUFkYXB0ZXIpO1xyXG4gICAgcmV0dXJuIGNvbmZpZy5pbml0aWFsaXplQWRhcHRlckluc3RhbmNlKFwidXJpQnVpbGRlclwiLCBcIm9kYXRhXCIsIHRydWUpIGFzIFVyaUJ1aWxkZXJPRGF0YUFkYXB0ZXI7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKCkgeyB9XHJcblxyXG4gIGJ1aWxkVXJpKGVudGl0eVF1ZXJ5OiBicmVlemUuRW50aXR5UXVlcnksIG1ldGFkYXRhU3RvcmU6IGJyZWV6ZS5NZXRhZGF0YVN0b3JlKSB7XHJcbiAgICAvLyBmb3JjZSBlbnRpdHlUeXBlIHZhbGlkYXRpb247XHJcbiAgICBsZXQgZW50aXR5VHlwZSA9IGVudGl0eVF1ZXJ5Ll9nZXRGcm9tRW50aXR5VHlwZShtZXRhZGF0YVN0b3JlLCBmYWxzZSk7XHJcbiAgICBpZiAoIWVudGl0eVR5cGUpIHtcclxuICAgICAgLy8gYW5vbnltb3VzIHR5cGUgYnV0IHN0aWxsIGhhcyBuYW1pbmcgY29udmVudGlvbiBpbmZvIGF2YWlsXHJcbiAgICAgIGVudGl0eVR5cGUgPSBuZXcgYnJlZXplLkVudGl0eVR5cGUobWV0YWRhdGFTdG9yZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHF1ZXJ5T3B0aW9ucyA9IHt9O1xyXG4gICAgcXVlcnlPcHRpb25zW1wiJGZpbHRlclwiXSA9IHRvV2hlcmVPRGF0YUZyYWdtZW50KGVudGl0eVF1ZXJ5LndoZXJlUHJlZGljYXRlKTtcclxuICAgIHF1ZXJ5T3B0aW9uc1tcIiRvcmRlcmJ5XCJdID0gdG9PcmRlckJ5T0RhdGFGcmFnbWVudChlbnRpdHlRdWVyeS5vcmRlckJ5Q2xhdXNlISk7XHJcblxyXG4gICAgaWYgKGVudGl0eVF1ZXJ5LnNraXBDb3VudCkge1xyXG4gICAgICBxdWVyeU9wdGlvbnNbXCIkc2tpcFwiXSA9IGVudGl0eVF1ZXJ5LnNraXBDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZW50aXR5UXVlcnkudGFrZUNvdW50ICE9IG51bGwpIHtcclxuICAgICAgcXVlcnlPcHRpb25zW1wiJHRvcFwiXSA9IGVudGl0eVF1ZXJ5LnRha2VDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeU9wdGlvbnNbXCIkZXhwYW5kXCJdID0gdG9FeHBhbmRPRGF0YUZyYWdtZW50KGVudGl0eVF1ZXJ5LmV4cGFuZENsYXVzZSk7XHJcbiAgICBxdWVyeU9wdGlvbnNbXCIkc2VsZWN0XCJdID0gdG9TZWxlY3RPRGF0YUZyYWdtZW50KGVudGl0eVF1ZXJ5LnNlbGVjdENsYXVzZSEpO1xyXG5cclxuICAgIGlmIChlbnRpdHlRdWVyeS5pbmxpbmVDb3VudEVuYWJsZWQpIHtcclxuICAgICAgcXVlcnlPcHRpb25zW1wiJGlubGluZWNvdW50XCJdID0gXCJhbGxwYWdlc1wiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHFvVGV4dCA9IHRvUXVlcnlPcHRpb25zU3RyaW5nKHF1ZXJ5T3B0aW9ucyBhcyBicmVlemUuUXVlcnlPcHRpb25zKTtcclxuXHJcbiAgICByZXR1cm4gYXBwZW5kUXVlcnlTdHJpbmdQYXJhbWV0ZXIoZW50aXR5UXVlcnkucmVzb3VyY2VOYW1lLCBxb1RleHQpO1xyXG5cclxuICAgIC8vIHByaXZhdGUgbWV0aG9kcyB0byB0aGlzIGZ1bmMuXHJcblxyXG4gICAgZnVuY3Rpb24gdG9XaGVyZU9EYXRhRnJhZ21lbnQod2hlcmVQcmVkaWNhdGU6IGJyZWV6ZS5QcmVkaWNhdGUpIHtcclxuICAgICAgaWYgKCF3aGVyZVByZWRpY2F0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgLy8gdmFsaWRhdGlvbiBvY2N1cnMgaW5zaWRlIG9mIHRoZSB0b09EYXRhRnJhZ21lbnQgY2FsbCBoZXJlLlxyXG4gICAgICBsZXQgZnJhZyA9IHdoZXJlUHJlZGljYXRlLnZpc2l0KHsgZW50aXR5VHlwZTogZW50aXR5VHlwZSB9LCB0b09EYXRhRnJhZ21lbnRWaXNpdG9yKTtcclxuICAgICAgcmV0dXJuIChmcmFnICYmIGZyYWcubGVuZ3RoID4gMCkgPyBmcmFnIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRvT3JkZXJCeU9EYXRhRnJhZ21lbnQob3JkZXJCeUNsYXVzZTogYnJlZXplLk9yZGVyQnlDbGF1c2UpIHtcclxuICAgICAgaWYgKCFvcmRlckJ5Q2xhdXNlKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICBvcmRlckJ5Q2xhdXNlLnZhbGlkYXRlKGVudGl0eVR5cGUhKTtcclxuICAgICAgbGV0IHN0cmluZ3MgPSBvcmRlckJ5Q2xhdXNlLml0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBlbnRpdHlUeXBlIS5jbGllbnRQcm9wZXJ0eVBhdGhUb1NlcnZlcihpdGVtLnByb3BlcnR5UGF0aCwgXCIvXCIpICsgKGl0ZW0uaXNEZXNjID8gXCIgZGVzY1wiIDogXCJcIik7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBzaG91bGQgcmV0dXJuIHNvbWV0aGluZyBsaWtlIENvbXBhbnlOYW1lLEFkZHJlc3MvQ2l0eSBkZXNjXHJcbiAgICAgIHJldHVybiBzdHJpbmdzLmpvaW4oJywnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0b1NlbGVjdE9EYXRhRnJhZ21lbnQoc2VsZWN0Q2xhdXNlPzogYnJlZXplLlNlbGVjdENsYXVzZSkge1xyXG4gICAgICBpZiAoIXNlbGVjdENsYXVzZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgc2VsZWN0Q2xhdXNlLnZhbGlkYXRlKGVudGl0eVR5cGUhKTtcclxuICAgICAgbGV0IGZyYWcgPSBzZWxlY3RDbGF1c2UucHJvcGVydHlQYXRocy5tYXAoZnVuY3Rpb24gKHBwKSB7XHJcbiAgICAgICAgcmV0dXJuIGVudGl0eVR5cGUhLmNsaWVudFByb3BlcnR5UGF0aFRvU2VydmVyKHBwLCBcIi9cIik7XHJcbiAgICAgIH0pLmpvaW4oXCIsXCIpO1xyXG4gICAgICByZXR1cm4gZnJhZztcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0b0V4cGFuZE9EYXRhRnJhZ21lbnQoZXhwYW5kQ2xhdXNlPzogYnJlZXplLkV4cGFuZENsYXVzZSkge1xyXG4gICAgICBpZiAoIWV4cGFuZENsYXVzZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgLy8gbm8gdmFsaWRhdGUgb24gZXhwYW5kIGNsYXVzZXMgY3VycmVudGx5LlxyXG4gICAgICAvLyBleHBhbmRDbGF1c2UudmFsaWRhdGUoZW50aXR5VHlwZSk7XHJcbiAgICAgIGxldCBmcmFnID0gZXhwYW5kQ2xhdXNlLnByb3BlcnR5UGF0aHMubWFwKGZ1bmN0aW9uIChwcCkge1xyXG4gICAgICAgIHJldHVybiBlbnRpdHlUeXBlIS5jbGllbnRQcm9wZXJ0eVBhdGhUb1NlcnZlcihwcCwgXCIvXCIpO1xyXG4gICAgICB9KS5qb2luKFwiLFwiKTtcclxuICAgICAgcmV0dXJuIGZyYWc7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdG9RdWVyeU9wdGlvbnNTdHJpbmcocXVlcnlPcHRpb25zOiBicmVlemUuUXVlcnlPcHRpb25zKSB7XHJcbiAgICAgIGxldCBxb1N0cmluZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgICAgIGZvciAobGV0IHFvTmFtZSBpbiBxdWVyeU9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgcW9WYWx1ZSA9IHF1ZXJ5T3B0aW9uc1txb05hbWVdO1xyXG4gICAgICAgIGlmIChxb1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGlmIChxb1ZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgcW9WYWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChxb3YpIHtcclxuICAgICAgICAgICAgICBxb1N0cmluZ3MucHVzaChxb05hbWUgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChxb3YpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxb1N0cmluZ3MucHVzaChxb05hbWUgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChxb1ZhbHVlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocW9TdHJpbmdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZXR1cm4gcW9TdHJpbmdzLmpvaW4oXCImXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuXHJcbihicmVlemUuUHJlZGljYXRlLnByb3RvdHlwZSBhcyBhbnkpLnRvT0RhdGFGcmFnbWVudCA9IGZ1bmN0aW9uIChjb250ZXh0OiBicmVlemUuVmlzaXRDb250ZXh0KSB7XHJcbiAgcmV0dXJuIHRoaXMudmlzaXQoY29udGV4dCwgdG9PRGF0YUZyYWdtZW50VmlzaXRvcik7XHJcbn07XHJcblxyXG5sZXQgdG9PRGF0YUZyYWdtZW50VmlzaXRvciA9IHtcclxuXHJcbiAgcGFzc3RocnVQcmVkaWNhdGU6IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gIH0sXHJcblxyXG4gIHVuYXJ5UHJlZGljYXRlOiBmdW5jdGlvbiAodGhpczogYnJlZXplLlVuYXJ5UHJlZGljYXRlLCBjb250ZXh0OiBicmVlemUuVmlzaXRDb250ZXh0KSB7XHJcbiAgICBsZXQgcHJlZFZhbCA9IHRoaXMucHJlZC52aXNpdChjb250ZXh0KTtcclxuICAgIHJldHVybiBvZGF0YU9wRnJvbSh0aGlzKSArIFwiIFwiICsgXCIoXCIgKyBwcmVkVmFsICsgXCIpXCI7XHJcbiAgfSxcclxuXHJcbiAgYmluYXJ5UHJlZGljYXRlOiBmdW5jdGlvbiAodGhpczogYnJlZXplLkJpbmFyeVByZWRpY2F0ZSwgY29udGV4dDogYnJlZXplLlZpc2l0Q29udGV4dCkge1xyXG4gICAgbGV0IGV4cHIxVmFsID0gdGhpcy5leHByMSEudmlzaXQoY29udGV4dCk7XHJcbiAgICBsZXQgZXhwcjJWYWwgPSB0aGlzLmV4cHIyIS52aXNpdChjb250ZXh0KTtcclxuICAgIGxldCBwcmVmaXggPSAoY29udGV4dCBhcyBhbnkpLnByZWZpeDtcclxuICAgIGlmIChwcmVmaXgpIHtcclxuICAgICAgZXhwcjFWYWwgPSBwcmVmaXggKyBcIi9cIiArIGV4cHIxVmFsO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvZGF0YU9wID0gb2RhdGFPcEZyb20odGhpcyk7XHJcblxyXG4gICAgaWYgKHRoaXMub3Aua2V5ID09PSAnaW4nKSB7XHJcbiAgICAgIGxldCByZXN1bHQgPSBleHByMlZhbC5tYXAoZnVuY3Rpb24gKHY6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBcIihcIiArIGV4cHIxVmFsICsgXCIgZXEgXCIgKyB2ICsgXCIpXCI7XHJcbiAgICAgIH0pLmpvaW4oXCIgb3IgXCIpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm9wLmlzRnVuY3Rpb24pIHtcclxuICAgICAgaWYgKG9kYXRhT3AgPT09IFwic3Vic3RyaW5nb2ZcIikge1xyXG4gICAgICAgIHJldHVybiBvZGF0YU9wICsgXCIoXCIgKyBleHByMlZhbCArIFwiLFwiICsgZXhwcjFWYWwgKyBcIikgZXEgdHJ1ZVwiO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBvZGF0YU9wICsgXCIoXCIgKyBleHByMVZhbCArIFwiLFwiICsgZXhwcjJWYWwgKyBcIikgZXEgdHJ1ZVwiO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZXhwcjFWYWwgKyBcIiBcIiArIG9kYXRhT3AgKyBcIiBcIiArIGV4cHIyVmFsO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGFuZE9yUHJlZGljYXRlOiBmdW5jdGlvbiAodGhpczogYnJlZXplLkFuZE9yUHJlZGljYXRlLCBjb250ZXh0OiBicmVlemUuVmlzaXRDb250ZXh0KSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5wcmVkcy5tYXAoZnVuY3Rpb24gKHByZWQpIHtcclxuICAgICAgbGV0IHByZWRWYWwgPSBwcmVkLnZpc2l0KGNvbnRleHQpO1xyXG4gICAgICByZXR1cm4gXCIoXCIgKyBwcmVkVmFsICsgXCIpXCI7XHJcbiAgICB9KS5qb2luKFwiIFwiICsgb2RhdGFPcEZyb20odGhpcykgKyBcIiBcIik7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH0sXHJcblxyXG4gIGFueUFsbFByZWRpY2F0ZTogZnVuY3Rpb24gKHRoaXM6IGJyZWV6ZS5BbnlBbGxQcmVkaWNhdGUsIGNvbnRleHQ6IGJyZWV6ZS5WaXNpdENvbnRleHQpIHtcclxuICAgIGxldCBleHByVmFsID0gdGhpcy5leHByLnZpc2l0KGNvbnRleHQpO1xyXG4gICAgaWYgKCF0aGlzLnByZWQub3ApIHsgLy8gYWRkZWQgMjEtT2N0LTIwMTYgdG8gZml4IGJyZWV6ZS5qcyBpc3N1ZSAjMTcyXHJcbiAgICAgIHJldHVybiBleHByVmFsICsgXCIvXCIgKyBvZGF0YU9wRnJvbSh0aGlzKSArIFwiKClcIjtcclxuICAgIH1cclxuICAgIGxldCBwcmVmaXggPSAoY29udGV4dCBhcyBhbnkpLnByZWZpeDtcclxuICAgIGlmIChwcmVmaXgpIHtcclxuICAgICAgZXhwclZhbCA9IHByZWZpeCArIFwiL1wiICsgZXhwclZhbDtcclxuICAgICAgcHJlZml4ID0gXCJ4XCIgKyAocGFyc2VJbnQocHJlZml4LnN1YnN0cmluZygxKSkgKyAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHByZWZpeCA9IFwieDFcIjtcclxuICAgIH1cclxuICAgIC8vIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGNvbnRleHQgYmVjYXVzZSBvZiAncHJlZml4J1xyXG4gICAgbGV0IG5ld0NvbnRleHQgPSBicmVlemUuY29yZS5leHRlbmQoe30sIGNvbnRleHQpIGFzIGFueTtcclxuICAgIG5ld0NvbnRleHQuZW50aXR5VHlwZSA9IHRoaXMuZXhwci5kYXRhVHlwZTtcclxuICAgIG5ld0NvbnRleHQucHJlZml4ID0gcHJlZml4O1xyXG4gICAgbGV0IG5ld1ByZWRWYWwgPSB0aGlzLnByZWQudmlzaXQobmV3Q29udGV4dCk7XHJcbiAgICByZXR1cm4gZXhwclZhbCArIFwiL1wiICsgb2RhdGFPcEZyb20odGhpcykgKyBcIihcIiArIHByZWZpeCArIFwiOiBcIiArIG5ld1ByZWRWYWwgKyBcIilcIjtcclxuICB9LFxyXG5cclxuICBsaXRFeHByOiBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoZnVuY3Rpb24gKHY6IGFueSkgeyByZXR1cm4gdGhpcy5kYXRhVHlwZS5mbXRPRGF0YSh2KTsgfSwgdGhpcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhVHlwZS5mbXRPRGF0YSh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICB9LFxyXG5cclxuICBwcm9wRXhwcjogZnVuY3Rpb24gKHRoaXM6IGJyZWV6ZS5Qcm9wRXhwciwgY29udGV4dDogYnJlZXplLkV4cHJlc3Npb25Db250ZXh0KSB7XHJcbiAgICBsZXQgZW50aXR5VHlwZSA9IGNvbnRleHQuZW50aXR5VHlwZTtcclxuICAgIC8vICcvJyBpcyB0aGUgT0RhdGEgcGF0aCBkZWxpbWl0ZXJcclxuICAgIHJldHVybiBlbnRpdHlUeXBlID8gZW50aXR5VHlwZS5jbGllbnRQcm9wZXJ0eVBhdGhUb1NlcnZlcih0aGlzLnByb3BlcnR5UGF0aCwgXCIvXCIpIDogdGhpcy5wcm9wZXJ0eVBhdGg7XHJcbiAgfSxcclxuXHJcbiAgZm5FeHByOiBmdW5jdGlvbiAodGhpczogYnJlZXplLkZuRXhwciwgY29udGV4dDogYnJlZXplLkV4cHJlc3Npb25Db250ZXh0KSB7XHJcbiAgICBsZXQgZXhwclZhbHMgPSB0aGlzLmV4cHJzLm1hcChmdW5jdGlvbiAoZXhwcikge1xyXG4gICAgICByZXR1cm4gZXhwci52aXNpdChjb250ZXh0KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuZm5OYW1lICsgXCIoXCIgKyBleHByVmFscy5qb2luKFwiLFwiKSArIFwiKVwiO1xyXG4gIH1cclxufTtcclxuXHJcbmxldCBfb3BlcmF0b3JNYXAgPSB7XHJcbiAgJ2NvbnRhaW5zJzogJ3N1YnN0cmluZ29mJ1xyXG59O1xyXG5cclxuZnVuY3Rpb24gb2RhdGFPcEZyb20obm9kZTogYW55KSB7XHJcbiAgbGV0IG9wID0gbm9kZS5vcC5rZXk7XHJcbiAgbGV0IG9kYXRhT3AgPSBfb3BlcmF0b3JNYXBbb3BdO1xyXG4gIHJldHVybiBvZGF0YU9wIHx8IG9wO1xyXG59XHJcblxyXG5icmVlemUuY29uZmlnLnJlZ2lzdGVyQWRhcHRlcihcInVyaUJ1aWxkZXJcIiwgVXJpQnVpbGRlck9EYXRhQWRhcHRlcik7XHJcblxyXG5cclxuXHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './adapter-uri-builder-odata';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLWNsaWVudC1hZGFwdGVyLXVyaS1idWlsZGVyLW9kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JyZWV6ZS1jbGllbnQtYWRhcHRlci11cmktYnVpbGRlci1vZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vYWRhcHRlci11cmktYnVpbGRlci1vZGF0YSc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2JyZWV6ZS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './src/breeze';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3JjL2JyZWV6ZSc7Il19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './mixin-get-entity-graph';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLWNsaWVudC1taXhpbi1nZXQtZW50aXR5LWdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JyZWV6ZS1jbGllbnQtbWl4aW4tZ2V0LWVudGl0eS1ncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbWl4aW4tZ2V0LWVudGl0eS1ncmFwaCc7XG4iXX0=
@@ -0,0 +1,269 @@
1
+ //#region Copyright, Version, and Description
2
+ /*
3
+ * Copyright 2015-2021 IdeaBlade, Inc. All Rights Reserved.
4
+ * Use, reproduction, distribution, and modification of this code is subject to the terms and
5
+ * conditions of the IdeaBlade Breeze license, available at http://www.breezejs.com/license
6
+ *
7
+ * Author: Ward Bell
8
+ * Version: 0.9.5 - Steve Schmitt - convert to TypeScript, migrate to breeze-client repo, add HasEntityGraph and mixinEntityGraph
9
+ * Version: 0.9.4 - Marcel Good - fix UMD module name
10
+ * --------------------------------------------------------------------------------
11
+ * Adds getEntityGraph method to Breeze EntityManager prototype.
12
+ * Call mixinEntityGraph(EntityManager) to apply the mixin in a tree-shaking-resistant way.
13
+ * Then (manager as any).getEntityGraph(entity, "child");
14
+ *
15
+ * Depends on Breeze which it patches
16
+ *
17
+ * For discussion, see:
18
+ * http://www.breezejs.com/documentation/getentitygraph
19
+ *
20
+ * For example usage, see:
21
+ * https://github.com/Breeze/breeze.js.samples/tree/master/net/DocCode/DocCode/tests/getEntityGraphTests.js
22
+ */
23
+ //#endregion
24
+ import { EntityManager, EntityQuery, EntityState, ExpandClause } from 'breeze-client';
25
+ export function mixinEntityGraph(emclass) {
26
+ const proto = EntityManager.prototype;
27
+ if (!proto.getEntityGraph) {
28
+ proto.getEntityGraph = getEntityGraph;
29
+ }
30
+ }
31
+ mixinEntityGraph(EntityManager);
32
+ function getEntityGraph(roots, expand) {
33
+ if (roots instanceof EntityQuery) {
34
+ let newRoots = this.executeQueryLocally(roots);
35
+ return getEntityGraphCore(newRoots, expand || roots.expandClause);
36
+ }
37
+ else {
38
+ return getEntityGraphCore(roots, expand);
39
+ }
40
+ }
41
+ function getEntityGraphCore(root, expand) {
42
+ let entityGroupMap;
43
+ let graph = [];
44
+ let rootType;
45
+ let roots = Array.isArray(root) ? root : [root];
46
+ addToGraph(roots); // removes dups & nulls
47
+ roots = graph.slice(); // copy of de-duped roots
48
+ if (roots.length) {
49
+ getRootInfo();
50
+ getExpand();
51
+ buildGraph();
52
+ }
53
+ return graph;
54
+ function addToGraph(entities) {
55
+ entities.forEach(function (entity) {
56
+ if (entity && graph.indexOf(entity) < 0) {
57
+ graph.push(entity);
58
+ }
59
+ });
60
+ }
61
+ function getRootInfo() {
62
+ let compatTypes;
63
+ roots.forEach(function (root, ix) {
64
+ let aspect;
65
+ if (!root || !(aspect = root.entityAspect)) {
66
+ throw getRootErr(ix, 'is not an entity');
67
+ }
68
+ if (aspect.entityState === EntityState.Detached) {
69
+ throw getRootErr(ix, 'is a detached entity');
70
+ }
71
+ let em = aspect.entityManager;
72
+ if (entityGroupMap) {
73
+ if (entityGroupMap !== em._entityGroupMap) {
74
+ throw getRootErr(ix, "has a different 'EntityManager' than other roots");
75
+ }
76
+ }
77
+ else {
78
+ entityGroupMap = em._entityGroupMap;
79
+ }
80
+ getRootType(root, ix);
81
+ });
82
+ function getRootErr(ix, msg) {
83
+ return new Error("'getEntityGraph' root[" + ix + "] " + msg);
84
+ }
85
+ function getRootType(root, ix) {
86
+ let thisType = root.entityType;
87
+ if (!rootType) {
88
+ rootType = thisType;
89
+ return;
90
+ }
91
+ else if (rootType === thisType) {
92
+ return;
93
+ }
94
+ // Types differs. Look for closest common base type
95
+ // does thisType derive from current rootType?
96
+ let baseType = rootType;
97
+ do {
98
+ compatTypes = compatTypes || baseType.getSelfAndSubtypes();
99
+ if (compatTypes.indexOf(thisType) > -1) {
100
+ rootType = baseType;
101
+ return;
102
+ }
103
+ baseType = baseType.baseEntityType;
104
+ compatTypes = null;
105
+ } while (baseType);
106
+ // does current rootType derives from thisType?
107
+ baseType = thisType;
108
+ do {
109
+ compatTypes = baseType.getSelfAndSubtypes();
110
+ if (compatTypes.indexOf(rootType) > -1) {
111
+ rootType = baseType;
112
+ return;
113
+ }
114
+ baseType = baseType.baseEntityType;
115
+ } while (baseType);
116
+ throw getRootErr(ix, "is not EntityType-compatible with other roots");
117
+ }
118
+ }
119
+ function getExpand() {
120
+ try {
121
+ if (!expand) {
122
+ expand = [];
123
+ }
124
+ else if (typeof expand === 'string') {
125
+ // tricky because Breeze expandClause not exposed publically
126
+ expand = new EntityQuery().expand(expand).expandClause;
127
+ }
128
+ if (expand instanceof ExpandClause && expand.propertyPaths) { // expand clause
129
+ expand = expand.propertyPaths;
130
+ }
131
+ else if (Array.isArray(expand)) {
132
+ if (!expand.every(function (elem) { return typeof elem === 'string'; })) {
133
+ throw '';
134
+ }
135
+ }
136
+ else {
137
+ throw '';
138
+ }
139
+ }
140
+ catch (_) {
141
+ throw new Error("expand must be an expand string, array of string paths, or a query expand clause");
142
+ }
143
+ }
144
+ function buildGraph() {
145
+ if (expand && expand instanceof Array && expand.length) {
146
+ let fns = expand.map(makePathFn);
147
+ fns.forEach(function (fn) { fn(roots); });
148
+ }
149
+ }
150
+ // Make function to get entities along a single expand path
151
+ // such as 'Orders.OrderDetails.Product'
152
+ function makePathFn(path) {
153
+ let fns = [], segments = path.split('.'), type = rootType;
154
+ for (let i = 0, slen = segments.length; i < slen; i++) {
155
+ let f = makePathSegmentFn(type, segments[i]);
156
+ type = f.navType;
157
+ fns.push(f);
158
+ }
159
+ return function pathFn(entities) {
160
+ for (let j = 0, flen = fns.length; j < flen; j++) {
161
+ let elen = entities.length;
162
+ if (elen === 0) {
163
+ return;
164
+ } // nothing left to explore
165
+ // fn to get related entities for this path segment
166
+ let fn = fns[j];
167
+ // get entities related by this path segment
168
+ let related = [];
169
+ for (let k = 0; k < elen; k++) {
170
+ related = related.concat(fn(entities[k]));
171
+ }
172
+ addToGraph(related);
173
+ if (j >= flen - 1) {
174
+ return;
175
+ } // no more path segments
176
+ // reset entities to deduped related entities
177
+ entities = [];
178
+ for (let l = 0, rlen = related.length; l < rlen; l++) {
179
+ let r = related[l];
180
+ if (entities.indexOf(r) < 0) {
181
+ entities.push(r);
182
+ }
183
+ }
184
+ }
185
+ };
186
+ }
187
+ // Make function to get entities along a single expand path segment
188
+ // such as the 'OrderDetails' in the 'Orders.OrderDetails.Product' path
189
+ function makePathSegmentFn(baseType, segment) {
190
+ let baseTypeName, fn = undefined, navType;
191
+ try {
192
+ baseTypeName = baseType.name;
193
+ let nav = baseType.getNavigationProperty(segment);
194
+ let fkName = nav.foreignKeyNames[0];
195
+ if (!nav) {
196
+ throw new Error(segment + " is not a navigation property of " + baseTypeName);
197
+ }
198
+ navType = nav.entityType;
199
+ // add derived types
200
+ let navTypes = navType.getSelfAndSubtypes();
201
+ let grps = []; // non-empty groups for these types
202
+ navTypes.forEach(function (t) {
203
+ let grp = entityGroupMap[t.name];
204
+ if (grp && grp._entities.length > 0) {
205
+ grps.push(grp);
206
+ }
207
+ });
208
+ let grpCount = grps.length;
209
+ if (grpCount === 0) {
210
+ // no related entities in cache
211
+ fn = function () { return []; };
212
+ }
213
+ else if (fkName) {
214
+ fn = function (entity) {
215
+ let val = null;
216
+ try {
217
+ let keyValue = entity.getProperty(fkName);
218
+ for (let i = 0; i < grpCount; i += 1) {
219
+ val = grps[i]._entities[grps[i]._indexMap[keyValue]];
220
+ if (val) {
221
+ break;
222
+ }
223
+ }
224
+ }
225
+ catch (e) {
226
+ rethrow(e);
227
+ }
228
+ return val;
229
+ };
230
+ }
231
+ else {
232
+ fkName = nav.inverse ?
233
+ nav.inverse.foreignKeyNames[0] :
234
+ nav.invForeignKeyNames[0];
235
+ if (!fkName) {
236
+ throw new Error("No inverse keys");
237
+ }
238
+ fn = function (entity) {
239
+ let vals = [];
240
+ try {
241
+ let keyValue = entity.entityAspect.getKey().values[0];
242
+ grps.forEach(function (grp) {
243
+ vals = vals.concat(grp._entities.filter(function (en) {
244
+ return en && en.getProperty(fkName) === keyValue;
245
+ }));
246
+ });
247
+ }
248
+ catch (e) {
249
+ rethrow(e);
250
+ }
251
+ return vals;
252
+ };
253
+ }
254
+ fn.navType = navType;
255
+ fn.path = segment;
256
+ }
257
+ catch (err) {
258
+ rethrow(err);
259
+ }
260
+ return fn;
261
+ function rethrow(e) {
262
+ let typeName = baseTypeName || baseType;
263
+ let error = new Error("'getEntityGraph' can't expand '" + segment + "' for " + typeName);
264
+ error.innerError = e;
265
+ throw error;
266
+ }
267
+ }
268
+ }
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW4tZ2V0LWVudGl0eS1ncmFwaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taXhpbi1nZXQtZW50aXR5LWdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZDQUE2QztBQUM3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxZQUFZO0FBQ1osT0FBTyxFQUFVLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFjLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQXNDMUcsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQWlDO0lBQ2hFLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7SUFFdEMsSUFBSSxDQUFFLEtBQWEsQ0FBQyxjQUFjLEVBQUU7UUFDakMsS0FBYSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7S0FDaEQ7QUFDSCxDQUFDO0FBRUQsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7QUFHaEMsU0FBUyxjQUFjLENBQUMsS0FBMkMsRUFBRSxNQUE2QztJQUNoSCxJQUFJLEtBQUssWUFBWSxXQUFXLEVBQUU7UUFDaEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE9BQU8sa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDbkU7U0FBTTtRQUNMLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsSUFBNEIsRUFBRSxNQUE2QztJQUNyRyxJQUFJLGNBQWdELENBQUM7SUFDckQsSUFBSSxLQUFLLEdBQUcsRUFBbUIsQ0FBQztJQUNoQyxJQUFJLFFBQW9CLENBQUM7SUFDekIsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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QyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQzdCLEVBQVUsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1NBRTVCO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FBRTtRQUMvQixPQUFPLEVBQUUsQ0FBQztRQUVWLFNBQVMsT0FBTyxDQUFDLENBQVE7WUFDdkIsSUFBSSxRQUFRLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQztZQUN4QyxJQUFJLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxPQUFPLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3hGLEtBQWEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIENvcHlyaWdodCwgVmVyc2lvbiwgYW5kIERlc2NyaXB0aW9uXHJcbi8qXHJcbiAqIENvcHlyaWdodCAyMDE1LTIwMjEgSWRlYUJsYWRlLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBVc2UsIHJlcHJvZHVjdGlvbiwgZGlzdHJpYnV0aW9uLCBhbmQgbW9kaWZpY2F0aW9uIG9mIHRoaXMgY29kZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmRcclxuICogY29uZGl0aW9ucyBvZiB0aGUgSWRlYUJsYWRlIEJyZWV6ZSBsaWNlbnNlLCBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5icmVlemVqcy5jb20vbGljZW5zZVxyXG4gKlxyXG4gKiBBdXRob3I6IFdhcmQgQmVsbFxyXG4gKiBWZXJzaW9uOiAwLjkuNSAtIFN0ZXZlIFNjaG1pdHQgLSBjb252ZXJ0IHRvIFR5cGVTY3JpcHQsIG1pZ3JhdGUgdG8gYnJlZXplLWNsaWVudCByZXBvLCBhZGQgSGFzRW50aXR5R3JhcGggYW5kIG1peGluRW50aXR5R3JhcGhcclxuICogVmVyc2lvbjogMC45LjQgLSBNYXJjZWwgR29vZCAtIGZpeCBVTUQgbW9kdWxlIG5hbWVcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICogQWRkcyBnZXRFbnRpdHlHcmFwaCBtZXRob2QgdG8gQnJlZXplIEVudGl0eU1hbmFnZXIgcHJvdG90eXBlLlxyXG4gKiBDYWxsICAgbWl4aW5FbnRpdHlHcmFwaChFbnRpdHlNYW5hZ2VyKSAgIHRvIGFwcGx5IHRoZSBtaXhpbiBpbiBhIHRyZWUtc2hha2luZy1yZXNpc3RhbnQgd2F5LlxyXG4gKiBUaGVuICAgKG1hbmFnZXIgYXMgYW55KS5nZXRFbnRpdHlHcmFwaChlbnRpdHksIFwiY2hpbGRcIik7XHJcbiAqXHJcbiAqIERlcGVuZHMgb24gQnJlZXplIHdoaWNoIGl0IHBhdGNoZXNcclxuICpcclxuICogRm9yIGRpc2N1c3Npb24sIHNlZTpcclxuICogaHR0cDovL3d3dy5icmVlemVqcy5jb20vZG9jdW1lbnRhdGlvbi9nZXRlbnRpdHlncmFwaFxyXG4gKlxyXG4gKiBGb3IgZXhhbXBsZSB1c2FnZSwgc2VlOlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vQnJlZXplL2JyZWV6ZS5qcy5zYW1wbGVzL3RyZWUvbWFzdGVyL25ldC9Eb2NDb2RlL0RvY0NvZGUvdGVzdHMvZ2V0RW50aXR5R3JhcGhUZXN0cy5qc1xyXG4gKi9cclxuLy8jZW5kcmVnaW9uXHJcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5TWFuYWdlciwgRW50aXR5UXVlcnksIEVudGl0eVN0YXRlLCBFbnRpdHlUeXBlLCBFeHBhbmRDbGF1c2UgfSBmcm9tICdicmVlemUtY2xpZW50JztcclxuXHJcbmludGVyZmFjZSBFbnRpdHlHcm91cCB7XHJcbiAgX2VudGl0aWVzOiAoRW50aXR5IHwgbnVsbClbXTtcclxuICBfaW5kZXhNYXA6IHsgW2luZGV4OiBzdHJpbmddOiBudW1iZXIgfTtcclxufVxyXG5cclxuLy8gbW9kdWxlIGF1Z21lbnRhdGlvbiBmYWlsZWQgdG8gYnVpbGQgd2l0aCBuZy1wYWNrYWdyLCBzbyB3ZSBoYXZlIGEgc2VwYXJhdGUgaW50ZXJmYWNlXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGFzRW50aXR5R3JhcGggZXh0ZW5kcyBFbnRpdHlNYW5hZ2VyIHtcclxuICAvKipcclxuICBHZXQgcmVsYXRlZCBlbnRpdGllcyBvZiByb290IGVudGl0eSAob3Igcm9vdCBlbnRpdGllcykgYXMgc3BlY2lmaWVkIGJ5IGV4cGFuZC5cclxuICBAZXhhbXBsZVxyXG4gICAgICB2YXIgZ3JhcGggPSBicmVlemUuRW50aXR5TWFuYWdlci5nZXRFbnRpdHlHcmFwaChjdXN0b21lciwgJ09yZGVycy5PcmRlckRldGFpbHMnKTtcclxuICAgICAgLy8gZ3JhcGggd2lsbCBiZSB0aGUgY3VzdG9tZXIsIGFsbCBvZiBpdHMgb3JkZXJzIGFuZCB0aGVpciBkZXRhaWxzIGV2ZW4gaWYgZGVsZXRlZC5cclxuICBAbWV0aG9kIGdldEVudGl0eUdyYXBoXHJcbiAgQHBhcmFtIHJvb3RzIHtFbnRpdHl8QXJyYXkgb2YgRW50aXR5fSBUaGUgcm9vdCBlbnRpdHkgb3Igcm9vdCBlbnRpdGllcy5cclxuICBAcGFyYW0gZXhwYW5kIHtTdHJpbmd8QXJyYXkgb2YgU3RyaW5nfE9iamVjdH0gYW4gZXhwYW5kIHN0cmluZywgYSBxdWVyeSBleHBhbmQgY2xhdXNlLCBvciBhcnJheSBvZiBzdHJpbmcgcGF0aHNcclxuICBAcmV0dXJuIHtBcnJheSBvZiBFbnRpdHl9IHJvb3QgZW50aXRpZXMgYW5kIHRoZWlyIHJlbGF0ZWQgZW50aXRpZXMsIGluY2x1ZGluZyBkZWxldGVkIGVudGl0aWVzLiBEdXBsaWNhdGVzIGFyZSByZW1vdmVkIGFuZCBlbnRpdHkgb3JkZXIgaXMgaW5kZXRlcm1pbmF0ZS5cclxuICAqKi9cclxuICBnZXRFbnRpdHlHcmFwaChyb290czogRW50aXR5IHwgQXJyYXk8RW50aXR5PiwgZXhwYW5kOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IHwgRXhwYW5kQ2xhdXNlKTogQXJyYXk8RW50aXR5PjtcclxuXHJcbiAgLyoqXHJcbiAgRXhlY3V0ZSBxdWVyeSBsb2NhbGx5IGFuZCByZXR1cm4gYm90aCB0aGUgcXVlcnkgcmVzdWx0cyBhbmQgdGhlaXIgcmVsYXRlZCBlbnRpdGllcyBhcyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbmFsIGV4cGFuZCBwYXJhbWV0ZXIgb3IgdGhlIHF1ZXJ5J3MgZXhwYW5kIGNsYXVzZS5cclxuICBAZXhhbXBsZVxyXG4gICAgICB2YXIgcXVlcnkgPSBicmVlemUuRW50aXR5UXVlcnkuZnJvbSgnQ3VzdG9tZXJzJylcclxuICAgICAgICAgICAgICAgICAgLndoZXJlKCdDb21wYW55TmFtZScsICdzdGFydHNXaXRoJywgJ0FsZnJlZCcpXHJcbiAgICAgICAgICAgICAgICAgIC5leHBhbmQoJ09yZGVycy5PcmRlckRldGFpbHMnKTtcclxuICAgICAgdmFyIGdyYXBoID0gbWFuYWdlci5nZXRFbnRpdHlHcmFwaChxdWVyeSk7XHJcbiAgICAgIC8vIGdyYXBoIHdpbGwgYmUgdGhlICdBbGZyZWQnIGN1c3RvbWVycywgdGhlaXIgb3JkZXJzIGFuZCB0aGVpciBkZXRhaWxzIGV2ZW4gaWYgZGVsZXRlZC5cclxuICBAbWV0aG9kIGdldEVudGl0eUdyYXBoXHJcbiAgQHBhcmFtIHF1ZXJ5IHtFbnRpdHlRdWVyeX0gQSBxdWVyeSB0byBiZSBleGVjdXRlZCBhZ2FpbnN0IHRoZSBtYW5hZ2VyJ3MgbG9jYWwgY2FjaGUuXHJcbiAgQHBhcmFtIFtleHBhbmRdIHtTdHJpbmd8QXJyYXkgb2YgU3RyaW5nfE9iamVjdH0gYW4gZXhwYW5kIHN0cmluZywgYSBxdWVyeSBleHBhbmQgY2xhdXNlLCBvciBhcnJheSBvZiBzdHJpbmcgcGF0aHNcclxuICBAcmV0dXJuIHtBcnJheSBvZiBFbnRpdHl9IGxvY2FsIHF1ZXJpZWQgcm9vdCBlbnRpdGllcyBhbmQgdGhlaXIgcmVsYXRlZCBlbnRpdGllcywgaW5jbHVkaW5nIGRlbGV0ZWQgZW50aXRpZXMuIER1cGxpY2F0ZXMgYXJlIHJlbW92ZWQgYW5kIGVudGl0eSBvcmRlciBpcyBpbmRldGVybWluYXRlLlxyXG4gICoqL1xyXG4gIGdldEVudGl0eUdyYXBoKHF1ZXJ5OiBFbnRpdHlRdWVyeSwgZXhwYW5kOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IHwgRXhwYW5kQ2xhdXNlKTogQXJyYXk8RW50aXR5PjtcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtaXhpbkVudGl0eUdyYXBoKGVtY2xhc3M6IHsgbmV3KCk6IEVudGl0eU1hbmFnZXIgfSkge1xyXG4gIGNvbnN0IHByb3RvID0gRW50aXR5TWFuYWdlci5wcm90b3R5cGU7XHJcblxyXG4gIGlmICghKHByb3RvIGFzIGFueSkuZ2V0RW50aXR5R3JhcGgpIHtcclxuICAgIChwcm90byBhcyBhbnkpLmdldEVudGl0eUdyYXBoID0gZ2V0RW50aXR5R3JhcGg7XHJcbiAgfVxyXG59XHJcblxyXG5taXhpbkVudGl0eUdyYXBoKEVudGl0eU1hbmFnZXIpO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGdldEVudGl0eUdyYXBoKHJvb3RzOiBFbnRpdHkgfCBBcnJheTxFbnRpdHk+IHwgRW50aXR5UXVlcnksIGV4cGFuZDogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiB8IEV4cGFuZENsYXVzZSkge1xyXG4gIGlmIChyb290cyBpbnN0YW5jZW9mIEVudGl0eVF1ZXJ5KSB7XHJcbiAgICBsZXQgbmV3Um9vdHMgPSB0aGlzLmV4ZWN1dGVRdWVyeUxvY2FsbHkocm9vdHMpO1xyXG4gICAgcmV0dXJuIGdldEVudGl0eUdyYXBoQ29yZShuZXdSb290cywgZXhwYW5kIHx8IHJvb3RzLmV4cGFuZENsYXVzZSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBnZXRFbnRpdHlHcmFwaENvcmUocm9vdHMsIGV4cGFuZCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRFbnRpdHlHcmFwaENvcmUocm9vdDogRW50aXR5IHwgQXJyYXk8RW50aXR5PiwgZXhwYW5kOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IHwgRXhwYW5kQ2xhdXNlKSB7XHJcbiAgbGV0IGVudGl0eUdyb3VwTWFwOiB7IFtpbmRleDogc3RyaW5nXTogRW50aXR5R3JvdXAgfTtcclxuICBsZXQgZ3JhcGggPSBbXSBhcyBBcnJheTxFbnRpdHk+O1xyXG4gIGxldCByb290VHlwZTogRW50aXR5VHlwZTtcclxuICBsZXQgcm9vdHMgPSBBcnJheS5pc0FycmF5KHJvb3QpID8gcm9vdCA6IFtyb290XTtcclxuICBhZGRUb0dyYXBoKHJvb3RzKTsgICAgIC8vIHJlbW92ZXMgZHVwcyAmIG51bGxzXHJcbiAgcm9vdHMgPSBncmFwaC5zbGljZSgpOyAvLyBjb3B5IG9mIGRlLWR1cGVkIHJvb3RzXHJcbiAgaWYgKHJvb3RzLmxlbmd0aCkge1xyXG4gICAgZ2V0Um9vdEluZm8oKTtcclxuICAgIGdldEV4cGFuZCgpO1xyXG4gICAgYnVpbGRHcmFwaCgpO1xyXG4gIH1cclxuICByZXR1cm4gZ3JhcGg7XHJcblxyXG4gIGZ1bmN0aW9uIGFkZFRvR3JhcGgoZW50aXRpZXM6IEFycmF5PEVudGl0eT4pIHtcclxuICAgIGVudGl0aWVzLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eSkge1xyXG4gICAgICBpZiAoZW50aXR5ICYmIGdyYXBoLmluZGV4T2YoZW50aXR5KSA8IDApIHtcclxuICAgICAgICBncmFwaC5wdXNoKGVudGl0eSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Um9vdEluZm8oKSB7XHJcbiAgICBsZXQgY29tcGF0VHlwZXM6IEFycmF5PEVudGl0eVR5cGU+O1xyXG5cclxuICAgIHJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QsIGl4KSB7XHJcbiAgICAgIGxldCBhc3BlY3Q7XHJcbiAgICAgIGlmICghcm9vdCB8fCAhKGFzcGVjdCA9IHJvb3QuZW50aXR5QXNwZWN0KSkge1xyXG4gICAgICAgIHRocm93IGdldFJvb3RFcnIoaXgsICdpcyBub3QgYW4gZW50aXR5Jyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFzcGVjdC5lbnRpdHlTdGF0ZSA9PT0gRW50aXR5U3RhdGUuRGV0YWNoZWQpIHtcclxuICAgICAgICB0aHJvdyBnZXRSb290RXJyKGl4LCAnaXMgYSBkZXRhY2hlZCBlbnRpdHknKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGVtID0gYXNwZWN0LmVudGl0eU1hbmFnZXI7XHJcbiAgICAgIGlmIChlbnRpdHlHcm91cE1hcCkge1xyXG4gICAgICAgIGlmIChlbnRpdHlHcm91cE1hcCAhPT0gZW0uX2VudGl0eUdyb3VwTWFwKSB7XHJcbiAgICAgICAgICB0aHJvdyBnZXRSb290RXJyKGl4LCBcImhhcyBhIGRpZmZlcmVudCAnRW50aXR5TWFuYWdlcicgdGhhbiBvdGhlciByb290c1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZW50aXR5R3JvdXBNYXAgPSBlbS5fZW50aXR5R3JvdXBNYXA7XHJcbiAgICAgIH1cclxuICAgICAgZ2V0Um9vdFR5cGUocm9vdCwgaXgpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldFJvb3RFcnIoaXg6IG51bWJlciwgbXNnOiBzdHJpbmcpIHtcclxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIidnZXRFbnRpdHlHcmFwaCcgcm9vdFtcIiArIGl4ICsgXCJdIFwiICsgbXNnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRSb290VHlwZShyb290OiBFbnRpdHksIGl4OiBudW1iZXIpIHtcclxuICAgICAgbGV0IHRoaXNUeXBlID0gcm9vdC5lbnRpdHlUeXBlO1xyXG4gICAgICBpZiAoIXJvb3RUeXBlKSB7XHJcbiAgICAgICAgcm9vdFR5cGUgPSB0aGlzVHlwZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAocm9vdFR5cGUgPT09IHRoaXNUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFR5cGVzIGRpZmZlcnMuIExvb2sgZm9yIGNsb3Nlc3QgY29tbW9uIGJhc2UgdHlwZVxyXG4gICAgICAvLyBkb2VzIHRoaXNUeXBlIGRlcml2ZSBmcm9tIGN1cnJlbnQgcm9vdFR5cGU/XHJcbiAgICAgIGxldCBiYXNlVHlwZSA9IHJvb3RUeXBlO1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgY29tcGF0VHlwZXMgPSBjb21wYXRUeXBlcyB8fCBiYXNlVHlwZS5nZXRTZWxmQW5kU3VidHlwZXMoKTtcclxuICAgICAgICBpZiAoY29tcGF0VHlwZXMuaW5kZXhPZih0aGlzVHlwZSkgPiAtMSkge1xyXG4gICAgICAgICAgcm9vdFR5cGUgPSBiYXNlVHlwZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmFzZVR5cGUgPSBiYXNlVHlwZS5iYXNlRW50aXR5VHlwZTtcclxuICAgICAgICBjb21wYXRUeXBlcyA9IG51bGw7XHJcbiAgICAgIH0gd2hpbGUgKGJhc2VUeXBlKTtcclxuXHJcbiAgICAgIC8vIGRvZXMgY3VycmVudCByb290VHlwZSBkZXJpdmVzIGZyb20gdGhpc1R5cGU/XHJcbiAgICAgIGJhc2VUeXBlID0gdGhpc1R5cGU7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBjb21wYXRUeXBlcyA9IGJhc2VUeXBlLmdldFNlbGZBbmRTdWJ0eXBlcygpO1xyXG4gICAgICAgIGlmIChjb21wYXRUeXBlcy5pbmRleE9mKHJvb3RUeXBlKSA+IC0xKSB7XHJcbiAgICAgICAgICByb290VHlwZSA9IGJhc2VUeXBlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiYXNlVHlwZSA9IGJhc2VUeXBlLmJhc2VFbnRpdHlUeXBlO1xyXG4gICAgICB9IHdoaWxlIChiYXNlVHlwZSk7XHJcblxyXG4gICAgICB0aHJvdyBnZXRSb290RXJyKGl4LCBcImlzIG5vdCBFbnRpdHlUeXBlLWNvbXBhdGlibGUgd2l0aCBvdGhlciByb290c1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldEV4cGFuZCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghZXhwYW5kKSB7XHJcbiAgICAgICAgZXhwYW5kID0gW107XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cGFuZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyB0cmlja3kgYmVjYXVzZSBCcmVlemUgZXhwYW5kQ2xhdXNlIG5vdCBleHBvc2VkIHB1YmxpY2FsbHlcclxuICAgICAgICBleHBhbmQgPSBuZXcgRW50aXR5UXVlcnkoKS5leHBhbmQoZXhwYW5kKS5leHBhbmRDbGF1c2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV4cGFuZCBpbnN0YW5jZW9mIEV4cGFuZENsYXVzZSAmJiBleHBhbmQucHJvcGVydHlQYXRocykgeyAvLyBleHBhbmQgY2xhdXNlXHJcbiAgICAgICAgZXhwYW5kID0gZXhwYW5kLnByb3BlcnR5UGF0aHM7XHJcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShleHBhbmQpKSB7XHJcbiAgICAgICAgaWYgKCFleHBhbmQuZXZlcnkoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIHR5cGVvZiBlbGVtID09PSAnc3RyaW5nJzsgfSkpIHtcclxuICAgICAgICAgIHRocm93ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyAnJztcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoXykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgXCJleHBhbmQgbXVzdCBiZSBhbiBleHBhbmQgc3RyaW5nLCBhcnJheSBvZiBzdHJpbmcgcGF0aHMsIG9yIGEgcXVlcnkgZXhwYW5kIGNsYXVzZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGJ1aWxkR3JhcGgoKSB7XHJcbiAgICBpZiAoZXhwYW5kICYmIGV4cGFuZCBpbnN0YW5jZW9mIEFycmF5ICYmIGV4cGFuZC5sZW5ndGgpIHtcclxuICAgICAgbGV0IGZucyA9IGV4cGFuZC5tYXAobWFrZVBhdGhGbik7XHJcbiAgICAgIGZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikgeyBmbihyb290cyk7IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWFrZSBmdW5jdGlvbiB0byBnZXQgZW50aXRpZXMgYWxvbmcgYSBzaW5nbGUgZXhwYW5kIHBhdGhcclxuICAvLyBzdWNoIGFzICdPcmRlcnMuT3JkZXJEZXRhaWxzLlByb2R1Y3QnXHJcbiAgZnVuY3Rpb24gbWFrZVBhdGhGbihwYXRoOiBzdHJpbmcpIHtcclxuICAgIGxldCBmbnMgPSBbXSBhcyBBcnJheTxGdW5jdGlvbj4sXHJcbiAgICAgIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpLFxyXG4gICAgICB0eXBlID0gcm9vdFR5cGU7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDAsIHNsZW4gPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBzbGVuOyBpKyspIHtcclxuICAgICAgbGV0IGYgPSBtYWtlUGF0aFNlZ21lbnRGbih0eXBlLCBzZWdtZW50c1tpXSk7XHJcbiAgICAgIHR5cGUgPSAoZiBhcyBhbnkpLm5hdlR5cGU7XHJcbiAgICAgIGZucy5wdXNoKGYpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiBwYXRoRm4oZW50aXRpZXM6IEFycmF5PEVudGl0eT4pIHtcclxuICAgICAgZm9yIChsZXQgaiA9IDAsIGZsZW4gPSBmbnMubGVuZ3RoOyBqIDwgZmxlbjsgaisrKSB7XHJcbiAgICAgICAgbGV0IGVsZW4gPSBlbnRpdGllcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGVsZW4gPT09IDApIHsgcmV0dXJuOyB9IC8vIG5vdGhpbmcgbGVmdCB0byBleHBsb3JlXHJcbiAgICAgICAgLy8gZm4gdG8gZ2V0IHJlbGF0ZWQgZW50aXRpZXMgZm9yIHRoaXMgcGF0aCBzZWdtZW50XHJcbiAgICAgICAgbGV0IGZuID0gZm5zW2pdO1xyXG4gICAgICAgIC8vIGdldCBlbnRpdGllcyByZWxhdGVkIGJ5IHRoaXMgcGF0aCBzZWdtZW50XHJcbiAgICAgICAgbGV0IHJlbGF0ZWQgPSBbXSBhcyBBcnJheTxFbnRpdHk+O1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZWxlbjsgaysrKSB7XHJcbiAgICAgICAgICByZWxhdGVkID0gcmVsYXRlZC5jb25jYXQoZm4oZW50aXRpZXNba10pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRkVG9HcmFwaChyZWxhdGVkKTtcclxuICAgICAgICBpZiAoaiA+PSBmbGVuIC0gMSkgeyByZXR1cm47IH0gLy8gbm8gbW9yZSBwYXRoIHNlZ21lbnRzXHJcblxyXG4gICAgICAgIC8vIHJlc2V0IGVudGl0aWVzIHRvIGRlZHVwZWQgcmVsYXRlZCBlbnRpdGllc1xyXG4gICAgICAgIGVudGl0aWVzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgbCA9IDAsIHJsZW4gPSByZWxhdGVkLmxlbmd0aDsgbCA8IHJsZW47IGwrKykge1xyXG4gICAgICAgICAgbGV0IHIgPSByZWxhdGVkW2xdO1xyXG4gICAgICAgICAgaWYgKGVudGl0aWVzLmluZGV4T2YocikgPCAwKSB7IGVudGl0aWVzLnB1c2gocik7IH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBNYWtlIGZ1bmN0aW9uIHRvIGdldCBlbnRpdGllcyBhbG9uZyBhIHNpbmdsZSBleHBhbmQgcGF0aCBzZWdtZW50XHJcbiAgLy8gc3VjaCBhcyB0aGUgJ09yZGVyRGV0YWlscycgaW4gdGhlICdPcmRlcnMuT3JkZXJEZXRhaWxzLlByb2R1Y3QnIHBhdGhcclxuICBmdW5jdGlvbiBtYWtlUGF0aFNlZ21lbnRGbihiYXNlVHlwZTogRW50aXR5VHlwZSwgc2VnbWVudDogc3RyaW5nKSB7XHJcbiAgICBsZXQgYmFzZVR5cGVOYW1lOiBzdHJpbmcsIGZuID0gdW5kZWZpbmVkLCBuYXZUeXBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgYmFzZVR5cGVOYW1lID0gYmFzZVR5cGUubmFtZTtcclxuICAgICAgbGV0IG5hdiA9IGJhc2VUeXBlLmdldE5hdmlnYXRpb25Qcm9wZXJ0eShzZWdtZW50KTtcclxuICAgICAgbGV0IGZrTmFtZSA9IG5hdi5mb3JlaWduS2V5TmFtZXNbMF07XHJcbiAgICAgIGlmICghbmF2KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNlZ21lbnQgKyBcIiBpcyBub3QgYSBuYXZpZ2F0aW9uIHByb3BlcnR5IG9mIFwiICsgYmFzZVR5cGVOYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBuYXZUeXBlID0gbmF2LmVudGl0eVR5cGU7XHJcbiAgICAgIC8vIGFkZCBkZXJpdmVkIHR5cGVzXHJcbiAgICAgIGxldCBuYXZUeXBlcyA9IG5hdlR5cGUuZ2V0U2VsZkFuZFN1YnR5cGVzKCk7XHJcbiAgICAgIGxldCBncnBzID0gW10gYXMgQXJyYXk8RW50aXR5R3JvdXA+OyAvLyBub24tZW1wdHkgZ3JvdXBzIGZvciB0aGVzZSB0eXBlc1xyXG4gICAgICBuYXZUeXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XHJcbiAgICAgICAgbGV0IGdycCA9IGVudGl0eUdyb3VwTWFwW3QubmFtZV07XHJcbiAgICAgICAgaWYgKGdycCAmJiBncnAuX2VudGl0aWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGdycHMucHVzaChncnApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBncnBDb3VudCA9IGdycHMubGVuZ3RoO1xyXG4gICAgICBpZiAoZ3JwQ291bnQgPT09IDApIHtcclxuICAgICAgICAvLyBubyByZWxhdGVkIGVudGl0aWVzIGluIGNhY2hlXHJcbiAgICAgICAgZm4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBbXSBhcyBBcnJheTxFbnRpdHk+OyB9O1xyXG4gICAgICB9IGVsc2UgaWYgKGZrTmFtZSkge1xyXG4gICAgICAgIGZuID0gZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KSB7XHJcbiAgICAgICAgICBsZXQgdmFsID0gbnVsbDtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBrZXlWYWx1ZSA9IGVudGl0eS5nZXRQcm9wZXJ0eShma05hbWUpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdycENvdW50OyBpICs9IDEpIHtcclxuICAgICAgICAgICAgICB2YWwgPSBncnBzW2ldLl9lbnRpdGllc1tncnBzW2ldLl9pbmRleE1hcFtrZXlWYWx1ZV1dO1xyXG4gICAgICAgICAgICAgIGlmICh2YWwpIHsgYnJlYWs7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXRocm93KGUpOyB9XHJcbiAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmtOYW1lID0gbmF2LmludmVyc2UgP1xyXG4gICAgICAgICAgbmF2LmludmVyc2UuZm9yZWlnbktleU5hbWVzWzBdIDpcclxuICAgICAgICAgIG5hdi5pbnZGb3JlaWduS2V5TmFtZXNbMF07XHJcbiAgICAgICAgaWYgKCFma05hbWUpIHsgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW52ZXJzZSBrZXlzXCIpOyB9XHJcbiAgICAgICAgZm4gPSBmdW5jdGlvbiAoZW50aXR5OiBFbnRpdHkpIHtcclxuICAgICAgICAgIGxldCB2YWxzID0gW10gYXMgQXJyYXk8RW50aXR5PjtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBrZXlWYWx1ZSA9IGVudGl0eS5lbnRpdHlBc3BlY3QuZ2V0S2V5KCkudmFsdWVzWzBdO1xyXG4gICAgICAgICAgICBncnBzLmZvckVhY2goZnVuY3Rpb24gKGdycCkge1xyXG4gICAgICAgICAgICAgIHZhbHMgPSB2YWxzLmNvbmNhdChncnAuX2VudGl0aWVzLmZpbHRlcihmdW5jdGlvbiAoZW4pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbiAmJiBlbi5nZXRQcm9wZXJ0eShma05hbWUpID09PSBrZXlWYWx1ZTtcclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXRocm93KGUpOyB9XHJcbiAgICAgICAgICByZXR1cm4gdmFscztcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIChmbiBhcyBhbnkpLm5hdlR5cGUgPSBuYXZUeXBlO1xyXG4gICAgICAoZm4gYXMgYW55KS5wYXRoID0gc2VnbWVudDtcclxuXHJcbiAgICB9IGNhdGNoIChlcnIpIHsgcmV0aHJvdyhlcnIpOyB9XHJcbiAgICByZXR1cm4gZm47XHJcblxyXG4gICAgZnVuY3Rpb24gcmV0aHJvdyhlOiBFcnJvcikge1xyXG4gICAgICBsZXQgdHlwZU5hbWUgPSBiYXNlVHlwZU5hbWUgfHwgYmFzZVR5cGU7XHJcbiAgICAgIGxldCBlcnJvciA9IG5ldyBFcnJvcihcIidnZXRFbnRpdHlHcmFwaCcgY2FuJ3QgZXhwYW5kICdcIiArIHNlZ21lbnQgKyBcIicgZm9yIFwiICsgdHlwZU5hbWUpO1xyXG4gICAgICAoZXJyb3IgYXMgYW55KS5pbm5lckVycm9yID0gZTtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './mixin-save-queuing';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLWNsaWVudC1taXhpbi1zYXZlLXF1ZXVpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnJlZXplLWNsaWVudC1taXhpbi1zYXZlLXF1ZXVpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL21peGluLXNhdmUtcXVldWluZyc7XG4iXX0=