breeze-client 2.1.3 → 2.1.4-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 (395) hide show
  1. package/README.md +18 -5
  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} +2 -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} +6 -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} +2 -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} +3 -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} +2 -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} +21 -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} +14 -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} +14 -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} +14 -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} +9 -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} +86 -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} +2 -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} +2 -1
  107. package/fesm2015/breeze-client-mixin-save-queuing.mjs.map +1 -0
  108. package/fesm2015/{breeze-client.js → breeze-client.mjs} +409 -418
  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} +42 -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} +45 -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} +44 -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} +19 -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} +9 -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} +127 -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} +39 -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} +64 -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} +58 -58
  127. package/fesm2020/breeze-client-adapter-model-library-ko.mjs.map +1 -0
  128. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs +92 -0
  129. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs.map +1 -0
  130. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs +246 -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} +46 -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} +117 -126
  135. package/fesm2020/breeze-client-mixin-save-queuing.mjs.map +1 -0
  136. package/{fesm5/breeze-client.js → fesm2020/breeze-client.mjs} +3396 -3612
  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/mjs/README.md +17 -0
  141. package/package.json +125 -11
  142. package/src/entity-metadata.d.ts +6 -4
  143. package/src/entity-query.d.ts +1 -1
  144. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +0 -1
  145. package/adapter-ajax-angularjs/package.json +0 -13
  146. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +0 -1
  147. package/adapter-ajax-fetch/package.json +0 -13
  148. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +0 -1
  149. package/adapter-ajax-httpclient/package.json +0 -13
  150. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +0 -1
  151. package/adapter-ajax-jquery/package.json +0 -13
  152. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +0 -1
  153. package/adapter-ajax-post/package.json +0 -13
  154. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +0 -1
  155. package/adapter-data-service-odata/package.json +0 -13
  156. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +0 -1
  157. package/adapter-data-service-webapi/package.json +0 -13
  158. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +0 -1
  159. package/adapter-model-library-backing-store/package.json +0 -13
  160. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +0 -1
  161. package/adapter-model-library-ko/package.json +0 -13
  162. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +0 -1
  163. package/adapter-uri-builder-json/package.json +0 -13
  164. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +0 -1
  165. package/adapter-uri-builder-odata/package.json +0 -13
  166. package/breeze-client.d.ts +0 -8
  167. package/breeze-client.metadata.json +0 -1
  168. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +0 -190
  169. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +0 -1
  170. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +0 -2
  171. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +0 -1
  172. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +0 -190
  173. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +0 -1
  174. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +0 -2
  175. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +0 -1
  176. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +0 -195
  177. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +0 -1
  178. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +0 -2
  179. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +0 -1
  180. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +0 -115
  181. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +0 -1
  182. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +0 -2
  183. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +0 -1
  184. package/bundles/breeze-client-adapter-ajax-post.umd.js +0 -92
  185. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +0 -1
  186. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +0 -2
  187. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +0 -1
  188. package/bundles/breeze-client-adapter-data-service-odata.umd.js +0 -743
  189. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +0 -1
  190. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +0 -16
  191. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +0 -1
  192. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +0 -326
  193. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +0 -1
  194. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +0 -16
  195. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +0 -1
  196. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +0 -280
  197. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +0 -1
  198. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +0 -2
  199. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +0 -1
  200. package/bundles/breeze-client-adapter-model-library-ko.umd.js +0 -252
  201. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +0 -1
  202. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +0 -2
  203. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +0 -1
  204. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +0 -96
  205. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +0 -1
  206. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +0 -2
  207. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +0 -1
  208. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +0 -262
  209. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +0 -1
  210. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +0 -2
  211. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +0 -1
  212. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +0 -258
  213. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +0 -1
  214. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +0 -2
  215. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +0 -1
  216. package/bundles/breeze-client-mixin-save-queuing.umd.js +0 -579
  217. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +0 -1
  218. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +0 -16
  219. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +0 -1
  220. package/bundles/breeze-client.umd.js +0 -14098
  221. package/bundles/breeze-client.umd.js.map +0 -1
  222. package/bundles/breeze-client.umd.min.js +0 -16
  223. package/bundles/breeze-client.umd.min.js.map +0 -1
  224. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -130
  225. package/esm2015/adapter-ajax-angularjs/adapter-core.js +0 -49
  226. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  227. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -130
  228. package/esm2015/adapter-ajax-fetch/adapter-core.js +0 -49
  229. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  230. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -137
  231. package/esm2015/adapter-ajax-httpclient/adapter-core.js +0 -49
  232. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  233. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -103
  234. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  235. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +0 -77
  236. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  237. package/esm2015/adapter-data-service-odata/adapter-core.js +0 -49
  238. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +0 -459
  239. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  240. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -93
  241. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  242. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -268
  243. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  244. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +0 -240
  245. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  246. package/esm2015/adapter-uri-builder-json/adapter-core.js +0 -49
  247. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -36
  248. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  249. package/esm2015/adapter-uri-builder-odata/adapter-core.js +0 -49
  250. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -192
  251. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  252. package/esm2015/breeze-client.js +0 -9
  253. package/esm2015/index.js +0 -2
  254. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  255. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  256. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  257. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +0 -400
  258. package/esm2015/src/abstract-data-service-adapter.js +0 -296
  259. package/esm2015/src/array.js +0 -4
  260. package/esm2015/src/assert-param.js +0 -312
  261. package/esm2015/src/breeze.js +0 -85
  262. package/esm2015/src/complex-array.js +0 -119
  263. package/esm2015/src/config.js +0 -223
  264. package/esm2015/src/core.js +0 -709
  265. package/esm2015/src/csdl-metadata-parser.js +0 -385
  266. package/esm2015/src/data-service.js +0 -203
  267. package/esm2015/src/data-type.js +0 -444
  268. package/esm2015/src/default-property-interceptor.js +0 -460
  269. package/esm2015/src/entity-action.js +0 -45
  270. package/esm2015/src/entity-aspect.js +0 -806
  271. package/esm2015/src/entity-group.js +0 -187
  272. package/esm2015/src/entity-key.js +0 -116
  273. package/esm2015/src/entity-manager.js +0 -2094
  274. package/esm2015/src/entity-metadata.js +0 -2109
  275. package/esm2015/src/entity-query.js +0 -996
  276. package/esm2015/src/entity-state.js +0 -99
  277. package/esm2015/src/enum.js +0 -141
  278. package/esm2015/src/event.js +0 -256
  279. package/esm2015/src/interface-registry.js +0 -41
  280. package/esm2015/src/key-generator.js +0 -108
  281. package/esm2015/src/local-query-comparison-options.js +0 -65
  282. package/esm2015/src/mapping-context.js +0 -405
  283. package/esm2015/src/naming-convention.js +0 -88
  284. package/esm2015/src/observable-array.js +0 -185
  285. package/esm2015/src/predicate.js +0 -1235
  286. package/esm2015/src/primitive-array.js +0 -87
  287. package/esm2015/src/query-options.js +0 -152
  288. package/esm2015/src/relation-array.js +0 -175
  289. package/esm2015/src/save-options.js +0 -41
  290. package/esm2015/src/unattached-children-map.js +0 -58
  291. package/esm2015/src/validate.js +0 -991
  292. package/esm2015/src/validation-options.js +0 -64
  293. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +0 -132
  294. package/esm5/adapter-ajax-angularjs/adapter-core.js +0 -49
  295. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +0 -5
  296. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +0 -132
  297. package/esm5/adapter-ajax-fetch/adapter-core.js +0 -49
  298. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +0 -5
  299. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +0 -139
  300. package/esm5/adapter-ajax-httpclient/adapter-core.js +0 -49
  301. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +0 -5
  302. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +0 -105
  303. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +0 -5
  304. package/esm5/adapter-ajax-post/adapter-ajax-post.js +0 -81
  305. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +0 -5
  306. package/esm5/adapter-data-service-odata/adapter-core.js +0 -49
  307. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +0 -466
  308. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +0 -5
  309. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +0 -98
  310. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +0 -5
  311. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +0 -270
  312. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +0 -5
  313. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +0 -242
  314. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +0 -5
  315. package/esm5/adapter-uri-builder-json/adapter-core.js +0 -49
  316. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +0 -38
  317. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +0 -5
  318. package/esm5/adapter-uri-builder-odata/adapter-core.js +0 -49
  319. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +0 -197
  320. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +0 -5
  321. package/esm5/breeze-client.js +0 -9
  322. package/esm5/index.js +0 -2
  323. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +0 -5
  324. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +0 -269
  325. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +0 -5
  326. package/esm5/mixin-save-queuing/mixin-save-queuing.js +0 -412
  327. package/esm5/src/abstract-data-service-adapter.js +0 -302
  328. package/esm5/src/array.js +0 -4
  329. package/esm5/src/assert-param.js +0 -317
  330. package/esm5/src/breeze.js +0 -85
  331. package/esm5/src/complex-array.js +0 -119
  332. package/esm5/src/config.js +0 -228
  333. package/esm5/src/core.js +0 -717
  334. package/esm5/src/csdl-metadata-parser.js +0 -385
  335. package/esm5/src/data-service.js +0 -207
  336. package/esm5/src/data-type.js +0 -451
  337. package/esm5/src/default-property-interceptor.js +0 -460
  338. package/esm5/src/entity-action.js +0 -52
  339. package/esm5/src/entity-aspect.js +0 -812
  340. package/esm5/src/entity-group.js +0 -189
  341. package/esm5/src/entity-key.js +0 -118
  342. package/esm5/src/entity-manager.js +0 -2112
  343. package/esm5/src/entity-metadata.js +0 -2144
  344. package/esm5/src/entity-query.js +0 -1023
  345. package/esm5/src/entity-state.js +0 -106
  346. package/esm5/src/enum.js +0 -144
  347. package/esm5/src/event.js +0 -259
  348. package/esm5/src/interface-registry.js +0 -43
  349. package/esm5/src/key-generator.js +0 -111
  350. package/esm5/src/local-query-comparison-options.js +0 -67
  351. package/esm5/src/mapping-context.js +0 -407
  352. package/esm5/src/naming-convention.js +0 -90
  353. package/esm5/src/observable-array.js +0 -201
  354. package/esm5/src/predicate.js +0 -1300
  355. package/esm5/src/primitive-array.js +0 -87
  356. package/esm5/src/query-options.js +0 -167
  357. package/esm5/src/relation-array.js +0 -175
  358. package/esm5/src/save-options.js +0 -43
  359. package/esm5/src/unattached-children-map.js +0 -60
  360. package/esm5/src/validate.js +0 -996
  361. package/esm5/src/validation-options.js +0 -66
  362. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  363. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +0 -1
  364. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  365. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +0 -1
  366. package/fesm2015/breeze-client-adapter-ajax-post.js.map +0 -1
  367. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +0 -1
  368. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +0 -1
  369. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  370. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +0 -1
  371. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +0 -1
  372. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  373. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +0 -1
  374. package/fesm2015/breeze-client-mixin-save-queuing.js.map +0 -1
  375. package/fesm2015/breeze-client.js.map +0 -1
  376. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +0 -1
  377. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +0 -1
  378. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +0 -1
  379. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +0 -1
  380. package/fesm5/breeze-client-adapter-ajax-post.js.map +0 -1
  381. package/fesm5/breeze-client-adapter-data-service-odata.js.map +0 -1
  382. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +0 -1
  383. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +0 -1
  384. package/fesm5/breeze-client-adapter-model-library-ko.js.map +0 -1
  385. package/fesm5/breeze-client-adapter-uri-builder-json.js +0 -92
  386. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +0 -1
  387. package/fesm5/breeze-client-adapter-uri-builder-odata.js +0 -250
  388. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +0 -1
  389. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +0 -1
  390. package/fesm5/breeze-client-mixin-save-queuing.js.map +0 -1
  391. package/fesm5/breeze-client.js.map +0 -1
  392. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +0 -1
  393. package/mixin-get-entity-graph/package.json +0 -13
  394. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +0 -1
  395. package/mixin-save-queuing/package.json +0 -13
