breeze-client 2.2.1 → 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 +62 -93
  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 @@
1
+ {"version":3,"file":"entity-query.js","sourceRoot":"","sources":["../../src/query/entity-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { core, Callback, ErrorCallback, arrayFlatMap, stringStartsWith } from '../core/core.js';\r\nimport { assertParam } from '../core/assert-param.js';\r\nimport { DataType } from '../metadata/data-type.js';\r\nimport { EntityAspect, Entity } from '../entity/entity-aspect.js';\r\nimport type { QueriedAs } from '../entity/entity-aspect.js';\r\nimport { EntityKey } from '../entity/entity-key.js';\r\nimport { BreezeEnum } from '../core/enum.js';\r\nimport { DataService, JsonResultsAdapter } from '../metadata/data-service.js';\r\nimport { EntityManager, QueryResult } from '../manager/entity-manager.js';\r\nimport { MetadataStore, EntityType, NavigationProperty, EntityProperty, entityTypeForCtor } from '../metadata/entity-metadata.js';\r\nimport { QueryOptions, MergeStrategy, FetchStrategy } from './query-options.js';\r\nimport { Predicate } from './predicate.js';\r\nimport type { CollectionElement, CollectionPath, FilterOpFor, FilterValueFor, FunctionExpressionPath, WhereObject, NavigationPath, OrderByPath, PropertyPath, PropertyValue, QuantifierOp, SelectPath } from './property-path.js';\r\n\r\nexport interface RecursiveArray<T> {\r\n [i: number]: T | RecursiveArray<T>;\r\n}\r\n\r\n\r\nexport interface EntityQueryJsonContext {\r\n entityType?: EntityType;\r\n propertyPathFn?: Function; // TODO\r\n toNameOnServer?: boolean;\r\n}\r\n/**\r\nAn EntityQuery instance is used to query entities either from a remote datasource or from a local {@link EntityManager}.\r\n\r\nEntityQueries are immutable - this means that all EntityQuery methods that return an EntityQuery actually create a new EntityQuery. This means that\r\nEntityQueries can be 'modified' without affecting any current instances.\r\n*/\r\nexport class EntityQuery<T = any> {\r\n /** @hidden @internal */\r\n declare _$typeName: string; // actually placed on prototype\r\n // top = this.take; // TODO: consider\r\n /** The resource name used by this query. __Read Only__ */\r\n declare resourceName?: string;\r\n /** The {@link EntityType} that is associated with the 'from' clause ( resourceName) of the query. This is only guaranteed to be be set AFTER the query\r\n has been executed because it depends on the {@link MetadataStore} associated with the {@link EntityManager} that the query was executed against.\r\n This value may be null if the entityType cannot be associated with a resourceName. __Read Only__ */\r\n declare fromEntityType?: EntityType;\r\n /** The 'where' {@link Predicate} used by this query. __Read Only__ */\r\n declare wherePredicate?: Predicate;\r\n /** The `OrderByClause` used by this query. __Read Only__ */\r\n declare orderByClause?: OrderByClause;\r\n /** The `ExpandClause` used by this query. __Read Only__ */\r\n declare expandClause?: ExpandClause;\r\n /** The `SelectClause` used by this query. __Read Only__ */\r\n declare selectClause?: SelectClause;\r\n /** The number of entities to 'skip' for this query. __Read Only__ */\r\n declare skipCount?: number;\r\n /** The number of entities to 'take' for this query. __Read Only__ */\r\n declare takeCount?: number;\r\n /** Any additional parameters that were added to the query via the 'withParameters' method. __Read Only__ */\r\n declare parameters: Object;\r\n /** Whether an inline count is returned for this query. __Read Only__ */\r\n declare inlineCountEnabled: boolean;\r\n /** Whether entity tracking has been disabled for this query. __Read Only__ */\r\n declare noTrackingEnabled: boolean;\r\n /** Whether to send query as the body of a POST request. (Server needs to accomodate POST). __Read Only__ */\r\n declare usePostEnabled: boolean;\r\n /** The {@link QueryOptions} for this query. __Read Only__ */\r\n // default is to get queryOptions and dataService from the entityManager.\r\n declare queryOptions?: QueryOptions;\r\n /** The {@link DataService} for this query. __Read Only__ */\r\n declare dataService?: DataService;\r\n /** The {@link EntityManager} for this query. This may be null and can be set via the 'using' method. */\r\n declare entityManager?: EntityManager;\r\n /** The entityType that will be returned by this query. \r\n This property will only be set if the 'toType' method was called. __Read Only__ */\r\n declare resultEntityType: EntityType | string;\r\n /** Whether the query's property paths are the server's names, sent as written. Set by {@link EntityQuery.useNameOnServer}. __Read Only__ */\r\n declare usesNameOnServer?: boolean;\r\n\r\n /** Constructor. Most queries start from the static {@link EntityQuery.from} instead, which takes a\r\n registered entity class and so gives a typed query:\r\n ```ts\r\n const query = EntityQuery.from(Customer); // EntityQuery<Customer>\r\n ```\r\n\r\n When a constructor is needed, supply the type argument. As with a type argument on\r\n `EntityQuery.from(resourceName)`, nothing checks it against the resource name:\r\n ```ts\r\n const query = new EntityQuery<Customer>(\"Customers\");\r\n ```\r\n\r\n Usually this constructor will be followed by calls to filtering, ordering or selection methods\r\n ```ts\r\n const query = new EntityQuery<Customer>(\"Customers\")\r\n .where(\"companyName\", \"startsWith\", \"C\")\r\n .orderBy(\"region\");\r\n ```\r\n @param resourceName - either a resource name or a serialized EntityQuery ( created by {@link EntityQuery.toJSON})\r\n */\r\n constructor(resourceName?: string | Object) {\r\n if (resourceName != null && (typeof resourceName !== 'string')) {\r\n return fromJSON(this, resourceName);\r\n }\r\n // The cast holds for test/tsconfig.json, which checks src/ again with strictNullChecks off;\r\n // without it the guard above narrows to `string | Object` rather than `string | undefined`.\r\n this.resourceName = resourceName as string;\r\n this.fromEntityType = undefined;\r\n this.wherePredicate = undefined;\r\n this.orderByClause = undefined;\r\n this.selectClause = undefined;\r\n this.skipCount = undefined;\r\n this.takeCount = undefined;\r\n this.expandClause = undefined;\r\n this.parameters = {};\r\n this.inlineCountEnabled = false;\r\n this.noTrackingEnabled = false;\r\n this.usePostEnabled = false;\r\n // default is to get queryOptions and dataService from the entityManager.\r\n // this.queryOptions = new QueryOptions();\r\n // this.dataService = new DataService();\r\n this.entityManager = undefined;\r\n\r\n }\r\n\r\n\r\n /**\r\n Specifies the resource to query for this EntityQuery.\r\n ```ts\r\n const query = new EntityQuery()\r\n .from(\"Customers\");\r\n ```\r\n\r\n is the same as\r\n ```ts\r\n const query = new EntityQuery(\"Customers\");\r\n ```\r\n\r\n For a typed query, use the static `EntityQuery.from(Customer)` instead.\r\n @param resourceName - The resource to query.\r\n */\r\n from(resourceName: string) {\r\n // TODO: think about allowing entityType as well\r\n assertParam(resourceName, \"resourceName\").isString().check();\r\n return clone(this, \"resourceName\", resourceName);\r\n }\r\n\r\n /**\r\n Creates a 'base' entityQuery, either for a registered entity class or for a resource name.\r\n\r\n Given a class, the resource name comes from the metadata and the query carries the type, so the\r\n results are typed:\r\n ```ts\r\n const query = EntityQuery.from(Customer); // EntityQuery<Customer>\r\n const custs = (await query.using(em).execute()).results; // Customer[]\r\n ```\r\n\r\n The class must be registered with {@link MetadataStore.registerEntityTypeCtor}; that is what\r\n tells Breeze which type it stands for, and an unregistered class throws.\r\n\r\n A resource name may be given instead; see the other signature.\r\n @param entityCtor - A constructor registered for the EntityType to query.\r\n */\r\n static from<U extends Entity>(entityCtor: new () => U): EntityQuery<U>;\r\n /**\r\n Creates a 'base' entityQuery for the specified resource name. Prefer passing a registered entity\r\n class, as in `EntityQuery.from(Customer)`, which gives a typed query.\r\n\r\n Given a resource name, the query is untyped, as it always was:\r\n ```ts\r\n const query = EntityQuery.from(\"Customers\");\r\n ```\r\n\r\n is the same as\r\n ```ts\r\n const query = new EntityQuery(\"Customers\");\r\n ```\r\n\r\n A type argument may be supplied with a resource name, for a projection or a named server query\r\n that no entity class describes. **Nothing checks it against the resource** - it is an assertion,\r\n not a guarantee, and `EntityQuery.from<Customer>(\"Orders\")` compiles:\r\n ```ts\r\n const query = EntityQuery.from<CustomerDto>(\"CompanyNamesAndIds\");\r\n ```\r\n\r\n `U` is the caller's claim about what the resource returns; nothing checks it against the name.\r\n It defaults to `any`, so `from(\"Customers\")` behaves exactly as it always has.\r\n @param resourceName - The resource to query.\r\n */\r\n static from<U = any>(resourceName: string): EntityQuery<U>;\r\n static from(arg: string | (new () => Entity)): EntityQuery<any> {\r\n if (typeof arg === 'function') {\r\n const entityType = entityTypeForCtor(arg);\r\n if (!entityType.defaultResourceName) {\r\n throw new Error(`'${entityType.name}' has no defaultResourceName, so a query cannot be built from the constructor. ` +\r\n `Use EntityQuery.from(resourceName).toType(...) instead, or call metadataStore.setEntityTypeForResourceName.`);\r\n }\r\n return new EntityQuery(entityType.defaultResourceName);\r\n }\r\n assertParam(arg, \"resourceName\").isString().check();\r\n return new EntityQuery(arg);\r\n }\r\n\r\n /**\r\n Specifies the top level type this query will return, as a registered constructor. The query then\r\n carries that type, so its results are typed - and because the constructor is resolved through\r\n metadata, this is *checked*, unlike a type argument on {@link EntityQuery.from}:\r\n ```ts\r\n const query = EntityQuery.from(\"CustomersAndOrders\").toType(Customer); // EntityQuery<Customer>\r\n ```\r\n @param entityCtor - A constructor registered for the EntityType this query will return.\r\n @summary If the json result consists of more than a simple entity or array of entities, consider using a {@link JsonResultsAdapter} instead.\r\n */\r\n toType<U extends Entity>(entityCtor: new () => U): EntityQuery<U>;\r\n /**\r\n Specifies the top level EntityType that this query will return. Only needed when a query returns a json result that does not include type information,\r\n or when using a resource name that is not associated to an EntityType.\r\n ```ts\r\n const query = EntityQuery.from(\"MyCustomMethod\")\r\n .toType(\"Customer\");\r\n ```\r\n\r\n Passing the registered class instead, as in `toType(Customer)`, also types the query.\r\n @param entityType - The top level EntityType that this query will return.\r\n @summary If the json result consists of more than a simple entity or array of entities, consider using a {@link JsonResultsAdapter} instead.\r\n */\r\n toType(entityType: string | EntityType): EntityQuery<any>;\r\n toType(entityType: string | EntityType | (new () => Entity)): EntityQuery<any> {\r\n // Naming the type is what `toType` is for, so a registered constructor names it *and* types\r\n // the query - and unlike a type argument on `from(resourceName)`, this one is checked against\r\n // the metadata.\r\n if (typeof entityType === 'function') {\r\n entityType = entityTypeForCtor(entityType);\r\n }\r\n assertParam(entityType, \"entityType\").isString().or().isInstanceOf(EntityType).check();\r\n return clone(this, \"resultEntityType\", entityType) as EntityQuery<any>;\r\n }\r\n\r\n\r\n // The checked forms come first, so they are tried first. They engage only when the query has a\r\n // concrete entity type. EntityQuery<T = any> means many queries do not, and for those\r\n // PropertyPath<T> is plain `string` and these are no narrower than what was always here.\r\n where<P extends CollectionPath<T>>(collection: P, quantifier: QuantifierOp | FilterQueryOp,\r\n predicate: Predicate<CollectionElement<T, P>>): EntityQuery<T>;\r\n where(collection: CollectionPath<T>, quantifier: QuantifierOp | FilterQueryOp,\r\n property: string, quantifier2: QuantifierOp | FilterQueryOp,\r\n predicate: Predicate): EntityQuery<T>; // nested any/all over a prebuilt Predicate\r\n\r\n // The object form, checked against T. WhereObject<T> is `object` for an untyped query, so this\r\n // is exactly the `where(predicate: Object)` overload it replaces wherever T is not concrete.\r\n where(predicate: WhereObject<T>): EntityQuery<T>;\r\n where(predicate?: Predicate<T>): EntityQuery<T>;\r\n\r\n // Escapes, for what cannot be checked: a property path or an operator that is only known at\r\n // run time. Each one takes the unknowable part as a type parameter and demands that it really\r\n // be `string` - `string extends P` is true for a variable and false for a literal - so these\r\n // accept a computed path while never rescuing a literal the checked forms have rejected.\r\n where<O extends string>(property: PropertyPath<T>,\r\n operator: string extends O ? O : never, value: any): EntityQuery<T>;\r\n where<P extends string>(property: P extends FunctionExpressionPath ? P : (string extends P ? P : never),\r\n operator: string | FilterQueryOp, value: any): EntityQuery<T>;\r\n where<P extends string>(collection: string extends P ? P : never,\r\n quantifier: string | FilterQueryOp, property: string,\r\n operator: string | FilterQueryOp, value: any): EntityQuery<T>; // any/all\r\n where<P2 extends string>(collection: CollectionPath<T>, quantifier: string | FilterQueryOp,\r\n property: string extends P2 ? P2 : never,\r\n operator: string | FilterQueryOp, value: any): EntityQuery<T>; // any/all\r\n where<O2 extends string>(collection: CollectionPath<T>, quantifier: string | FilterQueryOp,\r\n property: PropertyPath<CollectionElement<T, CollectionPath<T>>> | string,\r\n operator: string extends O2 ? O2 : never, value: any): EntityQuery<T>; // any/all\r\n where(property: string, filterop: string, property2: string, filterop2: string, property3: string, filterop3: string, value: any): EntityQuery<T>; // nested any/all\r\n where(anArray: RecursiveArray<string | number | FilterQueryOp | Predicate>): EntityQuery<T>;\r\n // Last on purpose, not by accident. When no overload matches, TypeScript reports the error from\r\n // the *last* one - so with the escapes last, a misspelled path was reported as 'not assignable to\r\n // never', which says nothing. With the checked forms last it names the type that was expected.\r\n // Resolution is unaffected: the escapes reject a literal, so a literal still lands here.\r\n where<P extends PropertyPath<T>, O extends FilterOpFor<PropertyValue<T, P>>>(\r\n property: P, operator: O, value: FilterValueFor<T, PropertyValue<T, P>, O>): EntityQuery<T>;\r\n where<P extends CollectionPath<T>,\r\n P2 extends PropertyPath<CollectionElement<T, P>>,\r\n O2 extends FilterOpFor<PropertyValue<CollectionElement<T, P>, P2>>>(\r\n collection: P, quantifier: QuantifierOp, property: P2, operator: O2,\r\n value: FilterValueFor<CollectionElement<T, P>, PropertyValue<CollectionElement<T, P>, P2>, O2>): EntityQuery<T>;\r\n /**\r\n Returns a new query with an added filter criteria; Can be called multiple times which means to 'and' with any existing\r\n Predicate or can be called with null to clear all predicates.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where(\"companyName\", \"startsWith\", \"C\");\r\n ```\r\n\r\n or in object form\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where({ companyName: { startsWith: \"C\" } });\r\n ```\r\n\r\n This can also be expressed using an explicit {@link FilterQueryOp} (the operator is then not checked against the property's type) as\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where(\"companyName\", FilterQueryOp.StartsWith, \"C\");\r\n ```\r\n\r\n or a preconstructed {@link Predicate} may be used\r\n ```ts\r\n const p = Predicate.for(Customer);\r\n const query = EntityQuery.from(Customer).where(p(\"companyName\", \"startsWith\", \"C\"));\r\n ```\r\n\r\n Predicates are often useful when you want to combine multiple conditions in a single filter, such as\r\n ```ts\r\n const pred = p(\"companyName\", \"startsWith\", \"C\").and(p(\"region\", \"eq\", null));\r\n const query = EntityQuery.from(Customer)\r\n .where(pred);\r\n ```\r\n\r\n More complicated queries can make use of nested property paths\r\n ```ts\r\n const query = EntityQuery.from(Product)\r\n .where(\"category.categoryName\", \"startsWith\", \"S\");\r\n ```\r\n\r\n or query functions - A list of valid functions can be found within the {@link Predicate} documentation.\r\n\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where(\"toLower(companyName)\", \"startsWith\", \"c\");\r\n ```\r\n\r\n or to be even more baroque\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where(\"toUpper(substring(companyName, 1, 2))\", FilterQueryOp.Equals, \"OM\");\r\n ```\r\n @param predicate - Can be either\r\n - a single {@link Predicate}\r\n\r\n - the parameters to create a 'simple' Predicate\r\n - - a property name, a property path with '.' as path seperators or a property expression {String}\r\n - - an operator - {@link FilterQueryOp} or it's string representation. Case is ignored\r\n when if a string is provided and any string that matches one of the FilterQueryOp aliases will be accepted.\r\n - - a value {Object} - This will be treated as either a property expression or a literal depending on context. \r\n In general, if the value can be interpreted as a property expression it will be, otherwise it will be treated as a literal.\r\n In most cases this works well, but you can also force the interpretation by making the value argument itself an object \r\n with a 'value' property and an 'isLiteral' property set to either true or false.\r\n Breeze also tries to infer the dataType of any literal based on context, if this fails you can force this inference by making the value argument \r\n an object with a 'value' property and a 'dataType'property set to one of the DataType enumeration instances.\r\n\r\n - a null or undefined ( this causes any existing where clause to be removed)\r\n */\r\n where(...args: any[]) {\r\n let wherePredicate: Predicate | undefined;\r\n if (args.length > 0 && args[0] != null) {\r\n wherePredicate = (Predicate.create as (...a: any[]) => Predicate)(...args);\r\n if (this.fromEntityType) wherePredicate._validate(this.fromEntityType);\r\n if (this.wherePredicate) {\r\n wherePredicate = this.wherePredicate.and(wherePredicate);\r\n }\r\n }\r\n return clone(this, \"wherePredicate\", wherePredicate);\r\n }\r\n\r\n\r\n orderBy(propertyPaths: OrderByPath<T> | OrderByPath<T>[], isDescending?: boolean): EntityQuery<T>;\r\n // Escapes, as on where(): a path only known at run time, and the documented comma-separated\r\n // list, which is let through unchecked rather than enumerated - every combination of paths is\r\n // not something to ask of a compiler. An array keeps the checking.\r\n orderBy<P extends string>(propertyPaths: P extends `${string},${string}` ? P : (string extends P ? P : never),\r\n isDescending?: boolean): EntityQuery<T>;\r\n orderBy(propertyPaths?: undefined, isDescending?: boolean): EntityQuery<T>;\r\n orderBy<P extends string>(propertyPaths: string extends P ? P[] : never, isDescending?: boolean): EntityQuery<T>;\r\n /**\r\n Returns a new query that orders the results of the query by property name. By default sorting occurs is ascending order, but sorting in descending order is supported as well.\r\n OrderBy clauses may be chained.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .orderBy(\"companyName\");\r\n ```\r\n\r\n or to sort across multiple properties\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .orderBy([\"region\", \"companyName\"]);\r\n ```\r\n\r\n A comma-separated string, `\"region, companyName\"`, is also accepted, but its paths are not checked.\r\n\r\n Nested property paths are also supported\r\n ```ts\r\n const query = EntityQuery.from(Product)\r\n .orderBy(\"category.categoryName\");\r\n ```\r\n\r\n Sorting in descending order is supported via the addition of ' desc' to the end of any property path.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .orderBy(\"companyName desc\");\r\n ```\r\n\r\n or\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .orderBy([\"region desc\", \"companyName desc\"]);\r\n ```\r\n @param propertyPaths - A comma-separated (',') string of property paths or an array of property paths.\r\n Each property path can optionally end with \" desc\" to force a descending sort order. If 'propertyPaths' is either null or omitted then all ordering is removed.\r\n @param isDescending - If specified, overrides all of the embedded 'desc' tags in the previously specified property paths.\r\n */\r\n orderBy(propertyPaths?: string | string[], isDescending?: boolean) {\r\n // propertyPaths: can pass in create(\"A.X,B\") or create(\"A.X desc, B\") or create(\"A.X desc,B\", true])\r\n // isDesc parameter trumps isDesc in propertyName.\r\n let orderByClause = propertyPaths == null ? null : new OrderByClause(normalizePropertyPaths(propertyPaths), isDescending);\r\n if (this.orderByClause && orderByClause) {\r\n orderByClause = new OrderByClause([this.orderByClause, orderByClause]);\r\n }\r\n return clone(this, \"orderByClause\", orderByClause);\r\n }\r\n\r\n\r\n orderByDesc(propertyPaths: OrderByPath<T> | OrderByPath<T>[]): EntityQuery<T>;\r\n // The same escapes as orderBy.\r\n orderByDesc<P extends string>(propertyPaths: P extends `${string},${string}` ? P : (string extends P ? P : never)): EntityQuery<T>;\r\n orderByDesc<P extends string>(propertyPaths: string extends P ? P[] : never): EntityQuery<T>;\r\n /**\r\n Returns a new query that orders the results of the query by property name in descending order.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .orderByDesc(\"companyName\");\r\n ```\r\n\r\n or to sort across multiple properties\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .orderByDesc([\"region\", \"companyName\"]);\r\n ```\r\n\r\n Nested property paths are also supported\r\n ```ts\r\n const query = EntityQuery.from(Product)\r\n .orderByDesc(\"category.categoryName\");\r\n ```\r\n @param propertyPaths - A comma-separated (',') string of property paths or an array of property paths.\r\n If 'propertyPaths' is either null or omitted then all ordering is removed.\r\n */\r\n orderByDesc(propertyPaths: string | string[]) {\r\n return this.orderBy(propertyPaths as any, true);\r\n }\r\n\r\n /**\r\n Returns a new query that selects a list of properties from the results of the original query and returns the values of just these properties. This\r\n will be referred to as a projection.\r\n If the result of this selection \"projection\" contains entities, these entities will automatically be added to EntityManager's cache and will\r\n be made 'observable'.\r\n Any simple properties, i.e. strings, numbers or dates within a projection will not be cached are will NOT be made 'observable'.\r\n \r\n Simple data properties can be projected\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where(\"companyName\", \"startsWith\", \"C\")\r\n .select(\"companyName\");\r\n ```\r\n\r\n This will return an array of objects each with a single \"companyName\" property of type string.\r\n A similar query could return a navigation property instead\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where(\"companyName\", \"startsWith\", \"C\")\r\n .select(\"orders\");\r\n ```\r\n\r\n where the result would be an array of objects each with a single \"orders\" property that would itself be an array of \"Order\" entities.\r\n Composite projections are also possible:\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where(\"companyName\", \"startsWith\", \"C\")\r\n .select(\"companyName, orders\");\r\n ```\r\n\r\n As well as projections involving nested property paths\r\n ```ts\r\n const query = EntityQuery.from(Order)\r\n .where(\"customer.companyName\", \"startsWith\", \"C\")\r\n .select(\"customer.companyName, customer, orderDate\");\r\n ```\r\n\r\n The projected query is an `EntityQuery<any>`: its results are no longer entities of the queried type.\r\n @param propertyPaths - A comma-separated (',') string of property paths or an array of property paths.\r\n If 'propertyPaths' is either null or omitted then any existing projection on the query is removed.\r\n */\r\n select(propertyPaths: SelectPath<T> | SelectPath<T>[]): EntityQuery<any>;\r\n // The same escapes as orderBy: a path only known at run time, the comma-separated list, and\r\n // undefined to remove the projection.\r\n select<P extends string>(propertyPaths: P extends `${string},${string}` ? P : (string extends P ? P : never)): EntityQuery<any>;\r\n select(propertyPaths?: undefined): EntityQuery<any>;\r\n select<P extends string>(propertyPaths: string extends P ? P[] : never): EntityQuery<any>;\r\n select(propertyPaths?: string | string[]): EntityQuery<any> {\r\n let selectClause = propertyPaths == null ? null : new SelectClause(normalizePropertyPaths(propertyPaths));\r\n // A projection no longer returns the entity type, so the type parameter is dropped rather\r\n // than carried forward as something the results will not be.\r\n return clone(this, \"selectClause\", selectClause) as EntityQuery<any>;\r\n }\r\n\r\n /**\r\n Returns a new query that skips the specified number of entities when returning results.\r\n Any existing 'skip' can be cleared by calling 'skip' with no arguments.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where(\"companyName\", \"startsWith\", \"C\")\r\n .skip(5);\r\n ```\r\n @param count - The number of entities to skip over. If omitted or null any existing skip count on the query is removed.\r\n */\r\n skip(count?: number) {\r\n assertParam(count, \"count\").isOptional().isNumber().check();\r\n return clone(this, \"skipCount\", (count == null) ? null : count);\r\n }\r\n\r\n /**\r\n Returns a new query that returns only the specified number of entities when returning results. - Same as 'take'.\r\n Any existing 'top' can be cleared by calling 'top' with no arguments.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .top(5);\r\n ```\r\n @param count - The number of entities to return.\r\n If 'count' is either null or omitted then any existing 'top' count on the query is removed.\r\n */\r\n top(count?: number) {\r\n return this.take(count);\r\n }\r\n\r\n /**\r\n Returns a new query that returns only the specified number of entities when returning results - Same as 'top'.\r\n Any existing take can be cleared by calling take with no arguments.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .take(5);\r\n ```\r\n @param count - The number of entities to return.\r\n If 'count' is either null or omitted then any existing 'take' count on the query is removed.\r\n */\r\n take(count?: number) {\r\n assertParam(count, \"count\").isOptional().isNumber().check();\r\n return clone(this, \"takeCount\", (count == null) ? null : count);\r\n }\r\n\r\n expand(propertyPaths: NavigationPath<T> | NavigationPath<T>[]): EntityQuery<T>;\r\n expand<P extends string>(propertyPaths: P extends `${string},${string}` ? P : (string extends P ? P : never)): EntityQuery<T>;\r\n expand<P extends string>(propertyPaths: string extends P ? P[] : never): EntityQuery<T>;\r\n expand(propertyPaths?: undefined): EntityQuery<T>;\r\n /**\r\n Returns a new query that will return related entities nested within its results. The expand method allows you to identify related entities, via navigation property\r\n names such that a graph of entities may be retrieved with a single request. Any filtering occurs before the results are 'expanded'.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .where(\"companyName\", \"startsWith\", \"C\")\r\n .expand(\"orders\");\r\n ```\r\n\r\n will return the filtered customers each with its \"orders\" properties fully resolved.\r\n Multiple paths may be specified in an array\r\n ```ts\r\n const query = EntityQuery.from(Order)\r\n .expand([\"customer\", \"employee\"]);\r\n ```\r\n\r\n and nested property paths my be specified as well\r\n ```ts\r\n const query = EntityQuery.from(Order)\r\n .expand([\"customer\", \"orderDetails\", \"orderDetails.product\"]);\r\n ```\r\n\r\n The paths may also be separated by a ',' in a single string, `\"customer, employee\"`, but those paths are not checked.\r\n @param propertyPaths - A comma-separated list of navigation property names or an array of navigation property names. Each Navigation Property name can be followed\r\n by a '.' and another navigation property name to enable identifying a multi-level relationship.\r\n If 'propertyPaths' is either null or omitted then any existing 'expand' clause on the query is removed.\r\n */\r\n expand(propertyPaths?: string | string[]) {\r\n let expandClause = propertyPaths == null ? null : new ExpandClause(normalizePropertyPaths(propertyPaths));\r\n return clone(this, \"expandClause\", expandClause);\r\n }\r\n\r\n /**\r\n Returns a new query that includes a collection of parameters to pass to the server.\r\n ```ts\r\n const query = EntityQuery.from(\"EmployeesFilteredByCountryAndBirthdate\")\r\n .toType(Employee)\r\n .withParameters({ birthDate: \"1/1/1960\", country: \"USA\" });\r\n ```\r\n \r\n will call the 'EmployeesFilteredByCountryAndBirthdate' method on the server and pass in 2 parameters. This\r\n query will be uri encoded as\r\n ```ts\r\n {serviceApi}/EmployeesFilteredByCountryAndBirthdate?birthDate=1%2F1%2F1960&country=USA\r\n ```\r\n\r\n Parameters may also be mixed in with other query criteria.\r\n ```ts\r\n const query = EntityQuery.from(\"EmployeesFilteredByCountryAndBirthdate\")\r\n .toType(Employee)\r\n .withParameters({ birthDate: \"1/1/1960\", country: \"USA\" })\r\n .where(\"lastName\", \"startsWith\", \"S\")\r\n .orderBy(\"birthDate\");\r\n ```\r\n @param parameters - A parameters object where the keys are the parameter names and the values are the parameter values.\r\n */\r\n withParameters(parameters: Object) {\r\n assertParam(parameters, \"parameters\").isObject().check();\r\n return clone(this, \"parameters\", parameters);\r\n }\r\n\r\n /**\r\n Returns a query with the `inlineCount` capability either enabled or disabled. With `inlineCount` enabled, an additional 'inlineCount' property\r\n will be returned with the query results that will contain the number of entities that would have been returned by this\r\n query with only the 'where'/'filter' clauses applied, i.e. without any 'skip'/'take' operators applied. For local queries this clause is ignored.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .take(20)\r\n .orderBy(\"companyName\")\r\n .inlineCount(true);\r\n ```\r\n\r\n will return the first 20 customers as well as a count of _all_ of the customers in the remote store.\r\n @param enabled - (default = true) Whether or not inlineCount capability should be enabled. If this parameter is omitted, true is assumed.\r\n */\r\n inlineCount(enabled?: boolean) {\r\n assertParam(enabled, \"enabled\").isBoolean().isOptional().check();\r\n enabled = (enabled === undefined) ? true : !!enabled;\r\n return clone(this, \"inlineCountEnabled\", enabled);\r\n }\r\n\r\n /**\r\n Returns a query whose property paths are the server's names rather than the client's, so Breeze\r\n sends them as written instead of translating them with the `MetadataStore`'s naming convention.\r\n ```ts\r\n EntityQuery.from('Customers').where('CompanyName', 'startsWith', 'A').useNameOnServer();\r\n ```\r\n The query is built from a resource name because a typed query, `EntityQuery.from(Customer)`,\r\n checks its paths against the client's names and would reject `'CompanyName'`.\r\n Only the query sent to the server is affected: run against the cache, a query works on the\r\n client's objects and needs the client's names.\r\n @param usesNameOnServer - (default = true)\r\n */\r\n useNameOnServer(usesNameOnServer?: boolean) {\r\n assertParam(usesNameOnServer, \"usesNameOnServer\").isBoolean().isOptional().check();\r\n usesNameOnServer = (usesNameOnServer === undefined) ? true : !!usesNameOnServer;\r\n return clone(this, \"usesNameOnServer\", usesNameOnServer);\r\n }\r\n\r\n /**\r\n Returns a query with the `noTracking` capability either enabled or disabled. With `noTracking` enabled, the results of this query\r\n will not be coerced into entities but will instead look like raw javascript projections. i.e. simple javascript objects.\r\n ```ts\r\n const query = EntityQuery.from(Customer)\r\n .take(20)\r\n .orderBy(\"companyName\")\r\n .noTracking(true);\r\n ```\r\n @param enabled - (default = true) Whether or not the noTracking capability should be enabled. If this parameter is omitted, true is assumed.\r\n */\r\n noTracking(enabled?: boolean) {\r\n assertParam(enabled, \"enabled\").isBoolean().isOptional().check();\r\n enabled = (enabled === undefined) ? true : !!enabled;\r\n return clone(this, \"noTrackingEnabled\", enabled);\r\n }\r\n\r\n /**\r\n Returns a query with the `usePost` capability either enabled or disabled. With `usePost` enabled, the query is sent\r\n as a POST request (instead of GET) and the query expression will be sent as JSON in the body of the post.\r\n Note that the server must be able to parse the body of the request; otherwise the query expression will be ignored.\r\n ```ts\r\n const query = EntityQuery.from(Order)\r\n .where(\"freight\", \"gt\", 100)\r\n .usePost(true);\r\n ```\r\n results in a POST request to `{host}/{path}/Orders`\r\n with body `{\"where\": {\"Freight\":{\"gt\":100}}}`\r\n @param enabled - (default = true) Whether or not usePost should be enabled. If this parameter is omitted, true is assumed.\r\n */\r\n usePost(enabled?: boolean) {\r\n assertParam(enabled, \"enabled\").isBoolean().isOptional().check();\r\n enabled = (enabled === undefined) ? true : !!enabled;\r\n return clone(this, \"usePostEnabled\", enabled);\r\n }\r\n\r\n using(obj: EntityManager): EntityQuery<T>;\r\n using(obj: DataService): EntityQuery<T>;\r\n using(obj: JsonResultsAdapter): EntityQuery<T>;\r\n using(obj: QueryOptions): EntityQuery<T>;\r\n using(obj: MergeStrategy): EntityQuery<T>;\r\n using(obj: FetchStrategy): EntityQuery<T>;\r\n /**\r\n Returns a copy of this EntityQuery with the specified {@link EntityManager}, {@link DataService},\r\n {@link JsonResultsAdapter}, {@link MergeStrategy} or {@link FetchStrategy} applied.\r\n ```ts\r\n // 'using' can be used to return a new query with a specified EntityManager.\r\n const em = new EntityManager(serviceName);\r\n const query = EntityQuery.from(Order)\r\n .using(em);\r\n ```\r\n\r\n or with a specified {@link MergeStrategy}\r\n ```ts\r\n const query = EntityQuery.from(Order)\r\n .using(MergeStrategy.PreserveChanges);\r\n ```\r\n\r\n or with a specified {@link FetchStrategy}\r\n ```ts\r\n const query = EntityQuery.from(Order)\r\n .using(FetchStrategy.FromLocalCache);\r\n ```\r\n @param obj - The object to update in creating a new EntityQuery from an existing one.\r\n */\r\n using(obj: any) {\r\n if (!obj) return this;\r\n let eq = clone(this);\r\n processUsing(eq, {\r\n \"entityManager\": null,\r\n \"dataService\": null,\r\n \"queryOptions\": null,\r\n \"fetchStrategy\": (eq: EntityQuery, val: any) => {\r\n eq.queryOptions = (eq.queryOptions || new QueryOptions()).using(val);\r\n },\r\n \"mergeStrategy\": (eq: EntityQuery, val: any) => {\r\n eq.queryOptions = (eq.queryOptions || new QueryOptions()).using(val);\r\n },\r\n \"jsonResultsAdapter\": (eq: EntityQuery, val: any) => {\r\n eq.dataService = (eq.dataService || new DataService()).using({ jsonResultsAdapter: val });\r\n }\r\n }, obj);\r\n return eq;\r\n }\r\n\r\n execute(): Promise<QueryResult<T>>;\r\n /** @deprecated Await the returned promise instead of passing callbacks. */\r\n execute(callback?: Callback, errorCallback?: ErrorCallback): Promise<QueryResult<T>>;\r\n /**\r\n Executes this query. This method requires that an EntityManager has been previously specified via the \"using\" method.\r\n \r\n It returns a promise:\r\n ```ts\r\n const em = new EntityManager(serviceName);\r\n const query = EntityQuery.from(Order).using(em);\r\n const data = await query.execute(); // rejects if the query fails\r\n const orders = data.results; // Order[]\r\n ```\r\n\r\n The `callback` and `errorCallback` arguments are deprecated. They still work, but the\r\n promise is the supported form and the callbacks will be removed in a future major version.\r\n\r\n This method is the same as calling the EntityManager 'executeQuery' method.\r\n ```ts\r\n const em = new EntityManager(serviceName);\r\n const query = EntityQuery.from(Order);\r\n const data = await em.executeQuery(query);\r\n const orders = data.results; // Order[]\r\n ```\r\n\r\n @param callback - Deprecated. Function called on success.\r\n @param errorCallback - Deprecated. Function called on failure.\r\n @returns Promise\r\n */\r\n execute(callback?: Callback, errorCallback?: ErrorCallback): Promise<QueryResult<T>> {\r\n if (!this.entityManager) {\r\n throw new Error(\"An EntityQuery must have its EntityManager property set before calling 'execute'\");\r\n }\r\n return this.entityManager.executeQuery(this, callback, errorCallback);\r\n }\r\n\r\n /**\r\n Executes this query against the local cache. This method requires that an EntityManager have been previously specified via the \"using\" method.\r\n ```ts\r\n // assume em is an entityManager already filled with order entities;\r\n const query = EntityQuery.from(Order).using(em);\r\n const orders = query.executeLocally(); // Order[]\r\n ```\r\n\r\n Note that calling this method is the same as calling {@link EntityManager.executeQueryLocally}.\r\n */\r\n executeLocally(): T[] {\r\n if (!this.entityManager) {\r\n throw new Error(\"An EntityQuery must have its EntityManager property set before calling 'executeLocally'\");\r\n }\r\n return this.entityManager.executeQueryLocally(this);\r\n }\r\n\r\n /**\r\n Executes this query against the server and returns only the number of matching entities, without\r\n materializing any of them. Requires an EntityManager, set via {@link EntityQuery.using}.\r\n ```ts\r\n const count = await EntityQuery.from(Order).where(\"freight\", \">\", 100).using(em).executeCount();\r\n ```\r\n\r\n It is `take(0).inlineCount(true)` and reads `inlineCount` off the result, so the server must\r\n support inline count.\r\n */\r\n async executeCount(): Promise<number> {\r\n if (!this.entityManager) {\r\n throw new Error(\"An EntityQuery must have its EntityManager property set before calling 'executeCount'\");\r\n }\r\n const qr = await this.take(0).inlineCount(true).execute();\r\n return qr.inlineCount!;\r\n }\r\n\r\n /**\r\n Returns the serializable form of this query: its resource name, clauses, parameters and options,\r\n with client property names. `JSON.stringify` calls it, and passing the parsed JSON to the\r\n `EntityQuery` constructor recreates the query. The `EntityManager` and `DataService` are not\r\n included.\r\n */\r\n toJSON() {\r\n const json = this.toJSONExt() as Record<string, any>;\r\n // usePost is not part of the query sent to the server, so toJSONExt leaves it out;\r\n // it is part of the query itself, and fromJSON reads it back.\r\n if (this.usePostEnabled) json.usePost = true;\r\n return json;\r\n }\r\n\r\n /** Typically only for use when building UriBuilderAdapters. \r\n @hidden @internal \r\n */\r\n toJSONExt(context?: EntityQueryJsonContext) {\r\n context = context || {};\r\n context.entityType = context.entityType || this.fromEntityType;\r\n // A query written in the server's names (useNameOnServer) is sent as it is.\r\n if (this.usesNameOnServer) context.toNameOnServer = false;\r\n context.propertyPathFn = context.toNameOnServer ? context.entityType!.clientPropertyPathToServer.bind(context.entityType) : core.identity;\r\n\r\n let toJSONExtFn = function (v: any) {\r\n return v ? v.toJSONExt(context) : undefined;\r\n };\r\n return core.toJson(this, {\r\n \"from,resourceName\": null,\r\n \"toType,resultEntityType\": function (v: any) {\r\n // resultEntityType can be either a string or an entityType\r\n return v ? (typeof v === 'string' ? v : v.name) : undefined;\r\n },\r\n \"where,wherePredicate\": toJSONExtFn,\r\n \"orderBy,orderByClause\": toJSONExtFn,\r\n \"select,selectClause\": toJSONExtFn,\r\n \"expand,expandClause\": toJSONExtFn,\r\n \"skip,skipCount\": null,\r\n \"take,takeCount\": null,\r\n parameters: function (v: any) {\r\n return core.isEmpty(v) ? undefined : v;\r\n },\r\n \"inlineCount,inlineCountEnabled\": false,\r\n \"noTracking,noTrackingEnabled\": false,\r\n queryOptions: null\r\n });\r\n\r\n }\r\n\r\n static fromEntities<U extends Entity>(entity: U): EntityQuery<QueriedAs<U>>;\r\n static fromEntities<U extends Entity>(entities: U[]): EntityQuery<QueriedAs<U>>;\r\n /**\r\n Static method that creates an EntityQuery that will allow 'requerying' an entity or a collection of entities by primary key. This can be useful\r\n to force a requery of selected entities, or to restrict an existing collection of entities according to some filter.\r\n\r\n Works for a single entity or an array of entities of the SAME type.\r\n Does not work for an array of entities of different types.\r\n ```ts\r\n // assuming 'customers' is an array of 'Customer' entities retrieved earlier.\r\n const customersQuery = EntityQuery.fromEntities(customers); // EntityQuery<Customer>\r\n ```\r\n\r\n The resulting query can, of course, be extended\r\n ```ts\r\n // assuming 'customers' is an array of 'Customer' entities retrieved earlier.\r\n const customersQuery = EntityQuery.fromEntities(customers)\r\n .where(\"region\", \"ne\", null);\r\n ```\r\n\r\n Single entities can requeried as well.\r\n ```ts\r\n // assuming 'customer' is a 'Customer' entity retrieved earlier.\r\n const customerQuery = EntityQuery.fromEntities(customer);\r\n ```\r\n\r\n will create a query that will return an array containing a single customer entity.\r\n @param entities - The entities for which we want to create an EntityQuery.\r\n */\r\n static fromEntities(entities: Entity | Entity[]) {\r\n assertParam(entities, \"entities\").isEntity().or().isNonEmptyArray().isEntity().check();\r\n let ents = (Array.isArray(entities)) ? entities : [entities];\r\n\r\n let firstEntity = ents[0];\r\n let type = firstEntity.entityType;\r\n if (ents.some(function (e) {\r\n return e.entityType !== type;\r\n })) {\r\n throw new Error(\"All 'fromEntities' must be the same type; at least one is not of type \" +\r\n type.name);\r\n }\r\n let q = new EntityQuery(type.defaultResourceName);\r\n let preds = ents.map(function (entity) {\r\n return buildPredicate(entity);\r\n });\r\n let pred = Predicate.or(preds);\r\n q = q.where(pred);\r\n let em = firstEntity.entityAspect.entityManager;\r\n if (em) {\r\n q = q.using(em);\r\n }\r\n return q;\r\n }\r\n\r\n /**\r\n Creates an EntityQuery for the specified {@link EntityKey}.\r\n ```ts\r\n const entityKey = new EntityKey(Employee, 1);\r\n const query = EntityQuery.fromEntityKey(entityKey);\r\n ```\r\n\r\n or\r\n ```ts\r\n // 'employee' is a previously queried employee\r\n const entityKey = employee.entityAspect.getKey();\r\n const query = EntityQuery.fromEntityKey(entityKey);\r\n ```\r\n @param entityKey - The {@link EntityKey} for which a query will be created.\r\n */\r\n static fromEntityKey(entityKey: EntityKey) {\r\n assertParam(entityKey, \"entityKey\").isInstanceOf(EntityKey).check();\r\n let q = new EntityQuery(entityKey.entityType.defaultResourceName);\r\n let pred = buildKeyPredicate(entityKey);\r\n q = q.where(pred).toType(entityKey.entityType);\r\n return q;\r\n }\r\n\r\n /**\r\n Creates an EntityQuery for the specified entity and {@link NavigationProperty}.\r\n ```ts\r\n // 'employee' is a previously queried employee\r\n const query = EntityQuery.fromEntityNavigation(employee, \"orders\");\r\n ```\r\n\r\n will return a query for the \"orders\" of the specified 'employee'. The {@link NavigationProperty}\r\n itself may be passed instead of its name:\r\n ```ts\r\n const ordersNavProp = employee.entityType.getNavigationProperty(\"orders\");\r\n const query = EntityQuery.fromEntityNavigation(employee, ordersNavProp);\r\n ```\r\n @param entity - The Entity whose navigation property will be queried.\r\n @param navigationProperty - The {@link NavigationProperty} or name of the NavigationProperty to be queried.\r\n */\r\n static fromEntityNavigation = function (entity: Entity, navigationProperty: NavigationProperty | string) {\r\n assertParam(entity, \"entity\").isEntity().check();\r\n let navProperty = entity.entityType._checkNavProperty(navigationProperty);\r\n let q = new EntityQuery(navProperty.entityType.defaultResourceName);\r\n let pred = buildNavigationPredicate(entity, navProperty);\r\n if (pred == null) {\r\n throw new Error(\"Unable to create a NavigationQuery for navigationProperty: \" + navProperty.name );\r\n }\r\n q = q.where(pred);\r\n let em = entity.entityAspect.entityManager;\r\n return em ? q.using(em) : q;\r\n };\r\n\r\n // protected methods\r\n /** @hidden @internal */\r\n _getFromEntityType(metadataStore: MetadataStore, throwErrorIfNotFound?: boolean) {\r\n // Uncomment next two lines if we make this method public.\r\n // assertParam(metadataStore, \"metadataStore\").isInstanceOf(MetadataStore).check();\r\n // assertParam(throwErrorIfNotFound, \"throwErrorIfNotFound\").isBoolean().isOptional().check();\r\n let entityType = this.fromEntityType;\r\n if (entityType) return entityType;\r\n\r\n let resourceName = this.resourceName;\r\n if (!resourceName) {\r\n throw new Error(\"There is no resourceName for this query\");\r\n }\r\n\r\n if (metadataStore.isEmpty()) {\r\n if (throwErrorIfNotFound) {\r\n throw new Error(\"There is no metadata available for this query. \" +\r\n \"Are you querying the local cache before you've fetched metadata?\");\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n let entityTypeName = metadataStore.getEntityTypeNameForResourceName(resourceName);\r\n if (entityTypeName) {\r\n entityType = metadataStore._getStructuralType(entityTypeName) as EntityType;\r\n } else {\r\n entityType = this._getToEntityType(metadataStore, true);\r\n }\r\n\r\n if (!entityType) {\r\n if (throwErrorIfNotFound) {\r\n throw new Error(core.formatString(\"Cannot find an entityType for resourceName: '%1'. \", resourceName) + core.strings.TO_TYPE);\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n this.fromEntityType = entityType;\r\n return entityType;\r\n\r\n }\r\n\r\n /** @hidden @internal */\r\n _getToEntityType(metadataStore: MetadataStore, skipFromCheck?: boolean): EntityType | undefined {\r\n // skipFromCheck is to avoid recursion if called from _getFromEntityType;\r\n if (this.resultEntityType instanceof EntityType) {\r\n return this.resultEntityType;\r\n } else if (this.resultEntityType) {\r\n // resultEntityType is a string\r\n this.resultEntityType = metadataStore._getStructuralType(this.resultEntityType, false) as EntityType;\r\n return this.resultEntityType;\r\n } else {\r\n // resolve it, if possible, via the resourceName\r\n // do not cache this value in this case\r\n // cannot determine the resultEntityType if a selectClause is present.\r\n // return skipFromCheck ? null : (!this.selectClause) && this._getFromEntityType(metadataStore, false);\r\n if (skipFromCheck || this.selectClause) {\r\n return undefined;\r\n } else {\r\n return this._getFromEntityType(metadataStore, false);\r\n }\r\n\r\n }\r\n }\r\n\r\n /** @hidden @internal */\r\n // for testing\r\n _toUri(em: EntityManager) {\r\n let ds = DataService.resolve([em.dataService]);\r\n return ds!.uriBuilder!.buildUri(this, em.metadataStore);\r\n }\r\n\r\n}\r\nEntityQuery.prototype._$typeName = \"EntityQuery\";\r\n\r\n// private functions\r\n\r\nfunction fromJSON(eq: EntityQuery, json: Object) {\r\n core.toJson(json, {\r\n \"resourceName,from\": null,\r\n // just the name comes back and will be resolved later\r\n \"resultEntityType,toType\": null,\r\n \"wherePredicate,where\": function (v: any) {\r\n return v ? new Predicate(v) : undefined;\r\n },\r\n \"orderByClause,orderBy\": function (v: any) {\r\n return v ? new OrderByClause(v) : undefined;\r\n },\r\n \"selectClause,select\": function (v: any) {\r\n return v ? new SelectClause(v) : undefined;\r\n },\r\n \"expandClause,expand\": function (v: any) {\r\n return v ? new ExpandClause(v) : undefined;\r\n },\r\n \"skipCount,skip\": null,\r\n \"takeCount,take\": null,\r\n parameters: function (v: any) {\r\n return core.isEmpty(v) ? undefined : v;\r\n },\r\n \"inlineCountEnabled,inlineCount\": false,\r\n \"noTrackingEnabled,noTracking\": false,\r\n \"usePostEnabled,usePost\": false,\r\n queryOptions: function (v: any) {\r\n return v ? QueryOptions.fromJSON(v) : undefined;\r\n }\r\n }, eq);\r\n return eq;\r\n}\r\n\r\nfunction clone<T>(eq: EntityQuery<T>, propName?: string, value?: any): EntityQuery<T> {\r\n // immutable queries mean that we don't need to clone if no change in value.\r\n if (propName) {\r\n if ((eq as Record<string, any>)[propName] === value) return eq;\r\n }\r\n // copying QueryOptions is safe because they are are immutable;\r\n let copy = core.extend(new EntityQuery(), eq, [\r\n \"resourceName\",\r\n \"fromEntityType\",\r\n \"wherePredicate\",\r\n \"orderByClause\",\r\n \"selectClause\",\r\n \"skipCount\",\r\n \"takeCount\",\r\n \"expandClause\",\r\n \"inlineCountEnabled\",\r\n \"noTrackingEnabled\",\r\n \"usePostEnabled\",\r\n \"usesNameOnServer\",\r\n \"queryOptions\",\r\n \"entityManager\",\r\n \"dataService\",\r\n \"resultEntityType\"\r\n ]) as EntityQuery<T>;\r\n copy.parameters = core.extend({}, eq.parameters);\r\n if (propName) {\r\n (copy as Record<string, any>)[propName] = value;\r\n }\r\n return copy;\r\n}\r\n\r\nfunction processUsing(eq: EntityQuery, mapArg: Object, value: any, propertyName?: string) {\r\n const map = mapArg as Record<string, any>;\r\n const eqx = eq as Record<string, any>;\r\n let typeName = value._$typeName || ((value instanceof BreezeEnum) && (value.constructor as any).name);\r\n let key = typeName && typeName.substr(0, 1).toLowerCase() + typeName.substr(1);\r\n if (propertyName && key !== propertyName) {\r\n throw new Error(\"Invalid value for property: \" + propertyName);\r\n }\r\n if (key) {\r\n let fn = map[key];\r\n if (fn === undefined) {\r\n throw new Error(\"Invalid config property: \" + key);\r\n } else if (fn === null) {\r\n eqx[key] = value;\r\n } else {\r\n fn(eq, value);\r\n }\r\n } else {\r\n core.objectForEach(value, (propName, val) => {\r\n processUsing(eq, map, val, propName);\r\n });\r\n }\r\n}\r\n\r\nfunction normalizePropertyPaths(propertyPaths: string | string[]) {\r\n assertParam(propertyPaths, \"propertyPaths\").isOptional().isString().or().isArray().isString().check();\r\n if (typeof propertyPaths === 'string') {\r\n propertyPaths = propertyPaths.split(\",\");\r\n }\r\n\r\n propertyPaths = propertyPaths.map(function (pp) {\r\n return pp.trim();\r\n });\r\n return propertyPaths;\r\n}\r\n\r\nfunction buildPredicate(entity: Entity) {\r\n let entityType = entity.entityType;\r\n let predParts = entityType.keyProperties.map(function (kp) {\r\n return Predicate.create(kp.name, FilterQueryOp.Equals, entity.getProperty(kp.name));\r\n });\r\n let pred = Predicate.and(predParts);\r\n return pred;\r\n}\r\n\r\nfunction buildKeyPredicate(entityKey: EntityKey) {\r\n let keyProps = entityKey.entityType.keyProperties;\r\n let preds = core.arrayZip(keyProps, entityKey.values, function (kp, v) {\r\n return Predicate.create(kp.name, FilterQueryOp.Equals, v);\r\n });\r\n let pred = Predicate.and(preds);\r\n return pred;\r\n}\r\n\r\nfunction buildNavigationPredicate(entity: Entity, navigationProperty: NavigationProperty) {\r\n if (navigationProperty.isScalar) {\r\n if (navigationProperty.foreignKeyNames.length === 0) return null;\r\n let relatedKeyValues = navigationProperty.foreignKeyNames.map((fkName) => {\r\n return entity.getProperty(fkName);\r\n });\r\n let entityKey = new EntityKey(navigationProperty.entityType, relatedKeyValues);\r\n return buildKeyPredicate(entityKey);\r\n } else {\r\n let inverseNp = navigationProperty.inverse;\r\n let foreignKeyNames = inverseNp ? inverseNp.foreignKeyNames : navigationProperty.invForeignKeyNames;\r\n if (foreignKeyNames.length === 0) return null;\r\n let keyValues = entity.entityAspect.getKey().values;\r\n let predParts = core.arrayZip(foreignKeyNames, keyValues, (fkName, kv) => {\r\n return Predicate.create(fkName, FilterQueryOp.Equals, kv);\r\n });\r\n return Predicate.and(predParts);\r\n }\r\n}\r\n\r\n/** Base class for BooleanQueryOp and FilterQueryOp */\r\nexport interface QueryOp {\r\n /** The operator for this enum. */\r\n operator: string;\r\n}\r\n\r\n\r\n\r\n/**\r\nFilterQueryOp is an 'Enum' containing all of the valid {@link Predicate}\r\nfilter operators for an {@link EntityQuery}.\r\n*/\r\nexport class FilterQueryOp extends BreezeEnum implements QueryOp {\r\n /** The operator for this enum. */\r\n declare operator: string;\r\n\r\n /** Aliases: \"eq\", \"==\" */\r\n static Equals = new FilterQueryOp({ operator: \"eq\" });\r\n /** Aliases: \"ne\", \"!=\" */\r\n static NotEquals = new FilterQueryOp({ operator: \"ne\" });\r\n /** Aliases: \"gt\", \">\" */\r\n static GreaterThan = new FilterQueryOp({ operator: \"gt\" });\r\n /** Aliases: \"lt\", \"<\" */\r\n static LessThan = new FilterQueryOp({ operator: \"lt\" });\r\n /** Aliases: \"ge\", \">=\" */\r\n static GreaterThanOrEqual = new FilterQueryOp({ operator: \"ge\" });\r\n /** Aliases: \"le\", \"<=\" */\r\n static LessThanOrEqual = new FilterQueryOp({ operator: \"le\" });\r\n /** String operation: Is a string a substring of another string. Aliases: \"substringof\" */\r\n static Contains = new FilterQueryOp({ operator: \"contains\" });\r\n /** No aliases */\r\n static StartsWith = new FilterQueryOp({ operator: \"startswith\" });\r\n /** No aliases */\r\n static EndsWith = new FilterQueryOp({ operator: \"endswith\" });\r\n /** Aliases: \"some\" */\r\n static Any = new FilterQueryOp({ operator: \"any\" });\r\n /** Aliases: \"every\" */\r\n static All = new FilterQueryOp({ operator: \"all\" });\r\n /** No aliases */\r\n static In = new FilterQueryOp({ operator: \"in\" });\r\n}\r\nFilterQueryOp.prototype._$typeName = \"FilterQueryOp\";\r\nFilterQueryOp.resolveSymbols();\r\n\r\n\r\n/**\r\n BooleanQueryOp is an 'Enum' containing all of the valid boolean\r\noperators for an {@link EntityQuery}.\r\n*/\r\nexport class BooleanQueryOp extends BreezeEnum implements QueryOp {\r\n /** The operator for this enum. */\r\n declare operator: string;\r\n\r\n static And = new BooleanQueryOp({ operator: \"and\" });\r\n static Or = new BooleanQueryOp({ operator: \"or\" });\r\n static Not = new BooleanQueryOp({ operator: \"not\" });\r\n\r\n}\r\nBooleanQueryOp.prototype._$typeName = \"BooleanQueryOp\";\r\nBooleanQueryOp.resolveSymbols();\r\n\r\n\r\n/** For use by breeze plugin authors only. The class is used in most {@link UriBuilderAdapter} implementations\r\n@adapter (see {@link UriBuilderAdapter}) \r\n@hidden\r\n\r\nAn OrderByClause is a description of the properties and direction that the result\r\nof a query should be sorted in. OrderByClauses are immutable, which means that any\r\nmethod that would modify an OrderByClause actually returns a new OrderByClause.\r\n\r\nFor example for an Employee object with properties of 'company' and 'lastName' the following would be valid expressions:\r\n```ts\r\nconst obc = new OrderByClause([\"company.companyName\", \"lastName\"]);\r\n```\r\n\r\nor\r\n```ts\r\nconst obc = new OrderByClause([\"company.companyName desc\", \"lastName\"]);\r\n```\r\n\r\nor\r\n```ts\r\nconst obc = new OrderByClause([\"company.companyName\", \"lastName\"], true);\r\n```\r\n*/\r\nexport class OrderByClause {\r\n /** @hidden @internal */\r\n items: OrderByItem[];\r\n\r\n constructor(propertyPaths: string[] | OrderByClause[], isDesc?: boolean) {\r\n if (propertyPaths.length === 0) {\r\n throw new Error(\"OrderByClause cannot be empty\");\r\n }\r\n\r\n // you can also pass in an array of orderByClauses\r\n if (propertyPaths[0] instanceof OrderByClause) {\r\n let clauses = propertyPaths as OrderByClause[];\r\n this.items = arrayFlatMap(clauses, c => c.items);\r\n // this.items = Array.prototype.concat.apply(clauses[0].items, clauses.slice(1).map(core.pluck(\"items\")));\r\n // this.items = Array.prototype.concat.apply([], clauses.map(core.pluck(\"items\")));\r\n } else {\r\n this.items = (propertyPaths as string[]).map(function (pp) {\r\n return new OrderByItem(pp, isDesc);\r\n });\r\n }\r\n\r\n }\r\n\r\n validate(entityType: EntityType) {\r\n if (entityType == null || entityType.isAnonymous) return;\r\n this.items.forEach((item) => {\r\n item.validate(entityType);\r\n });\r\n }\r\n\r\n getComparer(entityType: EntityType) {\r\n let orderByFuncs = this.items.map(function (obc) {\r\n return obc.getComparer(entityType);\r\n });\r\n return function (entity1: any, entity2: any) {\r\n for (let i = 0; i < orderByFuncs.length; i++) {\r\n let result = orderByFuncs[i](entity1, entity2);\r\n if (result !== 0) {\r\n return result;\r\n }\r\n }\r\n return 0;\r\n };\r\n }\r\n\r\n toJSONExt(context: EntityQueryJsonContext) {\r\n return this.items.map(function (item) {\r\n return context.propertyPathFn!(item.propertyPath) + (item.isDesc ? \" desc\" : \"\");\r\n });\r\n }\r\n\r\n}\r\n\r\n/** @hidden @internal */\r\nexport class OrderByItem {\r\n propertyPath: string;\r\n isDesc: boolean;\r\n lastProperty: EntityProperty;\r\n\r\n constructor(propertyPath: string, isDesc?: boolean) {\r\n if (!(typeof propertyPath === 'string')) {\r\n throw new Error(\"propertyPath is not a string\");\r\n }\r\n propertyPath = propertyPath.trim();\r\n\r\n let parts = propertyPath.split(' ');\r\n // parts[0] is the propertyPath; [1] would be whether descending or not.\r\n // if (parts.length > 1 && isDesc !== true && isDesc !== false) {\r\n if (parts.length > 1 && isDesc == null) {\r\n isDesc = stringStartsWith(parts[1].toLowerCase(), \"desc\");\r\n if (!isDesc) {\r\n // isDesc is false but check to make sure its intended.\r\n let isAsc = stringStartsWith(parts[1].toLowerCase(), \"asc\");\r\n if (!isAsc) {\r\n throw new Error(\"the second word in the propertyPath must begin with 'desc' or 'asc'\");\r\n }\r\n\r\n }\r\n }\r\n this.propertyPath = parts[0];\r\n this.isDesc = isDesc || false;\r\n }\r\n\r\n validate(entityType: EntityType): EntityProperty | undefined {\r\n if (entityType == null || entityType.isAnonymous) return;\r\n // will throw an exception on bad propertyPath\r\n this.lastProperty = entityType.getProperty(this.propertyPath, true) as EntityProperty;\r\n return this.lastProperty;\r\n }\r\n\r\n getComparer(entityType: EntityType) {\r\n let propDataType: DataType;\r\n let isCaseSensitive: boolean;\r\n if (!this.lastProperty) this.validate(entityType);\r\n if (this.lastProperty) {\r\n propDataType = (this.lastProperty as any).dataType;\r\n isCaseSensitive = this.lastProperty.parentType.metadataStore.localQueryComparisonOptions.isCaseSensitive;\r\n }\r\n\r\n let propertyPath = this.propertyPath;\r\n let isDesc = this.isDesc;\r\n\r\n return function (entity1: any, entity2: any) {\r\n let value1 = EntityAspect.getPropertyPathValue(entity1, propertyPath);\r\n let value2 = EntityAspect.getPropertyPathValue(entity2, propertyPath);\r\n let dataType = propDataType || (value1 && DataType.fromValue(value1)) || DataType.fromValue(value2);\r\n if (dataType === DataType.String) {\r\n if (isCaseSensitive) {\r\n value1 = value1 || \"\";\r\n value2 = value2 || \"\";\r\n } else {\r\n value1 = (value1 || \"\").toLowerCase();\r\n value2 = (value2 || \"\").toLowerCase();\r\n }\r\n } else {\r\n let normalize = DataType.getComparableFn(dataType);\r\n value1 = normalize(value1);\r\n value2 = normalize(value2);\r\n }\r\n if (value1 === value2) {\r\n return 0;\r\n } else if (value1 > value2 || value2 === undefined) {\r\n return isDesc ? -1 : 1;\r\n } else {\r\n return isDesc ? 1 : -1;\r\n }\r\n };\r\n }\r\n}\r\n\r\n/** For use by breeze plugin authors only. The class is used in most {@link UriBuilderAdapter} implementations\r\n@adapter (see {@link UriBuilderAdapter}) \r\n@hidden \r\n*/\r\nexport class SelectClause {\r\n propertyPaths: string[];\r\n /** @hidden @internal */\r\n _pathNames: string[];\r\n\r\n constructor(propertyPaths: string[]) {\r\n this.propertyPaths = propertyPaths;\r\n this._pathNames = propertyPaths.map(function (pp) {\r\n // every dot, not just the first: order.customer.companyName -> order_customer_companyName\r\n return pp.split(\".\").join(\"_\");\r\n });\r\n }\r\n\r\n validate(entityType: EntityType) {\r\n if (entityType == null || entityType.isAnonymous) return; // can't validate yet\r\n // will throw an exception on bad propertyPath\r\n this.propertyPaths.forEach(function (path) {\r\n entityType.getProperty(path, true);\r\n });\r\n }\r\n\r\n /** @hidden @internal\r\n The property names of a projected result. Given the queried type, they are the names a\r\n remote query's results get: the server names each path by joining the server names of\r\n its properties (the ones sent in the select clause) with '_', and the client passes that\r\n name through the naming convention, as it does every key of an anonymous result. */\r\n _resultNames(entityType?: EntityType) {\r\n if (entityType == null || entityType.isAnonymous) return this._pathNames;\r\n const et: EntityType = entityType;\r\n const toClient = et.metadataStore.namingConvention.serverPropertyNameToClient;\r\n return this.propertyPaths.map(function (pp) {\r\n return toClient(et.clientPropertyPathToServer(pp, \"_\"));\r\n });\r\n }\r\n\r\n toFunction(config?: { entityType?: EntityType }) {\r\n let that = this;\r\n let names = this._resultNames(config && config.entityType);\r\n return function (entity: Entity) {\r\n let result = {};\r\n that.propertyPaths.forEach(function (path, i) {\r\n (result as Record<string, any>)[names[i]] = EntityAspect.getPropertyPathValue(entity, path);\r\n });\r\n return result;\r\n };\r\n }\r\n\r\n toJSONExt(context: EntityQueryJsonContext) {\r\n return this.propertyPaths.map(function (pp) {\r\n return context.propertyPathFn!(pp);\r\n });\r\n }\r\n}\r\n\r\n/** For use by breeze plugin authors only. The class is used in most {@link UriBuilderAdapter} implementations\r\n@adapter (see {@link UriBuilderAdapter}) \r\n@hidden \r\n*/\r\nexport class ExpandClause {\r\n propertyPaths: string[];\r\n\r\n constructor(propertyPaths: string[]) {\r\n this.propertyPaths = propertyPaths;\r\n }\r\n\r\n toJSONExt(context: EntityQueryJsonContext) {\r\n return this.propertyPaths.map(function (pp) {\r\n return context.propertyPathFn!(pp);\r\n });\r\n }\r\n\r\n}\r\n\r\n\r\n"]}
@@ -1,46 +1,44 @@
1
- import { DataServiceAdapter } from './interface-registry';
2
- import { DataService, JsonResultsAdapter } from './data-service';
3
- import { MetadataStore, DataProperty } from './entity-metadata';
4
- import { EntityManager } from './entity-manager';
5
- import { MergeStrategy } from './query-options';
6
- import { EntityQuery } from './entity-query';
7
- /**
8
- For use by breeze plugin authors only. The class is for use in building a [[IDataServiceAdapter]] implementation.
9
- @adapter (see [[IDataServiceAdapter]])
10
- @hidden
11
- */
12
- export interface MergeOptions {
13
- mergeStrategy: MergeStrategy;
14
- includeDeleted?: boolean;
15
- noTracking?: boolean;
16
- }
17
- /** @hidden */
18
- export interface MappingContextConfig {
19
- dataService: DataService;
20
- query?: EntityQuery | string;
21
- entityManager: EntityManager;
22
- mergeOptions: MergeOptions;
23
- }
24
- /**
25
- For use by breeze plugin authors only. The class is for use in building a [[IDataServiceAdapter]] implementation.
26
- @adapter (see [[IDataServiceAdapter]])
27
- @hidden
28
- */
29
- export declare class MappingContext {
30
- /** @hidden @internal */
31
- _$typeName: string;
32
- rawValueFn: typeof DataProperty.getRawValueFromServer;
33
- dataService: DataService;
34
- query: EntityQuery | string;
35
- entityManager: EntityManager;
36
- mergeOptions: MergeOptions;
37
- adapter: DataServiceAdapter;
38
- refMap: Record<string, any>;
39
- deferredFns: Function[];
40
- jsonResultsAdapter: JsonResultsAdapter;
41
- metadataStore: MetadataStore;
42
- constructor(config: MappingContextConfig);
43
- getUrl(): string;
44
- visitAndMerge(nodes: any[], nodeContext: any): any;
45
- processDeferred(): void;
46
- }
1
+ import { DataServiceAdapter } from '../config/interface-registry.js';
2
+ import { DataService, JsonResultsAdapter } from '../metadata/data-service.js';
3
+ import { MetadataStore, DataProperty } from '../metadata/entity-metadata.js';
4
+ import { EntityManager } from '../manager/entity-manager.js';
5
+ import { MergeStrategy } from './query-options.js';
6
+ import { EntityQuery } from './entity-query.js';
7
+ /**
8
+ For use by breeze plugin authors only. The class is for use in building a {@link DataServiceAdapter} implementation.
9
+ @adapter (see {@link DataServiceAdapter})
10
+ @hidden
11
+ */
12
+ export interface MergeOptions {
13
+ mergeStrategy: MergeStrategy;
14
+ includeDeleted?: boolean;
15
+ noTracking?: boolean;
16
+ }
17
+ /** @hidden */
18
+ export interface MappingContextConfig {
19
+ dataService: DataService;
20
+ query?: EntityQuery | string;
21
+ entityManager: EntityManager;
22
+ mergeOptions: MergeOptions;
23
+ }
24
+ /**
25
+ For use by breeze plugin authors only. The class is for use in building a {@link DataServiceAdapter} implementation.
26
+ @adapter (see {@link DataServiceAdapter})
27
+ @hidden
28
+ */
29
+ export declare class MappingContext {
30
+ rawValueFn: typeof DataProperty.getRawValueFromServer;
31
+ dataService: DataService;
32
+ query: EntityQuery | string;
33
+ entityManager: EntityManager;
34
+ mergeOptions: MergeOptions;
35
+ adapter: DataServiceAdapter;
36
+ refMap: Record<string, any>;
37
+ deferredFns: Function[];
38
+ jsonResultsAdapter: JsonResultsAdapter;
39
+ metadataStore: MetadataStore;
40
+ constructor(config: MappingContextConfig);
41
+ getUrl(): string;
42
+ visitAndMerge(nodes: any[], nodeContext: any): any;
43
+ processDeferred(): void;
44
+ }