breeze-client 2.1.3-mjs → 2.1.4

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 (394) hide show
  1. package/README.md +18 -5
  2. package/adapter-ajax-angularjs/{index.d.ts → breeze-client-adapter-ajax-angularjs.d.ts} +0 -1
  3. package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +1 -0
  4. package/adapter-ajax-angularjs/package.json +13 -0
  5. package/adapter-ajax-fetch/{index.d.ts → breeze-client-adapter-ajax-fetch.d.ts} +0 -1
  6. package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +1 -0
  7. package/adapter-ajax-fetch/package.json +13 -0
  8. package/adapter-ajax-httpclient/{index.d.ts → breeze-client-adapter-ajax-httpclient.d.ts} +0 -1
  9. package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +1 -0
  10. package/adapter-ajax-httpclient/package.json +13 -0
  11. package/adapter-ajax-jquery/{index.d.ts → breeze-client-adapter-ajax-jquery.d.ts} +0 -1
  12. package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +1 -0
  13. package/adapter-ajax-jquery/package.json +13 -0
  14. package/adapter-ajax-post/{index.d.ts → breeze-client-adapter-ajax-post.d.ts} +0 -1
  15. package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +1 -0
  16. package/adapter-ajax-post/package.json +13 -0
  17. package/adapter-data-service-odata/{index.d.ts → breeze-client-adapter-data-service-odata.d.ts} +0 -1
  18. package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +1 -0
  19. package/adapter-data-service-odata/package.json +13 -0
  20. package/adapter-data-service-webapi/{index.d.ts → breeze-client-adapter-data-service-webapi.d.ts} +0 -1
  21. package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +1 -0
  22. package/adapter-data-service-webapi/package.json +13 -0
  23. package/adapter-model-library-backing-store/{index.d.ts → breeze-client-adapter-model-library-backing-store.d.ts} +0 -1
  24. package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +1 -0
  25. package/adapter-model-library-backing-store/package.json +13 -0
  26. package/adapter-model-library-ko/{index.d.ts → breeze-client-adapter-model-library-ko.d.ts} +0 -1
  27. package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +1 -0
  28. package/adapter-model-library-ko/package.json +13 -0
  29. package/adapter-uri-builder-json/{index.d.ts → breeze-client-adapter-uri-builder-json.d.ts} +0 -1
  30. package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +1 -0
  31. package/adapter-uri-builder-json/package.json +13 -0
  32. package/adapter-uri-builder-odata/{index.d.ts → breeze-client-adapter-uri-builder-odata.d.ts} +0 -1
  33. package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +1 -0
  34. package/adapter-uri-builder-odata/package.json +13 -0
  35. package/breeze-client.d.ts +8 -0
  36. package/breeze-client.metadata.json +1 -0
  37. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +190 -0
  38. package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +1 -0
  39. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +2 -0
  40. package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +1 -0
  41. package/bundles/breeze-client-adapter-ajax-fetch.umd.js +190 -0
  42. package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +1 -0
  43. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +2 -0
  44. package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +1 -0
  45. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +195 -0
  46. package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +1 -0
  47. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +2 -0
  48. package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +1 -0
  49. package/bundles/breeze-client-adapter-ajax-jquery.umd.js +115 -0
  50. package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +1 -0
  51. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +2 -0
  52. package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +1 -0
  53. package/bundles/breeze-client-adapter-ajax-post.umd.js +92 -0
  54. package/bundles/breeze-client-adapter-ajax-post.umd.js.map +1 -0
  55. package/bundles/breeze-client-adapter-ajax-post.umd.min.js +2 -0
  56. package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +1 -0
  57. package/bundles/breeze-client-adapter-data-service-odata.umd.js +743 -0
  58. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -0
  59. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +16 -0
  60. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -0
  61. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +326 -0
  62. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -0
  63. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +16 -0
  64. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -0
  65. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +280 -0
  66. package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +1 -0
  67. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +2 -0
  68. package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +1 -0
  69. package/bundles/breeze-client-adapter-model-library-ko.umd.js +252 -0
  70. package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +1 -0
  71. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +2 -0
  72. package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +1 -0
  73. package/bundles/breeze-client-adapter-uri-builder-json.umd.js +96 -0
  74. package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +1 -0
  75. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +2 -0
  76. package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +1 -0
  77. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +262 -0
  78. package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +1 -0
  79. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +2 -0
  80. package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +1 -0
  81. package/bundles/breeze-client-mixin-get-entity-graph.umd.js +258 -0
  82. package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +1 -0
  83. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +2 -0
  84. package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +1 -0
  85. package/bundles/breeze-client-mixin-save-queuing.umd.js +579 -0
  86. package/bundles/breeze-client-mixin-save-queuing.umd.js.map +1 -0
  87. package/bundles/breeze-client-mixin-save-queuing.umd.min.js +16 -0
  88. package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +1 -0
  89. package/bundles/breeze-client.umd.js +14098 -0
  90. package/bundles/breeze-client.umd.js.map +1 -0
  91. package/bundles/breeze-client.umd.min.js +16 -0
  92. package/bundles/breeze-client.umd.min.js.map +1 -0
  93. package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +130 -0
  94. package/esm2015/adapter-ajax-angularjs/adapter-core.js +49 -0
  95. package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  96. package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +130 -0
  97. package/esm2015/adapter-ajax-fetch/adapter-core.js +49 -0
  98. package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  99. package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +137 -0
  100. package/esm2015/adapter-ajax-httpclient/adapter-core.js +49 -0
  101. package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  102. package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +103 -0
  103. package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  104. package/esm2015/adapter-ajax-post/adapter-ajax-post.js +77 -0
  105. package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  106. package/esm2015/adapter-data-service-odata/adapter-core.js +49 -0
  107. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +459 -0
  108. package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  109. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +93 -0
  110. package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  111. package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +268 -0
  112. package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  113. package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +240 -0
  114. package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  115. package/esm2015/adapter-uri-builder-json/adapter-core.js +49 -0
  116. package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +36 -0
  117. package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  118. package/esm2015/adapter-uri-builder-odata/adapter-core.js +49 -0
  119. package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +192 -0
  120. package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  121. package/esm2015/breeze-client.js +9 -0
  122. package/esm2015/index.js +2 -0
  123. package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  124. package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  125. package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  126. package/esm2015/mixin-save-queuing/mixin-save-queuing.js +400 -0
  127. package/esm2015/src/abstract-data-service-adapter.js +296 -0
  128. package/esm2015/src/array.js +4 -0
  129. package/esm2015/src/assert-param.js +312 -0
  130. package/esm2015/src/breeze.js +85 -0
  131. package/esm2015/src/complex-array.js +119 -0
  132. package/esm2015/src/config.js +223 -0
  133. package/esm2015/src/core.js +709 -0
  134. package/esm2015/src/csdl-metadata-parser.js +385 -0
  135. package/esm2015/src/data-service.js +203 -0
  136. package/esm2015/src/data-type.js +444 -0
  137. package/esm2015/src/default-property-interceptor.js +460 -0
  138. package/esm2015/src/entity-action.js +45 -0
  139. package/esm2015/src/entity-aspect.js +806 -0
  140. package/esm2015/src/entity-group.js +187 -0
  141. package/esm2015/src/entity-key.js +116 -0
  142. package/esm2015/src/entity-manager.js +2094 -0
  143. package/esm2015/src/entity-metadata.js +2109 -0
  144. package/esm2015/src/entity-query.js +996 -0
  145. package/esm2015/src/entity-state.js +99 -0
  146. package/esm2015/src/enum.js +141 -0
  147. package/esm2015/src/event.js +256 -0
  148. package/esm2015/src/interface-registry.js +41 -0
  149. package/esm2015/src/key-generator.js +108 -0
  150. package/esm2015/src/local-query-comparison-options.js +65 -0
  151. package/esm2015/src/mapping-context.js +405 -0
  152. package/esm2015/src/naming-convention.js +88 -0
  153. package/esm2015/src/observable-array.js +185 -0
  154. package/esm2015/src/predicate.js +1235 -0
  155. package/esm2015/src/primitive-array.js +87 -0
  156. package/esm2015/src/query-options.js +152 -0
  157. package/esm2015/src/relation-array.js +175 -0
  158. package/esm2015/src/save-options.js +41 -0
  159. package/esm2015/src/unattached-children-map.js +58 -0
  160. package/esm2015/src/validate.js +991 -0
  161. package/esm2015/src/validation-options.js +64 -0
  162. package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +132 -0
  163. package/esm5/adapter-ajax-angularjs/adapter-core.js +49 -0
  164. package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
  165. package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +132 -0
  166. package/esm5/adapter-ajax-fetch/adapter-core.js +49 -0
  167. package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
  168. package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +139 -0
  169. package/esm5/adapter-ajax-httpclient/adapter-core.js +49 -0
  170. package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
  171. package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +105 -0
  172. package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
  173. package/esm5/adapter-ajax-post/adapter-ajax-post.js +81 -0
  174. package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
  175. package/esm5/adapter-data-service-odata/adapter-core.js +49 -0
  176. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +466 -0
  177. package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
  178. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +98 -0
  179. package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
  180. package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +270 -0
  181. package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
  182. package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +242 -0
  183. package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
  184. package/esm5/adapter-uri-builder-json/adapter-core.js +49 -0
  185. package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +38 -0
  186. package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
  187. package/esm5/adapter-uri-builder-odata/adapter-core.js +49 -0
  188. package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +197 -0
  189. package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
  190. package/esm5/breeze-client.js +9 -0
  191. package/esm5/index.js +2 -0
  192. package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
  193. package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
  194. package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
  195. package/esm5/mixin-save-queuing/mixin-save-queuing.js +412 -0
  196. package/esm5/src/abstract-data-service-adapter.js +302 -0
  197. package/esm5/src/array.js +4 -0
  198. package/esm5/src/assert-param.js +317 -0
  199. package/esm5/src/breeze.js +85 -0
  200. package/esm5/src/complex-array.js +119 -0
  201. package/esm5/src/config.js +228 -0
  202. package/esm5/src/core.js +717 -0
  203. package/esm5/src/csdl-metadata-parser.js +385 -0
  204. package/esm5/src/data-service.js +207 -0
  205. package/esm5/src/data-type.js +451 -0
  206. package/esm5/src/default-property-interceptor.js +460 -0
  207. package/esm5/src/entity-action.js +52 -0
  208. package/esm5/src/entity-aspect.js +812 -0
  209. package/esm5/src/entity-group.js +189 -0
  210. package/esm5/src/entity-key.js +118 -0
  211. package/esm5/src/entity-manager.js +2112 -0
  212. package/esm5/src/entity-metadata.js +2144 -0
  213. package/esm5/src/entity-query.js +1023 -0
  214. package/esm5/src/entity-state.js +106 -0
  215. package/esm5/src/enum.js +144 -0
  216. package/esm5/src/event.js +259 -0
  217. package/esm5/src/interface-registry.js +43 -0
  218. package/esm5/src/key-generator.js +111 -0
  219. package/esm5/src/local-query-comparison-options.js +67 -0
  220. package/esm5/src/mapping-context.js +407 -0
  221. package/esm5/src/naming-convention.js +90 -0
  222. package/esm5/src/observable-array.js +201 -0
  223. package/esm5/src/predicate.js +1300 -0
  224. package/esm5/src/primitive-array.js +87 -0
  225. package/esm5/src/query-options.js +167 -0
  226. package/esm5/src/relation-array.js +175 -0
  227. package/esm5/src/save-options.js +43 -0
  228. package/esm5/src/unattached-children-map.js +60 -0
  229. package/esm5/src/validate.js +996 -0
  230. package/esm5/src/validation-options.js +66 -0
  231. package/fesm2015/{breeze-client-adapter-ajax-angularjs.mjs → breeze-client-adapter-ajax-angularjs.js} +1 -1
  232. package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  233. package/fesm2015/{breeze-client-adapter-ajax-fetch.mjs → breeze-client-adapter-ajax-fetch.js} +3 -5
  234. package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +1 -0
  235. package/fesm2015/{breeze-client-adapter-ajax-httpclient.mjs → breeze-client-adapter-ajax-httpclient.js} +1 -1
  236. package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  237. package/fesm2015/{breeze-client-adapter-ajax-jquery.mjs → breeze-client-adapter-ajax-jquery.js} +2 -2
  238. package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +1 -0
  239. package/{fesm2020/breeze-client-adapter-ajax-post.mjs → fesm2015/breeze-client-adapter-ajax-post.js} +1 -1
  240. package/fesm2015/breeze-client-adapter-ajax-post.js.map +1 -0
  241. package/fesm2015/{breeze-client-adapter-data-service-odata.mjs → breeze-client-adapter-data-service-odata.js} +22 -20
  242. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -0
  243. package/fesm2015/{breeze-client-adapter-data-service-webapi.mjs → breeze-client-adapter-data-service-webapi.js} +13 -13
  244. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -0
  245. package/{fesm2020/breeze-client-adapter-model-library-backing-store.mjs → fesm2015/breeze-client-adapter-model-library-backing-store.js} +13 -13
  246. package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  247. package/{fesm2020/breeze-client-adapter-model-library-ko.mjs → fesm2015/breeze-client-adapter-model-library-ko.js} +13 -13
  248. package/fesm2015/breeze-client-adapter-model-library-ko.js.map +1 -0
  249. package/{fesm2020/breeze-client-adapter-uri-builder-json.mjs → fesm2015/breeze-client-adapter-uri-builder-json.js} +8 -8
  250. package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +1 -0
  251. package/{fesm2020/breeze-client-adapter-uri-builder-odata.mjs → fesm2015/breeze-client-adapter-uri-builder-odata.js} +86 -85
  252. package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  253. package/fesm2015/{breeze-client-mixin-get-entity-graph.mjs → breeze-client-mixin-get-entity-graph.js} +1 -1
  254. package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +1 -0
  255. package/fesm2015/{breeze-client-mixin-save-queuing.mjs → breeze-client-mixin-save-queuing.js} +1 -1
  256. package/fesm2015/breeze-client-mixin-save-queuing.js.map +1 -0
  257. package/fesm2015/{breeze-client.mjs → breeze-client.js} +418 -409
  258. package/fesm2015/breeze-client.js.map +1 -0
  259. package/{fesm2020/breeze-client-adapter-ajax-angularjs.mjs → fesm5/breeze-client-adapter-ajax-angularjs.js} +42 -41
  260. package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +1 -0
  261. package/{fesm2020/breeze-client-adapter-ajax-fetch.mjs → fesm5/breeze-client-adapter-ajax-fetch.js} +43 -44
  262. package/fesm5/breeze-client-adapter-ajax-fetch.js.map +1 -0
  263. package/{fesm2020/breeze-client-adapter-ajax-httpclient.mjs → fesm5/breeze-client-adapter-ajax-httpclient.js} +44 -43
  264. package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +1 -0
  265. package/{fesm2020/breeze-client-adapter-ajax-jquery.mjs → fesm5/breeze-client-adapter-ajax-jquery.js} +19 -18
  266. package/fesm5/breeze-client-adapter-ajax-jquery.js.map +1 -0
  267. package/{fesm2015/breeze-client-adapter-ajax-post.mjs → fesm5/breeze-client-adapter-ajax-post.js} +11 -8
  268. package/fesm5/breeze-client-adapter-ajax-post.js.map +1 -0
  269. package/{fesm2020/breeze-client-adapter-data-service-odata.mjs → fesm5/breeze-client-adapter-data-service-odata.js} +134 -126
  270. package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -0
  271. package/{fesm2020/breeze-client-adapter-data-service-webapi.mjs → fesm5/breeze-client-adapter-data-service-webapi.js} +42 -38
  272. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -0
  273. package/{fesm2015/breeze-client-adapter-model-library-backing-store.mjs → fesm5/breeze-client-adapter-model-library-backing-store.js} +64 -63
  274. package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +1 -0
  275. package/{fesm2015/breeze-client-adapter-model-library-ko.mjs → fesm5/breeze-client-adapter-model-library-ko.js} +58 -57
  276. package/fesm5/breeze-client-adapter-model-library-ko.js.map +1 -0
  277. package/fesm5/breeze-client-adapter-uri-builder-json.js +92 -0
  278. package/fesm5/breeze-client-adapter-uri-builder-json.js.map +1 -0
  279. package/fesm5/breeze-client-adapter-uri-builder-odata.js +250 -0
  280. package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +1 -0
  281. package/{fesm2020/breeze-client-mixin-get-entity-graph.mjs → fesm5/breeze-client-mixin-get-entity-graph.js} +45 -45
  282. package/fesm5/breeze-client-mixin-get-entity-graph.js.map +1 -0
  283. package/{fesm2020/breeze-client-mixin-save-queuing.mjs → fesm5/breeze-client-mixin-save-queuing.js} +126 -116
  284. package/fesm5/breeze-client-mixin-save-queuing.js.map +1 -0
  285. package/{fesm2020/breeze-client.mjs → fesm5/breeze-client.js} +3630 -3414
  286. package/fesm5/breeze-client.js.map +1 -0
  287. package/mixin-get-entity-graph/{index.d.ts → breeze-client-mixin-get-entity-graph.d.ts} +0 -1
  288. package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +1 -0
  289. package/mixin-get-entity-graph/package.json +13 -0
  290. package/mixin-save-queuing/{index.d.ts → breeze-client-mixin-save-queuing.d.ts} +0 -1
  291. package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +1 -0
  292. package/mixin-save-queuing/package.json +13 -0
  293. package/package.json +12 -126
  294. package/src/entity-metadata.d.ts +4 -6
  295. package/src/entity-query.d.ts +1 -1
  296. package/esm2020/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -130
  297. package/esm2020/adapter-ajax-angularjs/adapter-core.mjs +0 -49
  298. package/esm2020/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
  299. package/esm2020/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -132
  300. package/esm2020/adapter-ajax-fetch/adapter-core.mjs +0 -49
  301. package/esm2020/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
  302. package/esm2020/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -137
  303. package/esm2020/adapter-ajax-httpclient/adapter-core.mjs +0 -49
  304. package/esm2020/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
  305. package/esm2020/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -103
  306. package/esm2020/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
  307. package/esm2020/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
  308. package/esm2020/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
  309. package/esm2020/adapter-data-service-odata/adapter-core.mjs +0 -49
  310. package/esm2020/adapter-data-service-odata/adapter-data-service-odata.mjs +0 -456
  311. package/esm2020/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
  312. package/esm2020/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -93
  313. package/esm2020/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
  314. package/esm2020/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -268
  315. package/esm2020/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
  316. package/esm2020/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -240
  317. package/esm2020/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
  318. package/esm2020/adapter-uri-builder-json/adapter-core.mjs +0 -49
  319. package/esm2020/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -36
  320. package/esm2020/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
  321. package/esm2020/adapter-uri-builder-odata/adapter-core.mjs +0 -49
  322. package/esm2020/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -190
  323. package/esm2020/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
  324. package/esm2020/breeze-client.mjs +0 -5
  325. package/esm2020/index.mjs +0 -2
  326. package/esm2020/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
  327. package/esm2020/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
  328. package/esm2020/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
  329. package/esm2020/mixin-save-queuing/mixin-save-queuing.mjs +0 -400
  330. package/esm2020/src/abstract-data-service-adapter.mjs +0 -296
  331. package/esm2020/src/array.mjs +0 -4
  332. package/esm2020/src/assert-param.mjs +0 -312
  333. package/esm2020/src/breeze.mjs +0 -85
  334. package/esm2020/src/complex-array.mjs +0 -117
  335. package/esm2020/src/config.mjs +0 -223
  336. package/esm2020/src/core.mjs +0 -707
  337. package/esm2020/src/csdl-metadata-parser.mjs +0 -385
  338. package/esm2020/src/data-service.mjs +0 -203
  339. package/esm2020/src/data-type.mjs +0 -444
  340. package/esm2020/src/default-property-interceptor.mjs +0 -460
  341. package/esm2020/src/entity-action.mjs +0 -45
  342. package/esm2020/src/entity-aspect.mjs +0 -806
  343. package/esm2020/src/entity-group.mjs +0 -187
  344. package/esm2020/src/entity-key.mjs +0 -116
  345. package/esm2020/src/entity-manager.mjs +0 -2094
  346. package/esm2020/src/entity-metadata.mjs +0 -2109
  347. package/esm2020/src/entity-query.mjs +0 -996
  348. package/esm2020/src/entity-state.mjs +0 -99
  349. package/esm2020/src/enum.mjs +0 -141
  350. package/esm2020/src/event.mjs +0 -256
  351. package/esm2020/src/interface-registry.mjs +0 -41
  352. package/esm2020/src/key-generator.mjs +0 -108
  353. package/esm2020/src/local-query-comparison-options.mjs +0 -65
  354. package/esm2020/src/mapping-context.mjs +0 -405
  355. package/esm2020/src/naming-convention.mjs +0 -88
  356. package/esm2020/src/observable-array.mjs +0 -183
  357. package/esm2020/src/predicate.mjs +0 -1232
  358. package/esm2020/src/primitive-array.mjs +0 -85
  359. package/esm2020/src/query-options.mjs +0 -152
  360. package/esm2020/src/relation-array.mjs +0 -173
  361. package/esm2020/src/save-options.mjs +0 -41
  362. package/esm2020/src/unattached-children-map.mjs +0 -58
  363. package/esm2020/src/validate.mjs +0 -988
  364. package/esm2020/src/validation-options.mjs +0 -64
  365. package/fesm2015/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  366. package/fesm2015/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  367. package/fesm2015/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  368. package/fesm2015/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  369. package/fesm2015/breeze-client-adapter-ajax-post.mjs.map +0 -1
  370. package/fesm2015/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  371. package/fesm2015/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  372. package/fesm2015/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  373. package/fesm2015/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  374. package/fesm2015/breeze-client-adapter-uri-builder-json.mjs +0 -91
  375. package/fesm2015/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  376. package/fesm2015/breeze-client-adapter-uri-builder-odata.mjs +0 -245
  377. package/fesm2015/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  378. package/fesm2015/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  379. package/fesm2015/breeze-client-mixin-save-queuing.mjs.map +0 -1
  380. package/fesm2015/breeze-client.mjs.map +0 -1
  381. package/fesm2020/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  382. package/fesm2020/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  383. package/fesm2020/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  384. package/fesm2020/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  385. package/fesm2020/breeze-client-adapter-ajax-post.mjs.map +0 -1
  386. package/fesm2020/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  387. package/fesm2020/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  388. package/fesm2020/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  389. package/fesm2020/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  390. package/fesm2020/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  391. package/fesm2020/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  392. package/fesm2020/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  393. package/fesm2020/breeze-client-mixin-save-queuing.mjs.map +0 -1
  394. package/fesm2020/breeze-client.mjs.map +0 -1
