breeze-client 2.1.1 → 2.1.3-mjs

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/LICENSE +1 -1
  2. package/adapter-ajax-angularjs/{breeze-client-adapter-ajax-angularjs.d.ts → index.d.ts} +1 -0
  3. package/adapter-ajax-fetch/{breeze-client-adapter-ajax-fetch.d.ts → index.d.ts} +1 -0
  4. package/adapter-ajax-httpclient/{breeze-client-adapter-ajax-httpclient.d.ts → index.d.ts} +1 -0
  5. package/adapter-ajax-jquery/{breeze-client-adapter-ajax-jquery.d.ts → index.d.ts} +1 -0
  6. package/adapter-ajax-post/{breeze-client-adapter-ajax-post.d.ts → index.d.ts} +1 -0
  7. package/adapter-data-service-odata/{breeze-client-adapter-data-service-odata.d.ts → index.d.ts} +1 -0
  8. package/adapter-data-service-webapi/{breeze-client-adapter-data-service-webapi.d.ts → index.d.ts} +1 -0
  9. package/adapter-model-library-backing-store/{breeze-client-adapter-model-library-backing-store.d.ts → index.d.ts} +1 -0
  10. package/adapter-model-library-ko/{breeze-client-adapter-model-library-ko.d.ts → index.d.ts} +1 -0
  11. package/adapter-uri-builder-json/{breeze-client-adapter-uri-builder-json.d.ts → index.d.ts} +1 -0
  12. package/adapter-uri-builder-odata/{breeze-client-adapter-uri-builder-odata.d.ts → index.d.ts} +1 -0
  13. package/esm2020/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +130 -0
  14. package/esm2020/adapter-ajax-angularjs/adapter-core.mjs +49 -0
  15. package/esm2020/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +5 -0
  16. package/esm2020/adapter-ajax-fetch/adapter-ajax-fetch.mjs +132 -0
  17. package/esm2020/adapter-ajax-fetch/adapter-core.mjs +49 -0
  18. package/esm2020/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +5 -0
  19. package/esm2020/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +137 -0
  20. package/esm2020/adapter-ajax-httpclient/adapter-core.mjs +49 -0
  21. package/esm2020/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +5 -0
  22. package/esm2020/adapter-ajax-jquery/adapter-ajax-jquery.mjs +103 -0
  23. package/esm2020/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +5 -0
  24. package/esm2020/adapter-ajax-post/adapter-ajax-post.mjs +77 -0
  25. package/esm2020/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +5 -0
  26. package/esm2020/adapter-data-service-odata/adapter-core.mjs +49 -0
  27. package/esm2020/adapter-data-service-odata/adapter-data-service-odata.mjs +456 -0
  28. package/esm2020/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +5 -0
  29. package/esm2020/adapter-data-service-webapi/adapter-data-service-webapi.mjs +93 -0
  30. package/esm2020/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +5 -0
  31. package/esm2020/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +268 -0
  32. package/esm2020/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +5 -0
  33. package/esm2020/adapter-model-library-ko/adapter-model-library-ko.mjs +240 -0
  34. package/esm2020/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +5 -0
  35. package/esm2020/adapter-uri-builder-json/adapter-core.mjs +49 -0
  36. package/esm2020/adapter-uri-builder-json/adapter-uri-builder-json.mjs +36 -0
  37. package/esm2020/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +5 -0
  38. package/esm2020/adapter-uri-builder-odata/adapter-core.mjs +49 -0
  39. package/esm2020/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +190 -0
  40. package/esm2020/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +5 -0
  41. package/esm2020/breeze-client.mjs +5 -0
  42. package/esm2020/index.mjs +2 -0
  43. package/esm2020/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +5 -0
  44. package/esm2020/mixin-get-entity-graph/mixin-get-entity-graph.mjs +269 -0
  45. package/esm2020/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +5 -0
  46. package/esm2020/mixin-save-queuing/mixin-save-queuing.mjs +400 -0
  47. package/esm2020/src/abstract-data-service-adapter.mjs +296 -0
  48. package/esm2020/src/array.mjs +4 -0
  49. package/esm2020/src/assert-param.mjs +312 -0
  50. package/esm2020/src/breeze.mjs +85 -0
  51. package/esm2020/src/complex-array.mjs +117 -0
  52. package/esm2020/src/config.mjs +223 -0
  53. package/esm2020/src/core.mjs +707 -0
  54. package/esm2020/src/csdl-metadata-parser.mjs +385 -0
  55. package/esm2020/src/data-service.mjs +203 -0
  56. package/esm2020/src/data-type.mjs +444 -0
  57. package/esm2020/src/default-property-interceptor.mjs +460 -0
  58. package/esm2020/src/entity-action.mjs +45 -0
  59. package/esm2020/src/entity-aspect.mjs +806 -0
  60. package/esm2020/src/entity-group.mjs +187 -0
  61. package/esm2020/src/entity-key.mjs +116 -0
  62. package/esm2020/src/entity-manager.mjs +2094 -0
  63. package/esm2020/src/entity-metadata.mjs +2109 -0
  64. package/esm2020/src/entity-query.mjs +996 -0
  65. package/esm2020/src/entity-state.mjs +99 -0
  66. package/esm2020/src/enum.mjs +141 -0
  67. package/esm2020/src/event.mjs +256 -0
  68. package/esm2020/src/interface-registry.mjs +41 -0
  69. package/esm2020/src/key-generator.mjs +108 -0
  70. package/esm2020/src/local-query-comparison-options.mjs +65 -0
  71. package/esm2020/src/mapping-context.mjs +405 -0
  72. package/esm2020/src/naming-convention.mjs +88 -0
  73. package/esm2020/src/observable-array.mjs +183 -0
  74. package/esm2020/src/predicate.mjs +1232 -0
  75. package/esm2020/src/primitive-array.mjs +85 -0
  76. package/esm2020/src/query-options.mjs +152 -0
  77. package/esm2020/src/relation-array.mjs +173 -0
  78. package/esm2020/src/save-options.mjs +41 -0
  79. package/esm2020/src/unattached-children-map.mjs +58 -0
  80. package/esm2020/src/validate.mjs +988 -0
  81. package/esm2020/src/validation-options.mjs +64 -0
  82. package/fesm2015/{breeze-client-adapter-ajax-angularjs.js → breeze-client-adapter-ajax-angularjs.mjs} +1 -1
  83. package/fesm2015/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  84. package/fesm2015/{breeze-client-adapter-ajax-fetch.js → breeze-client-adapter-ajax-fetch.mjs} +5 -3
  85. package/fesm2015/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  86. package/fesm2015/{breeze-client-adapter-ajax-httpclient.js → breeze-client-adapter-ajax-httpclient.mjs} +1 -1
  87. package/fesm2015/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  88. package/fesm2015/{breeze-client-adapter-ajax-jquery.js → breeze-client-adapter-ajax-jquery.mjs} +2 -2
  89. package/fesm2015/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  90. package/fesm2015/{breeze-client-adapter-ajax-post.js → breeze-client-adapter-ajax-post.mjs} +1 -1
  91. package/fesm2015/breeze-client-adapter-ajax-post.mjs.map +1 -0
  92. package/fesm2015/{breeze-client-adapter-data-service-odata.js → breeze-client-adapter-data-service-odata.mjs} +20 -22
  93. package/fesm2015/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  94. package/fesm2015/{breeze-client-adapter-data-service-webapi.js → breeze-client-adapter-data-service-webapi.mjs} +13 -13
  95. package/fesm2015/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  96. package/fesm2015/{breeze-client-adapter-model-library-backing-store.js → breeze-client-adapter-model-library-backing-store.mjs} +13 -13
  97. package/fesm2015/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  98. package/fesm2015/{breeze-client-adapter-model-library-ko.js → breeze-client-adapter-model-library-ko.mjs} +13 -13
  99. package/fesm2015/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  100. package/fesm2015/{breeze-client-adapter-uri-builder-json.js → breeze-client-adapter-uri-builder-json.mjs} +8 -8
  101. package/fesm2015/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  102. package/fesm2015/{breeze-client-adapter-uri-builder-odata.js → breeze-client-adapter-uri-builder-odata.mjs} +85 -86
  103. package/fesm2015/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  104. package/fesm2015/{breeze-client-mixin-get-entity-graph.js → breeze-client-mixin-get-entity-graph.mjs} +1 -1
  105. package/fesm2015/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  106. package/fesm2015/{breeze-client-mixin-save-queuing.js → breeze-client-mixin-save-queuing.mjs} +3 -3
  107. package/fesm2015/breeze-client-mixin-save-queuing.mjs.map +1 -0
  108. package/fesm2015/{breeze-client.js → breeze-client.mjs} +417 -422
  109. package/fesm2015/breeze-client.mjs.map +1 -0
  110. package/{fesm5/breeze-client-adapter-ajax-angularjs.js → fesm2020/breeze-client-adapter-ajax-angularjs.mjs} +41 -42
  111. package/fesm2020/breeze-client-adapter-ajax-angularjs.mjs.map +1 -0
  112. package/{fesm5/breeze-client-adapter-ajax-fetch.js → fesm2020/breeze-client-adapter-ajax-fetch.mjs} +44 -43
  113. package/fesm2020/breeze-client-adapter-ajax-fetch.mjs.map +1 -0
  114. package/{fesm5/breeze-client-adapter-ajax-httpclient.js → fesm2020/breeze-client-adapter-ajax-httpclient.mjs} +43 -44
  115. package/fesm2020/breeze-client-adapter-ajax-httpclient.mjs.map +1 -0
  116. package/{fesm5/breeze-client-adapter-ajax-jquery.js → fesm2020/breeze-client-adapter-ajax-jquery.mjs} +18 -19
  117. package/fesm2020/breeze-client-adapter-ajax-jquery.mjs.map +1 -0
  118. package/{fesm5/breeze-client-adapter-ajax-post.js → fesm2020/breeze-client-adapter-ajax-post.mjs} +8 -11
  119. package/fesm2020/breeze-client-adapter-ajax-post.mjs.map +1 -0
  120. package/{fesm5/breeze-client-adapter-data-service-odata.js → fesm2020/breeze-client-adapter-data-service-odata.mjs} +126 -134
  121. package/fesm2020/breeze-client-adapter-data-service-odata.mjs.map +1 -0
  122. package/{fesm5/breeze-client-adapter-data-service-webapi.js → fesm2020/breeze-client-adapter-data-service-webapi.mjs} +38 -42
  123. package/fesm2020/breeze-client-adapter-data-service-webapi.mjs.map +1 -0
  124. package/{fesm5/breeze-client-adapter-model-library-backing-store.js → fesm2020/breeze-client-adapter-model-library-backing-store.mjs} +63 -64
  125. package/fesm2020/breeze-client-adapter-model-library-backing-store.mjs.map +1 -0
  126. package/{fesm5/breeze-client-adapter-model-library-ko.js → fesm2020/breeze-client-adapter-model-library-ko.mjs} +57 -58
  127. package/fesm2020/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  128. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs +91 -0
  129. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  130. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs +245 -0
  131. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs.map +1 -0
  132. package/{fesm5/breeze-client-mixin-get-entity-graph.js → fesm2020/breeze-client-mixin-get-entity-graph.mjs} +45 -45
  133. package/fesm2020/breeze-client-mixin-get-entity-graph.mjs.map +1 -0
  134. package/{fesm5/breeze-client-mixin-save-queuing.js → fesm2020/breeze-client-mixin-save-queuing.mjs} +118 -128
  135. package/fesm2020/breeze-client-mixin-save-queuing.mjs.map +1 -0
  136. package/{fesm5/breeze-client.js → fesm2020/breeze-client.mjs} +3403 -3615
  137. package/fesm2020/breeze-client.mjs.map +1 -0
  138. package/mixin-get-entity-graph/{breeze-client-mixin-get-entity-graph.d.ts → index.d.ts} +1 -0
  139. package/mixin-save-queuing/{breeze-client-mixin-save-queuing.d.ts → index.d.ts} +1 -0
  140. package/mixin-save-queuing/mixin-save-queuing.d.ts +31 -1
  141. package/package.json +126 -12
  142. package/src/entity-metadata.d.ts +6 -4
  143. package/src/entity-query.d.ts +1 -1
  144. package/src/validate.d.ts +4 -3
  145. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  146. package/adapter-ajax-angularjs/package.json +0 -13
  147. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  148. package/adapter-ajax-fetch/package.json +0 -13
  149. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  150. package/adapter-ajax-httpclient/package.json +0 -17
  151. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  152. package/adapter-ajax-jquery/package.json +0 -13
  153. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  154. package/adapter-ajax-post/package.json +0 -13
  155. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  156. package/adapter-data-service-odata/package.json +0 -13
  157. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  158. package/adapter-data-service-webapi/package.json +0 -13
  159. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  160. package/adapter-model-library-backing-store/package.json +0 -13
  161. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  162. package/adapter-model-library-ko/package.json +0 -13
  163. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  164. package/adapter-uri-builder-json/package.json +0 -13
  165. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  166. package/adapter-uri-builder-odata/package.json +0 -13
  167. package/breeze-client.d.ts +0 -8
  168. package/breeze-client.metadata.json +0 -1
  169. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  170. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  171. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  172. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  173. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  174. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  175. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  176. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  177. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  178. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  179. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  180. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  181. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  182. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  183. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  184. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  185. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  186. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  187. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  188. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  189. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -743
  190. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  191. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  192. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  193. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -326
  194. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  195. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  196. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  197. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  198. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  199. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  200. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  201. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  202. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  203. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  204. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  205. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  206. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  207. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  208. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  209. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  210. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  211. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  212. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  213. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  214. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  215. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  216. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  217. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -578
  218. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  219. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  220. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  221. package/bundles/breeze-client.umd.js +0 -14094
  222. package/bundles/breeze-client.umd.js.map +0 -1
  223. package/bundles/breeze-client.umd.min.js +0 -16
  224. package/bundles/breeze-client.umd.min.js.map +0 -1
  225. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  226. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  227. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  228. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  229. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  230. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  231. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  232. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  233. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  234. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  235. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  236. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  237. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  238. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  239. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -459
  240. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  241. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -93
  242. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  243. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  244. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  245. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  246. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  247. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  248. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  249. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  250. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  251. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  252. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  253. package/esm2015/breeze-client.js +0 -9
  254. package/esm2015/index.js +0 -2
  255. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  256. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  257. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  258. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  259. package/esm2015/public_api.js +0 -2
  260. package/esm2015/src/abstract-data-service-adapter.js +0 -296
  261. package/esm2015/src/array.js +0 -4
  262. package/esm2015/src/assert-param.js +0 -312
  263. package/esm2015/src/breeze.js +0 -85
  264. package/esm2015/src/complex-array.js +0 -119
  265. package/esm2015/src/config.js +0 -223
  266. package/esm2015/src/core.js +0 -706
  267. package/esm2015/src/csdl-metadata-parser.js +0 -385
  268. package/esm2015/src/data-service.js +0 -203
  269. package/esm2015/src/data-type.js +0 -444
  270. package/esm2015/src/default-property-interceptor.js +0 -459
  271. package/esm2015/src/entity-action.js +0 -45
  272. package/esm2015/src/entity-aspect.js +0 -806
  273. package/esm2015/src/entity-group.js +0 -187
  274. package/esm2015/src/entity-key.js +0 -116
  275. package/esm2015/src/entity-manager.js +0 -2094
  276. package/esm2015/src/entity-metadata.js +0 -2109
  277. package/esm2015/src/entity-query.js +0 -996
  278. package/esm2015/src/entity-state.js +0 -99
  279. package/esm2015/src/enum.js +0 -141
  280. package/esm2015/src/event.js +0 -256
  281. package/esm2015/src/interface-registry.js +0 -41
  282. package/esm2015/src/key-generator.js +0 -108
  283. package/esm2015/src/local-query-comparison-options.js +0 -65
  284. package/esm2015/src/mapping-context.js +0 -405
  285. package/esm2015/src/naming-convention.js +0 -88
  286. package/esm2015/src/observable-array.js +0 -185
  287. package/esm2015/src/predicate.js +0 -1235
  288. package/esm2015/src/primitive-array.js +0 -87
  289. package/esm2015/src/query-options.js +0 -152
  290. package/esm2015/src/relation-array.js +0 -175
  291. package/esm2015/src/save-options.js +0 -41
  292. package/esm2015/src/unattached-children-map.js +0 -58
  293. package/esm2015/src/validate.js +0 -991
  294. package/esm2015/src/validation-options.js +0 -64
  295. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
  296. package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
  297. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  298. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
  299. package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
  300. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  301. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
  302. package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
  303. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  304. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
  305. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  306. package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
  307. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  308. package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
  309. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +0 -466
  310. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  311. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -98
  312. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  313. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
  314. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  315. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
  316. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  317. package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
  318. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
  319. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  320. package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
  321. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
  322. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  323. package/esm5/breeze-client.js +0 -9
  324. package/esm5/index.js +0 -2
  325. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  326. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  327. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  328. package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -411
  329. package/esm5/public_api.js +0 -2
  330. package/esm5/src/abstract-data-service-adapter.js +0 -302
  331. package/esm5/src/array.js +0 -4
  332. package/esm5/src/assert-param.js +0 -317
  333. package/esm5/src/breeze.js +0 -85
  334. package/esm5/src/complex-array.js +0 -119
  335. package/esm5/src/config.js +0 -228
  336. package/esm5/src/core.js +0 -714
  337. package/esm5/src/csdl-metadata-parser.js +0 -385
  338. package/esm5/src/data-service.js +0 -207
  339. package/esm5/src/data-type.js +0 -451
  340. package/esm5/src/default-property-interceptor.js +0 -459
  341. package/esm5/src/entity-action.js +0 -52
  342. package/esm5/src/entity-aspect.js +0 -812
  343. package/esm5/src/entity-group.js +0 -189
  344. package/esm5/src/entity-key.js +0 -118
  345. package/esm5/src/entity-manager.js +0 -2112
  346. package/esm5/src/entity-metadata.js +0 -2144
  347. package/esm5/src/entity-query.js +0 -1023
  348. package/esm5/src/entity-state.js +0 -106
  349. package/esm5/src/enum.js +0 -144
  350. package/esm5/src/event.js +0 -259
  351. package/esm5/src/interface-registry.js +0 -43
  352. package/esm5/src/key-generator.js +0 -111
  353. package/esm5/src/local-query-comparison-options.js +0 -67
  354. package/esm5/src/mapping-context.js +0 -407
  355. package/esm5/src/naming-convention.js +0 -90
  356. package/esm5/src/observable-array.js +0 -201
  357. package/esm5/src/predicate.js +0 -1300
  358. package/esm5/src/primitive-array.js +0 -87
  359. package/esm5/src/query-options.js +0 -167
  360. package/esm5/src/relation-array.js +0 -175
  361. package/esm5/src/save-options.js +0 -43
  362. package/esm5/src/unattached-children-map.js +0 -60
  363. package/esm5/src/validate.js +0 -996
  364. package/esm5/src/validation-options.js +0 -66
  365. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  366. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  367. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  368. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  369. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  370. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  371. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  372. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  373. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  374. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  375. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  376. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  377. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  378. package/fesm2015/breeze-client.js.map +0 -1
  379. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  380. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  381. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  382. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  383. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  384. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  385. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  386. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  387. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  388. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  389. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  390. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  391. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  392. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  393. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  394. package/fesm5/breeze-client.js.map +0 -1
  395. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  396. package/mixin-get-entity-graph/package.json +0 -13
  397. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  398. package/mixin-save-queuing/package.json +0 -13
  399. package/public_api.d.ts +0 -1