@@ -0,0 +1,203 @@
1
+ import { assertConfig } from './assert-param';
2
+ import { config } from './config';
3
+ import { core } from './core';
4
+ /**
5
+ A DataService instance is used to encapsulate the details of a single 'service'; this includes a serviceName, a dataService adapterInstance,
6
+ and whether the service has server side metadata.
7
+
8
+ You can construct an EntityManager with either a serviceName or a DataService instance, if you use a serviceName then a DataService
9
+ is constructed for you. (It can also be set via the EntityManager.setProperties method).
10
+
11
+ The same applies to the MetadataStore.fetchMetadata method, i.e. it takes either a serviceName or a DataService instance.
12
+
13
+ Each metadataStore contains a list of DataServices, each accessible via its ‘serviceName’.
14
+ ( see MetadataStore.getDataService and MetadataStore.addDataService). The ‘addDataService’ method is called internally
15
+ anytime a MetadataStore.fetchMetadata call occurs with a new dataService ( or service name).
16
+
17
+ **/
18
+ export class DataService {
19
+ /** DataService constructor
20
+ > var dataService = new DataService({
21
+ > serviceName: altServiceName,
22
+ > hasServerMetadata: false
23
+ > });
24
+
25
+ > var metadataStore = new MetadataStore({
26
+ > namingConvention: NamingConvention.camelCase
27
+ > });
28
+
29
+ > return new EntityManager({
30
+ > dataService: dataService,
31
+ > metadataStore: metadataStore
32
+ > });
33
+ @param config - A configuration object.
34
+ **/
35
+ constructor(config) {
36
+ updateWithConfig(this, config);
37
+ }
38
+ /**
39
+ Returns a copy of this DataService with the specified properties applied.
40
+ @param config - The configuration object to apply to create a new DataService.
41
+ **/
42
+ using(config) {
43
+ if (!config)
44
+ return this;
45
+ let result = new DataService(this);
46
+ return updateWithConfig(result, config);
47
+ }
48
+ static resolve(dataServices) {
49
+ // final defaults
50
+ // Deliberate use of 'as any' below.
51
+ dataServices.push({
52
+ hasServerMetadata: true,
53
+ useJsonp: false
54
+ });
55
+ let ds = new DataService(core.resolveProperties(dataServices, ["serviceName", "adapterName", "uriBuilderName", "hasServerMetadata", "jsonResultsAdapter", "useJsonp"]));
56
+ if (!ds.serviceName) {
57
+ throw new Error("Unable to resolve a 'serviceName' for this dataService");
58
+ }
59
+ ds.adapterInstance = ds.adapterInstance || config.getAdapterInstance("dataService", ds.adapterName);
60
+ ds.jsonResultsAdapter = ds.jsonResultsAdapter || ds.adapterInstance.jsonResultsAdapter;
61
+ ds.uriBuilder = ds.uriBuilder || config.getAdapterInstance("uriBuilder", ds.uriBuilderName);
62
+ return ds;
63
+ }
64
+ /** @hidden @internal */
65
+ static _normalizeServiceName(serviceName) {
66
+ serviceName = serviceName.trim();
67
+ if (serviceName.substr(-1) !== "/") {
68
+ return serviceName + '/';
69
+ }
70
+ else {
71
+ return serviceName;
72
+ }
73
+ }
74
+ /** */
75
+ toJSON() {
76
+ // don't use default value here - because we want to be able to distinguish undefined props for inheritence purposes.
77
+ return core.toJson(this, {
78
+ serviceName: null,
79
+ adapterName: null,
80
+ uriBuilderName: null,
81
+ hasServerMetadata: null,
82
+ jsonResultsAdapter: function (v) {
83
+ return v && v.name;
84
+ },
85
+ useJsonp: null
86
+ });
87
+ }
88
+ static fromJSON(json) {
89
+ json.jsonResultsAdapter = config._fetchObject(JsonResultsAdapter, json.jsonResultsAdapter);
90
+ return new DataService(json);
91
+ }
92
+ /**
93
+ Returns a url for this dataService with the specified suffix. This method handles dataService names either
94
+ with or without trailing '/'s. If the suffix starts with "http" then it will be returned as-is.
95
+ @method qualifyUrl
96
+ @param suffix {String} The resulting url.
97
+ @return {a Url string}
98
+ **/
99
+ qualifyUrl(suffix) {
100
+ if (suffix && suffix.startsWith("http")) {
101
+ return suffix;
102
+ }
103
+ let url = this.serviceName;
104
+ // remove any trailing "/"
105
+ if (core.stringEndsWith(url, "/")) {
106
+ url = url.substr(0, url.length - 1);
107
+ }
108
+ // ensure that it ends with "/" + suffix
109
+ suffix = "/" + suffix;
110
+ if (!core.stringEndsWith(url, suffix)) {
111
+ url = url + suffix;
112
+ }
113
+ return url;
114
+ }
115
+ }
116
+ DataService.prototype._$typeName = "DataService";
117
+ function updateWithConfig(obj, dsConfig) {
118
+ if (dsConfig) {
119
+ assertConfig(dsConfig)
120
+ .whereParam("serviceName").isOptional()
121
+ .whereParam("adapterName").isString().isOptional()
122
+ .whereParam("uriBuilderName").isString().isOptional()
123
+ .whereParam("hasServerMetadata").isBoolean().isOptional()
124
+ .whereParam("jsonResultsAdapter").isInstanceOf(JsonResultsAdapter).isOptional()
125
+ .whereParam("useJsonp").isBoolean().isOptional()
126
+ .applyAll(obj);
127
+ obj.serviceName = obj.serviceName && DataService._normalizeServiceName(obj.serviceName);
128
+ obj.adapterInstance = obj.adapterName ? config.getAdapterInstance("dataService", obj.adapterName) : undefined;
129
+ obj.uriBuilder = obj.uriBuilderName ? config.getAdapterInstance("uriBuilder", obj.uriBuilderName) : undefined;
130
+ }
131
+ return obj;
132
+ }
133
+ /**
134
+ A JsonResultsAdapter instance is used to provide custom extraction and parsing logic on the json results returned by any web service.
135
+ This facility makes it possible for breeze to talk to virtually any web service and return objects that will be first class 'breeze' citizens.
136
+ **/
137
+ export class JsonResultsAdapter {
138
+ /**
139
+ JsonResultsAdapter constructor
140
+
141
+ @example
142
+ //
143
+ var jsonResultsAdapter = new JsonResultsAdapter({
144
+ name: "test1e",
145
+ extractResults: function(json) {
146
+ return json.results;
147
+ },
148
+ visitNode: function(node, mappingContext, nodeContext) {
149
+ var entityType = normalizeTypeName(node.$type);
150
+ var propertyName = nodeContext.propertyName;
151
+ var ignore = propertyName && propertyName.substr(0, 1) === "$";
152
+
153
+ return {
154
+ entityType: entityType,
155
+ nodeId: node.$id,
156
+ nodeRefId: node.$ref,
157
+ ignore: ignore,
158
+ passThru: false // default
159
+ };
160
+ }
161
+ });
162
+
163
+ var dataService = new DataService( {
164
+ serviceName: "breeze/foo",
165
+ jsonResultsAdapter: jsonResultsAdapter
166
+ });
167
+
168
+ var entityManager = new EntityManager( {
169
+ dataService: dataService
170
+ });
171
+
172
+ @param config - A configuration object.
173
+
174
+ **/
175
+ constructor(jsConfig) {
176
+ if (arguments.length !== 1) {
177
+ throw new Error("The JsonResultsAdapter ctor should be called with a single argument that is a configuration object.");
178
+ }
179
+ assertConfig(jsConfig)
180
+ .whereParam("name").isNonEmptyString()
181
+ .whereParam("extractResults").isFunction().isOptional().withDefault(extractResultsDefault)
182
+ .whereParam("extractSaveResults").isFunction().isOptional().withDefault(extractSaveResultsDefault)
183
+ .whereParam("extractKeyMappings").isFunction().isOptional().withDefault(extractKeyMappingsDefault)
184
+ .whereParam("extractDeletedKeys").isFunction().isOptional().withDefault(extractDeletedKeysDefault)
185
+ .whereParam("visitNode").isFunction()
186
+ .applyAll(this);
187
+ config._storeObject(this, "JsonResultsAdapter", this.name);
188
+ }
189
+ }
190
+ JsonResultsAdapter.prototype._$typeName = "JsonResultsAdapter";
191
+ function extractResultsDefault(data) {
192
+ return data.results;
193
+ }
194
+ function extractSaveResultsDefault(data) {
195
+ return data.entities || data.Entities || [];
196
+ }
197
+ function extractKeyMappingsDefault(data) {
198
+ return data.keyMappings || data.KeyMappings || [];
199
+ }
200
+ function extractDeletedKeysDefault(data) {
201
+ return data.deletedKeys || data.DeletedKeys || [];
202
+ }
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGEtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBaUI5Qjs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFvQnRCOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILFlBQVksTUFBMEI7UUFDcEMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFHRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsTUFBeUI7UUFDN0IsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUN6QixJQUFJLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUEyQjtRQUN4QyxpQkFBaUI7UUFDakIsb0NBQW9DO1FBQ25DLFlBQW9CLENBQUMsSUFBSSxDQUFDO1lBQ3pCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFDeEQsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFB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SSxFQUFFLENBQUM7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gJy4vZW50aXR5LW1ldGFkYXRhJztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2VBZGFwdGVyLCBVcmlCdWlsZGVyQWRhcHRlciB9IGZyb20gJy4vaW50ZXJmYWNlLXJlZ2lzdHJ5JztcclxuaW1wb3J0IHsgS2V5TWFwcGluZyB9IGZyb20gJy4vZW50aXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBNYXBwaW5nQ29udGV4dCB9IGZyb20gJy4vbWFwcGluZy1jb250ZXh0JztcclxuaW1wb3J0IHsgYXNzZXJ0Q29uZmlnIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IGNvcmUgfSBmcm9tICcuL2NvcmUnO1xyXG5cclxuLyoqIENvbmZpZ3VyYXRpb24gaW5mbyB0byBiZSBwYXNzZWQgdG8gdGhlIFtbRGF0YVNlcnZpY2VdXSBjb25zdHJ1Y3RvciAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTZXJ2aWNlQ29uZmlnIHtcclxuICAvKiogVGhlIHNlcnZpY2VOYW1lIGZvciB0aGlzIERhdGFTZXJ2aWNlLiAgKiovXHJcbiAgc2VydmljZU5hbWU/OiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBhZGFwdGVyIG5hbWUgZm9yIHRoZSBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXSB0byBiZSB1c2VkIHdpdGggdGhpcyBzZXJ2aWNlLiAgKiovXHJcbiAgYWRhcHRlck5hbWU/OiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBhZGFwdGVyIG5hbWUgZm9yIHRoZSBbW0lVcmlCdWlsZGVyQWRhcHRlcl1dIHRvIGJlIHVzZWQgd2l0aCB0aGlzIHNlcnZpY2UuICAqKi9cclxuICB1cmlCdWlsZGVyTmFtZT86IHN0cmluZztcclxuICAvKiogV2hldGhlciB0aGUgc2VydmVyIGNhbiBwcm92aWRlIG1ldGFkYXRhIGZvciB0aGlzIHNlcnZpY2UuICAqKi9cclxuICBoYXNTZXJ2ZXJNZXRhZGF0YT86IGJvb2xlYW47XHJcbiAgLyoqIFRoZSBbW0pzb25SZXN1bHRzQWRhcHRlcl1dIHVzZWQgdG8gcHJvY2VzcyB0aGUgcmVzdWx0cyBvZiBhbnkgcXVlcnkgYWdhaW5zdCB0aGlzIERhdGFTZXJ2aWNlLiAgKiovXHJcbiAganNvblJlc3VsdHNBZGFwdGVyPzogSnNvblJlc3VsdHNBZGFwdGVyO1xyXG4gIC8qKiBXaGV0aGVyIHRvIHVzZSBKU09OUCB3aGVuIHBlcmZvcm1pbmcgYSAnR0VUJyByZXF1ZXN0IGFnYWluc3QgdGhpcyBzZXJ2aWNlLiAgKiovXHJcbiAgdXNlSnNvbnA/OiBib29sZWFuO1xyXG59XHJcbi8qKlxyXG5BIERhdGFTZXJ2aWNlIGluc3RhbmNlIGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGRldGFpbHMgb2YgYSBzaW5nbGUgJ3NlcnZpY2UnOyB0aGlzIGluY2x1ZGVzIGEgc2VydmljZU5hbWUsIGEgZGF0YVNlcnZpY2UgYWRhcHRlckluc3RhbmNlLFxyXG5hbmQgd2hldGhlciB0aGUgc2VydmljZSBoYXMgc2VydmVyIHNpZGUgbWV0YWRhdGEuXHJcblxyXG5Zb3UgY2FuIGNvbnN0cnVjdCBhbiBFbnRpdHlNYW5hZ2VyIHdpdGggZWl0aGVyIGEgc2VydmljZU5hbWUgb3IgYSBEYXRhU2VydmljZSBpbnN0YW5jZSwgaWYgeW91IHVzZSBhIHNlcnZpY2VOYW1lIHRoZW4gYSBEYXRhU2VydmljZVxyXG5pcyBjb25zdHJ1Y3RlZCBmb3IgeW91LiAgKEl0IGNhbiBhbHNvIGJlIHNldCB2aWEgdGhlIEVudGl0eU1hbmFnZXIuc2V0UHJvcGVydGllcyBtZXRob2QpLlxyXG5cclxuVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgTWV0YWRhdGFTdG9yZS5mZXRjaE1ldGFkYXRhIG1ldGhvZCwgaS5lLiBpdCB0YWtlcyBlaXRoZXIgYSBzZXJ2aWNlTmFtZSBvciBhIERhdGFTZXJ2aWNlIGluc3RhbmNlLlxyXG5cclxuRWFjaCBtZXRhZGF0YVN0b3JlIGNvbnRhaW5zIGEgbGlzdCBvZiBEYXRhU2VydmljZXMsIGVhY2ggYWNjZXNzaWJsZSB2aWEgaXRzIOKAmHNlcnZpY2VOYW1l4oCZLlxyXG4oIHNlZSBNZXRhZGF0YVN0b3JlLmdldERhdGFTZXJ2aWNlIGFuZCBNZXRhZGF0YVN0b3JlLmFkZERhdGFTZXJ2aWNlKS4gIFRoZSDigJhhZGREYXRhU2VydmljZeKAmSBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsbHlcclxuYW55dGltZSBhIE1ldGFkYXRhU3RvcmUuZmV0Y2hNZXRhZGF0YSBjYWxsIG9jY3VycyB3aXRoIGEgbmV3IGRhdGFTZXJ2aWNlICggb3Igc2VydmljZSBuYW1lKS5cclxuXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgRGF0YVNlcnZpY2Uge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF8kdHlwZU5hbWU6IHN0cmluZzsgLy8gYWN0dWFsbHkgcHV0IG9uIHByb3RvdHlwZS5cclxuICAvKiogVGhlIHNlcnZpY2VOYW1lIGZvciB0aGlzIERhdGFTZXJ2aWNlLiBfX1JlYWQgT25seV9fICoqL1xyXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBhZGFwdGVyIG5hbWUgZm9yIHRoZSBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXSB0byBiZSB1c2VkIHdpdGggdGhpcyBzZXJ2aWNlLiBfX1JlYWQgT25seV9fICAqKi9cclxuICBhZGFwdGVyTmFtZTogc3RyaW5nO1xyXG4gIC8qKiAgVGhlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIGltcGxlbWVudGF0aW9uIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEVudGl0eU1hbmFnZXIuIF9fUmVhZCBPbmx5X18gICoqL1xyXG4gIGFkYXB0ZXJJbnN0YW5jZT86IERhdGFTZXJ2aWNlQWRhcHRlcjtcclxuICAvKiogVGhlIGFkYXB0ZXIgbmFtZSBmb3IgdGhlIFtbSVVyaUJ1aWxkZXJBZGFwdGVyXV0gdG8gYmUgdXNlZCB3aXRoIHRoaXMgc2VydmljZS4gX19SZWFkIE9ubHlfXyAgKiovXHJcbiAgdXJpQnVpbGRlck5hbWU6IHN0cmluZztcclxuICAvKiogIFRoZSBbW0lVcmlCdWlsZGVyQWRhcHRlcl1dIGltcGxlbWVudGF0aW9uIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEVudGl0eU1hbmFnZXIuIF9fUmVhZCBPbmx5X18gICoqL1xyXG4gIHVyaUJ1aWxkZXI/OiBVcmlCdWlsZGVyQWRhcHRlcjtcclxuICAvKiogV2hldGhlciB0aGUgc2VydmVyIGNhbiBwcm92aWRlIG1ldGFkYXRhIGZvciB0aGlzIHNlcnZpY2UuIF9fUmVhZCBPbmx5X18gICAqKi9cclxuICBoYXNTZXJ2ZXJNZXRhZGF0YTogYm9vbGVhbjtcclxuICAvKiogVGhlIFtbSnNvblJlc3VsdHNBZGFwdGVyXV0gdXNlZCB0byBwcm9jZXNzIHRoZSByZXN1bHRzIG9mIGFueSBxdWVyeSBhZ2FpbnN0IHRoaXMgRGF0YVNlcnZpY2UuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAganNvblJlc3VsdHNBZGFwdGVyOiBKc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgLyoqIFdoZXRoZXIgdG8gdXNlIEpTT05QIHdoZW4gcGVyZm9ybWluZyBhICdHRVQnIHJlcXVlc3QgYWdhaW5zdCB0aGlzIHNlcnZpY2UuIF9fUmVhZCBPbmx5X18gICoqL1xyXG4gIHVzZUpzb25wOiBib29sZWFuO1xyXG5cclxuICAvKiogICBEYXRhU2VydmljZSBjb25zdHJ1Y3RvclxyXG4gID4gICAgIHZhciBkYXRhU2VydmljZSA9IG5ldyBEYXRhU2VydmljZSh7XHJcbiAgPiAgICAgICAgIHNlcnZpY2VOYW1lOiBhbHRTZXJ2aWNlTmFtZSxcclxuICA+ICAgICAgICAgaGFzU2VydmVyTWV0YWRhdGE6IGZhbHNlXHJcbiAgPiAgICAgfSk7XHJcblxyXG4gID4gICAgIHZhciBtZXRhZGF0YVN0b3JlID0gbmV3IE1ldGFkYXRhU3RvcmUoe1xyXG4gID4gICAgICAgICBuYW1pbmdDb252ZW50aW9uOiBOYW1pbmdDb252ZW50aW9uLmNhbWVsQ2FzZVxyXG4gID4gICAgIH0pO1xyXG5cclxuICA+ICAgICByZXR1cm4gbmV3IEVudGl0eU1hbmFnZXIoe1xyXG4gID4gICAgICAgICBkYXRhU2VydmljZTogZGF0YVNlcnZpY2UsXHJcbiAgPiAgICAgICAgIG1ldGFkYXRhU3RvcmU6IG1ldGFkYXRhU3RvcmVcclxuICA+ICAgICB9KTtcclxuICBAcGFyYW0gY29uZmlnIC0gQSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAqKi9cclxuICBjb25zdHJ1Y3Rvcihjb25maWc/OiBEYXRhU2VydmljZUNvbmZpZykge1xyXG4gICAgdXBkYXRlV2l0aENvbmZpZyh0aGlzLCBjb25maWcpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgRGF0YVNlcnZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMgYXBwbGllZC5cclxuICBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGFwcGx5IHRvIGNyZWF0ZSBhIG5ldyBEYXRhU2VydmljZS5cclxuICAqKi9cclxuICB1c2luZyhjb25maWc6IERhdGFTZXJ2aWNlQ29uZmlnKSB7XHJcbiAgICBpZiAoIWNvbmZpZykgcmV0dXJuIHRoaXM7XHJcbiAgICBsZXQgcmVzdWx0ID0gbmV3IERhdGFTZXJ2aWNlKHRoaXMpO1xyXG4gICAgcmV0dXJuIHVwZGF0ZVdpdGhDb25maWcocmVzdWx0LCBjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlc29sdmUoZGF0YVNlcnZpY2VzOiBEYXRhU2VydmljZVtdKSB7XHJcbiAgICAvLyBmaW5hbCBkZWZhdWx0c1xyXG4gICAgLy8gRGVsaWJlcmF0ZSB1c2Ugb2YgJ2FzIGFueScgYmVsb3cuXHJcbiAgICAoZGF0YVNlcnZpY2VzIGFzIGFueSkucHVzaCh7XHJcbiAgICAgIGhhc1NlcnZlck1ldGFkYXRhOiB0cnVlLFxyXG4gICAgICB1c2VKc29ucDogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgbGV0IGRzID0gbmV3IERhdGFTZXJ2aWNlKGNvcmUucmVzb2x2ZVByb3BlcnRpZXMoZGF0YVNlcnZpY2VzLFxyXG4gICAgICAgIFtcInNlcnZpY2VOYW1lXCIsIFwiYWRhcHRlck5hbWVcIiwgXCJ1cmlCdWlsZGVyTmFtZVwiLCBcImhhc1NlcnZlck1ldGFkYXRhXCIsIFwianNvblJlc3VsdHNBZGFwdGVyXCIsIFwidXNlSnNvbnBcIl0pKTtcclxuXHJcbiAgICBpZiAoIWRzLnNlcnZpY2VOYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byByZXNvbHZlIGEgJ3NlcnZpY2VOYW1lJyBmb3IgdGhpcyBkYXRhU2VydmljZVwiKTtcclxuICAgIH1cclxuICAgIGRzLmFkYXB0ZXJJbnN0YW5jZSA9IGRzLmFkYXB0ZXJJbnN0YW5jZSB8fCBjb25maWcuZ2V0QWRhcHRlckluc3RhbmNlPERhdGFTZXJ2aWNlQWRhcHRlcj4oXCJkYXRhU2VydmljZVwiLCBkcy5hZGFwdGVyTmFtZSk7XHJcbiAgICBkcy5qc29uUmVzdWx0c0FkYXB0ZXIgPSBkcy5qc29uUmVzdWx0c0FkYXB0ZXIgfHwgZHMuYWRhcHRlckluc3RhbmNlIS5qc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgICBkcy51cmlCdWlsZGVyID0gZHMudXJpQnVpbGRlciB8fCBjb25maWcuZ2V0QWRhcHRlckluc3RhbmNlPFVyaUJ1aWxkZXJBZGFwdGVyPihcInVyaUJ1aWxkZXJcIiwgZHMudXJpQnVpbGRlck5hbWUpO1xyXG4gICAgcmV0dXJuIGRzO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIF9ub3JtYWxpemVTZXJ2aWNlTmFtZShzZXJ2aWNlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VOYW1lLnRyaW0oKTtcclxuICAgIGlmIChzZXJ2aWNlTmFtZS5zdWJzdHIoLTEpICE9PSBcIi9cIikge1xyXG4gICAgICByZXR1cm4gc2VydmljZU5hbWUgKyAnLyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gc2VydmljZU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogICovXHJcbiAgdG9KU09OKCkge1xyXG4gICAgLy8gZG9uJ3QgdXNlIGRlZmF1bHQgdmFsdWUgaGVyZSAtIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIHVuZGVmaW5lZCBwcm9wcyBmb3IgaW5oZXJpdGVuY2UgcHVycG9zZXMuXHJcbiAgICByZXR1cm4gY29yZS50b0pzb24odGhpcywge1xyXG4gICAgICBzZXJ2aWNlTmFtZTogbnVsbCxcclxuICAgICAgYWRhcHRlck5hbWU6IG51bGwsXHJcbiAgICAgIHVyaUJ1aWxkZXJOYW1lOiBudWxsLFxyXG4gICAgICBoYXNTZXJ2ZXJNZXRhZGF0YTogbnVsbCxcclxuICAgICAganNvblJlc3VsdHNBZGFwdGVyOiBmdW5jdGlvbiAodjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHYgJiYgdi5uYW1lO1xyXG4gICAgICB9LFxyXG4gICAgICB1c2VKc29ucDogbnVsbFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbjogYW55KSB7XHJcbiAgICBqc29uLmpzb25SZXN1bHRzQWRhcHRlciA9IGNvbmZpZy5fZmV0Y2hPYmplY3QoSnNvblJlc3VsdHNBZGFwdGVyLCBqc29uLmpzb25SZXN1bHRzQWRhcHRlcik7XHJcbiAgICByZXR1cm4gbmV3IERhdGFTZXJ2aWNlKGpzb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgIFJldHVybnMgYSB1cmwgZm9yIHRoaXMgZGF0YVNlcnZpY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHN1ZmZpeC4gVGhpcyBtZXRob2QgaGFuZGxlcyBkYXRhU2VydmljZSBuYW1lcyBlaXRoZXJcclxuICAgd2l0aCBvciB3aXRob3V0IHRyYWlsaW5nICcvJ3MuICBJZiB0aGUgc3VmZml4IHN0YXJ0cyB3aXRoIFwiaHR0cFwiIHRoZW4gaXQgd2lsbCBiZSByZXR1cm5lZCBhcy1pcy5cclxuICAgQG1ldGhvZCBxdWFsaWZ5VXJsXHJcbiAgIEBwYXJhbSBzdWZmaXgge1N0cmluZ30gVGhlIHJlc3VsdGluZyB1cmwuXHJcbiAgIEByZXR1cm4ge2EgVXJsIHN0cmluZ31cclxuICAgKiovXHJcbiAgcXVhbGlmeVVybChzdWZmaXg6IHN0cmluZykge1xyXG4gICAgaWYgKHN1ZmZpeCAmJiBzdWZmaXguc3RhcnRzV2l0aChcImh0dHBcIikpIHtcclxuICAgICAgcmV0dXJuIHN1ZmZpeDtcclxuICAgIH1cclxuICAgIGxldCB1cmwgPSB0aGlzLnNlcnZpY2VOYW1lO1xyXG4gICAgLy8gcmVtb3ZlIGFueSB0cmFpbGluZyBcIi9cIlxyXG4gICAgaWYgKGNvcmUuc3RyaW5nRW5kc1dpdGgodXJsLCBcIi9cIikpIHtcclxuICAgICAgdXJsID0gdXJsLnN1YnN0cigwLCB1cmwubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbiAgICAvLyBlbnN1cmUgdGhhdCBpdCBlbmRzIHdpdGggXCIvXCIgKyBzdWZmaXhcclxuICAgIHN1ZmZpeCA9IFwiL1wiICsgc3VmZml4O1xyXG4gICAgaWYgKCFjb3JlLnN0cmluZ0VuZHNXaXRoKHVybCwgc3VmZml4KSkge1xyXG4gICAgICB1cmwgPSB1cmwgKyBzdWZmaXg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuXHJcbn1cclxuRGF0YVNlcnZpY2UucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIkRhdGFTZXJ2aWNlXCI7XHJcblxyXG5mdW5jdGlvbiB1cGRhdGVXaXRoQ29uZmlnKG9iajogRGF0YVNlcnZpY2UsIGRzQ29uZmlnPzogRGF0YVNlcnZpY2VDb25maWcpIHtcclxuICBpZiAoZHNDb25maWcpIHtcclxuICAgIGFzc2VydENvbmZpZyhkc0NvbmZpZylcclxuICAgICAgICAud2hlcmVQYXJhbShcInNlcnZpY2VOYW1lXCIpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiYWRhcHRlck5hbWVcIikuaXNTdHJpbmcoKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcInVyaUJ1aWxkZXJOYW1lXCIpLmlzU3RyaW5nKCkuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJoYXNTZXJ2ZXJNZXRhZGF0YVwiKS5pc0Jvb2xlYW4oKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcImpzb25SZXN1bHRzQWRhcHRlclwiKS5pc0luc3RhbmNlT2YoSnNvblJlc3VsdHNBZGFwdGVyKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcInVzZUpzb25wXCIpLmlzQm9vbGVhbigpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC5hcHBseUFsbChvYmopO1xyXG4gICAgb2JqLnNlcnZpY2VOYW1lID0gb2JqLnNlcnZpY2VOYW1lICYmIERhdGFTZXJ2aWNlLl9ub3JtYWxpemVTZXJ2aWNlTmFtZShvYmouc2VydmljZU5hbWUpO1xyXG4gICAgb2JqLmFkYXB0ZXJJbnN0YW5jZSA9IG9iai5hZGFwdGVyTmFtZSA/ICBjb25maWcuZ2V0QWRhcHRlckluc3RhbmNlPERhdGFTZXJ2aWNlQWRhcHRlcj4oXCJkYXRhU2VydmljZVwiLCBvYmouYWRhcHRlck5hbWUpIDogdW5kZWZpbmVkO1xyXG4gICAgb2JqLnVyaUJ1aWxkZXIgPSBvYmoudXJpQnVpbGRlck5hbWUgPyBjb25maWcuZ2V0QWRhcHRlckluc3RhbmNlPFVyaUJ1aWxkZXJBZGFwdGVyPihcInVyaUJ1aWxkZXJcIiwgb2JqLnVyaUJ1aWxkZXJOYW1lKSA6IHVuZGVmaW5lZDtcclxuICB9XHJcbiAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBOb2RlTWV0YSB7XHJcbiAgZW50aXR5VHlwZT86IEVudGl0eVR5cGU7XHJcbiAgbm9kZUlkPzogc3RyaW5nO1xyXG4gIG5vZGVSZWZJZD86IHN0cmluZztcclxuICBpZ25vcmU/OiBib29sZWFuO1xyXG4gIHBhc3NUaHJ1PzogYm9vbGVhbjtcclxuICBleHRyYU1ldGFkYXRhPzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVDb250ZXh0IHtcclxuICBub2RlVHlwZTogc3RyaW5nO1xyXG4gIHByb3BlcnR5TmFtZT86IHN0cmluZztcclxuICBuYXZpZ2F0aW9uUHJvcGVydHk/OiBOYXZpZ2F0aW9uUHJvcGVydHk7XHJcbn1cclxuXHJcbi8qKiBDb25maWd1cmF0aW9uIGluZm8gdG8gYmUgcGFzc2VkIHRvIHRoZSBbW0pzb25SZXN1bHRzQWRhcHRlcl1dIGNvbnN0cnVjdG9yICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSnNvblJlc3VsdHNBZGFwdGVyQ29uZmlnIHtcclxuICAvKiogVGhlIG5hbWUgb2YgdGhpcyBhZGFwdGVyLiAgVGhpcyBuYW1lIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW5kIGxvY2F0ZSB0aGlzIGluc3RhbmNlIHdoZW4gYW4gJ2V4cG9ydGVkJyBKc29uUmVzdWx0c0FkYXB0ZXIgaXMgbGF0ZXIgaW1wb3J0ZWQuICovXHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIC8qKiBBIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHF1ZXJ5IG9wZXJhdGlvbiB0byBleHRyYWN0IHRoZSAncGF5bG9hZCcgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiBcclxuICBUaGlzIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHRvIHNpbXBseSByZXR1cm4gdGhlIFwicmVzdWx0c1wiIHByb3BlcnR5IGZyb20gYW55IGpzb24gcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBxdWVyeS4gXHJcbiAgKi9cclxuICBleHRyYWN0UmVzdWx0cz86IEZ1bmN0aW9uO1xyXG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHNhdmUgb3BlcmF0aW9uIHRvIGV4dHJhY3QgdGhlIGVudGl0aWVzIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gIE11c3QgcmV0dXJuIGFuIGFycmF5LlxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggc2ltcGx5IHJldHVybnMgdGhlIFwiZW50aXRpZXNcIiBwcm9wZXJ0eSBmcm9tIGFueSBqc29uIHJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgc2F2ZS4gKi9cclxuICBleHRyYWN0U2F2ZVJlc3VsdHM/OiBGdW5jdGlvbjtcclxuICAvKiogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBzYXZlIG9wZXJhdGlvbiB0byBleHRyYWN0IHRoZSBrZXkgbWFwcGluZ3MgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiAgTXVzdCByZXR1cm4gYW4gYXJyYXkuXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBzaW1wbHkgcmV0dXJucyB0aGUgXCJrZXlNYXBwaW5nc1wiIHByb3BlcnR5IGZyb20gYW55IGpzb24gcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzYXZlLiAqL1xyXG4gIGV4dHJhY3RLZXlNYXBwaW5ncz86IChkYXRhOiB7fSkgPT4gS2V5TWFwcGluZ1tdO1xyXG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHNhdmUgb3BlcmF0aW9uIHRvIGV4dHJhY3QgYW55IGRlbGV0ZWQga2V5cyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuICBNdXN0IHJldHVybiBhbiBhcnJheS5cclxuICBUaGlzIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHNpbXBseSByZXR1cm5zIGFuIGVtcHR5IGFycmF5LiAqL1xyXG4gIGV4dHJhY3REZWxldGVkS2V5cz86IChkYXRhOiB7fSkgPT4gYW55W107IC8vIFRPRE86IHJlZmluZVxyXG4gIC8qKiBBIHZpc2l0b3IgbWV0aG9kIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBub2RlIG9mIHRoZSByZXR1cm5lZCBwYXlsb2FkLiAqL1xyXG4gIHZpc2l0Tm9kZT86ICh2OiBhbnksIG1jPzogTWFwcGluZ0NvbnRleHQsIG5vZGVDb250ZXh0PzogTm9kZUNvbnRleHQpID0+IE5vZGVNZXRhO1xyXG5cclxufVxyXG5cclxuLyoqXHJcbkEgSnNvblJlc3VsdHNBZGFwdGVyIGluc3RhbmNlIGlzIHVzZWQgdG8gcHJvdmlkZSBjdXN0b20gZXh0cmFjdGlvbiBhbmQgcGFyc2luZyBsb2dpYyBvbiB0aGUganNvbiByZXN1bHRzIHJldHVybmVkIGJ5IGFueSB3ZWIgc2VydmljZS5cclxuVGhpcyBmYWNpbGl0eSBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYnJlZXplIHRvIHRhbGsgdG8gdmlydHVhbGx5IGFueSB3ZWIgc2VydmljZSBhbmQgcmV0dXJuIG9iamVjdHMgdGhhdCB3aWxsIGJlIGZpcnN0IGNsYXNzICdicmVlemUnIGNpdGl6ZW5zLlxyXG4qKi9cclxuZXhwb3J0IGNsYXNzIEpzb25SZXN1bHRzQWRhcHRlciB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgXyR0eXBlTmFtZTogc3RyaW5nOyAvLyBhY3R1YWxseSBwdXQgb24gcHJvdG90eXBlLlxyXG4gIC8qKiBUaGUgbmFtZSBvZiB0aGlzIGFkYXB0ZXIuICBUaGlzIG5hbWUgaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBhbmQgbG9jYXRlIHRoaXMgaW5zdGFuY2Ugd2hlbiBhbiAnZXhwb3J0ZWQnIEpzb25SZXN1bHRzQWRhcHRlciBpcyBsYXRlciBpbXBvcnRlZC4gKi9cclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgLyoqIEEgRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgcXVlcnkgb3BlcmF0aW9uIHRvIGV4dHJhY3QgdGhlICdwYXlsb2FkJyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuIFxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggc2ltcGx5IHJldHVybnMgdGhlIFwicmVzdWx0c1wiIHByb3BlcnR5IGZyb20gYW55IGpzb24gcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBxdWVyeS4gKi9cclxuICBleHRyYWN0UmVzdWx0czogRnVuY3Rpb247IC8vIFRPRE8gLSByZWZpbmVcclxuICAvKiogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBzYXZlIG9wZXJhdGlvbiB0byBleHRyYWN0IHRoZSBlbnRpdGllcyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuICBNdXN0IHJldHVybiBhbiBhcnJheS5cclxuICBUaGlzIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZSBcImVudGl0aWVzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHNhdmUuICovXHJcbiAgZXh0cmFjdFNhdmVSZXN1bHRzOiBGdW5jdGlvbjtcclxuICAgIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHNhdmUgb3BlcmF0aW9uIHRvIGV4dHJhY3QgdGhlIGtleSBtYXBwaW5ncyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuICBNdXN0IHJldHVybiBhbiBhcnJheS5cclxuICBUaGlzIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZSBcImtleU1hcHBpbmdzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHNhdmUuICovXHJcbiAgZXh0cmFjdEtleU1hcHBpbmdzOiAgKGRhdGE6IHt9KSA9PiBLZXlNYXBwaW5nW107XHJcbiAgLyoqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgc2F2ZSBvcGVyYXRpb24gdG8gZXh0cmFjdCBhbnkgZGVsZXRlZCBrZXlzIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gIE11c3QgcmV0dXJuIGFuIGFycmF5LlxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggaXMgdG8gc2ltcGx5IHJldHVybnMgdGhlIFwiZGVsZXRlZEtleXNcIiBwcm9wZXJ0eSBmcm9tIGFueSBqc29uIHJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgc2F2ZS4gKi9cclxuICBleHRyYWN0RGVsZXRlZEtleXM/OiAoZGF0YToge30pID0+IGFueVtdOyAvLyBUT0RPOiByZWZpbmVcclxuICAvKiogQSB2aXNpdG9yIG1ldGhvZCB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggbm9kZSBvZiB0aGUgcmV0dXJuZWQgcGF5bG9hZC4gKi9cclxuICB2aXNpdE5vZGU6IEZ1bmN0aW9uO1xyXG5cclxuICAvKipcclxuICBKc29uUmVzdWx0c0FkYXB0ZXIgY29uc3RydWN0b3JcclxuXHJcbiAgQGV4YW1wbGVcclxuICAgICAgLy9cclxuICAgICAgdmFyIGpzb25SZXN1bHRzQWRhcHRlciA9IG5ldyBKc29uUmVzdWx0c0FkYXB0ZXIoe1xyXG4gICAgICAgICAgbmFtZTogXCJ0ZXN0MWVcIixcclxuICAgICAgICAgIGV4dHJhY3RSZXN1bHRzOiBmdW5jdGlvbihqc29uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGpzb24ucmVzdWx0cztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB2aXNpdE5vZGU6IGZ1bmN0aW9uKG5vZGUsIG1hcHBpbmdDb250ZXh0LCBub2RlQ29udGV4dCkge1xyXG4gICAgICAgICAgICAgIHZhciBlbnRpdHlUeXBlID0gbm9ybWFsaXplVHlwZU5hbWUobm9kZS4kdHlwZSk7XHJcbiAgICAgICAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IG5vZGVDb250ZXh0LnByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgICB2YXIgaWdub3JlID0gcHJvcGVydHlOYW1lICYmIHByb3BlcnR5TmFtZS5zdWJzdHIoMCwgMSkgPT09IFwiJFwiO1xyXG5cclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxyXG4gICAgICAgICAgICAgICAgICBub2RlSWQ6IG5vZGUuJGlkLFxyXG4gICAgICAgICAgICAgICAgICBub2RlUmVmSWQ6IG5vZGUuJHJlZixcclxuICAgICAgICAgICAgICAgICAgaWdub3JlOiBpZ25vcmUsXHJcbiAgICAgICAgICAgICAgICAgIHBhc3NUaHJ1OiBmYWxzZSAvLyBkZWZhdWx0XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB2YXIgZGF0YVNlcnZpY2UgPSBuZXcgRGF0YVNlcnZpY2UoIHtcclxuICAgICAgICAgICAgICBzZXJ2aWNlTmFtZTogXCJicmVlemUvZm9vXCIsXHJcbiAgICAgICAgICAgICAganNvblJlc3VsdHNBZGFwdGVyOiBqc29uUmVzdWx0c0FkYXB0ZXJcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB2YXIgZW50aXR5TWFuYWdlciA9IG5ldyBFbnRpdHlNYW5hZ2VyKCB7XHJcbiAgICAgICAgICBkYXRhU2VydmljZTogZGF0YVNlcnZpY2VcclxuICAgICAgfSk7XHJcblxyXG4gIEBwYXJhbSBjb25maWcgLSBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG5cclxuICAqKi9cclxuICBjb25zdHJ1Y3Rvcihqc0NvbmZpZzogSnNvblJlc3VsdHNBZGFwdGVyQ29uZmlnKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgSnNvblJlc3VsdHNBZGFwdGVyIGN0b3Igc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMgYSBjb25maWd1cmF0aW9uIG9iamVjdC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzZXJ0Q29uZmlnKGpzQ29uZmlnKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwibmFtZVwiKS5pc05vbkVtcHR5U3RyaW5nKClcclxuICAgICAgICAud2hlcmVQYXJhbShcImV4dHJhY3RSZXN1bHRzXCIpLmlzRnVuY3Rpb24oKS5pc09wdGlvbmFsKCkud2l0aERlZmF1bHQoZXh0cmFjdFJlc3VsdHNEZWZhdWx0KVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiZXh0cmFjdFNhdmVSZXN1bHRzXCIpLmlzRnVuY3Rpb24oKS5pc09wdGlvbmFsKCkud2l0aERlZmF1bHQoZXh0cmFjdFNhdmVSZXN1bHRzRGVmYXVsdClcclxuICAgICAgICAud2hlcmVQYXJhbShcImV4dHJhY3RLZXlNYXBwaW5nc1wiKS5pc0Z1bmN0aW9uKCkuaXNPcHRpb25hbCgpLndpdGhEZWZhdWx0KGV4dHJhY3RLZXlNYXBwaW5nc0RlZmF1bHQpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJleHRyYWN0RGVsZXRlZEtleXNcIikuaXNGdW5jdGlvbigpLmlzT3B0aW9uYWwoKS53aXRoRGVmYXVsdChleHRyYWN0RGVsZXRlZEtleXNEZWZhdWx0KVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwidmlzaXROb2RlXCIpLmlzRnVuY3Rpb24oKVxyXG4gICAgICAgIC5hcHBseUFsbCh0aGlzKTtcclxuICAgIGNvbmZpZy5fc3RvcmVPYmplY3QodGhpcywgXCJKc29uUmVzdWx0c0FkYXB0ZXJcIiwgdGhpcy5uYW1lKTtcclxuICB9XHJcblxyXG59XHJcbkpzb25SZXN1bHRzQWRhcHRlci5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiSnNvblJlc3VsdHNBZGFwdGVyXCI7XHJcblxyXG5mdW5jdGlvbiBleHRyYWN0UmVzdWx0c0RlZmF1bHQoZGF0YTogYW55KSB7XHJcbiAgcmV0dXJuIGRhdGEucmVzdWx0cztcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0cmFjdFNhdmVSZXN1bHRzRGVmYXVsdChkYXRhOiBhbnkpIHtcclxuICByZXR1cm4gZGF0YS5lbnRpdGllcyB8fCBkYXRhLkVudGl0aWVzIHx8IFtdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBleHRyYWN0S2V5TWFwcGluZ3NEZWZhdWx0KGRhdGE6IGFueSkge1xyXG4gIHJldHVybiBkYXRhLmtleU1hcHBpbmdzIHx8IGRhdGEuS2V5TWFwcGluZ3MgfHwgW107XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3REZWxldGVkS2V5c0RlZmF1bHQoZGF0YTogYW55KSB7XHJcbiAgcmV0dXJuIGRhdGEuZGVsZXRlZEtleXMgfHwgZGF0YS5EZWxldGVkS2V5cyB8fCBbXTtcclxufVxyXG5cclxuIl19