breeze-client 2.2.2 → 3.0.0

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 (299) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +83 -63
  3. package/adapters/abstract-data-service-adapter.d.ts +120 -0
  4. package/adapters/abstract-data-service-adapter.js +395 -0
  5. package/adapters/abstract-data-service-adapter.js.map +1 -0
  6. package/adapters/adapter-ajax-fetch.d.ts +12 -0
  7. package/adapters/adapter-ajax-fetch.js +13 -0
  8. package/adapters/adapter-ajax-fetch.js.map +1 -0
  9. package/{adapter-ajax-post → adapters}/adapter-ajax-post.d.ts +40 -36
  10. package/{fesm2022/breeze-client-adapter-ajax-post.mjs → adapters/adapter-ajax-post.js} +80 -82
  11. package/adapters/adapter-ajax-post.js.map +1 -0
  12. package/{adapter-ajax-fetch → adapters}/adapter-core.d.ts +4 -4
  13. package/{fesm2022/breeze-client-adapter-uri-builder-json.mjs → adapters/adapter-core.js} +48 -91
  14. package/adapters/adapter-core.js.map +1 -0
  15. package/adapters/adapter-data-service-webapi.d.ts +9 -0
  16. package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → adapters/adapter-data-service-webapi.js} +105 -107
  17. package/adapters/adapter-data-service-webapi.js.map +1 -0
  18. package/adapters/adapter-model-library-backing-store.d.ts +32 -0
  19. package/adapters/adapter-model-library-backing-store.js +321 -0
  20. package/adapters/adapter-model-library-backing-store.js.map +1 -0
  21. package/adapters/adapter-uri-builder-json.d.ts +11 -0
  22. package/adapters/adapter-uri-builder-json.js +40 -0
  23. package/adapters/adapter-uri-builder-json.js.map +1 -0
  24. package/adapters/http.d.ts +52 -0
  25. package/adapters/http.js +202 -0
  26. package/adapters/http.js.map +1 -0
  27. package/angular/adapter-angular-httpclient.d.ts +21 -0
  28. package/angular/adapter-angular-httpclient.js +70 -0
  29. package/angular/adapter-angular-httpclient.js.map +1 -0
  30. package/breeze.d.ts +215 -0
  31. package/breeze.js +141 -0
  32. package/breeze.js.map +1 -0
  33. package/config/config.d.ts +212 -0
  34. package/config/config.js +392 -0
  35. package/config/config.js.map +1 -0
  36. package/config/configure.d.ts +66 -0
  37. package/config/configure.js +46 -0
  38. package/config/configure.js.map +1 -0
  39. package/config/default-adapters.d.ts +1 -0
  40. package/config/default-adapters.js +40 -0
  41. package/config/default-adapters.js.map +1 -0
  42. package/config/interface-registry.d.ts +191 -0
  43. package/config/interface-registry.js +5 -0
  44. package/config/interface-registry.js.map +1 -0
  45. package/{src → core}/assert-param.d.ts +52 -60
  46. package/core/assert-param.js +390 -0
  47. package/core/assert-param.js.map +1 -0
  48. package/core/core.d.ts +285 -0
  49. package/core/core.js +772 -0
  50. package/core/core.js.map +1 -0
  51. package/core/enum.d.ts +116 -0
  52. package/core/enum.js +167 -0
  53. package/core/enum.js.map +1 -0
  54. package/core/event.d.ts +169 -0
  55. package/core/event.js +338 -0
  56. package/core/event.js.map +1 -0
  57. package/entity/array.d.ts +3 -0
  58. package/entity/array.js +4 -0
  59. package/entity/array.js.map +1 -0
  60. package/entity/complex-array.d.ts +17 -0
  61. package/entity/complex-array.js +104 -0
  62. package/entity/complex-array.js.map +1 -0
  63. package/entity/default-property-interceptor.d.ts +1 -0
  64. package/entity/default-property-interceptor.js +496 -0
  65. package/entity/default-property-interceptor.js.map +1 -0
  66. package/{src → entity}/entity-action.d.ts +36 -42
  67. package/entity/entity-action.js +45 -0
  68. package/entity/entity-action.js.map +1 -0
  69. package/entity/entity-aspect.d.ts +457 -0
  70. package/entity/entity-aspect.js +1262 -0
  71. package/entity/entity-aspect.js.map +1 -0
  72. package/entity/entity-base.d.ts +55 -0
  73. package/entity/entity-base.js +41 -0
  74. package/entity/entity-base.js.map +1 -0
  75. package/entity/entity-group.d.ts +1 -0
  76. package/entity/entity-group.js +224 -0
  77. package/entity/entity-group.js.map +1 -0
  78. package/entity/entity-key.d.ts +95 -0
  79. package/entity/entity-key.js +189 -0
  80. package/entity/entity-key.js.map +1 -0
  81. package/{src → entity}/entity-state.d.ts +112 -84
  82. package/entity/entity-state.js +135 -0
  83. package/entity/entity-state.js.map +1 -0
  84. package/entity/key-generator.d.ts +57 -0
  85. package/entity/key-generator.js +155 -0
  86. package/entity/key-generator.js.map +1 -0
  87. package/entity/observable-array.d.ts +25 -0
  88. package/entity/observable-array.js +230 -0
  89. package/entity/observable-array.js.map +1 -0
  90. package/entity/primitive-array.d.ts +12 -0
  91. package/entity/primitive-array.js +71 -0
  92. package/entity/primitive-array.js.map +1 -0
  93. package/entity/relation-array.d.ts +24 -0
  94. package/entity/relation-array.js +176 -0
  95. package/entity/relation-array.js.map +1 -0
  96. package/entity/unattached-children-map.d.ts +1 -0
  97. package/entity/unattached-children-map.js +105 -0
  98. package/entity/unattached-children-map.js.map +1 -0
  99. package/generate-entity-classes.js +1176 -0
  100. package/manager/entity-manager.d.ts +801 -0
  101. package/manager/entity-manager.js +2395 -0
  102. package/manager/entity-manager.js.map +1 -0
  103. package/{src → manager}/save-options.d.ts +48 -42
  104. package/manager/save-options.js +51 -0
  105. package/manager/save-options.js.map +1 -0
  106. package/{src → metadata}/data-service.d.ts +229 -184
  107. package/metadata/data-service.js +246 -0
  108. package/metadata/data-service.js.map +1 -0
  109. package/metadata/data-type.d.ts +122 -0
  110. package/metadata/data-type.js +465 -0
  111. package/metadata/data-type.js.map +1 -0
  112. package/metadata/entity-metadata.d.ts +1193 -0
  113. package/metadata/entity-metadata.js +2502 -0
  114. package/metadata/entity-metadata.js.map +1 -0
  115. package/{src → metadata}/local-query-comparison-options.d.ts +65 -59
  116. package/metadata/local-query-comparison-options.js +69 -0
  117. package/metadata/local-query-comparison-options.js.map +1 -0
  118. package/{src → metadata}/naming-convention.d.ts +75 -72
  119. package/metadata/naming-convention.js +97 -0
  120. package/metadata/naming-convention.js.map +1 -0
  121. package/mixins/mixin-get-entity-graph.d.ts +63 -0
  122. package/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → mixins/mixin-get-entity-graph.js} +331 -253
  123. package/mixins/mixin-get-entity-graph.js.map +1 -0
  124. package/mixins/mixin-save-queuing.d.ts +98 -0
  125. package/{fesm2022/breeze-client-mixin-save-queuing.mjs → mixins/mixin-save-queuing.js} +493 -365
  126. package/mixins/mixin-save-queuing.js.map +1 -0
  127. package/package.json +63 -94
  128. package/query/entity-query.d.ts +521 -0
  129. package/query/entity-query.js +1149 -0
  130. package/query/entity-query.js.map +1 -0
  131. package/{src → query}/mapping-context.d.ts +44 -46
  132. package/query/mapping-context.js +412 -0
  133. package/query/mapping-context.js.map +1 -0
  134. package/query/predicate.d.ts +394 -0
  135. package/query/predicate.js +1294 -0
  136. package/query/predicate.js.map +1 -0
  137. package/query/property-path.d.ts +252 -0
  138. package/query/property-path.js +2 -0
  139. package/query/property-path.js.map +1 -0
  140. package/{src → query}/query-options.d.ts +143 -119
  141. package/query/query-options.js +180 -0
  142. package/query/query-options.js.map +1 -0
  143. package/rxjs/breeze-rxjs.d.ts +72 -0
  144. package/rxjs/breeze-rxjs.js +117 -0
  145. package/rxjs/breeze-rxjs.js.map +1 -0
  146. package/validation/validate.d.ts +583 -0
  147. package/validation/validate.js +961 -0
  148. package/validation/validate.js.map +1 -0
  149. package/{src → validation}/validation-options.d.ts +67 -63
  150. package/validation/validation-options.js +70 -0
  151. package/validation/validation-options.js.map +1 -0
  152. package/adapter-ajax-angularjs/adapter-ajax-angularjs.d.ts +0 -17
  153. package/adapter-ajax-angularjs/adapter-core.d.ts +0 -4
  154. package/adapter-ajax-angularjs/index.d.ts +0 -5
  155. package/adapter-ajax-fetch/adapter-ajax-fetch.d.ts +0 -18
  156. package/adapter-ajax-fetch/index.d.ts +0 -5
  157. package/adapter-ajax-httpclient/adapter-ajax-httpclient.d.ts +0 -13
  158. package/adapter-ajax-httpclient/adapter-core.d.ts +0 -4
  159. package/adapter-ajax-httpclient/index.d.ts +0 -5
  160. package/adapter-ajax-jquery/adapter-ajax-jquery.d.ts +0 -15
  161. package/adapter-ajax-jquery/index.d.ts +0 -5
  162. package/adapter-ajax-post/index.d.ts +0 -5
  163. package/adapter-data-service-odata/adapter-core.d.ts +0 -4
  164. package/adapter-data-service-odata/adapter-data-service-odata.d.ts +0 -17
  165. package/adapter-data-service-odata/index.d.ts +0 -5
  166. package/adapter-data-service-webapi/adapter-data-service-webapi.d.ts +0 -15
  167. package/adapter-data-service-webapi/index.d.ts +0 -5
  168. package/adapter-model-library-backing-store/adapter-model-library-backing-store.d.ts +0 -10
  169. package/adapter-model-library-backing-store/index.d.ts +0 -5
  170. package/adapter-model-library-ko/adapter-model-library-ko.d.ts +0 -10
  171. package/adapter-model-library-ko/index.d.ts +0 -5
  172. package/adapter-uri-builder-json/adapter-core.d.ts +0 -4
  173. package/adapter-uri-builder-json/adapter-uri-builder-json.d.ts +0 -8
  174. package/adapter-uri-builder-json/index.d.ts +0 -5
  175. package/adapter-uri-builder-odata/adapter-core.d.ts +0 -4
  176. package/adapter-uri-builder-odata/adapter-uri-builder-odata.d.ts +0 -8
  177. package/adapter-uri-builder-odata/index.d.ts +0 -5
  178. package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -135
  179. package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +0 -49
  180. package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
  181. package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -135
  182. package/esm2022/adapter-ajax-fetch/adapter-core.mjs +0 -49
  183. package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
  184. package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -139
  185. package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +0 -49
  186. package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
  187. package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -107
  188. package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
  189. package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
  190. package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
  191. package/esm2022/adapter-data-service-odata/adapter-core.mjs +0 -49
  192. package/esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs +0 -461
  193. package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
  194. package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -100
  195. package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
  196. package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -269
  197. package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
  198. package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -241
  199. package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
  200. package/esm2022/adapter-uri-builder-json/adapter-core.mjs +0 -49
  201. package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -37
  202. package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
  203. package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +0 -49
  204. package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -191
  205. package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
  206. package/esm2022/breeze-client.mjs +0 -5
  207. package/esm2022/index.mjs +0 -2
  208. package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
  209. package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
  210. package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
  211. package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +0 -421
  212. package/esm2022/src/abstract-data-service-adapter.mjs +0 -325
  213. package/esm2022/src/array.mjs +0 -4
  214. package/esm2022/src/assert-param.mjs +0 -330
  215. package/esm2022/src/breeze.mjs +0 -85
  216. package/esm2022/src/complex-array.mjs +0 -117
  217. package/esm2022/src/config.mjs +0 -232
  218. package/esm2022/src/core.mjs +0 -712
  219. package/esm2022/src/csdl-metadata-parser.mjs +0 -385
  220. package/esm2022/src/data-service.mjs +0 -221
  221. package/esm2022/src/data-type.mjs +0 -510
  222. package/esm2022/src/default-property-interceptor.mjs +0 -460
  223. package/esm2022/src/entity-action.mjs +0 -45
  224. package/esm2022/src/entity-aspect.mjs +0 -897
  225. package/esm2022/src/entity-group.mjs +0 -192
  226. package/esm2022/src/entity-key.mjs +0 -125
  227. package/esm2022/src/entity-manager.mjs +0 -2163
  228. package/esm2022/src/entity-metadata.mjs +0 -2242
  229. package/esm2022/src/entity-query.mjs +0 -1024
  230. package/esm2022/src/entity-state.mjs +0 -107
  231. package/esm2022/src/enum.mjs +0 -143
  232. package/esm2022/src/event.mjs +0 -264
  233. package/esm2022/src/interface-registry.mjs +0 -39
  234. package/esm2022/src/key-generator.mjs +0 -110
  235. package/esm2022/src/local-query-comparison-options.mjs +0 -65
  236. package/esm2022/src/mapping-context.mjs +0 -411
  237. package/esm2022/src/naming-convention.mjs +0 -92
  238. package/esm2022/src/observable-array.mjs +0 -183
  239. package/esm2022/src/predicate.mjs +0 -1259
  240. package/esm2022/src/primitive-array.mjs +0 -85
  241. package/esm2022/src/query-options.mjs +0 -152
  242. package/esm2022/src/relation-array.mjs +0 -173
  243. package/esm2022/src/save-options.mjs +0 -41
  244. package/esm2022/src/unattached-children-map.mjs +0 -56
  245. package/esm2022/src/validate.mjs +0 -995
  246. package/esm2022/src/validation-options.mjs +0 -64
  247. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs +0 -190
  248. package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
  249. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs +0 -190
  250. package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
  251. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs +0 -194
  252. package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
  253. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs +0 -114
  254. package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
  255. package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +0 -1
  256. package/fesm2022/breeze-client-adapter-data-service-odata.mjs +0 -516
  257. package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +0 -1
  258. package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
  259. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs +0 -276
  260. package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
  261. package/fesm2022/breeze-client-adapter-model-library-ko.mjs +0 -248
  262. package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +0 -1
  263. package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
  264. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs +0 -246
  265. package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
  266. package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
  267. package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +0 -1
  268. package/fesm2022/breeze-client.mjs +0 -14144
  269. package/fesm2022/breeze-client.mjs.map +0 -1
  270. package/index.d.ts +0 -1
  271. package/mixin-get-entity-graph/index.d.ts +0 -5
  272. package/mixin-get-entity-graph/mixin-get-entity-graph.d.ts +0 -31
  273. package/mixin-save-queuing/index.d.ts +0 -5
  274. package/mixin-save-queuing/mixin-save-queuing.d.ts +0 -32
  275. package/src/abstract-data-service-adapter.d.ts +0 -84
  276. package/src/array.d.ts +0 -3
  277. package/src/breeze.d.ts +0 -139
  278. package/src/complex-array.d.ts +0 -13
  279. package/src/config.d.ts +0 -104
  280. package/src/core.d.ts +0 -164
  281. package/src/csdl-metadata-parser.d.ts +0 -7
  282. package/src/data-type.d.ts +0 -89
  283. package/src/default-property-interceptor.d.ts +0 -4
  284. package/src/entity-aspect.d.ts +0 -332
  285. package/src/entity-group.d.ts +0 -28
  286. package/src/entity-key.d.ts +0 -77
  287. package/src/entity-manager.d.ts +0 -680
  288. package/src/entity-metadata.d.ts +0 -988
  289. package/src/entity-query.d.ts +0 -444
  290. package/src/enum.d.ts +0 -100
  291. package/src/event.d.ts +0 -142
  292. package/src/interface-registry.d.ts +0 -150
  293. package/src/key-generator.d.ts +0 -12
  294. package/src/observable-array.d.ts +0 -52
  295. package/src/predicate.d.ts +0 -376
  296. package/src/primitive-array.d.ts +0 -7
  297. package/src/relation-array.d.ts +0 -18
  298. package/src/unattached-children-map.d.ts +0 -19
  299. package/src/validate.d.ts +0 -650