@@ -1,400 +0,0 @@
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: 2.0.6 Steve Schmitt - convert to TypeScript, move to breeze-client repo, change enableSaveQueuing function
9
- * Version: 2.0.5 Ward Bell
10
- * --------------------------------------------------------------------------------
11
- * Adds "Save Queuing" capability to new EntityManagers
12
- *
13
- * Save Queuing automatically queues and defers an EntityManager.saveChanges call
14
- * when another save is in progress for that manager and the server has not yet responded.
15
- * This feature is helpful when your app needs to allow rapid, continuous changes
16
- * to entities that may be in the process of being saved.
17
- *
18
- * Without "Save Queuing", an EntityManager will throw an exception
19
- * when you call saveChanges for an entity which is currently being saved.
20
- *
21
- * !!! Use with caution !!!
22
- * It is usually better to disable user input while a save is in progress.
23
- * Save Queuing may be appropriate for simple "auto-save" scenarios
24
- * when the save latency is "short" (under a few seconds).
25
- *
26
- * Save Queuing is NOT intended for occassionally disconnected or offline scenarios.
27
- *
28
- * Save Queuing is experimental. It will not become a part of BreezeJS core
29
- * but might become an official Breeze plugin in future
30
- * although not necessarily in this form or with this API
31
- *
32
- * Must call EntityManager.enableSaveQueuing(true) to turn it on;
33
- * EntityManager.enableSaveQueuing(false) restores the manager's original
34
- * saveChanges method as it was at the time saveQueuing was first enabled.
35
- *
36
- * This module adds "enableSaveQueuing" to the EntityManager prototype.
37
- * Calling "enableSaveQueuing(true)" adds a new _saveQueuing object
38
- * to the manager instance.
39
- *
40
- * See DocCode:saveQueuingTests.js
41
- * https://github.com/Breeze/breeze.js.samples/blob/master/net/DocCode/DocCode/tests/saveQueuingTests.js
42
- *
43
- * LIMITATIONS
44
- * - Can't handle changes to the primary key (dangerous in any case)
45
- * - Assumes promises. Does not support the (deprecated) success and fail callbacks
46
- * - Does not queue saveOptions. The first one is re-used for all queued saves.
47
- * - Does not deal with export/import of entities while save is inflight
48
- * - Does not deal with rejectChanges while save is in flight
49
- * - Does not support parallel saves even when the change-sets are independent.
50
- * The native saveChanges allows such saves.
51
- * SaveQueuing does not; too complex and doesn't fit the primary scenario anyway.
52
- * - The resolved saveResult is the saveResult of the last completed save
53
- * - A queued save that might have succeeded if saved immediately
54
- * may fail because the server no longer accepts it later
55
- * - Prior to Breeze v.1.5.3, a queued save that might have succeeded
56
- * if saved immediately will fail if subsequently attempt to save
57
- * an invalid entity. Can detect and circumvent after v.1.5.3.
58
- *
59
- * All members of EntityManager._saveQueuing are internal;
60
- * touch them at your own risk.
61
- */
62
- //#endregion
63
- import { EntityState, breeze } from 'breeze-client';
64
- export function enableSaveQueuing(em, enable = true) {
65
- let saveQueuing = em['_saveQueueing'] ||
66
- (em['_saveQueuing'] = new SaveQueuing(em));
67
- enable = (enable === undefined) ? true : enable;
68
- saveQueuing._isEnabled = enable;
69
- if (enable) {
70
- // delegate to save changes queuing
71
- em.saveChanges = saveChangesWithQueuing;
72
- }
73
- else {
74
- // revert to the native EntityManager.saveChanges
75
- em.saveChanges = em['_saveQueuing'].baseSaveChanges;
76
- }
77
- }
78
- /**
79
- * Replacement for EntityManager.saveChanges
80
- * This version queues saveChanges calls while a real save is in progress
81
- **/
82
- function saveChangesWithQueuing(entities, saveOptions) {
83
- try {
84
- // `this` is an EntityManager
85
- let saveQueuing = this._saveQueuing;
86
- if (saveQueuing.isSaving) {
87
- // save in progress; queue the save for later
88
- return saveQueuing.queueSaveChanges(entities);
89
- }
90
- else {
91
- // note that save is in progress; then save
92
- saveQueuing.isSaving = true;
93
- saveQueuing.saveOptions = saveOptions;
94
- return saveQueuing.saveChanges(entities, saveOptions);
95
- }
96
- }
97
- catch (err) {
98
- return Promise.reject(err);
99
- }
100
- }
101
- ///////// SaveQueuing /////////
102
- class SaveQueuing {
103
- constructor(entityManager) {
104
- this.entityManager = entityManager;
105
- this.baseSaveChanges = entityManager.saveChanges;
106
- this.isSaving = false;
107
- }
108
- isEnabled() {
109
- return this._isEnabled;
110
- }
111
- getSavedNothingResult() {
112
- return { entities: [], keyMappings: [] };
113
- }
114
- queueSaveChanges(entities) {
115
- let self = this; // `this` is a SaveQueuing
116
- let em = self.entityManager;
117
- let changes = entities || em.getChanges();
118
- if (changes.length === 0) {
119
- return Promise.resolve(this.getSavedNothingResult());
120
- }
121
- let valError = em.saveChangesValidateOnClient(changes);
122
- if (valError) {
123
- return Promise.reject(valError);
124
- }
125
- let saveMemo = self.nextSaveMemo || (self.nextSaveMemo = new SaveMemo());
126
- memoizeChanges();
127
- let deferred = self.nextSaveDeferred || (self.nextSaveDeferred = new Deferred());
128
- return deferred.promise;
129
- function memoizeChanges() {
130
- if (changes.length === 0) {
131
- return;
132
- }
133
- let queuedChanges = saveMemo.queuedChanges;
134
- changes.forEach(e => {
135
- if (!e.entityAspect.isBeingSaved && queuedChanges.indexOf(e) === -1) {
136
- queuedChanges.push(e);
137
- }
138
- });
139
- saveMemo.updateEntityMemos(changes);
140
- }
141
- }
142
- saveChanges(entities, saveOptions) {
143
- let self = this; // `this` is a SaveQueuing
144
- let promise = self.baseSaveChanges.call(self.entityManager, entities, saveOptions || self.saveOptions)
145
- .then(function (saveResult) { return self.saveSucceeded(saveResult); })
146
- .then(null, function (error) { console.log(error); return self.saveFailed(error); });
147
- rememberAddedOriginalValues(entities); // do it after ... so don't send OrigValues to the server
148
- return promise;
149
- function rememberAddedOriginalValues(entities) {
150
- // added entities normally don't have original values but these will now
151
- let added = entities ?
152
- entities.filter(function (e) { return e.entityAspect.entityState.isAdded(); }) :
153
- self.entityManager.getEntities(null, EntityState.Added);
154
- added.forEach(entity => {
155
- let props = entity.entityType.dataProperties;
156
- let originalValues = entity.entityAspect.originalValues;
157
- props.forEach(dp => {
158
- if (dp.isPartOfKey) {
159
- return;
160
- }
161
- originalValues[dp.name] = entity.getProperty(dp.name);
162
- });
163
- });
164
- }
165
- }
166
- saveSucceeded(saveResult) {
167
- let self = this; // `this` is a SaveQueueing
168
- let activeSaveDeferred = self.activeSaveDeferred;
169
- let nextSaveDeferred = self.nextSaveDeferred;
170
- let nextSaveMemo = self.nextSaveMemo;
171
- // prepare as if nothing queued or left to save
172
- self.isSaving = false;
173
- self.activeSaveDeferred = null;
174
- self.activeSaveMemo = null;
175
- self.nextSaveDeferred = null;
176
- self.nextSaveMemo = null;
177
- if (nextSaveMemo) {
178
- // a save was queued since last save returned
179
- nextSaveMemo.pkFixup(saveResult.keyMappings);
180
- nextSaveMemo.applyToSavedEntities(self.entityManager, saveResult.entities);
181
- // remove detached entities from queuedChanges
182
- let queuedChanges = nextSaveMemo.queuedChanges.filter(e => {
183
- return !e.entityAspect.entityState.isDetached();
184
- });
185
- if (queuedChanges.length > 0) {
186
- // save again
187
- self.isSaving = true;
188
- // remember the queued changes that triggered this save
189
- self.activeSaveDeferred = nextSaveDeferred;
190
- self.activeSaveMemo = nextSaveMemo;
191
- self.saveChanges(queuedChanges, this.saveOptions);
192
- }
193
- else if (nextSaveDeferred) {
194
- nextSaveDeferred.resolve(this.getSavedNothingResult());
195
- }
196
- }
197
- if (activeSaveDeferred) {
198
- activeSaveDeferred.resolve(saveResult);
199
- }
200
- return saveResult; // for the current promise chain
201
- }
202
- saveFailed(error) {
203
- let self = this; // `this` is a SaveQueueing
204
- error = new QueuedSaveFailedError(error, self);
205
- let activeSaveDeferred = self.activeSaveDeferred;
206
- let nextSaveDeferred = self.nextSaveDeferred;
207
- self.isSaving = false;
208
- self.activeSaveDeferred = null;
209
- self.activeSaveMemo = null;
210
- self.nextSaveDeferred = null;
211
- self.nextSaveMemo = null;
212
- if (activeSaveDeferred) {
213
- activeSaveDeferred.reject(error);
214
- }
215
- if (nextSaveDeferred) {
216
- nextSaveDeferred.reject(error);
217
- }
218
- return Promise.reject(error); // let promise chain hear error
219
- }
220
- }
221
- /// for backward compat with older Promise implementation
222
- class Deferred {
223
- constructor() {
224
- this.promise = new Promise(function (resolve, reject) {
225
- this.resolve = resolve;
226
- this.reject = reject;
227
- }.bind(this));
228
- }
229
- }
230
- ////////// QueuedSaveFailedError /////////
231
- // Error sub-class thrown when rejecting queued saves.
232
- class QueuedSaveFailedError extends Error {
233
- // Error sub-class thrown when rejecting queued saves.
234
- // `innerError` is the actual save error
235
- // `failedSaveMemo` is the saveMemo that prompted this save
236
- // `nextSaveMemo` holds queued changes accumulated since that save.
237
- // You may try to recover using this info. Good luck with that.
238
- constructor(errObject, saveQueuing) {
239
- super();
240
- this.name = "QueuedSaveFailedError";
241
- this.innerError = errObject;
242
- this.message = "Queued save failed: " + errObject.message;
243
- this.failedSaveMemo = saveQueuing.activeSaveMemo;
244
- this.nextSaveMemo = saveQueuing.nextSaveMemo;
245
- }
246
- }
247
- ////////// SaveMemo ////////////////
248
- // SaveMemo is a record of changes for a queued save, consisting of:
249
- // entityMemos: info about entities that are being saved and
250
- // have been changed since the save started
251
- // queuedChanges: entities that are queued for save but
252
- // are not currently being saved
253
- class SaveMemo {
254
- constructor() {
255
- this.entityMemos = {};
256
- this.queuedChanges = [];
257
- }
258
- applyToSavedEntities(entityManager, savedEntities) {
259
- let entityMemos = this.entityMemos; // `this` is a SaveMemo
260
- let queuedChanges = this.queuedChanges;
261
- let restorePublishing = this.disableManagerPublishing(entityManager);
262
- try {
263
- savedEntities.forEach(saved => {
264
- let key = this.makeEntityMemoKey(saved);
265
- let entityMemo = entityMemos[key];
266
- let resave = entityMemo && entityMemo.applyToSavedEntity(saved);
267
- if (resave) {
268
- queuedChanges.push(saved);
269
- }
270
- });
271
- }
272
- finally {
273
- restorePublishing();
274
- // D#2651 hasChanges will be wrong if changes made while save in progress
275
- let hasChanges = queuedChanges.length > 0;
276
- // Must use breeze internal method to properly set this flag true
277
- if (hasChanges) {
278
- entityManager._setHasChanges(true);
279
- }
280
- }
281
- }
282
- disableManagerPublishing(manager) {
283
- let Event = breeze.Event;
284
- Event.enable('entityChanged', manager, false);
285
- Event.enable('hasChangesChanged', manager, false);
286
- return function restorePublishing() {
287
- Event.enable('entityChanged', manager, true);
288
- Event.enable('hasChangesChanged', manager, true);
289
- };
290
- }
291
- pkFixup(keyMappings) {
292
- let entityMemos = this.entityMemos; // `this` is a SaveMemo
293
- keyMappings.forEach(km => {
294
- let type = km.entityTypeName;
295
- let tempKey = type + '|' + km.tempValue;
296
- if (entityMemos[tempKey]) {
297
- entityMemos[type + '|' + km.realValue] = entityMemos[tempKey];
298
- delete entityMemos[tempKey];
299
- }
300
- for (let memoKey in entityMemos) {
301
- entityMemos[memoKey].fkFixup(km);
302
- }
303
- });
304
- }
305
- makeEntityMemoKey(entity) {
306
- let entityKey = entity.entityAspect.getKey();
307
- return entityKey.entityType.name + '|' + entityKey.values;
308
- }
309
- updateEntityMemos(changes) {
310
- let entityMemos = this.entityMemos; // `this` is a SaveMemo
311
- changes.forEach(change => {
312
- // only update entityMemo for entity being save
313
- if (!change.entityAspect.isBeingSaved) {
314
- return;
315
- }
316
- let key = this.makeEntityMemoKey(change);
317
- let entityMemo = entityMemos[key] || (entityMemos[key] = new EntityMemo(change));
318
- entityMemo.update(change);
319
- });
320
- }
321
- }
322
- ///////// EntityMemo Type ///////////////
323
- // Information about an entity that is being saved
324
- // and which has been changed since that save started
325
- class EntityMemo {
326
- constructor(entity) {
327
- this.entity = entity;
328
- this.pendingChanges = {};
329
- }
330
- applyToSavedEntity(saved) {
331
- let entityMemo = this;
332
- let aspect = saved.entityAspect;
333
- if (aspect.entityState.isDetached()) {
334
- return false;
335
- }
336
- else if (entityMemo.isDeleted) {
337
- aspect.setDeleted();
338
- return true;
339
- }
340
- // treat entity with pending changes as modified
341
- let props = Object.keys(entityMemo.pendingChanges);
342
- if (props.length === 0) {
343
- return false;
344
- }
345
- let originalValues = aspect.originalValues;
346
- props.forEach(name => {
347
- originalValues[name] = saved.getProperty(name);
348
- saved.setProperty(name, entityMemo.pendingChanges[name]);
349
- });
350
- aspect.setModified();
351
- return true;
352
- }
353
- fkFixup(keyMapping) {
354
- let entityMemo = this;
355
- let type = entityMemo.entity.entityType;
356
- let fkProps = type.foreignKeyProperties;
357
- fkProps.forEach(fkProp => {
358
- if (fkProp.parentType.name === keyMapping.entityTypeName &&
359
- entityMemo.pendingChanges[fkProp.name] === keyMapping.tempValue) {
360
- entityMemo.pendingChanges[fkProp.name] = keyMapping.realValue;
361
- }
362
- });
363
- }
364
- // update the entityMemo of changes to an entity being saved
365
- // so that we know how to save it again later
366
- update() {
367
- let entityMemo = this;
368
- let props;
369
- let entity = entityMemo.entity;
370
- let aspect = entity.entityAspect;
371
- let stateName = aspect.entityState.name;
372
- switch (stateName) {
373
- case 'Added':
374
- let originalValues = aspect.originalValues;
375
- props = entity.entityType.dataProperties;
376
- props.forEach(dp => {
377
- if (dp.isPartOfKey) {
378
- return;
379
- }
380
- let name = dp.name;
381
- let value = entity.getProperty(name);
382
- if (originalValues[name] !== value) {
383
- entityMemo.pendingChanges[name] = value;
384
- }
385
- });
386
- break;
387
- case 'Deleted':
388
- entityMemo.isDeleted = true;
389
- entityMemo.pendingChanges = {};
390
- break;
391
- case 'Modified':
392
- props = Object.keys(aspect.originalValues);
393
- props.forEach(name => {
394
- entityMemo.pendingChanges[name] = entity.getProperty(name);
395
- });
396
- break;
397
- }
398
- }
399
- }
400
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW4tc2F2ZS1xdWV1aW5nLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC9taXhpbi1zYXZlLXF1ZXVpbmcvIiwic291cmNlcyI6WyJtaXhpbi1zYXZlLXF1ZXVpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkNBQTZDO0FBQzdDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJERztBQUNILFlBQVk7QUFDWixPQUFPLEVBQXFDLFdBQVcsRUFBYyxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkcsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEVBQWlCLEVBQUUsU0FBa0IsSUFBSTtJQUN6RSxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO1FBQ25DLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFN0MsTUFBTSxHQUFHLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoRCxXQUFXLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUNoQyxJQUFJLE1BQU0sRUFBRTtRQUNWLG1DQUFtQztRQUNuQyxFQUFFLENBQUMsV0FBVyxHQUFHLHNCQUFzQixDQUFDO0tBQ3pDO1NBQU07UUFDTCxpREFBaUQ7UUFDakQsRUFBRSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsZUFBZSxDQUFDO0tBQ3JEO0FBQ0gsQ0FBQztBQUVEOzs7SUFHSTtBQUNKLFNBQVMsc0JBQXNCLENBQUMsUUFBeUIsRUFBRSxXQUFnQjtJQUN6RSxJQUFJO1FBQ0YsNkJBQTZCO1FBQzdCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDcEMsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFF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QUFDLElBQUksQ0FBQztRQUN4QyxRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztnQkFDM0MsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO2dCQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUNqQixJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7d0JBQUUsT0FBTztxQkFBRTtvQkFDL0IsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztvQkFDbkIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDckMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFO3dCQUNsQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDekM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUVSLEtBQUssU0FBUztnQkFDWixVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDNUIsVUFBVSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0JBQy9CLE1BQU07WUFFUixLQUFLLFVBQVU7Z0JBQ2IsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMzQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNuQixVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdELENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07U0FDVDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vI3JlZ2lvbiBDb3B5cmlnaHQsIFZlcnNpb24sIGFuZCBEZXNjcmlwdGlvblxyXG4vKlxyXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIxIElkZWFCbGFkZSwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogVXNlLCByZXByb2R1Y3Rpb24sIGRpc3RyaWJ1dGlvbiwgYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGlzIGNvZGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kXHJcbiAqIGNvbmRpdGlvbnMgb2YgdGhlIElkZWFCbGFkZSBCcmVlemUgbGljZW5zZSwgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYnJlZXplanMuY29tL2xpY2Vuc2VcclxuICpcclxuICogQXV0aG9yOiBXYXJkIEJlbGxcclxuICogVmVyc2lvbjogMi4wLjYgU3RldmUgU2NobWl0dCAtIGNvbnZlcnQgdG8gVHlwZVNjcmlwdCwgbW92ZSB0byBicmVlemUtY2xpZW50IHJlcG8sIGNoYW5nZSBlbmFibGVTYXZlUXVldWluZyBmdW5jdGlvblxyXG4gKiBWZXJzaW9uOiAyLjAuNSBXYXJkIEJlbGxcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICogQWRkcyBcIlNhdmUgUXVldWluZ1wiIGNhcGFiaWxpdHkgdG8gbmV3IEVudGl0eU1hbmFnZXJzXHJcbiAqXHJcbiAqIFNhdmUgUXVldWluZyBhdXRvbWF0aWNhbGx5IHF1ZXVlcyBhbmQgZGVmZXJzIGFuIEVudGl0eU1hbmFnZXIuc2F2ZUNoYW5nZXMgY2FsbFxyXG4gKiB3aGVuIGFub3RoZXIgc2F2ZSBpcyBpbiBwcm9ncmVzcyBmb3IgdGhhdCBtYW5hZ2VyIGFuZCB0aGUgc2VydmVyIGhhcyBub3QgeWV0IHJlc3BvbmRlZC5cclxuICogVGhpcyBmZWF0dXJlIGlzIGhlbHBmdWwgd2hlbiB5b3VyIGFwcCBuZWVkcyB0byBhbGxvdyByYXBpZCwgY29udGludW91cyBjaGFuZ2VzXHJcbiAqIHRvIGVudGl0aWVzIHRoYXQgbWF5IGJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHNhdmVkLlxyXG4gKlxyXG4gKiBXaXRob3V0IFwiU2F2ZSBRdWV1aW5nXCIsIGFuIEVudGl0eU1hbmFnZXIgd2lsbCB0aHJvdyBhbiBleGNlcHRpb25cclxuICogd2hlbiB5b3UgY2FsbCBzYXZlQ2hhbmdlcyBmb3IgYW4gZW50aXR5IHdoaWNoIGlzIGN1cnJlbnRseSBiZWluZyBzYXZlZC5cclxuICpcclxuICogISEhIFVzZSB3aXRoIGNhdXRpb24gISEhXHJcbiAqIEl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIGRpc2FibGUgdXNlciBpbnB1dCB3aGlsZSBhIHNhdmUgaXMgaW4gcHJvZ3Jlc3MuXHJcbiAqIFNhdmUgUXVldWluZyBtYXkgYmUgYXBwcm9wcmlhdGUgZm9yIHNpbXBsZSBcImF1dG8tc2F2ZVwiIHNjZW5hcmlvc1xyXG4gKiB3aGVuIHRoZSBzYXZlIGxhdGVuY3kgaXMgXCJzaG9ydFwiICh1bmRlciBhIGZldyBzZWNvbmRzKS5cclxuICpcclxuICogU2F2ZSBRdWV1aW5nIGlzIE5PVCBpbnRlbmRlZCBmb3Igb2NjYXNzaW9uYWxseSBkaXNjb25uZWN0ZWQgb3Igb2ZmbGluZSBzY2VuYXJpb3MuXHJcbiAqXHJcbiAqIFNhdmUgUXVldWluZyBpcyBleHBlcmltZW50YWwuIEl0IHdpbGwgbm90IGJlY29tZSBhIHBhcnQgb2YgQnJlZXplSlMgY29yZVxyXG4gKiBidXQgbWlnaHQgYmVjb21lIGFuIG9mZmljaWFsIEJyZWV6ZSBwbHVnaW4gaW4gZnV0dXJlXHJcbiAqIGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSBpbiB0aGlzIGZvcm0gb3Igd2l0aCB0aGlzIEFQSVxyXG4gKlxyXG4gKiBNdXN0IGNhbGwgRW50aXR5TWFuYWdlci5lbmFibGVTYXZlUXVldWluZyh0cnVlKSB0byB0dXJuIGl0IG9uO1xyXG4gKiBFbnRpdHlNYW5hZ2VyLmVuYWJsZVNhdmVRdWV1aW5nKGZhbHNlKSByZXN0b3JlcyB0aGUgbWFuYWdlcidzIG9yaWdpbmFsXHJcbiAqIHNhdmVDaGFuZ2VzIG1ldGhvZCBhcyBpdCB3YXMgYXQgdGhlIHRpbWUgc2F2ZVF1ZXVpbmcgd2FzIGZpcnN0IGVuYWJsZWQuXHJcbiAqXHJcbiAqIFRoaXMgbW9kdWxlIGFkZHMgXCJlbmFibGVTYXZlUXVldWluZ1wiIHRvIHRoZSBFbnRpdHlNYW5hZ2VyIHByb3RvdHlwZS5cclxuICogQ2FsbGluZyBcImVuYWJsZVNhdmVRdWV1aW5nKHRydWUpXCIgYWRkcyBhIG5ldyBfc2F2ZVF1ZXVpbmcgb2JqZWN0XHJcbiAqIHRvIHRoZSBtYW5hZ2VyIGluc3RhbmNlLlxyXG4gKlxyXG4gKiBTZWUgRG9jQ29kZTpzYXZlUXVldWluZ1Rlc3RzLmpzXHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9CcmVlemUvYnJlZXplLmpzLnNhbXBsZXMvYmxvYi9tYXN0ZXIvbmV0L0RvY0NvZGUvRG9jQ29kZS90ZXN0cy9zYXZlUXVldWluZ1Rlc3RzLmpzXHJcbiAqXHJcbiAqIExJTUlUQVRJT05TXHJcbiAqIC0gQ2FuJ3QgaGFuZGxlIGNoYW5nZXMgdG8gdGhlIHByaW1hcnkga2V5IChkYW5nZXJvdXMgaW4gYW55IGNhc2UpXHJcbiAqIC0gQXNzdW1lcyBwcm9taXNlcy4gRG9lcyBub3Qgc3VwcG9ydCB0aGUgKGRlcHJlY2F0ZWQpIHN1Y2Nlc3MgYW5kIGZhaWwgY2FsbGJhY2tzXHJcbiAqIC0gRG9lcyBub3QgcXVldWUgc2F2ZU9wdGlvbnMuIFRoZSBmaXJzdCBvbmUgaXMgcmUtdXNlZCBmb3IgYWxsIHF1ZXVlZCBzYXZlcy5cclxuICogLSBEb2VzIG5vdCBkZWFsIHdpdGggZXhwb3J0L2ltcG9ydCBvZiBlbnRpdGllcyB3aGlsZSBzYXZlIGlzIGluZmxpZ2h0XHJcbiAqIC0gRG9lcyBub3QgZGVhbCB3aXRoIHJlamVjdENoYW5nZXMgd2hpbGUgc2F2ZSBpcyBpbiBmbGlnaHRcclxuICogLSBEb2VzIG5vdCBzdXBwb3J0IHBhcmFsbGVsIHNhdmVzIGV2ZW4gd2hlbiB0aGUgY2hhbmdlLXNldHMgYXJlIGluZGVwZW5kZW50LlxyXG4gKiAgIFRoZSBuYXRpdmUgc2F2ZUNoYW5nZXMgYWxsb3dzIHN1Y2ggc2F2ZXMuXHJcbiAqICAgU2F2ZVF1ZXVpbmcgZG9lcyBub3Q7IHRvbyBjb21wbGV4IGFuZCBkb2Vzbid0IGZpdCB0aGUgcHJpbWFyeSBzY2VuYXJpbyBhbnl3YXkuXHJcbiAqIC0gVGhlIHJlc29sdmVkIHNhdmVSZXN1bHQgaXMgdGhlIHNhdmVSZXN1bHQgb2YgdGhlIGxhc3QgY29tcGxldGVkIHNhdmVcclxuICogLSBBIHF1ZXVlZCBzYXZlIHRoYXQgbWlnaHQgaGF2ZSBzdWNjZWVkZWQgaWYgc2F2ZWQgaW1tZWRpYXRlbHlcclxuICogICBtYXkgZmFpbCBiZWNhdXNlIHRoZSBzZXJ2ZXIgbm8gbG9uZ2VyIGFjY2VwdHMgaXQgbGF0ZXJcclxuICogLSBQcmlvciB0byBCcmVlemUgdi4xLjUuMywgYSBxdWV1ZWQgc2F2ZSB0aGF0IG1pZ2h0IGhhdmUgc3VjY2VlZGVkXHJcbiAqICAgaWYgc2F2ZWQgaW1tZWRpYXRlbHkgd2lsbCBmYWlsIGlmIHN1YnNlcXVlbnRseSBhdHRlbXB0IHRvIHNhdmVcclxuICogICBhbiBpbnZhbGlkIGVudGl0eS4gQ2FuIGRldGVjdCBhbmQgY2lyY3VtdmVudCBhZnRlciB2LjEuNS4zLlxyXG4gKlxyXG4gKiBBbGwgbWVtYmVycyBvZiBFbnRpdHlNYW5hZ2VyLl9zYXZlUXVldWluZyBhcmUgaW50ZXJuYWw7XHJcbiAqIHRvdWNoIHRoZW0gYXQgeW91ciBvd24gcmlzay5cclxuICovXHJcbi8vI2VuZHJlZ2lvblxyXG5pbXBvcnQgeyBFbnRpdHksIEVudGl0eU1hbmFnZXIsIEtleU1hcHBpbmcsIEVudGl0eVN0YXRlLCBTYXZlUmVzdWx0LCBicmVlemUgfSBmcm9tICdicmVlemUtY2xpZW50JztcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlU2F2ZVF1ZXVpbmcoZW06IEVudGl0eU1hbmFnZXIsIGVuYWJsZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICBsZXQgc2F2ZVF1ZXVpbmcgPSBlbVsnX3NhdmVRdWV1ZWluZyddIHx8XHJcbiAgICAoZW1bJ19zYXZlUXVldWluZyddID0gbmV3IFNhdmVRdWV1aW5nKGVtKSk7XHJcblxyXG4gIGVuYWJsZSA9IChlbmFibGUgPT09IHVuZGVmaW5lZCkgPyB0cnVlIDogZW5hYmxlO1xyXG4gIHNhdmVRdWV1aW5nLl9pc0VuYWJsZWQgPSBlbmFibGU7XHJcbiAgaWYgKGVuYWJsZSkge1xyXG4gICAgLy8gZGVsZWdhdGUgdG8gc2F2ZSBjaGFuZ2VzIHF1ZXVpbmdcclxuICAgIGVtLnNhdmVDaGFuZ2VzID0gc2F2ZUNoYW5nZXNXaXRoUXVldWluZztcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gcmV2ZXJ0IHRvIHRoZSBuYXRpdmUgRW50aXR5TWFuYWdlci5zYXZlQ2hhbmdlc1xyXG4gICAgZW0uc2F2ZUNoYW5nZXMgPSBlbVsnX3NhdmVRdWV1aW5nJ10uYmFzZVNhdmVDaGFuZ2VzO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlcGxhY2VtZW50IGZvciBFbnRpdHlNYW5hZ2VyLnNhdmVDaGFuZ2VzXHJcbiAqIFRoaXMgdmVyc2lvbiBxdWV1ZXMgc2F2ZUNoYW5nZXMgY2FsbHMgd2hpbGUgYSByZWFsIHNhdmUgaXMgaW4gcHJvZ3Jlc3NcclxuICoqL1xyXG5mdW5jdGlvbiBzYXZlQ2hhbmdlc1dpdGhRdWV1aW5nKGVudGl0aWVzOiBFbnRpdHlbXSB8IG51bGwsIHNhdmVPcHRpb25zOiBhbnkpIHtcclxuICB0cnkge1xyXG4gICAgLy8gYHRoaXNgIGlzIGFuIEVudGl0eU1hbmFnZXJcclxuICAgIGxldCBzYXZlUXVldWluZyA9IHRoaXMuX3NhdmVRdWV1aW5nO1xyXG4gICAgaWYgKHNhdmVRdWV1aW5nLmlzU2F2aW5nKSB7XHJcbiAgICAgIC8vIHNhdmUgaW4gcHJvZ3Jlc3M7IHF1ZXVlIHRoZSBzYXZlIGZvciBsYXRlclxyXG4gICAgICByZXR1cm4gc2F2ZVF1ZXVpbmcucXVldWVTYXZlQ2hhbmdlcyhlbnRpdGllcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBub3RlIHRoYXQgc2F2ZSBpcyBpbiBwcm9ncmVzczsgdGhlbiBzYXZlXHJcbiAgICAgIHNhdmVRdWV1aW5nLmlzU2F2aW5nID0gdHJ1ZTtcclxuICAgICAgc2F2ZVF1ZXVpbmcuc2F2ZU9wdGlvbnMgPSBzYXZlT3B0aW9ucztcclxuICAgICAgcmV0dXJuIHNhdmVRdWV1aW5nLnNhdmVDaGFuZ2VzKGVudGl0aWVzLCBzYXZlT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcclxuICB9XHJcbn1cclxuXHJcbi8vLy8vLy8vLyBTYXZlUXVldWluZyAvLy8vLy8vLy9cclxuY2xhc3MgU2F2ZVF1ZXVpbmcge1xyXG4gIGVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXI7XHJcbiAgYmFzZVNhdmVDaGFuZ2VzOiAoKSA9PiBQcm9taXNlPGFueT47XHJcbiAgaXNTYXZpbmc6IGJvb2xlYW47XHJcbiAgX2lzRW5hYmxlZDogYm9vbGVhbjtcclxuICBhY3RpdmVTYXZlRGVmZXJyZWQ6IERlZmVycmVkPFNhdmVSZXN1bHQ+O1xyXG4gIG5leHRTYXZlRGVmZXJyZWQ6IERlZmVycmVkPFNhdmVSZXN1bHQ+O1xyXG4gIGFjdGl2ZVNhdmVNZW1vOiBTYXZlTWVtbztcclxuICBuZXh0U2F2ZU1lbW86IFNhdmVNZW1vO1xyXG4gIHNhdmVPcHRpb25zOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIpIHtcclxuICAgIHRoaXMuZW50aXR5TWFuYWdlciA9IGVudGl0eU1hbmFnZXI7XHJcbiAgICB0aGlzLmJhc2VTYXZlQ2hhbmdlcyA9IGVudGl0eU1hbmFnZXIuc2F2ZUNoYW5nZXM7XHJcbiAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0VuYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNFbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2F2ZWROb3RoaW5nUmVzdWx0KCk6IFNhdmVSZXN1bHQge1xyXG4gICAgcmV0dXJuIHsgZW50aXRpZXM6IFtdIGFzIEVudGl0eVtdLCBrZXlNYXBwaW5nczogW10gYXMgS2V5TWFwcGluZ1tdIH07XHJcbiAgfVxyXG5cclxuICBxdWV1ZVNhdmVDaGFuZ2VzKGVudGl0aWVzOiBFbnRpdHlbXSkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzOyAvLyBgdGhpc2AgaXMgYSBTYXZlUXVldWluZ1xyXG4gICAgbGV0IGVtID0gc2VsZi5lbnRpdHlNYW5hZ2VyO1xyXG5cclxuICAgIGxldCBjaGFuZ2VzID0gZW50aXRpZXMgfHwgZW0uZ2V0Q2hhbmdlcygpO1xyXG4gICAgaWYgKGNoYW5nZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5nZXRTYXZlZE5vdGhpbmdSZXN1bHQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHZhbEVycm9yID0gZW0uc2F2ZUNoYW5nZXNWYWxpZGF0ZU9uQ2xpZW50KGNoYW5nZXMpO1xyXG4gICAgaWYgKHZhbEVycm9yKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWxFcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNhdmVNZW1vID0gc2VsZi5uZXh0U2F2ZU1lbW8gfHwgKHNlbGYubmV4dFNhdmVNZW1vID0gbmV3IFNhdmVNZW1vKCkpO1xyXG4gICAgbWVtb2l6ZUNoYW5nZXMoKTtcclxuICAgIGxldCBkZWZlcnJlZCA9IHNlbGYubmV4dFNhdmVEZWZlcnJlZCB8fCAoc2VsZi5uZXh0U2F2ZURlZmVycmVkID0gbmV3IERlZmVycmVkPFNhdmVSZXN1bHQ+KCkpO1xyXG4gICAgcmV0dXJuIGRlZmVycmVkLnByb21pc2U7XHJcblxyXG4gICAgZnVuY3Rpb24gbWVtb2l6ZUNoYW5nZXMoKSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm47IH1cclxuICAgICAgbGV0IHF1ZXVlZENoYW5nZXMgPSBzYXZlTWVtby5xdWV1ZWRDaGFuZ2VzO1xyXG4gICAgICBjaGFuZ2VzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgaWYgKCFlLmVudGl0eUFzcGVjdC5pc0JlaW5nU2F2ZWQgJiYgcXVldWVkQ2hhbmdlcy5pbmRleE9mKGUpID09PSAtMSkge1xyXG4gICAgICAgICAgcXVldWVkQ2hhbmdlcy5wdXNoKGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzYXZlTWVtby51cGRhdGVFbnRpdHlNZW1vcyhjaGFuZ2VzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDaGFuZ2VzKGVudGl0aWVzOiBFbnRpdHlbXSwgc2F2ZU9wdGlvbnM6IGFueSkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzOyAvLyBgdGhpc2AgaXMgYSBTYXZlUXVldWluZ1xyXG4gICAgbGV0IHByb21pc2UgPSBzZWxmLmJhc2VTYXZlQ2hhbmdlcy5jYWxsKHNlbGYuZW50aXR5TWFuYWdlciwgZW50aXRpZXMsIHNhdmVPcHRpb25zIHx8IHNlbGYuc2F2ZU9wdGlvbnMpXHJcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChzYXZlUmVzdWx0OiBTYXZlUmVzdWx0KSB7IHJldHVybiBzZWxmLnNhdmVTdWNjZWVkZWQoc2F2ZVJlc3VsdCk7IH0pXHJcbiAgICAgIC50aGVuKG51bGwsIGZ1bmN0aW9uIChlcnJvcjogRXJyb3IpIHsgY29uc29sZS5sb2coZXJyb3IpOyByZXR1cm4gc2VsZi5zYXZlRmFpbGVkKGVycm9yKTsgfSk7XHJcbiAgICByZW1lbWJlckFkZGVkT3JpZ2luYWxWYWx1ZXMoZW50aXRpZXMpOyAvLyBkbyBpdCBhZnRlciAuLi4gc28gZG9uJ3Qgc2VuZCBPcmlnVmFsdWVzIHRvIHRoZSBzZXJ2ZXJcclxuICAgIHJldHVybiBwcm9taXNlO1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlbWVtYmVyQWRkZWRPcmlnaW5hbFZhbHVlcyhlbnRpdGllczogRW50aXR5W10pIHtcclxuICAgICAgLy8gYWRkZWQgZW50aXRpZXMgbm9ybWFsbHkgZG9uJ3QgaGF2ZSBvcmlnaW5hbCB2YWx1ZXMgYnV0IHRoZXNlIHdpbGwgbm93XHJcbiAgICAgIGxldCBhZGRlZCA9IGVudGl0aWVzID9cclxuICAgICAgICBlbnRpdGllcy5maWx0ZXIoZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzQWRkZWQoKTsgfSkgOlxyXG4gICAgICAgIHNlbGYuZW50aXR5TWFuYWdlci5nZXRFbnRpdGllcyhudWxsLCBFbnRpdHlTdGF0ZS5BZGRlZCk7XHJcbiAgICAgIGFkZGVkLmZvckVhY2goZW50aXR5ID0+IHtcclxuICAgICAgICBsZXQgcHJvcHMgPSBlbnRpdHkuZW50aXR5VHlwZS5kYXRhUHJvcGVydGllcztcclxuICAgICAgICBsZXQgb3JpZ2luYWxWYWx1ZXMgPSBlbnRpdHkuZW50aXR5QXNwZWN0Lm9yaWdpbmFsVmFsdWVzO1xyXG4gICAgICAgIHByb3BzLmZvckVhY2goZHAgPT4ge1xyXG4gICAgICAgICAgaWYgKGRwLmlzUGFydE9mS2V5KSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZXNbZHAubmFtZV0gPSBlbnRpdHkuZ2V0UHJvcGVydHkoZHAubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVTdWNjZWVkZWQoc2F2ZVJlc3VsdDogU2F2ZVJlc3VsdCkge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzOyAvLyBgdGhpc2AgaXMgYSBTYXZlUXVldWVpbmdcclxuICAgIGxldCBhY3RpdmVTYXZlRGVmZXJyZWQgPSBzZWxmLmFjdGl2ZVNhdmVEZWZlcnJlZDtcclxuICAgIGxldCBuZXh0U2F2ZURlZmVycmVkID0gc2VsZi5uZXh0U2F2ZURlZmVycmVkO1xyXG4gICAgbGV0IG5leHRTYXZlTWVtbyA9IHNlbGYubmV4dFNhdmVNZW1vO1xyXG5cclxuXHJcbiAgICAvLyBwcmVwYXJlIGFzIGlmIG5vdGhpbmcgcXVldWVkIG9yIGxlZnQgdG8gc2F2ZVxyXG4gICAgc2VsZi5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgc2VsZi5hY3RpdmVTYXZlRGVmZXJyZWQgPSBudWxsO1xyXG4gICAgc2VsZi5hY3RpdmVTYXZlTWVtbyA9IG51bGw7XHJcbiAgICBzZWxmLm5leHRTYXZlRGVmZXJyZWQgPSBudWxsO1xyXG4gICAgc2VsZi5uZXh0U2F2ZU1lbW8gPSBudWxsO1xyXG5cclxuICAgIGlmIChuZXh0U2F2ZU1lbW8pIHtcclxuICAgICAgLy8gYSBzYXZlIHdhcyBxdWV1ZWQgc2luY2UgbGFzdCBzYXZlIHJldHVybmVkXHJcbiAgICAgIG5leHRTYXZlTWVtby5wa0ZpeHVwKHNhdmVSZXN1bHQua2V5TWFwcGluZ3MpO1xyXG4gICAgICBuZXh0U2F2ZU1lbW8uYXBwbHlUb1NhdmVkRW50aXRpZXMoc2VsZi5lbnRpdHlNYW5hZ2VyLCBzYXZlUmVzdWx0LmVudGl0aWVzKTtcclxuICAgICAgLy8gcmVtb3ZlIGRldGFjaGVkIGVudGl0aWVzIGZyb20gcXVldWVkQ2hhbmdlc1xyXG4gICAgICBsZXQgcXVldWVkQ2hhbmdlcyA9IG5leHRTYXZlTWVtby5xdWV1ZWRDaGFuZ2VzLmZpbHRlcihlID0+IHtcclxuICAgICAgICByZXR1cm4gIWUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAocXVldWVkQ2hhbmdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gc2F2ZSBhZ2FpblxyXG4gICAgICAgIHNlbGYuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgICAgIC8vIHJlbWVtYmVyIHRoZSBxdWV1ZWQgY2hhbmdlcyB0aGF0IHRyaWdnZXJlZCB0aGlzIHNhdmVcclxuICAgICAgICBzZWxmLmFjdGl2ZVNhdmVEZWZlcnJlZCA9IG5leHRTYXZlRGVmZXJyZWQ7XHJcbiAgICAgICAgc2VsZi5hY3RpdmVTYXZlTWVtbyA9IG5leHRTYXZlTWVtbztcclxuICAgICAgICBzZWxmLnNhdmVDaGFuZ2VzKHF1ZXVlZENoYW5nZXMsIHRoaXMuc2F2ZU9wdGlvbnMpO1xyXG4gICAgICB9IGVsc2UgaWYgKG5leHRTYXZlRGVmZXJyZWQpIHtcclxuICAgICAgICBuZXh0U2F2ZURlZmVycmVkLnJlc29sdmUodGhpcy5nZXRTYXZlZE5vdGhpbmdSZXN1bHQoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWN0aXZlU2F2ZURlZmVycmVkKSB7IGFjdGl2ZVNhdmVEZWZlcnJlZC5yZXNvbHZlKHNhdmVSZXN1bHQpOyB9XHJcbiAgICByZXR1cm4gc2F2ZVJlc3VsdDsgIC8vIGZvciB0aGUgY3VycmVudCBwcm9taXNlIGNoYWluXHJcbiAgfVxyXG5cclxuICBzYXZlRmFpbGVkKGVycm9yOiBFcnJvcikge1xyXG4gICAgbGV0IHNlbGYgPSB0aGlzOyAvLyBgdGhpc2AgaXMgYSBTYXZlUXVldWVpbmdcclxuICAgIGVycm9yID0gbmV3IFF1ZXVlZFNhdmVGYWlsZWRFcnJvcihlcnJvciwgc2VsZik7XHJcblxyXG4gICAgbGV0IGFjdGl2ZVNhdmVEZWZlcnJlZCA9IHNlbGYuYWN0aXZlU2F2ZURlZmVycmVkO1xyXG4gICAgbGV0IG5leHRTYXZlRGVmZXJyZWQgPSBzZWxmLm5leHRTYXZlRGVmZXJyZWQ7XHJcblxyXG4gICAgc2VsZi5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgc2VsZi5hY3RpdmVTYXZlRGVmZXJyZWQgPSBudWxsO1xyXG4gICAgc2VsZi5hY3RpdmVTYXZlTWVtbyA9IG51bGw7XHJcbiAgICBzZWxmLm5leHRTYXZlRGVmZXJyZWQgPSBudWxsO1xyXG4gICAgc2VsZi5uZXh0U2F2ZU1lbW8gPSBudWxsO1xyXG5cclxuICAgIGlmIChhY3RpdmVTYXZlRGVmZXJyZWQpIHsgYWN0aXZlU2F2ZURlZmVycmVkLnJlamVjdChlcnJvcik7IH1cclxuICAgIGlmIChuZXh0U2F2ZURlZmVycmVkKSB7IG5leHRTYXZlRGVmZXJyZWQucmVqZWN0KGVycm9yKTsgfVxyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7IC8vIGxldCBwcm9taXNlIGNoYWluIGhlYXIgZXJyb3JcclxuICB9XHJcbn1cclxuXHJcbi8vLyBmb3IgYmFja3dhcmQgY29tcGF0IHdpdGggb2xkZXIgUHJvbWlzZSBpbXBsZW1lbnRhdGlvblxyXG5jbGFzcyBEZWZlcnJlZDxUPiB7XHJcbiAgcmVzb2x2ZTogKHZhbDogYW55KSA9PiB2b2lkO1xyXG4gIHJlamVjdDogKGVycjogYW55KSA9PiB2b2lkO1xyXG4gIHByb21pc2U6IFByb21pc2U8VD47XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZTxUPihmdW5jdGlvbiAocmVzb2x2ZTogKHZhbDogYW55KSA9PiB2b2lkLCByZWplY3Q6IChlcnI6IGFueSkgPT4gdm9pZCkge1xyXG4gICAgICB0aGlzLnJlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcclxuICAgIH0uYmluZCh0aGlzKSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8vLy8vLy8vLyBRdWV1ZWRTYXZlRmFpbGVkRXJyb3IgLy8vLy8vLy8vXHJcbi8vIEVycm9yIHN1Yi1jbGFzcyB0aHJvd24gd2hlbiByZWplY3RpbmcgcXVldWVkIHNhdmVzLlxyXG5jbGFzcyBRdWV1ZWRTYXZlRmFpbGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgbmFtZSA9IFwiUXVldWVkU2F2ZUZhaWxlZEVycm9yXCI7XHJcbiAgaW5uZXJFcnJvcjogRXJyb3I7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIGZhaWxlZFNhdmVNZW1vOiBTYXZlTWVtbztcclxuICBuZXh0U2F2ZU1lbW86IFNhdmVNZW1vO1xyXG5cclxuICAvLyBFcnJvciBzdWItY2xhc3MgdGhyb3duIHdoZW4gcmVqZWN0aW5nIHF1ZXVlZCBzYXZlcy5cclxuICAvLyBgaW5uZXJFcnJvcmAgaXMgdGhlIGFjdHVhbCBzYXZlIGVycm9yXHJcbiAgLy8gYGZhaWxlZFNhdmVNZW1vYCBpcyB0aGUgc2F2ZU1lbW8gdGhhdCBwcm9tcHRlZCB0aGlzIHNhdmVcclxuICAvLyBgbmV4dFNhdmVNZW1vYCBob2xkcyBxdWV1ZWQgY2hhbmdlcyBhY2N1bXVsYXRlZCBzaW5jZSB0aGF0IHNhdmUuXHJcbiAgLy8gWW91IG1heSB0cnkgdG8gcmVjb3ZlciB1c2luZyB0aGlzIGluZm8uIEdvb2QgbHVjayB3aXRoIHRoYXQuXHJcbiAgY29uc3RydWN0b3IoZXJyT2JqZWN0OiBFcnJvciwgc2F2ZVF1ZXVpbmc6IGFueSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuaW5uZXJFcnJvciA9IGVyck9iamVjdDtcclxuICAgIHRoaXMubWVzc2FnZSA9IFwiUXVldWVkIHNhdmUgZmFpbGVkOiBcIiArIGVyck9iamVjdC5tZXNzYWdlO1xyXG4gICAgdGhpcy5mYWlsZWRTYXZlTWVtbyA9IHNhdmVRdWV1aW5nLmFjdGl2ZVNhdmVNZW1vO1xyXG4gICAgdGhpcy5uZXh0U2F2ZU1lbW8gPSBzYXZlUXVldWluZy5uZXh0U2F2ZU1lbW87XHJcbiAgfVxyXG59XHJcblxyXG4vLy8vLy8vLy8vIFNhdmVNZW1vIC8vLy8vLy8vLy8vLy8vLy9cclxuLy8gU2F2ZU1lbW8gaXMgYSByZWNvcmQgb2YgY2hhbmdlcyBmb3IgYSBxdWV1ZWQgc2F2ZSwgY29uc2lzdGluZyBvZjpcclxuLy8gICBlbnRpdHlNZW1vczogICBpbmZvIGFib3V0IGVudGl0aWVzIHRoYXQgYXJlIGJlaW5nIHNhdmVkIGFuZFxyXG4vLyAgICAgICAgICAgICAgICAgIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIHRoZSBzYXZlIHN0YXJ0ZWRcclxuLy8gICBxdWV1ZWRDaGFuZ2VzOiBlbnRpdGllcyB0aGF0IGFyZSBxdWV1ZWQgZm9yIHNhdmUgYnV0XHJcbi8vICAgICAgICAgICAgICAgICAgYXJlIG5vdCBjdXJyZW50bHkgYmVpbmcgc2F2ZWRcclxuY2xhc3MgU2F2ZU1lbW8ge1xyXG4gIGVudGl0eU1lbW9zOiBhbnk7XHJcbiAgcXVldWVkQ2hhbmdlczogYW55W107XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmVudGl0eU1lbW9zID0ge307XHJcbiAgICB0aGlzLnF1ZXVlZENoYW5nZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIGFwcGx5VG9TYXZlZEVudGl0aWVzKGVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIsIHNhdmVkRW50aXRpZXM6IEVudGl0eVtdKSB7XHJcbiAgICBsZXQgZW50aXR5TWVtb3MgPSB0aGlzLmVudGl0eU1lbW9zOyAvLyBgdGhpc2AgaXMgYSBTYXZlTWVtb1xyXG4gICAgbGV0IHF1ZXVlZENoYW5nZXMgPSB0aGlzLnF1ZXVlZENoYW5nZXM7XHJcbiAgICBsZXQgcmVzdG9yZVB1Ymxpc2hpbmcgPSB0aGlzLmRpc2FibGVNYW5hZ2VyUHVibGlzaGluZyhlbnRpdHlNYW5hZ2VyKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHNhdmVkRW50aXRpZXMuZm9yRWFjaChzYXZlZCA9PiB7XHJcbiAgICAgICAgbGV0IGtleSA9IHRoaXMubWFrZUVudGl0eU1lbW9LZXkoc2F2ZWQpO1xyXG4gICAgICAgIGxldCBlbnRpdHlNZW1vID0gZW50aXR5TWVtb3Nba2V5XTtcclxuICAgICAgICBsZXQgcmVzYXZlID0gZW50aXR5TWVtbyAmJiBlbnRpdHlNZW1vLmFwcGx5VG9TYXZlZEVudGl0eShzYXZlZCk7XHJcbiAgICAgICAgaWYgKHJlc2F2ZSkge1xyXG4gICAgICAgICAgcXVldWVkQ2hhbmdlcy5wdXNoKHNhdmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgcmVzdG9yZVB1Ymxpc2hpbmcoKTtcclxuICAgICAgLy8gRCMyNjUxIGhhc0NoYW5nZXMgd2lsbCBiZSB3cm9uZyBpZiBjaGFuZ2VzIG1hZGUgd2hpbGUgc2F2ZSBpbiBwcm9ncmVzc1xyXG4gICAgICBsZXQgaGFzQ2hhbmdlcyA9IHF1ZXVlZENoYW5nZXMubGVuZ3RoID4gMDtcclxuICAgICAgLy8gTXVzdCB1c2UgYnJlZXplIGludGVybmFsIG1ldGhvZCB0byBwcm9wZXJseSBzZXQgdGhpcyBmbGFnIHRydWVcclxuICAgICAgaWYgKGhhc0NoYW5nZXMpIHsgZW50aXR5TWFuYWdlci5fc2V0SGFzQ2hhbmdlcyh0cnVlKTsgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNhYmxlTWFuYWdlclB1Ymxpc2hpbmcobWFuYWdlcjogRW50aXR5TWFuYWdlcikge1xyXG4gICAgbGV0IEV2ZW50ID0gYnJlZXplLkV2ZW50O1xyXG4gICAgRXZlbnQuZW5hYmxlKCdlbnRpdHlDaGFuZ2VkJywgbWFuYWdlciwgZmFsc2UpO1xyXG4gICAgRXZlbnQuZW5hYmxlKCdoYXNDaGFuZ2VzQ2hhbmdlZCcsIG1hbmFnZXIsIGZhbHNlKTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVzdG9yZVB1Ymxpc2hpbmcoKSB7XHJcbiAgICAgIEV2ZW50LmVuYWJsZSgnZW50aXR5Q2hhbmdlZCcsIG1hbmFnZXIsIHRydWUpO1xyXG4gICAgICBFdmVudC5lbmFibGUoJ2hhc0NoYW5nZXNDaGFuZ2VkJywgbWFuYWdlciwgdHJ1ZSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcGtGaXh1cChrZXlNYXBwaW5nczogS2V5TWFwcGluZ1tdKSB7XHJcbiAgICBsZXQgZW50aXR5TWVtb3MgPSB0aGlzLmVudGl0eU1lbW9zOyAgLy8gYHRoaXNgIGlzIGEgU2F2ZU1lbW9cclxuICAgIGtleU1hcHBpbmdzLmZvckVhY2goa20gPT4ge1xyXG4gICAgICBsZXQgdHlwZSA9IGttLmVudGl0eVR5cGVOYW1lO1xyXG4gICAgICBsZXQgdGVtcEtleSA9IHR5cGUgKyAnfCcgKyBrbS50ZW1wVmFsdWU7XHJcbiAgICAgIGlmIChlbnRpdHlNZW1vc1t0ZW1wS2V5XSkge1xyXG4gICAgICAgIGVudGl0eU1lbW9zW3R5cGUgKyAnfCcgKyBrbS5yZWFsVmFsdWVdID0gZW50aXR5TWVtb3NbdGVtcEtleV07XHJcbiAgICAgICAgZGVsZXRlIGVudGl0eU1lbW9zW3RlbXBLZXldO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IG1lbW9LZXkgaW4gZW50aXR5TWVtb3MpIHtcclxuICAgICAgICBlbnRpdHlNZW1vc1ttZW1vS2V5XS5ma0ZpeHVwKGttKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBtYWtlRW50aXR5TWVtb0tleShlbnRpdHk6IEVudGl0eSkge1xyXG4gICAgbGV0IGVudGl0eUtleSA9IGVudGl0eS5lbnRpdHlBc3BlY3QuZ2V0S2V5KCk7XHJcbiAgICByZXR1cm4gZW50aXR5S2V5LmVudGl0eVR5cGUubmFtZSArICd8JyArIGVudGl0eUtleS52YWx1ZXM7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVFbnRpdHlNZW1vcyhjaGFuZ2VzOiBFbnRpdHlbXSkge1xyXG4gICAgbGV0IGVudGl0eU1lbW9zID0gdGhpcy5lbnRpdHlNZW1vczsgIC8vIGB0aGlzYCBpcyBhIFNhdmVNZW1vXHJcbiAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcclxuICAgICAgLy8gb25seSB1cGRhdGUgZW50aXR5TWVtbyBmb3IgZW50aXR5IGJlaW5nIHNhdmVcclxuICAgICAgaWYgKCFjaGFuZ2UuZW50aXR5QXNwZWN0LmlzQmVpbmdTYXZlZCkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgIGxldCBrZXkgPSB0aGlzLm1ha2VFbnRpdHlNZW1vS2V5KGNoYW5nZSk7XHJcbiAgICAgIGxldCBlbnRpdHlNZW1vID0gZW50aXR5TWVtb3Nba2V5XSB8fCAoZW50aXR5TWVtb3Nba2V5XSA9IG5ldyBFbnRpdHlNZW1vKGNoYW5nZSkpO1xyXG4gICAgICBlbnRpdHlNZW1vLnVwZGF0ZShjaGFuZ2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcblxyXG4vLy8vLy8vLy8gRW50aXR5TWVtbyBUeXBlIC8vLy8vLy8vLy8vLy8vL1xyXG4vLyBJbmZvcm1hdGlvbiBhYm91dCBhbiBlbnRpdHkgdGhhdCBpcyBiZWluZyBzYXZlZFxyXG4vLyBhbmQgd2hpY2ggaGFzIGJlZW4gY2hhbmdlZCBzaW5jZSB0aGF0IHNhdmUgc3RhcnRlZFxyXG5jbGFzcyBFbnRpdHlNZW1vIHtcclxuICBlbnRpdHk6IEVudGl0eTtcclxuICBwZW5kaW5nQ2hhbmdlczogYW55O1xyXG4gIGlzRGVsZXRlZDogYm9vbGVhbjtcclxuICBjb25zdHJ1Y3RvcihlbnRpdHk6IEVudGl0eSkge1xyXG4gICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XHJcbiAgICB0aGlzLnBlbmRpbmdDaGFuZ2VzID0ge307XHJcbiAgfVxyXG5cclxuXHJcbiAgYXBwbHlUb1NhdmVkRW50aXR5KHNhdmVkOiBFbnRpdHkpIHtcclxuICAgIGxldCBlbnRpdHlNZW1vID0gdGhpcztcclxuICAgIGxldCBhc3BlY3QgPSBzYXZlZC5lbnRpdHlBc3BlY3Q7XHJcbiAgICBpZiAoYXNwZWN0LmVudGl0eVN0YXRlLmlzRGV0YWNoZWQoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKGVudGl0eU1lbW8uaXNEZWxldGVkKSB7XHJcbiAgICAgIGFzcGVjdC5zZXREZWxldGVkKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gdHJlYXQgZW50aXR5IHdpdGggcGVuZGluZyBjaGFuZ2VzIGFzIG1vZGlmaWVkXHJcbiAgICBsZXQgcHJvcHMgPSBPYmplY3Qua2V5cyhlbnRpdHlNZW1vLnBlbmRpbmdDaGFuZ2VzKTtcclxuICAgIGlmIChwcm9wcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IG9yaWdpbmFsVmFsdWVzID0gYXNwZWN0Lm9yaWdpbmFsVmFsdWVzO1xyXG4gICAgcHJvcHMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgb3JpZ2luYWxWYWx1ZXNbbmFtZV0gPSBzYXZlZC5nZXRQcm9wZXJ0eShuYW1lKTtcclxuICAgICAgc2F2ZWQuc2V0UHJvcGVydHkobmFtZSwgZW50aXR5TWVtby5wZW5kaW5nQ2hhbmdlc1tuYW1lXSk7XHJcbiAgICB9KTtcclxuICAgIGFzcGVjdC5zZXRNb2RpZmllZCgpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBma0ZpeHVwKGtleU1hcHBpbmc6IEtleU1hcHBpbmcpIHtcclxuICAgIGxldCBlbnRpdHlNZW1vID0gdGhpcztcclxuICAgIGxldCB0eXBlID0gZW50aXR5TWVtby5lbnRpdHkuZW50aXR5VHlwZTtcclxuICAgIGxldCBma1Byb3BzID0gdHlwZS5mb3JlaWduS2V5UHJvcGVydGllcztcclxuICAgIGZrUHJvcHMuZm9yRWFjaChma1Byb3AgPT4ge1xyXG4gICAgICBpZiAoZmtQcm9wLnBhcmVudFR5cGUubmFtZSA9PT0ga2V5TWFwcGluZy5lbnRpdHlUeXBlTmFtZSAmJlxyXG4gICAgICAgIGVudGl0eU1lbW8ucGVuZGluZ0NoYW5nZXNbZmtQcm9wLm5hbWVdID09PSBrZXlNYXBwaW5nLnRlbXBWYWx1ZSkge1xyXG4gICAgICAgIGVudGl0eU1lbW8ucGVuZGluZ0NoYW5nZXNbZmtQcm9wLm5hbWVdID0ga2V5TWFwcGluZy5yZWFsVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gdXBkYXRlIHRoZSBlbnRpdHlNZW1vIG9mIGNoYW5nZXMgdG8gYW4gZW50aXR5IGJlaW5nIHNhdmVkXHJcbiAgLy8gc28gdGhhdCB3ZSBrbm93IGhvdyB0byBzYXZlIGl0IGFnYWluIGxhdGVyXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgbGV0IGVudGl0eU1lbW8gPSB0aGlzO1xyXG4gICAgbGV0IHByb3BzO1xyXG4gICAgbGV0IGVudGl0eSA9IGVudGl0eU1lbW8uZW50aXR5O1xyXG4gICAgbGV0IGFzcGVjdCA9IGVudGl0eS5lbnRpdHlBc3BlY3Q7XHJcbiAgICBsZXQgc3RhdGVOYW1lID0gYXNwZWN0LmVudGl0eVN0YXRlLm5hbWU7XHJcbiAgICBzd2l0Y2ggKHN0YXRlTmFtZSkge1xyXG4gICAgICBjYXNlICdBZGRlZCc6XHJcbiAgICAgICAgbGV0IG9yaWdpbmFsVmFsdWVzID0gYXNwZWN0Lm9yaWdpbmFsVmFsdWVzO1xyXG4gICAgICAgIHByb3BzID0gZW50aXR5LmVudGl0eVR5cGUuZGF0YVByb3BlcnRpZXM7XHJcbiAgICAgICAgcHJvcHMuZm9yRWFjaChkcCA9PiB7XHJcbiAgICAgICAgICBpZiAoZHAuaXNQYXJ0T2ZLZXkpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICBsZXQgbmFtZSA9IGRwLm5hbWU7XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSBlbnRpdHkuZ2V0UHJvcGVydHkobmFtZSk7XHJcbiAgICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZXNbbmFtZV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGVudGl0eU1lbW8ucGVuZGluZ0NoYW5nZXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ0RlbGV0ZWQnOlxyXG4gICAgICAgIGVudGl0eU1lbW8uaXNEZWxldGVkID0gdHJ1ZTtcclxuICAgICAgICBlbnRpdHlNZW1vLnBlbmRpbmdDaGFuZ2VzID0ge307XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdNb2RpZmllZCc6XHJcbiAgICAgICAgcHJvcHMgPSBPYmplY3Qua2V5cyhhc3BlY3Qub3JpZ2luYWxWYWx1ZXMpO1xyXG4gICAgICAgIHByb3BzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICBlbnRpdHlNZW1vLnBlbmRpbmdDaGFuZ2VzW25hbWVdID0gZW50aXR5LmdldFByb3BlcnR5KG5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,2 +0,0 @@
1
- export * from './index';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJwdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XHJcbiJdfQ==