breeze-client 2.2.1-cjs → 2.2.1

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