@@ -1,187 +0,0 @@
1
- import { DataProperty } from './entity-metadata';
2
- import { EntityKey } from './entity-key';
3
- import { EntityState } from './entity-state';
4
- import { MergeStrategy } from './query-options';
5
- /** @hidden @internal */
6
- export class EntityGroup {
7
- constructor(entityManager, entityType) {
8
- this.entityManager = entityManager;
9
- this.entityType = entityType;
10
- // freeze the entityType after the first instance of this type is either created or queried.
11
- this.entityType.isFrozen = true;
12
- this._indexMap = {};
13
- this._entities = [];
14
- this._emptyIndexes = [];
15
- }
16
- attachEntity(entity, entityState, mergeStrategy) {
17
- // entity should already have an aspect.
18
- let aspect = entity.entityAspect;
19
- if (!aspect._initialized) {
20
- this.entityType._initializeInstance(entity);
21
- }
22
- delete aspect._initialized;
23
- let keyInGroup = aspect.getKey()._keyInGroup;
24
- let ix = this._indexMap[keyInGroup];
25
- if (ix >= 0) {
26
- // safecast because key was found not ix will not return a null
27
- let targetEntity = this._entities[ix];
28
- let targetEntityState = targetEntity.entityAspect.entityState;
29
- let wasUnchanged = targetEntityState.isUnchanged();
30
- if (targetEntity === entity) {
31
- aspect.entityState = entityState;
32
- }
33
- else if (mergeStrategy === MergeStrategy.Disallowed) {
34
- throw new Error("A MergeStrategy of 'Disallowed' does not allow you to attach an entity when an entity with the same key is already attached: " + aspect.getKey());
35
- }
36
- else if (mergeStrategy === MergeStrategy.OverwriteChanges || (mergeStrategy === MergeStrategy.PreserveChanges && wasUnchanged)) {
37
- // unwrapInstance returns an entity with server side property names - so we need to use DataProperty.getRawValueFromServer these when we apply
38
- // the property values back to the target.
39
- let rawServerEntity = this.entityManager.helper.unwrapInstance(entity);
40
- this.entityType._updateTargetFromRaw(targetEntity, rawServerEntity, DataProperty.getRawValueFromServer);
41
- targetEntity.entityAspect.setEntityState(entityState);
42
- }
43
- return targetEntity;
44
- }
45
- else {
46
- if (this._emptyIndexes.length === 0) {
47
- ix = this._entities.push(entity) - 1;
48
- }
49
- else {
50
- ix = this._emptyIndexes.pop();
51
- this._entities[ix] = entity;
52
- }
53
- this._indexMap[keyInGroup] = ix;
54
- aspect.entityState = entityState;
55
- aspect.entityGroup = this;
56
- aspect.entityManager = this.entityManager;
57
- return entity;
58
- }
59
- }
60
- detachEntity(entity) {
61
- // by this point we have already determined that this entity
62
- // belongs to this group.
63
- let aspect = entity.entityAspect;
64
- let keyInGroup = aspect.getKey()._keyInGroup;
65
- let ix = this._indexMap[keyInGroup];
66
- if (ix === undefined) {
67
- // shouldn't happen.
68
- throw new Error("internal error - entity cannot be found in group");
69
- }
70
- delete this._indexMap[keyInGroup];
71
- this._emptyIndexes.push(ix);
72
- this._entities[ix] = null;
73
- return entity;
74
- }
75
- // returns entity based on an entity key defined either as an array of key values or an EntityKey
76
- findEntityByKey(entityKey) {
77
- let keyInGroup;
78
- if (entityKey instanceof EntityKey) {
79
- keyInGroup = entityKey._keyInGroup;
80
- }
81
- else {
82
- keyInGroup = EntityKey.createKeyString(entityKey);
83
- }
84
- let ix = this._indexMap[keyInGroup];
85
- // can't use just (ix) below because 0 is valid
86
- let r = (ix !== undefined) ? this._entities[ix] : undefined;
87
- // coerce null to undefined
88
- return r == null ? undefined : r;
89
- }
90
- hasChanges() {
91
- let entities = this._entities;
92
- let unchanged = EntityState.Unchanged;
93
- for (let i = 0, len = entities.length; i < len; i++) {
94
- let e = entities[i];
95
- if (e && e.entityAspect.entityState !== unchanged) {
96
- return true;
97
- }
98
- }
99
- return false;
100
- }
101
- getChanges() {
102
- let entities = this._entities;
103
- let unchanged = EntityState.Unchanged;
104
- let changes = [];
105
- for (let i = 0, len = entities.length; i < len; i++) {
106
- let e = entities[i];
107
- if (e && e.entityAspect.entityState !== unchanged) {
108
- changes.push(e);
109
- }
110
- }
111
- return changes;
112
- }
113
- getEntities(entityStates) {
114
- let filter = getFilter(entityStates);
115
- return this._entities.filter(filter);
116
- }
117
- _checkOperation(operationName) {
118
- this._entities.forEach(function (entity) {
119
- entity && entity.entityAspect._checkOperation(operationName);
120
- });
121
- // for chaining;
122
- return this;
123
- }
124
- // do not expose this method. It is doing a special purpose INCOMPLETE fast detach operation
125
- // just for the entityManager clear method - the entityGroup will be in an inconsistent state
126
- // after this op, which is ok because it will be thrown away.
127
- // TODO: rename this to be clear that it is UNSAFE...
128
- _clear() {
129
- this._entities.forEach(function (entity) {
130
- if (entity != null) {
131
- entity.entityAspect._detach();
132
- }
133
- });
134
- this._entities = null;
135
- this._indexMap = null;
136
- this._emptyIndexes = null;
137
- }
138
- _updateFkVal(fkProp, oldValue, newValue) {
139
- let fkPropName = fkProp.name;
140
- this._entities.forEach(function (entity) {
141
- if (entity != null) {
142
- if (entity.getProperty(fkPropName) === oldValue) {
143
- entity.setProperty(fkPropName, newValue);
144
- }
145
- }
146
- });
147
- }
148
- _fixupKey(tempValue, realValue) {
149
- // single part keys appear directly in map
150
- let ix = this._indexMap[tempValue];
151
- if (ix === undefined) {
152
- throw new Error("Internal Error in key fixup - unable to locate entity");
153
- }
154
- let entity = this._entities[ix];
155
- let keyPropName = entity.entityType.keyProperties[0].name;
156
- // fks on related entities will automatically get updated by this as well
157
- entity.setProperty(keyPropName, realValue);
158
- delete entity.entityAspect.hasTempKey;
159
- delete this._indexMap[tempValue];
160
- this._indexMap[realValue] = ix;
161
- }
162
- _replaceKey(oldKey, newKey) {
163
- let ix = this._indexMap[oldKey._keyInGroup];
164
- delete this._indexMap[oldKey._keyInGroup];
165
- this._indexMap[newKey._keyInGroup] = ix;
166
- }
167
- }
168
- function getFilter(entityStates) {
169
- if (entityStates.length === 0) {
170
- return function (e) {
171
- return !!e;
172
- };
173
- }
174
- else if (entityStates.length === 1) {
175
- let entityState = entityStates[0];
176
- return function (e) {
177
- return !!e && e.entityAspect.entityState === entityState;
178
- };
179
- }
180
- else {
181
- return function (e) {
182
- return !!e && -1 !== entityStates.indexOf(e.entityAspect.entityState);
183
- };
184
- }
185
- }
186
- // do not expose EntityGroup - internal only
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWdyb3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VudGl0eS1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsWUFBWSxFQUFHLE1BQU0sbUJBQW1CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELHdCQUF3QjtBQUN4QixNQUFNLE9BQU8sV0FBVztJQU90QixZQUFZLGFBQTRCLEVBQUUsVUFBc0I7UUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsNEZBQTRGO1FBQzVGLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBR0QsWUFBWSxDQUFDLE1BQWMsRUFBRSxXQUF3QixFQUFFLGFBQTZCO1FBQ2xGLHdDQUF3QztRQUN4QyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRWpDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0M7UUFDRCxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFFM0IsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUM3QyxJQUFJLEVBQUUsR0FBRyxJ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Q0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFDLENBQUM7Q0FFRjtBQUVELFNBQVMsU0FBUyxDQUFDLFlBQTJCO0lBQzVDLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0IsT0FBTyxVQUFVLENBQVM7WUFDeEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDO0tBQ0g7U0FBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3BDLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxPQUFPLFVBQVUsQ0FBUztZQUN4QixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDO1FBQzNELENBQUMsQ0FBQztLQUNIO1NBQU07UUFDTCxPQUFPLFVBQVUsQ0FBUztZQUN4QixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQztLQUNIO0FBQ0gsQ0FBQztBQUdELDRDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5LWFzcGVjdCc7XHJcbmltcG9ydCB7IEVudGl0eVR5cGUsIERhdGFQcm9wZXJ0eSAgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcbmltcG9ydCB7IEVudGl0eUtleSB9IGZyb20gJy4vZW50aXR5LWtleSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9lbnRpdHktc3RhdGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IE1lcmdlU3RyYXRlZ3kgfSBmcm9tICcuL3F1ZXJ5LW9wdGlvbnMnO1xyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlHcm91cCB7XHJcbiAgZW50aXR5TWFuYWdlcjogRW50aXR5TWFuYWdlcjtcclxuICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xyXG4gIF9pbmRleE1hcDogeyBbaW5kZXg6IHN0cmluZ106IG51bWJlciB9O1xyXG4gIF9lbnRpdGllczogKEVudGl0eSB8IG51bGwpW107XHJcbiAgX2VtcHR5SW5kZXhlczogbnVtYmVyW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIsIGVudGl0eVR5cGU6IEVudGl0eVR5cGUpIHtcclxuICAgIHRoaXMuZW50aXR5TWFuYWdlciA9IGVudGl0eU1hbmFnZXI7XHJcbiAgICB0aGlzLmVudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xyXG4gICAgLy8gZnJlZXplIHRoZSBlbnRpdHlUeXBlIGFmdGVyIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiB0aGlzIHR5cGUgaXMgZWl0aGVyIGNyZWF0ZWQgb3IgcXVlcmllZC5cclxuICAgIHRoaXMuZW50aXR5VHlwZS5pc0Zyb3plbiA9IHRydWU7XHJcbiAgICB0aGlzLl9pbmRleE1hcCA9IHt9O1xyXG4gICAgdGhpcy5fZW50aXRpZXMgPSBbXTtcclxuICAgIHRoaXMuX2VtcHR5SW5kZXhlcyA9IFtdO1xyXG4gIH1cclxuXHJcblxyXG4gIGF0dGFjaEVudGl0eShlbnRpdHk6IEVudGl0eSwgZW50aXR5U3RhdGU6IEVudGl0eVN0YXRlLCBtZXJnZVN0cmF0ZWd5PzogTWVyZ2VTdHJhdGVneSkge1xyXG4gICAgLy8gZW50aXR5IHNob3VsZCBhbHJlYWR5IGhhdmUgYW4gYXNwZWN0LlxyXG4gICAgbGV0IGFzcGVjdCA9IGVudGl0eS5lbnRpdHlBc3BlY3Q7XHJcblxyXG4gICAgaWYgKCFhc3BlY3QuX2luaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5VHlwZS5faW5pdGlhbGl6ZUluc3RhbmNlKGVudGl0eSk7XHJcbiAgICB9XHJcbiAgICBkZWxldGUgYXNwZWN0Ll9pbml0aWFsaXplZDtcclxuXHJcbiAgICBsZXQga2V5SW5Hcm91cCA9IGFzcGVjdC5nZXRLZXkoKS5fa2V5SW5Hcm91cDtcclxuICAgIGxldCBpeCA9IHRoaXMuX2luZGV4TWFwW2tleUluR3JvdXBdO1xyXG4gICAgaWYgKGl4ID49IDApIHtcclxuICAgICAgLy8gc2FmZWNhc3QgYmVjYXVzZSBrZXkgd2FzIGZvdW5kIG5vdCBpeCB3aWxsIG5vdCByZXR1cm4gYSBudWxsXHJcbiAgICAgIGxldCB0YXJnZXRFbnRpdHkgPSB0aGlzLl9lbnRpdGllc1tpeF0gYXMgRW50aXR5O1xyXG4gICAgICBsZXQgdGFyZ2V0RW50aXR5U3RhdGUgPSB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlO1xyXG4gICAgICBsZXQgd2FzVW5jaGFuZ2VkID0gdGFyZ2V0RW50aXR5U3RhdGUuaXNVbmNoYW5nZWQoKTtcclxuICAgICAgaWYgKHRhcmdldEVudGl0eSA9PT0gZW50aXR5KSB7XHJcbiAgICAgICAgYXNwZWN0LmVudGl0eVN0YXRlID0gZW50aXR5U3RhdGU7XHJcbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VTdHJhdGVneSA9PT0gTWVyZ2VTdHJhdGVneS5EaXNhbGxvd2VkKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBNZXJnZVN0cmF0ZWd5IG9mICdEaXNhbGxvd2VkJyBkb2VzIG5vdCBhbGxvdyB5b3UgdG8gYXR0YWNoIGFuIGVudGl0eSB3aGVuIGFuIGVudGl0eSB3aXRoIHRoZSBzYW1lIGtleSBpcyBhbHJlYWR5IGF0dGFjaGVkOiBcIiArIGFzcGVjdC5nZXRLZXkoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAobWVyZ2VTdHJhdGVneSA9PT0gTWVyZ2VTdHJhdGVneS5PdmVyd3JpdGVDaGFuZ2VzIHx8IChtZXJnZVN0cmF0ZWd5ID09PSBNZXJnZVN0cmF0ZWd5LlByZXNlcnZlQ2hhbmdlcyAmJiB3YXNVbmNoYW5nZWQpKSB7XHJcbiAgICAgICAgLy8gdW53cmFwSW5zdGFuY2UgcmV0dXJucyBhbiBlbnRpdHkgd2l0aCBzZXJ2ZXIgc2lkZSBwcm9wZXJ0eSBuYW1lcyAtIHNvIHdlIG5lZWQgdG8gdXNlIERhdGFQcm9wZXJ0eS5nZXRSYXdWYWx1ZUZyb21TZXJ2ZXIgdGhlc2Ugd2hlbiB3ZSBhcHBseVxyXG4gICAgICAgIC8vIHRoZSBwcm9wZXJ0eSB2YWx1ZXMgYmFjayB0byB0aGUgdGFyZ2V0LlxyXG4gICAgICAgIGxldCByYXdTZXJ2ZXJFbnRpdHkgPSB0aGlzLmVudGl0eU1hbmFnZXIuaGVscGVyLnVud3JhcEluc3RhbmNlKGVudGl0eSk7XHJcbiAgICAgICAgdGhpcy5lbnRpdHlUeXBlLl91cGRhdGVUYXJnZXRGcm9tUmF3KHRhcmdldEVudGl0eSwgcmF3U2VydmVyRW50aXR5LCBEYXRhUHJvcGVydHkuZ2V0UmF3VmFsdWVGcm9tU2VydmVyKTtcclxuICAgICAgICB0YXJnZXRFbnRpdHkuZW50aXR5QXNwZWN0LnNldEVudGl0eVN0YXRlKGVudGl0eVN0YXRlKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGFyZ2V0RW50aXR5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX2VtcHR5SW5kZXhlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBpeCA9IHRoaXMuX2VudGl0aWVzLnB1c2goZW50aXR5KSAtIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXggPSB0aGlzLl9lbXB0eUluZGV4ZXMucG9wKCk7XHJcbiAgICAgICAgdGhpcy5fZW50aXRpZXNbaXhdID0gZW50aXR5O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2luZGV4TWFwW2tleUluR3JvdXBdID0gaXg7XHJcbiAgICAgIGFzcGVjdC5lbnRpdHlTdGF0ZSA9IGVudGl0eVN0YXRlO1xyXG4gICAgICBhc3BlY3QuZW50aXR5R3JvdXAgPSB0aGlzO1xyXG4gICAgICBhc3BlY3QuZW50aXR5TWFuYWdlciA9IHRoaXMuZW50aXR5TWFuYWdlcjtcclxuICAgICAgcmV0dXJuIGVudGl0eTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRldGFjaEVudGl0eShlbnRpdHk6IEVudGl0eSkge1xyXG4gICAgLy8gYnkgdGhpcyBwb2ludCB3ZSBoYXZlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgZW50aXR5XHJcbiAgICAvLyBiZWxvbmdzIHRvIHRoaXMgZ3JvdXAuXHJcbiAgICBsZXQgYXNwZWN0ID0gZW50aXR5LmVudGl0eUFzcGVjdDtcclxuICAgIGxldCBrZXlJbkdyb3VwID0gYXNwZWN0LmdldEtleSgpLl9rZXlJbkdyb3VwO1xyXG4gICAgbGV0IGl4ID0gdGhpcy5faW5kZXhNYXBba2V5SW5Hcm91cF07XHJcbiAgICBpZiAoaXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyBzaG91bGRuJ3QgaGFwcGVuLlxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnRlcm5hbCBlcnJvciAtIGVudGl0eSBjYW5ub3QgYmUgZm91bmQgaW4gZ3JvdXBcIik7XHJcbiAgICB9XHJcbiAgICBkZWxldGUgdGhpcy5faW5kZXhNYXBba2V5SW5Hcm91cF07XHJcbiAgICB0aGlzLl9lbXB0eUluZGV4ZXMucHVzaChpeCk7XHJcbiAgICB0aGlzLl9lbnRpdGllc1tpeF0gPSBudWxsO1xyXG4gICAgcmV0dXJuIGVudGl0eTtcclxuICB9XHJcblxyXG5cclxuICAvLyByZXR1cm5zIGVudGl0eSBiYXNlZCBvbiBhbiBlbnRpdHkga2V5IGRlZmluZWQgZWl0aGVyIGFzIGFuIGFycmF5IG9mIGtleSB2YWx1ZXMgb3IgYW4gRW50aXR5S2V5XHJcbiAgZmluZEVudGl0eUJ5S2V5KGVudGl0eUtleTogRW50aXR5S2V5KSB7XHJcbiAgICBsZXQga2V5SW5Hcm91cDogc3RyaW5nO1xyXG4gICAgaWYgKGVudGl0eUtleSBpbnN0YW5jZW9mIEVudGl0eUtleSkge1xyXG4gICAgICBrZXlJbkdyb3VwID0gZW50aXR5S2V5Ll9rZXlJbkdyb3VwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAga2V5SW5Hcm91cCA9IEVudGl0eUtleS5jcmVhdGVLZXlTdHJpbmcoZW50aXR5S2V5KTtcclxuICAgIH1cclxuICAgIGxldCBpeCA9IHRoaXMuX2luZGV4TWFwW2tleUluR3JvdXBdO1xyXG4gICAgLy8gY2FuJ3QgdXNlIGp1c3QgKGl4KSBiZWxvdyBiZWNhdXNlIDAgaXMgdmFsaWRcclxuICAgIGxldCByID0gKGl4ICE9PSB1bmRlZmluZWQpID8gdGhpcy5fZW50aXRpZXNbaXhdIDogdW5kZWZpbmVkO1xyXG4gICAgLy8gY29lcmNlIG51bGwgdG8gdW5kZWZpbmVkXHJcbiAgICByZXR1cm4gciA9PSBudWxsID8gdW5kZWZpbmVkIDogcjtcclxuICB9XHJcblxyXG4gIGhhc0NoYW5nZXMoKSB7XHJcbiAgICBsZXQgZW50aXRpZXMgPSB0aGlzLl9lbnRpdGllcztcclxuICAgIGxldCB1bmNoYW5nZWQgPSBFbnRpdHlTdGF0ZS5VbmNoYW5nZWQ7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZW50aXRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgbGV0IGUgPSBlbnRpdGllc1tpXTtcclxuICAgICAgaWYgKGUgJiYgZS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUgIT09IHVuY2hhbmdlZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRDaGFuZ2VzKCkge1xyXG4gICAgbGV0IGVudGl0aWVzID0gdGhpcy5fZW50aXRpZXM7XHJcbiAgICBsZXQgdW5jaGFuZ2VkID0gRW50aXR5U3RhdGUuVW5jaGFuZ2VkO1xyXG4gICAgbGV0IGNoYW5nZXM6IEVudGl0eVtdID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZW50aXRpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgbGV0IGUgPSBlbnRpdGllc1tpXTtcclxuICAgICAgaWYgKGUgJiYgZS5lbnRpdHlBc3BlY3QuZW50aXR5U3RhdGUgIT09IHVuY2hhbmdlZCkge1xyXG4gICAgICAgIGNoYW5nZXMucHVzaChlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoYW5nZXM7XHJcbiAgfVxyXG5cclxuICBnZXRFbnRpdGllcyhlbnRpdHlTdGF0ZXM6IEVudGl0eVN0YXRlW10pIHtcclxuICAgIGxldCBmaWx0ZXIgPSBnZXRGaWx0ZXIoZW50aXR5U3RhdGVzKTtcclxuICAgIHJldHVybiB0aGlzLl9lbnRpdGllcy5maWx0ZXIoZmlsdGVyKSBhcyBFbnRpdHlbXTtcclxuICB9XHJcblxyXG4gIF9jaGVja09wZXJhdGlvbihvcGVyYXRpb25OYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2VudGl0aWVzLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eSkge1xyXG4gICAgICBlbnRpdHkgJiYgZW50aXR5LmVudGl0eUFzcGVjdC5fY2hlY2tPcGVyYXRpb24ob3BlcmF0aW9uTmFtZSk7XHJcbiAgICB9KTtcclxuICAgIC8vIGZvciBjaGFpbmluZztcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gZG8gbm90IGV4cG9zZSB0aGlzIG1ldGhvZC4gSXQgaXMgZG9pbmcgYSBzcGVjaWFsIHB1cnBvc2UgSU5DT01QTEVURSBmYXN0IGRldGFjaCBvcGVyYXRpb25cclxuICAvLyBqdXN0IGZvciB0aGUgZW50aXR5TWFuYWdlciBjbGVhciBtZXRob2QgLSB0aGUgZW50aXR5R3JvdXAgd2lsbCBiZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGVcclxuICAvLyBhZnRlciB0aGlzIG9wLCB3aGljaCBpcyBvayBiZWNhdXNlIGl0IHdpbGwgYmUgdGhyb3duIGF3YXkuXHJcbiAgLy8gVE9ETzogcmVuYW1lIHRoaXMgdG8gYmUgY2xlYXIgdGhhdCBpdCBpcyBVTlNBRkUuLi5cclxuICBfY2xlYXIoKSB7XHJcbiAgICB0aGlzLl9lbnRpdGllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHkpIHtcclxuICAgICAgaWYgKGVudGl0eSAhPSBudWxsKSB7XHJcbiAgICAgICAgZW50aXR5LmVudGl0eUFzcGVjdC5fZGV0YWNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgKHRoaXMgYXMgYW55KS5fZW50aXRpZXMgPSBudWxsO1xyXG4gICAgKHRoaXMgYXMgYW55KS5faW5kZXhNYXAgPSBudWxsO1xyXG4gICAgKHRoaXMgYXMgYW55KS5fZW1wdHlJbmRleGVzID0gbnVsbDtcclxuICB9XHJcblxyXG4gIF91cGRhdGVGa1ZhbChma1Byb3A6IERhdGFQcm9wZXJ0eSwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSkge1xyXG4gICAgbGV0IGZrUHJvcE5hbWUgPSBma1Byb3AubmFtZTtcclxuICAgIHRoaXMuX2VudGl0aWVzLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eSkge1xyXG4gICAgICBpZiAoZW50aXR5ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoZW50aXR5LmdldFByb3BlcnR5KGZrUHJvcE5hbWUpID09PSBvbGRWYWx1ZSkge1xyXG4gICAgICAgICAgZW50aXR5LnNldFByb3BlcnR5KGZrUHJvcE5hbWUsIG5ld1ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgX2ZpeHVwS2V5KHRlbXBWYWx1ZTogYW55LCByZWFsVmFsdWU6IGFueSkge1xyXG4gICAgLy8gc2luZ2xlIHBhcnQga2V5cyBhcHBlYXIgZGlyZWN0bHkgaW4gbWFwXHJcbiAgICBsZXQgaXggPSB0aGlzLl9pbmRleE1hcFt0ZW1wVmFsdWVdO1xyXG4gICAgaWYgKGl4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW50ZXJuYWwgRXJyb3IgaW4ga2V5IGZpeHVwIC0gdW5hYmxlIHRvIGxvY2F0ZSBlbnRpdHlcIik7XHJcbiAgICB9XHJcbiAgICBsZXQgZW50aXR5ID0gdGhpcy5fZW50aXRpZXNbaXhdIGFzIEVudGl0eTtcclxuICAgIGxldCBrZXlQcm9wTmFtZSA9IGVudGl0eS5lbnRpdHlUeXBlLmtleVByb3BlcnRpZXNbMF0ubmFtZTtcclxuICAgIC8vIGZrcyBvbiByZWxhdGVkIGVudGl0aWVzIHdpbGwgYXV0b21hdGljYWxseSBnZXQgdXBkYXRlZCBieSB0aGlzIGFzIHdlbGxcclxuICAgIGVudGl0eS5zZXRQcm9wZXJ0eShrZXlQcm9wTmFtZSwgcmVhbFZhbHVlKTtcclxuICAgIGRlbGV0ZSBlbnRpdHkuZW50aXR5QXNwZWN0Lmhhc1RlbXBLZXk7XHJcbiAgICBkZWxldGUgdGhpcy5faW5kZXhNYXBbdGVtcFZhbHVlXTtcclxuICAgIHRoaXMuX2luZGV4TWFwW3JlYWxWYWx1ZV0gPSBpeDtcclxuICB9XHJcblxyXG4gIF9yZXBsYWNlS2V5KG9sZEtleTogRW50aXR5S2V5LCBuZXdLZXk6IEVudGl0eUtleSkge1xyXG4gICAgbGV0IGl4ID0gdGhpcy5faW5kZXhNYXBbb2xkS2V5Ll9rZXlJbkdyb3VwXTtcclxuICAgIGRlbGV0ZSB0aGlzLl9pbmRleE1hcFtvbGRLZXkuX2tleUluR3JvdXBdO1xyXG4gICAgdGhpcy5faW5kZXhNYXBbbmV3S2V5Ll9rZXlJbkdyb3VwXSA9IGl4O1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEZpbHRlcihlbnRpdHlTdGF0ZXM6IEVudGl0eVN0YXRlW10pIHtcclxuICBpZiAoZW50aXR5U3RhdGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlOiBFbnRpdHkpIHtcclxuICAgICAgcmV0dXJuICEhZTtcclxuICAgIH07XHJcbiAgfSBlbHNlIGlmIChlbnRpdHlTdGF0ZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICBsZXQgZW50aXR5U3RhdGUgPSBlbnRpdHlTdGF0ZXNbMF07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGU6IEVudGl0eSkge1xyXG4gICAgICByZXR1cm4gISFlICYmIGUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlID09PSBlbnRpdHlTdGF0ZTtcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZTogRW50aXR5KSB7XHJcbiAgICAgIHJldHVybiAhIWUgJiYgLTEgIT09IGVudGl0eVN0YXRlcy5pbmRleE9mKGUuZW50aXR5QXNwZWN0LmVudGl0eVN0YXRlKTtcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gZG8gbm90IGV4cG9zZSBFbnRpdHlHcm91cCAtIGludGVybmFsIG9ubHlcclxuXHJcblxyXG4iXX0=
@@ -1,116 +0,0 @@
1
- import { core } from './core';
2
- import { assertParam } from './assert-param';
3
- import { EntityType } from './entity-metadata';
4
- import { DataType } from './data-type';
5
- /**
6
- An EntityKey is an object that represents the unique identity of an entity. EntityKey's are immutable.
7
-
8
-
9
- **/
10
- export class EntityKey {
11
- /**
12
- Constructs a new EntityKey. Each entity within an EntityManager will have a unique EntityKey.
13
- > // assume em1 is an EntityManager containing a number of existing entities.
14
- > var empType = em1.metadataStore.getEntityType("Employee");
15
- > var entityKey = new EntityKey(empType, 1);
16
-
17
- EntityKey's may also be found by calling EntityAspect.getKey()
18
- > // assume employee1 is an existing Employee entity
19
- > var empKey = employee1.entityAspect.getKey();
20
-
21
- Multipart keys are created by passing an array as the 'keyValues' parameter
22
- > var empTerrType = em1.metadataStore.getEntityType("EmployeeTerritory");
23
- > var empTerrKey = new EntityKey(empTerrType, [ 1, 77]);
24
- > // The order of the properties in the 'keyValues' array must be the same as that
25
- > // returned by empTerrType.keyProperties
26
- @param entityType - The [[EntityType]] of the entity.
27
- @param keyValues - A single value or an array of values.
28
- */
29
- constructor(entityType, keyValues) {
30
- assertParam(entityType, "entityType").isInstanceOf(EntityType).check();
31
- let subtypes = entityType.getSelfAndSubtypes();
32
- if (subtypes.length > 1) {
33
- this._subtypes = subtypes.filter(function (st) {
34
- return st.isAbstract === false;
35
- });
36
- }
37
- if (!Array.isArray(keyValues)) {
38
- keyValues = [keyValues];
39
- }
40
- this.entityType = entityType;
41
- entityType.keyProperties.forEach(function (kp, i) {
42
- // insure that guid keys are comparable.
43
- if (kp.dataType === DataType.Guid) {
44
- keyValues[i] = keyValues[i] && keyValues[i].toLowerCase ? keyValues[i].toLowerCase() : keyValues[i];
45
- }
46
- });
47
- this.values = keyValues;
48
- this._keyInGroup = EntityKey.createKeyString(keyValues);
49
- }
50
- toJSON() {
51
- return {
52
- entityType: this.entityType.name,
53
- values: this.values
54
- };
55
- }
56
- static fromJSON(json, metadataStore) {
57
- let et = metadataStore._getStructuralType(json.entityType, true);
58
- return new EntityKey(et, json.values);
59
- }
60
- /**
61
- Used to compare EntityKeys are determine if they refer to the same Entity.
62
- There is also an static version of 'equals' with the same functionality.
63
-
64
- > // assume em1 is an EntityManager containing a number of existing entities.
65
- > var empType = em1.metadataStore.getEntityType("Employee");
66
- > var empKey1 = new EntityKey(empType, 1);
67
- > // assume employee1 is an existing Employee entity
68
- > var empKey2 = employee1.entityAspect.getKey();
69
- > if (empKey1.equals(empKey2)) {
70
- > // do something ...
71
- > }
72
- **/
73
- equals(entityKey) {
74
- if (!(entityKey instanceof EntityKey))
75
- return false;
76
- return (this.entityType === entityKey.entityType) &&
77
- core.arrayEquals(this.values, entityKey.values);
78
- }
79
- /*
80
- Returns a human readable representation of this EntityKey.
81
- */
82
- toString(altEntityType) {
83
- return (altEntityType || this.entityType).name + '-' + this._keyInGroup;
84
- }
85
- /**
86
- Used to compare EntityKeys are determine if they refer to the same Entity.
87
- There is also an instance version of 'equals' with the same functionality.
88
- > // assume em1 is an EntityManager containing a number of existing entities.
89
- > var empType = em1.metadataStore.getEntityType("Employee");
90
- > var empKey1 = new EntityKey(empType, 1);
91
- > // assume employee1 is an existing Employee entity
92
- > var empKey2 = employee1.entityAspect.getKey();
93
- > if (EntityKey.equals(empKey1, empKey2)) {
94
- > // do something ...
95
- > }
96
- **/
97
- static equals(k1, k2) {
98
- if (!(k1 instanceof EntityKey))
99
- return false;
100
- return k1.equals(k2);
101
- }
102
- /** @hidden @internal */
103
- // TODO: we may want to compare to default values later.
104
- _isEmpty() {
105
- return this.values.join("").length === 0;
106
- }
107
- /** hidden */
108
- // TODO: think about giving _ prefix or documenting.
109
- static createKeyString(keyValues) {
110
- return keyValues.join(EntityKey.ENTITY_KEY_DELIMITER);
111
- }
112
- }
113
- /** @hidden @internal */
114
- EntityKey.ENTITY_KEY_DELIMITER = ":::";
115
- EntityKey.prototype._$typeName = "EntityKey";
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbnRpdHkta2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV2Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFlcEI7Ozs7Ozs7Ozs7Ozs7Ozs7O01BaUJFO0lBQ0YsWUFBWSxVQUFzQixFQUFFLFNBQWM7UUFDaEQsV0FBVyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkUsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO2dCQUMzQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM3QixTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN6QjtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDOUMsd0NBQXdDO1lBQ3hDLElBQUksRUFBRSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUNqQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JHO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFMUQsQ0FBQztJQUdELE1BQU07UUFDSixPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSTtZQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVMsRUFBRSxhQUE0QjtRQUNyRCxJQUFJLEVBQUUsR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQWUsQ0FBQztRQUMvRSxPQUFPLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILE1BQU0sQ0FBQyxTQUFvQjtRQUN6QixJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7TUFFRTtJQUNGLFFBQVEsQ0FBQyxhQUEwQjtRQUNqQyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFhLEVBQUUsRUFBYTtRQUN4QyxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0MsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsd0RBQXdEO0lBQ3hELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGFBQWE7SUFDYixvREFBb0Q7SUFDcEQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFnQjtRQUNyQyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEQsQ0FBQzs7QUExSEQsd0JBQXdCO0FBQ2pCLDhCQUFvQixHQUFHLEtBQUssQ0FBQztBQTRIdEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBFbnRpdHlUeXBlLCBNZXRhZGF0YVN0b3JlIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gJy4vZGF0YS10eXBlJztcclxuXHJcbi8qKlxyXG5BbiBFbnRpdHlLZXkgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pcXVlIGlkZW50aXR5IG9mIGFuIGVudGl0eS4gIEVudGl0eUtleSdzIGFyZSBpbW11dGFibGUuXHJcblxyXG5cclxuKiovXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlLZXkge1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF8kdHlwZU5hbWU6IHN0cmluZzsgLy8gYWN0dWFsbHkgcGxhY2VkIG9uIHByb3RvdHlwZVxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIHN0YXRpYyBFTlRJVFlfS0VZX0RFTElNSVRFUiA9IFwiOjo6XCI7XHJcbiAgLyoqICBUaGUgJ0VudGl0eVR5cGUnIHRoYXQgdGhpcyBpcyBhIGtleSBmb3IuIF9fUmVhZCBPbmx5X18gKi9cclxuICBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xyXG4gIC8qKiAgQW4gYXJyYXkgb2YgdGhlIHZhbHVlcyBmb3IgdGhpcyBrZXkuIFRoaXMgd2lsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCBcclxuICB1bmxlc3MgdGhlIGVudGl0eSB0eXBlIGhhcyBhIG11bHRpcGFydCBrZXkuIF9fUmVhZCBPbmx5X18gKi9cclxuICB2YWx1ZXM6IGFueVtdO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9rZXlJbkdyb3VwOiBzdHJpbmc7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX3N1YnR5cGVzOiBFbnRpdHlUeXBlW107XHJcblxyXG4gIC8qKlxyXG4gIENvbnN0cnVjdHMgYSBuZXcgRW50aXR5S2V5LiAgRWFjaCBlbnRpdHkgd2l0aGluIGFuIEVudGl0eU1hbmFnZXIgd2lsbCBoYXZlIGEgdW5pcXVlIEVudGl0eUtleS5cclxuICA+ICAgICAvLyBhc3N1bWUgZW0xIGlzIGFuIEVudGl0eU1hbmFnZXIgY29udGFpbmluZyBhIG51bWJlciBvZiBleGlzdGluZyBlbnRpdGllcy5cclxuICA+ICAgICB2YXIgZW1wVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJFbXBsb3llZVwiKTtcclxuICA+ICAgICB2YXIgZW50aXR5S2V5ID0gbmV3IEVudGl0eUtleShlbXBUeXBlLCAxKTtcclxuXHJcbiAgRW50aXR5S2V5J3MgbWF5IGFsc28gYmUgZm91bmQgYnkgY2FsbGluZyBFbnRpdHlBc3BlY3QuZ2V0S2V5KClcclxuICA+ICAgICAvLyBhc3N1bWUgZW1wbG95ZWUxIGlzIGFuIGV4aXN0aW5nIEVtcGxveWVlIGVudGl0eVxyXG4gID4gICAgIHZhciBlbXBLZXkgPSBlbXBsb3llZTEuZW50aXR5QXNwZWN0LmdldEtleSgpO1xyXG5cclxuICBNdWx0aXBhcnQga2V5cyBhcmUgY3JlYXRlZCBieSBwYXNzaW5nIGFuIGFycmF5IGFzIHRoZSAna2V5VmFsdWVzJyBwYXJhbWV0ZXJcclxuICA+ICAgICB2YXIgZW1wVGVyclR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiRW1wbG95ZWVUZXJyaXRvcnlcIik7XHJcbiAgPiAgICAgdmFyIGVtcFRlcnJLZXkgPSBuZXcgRW50aXR5S2V5KGVtcFRlcnJUeXBlLCBbIDEsIDc3XSk7XHJcbiAgPiAgICAgLy8gVGhlIG9yZGVyIG9mIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSAna2V5VmFsdWVzJyBhcnJheSBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoYXRcclxuICA+ICAgICAvLyByZXR1cm5lZCBieSBlbXBUZXJyVHlwZS5rZXlQcm9wZXJ0aWVzXHJcbiAgQHBhcmFtIGVudGl0eVR5cGUgLSBUaGUgW1tFbnRpdHlUeXBlXV0gb2YgdGhlIGVudGl0eS5cclxuICBAcGFyYW0ga2V5VmFsdWVzIC0gQSBzaW5nbGUgdmFsdWUgb3IgYW4gYXJyYXkgb2YgdmFsdWVzLiBcclxuICAqL1xyXG4gIGNvbnN0cnVjdG9yKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGtleVZhbHVlczogYW55KSB7XHJcbiAgICBhc3NlcnRQYXJhbShlbnRpdHlUeXBlLCBcImVudGl0eVR5cGVcIikuaXNJbnN0YW5jZU9mKEVudGl0eVR5cGUpLmNoZWNrKCk7XHJcbiAgICBsZXQgc3VidHlwZXMgPSBlbnRpdHlUeXBlLmdldFNlbGZBbmRTdWJ0eXBlcygpO1xyXG4gICAgaWYgKHN1YnR5cGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5fc3VidHlwZXMgPSBzdWJ0eXBlcy5maWx0ZXIoZnVuY3Rpb24gKHN0KSB7XHJcbiAgICAgICAgcmV0dXJuIHN0LmlzQWJzdHJhY3QgPT09IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2V5VmFsdWVzKSkge1xyXG4gICAgICBrZXlWYWx1ZXMgPSBba2V5VmFsdWVzXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xyXG4gICAgZW50aXR5VHlwZS5rZXlQcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24gKGtwLCBpKSB7XHJcbiAgICAgIC8vIGluc3VyZSB0aGF0IGd1aWQga2V5cyBhcmUgY29tcGFyYWJsZS5cclxuICAgICAgaWYgKGtwLmRhdGFUeXBlID09PSBEYXRhVHlwZS5HdWlkKSB7XHJcbiAgICAgICAga2V5VmFsdWVzW2ldID0ga2V5VmFsdWVzW2ldICYmIGtleVZhbHVlc1tpXS50b0xvd2VyQ2FzZSA/IGtleVZhbHVlc1tpXS50b0xvd2VyQ2FzZSgpIDoga2V5VmFsdWVzW2ldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZhbHVlcyA9IGtleVZhbHVlcztcclxuICAgIHRoaXMuX2tleUluR3JvdXAgPSBFbnRpdHlLZXkuY3JlYXRlS2V5U3RyaW5nKGtleVZhbHVlcyk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHRvSlNPTigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGVudGl0eVR5cGU6IHRoaXMuZW50aXR5VHlwZS5uYW1lLFxyXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb246IGFueSwgbWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSkge1xyXG4gICAgbGV0IGV0ID0gbWV0YWRhdGFTdG9yZS5fZ2V0U3RydWN0dXJhbFR5cGUoanNvbi5lbnRpdHlUeXBlLCB0cnVlKSBhcyBFbnRpdHlUeXBlO1xyXG4gICAgcmV0dXJuIG5ldyBFbnRpdHlLZXkoZXQsIGpzb24udmFsdWVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFVzZWQgdG8gY29tcGFyZSBFbnRpdHlLZXlzIGFyZSBkZXRlcm1pbmUgaWYgdGhleSByZWZlciB0byB0aGUgc2FtZSBFbnRpdHkuXHJcbiAgVGhlcmUgaXMgYWxzbyBhbiBzdGF0aWMgdmVyc2lvbiBvZiAnZXF1YWxzJyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuXHJcbiAgXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBlbTEgaXMgYW4gRW50aXR5TWFuYWdlciBjb250YWluaW5nIGEgbnVtYmVyIG9mIGV4aXN0aW5nIGVudGl0aWVzLlxyXG4gID4gICAgICB2YXIgZW1wVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJFbXBsb3llZVwiKTtcclxuICA+ICAgICAgdmFyIGVtcEtleTEgPSBuZXcgRW50aXR5S2V5KGVtcFR5cGUsIDEpO1xyXG4gID4gICAgICAvLyBhc3N1bWUgZW1wbG95ZWUxIGlzIGFuIGV4aXN0aW5nIEVtcGxveWVlIGVudGl0eVxyXG4gID4gICAgICB2YXIgZW1wS2V5MiA9IGVtcGxveWVlMS5lbnRpdHlBc3BlY3QuZ2V0S2V5KCk7XHJcbiAgPiAgICAgIGlmIChlbXBLZXkxLmVxdWFscyhlbXBLZXkyKSkge1xyXG4gID4gICAgICAgICAgLy8gZG8gc29tZXRoaW5nICAuLi5cclxuICA+ICAgICAgfVxyXG4gICoqL1xyXG4gIGVxdWFscyhlbnRpdHlLZXk6IEVudGl0eUtleSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCEoZW50aXR5S2V5IGluc3RhbmNlb2YgRW50aXR5S2V5KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuICh0aGlzLmVudGl0eVR5cGUgPT09IGVudGl0eUtleS5lbnRpdHlUeXBlKSAmJlxyXG4gICAgICBjb3JlLmFycmF5RXF1YWxzKHRoaXMudmFsdWVzLCBlbnRpdHlLZXkudmFsdWVzKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgUmV0dXJucyBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRW50aXR5S2V5LlxyXG4gICovXHJcbiAgdG9TdHJpbmcoYWx0RW50aXR5VHlwZT86IEVudGl0eVR5cGUpIHtcclxuICAgIHJldHVybiAoYWx0RW50aXR5VHlwZSB8fCB0aGlzLmVudGl0eVR5cGUpLm5hbWUgKyAnLScgKyB0aGlzLl9rZXlJbkdyb3VwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgVXNlZCB0byBjb21wYXJlIEVudGl0eUtleXMgYXJlIGRldGVybWluZSBpZiB0aGV5IHJlZmVyIHRvIHRoZSBzYW1lIEVudGl0eS5cclxuICBUaGVyZSBpcyBhbHNvIGFuIGluc3RhbmNlIHZlcnNpb24gb2YgJ2VxdWFscycgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LlxyXG4gID4gICAgICAvLyBhc3N1bWUgZW0xIGlzIGFuIEVudGl0eU1hbmFnZXIgY29udGFpbmluZyBhIG51bWJlciBvZiBleGlzdGluZyBlbnRpdGllcy5cclxuICA+ICAgICAgdmFyIGVtcFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiRW1wbG95ZWVcIik7XHJcbiAgPiAgICAgIHZhciBlbXBLZXkxID0gbmV3IEVudGl0eUtleShlbXBUeXBlLCAxKTtcclxuICA+ICAgICAgLy8gYXNzdW1lIGVtcGxveWVlMSBpcyBhbiBleGlzdGluZyBFbXBsb3llZSBlbnRpdHlcclxuICA+ICAgICAgdmFyIGVtcEtleTIgPSBlbXBsb3llZTEuZW50aXR5QXNwZWN0LmdldEtleSgpO1xyXG4gID4gICAgICBpZiAoRW50aXR5S2V5LmVxdWFscyhlbXBLZXkxLCBlbXBLZXkyKSkge1xyXG4gID4gICAgICAgICAgLy8gZG8gc29tZXRoaW5nICAuLi5cclxuICA+ICAgICAgfVxyXG4gICoqL1xyXG4gIHN0YXRpYyBlcXVhbHMoazE6IEVudGl0eUtleSwgazI6IEVudGl0eUtleSkge1xyXG4gICAgaWYgKCEoazEgaW5zdGFuY2VvZiBFbnRpdHlLZXkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gazEuZXF1YWxzKGsyKTtcclxuICB9XHJcblxyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIC8vIFRPRE86IHdlIG1heSB3YW50IHRvIGNvbXBhcmUgdG8gZGVmYXVsdCB2YWx1ZXMgbGF0ZXIuXHJcbiAgX2lzRW1wdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMuam9pbihcIlwiKS5sZW5ndGggPT09IDA7XHJcbiAgfVxyXG5cclxuICAvKiogaGlkZGVuICovXHJcbiAgLy8gVE9ETzogdGhpbmsgYWJvdXQgZ2l2aW5nIF8gcHJlZml4IG9yIGRvY3VtZW50aW5nLlxyXG4gIHN0YXRpYyBjcmVhdGVLZXlTdHJpbmcoa2V5VmFsdWVzOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIGtleVZhbHVlcy5qb2luKEVudGl0eUtleS5FTlRJVFlfS0VZX0RFTElNSVRFUik7XHJcbiAgfVxyXG5cclxufVxyXG5FbnRpdHlLZXkucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIkVudGl0eUtleVwiO1xyXG5cclxuXHJcbiJdfQ==