@@ -0,0 +1,412 @@
1
+ import { core } from '../core/core.js';
2
+ import { DataType } from '../metadata/data-type.js';
3
+ import { EntityState } from '../entity/entity-state.js';
4
+ import { EntityAction } from '../entity/entity-action.js';
5
+ import { EntityType, DataProperty } from '../metadata/entity-metadata.js';
6
+ import { MergeStrategy } from './query-options.js';
7
+ import { observableArray } from '../entity/observable-array.js';
8
+ import { EntityQuery } from './entity-query.js';
9
+ /**
10
+ For use by breeze plugin authors only. The class is for use in building a {@link DataServiceAdapter} implementation.
11
+ @adapter (see {@link DataServiceAdapter})
12
+ @hidden
13
+ */
14
+ export class MappingContext {
15
+ rawValueFn = DataProperty.getRawValueFromServer; // think about passing this in later.
16
+ constructor(config) {
17
+ core.extend(this, config, [
18
+ "query", "entityManager", "dataService", "mergeOptions"
19
+ ]);
20
+ // calc'd props
21
+ this.refMap = {};
22
+ this.deferredFns = [];
23
+ this.jsonResultsAdapter = this.dataService.jsonResultsAdapter;
24
+ this.metadataStore = this.entityManager.metadataStore;
25
+ this.rawValueFn = DataProperty.getRawValueFromServer; // think about passing this in later.
26
+ }
27
+ getUrl() {
28
+ let query = this.query;
29
+ if (!query) {
30
+ throw new Error("query cannot be empty");
31
+ }
32
+ let uriString;
33
+ if (typeof query === 'string') {
34
+ uriString = query;
35
+ }
36
+ else if (query instanceof EntityQuery) {
37
+ uriString = this.dataService.uriBuilder.buildUri(query, this.metadataStore);
38
+ }
39
+ else {
40
+ throw new Error("unable to recognize query parameter as either a string or an EntityQuery");
41
+ }
42
+ return this.dataService.qualifyUrl(uriString);
43
+ }
44
+ visitAndMerge(nodes, nodeContext) {
45
+ let query = this.query;
46
+ let jra = this.jsonResultsAdapter;
47
+ nodeContext = nodeContext || {};
48
+ let that = this;
49
+ let result = core.map(nodes, function (node) {
50
+ if (query == null && node.entityAspect) {
51
+ // don't bother merging a result from a save that was not returned from the server.
52
+ if (node.entityAspect.entityState.isDeleted()) {
53
+ that.entityManager.detachEntity(node);
54
+ }
55
+ else {
56
+ node.entityAspect.acceptChanges();
57
+ }
58
+ return node;
59
+ }
60
+ let meta = jra.visitNode(node, that, nodeContext) || {};
61
+ node = meta.node || node;
62
+ if (query && nodeContext.nodeType === "root" && !meta.entityType) {
63
+ meta.entityType = query instanceof EntityQuery && query._getToEntityType && query._getToEntityType(that.metadataStore);
64
+ }
65
+ return processMeta(that, node, meta);
66
+ }, this.mergeOptions.includeDeleted);
67
+ if (result.filter && !this.mergeOptions.includeDeleted) {
68
+ // result may have deleted entities because related nodes were processed
69
+ result = result.filter((x) => x && (!x.entityAspect || !x.entityAspect.entityState.isDeleted()));
70
+ }
71
+ return result;
72
+ }
73
+ processDeferred() {
74
+ if (this.deferredFns.length > 0) {
75
+ this.deferredFns.forEach((fn) => {
76
+ fn();
77
+ });
78
+ }
79
+ }
80
+ }
81
+ MappingContext.prototype._$typeName = "MappingContext";
82
+ function processMeta(mc, node, meta, assignFn) {
83
+ // == is deliberate here instead of ===
84
+ if (meta.ignore || node == null) {
85
+ return null;
86
+ }
87
+ else if (meta.nodeRefId) {
88
+ let refValue = resolveEntityRef(mc, meta.nodeRefId);
89
+ if (typeof refValue === "function" && assignFn != null) {
90
+ mc.deferredFns.push(function () {
91
+ assignFn(refValue);
92
+ });
93
+ return undefined; // deferred and will be set later;
94
+ }
95
+ return refValue;
96
+ }
97
+ else if (meta.entityType) {
98
+ let entityType = meta.entityType;
99
+ if (mc.mergeOptions.noTracking) {
100
+ node = processNoMerge(mc, entityType, node);
101
+ if (entityType.noTrackingFn) {
102
+ node = entityType.noTrackingFn(node, entityType);
103
+ }
104
+ if (meta.nodeId) {
105
+ mc.refMap[meta.nodeId] = node;
106
+ }
107
+ return node;
108
+ }
109
+ else {
110
+ if (entityType.isComplexType) {
111
+ // because we still need to do serverName to client name processing
112
+ return processNoMerge(mc, entityType, node);
113
+ }
114
+ else {
115
+ return mergeEntity(mc, node, meta);
116
+ }
117
+ }
118
+ }
119
+ else {
120
+ if ((!meta.passThru) && typeof node === 'object' && !core.isDate(node)) {
121
+ node = processAnonType(mc, node);
122
+ }
123
+ // updating the refMap for entities is handled by updateEntityRef for entities.
124
+ if (meta.nodeId) {
125
+ mc.refMap[meta.nodeId] = node;
126
+ }
127
+ return node;
128
+ }
129
+ }
130
+ function processNoMerge(mc, stype, node) {
131
+ let result = {};
132
+ stype.dataProperties.forEach(function (dp) {
133
+ if (dp.isComplexProperty) {
134
+ result[dp.name] = core.map(node[dp.nameOnServer], (v) => {
135
+ return processNoMerge(mc, dp.dataType, v);
136
+ });
137
+ }
138
+ else {
139
+ result[dp.name] = DataType.parseRawValue(node[dp.nameOnServer], dp.dataType);
140
+ }
141
+ });
142
+ (stype instanceof EntityType) && stype.navigationProperties.forEach((np) => {
143
+ let nodeContext = { nodeType: "navProp", navigationProperty: np };
144
+ visitNode(node[np.nameOnServer], mc, nodeContext, result, np.name);
145
+ });
146
+ return result;
147
+ }
148
+ function processAnonType(mc, node) {
149
+ // node is guaranteed to be an object by this point, i.e. not a scalar
150
+ let keyFn = mc.metadataStore.namingConvention.serverPropertyNameToClient;
151
+ let result = {};
152
+ core.objectForEach(node, function (key, value) {
153
+ let newKey = keyFn(key);
154
+ let nodeContext = { nodeType: "anonProp", propertyName: newKey };
155
+ visitNode(value, mc, nodeContext, result, newKey);
156
+ });
157
+ return result;
158
+ }
159
+ function visitNode(node, mc, nodeContext, result, key) {
160
+ let jra = mc.jsonResultsAdapter;
161
+ let meta = jra.visitNode(node, mc, nodeContext) || {};
162
+ // allows visitNode to change the value;
163
+ node = meta.node || node;
164
+ if (meta.ignore)
165
+ return;
166
+ if (meta.passThru) {
167
+ // It used to `return node`, which the callers ignore, so the property was dropped.
168
+ if (meta.nodeId)
169
+ mc.refMap[meta.nodeId] = node;
170
+ result[key] = node;
171
+ return;
172
+ }
173
+ if (Array.isArray(node)) {
174
+ nodeContext.nodeType = nodeContext.nodeType + "Item";
175
+ result[key] = node.map(function (v, ix) {
176
+ meta = jra.visitNode(v, mc, nodeContext) || {};
177
+ v = meta.node || v;
178
+ return processMeta(mc, v, meta, function (refValue) {
179
+ result[key][ix] = refValue();
180
+ });
181
+ });
182
+ }
183
+ else {
184
+ result[key] = processMeta(mc, node, meta, function (refValue) {
185
+ result[key] = refValue();
186
+ });
187
+ }
188
+ }
189
+ function resolveEntityRef(mc, nodeRefId) {
190
+ let entity = mc.refMap[nodeRefId];
191
+ if (entity === undefined) {
192
+ return function () {
193
+ return mc.refMap[nodeRefId];
194
+ };
195
+ }
196
+ else {
197
+ return entity;
198
+ }
199
+ }
200
+ function updateEntityRef(mc, targetEntity, node) {
201
+ let nodeId = node._$meta.nodeId;
202
+ if (!nodeId && node._$meta.extraMetadata) {
203
+ // refMap is not really used, but is returned as data.retrievedEntities, so we populate it anyway.
204
+ nodeId = node._$meta.extraMetadata.uriKey;
205
+ }
206
+ if (nodeId != null) {
207
+ mc.refMap[nodeId] = targetEntity;
208
+ }
209
+ }
210
+ // can return null for a deleted entity if includeDeleted == false
211
+ function mergeEntity(mc, node, meta) {
212
+ node._$meta = meta;
213
+ let em = mc.entityManager;
214
+ let entityType = meta.entityType;
215
+ if (typeof (entityType) === 'string') {
216
+ entityType = mc.metadataStore._getStructuralType(entityType, false);
217
+ }
218
+ node.entityType = entityType;
219
+ let mergeStrategy = mc.mergeOptions.mergeStrategy;
220
+ let isSaving = mc.query == null;
221
+ let entityKey = entityType.getEntityKeyFromRawEntity(node, mc.rawValueFn);
222
+ let targetEntity = em.getEntityByKey(entityKey);
223
+ if (targetEntity) {
224
+ if (isSaving && targetEntity.entityAspect.entityState.isDeleted()) {
225
+ em.detachEntity(targetEntity);
226
+ return targetEntity;
227
+ }
228
+ let targetEntityState = targetEntity.entityAspect.entityState;
229
+ if (mergeStrategy === MergeStrategy.Disallowed) {
230
+ throw new Error("A MergeStrategy of 'Disallowed' prevents " + entityKey.toString() + " from being merged");
231
+ }
232
+ else if (mergeStrategy === MergeStrategy.SkipMerge) {
233
+ updateEntityNoMerge(mc, targetEntity, node);
234
+ }
235
+ else {
236
+ if (mergeStrategy === MergeStrategy.OverwriteChanges
237
+ || targetEntityState.isUnchanged()) {
238
+ updateEntity(mc, targetEntity, node);
239
+ targetEntity.entityAspect.wasLoaded = true;
240
+ if (meta.extraMetadata) {
241
+ targetEntity.entityAspect.extraMetadata = meta.extraMetadata;
242
+ }
243
+ targetEntity.entityAspect.entityState = EntityState.Unchanged;
244
+ clearOriginalValues(targetEntity);
245
+ // propertyName not specified because multiple props EntityChangedEventArgs
246
+ targetEntity.entityAspect.propertyChanged.publish({ entity: targetEntity, propertyName: null });
247
+ let action = isSaving ? EntityAction.MergeOnSave : EntityAction.MergeOnQuery;
248
+ em.entityChanged.publish({ entityAction: action, entity: targetEntity });
249
+ // this is needed to handle an overwrite of a modified entity with an unchanged entity
250
+ // which might in turn cause _hasChanges to change.
251
+ if (!targetEntityState.isUnchanged()) {
252
+ em._notifyStateChange(targetEntity, false);
253
+ }
254
+ }
255
+ else {
256
+ // process targetEntity (even if deleted) to ensure related nodes are handled
257
+ updateEntityNoMerge(mc, targetEntity, node);
258
+ if (targetEntityState === EntityState.Deleted && !mc.mergeOptions.includeDeleted) {
259
+ return null;
260
+ }
261
+ }
262
+ }
263
+ }
264
+ else {
265
+ targetEntity = entityType._createInstanceCore();
266
+ updateEntity(mc, targetEntity, node);
267
+ if (meta.extraMetadata) {
268
+ targetEntity.entityAspect.extraMetadata = meta.extraMetadata;
269
+ }
270
+ // em._attachEntityCore(targetEntity, EntityState.Unchanged, MergeStrategy.Disallowed);
271
+ em._attachEntityCore(targetEntity, EntityState.Unchanged, mergeStrategy);
272
+ targetEntity.entityAspect.wasLoaded = true;
273
+ em.entityChanged.publish({ entityAction: EntityAction.AttachOnQuery, entity: targetEntity });
274
+ }
275
+ return targetEntity;
276
+ }
277
+ // copied from entityAspect
278
+ function clearOriginalValues(target) {
279
+ let aspect = target.entityAspect || target.complexAspect;
280
+ aspect.originalValues = {};
281
+ let stype = target.entityType || target.complexType;
282
+ stype.complexProperties.forEach(function (cp) {
283
+ let cos = target.getProperty(cp.name);
284
+ if (cp.isScalar) {
285
+ clearOriginalValues(cos);
286
+ }
287
+ else {
288
+ observableArray.acceptChanges(cos);
289
+ cos.forEach(clearOriginalValues);
290
+ }
291
+ });
292
+ }
293
+ function updateEntityNoMerge(mc, targetEntity, node) {
294
+ updateEntityRef(mc, targetEntity, node);
295
+ // we still need to merge related entities even if top level entity wasn't modified.
296
+ node.entityType.navigationProperties.forEach(function (np) {
297
+ if (np.isScalar) {
298
+ mergeRelatedEntityCore(mc, node, np);
299
+ }
300
+ else {
301
+ mergeRelatedEntitiesCore(mc, node, np);
302
+ }
303
+ });
304
+ }
305
+ function updateEntity(mc, targetEntity, node) {
306
+ updateEntityRef(mc, targetEntity, node);
307
+ let entityType = targetEntity.entityType;
308
+ entityType._updateTargetFromRaw(targetEntity, node, mc.rawValueFn);
309
+ entityType.navigationProperties.forEach(function (np) {
310
+ if (np.isScalar) {
311
+ mergeRelatedEntity(mc, np, targetEntity, node);
312
+ }
313
+ else {
314
+ mergeRelatedEntities(mc, np, targetEntity, node);
315
+ }
316
+ });
317
+ }
318
+ function mergeRelatedEntity(mc, navigationProperty, targetEntity, rawEntity) {
319
+ let relatedEntity = mergeRelatedEntityCore(mc, rawEntity, navigationProperty);
320
+ if (relatedEntity == null)
321
+ return;
322
+ if (typeof relatedEntity === 'function') {
323
+ mc.deferredFns.push(function () {
324
+ relatedEntity = relatedEntity();
325
+ updateRelatedEntity(relatedEntity, targetEntity, navigationProperty);
326
+ });
327
+ }
328
+ else {
329
+ updateRelatedEntity(relatedEntity, targetEntity, navigationProperty);
330
+ }
331
+ }
332
+ function mergeRelatedEntities(mc, navigationProperty, targetEntity, rawEntity) {
333
+ let relatedEntities = mergeRelatedEntitiesCore(mc, rawEntity, navigationProperty);
334
+ if (relatedEntities == null)
335
+ return;
336
+ let inverseProperty = navigationProperty.inverse;
337
+ if (!inverseProperty)
338
+ return;
339
+ let originalRelatedEntities = targetEntity.getProperty(navigationProperty.name);
340
+ originalRelatedEntities.wasLoaded = true;
341
+ relatedEntities.forEach(function (relatedEntity) {
342
+ if (typeof relatedEntity === 'function') {
343
+ mc.deferredFns.push(function () {
344
+ relatedEntity = relatedEntity();
345
+ updateRelatedEntityInCollection(mc, relatedEntity, originalRelatedEntities, targetEntity, inverseProperty);
346
+ });
347
+ }
348
+ else {
349
+ updateRelatedEntityInCollection(mc, relatedEntity, originalRelatedEntities, targetEntity, inverseProperty);
350
+ }
351
+ });
352
+ }
353
+ function mergeRelatedEntityCore(mc, rawEntity, navigationProperty) {
354
+ let relatedRawEntity = rawEntity[navigationProperty.nameOnServer];
355
+ if (!relatedRawEntity)
356
+ return null;
357
+ let relatedEntity = mc.visitAndMerge(relatedRawEntity, { nodeType: "navProp", navigationProperty: navigationProperty });
358
+ return relatedEntity;
359
+ }
360
+ function mergeRelatedEntitiesCore(mc, rawEntity, navigationProperty) {
361
+ let relatedRawEntities = rawEntity[navigationProperty.nameOnServer];
362
+ if (!relatedRawEntities)
363
+ return null;
364
+ // a navigation property is expected to yield an array
365
+ if (!Array.isArray(relatedRawEntities))
366
+ return null;
367
+ let relatedEntities = mc.visitAndMerge(relatedRawEntities, { nodeType: "navPropItem", navigationProperty: navigationProperty });
368
+ return relatedEntities;
369
+ }
370
+ function updateRelatedEntity(relatedEntity, targetEntity, navigationProperty) {
371
+ if (!relatedEntity)
372
+ return;
373
+ let propName = navigationProperty.name;
374
+ let currentRelatedEntity = targetEntity.getProperty(propName);
375
+ // check if the related entity is already hooked up
376
+ if (currentRelatedEntity !== relatedEntity) {
377
+ // if not hook up both directions.
378
+ targetEntity.setProperty(propName, relatedEntity);
379
+ let inverseProperty = navigationProperty.inverse;
380
+ if (!inverseProperty)
381
+ return;
382
+ if (inverseProperty.isScalar) {
383
+ relatedEntity.setProperty(inverseProperty.name, targetEntity);
384
+ }
385
+ else {
386
+ let collection = relatedEntity.getProperty(inverseProperty.name);
387
+ collection.push(targetEntity);
388
+ }
389
+ }
390
+ }
391
+ function updateRelatedEntityInCollection(mc, relatedEntity, relatedEntities, targetEntity, inverseProperty) {
392
+ if (!relatedEntity)
393
+ return;
394
+ // don't update relatedCollection if preserveChanges & relatedEntity has an fkChange.
395
+ if (relatedEntity.entityAspect.entityState === EntityState.Modified
396
+ && mc.mergeOptions.mergeStrategy === MergeStrategy.PreserveChanges) {
397
+ let origValues = relatedEntity.entityAspect.originalValues;
398
+ let fkWasModified = inverseProperty.relatedDataProperties.some(function (dp) {
399
+ return origValues[dp.name] != undefined;
400
+ });
401
+ if (fkWasModified)
402
+ return;
403
+ }
404
+ // check if the related entity is already hooked up
405
+ let thisEntity = relatedEntity.getProperty(inverseProperty.name);
406
+ if (thisEntity !== targetEntity) {
407
+ // if not - hook it up.
408
+ relatedEntities.push(relatedEntity);
409
+ relatedEntity.setProperty(inverseProperty.name, targetEntity);
410
+ }
411
+ }
412
+ //# sourceMappingURL=mapping-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping-context.js","sourceRoot":"","sources":["../../src/query/mapping-context.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataServiceAdapter } from '../config/interface-registry.js';\r\nimport { core } from '../core/core.js';\r\nimport { DataType } from '../metadata/data-type.js';\r\nimport { DataService, JsonResultsAdapter, NodeContext, NodeMeta } from '../metadata/data-service.js';\r\nimport { EntityState } from '../entity/entity-state.js';\r\nimport { EntityAction } from '../entity/entity-action.js';\r\nimport { MetadataStore, EntityType, StructuralType, DataProperty, NavigationProperty } from '../metadata/entity-metadata.js';\r\nimport { EntityManager } from '../manager/entity-manager.js';\r\nimport { MergeStrategy } from './query-options.js';\r\nimport { Entity } from '../entity/entity-aspect.js';\r\nimport { observableArray } from '../entity/observable-array.js';\r\nimport { EntityQuery } from './entity-query.js';\r\n\r\n\r\n/**\r\nFor use by breeze plugin authors only. The class is for use in building a {@link DataServiceAdapter} implementation. \r\n@adapter (see {@link DataServiceAdapter}) \r\n@hidden \r\n*/\r\nexport interface MergeOptions {\r\n mergeStrategy: MergeStrategy;\r\n includeDeleted?: boolean;\r\n noTracking?: boolean;\r\n}\r\n\r\n/** @hidden */\r\nexport interface MappingContextConfig {\r\n dataService: DataService;\r\n query?: EntityQuery | string;\r\n entityManager: EntityManager;\r\n mergeOptions: MergeOptions;\r\n}\r\n\r\n/**\r\nFor use by breeze plugin authors only. The class is for use in building a {@link DataServiceAdapter} implementation. \r\n@adapter (see {@link DataServiceAdapter}) \r\n@hidden \r\n*/\r\nexport class MappingContext {\r\n /** @hidden @internal */\r\n declare _$typeName: string; // on prototype\r\n\r\n rawValueFn = DataProperty.getRawValueFromServer; // think about passing this in later.\r\n\r\n declare dataService: DataService;\r\n declare query: EntityQuery | string;\r\n declare entityManager: EntityManager;\r\n declare mergeOptions: MergeOptions;\r\n declare adapter: DataServiceAdapter; // assigned in the AbstractDataServiceAdapter.\r\n\r\n declare refMap: Record<string, any>; // TODO\r\n declare deferredFns: Function[]; // TODO\r\n declare jsonResultsAdapter: JsonResultsAdapter;\r\n declare metadataStore: MetadataStore;\r\n\r\n constructor(config: MappingContextConfig) {\r\n\r\n core.extend(this, config, [\r\n \"query\", \"entityManager\", \"dataService\", \"mergeOptions\"\r\n ]);\r\n\r\n // calc'd props\r\n this.refMap = {};\r\n this.deferredFns = [];\r\n this.jsonResultsAdapter = this.dataService.jsonResultsAdapter;\r\n this.metadataStore = this.entityManager.metadataStore;\r\n this.rawValueFn = DataProperty.getRawValueFromServer; // think about passing this in later.\r\n }\r\n\r\n getUrl() {\r\n let query = this.query;\r\n if (!query) {\r\n throw new Error(\"query cannot be empty\");\r\n }\r\n let uriString: string;\r\n if (typeof query === 'string') {\r\n uriString = query;\r\n } else if (query instanceof EntityQuery) {\r\n uriString = this.dataService.uriBuilder!.buildUri(query, this.metadataStore);\r\n } else {\r\n throw new Error(\"unable to recognize query parameter as either a string or an EntityQuery\");\r\n }\r\n return this.dataService.qualifyUrl(uriString);\r\n }\r\n\r\n visitAndMerge(nodes: any[], nodeContext: any) {\r\n let query = this.query;\r\n let jra = this.jsonResultsAdapter;\r\n nodeContext = nodeContext || {};\r\n let that = this;\r\n let result = core.map(nodes, function (node) {\r\n if (query == null && node.entityAspect) {\r\n // don't bother merging a result from a save that was not returned from the server.\r\n if (node.entityAspect.entityState.isDeleted()) {\r\n that.entityManager.detachEntity(node);\r\n } else {\r\n node.entityAspect.acceptChanges();\r\n }\r\n return node;\r\n }\r\n\r\n let meta = jra.visitNode(node, that, nodeContext) || {};\r\n node = meta.node || node;\r\n if (query && nodeContext.nodeType === \"root\" && !meta.entityType) {\r\n meta.entityType = query instanceof EntityQuery && query._getToEntityType && query._getToEntityType(that.metadataStore);\r\n }\r\n return processMeta(that, node, meta);\r\n }, this.mergeOptions.includeDeleted);\r\n\r\n if (result.filter && !this.mergeOptions.includeDeleted) {\r\n // result may have deleted entities because related nodes were processed\r\n result = result.filter((x: any) => x && (!x.entityAspect || !x.entityAspect.entityState.isDeleted()));\r\n }\r\n\r\n return result;\r\n }\r\n\r\n processDeferred() {\r\n if (this.deferredFns.length > 0) {\r\n this.deferredFns.forEach((fn) => {\r\n fn();\r\n });\r\n }\r\n }\r\n}\r\nMappingContext.prototype._$typeName = \"MappingContext\";\r\n\r\n\r\nfunction processMeta(mc: MappingContext, node: any, meta: NodeMeta, assignFn?: (val: any) => void) {\r\n // == is deliberate here instead of ===\r\n if (meta.ignore || node == null) {\r\n return null;\r\n } else if (meta.nodeRefId) {\r\n let refValue = resolveEntityRef(mc, meta.nodeRefId);\r\n if (typeof refValue === \"function\" && assignFn != null) {\r\n mc.deferredFns.push(function () {\r\n assignFn(refValue);\r\n });\r\n return undefined; // deferred and will be set later;\r\n }\r\n return refValue;\r\n } else if (meta.entityType) {\r\n let entityType = meta.entityType;\r\n if (mc.mergeOptions.noTracking) {\r\n node = processNoMerge(mc, entityType, node);\r\n if (entityType.noTrackingFn) {\r\n node = entityType.noTrackingFn(node, entityType);\r\n }\r\n if (meta.nodeId) {\r\n mc.refMap[meta.nodeId] = node;\r\n }\r\n return node;\r\n } else {\r\n if (entityType.isComplexType) {\r\n // because we still need to do serverName to client name processing\r\n return processNoMerge(mc, entityType, node);\r\n } else {\r\n return mergeEntity(mc, node, meta);\r\n }\r\n }\r\n } else {\r\n\r\n if ((!meta.passThru) && typeof node === 'object' && ! core.isDate(node)) {\r\n node = processAnonType(mc, node);\r\n }\r\n\r\n // updating the refMap for entities is handled by updateEntityRef for entities.\r\n if (meta.nodeId) {\r\n mc.refMap[meta.nodeId] = node;\r\n }\r\n return node;\r\n }\r\n}\r\n\r\nfunction processNoMerge(mc: MappingContext, stype: StructuralType, node: any) {\r\n let result = {} as Record<string, any>;\r\n\r\n stype.dataProperties.forEach(function (dp) {\r\n if (dp.isComplexProperty) {\r\n result[dp.name] = core.map(node[dp.nameOnServer], (v: any) => {\r\n return processNoMerge(mc, dp.dataType as any, v);\r\n });\r\n } else {\r\n result[dp.name] = DataType.parseRawValue(node[dp.nameOnServer], dp.dataType as DataType);\r\n }\r\n });\r\n\r\n (stype instanceof EntityType) && stype.navigationProperties.forEach( (np) => {\r\n let nodeContext = { nodeType: \"navProp\", navigationProperty: np };\r\n visitNode(node[np.nameOnServer], mc, nodeContext, result, np.name);\r\n });\r\n\r\n return result;\r\n}\r\n\r\nfunction processAnonType(mc: MappingContext, node: any) {\r\n // node is guaranteed to be an object by this point, i.e. not a scalar\r\n let keyFn = mc.metadataStore.namingConvention.serverPropertyNameToClient;\r\n let result = {};\r\n\r\n core.objectForEach(node, function (key, value) {\r\n let newKey = keyFn(key);\r\n let nodeContext = { nodeType: \"anonProp\", propertyName: newKey };\r\n visitNode(value, mc, nodeContext, result, newKey);\r\n });\r\n return result;\r\n}\r\n\r\nfunction visitNode(node: any, mc: MappingContext, nodeContext: NodeContext, result: Record<string, any>, key: string) {\r\n let jra = mc.jsonResultsAdapter;\r\n let meta = jra.visitNode(node, mc, nodeContext) || {};\r\n // allows visitNode to change the value;\r\n node = meta.node || node;\r\n\r\n if (meta.ignore) return;\r\n if (meta.passThru) {\r\n // It used to `return node`, which the callers ignore, so the property was dropped.\r\n if (meta.nodeId) mc.refMap[meta.nodeId] = node;\r\n result[key] = node;\r\n return;\r\n }\r\n if (Array.isArray(node)) {\r\n nodeContext.nodeType = nodeContext.nodeType + \"Item\";\r\n result[key] = node.map(function (v, ix) {\r\n meta = jra.visitNode(v, mc, nodeContext) || {};\r\n v = meta.node || v;\r\n return processMeta(mc, v, meta, function (refValue) {\r\n result[key][ix] = refValue();\r\n });\r\n });\r\n } else {\r\n result[key] = processMeta(mc, node, meta, function (refValue) {\r\n result[key] = refValue();\r\n });\r\n }\r\n}\r\n\r\nfunction resolveEntityRef(mc: MappingContext, nodeRefId: string) {\r\n let entity = mc.refMap[nodeRefId];\r\n if (entity === undefined) {\r\n return function () {\r\n return mc.refMap[nodeRefId];\r\n };\r\n } else {\r\n return entity;\r\n }\r\n}\r\n\r\nfunction updateEntityRef(mc: MappingContext, targetEntity: any, node: any) {\r\n let nodeId = node._$meta.nodeId;\r\n if (!nodeId && node._$meta.extraMetadata) {\r\n // refMap is not really used, but is returned as data.retrievedEntities, so we populate it anyway.\r\n nodeId = node._$meta.extraMetadata.uriKey;\r\n }\r\n if (nodeId != null) {\r\n mc.refMap[nodeId] = targetEntity;\r\n }\r\n}\r\n\r\n// can return null for a deleted entity if includeDeleted == false\r\nfunction mergeEntity(mc: MappingContext, node: any, meta: NodeMeta) {\r\n node._$meta = meta;\r\n let em = mc.entityManager;\r\n\r\n let entityType = meta.entityType as EntityType;\r\n if (typeof (entityType) === 'string') {\r\n entityType = mc.metadataStore._getStructuralType(entityType, false) as EntityType;\r\n }\r\n node.entityType = entityType;\r\n\r\n let mergeStrategy = mc.mergeOptions.mergeStrategy;\r\n let isSaving = mc.query == null;\r\n\r\n let entityKey = entityType.getEntityKeyFromRawEntity(node, mc.rawValueFn);\r\n let targetEntity = em.getEntityByKey(entityKey);\r\n if (targetEntity) {\r\n if (isSaving && targetEntity.entityAspect.entityState.isDeleted()) {\r\n em.detachEntity(targetEntity);\r\n return targetEntity;\r\n }\r\n let targetEntityState = targetEntity.entityAspect.entityState;\r\n if (mergeStrategy === MergeStrategy.Disallowed) {\r\n throw new Error(\"A MergeStrategy of 'Disallowed' prevents \" + entityKey.toString() + \" from being merged\");\r\n } else if (mergeStrategy === MergeStrategy.SkipMerge) {\r\n updateEntityNoMerge(mc, targetEntity, node);\r\n } else {\r\n if (mergeStrategy === MergeStrategy.OverwriteChanges\r\n || targetEntityState.isUnchanged()) {\r\n updateEntity(mc, targetEntity, node);\r\n targetEntity.entityAspect.wasLoaded = true;\r\n if (meta.extraMetadata) {\r\n targetEntity.entityAspect.extraMetadata = meta.extraMetadata;\r\n }\r\n targetEntity.entityAspect.entityState = EntityState.Unchanged;\r\n clearOriginalValues(targetEntity);\r\n // propertyName not specified because multiple props EntityChangedEventArgs\r\n targetEntity.entityAspect.propertyChanged.publish({ entity: targetEntity, propertyName: null });\r\n let action = isSaving ? EntityAction.MergeOnSave : EntityAction.MergeOnQuery;\r\n em.entityChanged.publish({ entityAction: action, entity: targetEntity });\r\n // this is needed to handle an overwrite of a modified entity with an unchanged entity\r\n // which might in turn cause _hasChanges to change.\r\n if (!targetEntityState.isUnchanged()) {\r\n em._notifyStateChange(targetEntity, false);\r\n }\r\n } else {\r\n // process targetEntity (even if deleted) to ensure related nodes are handled\r\n updateEntityNoMerge(mc, targetEntity, node);\r\n if (targetEntityState === EntityState.Deleted && !mc.mergeOptions.includeDeleted) {\r\n return null;\r\n }\r\n }\r\n }\r\n } else {\r\n targetEntity = entityType._createInstanceCore() as Entity;\r\n\r\n updateEntity(mc, targetEntity, node);\r\n\r\n if (meta.extraMetadata) {\r\n targetEntity.entityAspect.extraMetadata = meta.extraMetadata;\r\n }\r\n // em._attachEntityCore(targetEntity, EntityState.Unchanged, MergeStrategy.Disallowed);\r\n em._attachEntityCore(targetEntity, EntityState.Unchanged, mergeStrategy);\r\n targetEntity.entityAspect.wasLoaded = true;\r\n em.entityChanged.publish({ entityAction: EntityAction.AttachOnQuery, entity: targetEntity });\r\n }\r\n return targetEntity;\r\n}\r\n\r\n// copied from entityAspect\r\nfunction clearOriginalValues(target: any) {\r\n let aspect = target.entityAspect || target.complexAspect;\r\n aspect.originalValues = {};\r\n let stype = target.entityType || target.complexType;\r\n stype.complexProperties.forEach(function (cp: any) {\r\n let cos = target.getProperty(cp.name);\r\n if (cp.isScalar) {\r\n clearOriginalValues(cos);\r\n } else {\r\n observableArray.acceptChanges(cos);\r\n cos.forEach(clearOriginalValues);\r\n }\r\n });\r\n}\r\n\r\n\r\nfunction updateEntityNoMerge(mc: MappingContext, targetEntity: Entity, node: any) {\r\n updateEntityRef(mc, targetEntity, node);\r\n // we still need to merge related entities even if top level entity wasn't modified.\r\n node.entityType.navigationProperties.forEach(function (np: NavigationProperty) {\r\n if (np.isScalar) {\r\n mergeRelatedEntityCore(mc, node, np);\r\n } else {\r\n mergeRelatedEntitiesCore(mc, node, np);\r\n }\r\n });\r\n}\r\n\r\nfunction updateEntity(mc: MappingContext, targetEntity: Entity, node: any) {\r\n updateEntityRef(mc, targetEntity, node);\r\n let entityType = targetEntity.entityType;\r\n entityType._updateTargetFromRaw(targetEntity, node, mc.rawValueFn);\r\n\r\n entityType.navigationProperties.forEach(function (np) {\r\n if (np.isScalar) {\r\n mergeRelatedEntity(mc, np, targetEntity, node);\r\n } else {\r\n mergeRelatedEntities(mc, np, targetEntity, node);\r\n }\r\n });\r\n}\r\n\r\nfunction mergeRelatedEntity(mc: MappingContext, navigationProperty: NavigationProperty, targetEntity: Entity, rawEntity: any) {\r\n\r\n let relatedEntity = mergeRelatedEntityCore(mc, rawEntity, navigationProperty);\r\n if (relatedEntity == null) return;\r\n if (typeof relatedEntity === 'function') {\r\n mc.deferredFns.push(function () {\r\n relatedEntity = relatedEntity();\r\n updateRelatedEntity(relatedEntity, targetEntity, navigationProperty);\r\n });\r\n } else {\r\n updateRelatedEntity(relatedEntity, targetEntity, navigationProperty);\r\n }\r\n}\r\n\r\nfunction mergeRelatedEntities(mc: MappingContext, navigationProperty: NavigationProperty, targetEntity: Entity, rawEntity: any) {\r\n let relatedEntities = mergeRelatedEntitiesCore(mc, rawEntity, navigationProperty);\r\n if (relatedEntities == null) return;\r\n\r\n let inverseProperty = navigationProperty.inverse;\r\n if (!inverseProperty) return;\r\n\r\n let originalRelatedEntities = targetEntity.getProperty(navigationProperty.name);\r\n originalRelatedEntities.wasLoaded = true;\r\n\r\n relatedEntities.forEach(function (relatedEntity: any) {\r\n if (typeof relatedEntity === 'function') {\r\n mc.deferredFns.push(function () {\r\n relatedEntity = relatedEntity();\r\n updateRelatedEntityInCollection(mc, relatedEntity, originalRelatedEntities, targetEntity, inverseProperty as NavigationProperty);\r\n });\r\n } else {\r\n updateRelatedEntityInCollection(mc, relatedEntity, originalRelatedEntities, targetEntity, inverseProperty as NavigationProperty);\r\n }\r\n });\r\n}\r\n\r\nfunction mergeRelatedEntityCore(mc: MappingContext, rawEntity: any, navigationProperty: NavigationProperty) {\r\n let relatedRawEntity = rawEntity[navigationProperty.nameOnServer];\r\n if (!relatedRawEntity) return null;\r\n\r\n let relatedEntity = mc.visitAndMerge(relatedRawEntity, { nodeType: \"navProp\", navigationProperty: navigationProperty });\r\n return relatedEntity;\r\n}\r\n\r\nfunction mergeRelatedEntitiesCore(mc: MappingContext, rawEntity: any, navigationProperty: NavigationProperty) {\r\n let relatedRawEntities = rawEntity[navigationProperty.nameOnServer];\r\n if (!relatedRawEntities) return null;\r\n\r\n // a navigation property is expected to yield an array\r\n if (!Array.isArray(relatedRawEntities)) return null;\r\n\r\n let relatedEntities = mc.visitAndMerge(relatedRawEntities, { nodeType: \"navPropItem\", navigationProperty: navigationProperty });\r\n return relatedEntities;\r\n}\r\n\r\nfunction updateRelatedEntity(relatedEntity: Entity, targetEntity: Entity, navigationProperty: NavigationProperty) {\r\n if (!relatedEntity) return;\r\n let propName = navigationProperty.name;\r\n let currentRelatedEntity = targetEntity.getProperty(propName);\r\n\r\n // check if the related entity is already hooked up\r\n if (currentRelatedEntity !== relatedEntity) {\r\n // if not hook up both directions.\r\n targetEntity.setProperty(propName, relatedEntity);\r\n let inverseProperty = navigationProperty.inverse;\r\n if (!inverseProperty) return;\r\n if (inverseProperty.isScalar) {\r\n relatedEntity.setProperty(inverseProperty.name, targetEntity);\r\n } else {\r\n let collection = relatedEntity.getProperty(inverseProperty.name);\r\n collection.push(targetEntity);\r\n\r\n }\r\n }\r\n}\r\n\r\nfunction updateRelatedEntityInCollection(mc: MappingContext, relatedEntity: Entity | undefined,\r\n relatedEntities: Entity[], targetEntity: Entity, inverseProperty: NavigationProperty) {\r\n if (!relatedEntity) return;\r\n\r\n // don't update relatedCollection if preserveChanges & relatedEntity has an fkChange.\r\n if (relatedEntity.entityAspect.entityState === EntityState.Modified\r\n && mc.mergeOptions.mergeStrategy === MergeStrategy.PreserveChanges) {\r\n let origValues = relatedEntity.entityAspect.originalValues;\r\n let fkWasModified = inverseProperty.relatedDataProperties.some(function (dp) {\r\n return origValues[dp.name] != undefined;\r\n });\r\n if (fkWasModified) return;\r\n }\r\n // check if the related entity is already hooked up\r\n let thisEntity = relatedEntity.getProperty(inverseProperty.name);\r\n\r\n if (thisEntity !== targetEntity) {\r\n // if not - hook it up.\r\n relatedEntities.push(relatedEntity);\r\n relatedEntity.setProperty(inverseProperty.name, targetEntity);\r\n }\r\n}\r\n\r\n\r\n"]}