breeze-client 2.2.0 → 2.2.1-cjs
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.
- package/adapter-ajax-angularjs/{index.d.ts → breeze-client-adapter-ajax-angularjs.d.ts} +0 -1
- package/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.metadata.json +1 -0
- package/adapter-ajax-angularjs/package.json +13 -0
- package/adapter-ajax-fetch/{index.d.ts → breeze-client-adapter-ajax-fetch.d.ts} +0 -1
- package/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.metadata.json +1 -0
- package/adapter-ajax-fetch/package.json +13 -0
- package/adapter-ajax-httpclient/{index.d.ts → breeze-client-adapter-ajax-httpclient.d.ts} +0 -1
- package/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.metadata.json +1 -0
- package/adapter-ajax-httpclient/package.json +13 -0
- package/adapter-ajax-jquery/{index.d.ts → breeze-client-adapter-ajax-jquery.d.ts} +0 -1
- package/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.metadata.json +1 -0
- package/adapter-ajax-jquery/package.json +13 -0
- package/adapter-ajax-post/{index.d.ts → breeze-client-adapter-ajax-post.d.ts} +0 -1
- package/adapter-ajax-post/breeze-client-adapter-ajax-post.metadata.json +1 -0
- package/adapter-ajax-post/package.json +13 -0
- package/adapter-data-service-odata/{index.d.ts → breeze-client-adapter-data-service-odata.d.ts} +0 -1
- package/adapter-data-service-odata/breeze-client-adapter-data-service-odata.metadata.json +1 -0
- package/adapter-data-service-odata/package.json +13 -0
- package/adapter-data-service-webapi/{index.d.ts → breeze-client-adapter-data-service-webapi.d.ts} +0 -1
- package/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.metadata.json +1 -0
- package/adapter-data-service-webapi/package.json +13 -0
- package/adapter-model-library-backing-store/{index.d.ts → breeze-client-adapter-model-library-backing-store.d.ts} +0 -1
- package/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.metadata.json +1 -0
- package/adapter-model-library-backing-store/package.json +13 -0
- package/adapter-model-library-ko/{index.d.ts → breeze-client-adapter-model-library-ko.d.ts} +0 -1
- package/adapter-model-library-ko/breeze-client-adapter-model-library-ko.metadata.json +1 -0
- package/adapter-model-library-ko/package.json +13 -0
- package/adapter-uri-builder-json/{index.d.ts → breeze-client-adapter-uri-builder-json.d.ts} +0 -1
- package/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.metadata.json +1 -0
- package/adapter-uri-builder-json/package.json +13 -0
- package/adapter-uri-builder-odata/{index.d.ts → breeze-client-adapter-uri-builder-odata.d.ts} +0 -1
- package/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.metadata.json +1 -0
- package/adapter-uri-builder-odata/package.json +13 -0
- package/breeze-client.d.ts +8 -0
- package/breeze-client.metadata.json +1 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.js +190 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-angularjs.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.js +190 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-fetch.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.js +195 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-httpclient.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.js +115 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-jquery.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.js +92 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-ajax-post.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.js +747 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +16 -0
- package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js +333 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +16 -0
- package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.js +280 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-model-library-backing-store.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.js +252 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-model-library-ko.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.js +96 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-uri-builder-json.umd.min.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.js +262 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.js.map +1 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js +2 -0
- package/bundles/breeze-client-adapter-uri-builder-odata.umd.min.js.map +1 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.js +258 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.js.map +1 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js +2 -0
- package/bundles/breeze-client-mixin-get-entity-graph.umd.min.js.map +1 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.js +579 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.js.map +1 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.min.js +16 -0
- package/bundles/breeze-client-mixin-save-queuing.umd.min.js.map +1 -0
- package/bundles/breeze-client.umd.js +14234 -0
- package/bundles/breeze-client.umd.js.map +1 -0
- package/bundles/breeze-client.umd.min.js +16 -0
- package/bundles/breeze-client.umd.min.js.map +1 -0
- package/esm2015/adapter-ajax-angularjs/adapter-ajax-angularjs.js +130 -0
- package/esm2015/adapter-ajax-angularjs/adapter-core.js +49 -0
- package/esm2015/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
- package/esm2015/adapter-ajax-fetch/adapter-ajax-fetch.js +130 -0
- package/esm2015/adapter-ajax-fetch/adapter-core.js +49 -0
- package/esm2015/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
- package/esm2015/adapter-ajax-httpclient/adapter-ajax-httpclient.js +137 -0
- package/esm2015/adapter-ajax-httpclient/adapter-core.js +49 -0
- package/esm2015/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
- package/esm2015/adapter-ajax-jquery/adapter-ajax-jquery.js +103 -0
- package/esm2015/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
- package/esm2015/adapter-ajax-post/adapter-ajax-post.js +77 -0
- package/esm2015/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
- package/esm2015/adapter-data-service-odata/adapter-core.js +49 -0
- package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +463 -0
- package/esm2015/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
- package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +100 -0
- package/esm2015/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
- package/esm2015/adapter-model-library-backing-store/adapter-model-library-backing-store.js +268 -0
- package/esm2015/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
- package/esm2015/adapter-model-library-ko/adapter-model-library-ko.js +240 -0
- package/esm2015/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
- package/esm2015/adapter-uri-builder-json/adapter-core.js +49 -0
- package/esm2015/adapter-uri-builder-json/adapter-uri-builder-json.js +36 -0
- package/esm2015/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
- package/esm2015/adapter-uri-builder-odata/adapter-core.js +49 -0
- package/esm2015/adapter-uri-builder-odata/adapter-uri-builder-odata.js +192 -0
- package/esm2015/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
- package/esm2015/breeze-client.js +9 -0
- package/esm2015/index.js +2 -0
- package/esm2015/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
- package/esm2015/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
- package/esm2015/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
- package/esm2015/mixin-save-queuing/mixin-save-queuing.js +400 -0
- package/esm2015/src/abstract-data-service-adapter.js +327 -0
- package/esm2015/src/array.js +4 -0
- package/esm2015/src/assert-param.js +312 -0
- package/esm2015/src/breeze.js +85 -0
- package/esm2015/src/complex-array.js +119 -0
- package/esm2015/src/config.js +223 -0
- package/esm2015/src/core.js +714 -0
- package/esm2015/src/csdl-metadata-parser.js +385 -0
- package/esm2015/src/data-service.js +203 -0
- package/esm2015/src/data-type.js +506 -0
- package/esm2015/src/default-property-interceptor.js +460 -0
- package/{esm2022/src/entity-action.mjs → esm2015/src/entity-action.js} +25 -25
- package/esm2015/src/entity-aspect.js +804 -0
- package/esm2015/src/entity-group.js +187 -0
- package/esm2015/src/entity-key.js +116 -0
- package/esm2015/src/entity-manager.js +2094 -0
- package/esm2015/src/entity-metadata.js +2109 -0
- package/esm2015/src/entity-query.js +1015 -0
- package/esm2015/src/entity-state.js +107 -0
- package/esm2015/src/enum.js +141 -0
- package/esm2015/src/event.js +256 -0
- package/esm2015/src/interface-registry.js +41 -0
- package/esm2015/src/key-generator.js +108 -0
- package/esm2015/src/local-query-comparison-options.js +65 -0
- package/esm2015/src/mapping-context.js +411 -0
- package/esm2015/src/naming-convention.js +88 -0
- package/esm2015/src/observable-array.js +185 -0
- package/esm2015/src/predicate.js +1242 -0
- package/esm2015/src/primitive-array.js +87 -0
- package/esm2015/src/query-options.js +152 -0
- package/esm2015/src/relation-array.js +175 -0
- package/esm2015/src/save-options.js +41 -0
- package/esm2015/src/unattached-children-map.js +58 -0
- package/esm2015/src/validate.js +991 -0
- package/esm2015/src/validation-options.js +64 -0
- package/esm5/adapter-ajax-angularjs/adapter-ajax-angularjs.js +132 -0
- package/esm5/adapter-ajax-angularjs/adapter-core.js +49 -0
- package/esm5/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.js +5 -0
- package/esm5/adapter-ajax-fetch/adapter-ajax-fetch.js +132 -0
- package/esm5/adapter-ajax-fetch/adapter-core.js +49 -0
- package/esm5/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.js +5 -0
- package/esm5/adapter-ajax-httpclient/adapter-ajax-httpclient.js +139 -0
- package/esm5/adapter-ajax-httpclient/adapter-core.js +49 -0
- package/esm5/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.js +5 -0
- package/esm5/adapter-ajax-jquery/adapter-ajax-jquery.js +105 -0
- package/esm5/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.js +5 -0
- package/esm5/adapter-ajax-post/adapter-ajax-post.js +81 -0
- package/esm5/adapter-ajax-post/breeze-client-adapter-ajax-post.js +5 -0
- package/esm5/adapter-data-service-odata/adapter-core.js +49 -0
- package/{esm2022/adapter-data-service-odata/adapter-data-service-odata.mjs → esm5/adapter-data-service-odata/adapter-data-service-odata.js} +147 -138
- package/esm5/adapter-data-service-odata/breeze-client-adapter-data-service-odata.js +5 -0
- package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +105 -0
- package/esm5/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.js +5 -0
- package/esm5/adapter-model-library-backing-store/adapter-model-library-backing-store.js +270 -0
- package/esm5/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.js +5 -0
- package/esm5/adapter-model-library-ko/adapter-model-library-ko.js +242 -0
- package/esm5/adapter-model-library-ko/breeze-client-adapter-model-library-ko.js +5 -0
- package/esm5/adapter-uri-builder-json/adapter-core.js +49 -0
- package/esm5/adapter-uri-builder-json/adapter-uri-builder-json.js +38 -0
- package/esm5/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.js +5 -0
- package/esm5/adapter-uri-builder-odata/adapter-core.js +49 -0
- package/esm5/adapter-uri-builder-odata/adapter-uri-builder-odata.js +197 -0
- package/esm5/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.js +5 -0
- package/esm5/breeze-client.js +9 -0
- package/esm5/index.js +2 -0
- package/esm5/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.js +5 -0
- package/esm5/mixin-get-entity-graph/mixin-get-entity-graph.js +269 -0
- package/esm5/mixin-save-queuing/breeze-client-mixin-save-queuing.js +5 -0
- package/esm5/mixin-save-queuing/mixin-save-queuing.js +412 -0
- package/esm5/src/abstract-data-service-adapter.js +333 -0
- package/esm5/src/array.js +4 -0
- package/esm5/src/assert-param.js +317 -0
- package/esm5/src/breeze.js +85 -0
- package/esm5/src/complex-array.js +119 -0
- package/esm5/src/config.js +228 -0
- package/esm5/src/core.js +722 -0
- package/esm5/src/csdl-metadata-parser.js +385 -0
- package/esm5/src/data-service.js +207 -0
- package/esm5/src/data-type.js +513 -0
- package/esm5/src/default-property-interceptor.js +460 -0
- package/esm5/src/entity-action.js +52 -0
- package/esm5/src/entity-aspect.js +810 -0
- package/esm5/src/entity-group.js +189 -0
- package/esm5/src/entity-key.js +118 -0
- package/esm5/src/entity-manager.js +2112 -0
- package/esm5/src/entity-metadata.js +2144 -0
- package/esm5/src/entity-query.js +1042 -0
- package/esm5/src/entity-state.js +114 -0
- package/esm5/src/enum.js +144 -0
- package/esm5/src/event.js +259 -0
- package/esm5/src/interface-registry.js +43 -0
- package/esm5/src/key-generator.js +111 -0
- package/esm5/src/local-query-comparison-options.js +67 -0
- package/esm5/src/mapping-context.js +413 -0
- package/esm5/src/naming-convention.js +90 -0
- package/esm5/src/observable-array.js +201 -0
- package/esm5/src/predicate.js +1307 -0
- package/esm5/src/primitive-array.js +87 -0
- package/esm5/src/query-options.js +167 -0
- package/esm5/src/relation-array.js +175 -0
- package/esm5/src/save-options.js +43 -0
- package/esm5/src/unattached-children-map.js +60 -0
- package/{esm2022/src/validate.mjs → esm5/src/validate.js} +110 -116
- package/esm5/src/validation-options.js +66 -0
- package/{fesm2022/breeze-client-adapter-ajax-angularjs.mjs → fesm2015/breeze-client-adapter-ajax-angularjs.js} +1 -6
- package/fesm2015/breeze-client-adapter-ajax-angularjs.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-fetch.mjs → fesm2015/breeze-client-adapter-ajax-fetch.js} +4 -9
- package/fesm2015/breeze-client-adapter-ajax-fetch.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-httpclient.mjs → fesm2015/breeze-client-adapter-ajax-httpclient.js} +4 -6
- package/fesm2015/breeze-client-adapter-ajax-httpclient.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-jquery.mjs → fesm2015/breeze-client-adapter-ajax-jquery.js} +2 -6
- package/fesm2015/breeze-client-adapter-ajax-jquery.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-ajax-post.mjs → fesm2015/breeze-client-adapter-ajax-post.js} +1 -1
- package/fesm2015/breeze-client-adapter-ajax-post.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-data-service-odata.mjs → fesm2015/breeze-client-adapter-data-service-odata.js} +69 -68
- package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → fesm2015/breeze-client-adapter-data-service-webapi.js} +30 -30
- package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-model-library-backing-store.mjs → fesm2015/breeze-client-adapter-model-library-backing-store.js} +13 -14
- package/fesm2015/breeze-client-adapter-model-library-backing-store.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-model-library-ko.mjs → fesm2015/breeze-client-adapter-model-library-ko.js} +13 -14
- package/fesm2015/breeze-client-adapter-model-library-ko.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-uri-builder-json.mjs → fesm2015/breeze-client-adapter-uri-builder-json.js} +8 -9
- package/fesm2015/breeze-client-adapter-uri-builder-json.js.map +1 -0
- package/{fesm2022/breeze-client-adapter-uri-builder-odata.mjs → fesm2015/breeze-client-adapter-uri-builder-odata.js} +86 -86
- package/fesm2015/breeze-client-adapter-uri-builder-odata.js.map +1 -0
- package/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → fesm2015/breeze-client-mixin-get-entity-graph.js} +1 -1
- package/fesm2015/breeze-client-mixin-get-entity-graph.js.map +1 -0
- package/{fesm2022/breeze-client-mixin-save-queuing.mjs → fesm2015/breeze-client-mixin-save-queuing.js} +2 -23
- package/fesm2015/breeze-client-mixin-save-queuing.js.map +1 -0
- package/{fesm2022/breeze-client.mjs → fesm2015/breeze-client.js} +1543 -2042
- package/fesm2015/breeze-client.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-angularjs.js +186 -0
- package/fesm5/breeze-client-adapter-ajax-angularjs.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-fetch.js +186 -0
- package/fesm5/breeze-client-adapter-ajax-fetch.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-httpclient.js +193 -0
- package/fesm5/breeze-client-adapter-ajax-httpclient.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-jquery.js +111 -0
- package/fesm5/breeze-client-adapter-ajax-jquery.js.map +1 -0
- package/fesm5/breeze-client-adapter-ajax-post.js +86 -0
- package/fesm5/breeze-client-adapter-ajax-post.js.map +1 -0
- package/fesm5/breeze-client-adapter-data-service-odata.js +523 -0
- package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -0
- package/fesm5/breeze-client-adapter-data-service-webapi.js +111 -0
- package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -0
- package/fesm5/breeze-client-adapter-model-library-backing-store.js +276 -0
- package/fesm5/breeze-client-adapter-model-library-backing-store.js.map +1 -0
- package/fesm5/breeze-client-adapter-model-library-ko.js +248 -0
- package/fesm5/breeze-client-adapter-model-library-ko.js.map +1 -0
- package/fesm5/breeze-client-adapter-uri-builder-json.js +92 -0
- package/fesm5/breeze-client-adapter-uri-builder-json.js.map +1 -0
- package/fesm5/breeze-client-adapter-uri-builder-odata.js +250 -0
- package/fesm5/breeze-client-adapter-uri-builder-odata.js.map +1 -0
- package/fesm5/breeze-client-mixin-get-entity-graph.js +254 -0
- package/fesm5/breeze-client-mixin-get-entity-graph.js.map +1 -0
- package/fesm5/breeze-client-mixin-save-queuing.js +356 -0
- package/fesm5/breeze-client-mixin-save-queuing.js.map +1 -0
- package/fesm5/breeze-client.js +13956 -0
- package/fesm5/breeze-client.js.map +1 -0
- package/mixin-get-entity-graph/{index.d.ts → breeze-client-mixin-get-entity-graph.d.ts} +0 -1
- package/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.metadata.json +1 -0
- package/mixin-get-entity-graph/package.json +13 -0
- package/mixin-save-queuing/{index.d.ts → breeze-client-mixin-save-queuing.d.ts} +0 -1
- package/mixin-save-queuing/breeze-client-mixin-save-queuing.metadata.json +1 -0
- package/mixin-save-queuing/package.json +13 -0
- package/package.json +12 -94
- package/src/config.d.ts +1 -1
- package/src/core.d.ts +1 -1
- package/src/entity-aspect.d.ts +1 -1
- package/src/entity-metadata.d.ts +6 -8
- package/src/entity-query.d.ts +1 -1
- package/esm2022/adapter-ajax-angularjs/adapter-ajax-angularjs.mjs +0 -135
- package/esm2022/adapter-ajax-angularjs/adapter-core.mjs +0 -49
- package/esm2022/adapter-ajax-angularjs/breeze-client-adapter-ajax-angularjs.mjs +0 -5
- package/esm2022/adapter-ajax-fetch/adapter-ajax-fetch.mjs +0 -135
- package/esm2022/adapter-ajax-fetch/adapter-core.mjs +0 -49
- package/esm2022/adapter-ajax-fetch/breeze-client-adapter-ajax-fetch.mjs +0 -5
- package/esm2022/adapter-ajax-httpclient/adapter-ajax-httpclient.mjs +0 -139
- package/esm2022/adapter-ajax-httpclient/adapter-core.mjs +0 -49
- package/esm2022/adapter-ajax-httpclient/breeze-client-adapter-ajax-httpclient.mjs +0 -5
- package/esm2022/adapter-ajax-jquery/adapter-ajax-jquery.mjs +0 -107
- package/esm2022/adapter-ajax-jquery/breeze-client-adapter-ajax-jquery.mjs +0 -5
- package/esm2022/adapter-ajax-post/adapter-ajax-post.mjs +0 -77
- package/esm2022/adapter-ajax-post/breeze-client-adapter-ajax-post.mjs +0 -5
- package/esm2022/adapter-data-service-odata/adapter-core.mjs +0 -49
- package/esm2022/adapter-data-service-odata/breeze-client-adapter-data-service-odata.mjs +0 -5
- package/esm2022/adapter-data-service-webapi/adapter-data-service-webapi.mjs +0 -100
- package/esm2022/adapter-data-service-webapi/breeze-client-adapter-data-service-webapi.mjs +0 -5
- package/esm2022/adapter-model-library-backing-store/adapter-model-library-backing-store.mjs +0 -269
- package/esm2022/adapter-model-library-backing-store/breeze-client-adapter-model-library-backing-store.mjs +0 -5
- package/esm2022/adapter-model-library-ko/adapter-model-library-ko.mjs +0 -241
- package/esm2022/adapter-model-library-ko/breeze-client-adapter-model-library-ko.mjs +0 -5
- package/esm2022/adapter-uri-builder-json/adapter-core.mjs +0 -49
- package/esm2022/adapter-uri-builder-json/adapter-uri-builder-json.mjs +0 -37
- package/esm2022/adapter-uri-builder-json/breeze-client-adapter-uri-builder-json.mjs +0 -5
- package/esm2022/adapter-uri-builder-odata/adapter-core.mjs +0 -49
- package/esm2022/adapter-uri-builder-odata/adapter-uri-builder-odata.mjs +0 -191
- package/esm2022/adapter-uri-builder-odata/breeze-client-adapter-uri-builder-odata.mjs +0 -5
- package/esm2022/breeze-client.mjs +0 -5
- package/esm2022/index.mjs +0 -2
- package/esm2022/mixin-get-entity-graph/breeze-client-mixin-get-entity-graph.mjs +0 -5
- package/esm2022/mixin-get-entity-graph/mixin-get-entity-graph.mjs +0 -269
- package/esm2022/mixin-save-queuing/breeze-client-mixin-save-queuing.mjs +0 -5
- package/esm2022/mixin-save-queuing/mixin-save-queuing.mjs +0 -421
- package/esm2022/src/abstract-data-service-adapter.mjs +0 -325
- package/esm2022/src/array.mjs +0 -4
- package/esm2022/src/assert-param.mjs +0 -330
- package/esm2022/src/breeze.mjs +0 -85
- package/esm2022/src/complex-array.mjs +0 -117
- package/esm2022/src/config.mjs +0 -232
- package/esm2022/src/core.mjs +0 -712
- package/esm2022/src/csdl-metadata-parser.mjs +0 -385
- package/esm2022/src/data-service.mjs +0 -239
- package/esm2022/src/data-type.mjs +0 -510
- package/esm2022/src/default-property-interceptor.mjs +0 -460
- package/esm2022/src/entity-aspect.mjs +0 -897
- package/esm2022/src/entity-group.mjs +0 -192
- package/esm2022/src/entity-key.mjs +0 -127
- package/esm2022/src/entity-manager.mjs +0 -2183
- package/esm2022/src/entity-metadata.mjs +0 -2242
- package/esm2022/src/entity-query.mjs +0 -1024
- package/esm2022/src/entity-state.mjs +0 -107
- package/esm2022/src/enum.mjs +0 -143
- package/esm2022/src/event.mjs +0 -264
- package/esm2022/src/interface-registry.mjs +0 -39
- package/esm2022/src/key-generator.mjs +0 -110
- package/esm2022/src/local-query-comparison-options.mjs +0 -75
- package/esm2022/src/mapping-context.mjs +0 -422
- package/esm2022/src/naming-convention.mjs +0 -96
- package/esm2022/src/observable-array.mjs +0 -183
- package/esm2022/src/predicate.mjs +0 -1259
- package/esm2022/src/primitive-array.mjs +0 -85
- package/esm2022/src/query-options.mjs +0 -160
- package/esm2022/src/relation-array.mjs +0 -173
- package/esm2022/src/save-options.mjs +0 -51
- package/esm2022/src/unattached-children-map.mjs +0 -56
- package/esm2022/src/validation-options.mjs +0 -78
- package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-jquery.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-post.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-data-service-odata.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-data-service-webapi.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-model-library-ko.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-uri-builder-json.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-uri-builder-odata.mjs.map +0 -1
- package/fesm2022/breeze-client-mixin-get-entity-graph.mjs.map +0 -1
- package/fesm2022/breeze-client-mixin-save-queuing.mjs.map +0 -1
- package/fesm2022/breeze-client.mjs.map +0 -1
|
@@ -47,8 +47,6 @@ Note that we have Error['x'] = ... in some places in the code to prevent Terser
|
|
|
47
47
|
@dynamic
|
|
48
48
|
*/
|
|
49
49
|
class BreezeEnum {
|
|
50
|
-
/** @hidden @internal */
|
|
51
|
-
static _resolvedNamesAndSymbols;
|
|
52
50
|
/** */
|
|
53
51
|
constructor(propertiesObj) {
|
|
54
52
|
if (propertiesObj) {
|
|
@@ -144,14 +142,15 @@ class BreezeEnum {
|
|
|
144
142
|
/** See if this comment will make it into .d.ts */
|
|
145
143
|
let hasOwnProperty = uncurry(Object.prototype.hasOwnProperty);
|
|
146
144
|
let arraySlice = uncurry(Array.prototype.slice);
|
|
147
|
-
|
|
145
|
+
const ɵ0 = function () {
|
|
148
146
|
try {
|
|
149
147
|
return !!(Object.getPrototypeOf && Object.defineProperty({}, 'x', {}));
|
|
150
148
|
}
|
|
151
149
|
catch (e) {
|
|
152
150
|
return false;
|
|
153
151
|
}
|
|
154
|
-
}
|
|
152
|
+
};
|
|
153
|
+
let isES5Supported = ɵ0();
|
|
155
154
|
// iterate over object
|
|
156
155
|
function objectForEach(obj, kvFn) {
|
|
157
156
|
for (let key in obj) {
|
|
@@ -732,7 +731,7 @@ function isNumeric(n) {
|
|
|
732
731
|
}
|
|
733
732
|
// end of is Functions
|
|
734
733
|
// string functions
|
|
735
|
-
function stringStartsWith
|
|
734
|
+
function stringStartsWith(str, prefix) {
|
|
736
735
|
// returns true for empty string or null prefix
|
|
737
736
|
if ((!str))
|
|
738
737
|
return false;
|
|
@@ -740,7 +739,7 @@ function stringStartsWith$1(str, prefix) {
|
|
|
740
739
|
return true;
|
|
741
740
|
return str.indexOf(prefix, 0) === 0;
|
|
742
741
|
}
|
|
743
|
-
function stringEndsWith
|
|
742
|
+
function stringEndsWith(str, suffix) {
|
|
744
743
|
// returns true for empty string or null suffix
|
|
745
744
|
if ((!str))
|
|
746
745
|
return false;
|
|
@@ -830,8 +829,8 @@ const core = {
|
|
|
830
829
|
isNumeric: isNumeric,
|
|
831
830
|
identity: identity,
|
|
832
831
|
noop: noop,
|
|
833
|
-
stringStartsWith: stringStartsWith
|
|
834
|
-
stringEndsWith: stringEndsWith
|
|
832
|
+
stringStartsWith: stringStartsWith,
|
|
833
|
+
stringEndsWith: stringEndsWith,
|
|
835
834
|
formatString: formatString,
|
|
836
835
|
titleCase: titleCaseSpace,
|
|
837
836
|
toJson: toJson,
|
|
@@ -854,23 +853,19 @@ function isPrimitive(obj: any) {
|
|
|
854
853
|
|
|
855
854
|
/** @hidden @internal */
|
|
856
855
|
class Param {
|
|
857
|
-
// The %1 parameter
|
|
858
|
-
// is required
|
|
859
|
-
// must be a %2
|
|
860
|
-
// must be an instance of %2
|
|
861
|
-
// must be an instance of the %2 enumeration
|
|
862
|
-
// must have a %2 property
|
|
863
|
-
// must be an array where each element
|
|
864
|
-
// is optional or
|
|
865
|
-
v;
|
|
866
|
-
name;
|
|
867
|
-
defaultValue;
|
|
868
|
-
parent;
|
|
869
|
-
/** @hidden @internal */
|
|
870
|
-
_context;
|
|
871
|
-
/** @hidden @internal */
|
|
872
|
-
_contexts;
|
|
873
856
|
constructor(v, name) {
|
|
857
|
+
/** @hidden @internal */
|
|
858
|
+
this._applyOne = function (instance) {
|
|
859
|
+
if (this.v !== undefined) {
|
|
860
|
+
instance[this.name] = this.v;
|
|
861
|
+
}
|
|
862
|
+
else {
|
|
863
|
+
if (this.defaultValue !== undefined) {
|
|
864
|
+
instance[this.name] = this.defaultValue;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
};
|
|
868
|
+
this.MESSAGE_PREFIX = "The '%1' parameter ";
|
|
874
869
|
this.v = v;
|
|
875
870
|
this.name = name;
|
|
876
871
|
this._contexts = [null];
|
|
@@ -1016,18 +1011,6 @@ class Param {
|
|
|
1016
1011
|
}
|
|
1017
1012
|
}
|
|
1018
1013
|
}
|
|
1019
|
-
/** @hidden @internal */
|
|
1020
|
-
_applyOne = function (instance) {
|
|
1021
|
-
if (this.v !== undefined) {
|
|
1022
|
-
instance[this.name] = this.v;
|
|
1023
|
-
}
|
|
1024
|
-
else {
|
|
1025
|
-
if (this.defaultValue !== undefined) {
|
|
1026
|
-
instance[this.name] = this.defaultValue;
|
|
1027
|
-
}
|
|
1028
|
-
}
|
|
1029
|
-
};
|
|
1030
|
-
MESSAGE_PREFIX = "The '%1' parameter ";
|
|
1031
1014
|
}
|
|
1032
1015
|
/** @hidden @internal */
|
|
1033
1016
|
let assertParam = function (v, name) {
|
|
@@ -1156,8 +1139,6 @@ function throwConfigError(instance, message) {
|
|
|
1156
1139
|
throw new Error(core.formatString("Error configuring an instance of '%1'. %2", (instance && instance._$typeName) || "object", message));
|
|
1157
1140
|
}
|
|
1158
1141
|
class ConfigParam {
|
|
1159
|
-
config;
|
|
1160
|
-
params;
|
|
1161
1142
|
constructor(config) {
|
|
1162
1143
|
if (typeof (config) !== "object") {
|
|
1163
1144
|
throw new Error("Configuration parameter should be an object, instead it is a: " + typeof (config));
|
|
@@ -1213,18 +1194,6 @@ Class to support basic event publication and subscription semantics.
|
|
|
1213
1194
|
@dynamic
|
|
1214
1195
|
**/
|
|
1215
1196
|
class BreezeEvent {
|
|
1216
|
-
/** @hidden @internal */
|
|
1217
|
-
static __eventNameMap = {};
|
|
1218
|
-
/** @hidden @internal */
|
|
1219
|
-
static __nextUnsubKey = 1;
|
|
1220
|
-
/** The name of this Event */
|
|
1221
|
-
name;
|
|
1222
|
-
/** The object doing the publication. i.e. the object to which this event is attached. */
|
|
1223
|
-
publisher;
|
|
1224
|
-
/** @hidden @internal */
|
|
1225
|
-
_subscribers;
|
|
1226
|
-
/** @hidden @internal */
|
|
1227
|
-
_defaultErrorCallback;
|
|
1228
1197
|
/**
|
|
1229
1198
|
Constructor for an Event
|
|
1230
1199
|
> salaryEvent = new BreezeEvent("salaryEvent", person);
|
|
@@ -1234,6 +1203,36 @@ class BreezeEvent {
|
|
|
1234
1203
|
If omitted then subscriber notification failures will be ignored.
|
|
1235
1204
|
**/
|
|
1236
1205
|
constructor(name, publisher, defaultErrorCallback) {
|
|
1206
|
+
/**
|
|
1207
|
+
Unsubscribe from this event.
|
|
1208
|
+
> // Assume order is a preexisting 'order' entity
|
|
1209
|
+
> let token = order.entityAspect.propertyChanged.subscribe(function (pcEvent) {
|
|
1210
|
+
> // do something
|
|
1211
|
+
> });
|
|
1212
|
+
> // sometime later
|
|
1213
|
+
> order.entityAspect.propertyChanged.unsubscribe(token);
|
|
1214
|
+
@param unsubKey - The value returned from the 'subscribe' method may be used to unsubscribe here.
|
|
1215
|
+
@return Whether unsubscription occured. This will return false if already unsubscribed or if the key simply
|
|
1216
|
+
cannot be found.
|
|
1217
|
+
**/
|
|
1218
|
+
this.unsubscribe = function (unsubKey) {
|
|
1219
|
+
if (!this._subscribers)
|
|
1220
|
+
return false;
|
|
1221
|
+
let subs = this._subscribers;
|
|
1222
|
+
let ix = core.arrayIndexOf(subs, function (s) {
|
|
1223
|
+
return s.unsubKey === unsubKey;
|
|
1224
|
+
});
|
|
1225
|
+
if (ix !== -1) {
|
|
1226
|
+
subs.splice(ix, 1);
|
|
1227
|
+
if (subs.length === 0) {
|
|
1228
|
+
this._subscribers = null;
|
|
1229
|
+
}
|
|
1230
|
+
return true;
|
|
1231
|
+
}
|
|
1232
|
+
else {
|
|
1233
|
+
return false;
|
|
1234
|
+
}
|
|
1235
|
+
};
|
|
1237
1236
|
assertParam(name, "eventName").isNonEmptyString().check();
|
|
1238
1237
|
assertParam(publisher, "publisher").isObject().check();
|
|
1239
1238
|
this.name = name;
|
|
@@ -1318,36 +1317,6 @@ class BreezeEvent {
|
|
|
1318
1317
|
++BreezeEvent.__nextUnsubKey;
|
|
1319
1318
|
return unsubKey;
|
|
1320
1319
|
}
|
|
1321
|
-
/**
|
|
1322
|
-
Unsubscribe from this event.
|
|
1323
|
-
> // Assume order is a preexisting 'order' entity
|
|
1324
|
-
> let token = order.entityAspect.propertyChanged.subscribe(function (pcEvent) {
|
|
1325
|
-
> // do something
|
|
1326
|
-
> });
|
|
1327
|
-
> // sometime later
|
|
1328
|
-
> order.entityAspect.propertyChanged.unsubscribe(token);
|
|
1329
|
-
@param unsubKey - The value returned from the 'subscribe' method may be used to unsubscribe here.
|
|
1330
|
-
@return Whether unsubscription occured. This will return false if already unsubscribed or if the key simply
|
|
1331
|
-
cannot be found.
|
|
1332
|
-
**/
|
|
1333
|
-
unsubscribe = function (unsubKey) {
|
|
1334
|
-
if (!this._subscribers)
|
|
1335
|
-
return false;
|
|
1336
|
-
let subs = this._subscribers;
|
|
1337
|
-
let ix = core.arrayIndexOf(subs, function (s) {
|
|
1338
|
-
return s.unsubKey === unsubKey;
|
|
1339
|
-
});
|
|
1340
|
-
if (ix !== -1) {
|
|
1341
|
-
subs.splice(ix, 1);
|
|
1342
|
-
if (subs.length === 0) {
|
|
1343
|
-
this._subscribers = null;
|
|
1344
|
-
}
|
|
1345
|
-
return true;
|
|
1346
|
-
}
|
|
1347
|
-
else {
|
|
1348
|
-
return false;
|
|
1349
|
-
}
|
|
1350
|
-
};
|
|
1351
1320
|
/** remove all subscribers */
|
|
1352
1321
|
clear() {
|
|
1353
1322
|
this._subscribers = null;
|
|
@@ -1412,42 +1381,42 @@ class BreezeEvent {
|
|
|
1412
1381
|
// return ctor._isEnabled(getFullEventName(eventName), obj);
|
|
1413
1382
|
return BreezeEvent._isEnabled(eventName, 3);
|
|
1414
1383
|
}
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1384
|
+
}
|
|
1385
|
+
/** @hidden @internal */
|
|
1386
|
+
BreezeEvent.__eventNameMap = {};
|
|
1387
|
+
/** @hidden @internal */
|
|
1388
|
+
BreezeEvent.__nextUnsubKey = 1;
|
|
1389
|
+
/** @hidden @internal */
|
|
1390
|
+
BreezeEvent._isEnabled = function (eventName, obj) {
|
|
1391
|
+
let isEnabled = null;
|
|
1392
|
+
let ob = obj;
|
|
1393
|
+
let eventMap = ob._$eventMap;
|
|
1394
|
+
if (eventMap) {
|
|
1395
|
+
isEnabled = eventMap[eventName];
|
|
1396
|
+
}
|
|
1397
|
+
if (isEnabled != null) {
|
|
1398
|
+
if (typeof isEnabled === 'function') {
|
|
1399
|
+
return !!isEnabled(obj);
|
|
1422
1400
|
}
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1401
|
+
else {
|
|
1402
|
+
return !!isEnabled;
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
else {
|
|
1406
|
+
let parent = ob._getEventParent && ob._getEventParent();
|
|
1407
|
+
if (parent) {
|
|
1408
|
+
return !!this._isEnabled(eventName, parent);
|
|
1430
1409
|
}
|
|
1431
1410
|
else {
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
return !!this._isEnabled(eventName, parent);
|
|
1435
|
-
}
|
|
1436
|
-
else {
|
|
1437
|
-
// default if not explicitly disabled.
|
|
1438
|
-
return true;
|
|
1439
|
-
}
|
|
1411
|
+
// default if not explicitly disabled.
|
|
1412
|
+
return true;
|
|
1440
1413
|
}
|
|
1441
|
-
}
|
|
1442
|
-
}
|
|
1414
|
+
}
|
|
1415
|
+
};
|
|
1443
1416
|
// legacy support - deliberately not typed
|
|
1444
1417
|
core.Event = BreezeEvent;
|
|
1445
1418
|
|
|
1446
1419
|
class InterfaceDef {
|
|
1447
|
-
name;
|
|
1448
|
-
defaultInstance;
|
|
1449
|
-
/** @hidden @internal */
|
|
1450
|
-
_implMap;
|
|
1451
1420
|
constructor(name) {
|
|
1452
1421
|
this.name = name;
|
|
1453
1422
|
this.defaultInstance = undefined;
|
|
@@ -1473,23 +1442,18 @@ class InterfaceDef {
|
|
|
1473
1442
|
}
|
|
1474
1443
|
}
|
|
1475
1444
|
class BreezeConfig {
|
|
1476
|
-
functionRegistry = {};
|
|
1477
|
-
typeRegistry = {};
|
|
1478
|
-
objectRegistry = {};
|
|
1479
|
-
interfaceInitialized;
|
|
1480
|
-
stringifyPad = '';
|
|
1481
|
-
/** whether to prohibit eval() and Function() in breeze code */
|
|
1482
|
-
noEval;
|
|
1483
|
-
/** @hidden @internal */
|
|
1484
|
-
_interfaceRegistry; // will be set in adapter-interfaces. untyped here to avoid circularity issues.
|
|
1485
1445
|
constructor() {
|
|
1446
|
+
this.functionRegistry = {};
|
|
1447
|
+
this.typeRegistry = {};
|
|
1448
|
+
this.objectRegistry = {};
|
|
1449
|
+
this.stringifyPad = '';
|
|
1486
1450
|
this.interfaceInitialized = new BreezeEvent("interfaceInitialized", this);
|
|
1487
1451
|
if (this.noEval === undefined) {
|
|
1488
1452
|
try {
|
|
1489
1453
|
Error['x'] = Function('');
|
|
1490
1454
|
this.noEval = false; // eval succeeded
|
|
1491
1455
|
}
|
|
1492
|
-
catch {
|
|
1456
|
+
catch (_a) {
|
|
1493
1457
|
this.noEval = true; // eval failed, probably due to CSP
|
|
1494
1458
|
}
|
|
1495
1459
|
}
|
|
@@ -1687,24 +1651,6 @@ anytime a MetadataStore.fetchMetadata call occurs with a new dataService ( or se
|
|
|
1687
1651
|
|
|
1688
1652
|
**/
|
|
1689
1653
|
class DataService {
|
|
1690
|
-
/** @hidden @internal */
|
|
1691
|
-
_$typeName; // actually put on prototype.
|
|
1692
|
-
/** The serviceName for this DataService. __Read Only__ **/
|
|
1693
|
-
serviceName;
|
|
1694
|
-
/** The adapter name for the [[IDataServiceAdapter]] to be used with this service. __Read Only__ **/
|
|
1695
|
-
adapterName;
|
|
1696
|
-
/** The [[IDataServiceAdapter]] implementation instance associated with this EntityManager. __Read Only__ **/
|
|
1697
|
-
adapterInstance;
|
|
1698
|
-
/** The adapter name for the [[IUriBuilderAdapter]] to be used with this service. __Read Only__ **/
|
|
1699
|
-
uriBuilderName;
|
|
1700
|
-
/** The [[IUriBuilderAdapter]] implementation instance associated with this EntityManager. __Read Only__ **/
|
|
1701
|
-
uriBuilder;
|
|
1702
|
-
/** Whether the server can provide metadata for this service. __Read Only__ **/
|
|
1703
|
-
hasServerMetadata;
|
|
1704
|
-
/** The [[JsonResultsAdapter]] used to process the results of any query against this DataService. __Read Only__ **/
|
|
1705
|
-
jsonResultsAdapter;
|
|
1706
|
-
/** Whether to use JSONP when performing a 'GET' request against this service. __Read Only__ **/
|
|
1707
|
-
useJsonp;
|
|
1708
1654
|
/** DataService constructor
|
|
1709
1655
|
> var dataService = new DataService({
|
|
1710
1656
|
> serviceName: altServiceName,
|
|
@@ -1722,7 +1668,7 @@ class DataService {
|
|
|
1722
1668
|
@param config - A configuration object.
|
|
1723
1669
|
**/
|
|
1724
1670
|
constructor(config) {
|
|
1725
|
-
updateWithConfig
|
|
1671
|
+
updateWithConfig(this, config);
|
|
1726
1672
|
}
|
|
1727
1673
|
/**
|
|
1728
1674
|
Returns a copy of this DataService with the specified properties applied.
|
|
@@ -1732,7 +1678,7 @@ class DataService {
|
|
|
1732
1678
|
if (!config)
|
|
1733
1679
|
return this;
|
|
1734
1680
|
let result = new DataService(this);
|
|
1735
|
-
return updateWithConfig
|
|
1681
|
+
return updateWithConfig(result, config);
|
|
1736
1682
|
}
|
|
1737
1683
|
static resolve(dataServices) {
|
|
1738
1684
|
// final defaults
|
|
@@ -1803,7 +1749,7 @@ class DataService {
|
|
|
1803
1749
|
}
|
|
1804
1750
|
}
|
|
1805
1751
|
DataService.prototype._$typeName = "DataService";
|
|
1806
|
-
function updateWithConfig
|
|
1752
|
+
function updateWithConfig(obj, dsConfig) {
|
|
1807
1753
|
if (dsConfig) {
|
|
1808
1754
|
assertConfig(dsConfig)
|
|
1809
1755
|
.whereParam("serviceName").isOptional()
|
|
@@ -1824,24 +1770,6 @@ A JsonResultsAdapter instance is used to provide custom extraction and parsing l
|
|
|
1824
1770
|
This facility makes it possible for breeze to talk to virtually any web service and return objects that will be first class 'breeze' citizens.
|
|
1825
1771
|
**/
|
|
1826
1772
|
class JsonResultsAdapter {
|
|
1827
|
-
/** @hidden @internal */
|
|
1828
|
-
_$typeName; // actually put on prototype.
|
|
1829
|
-
/** The name of this adapter. This name is used to uniquely identify and locate this instance when an 'exported' JsonResultsAdapter is later imported. */
|
|
1830
|
-
name;
|
|
1831
|
-
/** A Function that is called once per query operation to extract the 'payload' from any json received over the wire.
|
|
1832
|
-
This method has a default implementation which simply returns the "results" property from any json returned as a result of executing the query. */
|
|
1833
|
-
extractResults; // TODO - refine
|
|
1834
|
-
/** A function that is called once per save operation to extract the entities from any json received over the wire. Must return an array.
|
|
1835
|
-
This method has a default implementation which simply returns the "entities" property from any json returned as a result of executing the save. */
|
|
1836
|
-
extractSaveResults;
|
|
1837
|
-
/** A function that is called once per save operation to extract the key mappings from any json received over the wire. Must return an array.
|
|
1838
|
-
This method has a default implementation which simply returns the "keyMappings" property from any json returned as a result of executing the save. */
|
|
1839
|
-
extractKeyMappings;
|
|
1840
|
-
/** A function that is called once per save operation to extract any deleted keys from any json received over the wire. Must return an array.
|
|
1841
|
-
This method has a default implementation which is to simply returns the "deletedKeys" property from any json returned as a result of executing the save. */
|
|
1842
|
-
extractDeletedKeys; // TODO: refine
|
|
1843
|
-
/** A visitor method that will be called on each node of the returned payload. */
|
|
1844
|
-
visitNode;
|
|
1845
1773
|
/**
|
|
1846
1774
|
JsonResultsAdapter constructor
|
|
1847
1775
|
|
|
@@ -1914,16 +1842,17 @@ const INT32_MIN = -2147483648;
|
|
|
1914
1842
|
const INT32_MAX = 2147483647;
|
|
1915
1843
|
const BYTE_MIN = 0;
|
|
1916
1844
|
const BYTE_MAX = 255;
|
|
1845
|
+
const ɵ0$1 = function (context) {
|
|
1846
|
+
if (context.property) {
|
|
1847
|
+
return context.property.resolveProperty("displayName") || context.propertyName || context.property.name;
|
|
1848
|
+
}
|
|
1849
|
+
else {
|
|
1850
|
+
return "Value";
|
|
1851
|
+
}
|
|
1852
|
+
};
|
|
1917
1853
|
// add common props and methods for every validator 'context' here.
|
|
1918
1854
|
let rootContext = {
|
|
1919
|
-
displayName:
|
|
1920
|
-
if (context.property) {
|
|
1921
|
-
return context.property.resolveProperty("displayName") || context.propertyName || context.property.name;
|
|
1922
|
-
}
|
|
1923
|
-
else {
|
|
1924
|
-
return "Value";
|
|
1925
|
-
}
|
|
1926
|
-
}
|
|
1855
|
+
displayName: ɵ0$1
|
|
1927
1856
|
};
|
|
1928
1857
|
/**
|
|
1929
1858
|
Instances of the Validator class provide the logic to validate another object and provide a description of any errors
|
|
@@ -2061,13 +1990,6 @@ of additional properties that will be automatically added to this object if not
|
|
|
2061
1990
|
@dynamic
|
|
2062
1991
|
**/
|
|
2063
1992
|
class Validator {
|
|
2064
|
-
/** @hidden @internal */
|
|
2065
|
-
_$typeName; // on proto
|
|
2066
|
-
name;
|
|
2067
|
-
valFn;
|
|
2068
|
-
context;
|
|
2069
|
-
currentContext;
|
|
2070
|
-
_baseContext;
|
|
2071
1993
|
constructor(name, valFn, context) {
|
|
2072
1994
|
// _baseContext is what will get serialized
|
|
2073
1995
|
this._baseContext = context || {};
|
|
@@ -2216,491 +2138,491 @@ class Validator {
|
|
|
2216
2138
|
static registerFactory(validatorFactory, name) {
|
|
2217
2139
|
config.registerFunction(validatorFactory, "Validator." + name);
|
|
2218
2140
|
}
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
var countryValidator = new Validator("countryIsUS", valFn, { displayName: "Country" });
|
|
2229
|
-
Validator.messageTemplates.countryIsUS = "'%displayName%' must start with 'US'";
|
|
2230
|
-
// This will have a similar effect to this
|
|
2231
|
-
var countryValidator = new Validator("countryIsUS", valFn, {
|
|
2232
|
-
displayName: "Country",
|
|
2233
|
-
messageTemplate: "'%displayName%' must start with 'US'"
|
|
2234
|
-
});
|
|
2235
|
-
@property messageTemplates {Object}
|
|
2236
|
-
@static
|
|
2237
|
-
**/
|
|
2238
|
-
static messageTemplates = {
|
|
2239
|
-
bool: "'%displayName%' must be a 'true' or 'false' value",
|
|
2240
|
-
creditCard: "The %displayName% is not a valid credit card number",
|
|
2241
|
-
date: "'%displayName%' must be a date",
|
|
2242
|
-
duration: "'%displayName%' must be a ISO8601 duration string, such as 'P3H24M60S'",
|
|
2243
|
-
emailAddress: "The %displayName% '%value%' is not a valid email address",
|
|
2244
|
-
guid: "'%displayName%' must be a GUID",
|
|
2245
|
-
integer: "'%displayName%' must be an integer",
|
|
2246
|
-
integerRange: "'%displayName%' must be an integer between the values of %minValue% and %maxValue%",
|
|
2247
|
-
maxLength: "'%displayName%' must be a string with %maxLength% characters or less",
|
|
2248
|
-
number: "'%displayName%' must be a number",
|
|
2249
|
-
phone: "The %displayName% '%value%' is not a valid phone number",
|
|
2250
|
-
regularExpression: "The %displayName% '%value%' does not match '%expression%'",
|
|
2251
|
-
required: "'%displayName%' is required",
|
|
2252
|
-
string: "'%displayName%' must be a string",
|
|
2253
|
-
stringLength: "'%displayName%' must be a string with between %minLength% and %maxLength% characters",
|
|
2254
|
-
url: "The %displayName% '%value%' is not a valid url"
|
|
2255
|
-
};
|
|
2256
|
-
/**
|
|
2257
|
-
Returns a standard 'required value' Validator
|
|
2258
|
-
@example
|
|
2259
|
-
// Assume em1 is a preexisting EntityManager.
|
|
2260
|
-
var custType = em1.metadataStore.getEntityType("Customer");
|
|
2261
|
-
var regionProperty - custType.getProperty("Region");
|
|
2262
|
-
// Makes "Region" on Customer a required property.
|
|
2263
|
-
regionProperty.validators.push(Validator.required());
|
|
2264
|
-
// or to allow empty strings
|
|
2265
|
-
regionProperty.validators.push(Validator.required({ allowEmptyStrings: true }););
|
|
2266
|
-
@method required
|
|
2267
|
-
@static
|
|
2268
|
-
@param context {Object}
|
|
2269
|
-
@param [context.allowEmptyStrings] {Boolean} If this parameter is omitted or false then empty strings do NOT pass validation.
|
|
2270
|
-
@return {Validator} A new Validator
|
|
2271
|
-
**/
|
|
2272
|
-
static required = function (context) {
|
|
2273
|
-
let valFn = function (v, ctx) {
|
|
2274
|
-
if (typeof v === "string") {
|
|
2275
|
-
if (ctx && ctx.allowEmptyStrings)
|
|
2276
|
-
return true;
|
|
2277
|
-
return v.length > 0;
|
|
2278
|
-
}
|
|
2279
|
-
else {
|
|
2280
|
-
return v != null;
|
|
2281
|
-
}
|
|
2282
|
-
};
|
|
2283
|
-
return new Validator("required", valFn, context);
|
|
2141
|
+
}
|
|
2142
|
+
/**
|
|
2143
|
+
Map of standard error message templates keyed by validator name.
|
|
2144
|
+
You can add to or modify this object to customize the template used for any validation error message.
|
|
2145
|
+
@example
|
|
2146
|
+
// v is this function is the value to be validated, in this case a "country" string.
|
|
2147
|
+
var valFn = function (v) {
|
|
2148
|
+
if (v == null) return true;
|
|
2149
|
+
return (core.stringStartsWith(v, "US"));
|
|
2284
2150
|
};
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2151
|
+
var countryValidator = new Validator("countryIsUS", valFn, { displayName: "Country" });
|
|
2152
|
+
Validator.messageTemplates.countryIsUS = "'%displayName%' must start with 'US'";
|
|
2153
|
+
// This will have a similar effect to this
|
|
2154
|
+
var countryValidator = new Validator("countryIsUS", valFn, {
|
|
2155
|
+
displayName: "Country",
|
|
2156
|
+
messageTemplate: "'%displayName%' must start with 'US'"
|
|
2157
|
+
});
|
|
2158
|
+
@property messageTemplates {Object}
|
|
2159
|
+
@static
|
|
2160
|
+
**/
|
|
2161
|
+
Validator.messageTemplates = {
|
|
2162
|
+
bool: "'%displayName%' must be a 'true' or 'false' value",
|
|
2163
|
+
creditCard: "The %displayName% is not a valid credit card number",
|
|
2164
|
+
date: "'%displayName%' must be a date",
|
|
2165
|
+
duration: "'%displayName%' must be a ISO8601 duration string, such as 'P3H24M60S'",
|
|
2166
|
+
emailAddress: "The %displayName% '%value%' is not a valid email address",
|
|
2167
|
+
guid: "'%displayName%' must be a GUID",
|
|
2168
|
+
integer: "'%displayName%' must be an integer",
|
|
2169
|
+
integerRange: "'%displayName%' must be an integer between the values of %minValue% and %maxValue%",
|
|
2170
|
+
maxLength: "'%displayName%' must be a string with %maxLength% characters or less",
|
|
2171
|
+
number: "'%displayName%' must be a number",
|
|
2172
|
+
phone: "The %displayName% '%value%' is not a valid phone number",
|
|
2173
|
+
regularExpression: "The %displayName% '%value%' does not match '%expression%'",
|
|
2174
|
+
required: "'%displayName%' is required",
|
|
2175
|
+
string: "'%displayName%' must be a string",
|
|
2176
|
+
stringLength: "'%displayName%' must be a string with between %minLength% and %maxLength% characters",
|
|
2177
|
+
url: "The %displayName% '%value%' is not a valid url"
|
|
2178
|
+
};
|
|
2179
|
+
/**
|
|
2180
|
+
Returns a standard 'required value' Validator
|
|
2181
|
+
@example
|
|
2182
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2183
|
+
var custType = em1.metadataStore.getEntityType("Customer");
|
|
2184
|
+
var regionProperty - custType.getProperty("Region");
|
|
2185
|
+
// Makes "Region" on Customer a required property.
|
|
2186
|
+
regionProperty.validators.push(Validator.required());
|
|
2187
|
+
// or to allow empty strings
|
|
2188
|
+
regionProperty.validators.push(Validator.required({ allowEmptyStrings: true }););
|
|
2189
|
+
@method required
|
|
2190
|
+
@static
|
|
2191
|
+
@param context {Object}
|
|
2192
|
+
@param [context.allowEmptyStrings] {Boolean} If this parameter is omitted or false then empty strings do NOT pass validation.
|
|
2193
|
+
@return {Validator} A new Validator
|
|
2194
|
+
**/
|
|
2195
|
+
Validator.required = function (context) {
|
|
2196
|
+
let valFn = function (v, ctx) {
|
|
2197
|
+
if (typeof v === "string") {
|
|
2198
|
+
if (ctx && ctx.allowEmptyStrings)
|
|
2302
2199
|
return true;
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2200
|
+
return v.length > 0;
|
|
2201
|
+
}
|
|
2202
|
+
else {
|
|
2203
|
+
return v != null;
|
|
2204
|
+
}
|
|
2308
2205
|
};
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
return true;
|
|
2329
|
-
if (typeof (v) !== "string")
|
|
2330
|
-
return false;
|
|
2331
|
-
if (ctx.minLength != null && v.length < ctx.minLength)
|
|
2332
|
-
return false;
|
|
2333
|
-
if (ctx.maxLength != null && v.length > ctx.maxLength)
|
|
2334
|
-
return false;
|
|
2206
|
+
return new Validator("required", valFn, context);
|
|
2207
|
+
};
|
|
2208
|
+
/**
|
|
2209
|
+
Returns a standard maximum string length Validator; the maximum length must be specified
|
|
2210
|
+
@example
|
|
2211
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2212
|
+
var custType = em1.metadataStore.getEntityType("Customer");
|
|
2213
|
+
var regionProperty - custType.getProperty("Region");
|
|
2214
|
+
// Validates that the value of the Region property on Customer will be less than or equal to 5 characters.
|
|
2215
|
+
regionProperty.validators.push(Validator.maxLength( {maxLength: 5}));
|
|
2216
|
+
@method maxLength
|
|
2217
|
+
@static
|
|
2218
|
+
@param context {Object}
|
|
2219
|
+
@param context.maxLength {Integer}
|
|
2220
|
+
@return {Validator} A new Validator
|
|
2221
|
+
**/
|
|
2222
|
+
Validator.maxLength = function (context) {
|
|
2223
|
+
let valFn = function (v, ctx) {
|
|
2224
|
+
if (v == null)
|
|
2335
2225
|
return true;
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
/**
|
|
2340
|
-
Returns a standard string dataType Validator.
|
|
2341
|
-
@example
|
|
2342
|
-
// Assume em1 is a preexisting EntityManager.
|
|
2343
|
-
var custType = em1.metadataStore.getEntityType("Customer");
|
|
2344
|
-
var regionProperty - custType.getProperty("Region");
|
|
2345
|
-
// Validates that the value of the Region property on Customer is a string.
|
|
2346
|
-
regionProperty.validators.push(Validator.string());
|
|
2347
|
-
@method string
|
|
2348
|
-
@static
|
|
2349
|
-
@return {Validator} A new Validator
|
|
2350
|
-
**/
|
|
2351
|
-
static string = function () {
|
|
2352
|
-
let valFn = function (v) {
|
|
2353
|
-
if (v == null)
|
|
2354
|
-
return true;
|
|
2355
|
-
return (typeof v === "string");
|
|
2356
|
-
};
|
|
2357
|
-
return new Validator("string", valFn);
|
|
2358
|
-
};
|
|
2359
|
-
/**
|
|
2360
|
-
Returns a Guid data type Validator.
|
|
2361
|
-
@example
|
|
2362
|
-
// Assume em1 is a preexisting EntityManager.
|
|
2363
|
-
var custType = em1.metadataStore.getEntityType("Customer");
|
|
2364
|
-
var customerIdProperty - custType.getProperty("CustomerID");
|
|
2365
|
-
// Validates that the value of the CustomerID property on Customer is a Guid.
|
|
2366
|
-
customerIdProperty.validators.push(Validator.guid());
|
|
2367
|
-
@method guid
|
|
2368
|
-
@static
|
|
2369
|
-
@return {Validator} A new Validator
|
|
2370
|
-
**/
|
|
2371
|
-
static guid = function () {
|
|
2372
|
-
let valFn = function (v) {
|
|
2373
|
-
if (v == null)
|
|
2374
|
-
return true;
|
|
2375
|
-
return core.isGuid(v);
|
|
2376
|
-
};
|
|
2377
|
-
return new Validator("guid", valFn);
|
|
2378
|
-
};
|
|
2379
|
-
/**
|
|
2380
|
-
Returns a ISO 8601 duration string Validator.
|
|
2381
|
-
@example
|
|
2382
|
-
// Assume em1 is a preexisting EntityManager.
|
|
2383
|
-
var eventType = em1.metadataStore.getEntityType("Event");
|
|
2384
|
-
var elapsedTimeProperty - eventType.getProperty("ElapsedTime");
|
|
2385
|
-
// Validates that the value of the ElapsedTime property on Customer is a duration.
|
|
2386
|
-
elapsedTimeProperty.validators.push(Validator.duration());
|
|
2387
|
-
@method duration
|
|
2388
|
-
@static
|
|
2389
|
-
@return {Validator} A new Validator
|
|
2390
|
-
**/
|
|
2391
|
-
static duration = function () {
|
|
2392
|
-
let valFn = function (v) {
|
|
2393
|
-
if (v == null)
|
|
2394
|
-
return true;
|
|
2395
|
-
return core.isDuration(v);
|
|
2396
|
-
};
|
|
2397
|
-
return new Validator("duration", valFn);
|
|
2398
|
-
};
|
|
2399
|
-
/**
|
|
2400
|
-
Returns a standard numeric data type Validator.
|
|
2401
|
-
@example
|
|
2402
|
-
// Assume em1 is a preexisting EntityManager.
|
|
2403
|
-
var orderType = em1.metadataStore.getEntityType("Order");
|
|
2404
|
-
var freightProperty - orderType.getProperty("Freight");
|
|
2405
|
-
// Validates that the value of the Freight property on Order is a number.
|
|
2406
|
-
freightProperty.validators.push(Validator.number());
|
|
2407
|
-
@method number
|
|
2408
|
-
@static
|
|
2409
|
-
@return {Validator} A new Validator
|
|
2410
|
-
**/
|
|
2411
|
-
// TODO: may need to have seperate logic for single.
|
|
2412
|
-
static number = function (context) {
|
|
2413
|
-
let valFn = function (v, ctx) {
|
|
2414
|
-
if (v == null)
|
|
2415
|
-
return true;
|
|
2416
|
-
if (typeof v === "string" && ctx && ctx.allowString) {
|
|
2417
|
-
v = parseFloat(v);
|
|
2418
|
-
}
|
|
2419
|
-
return (typeof v === "number" && !isNaN(v));
|
|
2420
|
-
};
|
|
2421
|
-
return new Validator("number", valFn, context);
|
|
2226
|
+
if (typeof (v) !== "string")
|
|
2227
|
+
return false;
|
|
2228
|
+
return v.length <= ctx.maxLength;
|
|
2422
2229
|
};
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
|
|
2431
|
-
|
|
2432
|
-
|
|
2433
|
-
|
|
2434
|
-
|
|
2435
|
-
|
|
2436
|
-
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
return
|
|
2445
|
-
|
|
2446
|
-
|
|
2230
|
+
return new Validator("maxLength", valFn, context);
|
|
2231
|
+
};
|
|
2232
|
+
/**
|
|
2233
|
+
Returns a standard string length Validator; both minimum and maximum lengths must be specified.
|
|
2234
|
+
@example
|
|
2235
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2236
|
+
var custType = em1.metadataStore.getEntityType("Customer");
|
|
2237
|
+
var regionProperty - custType.getProperty("Region");
|
|
2238
|
+
// Validates that the value of the Region property on Customer will be
|
|
2239
|
+
// between 2 and 5 characters
|
|
2240
|
+
regionProperty.validators.push(Validator.stringLength( {minLength: 2, maxLength: 5});
|
|
2241
|
+
@method stringLength
|
|
2242
|
+
@static
|
|
2243
|
+
@param context {Object}
|
|
2244
|
+
@param context.maxLength {Integer}
|
|
2245
|
+
@param context.minLength {Integer}
|
|
2246
|
+
@return {Validator} A new Validator
|
|
2247
|
+
**/
|
|
2248
|
+
Validator.stringLength = function (context) {
|
|
2249
|
+
let valFn = function (v, ctx) {
|
|
2250
|
+
if (v == null)
|
|
2251
|
+
return true;
|
|
2252
|
+
if (typeof (v) !== "string")
|
|
2253
|
+
return false;
|
|
2254
|
+
if (ctx.minLength != null && v.length < ctx.minLength)
|
|
2255
|
+
return false;
|
|
2256
|
+
if (ctx.maxLength != null && v.length > ctx.maxLength)
|
|
2257
|
+
return false;
|
|
2258
|
+
return true;
|
|
2447
2259
|
};
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2260
|
+
return new Validator("stringLength", valFn, context);
|
|
2261
|
+
};
|
|
2262
|
+
/**
|
|
2263
|
+
Returns a standard string dataType Validator.
|
|
2264
|
+
@example
|
|
2265
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2266
|
+
var custType = em1.metadataStore.getEntityType("Customer");
|
|
2267
|
+
var regionProperty - custType.getProperty("Region");
|
|
2268
|
+
// Validates that the value of the Region property on Customer is a string.
|
|
2269
|
+
regionProperty.validators.push(Validator.string());
|
|
2270
|
+
@method string
|
|
2271
|
+
@static
|
|
2272
|
+
@return {Validator} A new Validator
|
|
2273
|
+
**/
|
|
2274
|
+
Validator.string = function () {
|
|
2275
|
+
let valFn = function (v) {
|
|
2276
|
+
if (v == null)
|
|
2277
|
+
return true;
|
|
2278
|
+
return (typeof v === "string");
|
|
2462
2279
|
};
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2280
|
+
return new Validator("string", valFn);
|
|
2281
|
+
};
|
|
2282
|
+
/**
|
|
2283
|
+
Returns a Guid data type Validator.
|
|
2284
|
+
@example
|
|
2285
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2286
|
+
var custType = em1.metadataStore.getEntityType("Customer");
|
|
2287
|
+
var customerIdProperty - custType.getProperty("CustomerID");
|
|
2288
|
+
// Validates that the value of the CustomerID property on Customer is a Guid.
|
|
2289
|
+
customerIdProperty.validators.push(Validator.guid());
|
|
2290
|
+
@method guid
|
|
2291
|
+
@static
|
|
2292
|
+
@return {Validator} A new Validator
|
|
2293
|
+
**/
|
|
2294
|
+
Validator.guid = function () {
|
|
2295
|
+
let valFn = function (v) {
|
|
2296
|
+
if (v == null)
|
|
2297
|
+
return true;
|
|
2298
|
+
return core.isGuid(v);
|
|
2477
2299
|
};
|
|
2478
|
-
|
|
2479
|
-
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2300
|
+
return new Validator("guid", valFn);
|
|
2301
|
+
};
|
|
2302
|
+
/**
|
|
2303
|
+
Returns a ISO 8601 duration string Validator.
|
|
2304
|
+
@example
|
|
2305
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2306
|
+
var eventType = em1.metadataStore.getEntityType("Event");
|
|
2307
|
+
var elapsedTimeProperty - eventType.getProperty("ElapsedTime");
|
|
2308
|
+
// Validates that the value of the ElapsedTime property on Customer is a duration.
|
|
2309
|
+
elapsedTimeProperty.validators.push(Validator.duration());
|
|
2310
|
+
@method duration
|
|
2311
|
+
@static
|
|
2312
|
+
@return {Validator} A new Validator
|
|
2313
|
+
**/
|
|
2314
|
+
Validator.duration = function () {
|
|
2315
|
+
let valFn = function (v) {
|
|
2316
|
+
if (v == null)
|
|
2317
|
+
return true;
|
|
2318
|
+
return core.isDuration(v);
|
|
2493
2319
|
};
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2320
|
+
return new Validator("duration", valFn);
|
|
2321
|
+
};
|
|
2322
|
+
/**
|
|
2323
|
+
Returns a standard numeric data type Validator.
|
|
2324
|
+
@example
|
|
2325
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2326
|
+
var orderType = em1.metadataStore.getEntityType("Order");
|
|
2327
|
+
var freightProperty - orderType.getProperty("Freight");
|
|
2328
|
+
// Validates that the value of the Freight property on Order is a number.
|
|
2329
|
+
freightProperty.validators.push(Validator.number());
|
|
2330
|
+
@method number
|
|
2331
|
+
@static
|
|
2332
|
+
@return {Validator} A new Validator
|
|
2333
|
+
**/
|
|
2334
|
+
// TODO: may need to have seperate logic for single.
|
|
2335
|
+
Validator.number = function (context) {
|
|
2336
|
+
let valFn = function (v, ctx) {
|
|
2337
|
+
if (v == null)
|
|
2338
|
+
return true;
|
|
2339
|
+
if (typeof v === "string" && ctx && ctx.allowString) {
|
|
2340
|
+
v = parseFloat(v);
|
|
2341
|
+
}
|
|
2342
|
+
return (typeof v === "number" && !isNaN(v));
|
|
2513
2343
|
};
|
|
2514
|
-
|
|
2515
|
-
|
|
2344
|
+
return new Validator("number", valFn, context);
|
|
2345
|
+
};
|
|
2346
|
+
Validator.double = Validator.number;
|
|
2347
|
+
Validator.single = Validator.number;
|
|
2348
|
+
/**
|
|
2349
|
+
Returns a standard large integer data type - 64 bit - Validator.
|
|
2350
|
+
@example
|
|
2351
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2352
|
+
var orderType = em1.metadataStore.getEntityType("Order");
|
|
2353
|
+
var freightProperty - orderType.getProperty("Freight");
|
|
2354
|
+
// Validates that the value of the Freight property on Order is within the range of a 64 bit integer.
|
|
2355
|
+
freightProperty.validators.push(Validator.int64());
|
|
2356
|
+
@method int64
|
|
2357
|
+
@static
|
|
2358
|
+
@return {Validator} A new Validator
|
|
2359
|
+
**/
|
|
2360
|
+
Validator.integer = function (context) {
|
|
2361
|
+
let valFn = function (v, ctx) {
|
|
2362
|
+
if (v == null)
|
|
2516
2363
|
return true;
|
|
2517
|
-
|
|
2518
|
-
|
|
2364
|
+
if (typeof v === "string" && ctx && ctx.allowString) {
|
|
2365
|
+
v = parseInt(v, 10);
|
|
2366
|
+
}
|
|
2367
|
+
return (typeof v === "number") && (!isNaN(v)) && Math.floor(v) === v;
|
|
2519
2368
|
};
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2369
|
+
return new Validator("integer", valFn, context);
|
|
2370
|
+
};
|
|
2371
|
+
Validator.int64 = Validator.integer;
|
|
2372
|
+
/**
|
|
2373
|
+
Returns a standard 32 bit integer data type Validator.
|
|
2374
|
+
@example
|
|
2375
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2376
|
+
var orderType = em1.metadataStore.getEntityType("Order");
|
|
2377
|
+
var freightProperty - orderType.getProperty("Freight");
|
|
2378
|
+
freightProperty.validators.push(Validator.int32());
|
|
2379
|
+
@method int32
|
|
2380
|
+
@static
|
|
2381
|
+
@return {Validator} A new Validator
|
|
2382
|
+
**/
|
|
2383
|
+
Validator.int32 = function (context) {
|
|
2384
|
+
return intRangeValidatorCtor("int32", INT32_MIN, INT32_MAX, context)();
|
|
2385
|
+
};
|
|
2386
|
+
/**
|
|
2387
|
+
Returns a standard 16 bit integer data type Validator.
|
|
2388
|
+
@example
|
|
2389
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2390
|
+
var orderType = em1.metadataStore.getEntityType("Order");
|
|
2391
|
+
var freightProperty - orderType.getProperty("Freight");
|
|
2392
|
+
// Validates that the value of the Freight property on Order is within the range of a 16 bit integer.
|
|
2393
|
+
freightProperty.validators.push(Validator.int16());
|
|
2394
|
+
@method int16
|
|
2395
|
+
@static
|
|
2396
|
+
@return {Validator} A new Validator
|
|
2397
|
+
**/
|
|
2398
|
+
Validator.int16 = function (context) {
|
|
2399
|
+
return intRangeValidatorCtor("int16", INT16_MIN, INT16_MAX, context)();
|
|
2400
|
+
};
|
|
2401
|
+
/**
|
|
2402
|
+
Returns a standard byte data type Validator. (This is a integer between 0 and 255 inclusive for js purposes).
|
|
2403
|
+
@example
|
|
2404
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2405
|
+
var orderType = em1.metadataStore.getEntityType("Order");
|
|
2406
|
+
var freightProperty - orderType.getProperty("Freight");
|
|
2407
|
+
// Validates that the value of the Freight property on Order is within the range of a 16 bit integer.
|
|
2408
|
+
// Probably not a very good validation to place on the Freight property.
|
|
2409
|
+
regionProperty.validators.push(Validator.byte());
|
|
2410
|
+
@method byte
|
|
2411
|
+
@static
|
|
2412
|
+
@return {Validator} A new Validator
|
|
2413
|
+
**/
|
|
2414
|
+
Validator.byte = function (context) {
|
|
2415
|
+
return intRangeValidatorCtor("byte", BYTE_MIN, BYTE_MAX, context)();
|
|
2416
|
+
};
|
|
2417
|
+
/**
|
|
2418
|
+
Returns a standard boolean data type Validator.
|
|
2419
|
+
@example
|
|
2420
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2421
|
+
var productType = em1.metadataStore.getEntityType("Product");
|
|
2422
|
+
var discontinuedProperty - productType.getProperty("Discontinued");
|
|
2423
|
+
// Validates that the value of the Discontinued property on Product is a boolean
|
|
2424
|
+
discontinuedProperty.validators.push(Validator.bool());
|
|
2425
|
+
@method bool
|
|
2426
|
+
@static
|
|
2427
|
+
@return {Validator} A new Validator
|
|
2428
|
+
**/
|
|
2429
|
+
Validator.bool = function () {
|
|
2430
|
+
let valFn = function (v) {
|
|
2431
|
+
if (v == null)
|
|
2432
|
+
return true;
|
|
2433
|
+
return (v === true) || (v === false);
|
|
2552
2434
|
};
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
// Assume em is a preexisting EntityManager.
|
|
2559
|
-
var personType = em.metadataStore.getEntityType("Person");
|
|
2560
|
-
var creditCardProperty = personType.getProperty("creditCard");
|
|
2561
|
-
// Validates that the value of the Person.creditCard property is credit card.
|
|
2562
|
-
creditCardProperty.validators.push(Validator.creditCard());
|
|
2563
|
-
@method creditCard
|
|
2564
|
-
@static
|
|
2565
|
-
@param [context] {Object} optional parameters to pass through to validation constructor
|
|
2566
|
-
@return {Validator} A new Validator
|
|
2567
|
-
**/
|
|
2568
|
-
static creditCard = function (context) {
|
|
2569
|
-
function valFn(v) {
|
|
2570
|
-
if (v == null || v === '')
|
|
2571
|
-
return true;
|
|
2572
|
-
if (typeof (v) !== 'string')
|
|
2573
|
-
return false;
|
|
2574
|
-
v = v.replace(/(\-|\s)/g, ""); // remove dashes and spaces
|
|
2575
|
-
if (!v || /\D/.test(v))
|
|
2576
|
-
return false; // all digits, not empty
|
|
2577
|
-
return luhn(v);
|
|
2578
|
-
}
|
|
2579
|
-
return new Validator('creditCard', valFn, context);
|
|
2435
|
+
return new Validator("bool", valFn);
|
|
2436
|
+
};
|
|
2437
|
+
Validator.none = function () {
|
|
2438
|
+
let valFn = function (v) {
|
|
2439
|
+
return true;
|
|
2580
2440
|
};
|
|
2581
|
-
|
|
2582
|
-
|
|
2583
|
-
|
|
2584
|
-
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
return false;
|
|
2441
|
+
return new Validator("none", valFn);
|
|
2442
|
+
};
|
|
2443
|
+
/**
|
|
2444
|
+
Returns a standard date data type Validator.
|
|
2445
|
+
@example
|
|
2446
|
+
// Assume em1 is a preexisting EntityManager.
|
|
2447
|
+
var orderType = em1.metadataStore.getEntityType("Order");
|
|
2448
|
+
var orderDateProperty - orderType.getProperty("OrderDate");
|
|
2449
|
+
// Validates that the value of the OrderDate property on Order is a date
|
|
2450
|
+
// Probably not a very good validation to place on the Freight property.
|
|
2451
|
+
orderDateProperty.validators.push(Validator.date());
|
|
2452
|
+
@method date
|
|
2453
|
+
@static
|
|
2454
|
+
@return {Validator} A new Validator
|
|
2455
|
+
**/
|
|
2456
|
+
Validator.date = function () {
|
|
2457
|
+
let valFn = function (v) {
|
|
2458
|
+
if (v == null)
|
|
2459
|
+
return true;
|
|
2460
|
+
if (typeof v === "string") {
|
|
2602
2461
|
try {
|
|
2603
|
-
|
|
2604
|
-
|
|
2462
|
+
return !isNaN(Date.parse(v));
|
|
2463
|
+
// old code
|
|
2464
|
+
// return __isDate(new Date(v));
|
|
2605
2465
|
}
|
|
2606
2466
|
catch (e) {
|
|
2607
|
-
|
|
2467
|
+
return false;
|
|
2608
2468
|
}
|
|
2609
2469
|
}
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
Returns the email address validator
|
|
2614
|
-
@example
|
|
2615
|
-
// Assume em is a preexisting EntityManager.
|
|
2616
|
-
var personType = em.metadataStore.getEntityType("Person");
|
|
2617
|
-
var emailProperty = personType.getProperty("email");
|
|
2618
|
-
// Validates that the value of the Person.email property is an email address.
|
|
2619
|
-
emailProperty.validators.push(Validator.emailAddress());
|
|
2620
|
-
@method emailAddress
|
|
2621
|
-
@static
|
|
2622
|
-
@param [context] {Object} optional parameters to pass through to validation constructor
|
|
2623
|
-
@return {Validator} A new Validator
|
|
2624
|
-
**/
|
|
2625
|
-
static emailAddress = function (context) {
|
|
2626
|
-
// See https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/EmailAttribute.cs
|
|
2627
|
-
let reEmailAddress = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;
|
|
2628
|
-
return makeRegExpValidator('emailAddress', reEmailAddress, null, context);
|
|
2629
|
-
};
|
|
2630
|
-
/**
|
|
2631
|
-
Returns the phone validator
|
|
2632
|
-
Provides basic assertions on the format and will help to eliminate most nonsense input
|
|
2633
|
-
Matches:
|
|
2634
|
-
International dialing prefix: {{}, +, 0, 0000} (with or without a trailing break character, if not '+': [-/. ])
|
|
2635
|
-
> ((\+)|(0(\d+)?[-/.\s]))
|
|
2636
|
-
Country code: {{}, 1, ..., 999} (with or without a trailing break character: [-/. ])
|
|
2637
|
-
> [1-9]\d{,2}[-/.\s]?
|
|
2638
|
-
Area code: {(0), ..., (000000), 0, ..., 000000} (with or without a trailing break character: [-/. ])
|
|
2639
|
-
> ((\(\d{1,6}\)|\d{1,6})[-/.\s]?)?
|
|
2640
|
-
Local: {0, ...}+ (with or without a trailing break character: [-/. ])
|
|
2641
|
-
> (\d+[-/.\s]?)+\d+
|
|
2642
|
-
@example
|
|
2643
|
-
// Assume em is a preexisting EntityManager.
|
|
2644
|
-
var customerType = em.metadataStore.getEntityType("Customer");
|
|
2645
|
-
var phoneProperty = customerType.getProperty("phone");
|
|
2646
|
-
// Validates that the value of the Customer.phone property is phone.
|
|
2647
|
-
phoneProperty.validators.push(Validator.phone());
|
|
2648
|
-
@method phone
|
|
2649
|
-
@static
|
|
2650
|
-
@param [context] {Object} optional parameters to pass through to validation constructor
|
|
2651
|
-
@return {Validator} A new Validator
|
|
2652
|
-
**/
|
|
2653
|
-
static phone = function (context) {
|
|
2654
|
-
// See https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/Expressions.cs
|
|
2655
|
-
let rePhone = /^((\+|(0(\d+)?[-/.\s]?))[1-9]\d{0,2}[-/.\s]?)?((\(\d{1,6}\)|\d{1,6})[-/.\s]?)?(\d+[-/.\s]?)+\d+$/;
|
|
2656
|
-
return makeRegExpValidator('phone', rePhone, null, context);
|
|
2657
|
-
};
|
|
2658
|
-
/**
|
|
2659
|
-
Returns the URL (protocol required) validator
|
|
2660
|
-
@example
|
|
2661
|
-
// Assume em is a preexisting EntityManager.
|
|
2662
|
-
var personType = em.metadataStore.getEntityType("Person");
|
|
2663
|
-
var websiteProperty = personType.getProperty("website");
|
|
2664
|
-
// Validates that the value of the Person.website property is a URL.
|
|
2665
|
-
websiteProperty.validators.push(Validator.url());
|
|
2666
|
-
@method url
|
|
2667
|
-
@static
|
|
2668
|
-
@param [context] {Object} optional parameters to pass through to validation constructor
|
|
2669
|
-
@return {Validator} A new Validator
|
|
2670
|
-
**/
|
|
2671
|
-
static url = function (context) {
|
|
2672
|
-
//See https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/UrlAttribute.cs
|
|
2673
|
-
let reUrlProtocolRequired = /^(https?|ftp):\/\/(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|([a-zA-Z][\-a-zA-Z0-9]*)|((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/;
|
|
2674
|
-
return makeRegExpValidator('url', reUrlProtocolRequired, null, context);
|
|
2470
|
+
else {
|
|
2471
|
+
return core.isDate(v);
|
|
2472
|
+
}
|
|
2675
2473
|
};
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
}
|
|
2474
|
+
return new Validator("date", valFn);
|
|
2475
|
+
};
|
|
2476
|
+
/**
|
|
2477
|
+
Returns a credit card number validator
|
|
2478
|
+
Performs a luhn algorithm checksum test for plausability
|
|
2479
|
+
catches simple mistakes; only service knows for sure
|
|
2480
|
+
@example
|
|
2481
|
+
// Assume em is a preexisting EntityManager.
|
|
2482
|
+
var personType = em.metadataStore.getEntityType("Person");
|
|
2483
|
+
var creditCardProperty = personType.getProperty("creditCard");
|
|
2484
|
+
// Validates that the value of the Person.creditCard property is credit card.
|
|
2485
|
+
creditCardProperty.validators.push(Validator.creditCard());
|
|
2486
|
+
@method creditCard
|
|
2487
|
+
@static
|
|
2488
|
+
@param [context] {Object} optional parameters to pass through to validation constructor
|
|
2489
|
+
@return {Validator} A new Validator
|
|
2490
|
+
**/
|
|
2491
|
+
Validator.creditCard = function (context) {
|
|
2492
|
+
function valFn(v) {
|
|
2493
|
+
if (v == null || v === '')
|
|
2494
|
+
return true;
|
|
2495
|
+
if (typeof (v) !== 'string')
|
|
2496
|
+
return false;
|
|
2497
|
+
v = v.replace(/(\-|\s)/g, ""); // remove dashes and spaces
|
|
2498
|
+
if (!v || /\D/.test(v))
|
|
2499
|
+
return false; // all digits, not empty
|
|
2500
|
+
return luhn(v);
|
|
2501
|
+
}
|
|
2502
|
+
return new Validator('creditCard', valFn, context);
|
|
2503
|
+
};
|
|
2504
|
+
/**
|
|
2505
|
+
Returns a regular expression validator; the expression must be specified
|
|
2506
|
+
@example
|
|
2507
|
+
// Add validator to a property. Assume em is a preexisting EntityManager.
|
|
2508
|
+
var customerType = em.metadataStore.getEntityType("Customer");
|
|
2509
|
+
var regionProperty = customerType.getProperty("Region");
|
|
2510
|
+
// Validates that the value of Customer.Region is 2 char uppercase alpha.
|
|
2511
|
+
regionProperty.validators.push(Validator.regularExpression( {expression: '^[A-Z]{2}$'} );
|
|
2512
|
+
@method regularExpression
|
|
2513
|
+
@static
|
|
2514
|
+
@param context {Object}
|
|
2515
|
+
@param context.expression {String} String form of the regular expression to apply
|
|
2516
|
+
@return {Validator} A new Validator
|
|
2517
|
+
**/
|
|
2518
|
+
Validator.regularExpression = function (context) {
|
|
2519
|
+
function valFn(v, ctx) {
|
|
2520
|
+
// do not invalidate if empty; use a separate required test
|
|
2521
|
+
if (v == null || v === '')
|
|
2522
|
+
return true;
|
|
2523
|
+
if (typeof (v) !== 'string')
|
|
2524
|
+
return false;
|
|
2525
|
+
try {
|
|
2526
|
+
let re = new RegExp(ctx.expression);
|
|
2527
|
+
return re.test(v);
|
|
2528
|
+
}
|
|
2529
|
+
catch (e) {
|
|
2530
|
+
throw new Error('Missing or invalid expression parameter to regExp validator');
|
|
2531
|
+
}
|
|
2532
|
+
}
|
|
2533
|
+
return new Validator('regularExpression', valFn, context);
|
|
2534
|
+
};
|
|
2535
|
+
/**
|
|
2536
|
+
Returns the email address validator
|
|
2537
|
+
@example
|
|
2538
|
+
// Assume em is a preexisting EntityManager.
|
|
2539
|
+
var personType = em.metadataStore.getEntityType("Person");
|
|
2540
|
+
var emailProperty = personType.getProperty("email");
|
|
2541
|
+
// Validates that the value of the Person.email property is an email address.
|
|
2542
|
+
emailProperty.validators.push(Validator.emailAddress());
|
|
2543
|
+
@method emailAddress
|
|
2544
|
+
@static
|
|
2545
|
+
@param [context] {Object} optional parameters to pass through to validation constructor
|
|
2546
|
+
@return {Validator} A new Validator
|
|
2547
|
+
**/
|
|
2548
|
+
Validator.emailAddress = function (context) {
|
|
2549
|
+
// See https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/EmailAttribute.cs
|
|
2550
|
+
let reEmailAddress = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;
|
|
2551
|
+
return makeRegExpValidator('emailAddress', reEmailAddress, null, context);
|
|
2552
|
+
};
|
|
2553
|
+
/**
|
|
2554
|
+
Returns the phone validator
|
|
2555
|
+
Provides basic assertions on the format and will help to eliminate most nonsense input
|
|
2556
|
+
Matches:
|
|
2557
|
+
International dialing prefix: {{}, +, 0, 0000} (with or without a trailing break character, if not '+': [-/. ])
|
|
2558
|
+
> ((\+)|(0(\d+)?[-/.\s]))
|
|
2559
|
+
Country code: {{}, 1, ..., 999} (with or without a trailing break character: [-/. ])
|
|
2560
|
+
> [1-9]\d{,2}[-/.\s]?
|
|
2561
|
+
Area code: {(0), ..., (000000), 0, ..., 000000} (with or without a trailing break character: [-/. ])
|
|
2562
|
+
> ((\(\d{1,6}\)|\d{1,6})[-/.\s]?)?
|
|
2563
|
+
Local: {0, ...}+ (with or without a trailing break character: [-/. ])
|
|
2564
|
+
> (\d+[-/.\s]?)+\d+
|
|
2565
|
+
@example
|
|
2566
|
+
// Assume em is a preexisting EntityManager.
|
|
2567
|
+
var customerType = em.metadataStore.getEntityType("Customer");
|
|
2568
|
+
var phoneProperty = customerType.getProperty("phone");
|
|
2569
|
+
// Validates that the value of the Customer.phone property is phone.
|
|
2570
|
+
phoneProperty.validators.push(Validator.phone());
|
|
2571
|
+
@method phone
|
|
2572
|
+
@static
|
|
2573
|
+
@param [context] {Object} optional parameters to pass through to validation constructor
|
|
2574
|
+
@return {Validator} A new Validator
|
|
2575
|
+
**/
|
|
2576
|
+
Validator.phone = function (context) {
|
|
2577
|
+
// See https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/Expressions.cs
|
|
2578
|
+
let rePhone = /^((\+|(0(\d+)?[-/.\s]?))[1-9]\d{0,2}[-/.\s]?)?((\(\d{1,6}\)|\d{1,6})[-/.\s]?)?(\d+[-/.\s]?)+\d+$/;
|
|
2579
|
+
return makeRegExpValidator('phone', rePhone, null, context);
|
|
2580
|
+
};
|
|
2581
|
+
/**
|
|
2582
|
+
Returns the URL (protocol required) validator
|
|
2583
|
+
@example
|
|
2584
|
+
// Assume em is a preexisting EntityManager.
|
|
2585
|
+
var personType = em.metadataStore.getEntityType("Person");
|
|
2586
|
+
var websiteProperty = personType.getProperty("website");
|
|
2587
|
+
// Validates that the value of the Person.website property is a URL.
|
|
2588
|
+
websiteProperty.validators.push(Validator.url());
|
|
2589
|
+
@method url
|
|
2590
|
+
@static
|
|
2591
|
+
@param [context] {Object} optional parameters to pass through to validation constructor
|
|
2592
|
+
@return {Validator} A new Validator
|
|
2593
|
+
**/
|
|
2594
|
+
Validator.url = function (context) {
|
|
2595
|
+
//See https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions/UrlAttribute.cs
|
|
2596
|
+
let reUrlProtocolRequired = /^(https?|ftp):\/\/(((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|([a-zA-Z][\-a-zA-Z0-9]*)|((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-fA-F]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/;
|
|
2597
|
+
return makeRegExpValidator('url', reUrlProtocolRequired, null, context);
|
|
2598
|
+
};
|
|
2599
|
+
/**
|
|
2600
|
+
Creates a regular expression validator with a fixed expression.
|
|
2601
|
+
Many of the stock validators are built with this factory method.
|
|
2602
|
+
Their expressions are often derived from
|
|
2603
|
+
https://github.com/srkirkland/DataAnnotationsExtensions/blob/master/DataAnnotationsExtensions
|
|
2604
|
+
You can try many of them at http://dataannotationsextensions.org/
|
|
2605
|
+
@example
|
|
2606
|
+
// Make a zipcode validator
|
|
2607
|
+
function zipValidator = Validator.makeRegExpValidator(
|
|
2608
|
+
"zipVal,
|
|
2609
|
+
/^\d{5}([\-]\d{4})?$/,
|
|
2610
|
+
"The %displayName% '%value%' is not a valid U.S. zipcode");
|
|
2611
|
+
// Register it.
|
|
2612
|
+
Validator.register(zipValidator);
|
|
2613
|
+
// Add it to a data property. Assume em is a preexisting EntityManager.
|
|
2614
|
+
var custType = em.metadataStore.getEntityType("Customer");
|
|
2615
|
+
var zipProperty = custType.getProperty("PostalCode");
|
|
2616
|
+
zipProperty.validators.push(zipValidator);
|
|
2617
|
+
@method makeRegExpValidator
|
|
2618
|
+
@static
|
|
2619
|
+
@param validatorName {String} name of this validator
|
|
2620
|
+
@param expression {String | RegExp} regular expression to apply
|
|
2621
|
+
@param [defaultMessage] {String} default message for failed validations
|
|
2622
|
+
@param [context] {Object} optional parameters to pass through to validation constructor
|
|
2623
|
+
@return {Validator} A new Validator
|
|
2624
|
+
**/
|
|
2625
|
+
Validator.makeRegExpValidator = makeRegExpValidator;
|
|
2704
2626
|
Validator.prototype._$typeName = "Validator";
|
|
2705
2627
|
// register all validators
|
|
2706
2628
|
Error['x'] = core.objectForEach(Validator, function (key, value) {
|
|
@@ -2787,14 +2709,7 @@ function makeRegExpValidator(validatorName, expression, defaultMessage, context)
|
|
|
2787
2709
|
};
|
|
2788
2710
|
return new Validator(validatorName, valFn, context);
|
|
2789
2711
|
}
|
|
2790
|
-
|
|
2791
|
-
// function luhn(a: string, b: number, c: number, d: number, e: number) {
|
|
2792
|
-
// for (d = +a[b = a.length - 1], e = 0; b--; ) {
|
|
2793
|
-
// c = +a[b], d += ++e % 2 ? 2 * c % 10 + (c > 4) : c;
|
|
2794
|
-
// }
|
|
2795
|
-
// return !(d % 10);
|
|
2796
|
-
// };
|
|
2797
|
-
let luhn = (function () {
|
|
2712
|
+
const ɵ1 = function () {
|
|
2798
2713
|
let luhnArr = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];
|
|
2799
2714
|
return function (str) {
|
|
2800
2715
|
let counter = 0;
|
|
@@ -2809,7 +2724,15 @@ let luhn = (function () {
|
|
|
2809
2724
|
}
|
|
2810
2725
|
return (counter % 10 === 0);
|
|
2811
2726
|
};
|
|
2812
|
-
}
|
|
2727
|
+
};
|
|
2728
|
+
// http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers#JavaScript
|
|
2729
|
+
// function luhn(a: string, b: number, c: number, d: number, e: number) {
|
|
2730
|
+
// for (d = +a[b = a.length - 1], e = 0; b--; ) {
|
|
2731
|
+
// c = +a[b], d += ++e % 2 ? 2 * c % 10 + (c > 4) : c;
|
|
2732
|
+
// }
|
|
2733
|
+
// return !(d % 10);
|
|
2734
|
+
// };
|
|
2735
|
+
let luhn = (ɵ1)();
|
|
2813
2736
|
/**
|
|
2814
2737
|
A ValidationError is used to describe a failed validation.
|
|
2815
2738
|
|
|
@@ -2825,13 +2748,6 @@ Constructs a new ValidationError
|
|
|
2825
2748
|
@param [key] {String} An optional key used to define a key for this error. One will be created automatically if not provided here.
|
|
2826
2749
|
**/
|
|
2827
2750
|
class ValidationError {
|
|
2828
|
-
validator;
|
|
2829
|
-
key;
|
|
2830
|
-
context;
|
|
2831
|
-
errorMessage;
|
|
2832
|
-
property; // IProperty
|
|
2833
|
-
propertyName;
|
|
2834
|
-
isServerError;
|
|
2835
2751
|
constructor(validator, context, errorMessage, key) {
|
|
2836
2752
|
// Error is with isInstanceOf(Validator)
|
|
2837
2753
|
assertParam(validator, "validator").isOptional().isInstanceOf(Validator).check();
|
|
@@ -2905,139 +2821,14 @@ class ValidationError {
|
|
|
2905
2821
|
let name = (typeof validatorOrErrorName === 'string') ? validatorOrErrorName : validatorOrErrorName.name;
|
|
2906
2822
|
return name + (propertyName ? ":" + propertyName : "");
|
|
2907
2823
|
}
|
|
2908
|
-
}
|
|
2909
|
-
|
|
2910
|
-
let _localTimeRegex = /.\d{3}$/;
|
|
2911
|
-
/**
|
|
2912
|
-
DataType is an 'Enum' containing all of the supported data types.
|
|
2913
|
-
@dynamic
|
|
2914
|
-
**/
|
|
2915
|
-
class DataType extends BreezeEnum {
|
|
2916
|
-
static parseDateFromServer = (value) => DataType.parseDateAsUTC(value);
|
|
2917
|
-
// same effect as above but doesn't give right TSDOC.
|
|
2918
|
-
// static parseDateFromServer = DataType.parseDateAsUTC;
|
|
2919
|
-
/** @hidden @internal */
|
|
2920
|
-
static constants;
|
|
2921
|
-
static String = new DataType({
|
|
2922
|
-
defaultValue: "",
|
|
2923
|
-
parse: coerceToString,
|
|
2924
|
-
fmtOData: fmtString,
|
|
2925
|
-
getNext: getNextString
|
|
2926
|
-
});
|
|
2927
|
-
static Int64 = new DataType({
|
|
2928
|
-
defaultValue: 0,
|
|
2929
|
-
isNumeric: true,
|
|
2930
|
-
isInteger: true,
|
|
2931
|
-
quoteJsonOData: true,
|
|
2932
|
-
parse: coerceToInt,
|
|
2933
|
-
fmtOData: makeFloatFmt("L"),
|
|
2934
|
-
getNext: getNextNumber
|
|
2935
|
-
});
|
|
2936
|
-
static Int32 = new DataType({
|
|
2937
|
-
defaultValue: 0,
|
|
2938
|
-
isNumeric: true,
|
|
2939
|
-
isInteger: true,
|
|
2940
|
-
parse: coerceToInt,
|
|
2941
|
-
fmtOData: fmtInt,
|
|
2942
|
-
getNext: getNextNumber
|
|
2943
|
-
});
|
|
2944
|
-
static Int16 = new DataType({
|
|
2945
|
-
defaultValue: 0,
|
|
2946
|
-
isNumeric: true,
|
|
2947
|
-
isInteger: true,
|
|
2948
|
-
parse: coerceToInt,
|
|
2949
|
-
fmtOData: fmtInt,
|
|
2950
|
-
getNext: getNextNumber
|
|
2951
|
-
});
|
|
2952
|
-
static Byte = new DataType({
|
|
2953
|
-
defaultValue: 0,
|
|
2954
|
-
isNumeric: true,
|
|
2955
|
-
isInteger: true,
|
|
2956
|
-
parse: coerceToInt,
|
|
2957
|
-
fmtOData: fmtInt
|
|
2958
|
-
});
|
|
2959
|
-
static Decimal = new DataType({
|
|
2960
|
-
defaultValue: 0,
|
|
2961
|
-
isNumeric: true,
|
|
2962
|
-
quoteJsonOData: true,
|
|
2963
|
-
isFloat: true,
|
|
2964
|
-
parse: coerceToFloat,
|
|
2965
|
-
fmtOData: makeFloatFmt("m"),
|
|
2966
|
-
getNext: getNextNumber
|
|
2967
|
-
});
|
|
2968
|
-
static Double = new DataType({
|
|
2969
|
-
defaultValue: 0,
|
|
2970
|
-
isNumeric: true,
|
|
2971
|
-
isFloat: true,
|
|
2972
|
-
parse: coerceToFloat,
|
|
2973
|
-
fmtOData: makeFloatFmt("d"),
|
|
2974
|
-
getNext: getNextNumber
|
|
2975
|
-
});
|
|
2976
|
-
static Single = new DataType({
|
|
2977
|
-
defaultValue: 0,
|
|
2978
|
-
isNumeric: true,
|
|
2979
|
-
isFloat: true,
|
|
2980
|
-
parse: coerceToFloat,
|
|
2981
|
-
fmtOData: makeFloatFmt("f"),
|
|
2982
|
-
getNext: getNextNumber
|
|
2983
|
-
});
|
|
2984
|
-
static DateOnly = new DataType({
|
|
2985
|
-
defaultValue: new Date(1900, 0, 1),
|
|
2986
|
-
isDate: true,
|
|
2987
|
-
parse: coerceToDateOnly,
|
|
2988
|
-
parseRawValue: parseRawDateOnly,
|
|
2989
|
-
normalize: function (value) { return value && value.getTime && (new Date(value.getYear(), value.getMonth(), value.getDate())).getTime(); },
|
|
2990
|
-
fmtOData: fmtDateOnly,
|
|
2991
|
-
getNext: getNextDateTime,
|
|
2992
|
-
getConcurrencyValue: getConcurrencyDateTime
|
|
2993
|
-
});
|
|
2994
|
-
static DateTime = new DataType({
|
|
2995
|
-
defaultValue: new Date(1900, 0, 1),
|
|
2996
|
-
isDate: true,
|
|
2997
|
-
parse: coerceToDate,
|
|
2998
|
-
parseRawValue: parseRawDate,
|
|
2999
|
-
normalize: function (value) { return value && value.getTime && value.getTime(); },
|
|
3000
|
-
fmtOData: fmtDateTime,
|
|
3001
|
-
getNext: getNextDateTime,
|
|
3002
|
-
getConcurrencyValue: getConcurrencyDateTime
|
|
3003
|
-
});
|
|
3004
|
-
static DateTimeOffset = new DataType({
|
|
3005
|
-
defaultValue: new Date(1900, 0, 1),
|
|
3006
|
-
isDate: true,
|
|
3007
|
-
parse: coerceToDate,
|
|
3008
|
-
parseRawValue: parseRawDate,
|
|
3009
|
-
normalize: function (value) { return value && value.getTime && value.getTime(); },
|
|
3010
|
-
fmtOData: fmtDateTimeOffset,
|
|
3011
|
-
getNext: getNextDateTime,
|
|
3012
|
-
getConcurrencyValue: getConcurrencyDateTime
|
|
3013
|
-
});
|
|
3014
|
-
static Time = new DataType({
|
|
3015
|
-
defaultValue: "PT0S",
|
|
3016
|
-
fmtOData: fmtTime,
|
|
3017
|
-
parseRawValue: DataType.parseTimeFromServer
|
|
3018
|
-
});
|
|
3019
|
-
static Boolean = new DataType({
|
|
3020
|
-
defaultValue: false,
|
|
3021
|
-
parse: coerceToBool,
|
|
3022
|
-
fmtOData: fmtBoolean
|
|
3023
|
-
});
|
|
3024
|
-
static Guid = new DataType({
|
|
3025
|
-
defaultValue: "00000000-0000-0000-0000-000000000000",
|
|
3026
|
-
parse: coerceToGuid,
|
|
3027
|
-
fmtOData: fmtGuid,
|
|
3028
|
-
getNext: getNextGuid,
|
|
3029
|
-
parseRawValue: function (val) { return val.toLowerCase(); },
|
|
3030
|
-
getConcurrencyValue: core.getUuid
|
|
3031
|
-
});
|
|
3032
|
-
static Binary = new DataType({
|
|
3033
|
-
defaultValue: null,
|
|
3034
|
-
fmtOData: fmtBinary,
|
|
3035
|
-
parseRawValue: parseRawBinary
|
|
3036
|
-
});
|
|
3037
|
-
static Undefined = new DataType({
|
|
3038
|
-
defaultValue: undefined,
|
|
3039
|
-
fmtOData: fmtUndefined
|
|
3040
|
-
});
|
|
2824
|
+
}
|
|
2825
|
+
|
|
2826
|
+
let _localTimeRegex = /.\d{3}$/;
|
|
2827
|
+
/**
|
|
2828
|
+
DataType is an 'Enum' containing all of the supported data types.
|
|
2829
|
+
@dynamic
|
|
2830
|
+
**/
|
|
2831
|
+
class DataType extends BreezeEnum {
|
|
3041
2832
|
static getComparableFn(dataType) {
|
|
3042
2833
|
if (dataType && dataType.normalize) {
|
|
3043
2834
|
return dataType.normalize;
|
|
@@ -3158,6 +2949,127 @@ class DataType extends BreezeEnum {
|
|
|
3158
2949
|
};
|
|
3159
2950
|
}
|
|
3160
2951
|
}
|
|
2952
|
+
DataType.parseDateFromServer = (value) => DataType.parseDateAsUTC(value);
|
|
2953
|
+
DataType.String = new DataType({
|
|
2954
|
+
defaultValue: "",
|
|
2955
|
+
parse: coerceToString,
|
|
2956
|
+
fmtOData: fmtString,
|
|
2957
|
+
getNext: getNextString
|
|
2958
|
+
});
|
|
2959
|
+
DataType.Int64 = new DataType({
|
|
2960
|
+
defaultValue: 0,
|
|
2961
|
+
isNumeric: true,
|
|
2962
|
+
isInteger: true,
|
|
2963
|
+
quoteJsonOData: true,
|
|
2964
|
+
parse: coerceToInt,
|
|
2965
|
+
fmtOData: makeFloatFmt("L"),
|
|
2966
|
+
getNext: getNextNumber
|
|
2967
|
+
});
|
|
2968
|
+
DataType.Int32 = new DataType({
|
|
2969
|
+
defaultValue: 0,
|
|
2970
|
+
isNumeric: true,
|
|
2971
|
+
isInteger: true,
|
|
2972
|
+
parse: coerceToInt,
|
|
2973
|
+
fmtOData: fmtInt,
|
|
2974
|
+
getNext: getNextNumber
|
|
2975
|
+
});
|
|
2976
|
+
DataType.Int16 = new DataType({
|
|
2977
|
+
defaultValue: 0,
|
|
2978
|
+
isNumeric: true,
|
|
2979
|
+
isInteger: true,
|
|
2980
|
+
parse: coerceToInt,
|
|
2981
|
+
fmtOData: fmtInt,
|
|
2982
|
+
getNext: getNextNumber
|
|
2983
|
+
});
|
|
2984
|
+
DataType.Byte = new DataType({
|
|
2985
|
+
defaultValue: 0,
|
|
2986
|
+
isNumeric: true,
|
|
2987
|
+
isInteger: true,
|
|
2988
|
+
parse: coerceToInt,
|
|
2989
|
+
fmtOData: fmtInt
|
|
2990
|
+
});
|
|
2991
|
+
DataType.Decimal = new DataType({
|
|
2992
|
+
defaultValue: 0,
|
|
2993
|
+
isNumeric: true,
|
|
2994
|
+
quoteJsonOData: true,
|
|
2995
|
+
isFloat: true,
|
|
2996
|
+
parse: coerceToFloat,
|
|
2997
|
+
fmtOData: makeFloatFmt("m"),
|
|
2998
|
+
getNext: getNextNumber
|
|
2999
|
+
});
|
|
3000
|
+
DataType.Double = new DataType({
|
|
3001
|
+
defaultValue: 0,
|
|
3002
|
+
isNumeric: true,
|
|
3003
|
+
isFloat: true,
|
|
3004
|
+
parse: coerceToFloat,
|
|
3005
|
+
fmtOData: makeFloatFmt("d"),
|
|
3006
|
+
getNext: getNextNumber
|
|
3007
|
+
});
|
|
3008
|
+
DataType.Single = new DataType({
|
|
3009
|
+
defaultValue: 0,
|
|
3010
|
+
isNumeric: true,
|
|
3011
|
+
isFloat: true,
|
|
3012
|
+
parse: coerceToFloat,
|
|
3013
|
+
fmtOData: makeFloatFmt("f"),
|
|
3014
|
+
getNext: getNextNumber
|
|
3015
|
+
});
|
|
3016
|
+
DataType.DateOnly = new DataType({
|
|
3017
|
+
defaultValue: new Date(1900, 0, 1),
|
|
3018
|
+
isDate: true,
|
|
3019
|
+
parse: coerceToDateOnly,
|
|
3020
|
+
parseRawValue: parseRawDateOnly,
|
|
3021
|
+
normalize: function (value) { return value && value.getTime && (new Date(value.getYear(), value.getMonth(), value.getDate())).getTime(); },
|
|
3022
|
+
fmtOData: fmtDateOnly,
|
|
3023
|
+
getNext: getNextDateTime,
|
|
3024
|
+
getConcurrencyValue: getConcurrencyDateTime
|
|
3025
|
+
});
|
|
3026
|
+
DataType.DateTime = new DataType({
|
|
3027
|
+
defaultValue: new Date(1900, 0, 1),
|
|
3028
|
+
isDate: true,
|
|
3029
|
+
parse: coerceToDate,
|
|
3030
|
+
parseRawValue: parseRawDate,
|
|
3031
|
+
normalize: function (value) { return value && value.getTime && value.getTime(); },
|
|
3032
|
+
fmtOData: fmtDateTime,
|
|
3033
|
+
getNext: getNextDateTime,
|
|
3034
|
+
getConcurrencyValue: getConcurrencyDateTime
|
|
3035
|
+
});
|
|
3036
|
+
DataType.DateTimeOffset = new DataType({
|
|
3037
|
+
defaultValue: new Date(1900, 0, 1),
|
|
3038
|
+
isDate: true,
|
|
3039
|
+
parse: coerceToDate,
|
|
3040
|
+
parseRawValue: parseRawDate,
|
|
3041
|
+
normalize: function (value) { return value && value.getTime && value.getTime(); },
|
|
3042
|
+
fmtOData: fmtDateTimeOffset,
|
|
3043
|
+
getNext: getNextDateTime,
|
|
3044
|
+
getConcurrencyValue: getConcurrencyDateTime
|
|
3045
|
+
});
|
|
3046
|
+
DataType.Time = new DataType({
|
|
3047
|
+
defaultValue: "PT0S",
|
|
3048
|
+
fmtOData: fmtTime,
|
|
3049
|
+
parseRawValue: DataType.parseTimeFromServer
|
|
3050
|
+
});
|
|
3051
|
+
DataType.Boolean = new DataType({
|
|
3052
|
+
defaultValue: false,
|
|
3053
|
+
parse: coerceToBool,
|
|
3054
|
+
fmtOData: fmtBoolean
|
|
3055
|
+
});
|
|
3056
|
+
DataType.Guid = new DataType({
|
|
3057
|
+
defaultValue: "00000000-0000-0000-0000-000000000000",
|
|
3058
|
+
parse: coerceToGuid,
|
|
3059
|
+
fmtOData: fmtGuid,
|
|
3060
|
+
getNext: getNextGuid,
|
|
3061
|
+
parseRawValue: function (val) { return val.toLowerCase(); },
|
|
3062
|
+
getConcurrencyValue: core.getUuid
|
|
3063
|
+
});
|
|
3064
|
+
DataType.Binary = new DataType({
|
|
3065
|
+
defaultValue: null,
|
|
3066
|
+
fmtOData: fmtBinary,
|
|
3067
|
+
parseRawValue: parseRawBinary
|
|
3068
|
+
});
|
|
3069
|
+
DataType.Undefined = new DataType({
|
|
3070
|
+
defaultValue: undefined,
|
|
3071
|
+
fmtOData: fmtUndefined
|
|
3072
|
+
});
|
|
3161
3073
|
DataType.prototype._$typeName = "DataType";
|
|
3162
3074
|
Error['x'] = DataType._resetConstants();
|
|
3163
3075
|
Error['x'] = DataType.resolveSymbols();
|
|
@@ -3418,16 +3330,6 @@ function parseRawBinary(val) {
|
|
|
3418
3330
|
EntityState is an 'Enum' containing all of the valid states for an 'Entity'.
|
|
3419
3331
|
**/
|
|
3420
3332
|
class EntityState extends BreezeEnum {
|
|
3421
|
-
/** The 'Unchanged' state. **/
|
|
3422
|
-
static Unchanged = new EntityState();
|
|
3423
|
-
/** The 'Added' state. **/
|
|
3424
|
-
static Added = new EntityState();
|
|
3425
|
-
/** The 'Modified' state. **/
|
|
3426
|
-
static Modified = new EntityState();
|
|
3427
|
-
/** The 'Deleted' state. **/
|
|
3428
|
-
static Deleted = new EntityState();
|
|
3429
|
-
/** The 'Detached' state. **/
|
|
3430
|
-
static Detached = new EntityState();
|
|
3431
3333
|
/**
|
|
3432
3334
|
Returns whether an entityState instance is EntityState.Unchanged.
|
|
3433
3335
|
> var es = anEntity.entityAspect.entityState;
|
|
@@ -3517,6 +3419,16 @@ class EntityState extends BreezeEnum {
|
|
|
3517
3419
|
this === EntityState.Deleted;
|
|
3518
3420
|
}
|
|
3519
3421
|
}
|
|
3422
|
+
/** The 'Unchanged' state. **/
|
|
3423
|
+
EntityState.Unchanged = new EntityState();
|
|
3424
|
+
/** The 'Added' state. **/
|
|
3425
|
+
EntityState.Added = new EntityState();
|
|
3426
|
+
/** The 'Modified' state. **/
|
|
3427
|
+
EntityState.Modified = new EntityState();
|
|
3428
|
+
/** The 'Deleted' state. **/
|
|
3429
|
+
EntityState.Deleted = new EntityState();
|
|
3430
|
+
/** The 'Detached' state. **/
|
|
3431
|
+
EntityState.Detached = new EntityState();
|
|
3520
3432
|
EntityState.prototype._$typeName = "EntityState";
|
|
3521
3433
|
Error['x'] = EntityState.resolveSymbols();
|
|
3522
3434
|
|
|
@@ -3524,30 +3436,6 @@ Error['x'] = EntityState.resolveSymbols();
|
|
|
3524
3436
|
|
|
3525
3437
|
*/
|
|
3526
3438
|
class EntityAction extends BreezeEnum {
|
|
3527
|
-
/** Entity was attached via an AttachEntity call. */
|
|
3528
|
-
static Attach = new EntityAction({ _isAttach: true });
|
|
3529
|
-
/** Entity was attached as a result of a query. */
|
|
3530
|
-
static AttachOnQuery = new EntityAction({ _isAttach: true });
|
|
3531
|
-
/** Entity was attached as a result of an import. */
|
|
3532
|
-
static AttachOnImport = new EntityAction({ _isAttach: true });
|
|
3533
|
-
/** Entity was detached */
|
|
3534
|
-
static Detach = new EntityAction({ _isDetach: true });
|
|
3535
|
-
/** Properties on the entity were merged as a result of a query. */
|
|
3536
|
-
static MergeOnQuery = new EntityAction({ _isModification: true });
|
|
3537
|
-
/** Properties on the entity were merged as a result of an import. */
|
|
3538
|
-
static MergeOnImport = new EntityAction({ _isModification: true });
|
|
3539
|
-
/** Properties on the entity were merged as a result of a save */
|
|
3540
|
-
static MergeOnSave = new EntityAction({ _isModification: true });
|
|
3541
|
-
/** A property on the entity was changed. */
|
|
3542
|
-
static PropertyChange = new EntityAction({ _isModification: true });
|
|
3543
|
-
/** The EntityState of the entity was changed. */
|
|
3544
|
-
static EntityStateChange = new EntityAction();
|
|
3545
|
-
/** AcceptChanges was called on the entity, or its entityState was set to Unmodified. */
|
|
3546
|
-
static AcceptChanges = new EntityAction();
|
|
3547
|
-
/** RejectChanges was called on the entity. */
|
|
3548
|
-
static RejectChanges = new EntityAction({ _isModification: true });
|
|
3549
|
-
/** The EntityManager was cleared. All entities detached. */
|
|
3550
|
-
static Clear = new EntityAction({ _isDetach: true });
|
|
3551
3439
|
/** Is this an 'attach' operation? ( Attach, AttachOnQuery or AttachOnImport) */
|
|
3552
3440
|
isAttach() {
|
|
3553
3441
|
return !!this._isAttach;
|
|
@@ -3561,6 +3449,30 @@ class EntityAction extends BreezeEnum {
|
|
|
3561
3449
|
return !!this._isModification;
|
|
3562
3450
|
}
|
|
3563
3451
|
}
|
|
3452
|
+
/** Entity was attached via an AttachEntity call. */
|
|
3453
|
+
EntityAction.Attach = new EntityAction({ _isAttach: true });
|
|
3454
|
+
/** Entity was attached as a result of a query. */
|
|
3455
|
+
EntityAction.AttachOnQuery = new EntityAction({ _isAttach: true });
|
|
3456
|
+
/** Entity was attached as a result of an import. */
|
|
3457
|
+
EntityAction.AttachOnImport = new EntityAction({ _isAttach: true });
|
|
3458
|
+
/** Entity was detached */
|
|
3459
|
+
EntityAction.Detach = new EntityAction({ _isDetach: true });
|
|
3460
|
+
/** Properties on the entity were merged as a result of a query. */
|
|
3461
|
+
EntityAction.MergeOnQuery = new EntityAction({ _isModification: true });
|
|
3462
|
+
/** Properties on the entity were merged as a result of an import. */
|
|
3463
|
+
EntityAction.MergeOnImport = new EntityAction({ _isModification: true });
|
|
3464
|
+
/** Properties on the entity were merged as a result of a save */
|
|
3465
|
+
EntityAction.MergeOnSave = new EntityAction({ _isModification: true });
|
|
3466
|
+
/** A property on the entity was changed. */
|
|
3467
|
+
EntityAction.PropertyChange = new EntityAction({ _isModification: true });
|
|
3468
|
+
/** The EntityState of the entity was changed. */
|
|
3469
|
+
EntityAction.EntityStateChange = new EntityAction();
|
|
3470
|
+
/** AcceptChanges was called on the entity, or its entityState was set to Unmodified. */
|
|
3471
|
+
EntityAction.AcceptChanges = new EntityAction();
|
|
3472
|
+
/** RejectChanges was called on the entity. */
|
|
3473
|
+
EntityAction.RejectChanges = new EntityAction({ _isModification: true });
|
|
3474
|
+
/** The EntityManager was cleared. All entities detached. */
|
|
3475
|
+
EntityAction.Clear = new EntityAction({ _isDetach: true });
|
|
3564
3476
|
EntityAction.prototype._$typeName = "EntityAction";
|
|
3565
3477
|
Error['x'] = EntityAction.resolveSymbols();
|
|
3566
3478
|
|
|
@@ -3570,19 +3482,6 @@ An EntityKey is an object that represents the unique identity of an entity. Ent
|
|
|
3570
3482
|
|
|
3571
3483
|
**/
|
|
3572
3484
|
class EntityKey {
|
|
3573
|
-
/** @hidden @internal */
|
|
3574
|
-
_$typeName; // actually placed on prototype
|
|
3575
|
-
/** @hidden @internal */
|
|
3576
|
-
static ENTITY_KEY_DELIMITER = ":::";
|
|
3577
|
-
/** The 'EntityType' that this is a key for. __Read Only__ */
|
|
3578
|
-
entityType;
|
|
3579
|
-
/** An array of the values for this key. This will usually only have a single element,
|
|
3580
|
-
unless the entity type has a multipart key. __Read Only__ */
|
|
3581
|
-
values;
|
|
3582
|
-
/** @hidden @internal */
|
|
3583
|
-
_keyInGroup;
|
|
3584
|
-
/** @hidden @internal */
|
|
3585
|
-
_subtypes;
|
|
3586
3485
|
/**
|
|
3587
3486
|
Constructs a new EntityKey. Each entity within an EntityManager will have a unique EntityKey.
|
|
3588
3487
|
> // assume em1 is an EntityManager containing a number of existing entities.
|
|
@@ -3685,6 +3584,8 @@ class EntityKey {
|
|
|
3685
3584
|
return keyValues.join(EntityKey.ENTITY_KEY_DELIMITER);
|
|
3686
3585
|
}
|
|
3687
3586
|
}
|
|
3587
|
+
/** @hidden @internal */
|
|
3588
|
+
EntityKey.ENTITY_KEY_DELIMITER = ":::";
|
|
3688
3589
|
EntityKey.prototype._$typeName = "EntityKey";
|
|
3689
3590
|
|
|
3690
3591
|
/**
|
|
@@ -3694,69 +3595,53 @@ MergeStrategy is an 'Enum' that determines how entities are merged into an Entit
|
|
|
3694
3595
|
@static
|
|
3695
3596
|
**/
|
|
3696
3597
|
class MergeStrategy extends BreezeEnum {
|
|
3697
|
-
/**
|
|
3698
|
-
MergeStrategy.PreserveChanges updates the cached entity with the incoming values unless the cached entity is in a changed
|
|
3699
|
-
state (added, modified, deleted) in which case the incoming values are ignored. The updated cached entity’s EntityState will
|
|
3700
|
-
remain [[EntityState.Unchanged]] unless you’re importing entities in which case the new EntityState will
|
|
3701
|
-
be that of the imported entities.
|
|
3702
|
-
**/
|
|
3703
|
-
static PreserveChanges = new MergeStrategy();
|
|
3704
|
-
/**
|
|
3705
|
-
MergeStrategy.OverwriteChanges always updates the cached entity with incoming values even if the entity is in
|
|
3706
|
-
a changed state (added, modified, deleted). After the merge, the pending changes are lost.
|
|
3707
|
-
The new EntityState will be [[EntityState/Unchanged]] unless you’re importing entities
|
|
3708
|
-
in which case the new EntityState will be that of the imported entities.
|
|
3709
|
-
**/
|
|
3710
|
-
static OverwriteChanges = new MergeStrategy();
|
|
3711
|
-
/**
|
|
3712
|
-
SkipMerge is used to ignore incoming values. Adds the incoming entity to the cache only if there is no cached entity with the same key.
|
|
3713
|
-
This is the fastest merge strategy but your existing cached data will remain “stale”.
|
|
3714
|
-
**/
|
|
3715
|
-
static SkipMerge = new MergeStrategy();
|
|
3716
|
-
/**
|
|
3717
|
-
Disallowed is used to throw an exception if there is an incoming entity with the same key as an entity already in the cache.
|
|
3718
|
-
Use this strategy when you want to be sure that the incoming entity is not already in cache.
|
|
3719
|
-
This is the default strategy for EntityManager.attachEntity.
|
|
3720
|
-
**/
|
|
3721
|
-
static Disallowed = new MergeStrategy();
|
|
3722
3598
|
}
|
|
3599
|
+
/**
|
|
3600
|
+
MergeStrategy.PreserveChanges updates the cached entity with the incoming values unless the cached entity is in a changed
|
|
3601
|
+
state (added, modified, deleted) in which case the incoming values are ignored. The updated cached entity’s EntityState will
|
|
3602
|
+
remain [[EntityState.Unchanged]] unless you’re importing entities in which case the new EntityState will
|
|
3603
|
+
be that of the imported entities.
|
|
3604
|
+
**/
|
|
3605
|
+
MergeStrategy.PreserveChanges = new MergeStrategy();
|
|
3606
|
+
/**
|
|
3607
|
+
MergeStrategy.OverwriteChanges always updates the cached entity with incoming values even if the entity is in
|
|
3608
|
+
a changed state (added, modified, deleted). After the merge, the pending changes are lost.
|
|
3609
|
+
The new EntityState will be [[EntityState/Unchanged]] unless you’re importing entities
|
|
3610
|
+
in which case the new EntityState will be that of the imported entities.
|
|
3611
|
+
**/
|
|
3612
|
+
MergeStrategy.OverwriteChanges = new MergeStrategy();
|
|
3613
|
+
/**
|
|
3614
|
+
SkipMerge is used to ignore incoming values. Adds the incoming entity to the cache only if there is no cached entity with the same key.
|
|
3615
|
+
This is the fastest merge strategy but your existing cached data will remain “stale”.
|
|
3616
|
+
**/
|
|
3617
|
+
MergeStrategy.SkipMerge = new MergeStrategy();
|
|
3618
|
+
/**
|
|
3619
|
+
Disallowed is used to throw an exception if there is an incoming entity with the same key as an entity already in the cache.
|
|
3620
|
+
Use this strategy when you want to be sure that the incoming entity is not already in cache.
|
|
3621
|
+
This is the default strategy for EntityManager.attachEntity.
|
|
3622
|
+
**/
|
|
3623
|
+
MergeStrategy.Disallowed = new MergeStrategy();
|
|
3723
3624
|
MergeStrategy.prototype._$typeName = "MergeStrategy";
|
|
3724
3625
|
Error['x'] = MergeStrategy.resolveSymbols();
|
|
3725
3626
|
/**
|
|
3726
3627
|
FetchStrategy is an 'Enum' that determines how and where entities are retrieved from as a result of a query.
|
|
3727
3628
|
**/
|
|
3728
3629
|
class FetchStrategy extends BreezeEnum {
|
|
3729
|
-
/**
|
|
3730
|
-
FromServer is used to tell the query to execute the query against a remote data source on the server.
|
|
3731
|
-
**/
|
|
3732
|
-
static FromServer = new FetchStrategy();
|
|
3733
|
-
/**
|
|
3734
|
-
FromLocalCache is used to tell the query to execute the query against a local EntityManager instead of going to a remote server.
|
|
3735
|
-
**/
|
|
3736
|
-
static FromLocalCache = new FetchStrategy();
|
|
3737
3630
|
}
|
|
3631
|
+
/**
|
|
3632
|
+
FromServer is used to tell the query to execute the query against a remote data source on the server.
|
|
3633
|
+
**/
|
|
3634
|
+
FetchStrategy.FromServer = new FetchStrategy();
|
|
3635
|
+
/**
|
|
3636
|
+
FromLocalCache is used to tell the query to execute the query against a local EntityManager instead of going to a remote server.
|
|
3637
|
+
**/
|
|
3638
|
+
FetchStrategy.FromLocalCache = new FetchStrategy();
|
|
3738
3639
|
FetchStrategy.prototype._$typeName = "FetchStrategy";
|
|
3739
3640
|
Error['x'] = FetchStrategy.resolveSymbols();
|
|
3740
3641
|
/**
|
|
3741
3642
|
A QueryOptions instance is used to specify the 'options' under which a query will occur.
|
|
3742
3643
|
**/
|
|
3743
3644
|
class QueryOptions {
|
|
3744
|
-
/** @hidden @internal */
|
|
3745
|
-
_$typeName;
|
|
3746
|
-
/** The [[FetchStrategy]] to use with any queries. __Read Only__ */
|
|
3747
|
-
fetchStrategy;
|
|
3748
|
-
/** The [[MergeStrategy]] to use with any queries. __Read Only__ */
|
|
3749
|
-
mergeStrategy;
|
|
3750
|
-
/** Whether to include cached deleted entities in a query result (false by default). __Read Only__ */
|
|
3751
|
-
includeDeleted;
|
|
3752
|
-
/**
|
|
3753
|
-
The default instance for use whenever QueryOptions are not specified.
|
|
3754
|
-
**/
|
|
3755
|
-
static defaultInstance = new QueryOptions({
|
|
3756
|
-
fetchStrategy: FetchStrategy.FromServer,
|
|
3757
|
-
mergeStrategy: MergeStrategy.PreserveChanges,
|
|
3758
|
-
includeDeleted: false
|
|
3759
|
-
});
|
|
3760
3645
|
/**
|
|
3761
3646
|
QueryOptions constructor
|
|
3762
3647
|
> var newQo = new QueryOptions( { mergeStrategy: MergeStrategy.OverwriteChanges });
|
|
@@ -3842,6 +3727,14 @@ class QueryOptions {
|
|
|
3842
3727
|
return obj;
|
|
3843
3728
|
}
|
|
3844
3729
|
}
|
|
3730
|
+
/**
|
|
3731
|
+
The default instance for use whenever QueryOptions are not specified.
|
|
3732
|
+
**/
|
|
3733
|
+
QueryOptions.defaultInstance = new QueryOptions({
|
|
3734
|
+
fetchStrategy: FetchStrategy.FromServer,
|
|
3735
|
+
mergeStrategy: MergeStrategy.PreserveChanges,
|
|
3736
|
+
includeDeleted: false
|
|
3737
|
+
});
|
|
3845
3738
|
QueryOptions.prototype._$typeName = "QueryOptions";
|
|
3846
3739
|
|
|
3847
3740
|
/**
|
|
@@ -4238,7 +4131,6 @@ function updateAliasMap(aliasMap, opStr, op) {
|
|
|
4238
4131
|
@hidden @internal
|
|
4239
4132
|
*/
|
|
4240
4133
|
class PassthruPredicate extends Predicate {
|
|
4241
|
-
value;
|
|
4242
4134
|
constructor(value) {
|
|
4243
4135
|
super();
|
|
4244
4136
|
this.value = value;
|
|
@@ -4250,7 +4142,6 @@ Error['x'] = PassthruPredicate.prototype._initialize('passthruPredicate');
|
|
|
4250
4142
|
@hidden
|
|
4251
4143
|
*/
|
|
4252
4144
|
class UnaryPredicate extends Predicate {
|
|
4253
|
-
pred;
|
|
4254
4145
|
constructor(op, ...args) {
|
|
4255
4146
|
super();
|
|
4256
4147
|
this.op = this._resolveOp(op);
|
|
@@ -4268,10 +4159,6 @@ Error['x'] = UnaryPredicate.prototype._initialize('unaryPredicate', {
|
|
|
4268
4159
|
@hidden
|
|
4269
4160
|
*/
|
|
4270
4161
|
class BinaryPredicate extends Predicate {
|
|
4271
|
-
expr1Source;
|
|
4272
|
-
expr2Source;
|
|
4273
|
-
expr1;
|
|
4274
|
-
expr2;
|
|
4275
4162
|
constructor(op, expr1, expr2) {
|
|
4276
4163
|
super();
|
|
4277
4164
|
// 5 public props op, expr1Source, expr2Source, expr1, expr2
|
|
@@ -4340,7 +4227,6 @@ Error['x'] = BinaryPredicate.prototype._initialize('binaryPredicate', {
|
|
|
4340
4227
|
@hidden
|
|
4341
4228
|
*/
|
|
4342
4229
|
class AndOrPredicate extends Predicate {
|
|
4343
|
-
preds;
|
|
4344
4230
|
constructor(op, preds) {
|
|
4345
4231
|
super();
|
|
4346
4232
|
this.op = this._resolveOp(op);
|
|
@@ -4376,10 +4262,6 @@ Error['x'] = AndOrPredicate.prototype._initialize("andOrPredicate", {
|
|
|
4376
4262
|
@hidden
|
|
4377
4263
|
*/
|
|
4378
4264
|
class AnyAllPredicate extends Predicate {
|
|
4379
|
-
/** @internal */
|
|
4380
|
-
expr;
|
|
4381
|
-
exprSource;
|
|
4382
|
-
pred;
|
|
4383
4265
|
// 4 public props: op, exprSource, expr, pred
|
|
4384
4266
|
constructor(op, expr, pred) {
|
|
4385
4267
|
super();
|
|
@@ -4403,9 +4285,6 @@ Error['x'] = AnyAllPredicate.prototype._initialize("anyAllPredicate", {
|
|
|
4403
4285
|
});
|
|
4404
4286
|
/** @hidden */
|
|
4405
4287
|
class PredicateExpression {
|
|
4406
|
-
visitorMethodName;
|
|
4407
|
-
visit; // TODO
|
|
4408
|
-
dataType;
|
|
4409
4288
|
constructor(visitorMethodName) {
|
|
4410
4289
|
this.visitorMethodName = visitorMethodName;
|
|
4411
4290
|
// give expressions the Predicate prototype method
|
|
@@ -4421,8 +4300,6 @@ class PredicateExpression {
|
|
|
4421
4300
|
@hidden
|
|
4422
4301
|
*/
|
|
4423
4302
|
class LitExpr extends PredicateExpression {
|
|
4424
|
-
value;
|
|
4425
|
-
hasExplicitDataType;
|
|
4426
4303
|
// 2 public props: value, dataType
|
|
4427
4304
|
constructor(value, dataType, hasExplicitDataType) {
|
|
4428
4305
|
super("litExpr");
|
|
@@ -4471,7 +4348,6 @@ function resolveDataType(dataType) {
|
|
|
4471
4348
|
@hidden
|
|
4472
4349
|
*/
|
|
4473
4350
|
class PropExpr extends PredicateExpression {
|
|
4474
|
-
propertyPath;
|
|
4475
4351
|
// two public props: propertyPath, dateType
|
|
4476
4352
|
constructor(propertyPath) {
|
|
4477
4353
|
super('propExpr');
|
|
@@ -4505,9 +4381,6 @@ class PropExpr extends PredicateExpression {
|
|
|
4505
4381
|
@hidden @dynamic
|
|
4506
4382
|
*/
|
|
4507
4383
|
class FnExpr extends PredicateExpression {
|
|
4508
|
-
fnName;
|
|
4509
|
-
exprs;
|
|
4510
|
-
localFn; // TODO:
|
|
4511
4384
|
constructor(fnName, exprs) {
|
|
4512
4385
|
super('fnExpr');
|
|
4513
4386
|
// 4 public props: fnName, exprs, localFn, dataType
|
|
@@ -4531,109 +4404,109 @@ class FnExpr extends PredicateExpression {
|
|
|
4531
4404
|
expr._validate(entityType, usesNameOnServer);
|
|
4532
4405
|
});
|
|
4533
4406
|
}
|
|
4534
|
-
static _funcMap = {
|
|
4535
|
-
toupper: {
|
|
4536
|
-
fn: function (source) {
|
|
4537
|
-
return source.toUpperCase();
|
|
4538
|
-
}, dataType: DataType.String
|
|
4539
|
-
},
|
|
4540
|
-
tolower: {
|
|
4541
|
-
fn: function (source) {
|
|
4542
|
-
return source.toLowerCase();
|
|
4543
|
-
}, dataType: DataType.String
|
|
4544
|
-
},
|
|
4545
|
-
substring: {
|
|
4546
|
-
fn: function (source, pos, length) {
|
|
4547
|
-
return source.substring(pos, length);
|
|
4548
|
-
}, dataType: DataType.String
|
|
4549
|
-
},
|
|
4550
|
-
substringof: {
|
|
4551
|
-
fn: function (find, source) {
|
|
4552
|
-
return source.indexOf(find) >= 0;
|
|
4553
|
-
}, dataType: DataType.Boolean
|
|
4554
|
-
},
|
|
4555
|
-
length: {
|
|
4556
|
-
fn: function (source) {
|
|
4557
|
-
return source.length;
|
|
4558
|
-
}, dataType: DataType.Int32
|
|
4559
|
-
},
|
|
4560
|
-
trim: {
|
|
4561
|
-
fn: function (source) {
|
|
4562
|
-
return source.trim();
|
|
4563
|
-
}, dataType: DataType.String
|
|
4564
|
-
},
|
|
4565
|
-
concat: {
|
|
4566
|
-
fn: function (s1, s2) {
|
|
4567
|
-
return s1.concat(s2);
|
|
4568
|
-
}, dataType: DataType.String
|
|
4569
|
-
},
|
|
4570
|
-
replace: {
|
|
4571
|
-
fn: function (source, find, replace) {
|
|
4572
|
-
return source.replace(find, replace);
|
|
4573
|
-
}, dataType: DataType.String
|
|
4574
|
-
},
|
|
4575
|
-
startswith: {
|
|
4576
|
-
fn: function (source, find) {
|
|
4577
|
-
return core.stringStartsWith(source, find);
|
|
4578
|
-
}, dataType: DataType.Boolean
|
|
4579
|
-
},
|
|
4580
|
-
endswith: {
|
|
4581
|
-
fn: function (source, find) {
|
|
4582
|
-
return core.stringEndsWith(source, find);
|
|
4583
|
-
}, dataType: DataType.Boolean
|
|
4584
|
-
},
|
|
4585
|
-
indexof: {
|
|
4586
|
-
fn: function (source, find) {
|
|
4587
|
-
return source.indexOf(find);
|
|
4588
|
-
}, dataType: DataType.Int32
|
|
4589
|
-
},
|
|
4590
|
-
round: {
|
|
4591
|
-
fn: function (source) {
|
|
4592
|
-
return Math.round(source);
|
|
4593
|
-
}, dataType: DataType.Int32
|
|
4594
|
-
},
|
|
4595
|
-
ceiling: {
|
|
4596
|
-
fn: function (source) {
|
|
4597
|
-
return Math.ceil(source);
|
|
4598
|
-
}, dataType: DataType.Int32
|
|
4599
|
-
},
|
|
4600
|
-
floor: {
|
|
4601
|
-
fn: function (source) {
|
|
4602
|
-
return Math.floor(source);
|
|
4603
|
-
}, dataType: DataType.Int32
|
|
4604
|
-
},
|
|
4605
|
-
second: {
|
|
4606
|
-
fn: function (source) {
|
|
4607
|
-
return source.getSeconds();
|
|
4608
|
-
}, dataType: DataType.Int32
|
|
4609
|
-
},
|
|
4610
|
-
minute: {
|
|
4611
|
-
fn: function (source) {
|
|
4612
|
-
return source.getMinutes();
|
|
4613
|
-
}, dataType: DataType.Int32
|
|
4614
|
-
},
|
|
4615
|
-
hour: {
|
|
4616
|
-
fn: function (source) {
|
|
4617
|
-
return source.getHours();
|
|
4618
|
-
}, dataType: DataType.Int32
|
|
4619
|
-
},
|
|
4620
|
-
day: {
|
|
4621
|
-
fn: function (source) {
|
|
4622
|
-
return source.getDate();
|
|
4623
|
-
}, dataType: DataType.Int32
|
|
4624
|
-
},
|
|
4625
|
-
month: {
|
|
4626
|
-
fn: function (source) {
|
|
4627
|
-
return source.getMonth() + 1;
|
|
4628
|
-
}, dataType: DataType.Int32
|
|
4629
|
-
},
|
|
4630
|
-
year: {
|
|
4631
|
-
fn: function (source) {
|
|
4632
|
-
return source.getFullYear();
|
|
4633
|
-
}, dataType: DataType.Int32
|
|
4634
|
-
}
|
|
4635
|
-
};
|
|
4636
4407
|
}
|
|
4408
|
+
FnExpr._funcMap = {
|
|
4409
|
+
toupper: {
|
|
4410
|
+
fn: function (source) {
|
|
4411
|
+
return source.toUpperCase();
|
|
4412
|
+
}, dataType: DataType.String
|
|
4413
|
+
},
|
|
4414
|
+
tolower: {
|
|
4415
|
+
fn: function (source) {
|
|
4416
|
+
return source.toLowerCase();
|
|
4417
|
+
}, dataType: DataType.String
|
|
4418
|
+
},
|
|
4419
|
+
substring: {
|
|
4420
|
+
fn: function (source, pos, length) {
|
|
4421
|
+
return source.substring(pos, length);
|
|
4422
|
+
}, dataType: DataType.String
|
|
4423
|
+
},
|
|
4424
|
+
substringof: {
|
|
4425
|
+
fn: function (find, source) {
|
|
4426
|
+
return source.indexOf(find) >= 0;
|
|
4427
|
+
}, dataType: DataType.Boolean
|
|
4428
|
+
},
|
|
4429
|
+
length: {
|
|
4430
|
+
fn: function (source) {
|
|
4431
|
+
return source.length;
|
|
4432
|
+
}, dataType: DataType.Int32
|
|
4433
|
+
},
|
|
4434
|
+
trim: {
|
|
4435
|
+
fn: function (source) {
|
|
4436
|
+
return source.trim();
|
|
4437
|
+
}, dataType: DataType.String
|
|
4438
|
+
},
|
|
4439
|
+
concat: {
|
|
4440
|
+
fn: function (s1, s2) {
|
|
4441
|
+
return s1.concat(s2);
|
|
4442
|
+
}, dataType: DataType.String
|
|
4443
|
+
},
|
|
4444
|
+
replace: {
|
|
4445
|
+
fn: function (source, find, replace) {
|
|
4446
|
+
return source.replace(find, replace);
|
|
4447
|
+
}, dataType: DataType.String
|
|
4448
|
+
},
|
|
4449
|
+
startswith: {
|
|
4450
|
+
fn: function (source, find) {
|
|
4451
|
+
return core.stringStartsWith(source, find);
|
|
4452
|
+
}, dataType: DataType.Boolean
|
|
4453
|
+
},
|
|
4454
|
+
endswith: {
|
|
4455
|
+
fn: function (source, find) {
|
|
4456
|
+
return core.stringEndsWith(source, find);
|
|
4457
|
+
}, dataType: DataType.Boolean
|
|
4458
|
+
},
|
|
4459
|
+
indexof: {
|
|
4460
|
+
fn: function (source, find) {
|
|
4461
|
+
return source.indexOf(find);
|
|
4462
|
+
}, dataType: DataType.Int32
|
|
4463
|
+
},
|
|
4464
|
+
round: {
|
|
4465
|
+
fn: function (source) {
|
|
4466
|
+
return Math.round(source);
|
|
4467
|
+
}, dataType: DataType.Int32
|
|
4468
|
+
},
|
|
4469
|
+
ceiling: {
|
|
4470
|
+
fn: function (source) {
|
|
4471
|
+
return Math.ceil(source);
|
|
4472
|
+
}, dataType: DataType.Int32
|
|
4473
|
+
},
|
|
4474
|
+
floor: {
|
|
4475
|
+
fn: function (source) {
|
|
4476
|
+
return Math.floor(source);
|
|
4477
|
+
}, dataType: DataType.Int32
|
|
4478
|
+
},
|
|
4479
|
+
second: {
|
|
4480
|
+
fn: function (source) {
|
|
4481
|
+
return source.getSeconds();
|
|
4482
|
+
}, dataType: DataType.Int32
|
|
4483
|
+
},
|
|
4484
|
+
minute: {
|
|
4485
|
+
fn: function (source) {
|
|
4486
|
+
return source.getMinutes();
|
|
4487
|
+
}, dataType: DataType.Int32
|
|
4488
|
+
},
|
|
4489
|
+
hour: {
|
|
4490
|
+
fn: function (source) {
|
|
4491
|
+
return source.getHours();
|
|
4492
|
+
}, dataType: DataType.Int32
|
|
4493
|
+
},
|
|
4494
|
+
day: {
|
|
4495
|
+
fn: function (source) {
|
|
4496
|
+
return source.getDate();
|
|
4497
|
+
}, dataType: DataType.Int32
|
|
4498
|
+
},
|
|
4499
|
+
month: {
|
|
4500
|
+
fn: function (source) {
|
|
4501
|
+
return source.getMonth() + 1;
|
|
4502
|
+
}, dataType: DataType.Int32
|
|
4503
|
+
},
|
|
4504
|
+
year: {
|
|
4505
|
+
fn: function (source) {
|
|
4506
|
+
return source.getFullYear();
|
|
4507
|
+
}, dataType: DataType.Int32
|
|
4508
|
+
}
|
|
4509
|
+
};
|
|
4637
4510
|
// TODO: add dataTypes for the args next - will help to infer other dataTypes.
|
|
4638
4511
|
let RX_IDENTIFIER = /^[a-z_][\w.$]*$/i;
|
|
4639
4512
|
// comma delimited expressions ignoring commas inside of both single and double quotes.
|
|
@@ -4763,103 +4636,104 @@ function parseFnExpr(source, parts, tokens, exprContext) {
|
|
|
4763
4636
|
throw e;
|
|
4764
4637
|
}
|
|
4765
4638
|
}
|
|
4766
|
-
|
|
4767
|
-
|
|
4768
|
-
|
|
4769
|
-
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
unaryPredicate: function (context) {
|
|
4773
|
-
let predFn = this.pred.visit(context);
|
|
4774
|
-
switch (this.op.key) {
|
|
4775
|
-
case "not":
|
|
4776
|
-
return function (entity) {
|
|
4777
|
-
return !predFn(entity);
|
|
4778
|
-
};
|
|
4779
|
-
default:
|
|
4780
|
-
throw new Error("Invalid unary operator:" + this.op.key);
|
|
4781
|
-
}
|
|
4782
|
-
},
|
|
4783
|
-
binaryPredicate: function (context) {
|
|
4784
|
-
let expr1Fn = this.expr1.visit(context);
|
|
4785
|
-
let expr2Fn = this.expr2.visit(context);
|
|
4786
|
-
let dataType = this.expr1.dataType || this.expr2.dataType;
|
|
4787
|
-
let lqco = context.entityType.metadataStore.localQueryComparisonOptions;
|
|
4788
|
-
let predFn = getBinaryPredicateFn(this, dataType, lqco);
|
|
4789
|
-
if (predFn == null) {
|
|
4790
|
-
throw new Error("Invalid binaryPredicate operator:" + this.op.key);
|
|
4791
|
-
}
|
|
4792
|
-
return function (entity) {
|
|
4793
|
-
return predFn(expr1Fn(entity), expr2Fn(entity));
|
|
4794
|
-
};
|
|
4795
|
-
},
|
|
4796
|
-
andOrPredicate: function (context) {
|
|
4797
|
-
let predFns = this.preds.map((pred) => {
|
|
4798
|
-
return pred.visit(context);
|
|
4799
|
-
});
|
|
4800
|
-
switch (this.op.key) {
|
|
4801
|
-
case "and":
|
|
4802
|
-
return function (entity) {
|
|
4803
|
-
let result = predFns.reduce(function (prev, cur) {
|
|
4804
|
-
return prev && cur(entity);
|
|
4805
|
-
}, true);
|
|
4806
|
-
return result;
|
|
4807
|
-
};
|
|
4808
|
-
case "or":
|
|
4809
|
-
return function (entity) {
|
|
4810
|
-
let result = predFns.reduce(function (prev, cur) {
|
|
4811
|
-
return prev || cur(entity);
|
|
4812
|
-
}, false);
|
|
4813
|
-
return result;
|
|
4814
|
-
};
|
|
4815
|
-
default:
|
|
4816
|
-
throw new Error("Invalid boolean operator:" + this.op.key);
|
|
4817
|
-
}
|
|
4818
|
-
},
|
|
4819
|
-
anyAllPredicate: function (context) {
|
|
4820
|
-
let exprFn = this.expr.visit(context);
|
|
4821
|
-
let newContext = core.extend({}, context);
|
|
4822
|
-
newContext.entityType = this.expr.dataType;
|
|
4823
|
-
let predFn = this.pred.visit(newContext);
|
|
4824
|
-
let anyAllPredFn = getAnyAllPredicateFn(this.op);
|
|
4825
|
-
return function (entity) {
|
|
4826
|
-
return anyAllPredFn(exprFn(entity), predFn);
|
|
4827
|
-
};
|
|
4828
|
-
},
|
|
4829
|
-
litExpr: function () {
|
|
4830
|
-
let value = this.value;
|
|
4831
|
-
return function (entity) {
|
|
4832
|
-
return value;
|
|
4833
|
-
};
|
|
4834
|
-
},
|
|
4835
|
-
propExpr: function () {
|
|
4836
|
-
let propertyPath = this.propertyPath;
|
|
4837
|
-
let properties = propertyPath.split('.');
|
|
4838
|
-
if (properties.length === 1) {
|
|
4639
|
+
const ɵ0$2 = function () {
|
|
4640
|
+
throw new Error("Cannot execute an PassthruPredicate expression against the local cache: " + this.value);
|
|
4641
|
+
}, ɵ1$1 = function (context) {
|
|
4642
|
+
let predFn = this.pred.visit(context);
|
|
4643
|
+
switch (this.op.key) {
|
|
4644
|
+
case "not":
|
|
4839
4645
|
return function (entity) {
|
|
4840
|
-
return entity
|
|
4646
|
+
return !predFn(entity);
|
|
4841
4647
|
};
|
|
4842
|
-
|
|
4843
|
-
|
|
4648
|
+
default:
|
|
4649
|
+
throw new Error("Invalid unary operator:" + this.op.key);
|
|
4650
|
+
}
|
|
4651
|
+
}, ɵ2 = function (context) {
|
|
4652
|
+
let expr1Fn = this.expr1.visit(context);
|
|
4653
|
+
let expr2Fn = this.expr2.visit(context);
|
|
4654
|
+
let dataType = this.expr1.dataType || this.expr2.dataType;
|
|
4655
|
+
let lqco = context.entityType.metadataStore.localQueryComparisonOptions;
|
|
4656
|
+
let predFn = getBinaryPredicateFn(this, dataType, lqco);
|
|
4657
|
+
if (predFn == null) {
|
|
4658
|
+
throw new Error("Invalid binaryPredicate operator:" + this.op.key);
|
|
4659
|
+
}
|
|
4660
|
+
return function (entity) {
|
|
4661
|
+
return predFn(expr1Fn(entity), expr2Fn(entity));
|
|
4662
|
+
};
|
|
4663
|
+
}, ɵ3 = function (context) {
|
|
4664
|
+
let predFns = this.preds.map((pred) => {
|
|
4665
|
+
return pred.visit(context);
|
|
4666
|
+
});
|
|
4667
|
+
switch (this.op.key) {
|
|
4668
|
+
case "and":
|
|
4844
4669
|
return function (entity) {
|
|
4845
|
-
|
|
4670
|
+
let result = predFns.reduce(function (prev, cur) {
|
|
4671
|
+
return prev && cur(entity);
|
|
4672
|
+
}, true);
|
|
4673
|
+
return result;
|
|
4846
4674
|
};
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4675
|
+
case "or":
|
|
4676
|
+
return function (entity) {
|
|
4677
|
+
let result = predFns.reduce(function (prev, cur) {
|
|
4678
|
+
return prev || cur(entity);
|
|
4679
|
+
}, false);
|
|
4680
|
+
return result;
|
|
4681
|
+
};
|
|
4682
|
+
default:
|
|
4683
|
+
throw new Error("Invalid boolean operator:" + this.op.key);
|
|
4684
|
+
}
|
|
4685
|
+
}, ɵ4 = function (context) {
|
|
4686
|
+
let exprFn = this.expr.visit(context);
|
|
4687
|
+
let newContext = core.extend({}, context);
|
|
4688
|
+
newContext.entityType = this.expr.dataType;
|
|
4689
|
+
let predFn = this.pred.visit(newContext);
|
|
4690
|
+
let anyAllPredFn = getAnyAllPredicateFn(this.op);
|
|
4691
|
+
return function (entity) {
|
|
4692
|
+
return anyAllPredFn(exprFn(entity), predFn);
|
|
4693
|
+
};
|
|
4694
|
+
}, ɵ5 = function () {
|
|
4695
|
+
let value = this.value;
|
|
4696
|
+
return function (entity) {
|
|
4697
|
+
return value;
|
|
4698
|
+
};
|
|
4699
|
+
}, ɵ6 = function () {
|
|
4700
|
+
let propertyPath = this.propertyPath;
|
|
4701
|
+
let properties = propertyPath.split('.');
|
|
4702
|
+
if (properties.length === 1) {
|
|
4854
4703
|
return function (entity) {
|
|
4855
|
-
|
|
4856
|
-
|
|
4857
|
-
|
|
4858
|
-
|
|
4859
|
-
|
|
4860
|
-
return
|
|
4704
|
+
return entity.getProperty(propertyPath);
|
|
4705
|
+
};
|
|
4706
|
+
}
|
|
4707
|
+
else {
|
|
4708
|
+
return function (entity) {
|
|
4709
|
+
return EntityAspect.getPropertyPathValue(entity, properties);
|
|
4861
4710
|
};
|
|
4862
4711
|
}
|
|
4712
|
+
}, ɵ7 = function (context) {
|
|
4713
|
+
let exprFns = this.exprs.map(function (expr) {
|
|
4714
|
+
return expr.visit(context);
|
|
4715
|
+
});
|
|
4716
|
+
let that = this;
|
|
4717
|
+
return function (entity) {
|
|
4718
|
+
let values = exprFns.map(function (exprFn) {
|
|
4719
|
+
let value = exprFn(entity);
|
|
4720
|
+
return value;
|
|
4721
|
+
});
|
|
4722
|
+
let result = that.localFn.apply(null, values);
|
|
4723
|
+
return result;
|
|
4724
|
+
};
|
|
4725
|
+
};
|
|
4726
|
+
// toFunctionVisitor
|
|
4727
|
+
let toFunctionVisitor = {
|
|
4728
|
+
isExtended: false,
|
|
4729
|
+
passthruPredicate: ɵ0$2,
|
|
4730
|
+
unaryPredicate: ɵ1$1,
|
|
4731
|
+
binaryPredicate: ɵ2,
|
|
4732
|
+
andOrPredicate: ɵ3,
|
|
4733
|
+
anyAllPredicate: ɵ4,
|
|
4734
|
+
litExpr: ɵ5,
|
|
4735
|
+
propExpr: ɵ6,
|
|
4736
|
+
fnExpr: ɵ7
|
|
4863
4737
|
};
|
|
4864
4738
|
function getAnyAllPredicateFn(op) {
|
|
4865
4739
|
switch (op.key) {
|
|
@@ -4926,12 +4800,12 @@ function getBinaryPredicateFn(binaryPredicate, dataType, lqco) {
|
|
|
4926
4800
|
break;
|
|
4927
4801
|
case 'startswith':
|
|
4928
4802
|
predFn = function (v1, v2) {
|
|
4929
|
-
return stringStartsWith(v1, v2, lqco);
|
|
4803
|
+
return stringStartsWith$1(v1, v2, lqco);
|
|
4930
4804
|
};
|
|
4931
4805
|
break;
|
|
4932
4806
|
case 'endswith':
|
|
4933
4807
|
predFn = function (v1, v2) {
|
|
4934
|
-
return stringEndsWith(v1, v2, lqco);
|
|
4808
|
+
return stringEndsWith$1(v1, v2, lqco);
|
|
4935
4809
|
};
|
|
4936
4810
|
break;
|
|
4937
4811
|
case 'contains':
|
|
@@ -4967,14 +4841,14 @@ function stringEquals(a, b, lqco) {
|
|
|
4967
4841
|
}
|
|
4968
4842
|
return a === b;
|
|
4969
4843
|
}
|
|
4970
|
-
function stringStartsWith(a, b, lqco) {
|
|
4844
|
+
function stringStartsWith$1(a, b, lqco) {
|
|
4971
4845
|
if (!lqco.isCaseSensitive) {
|
|
4972
4846
|
a = (a || "").toLowerCase();
|
|
4973
4847
|
b = (b || "").toLowerCase();
|
|
4974
4848
|
}
|
|
4975
4849
|
return core.stringStartsWith(a, b);
|
|
4976
4850
|
}
|
|
4977
|
-
function stringEndsWith(a, b, lqco) {
|
|
4851
|
+
function stringEndsWith$1(a, b, lqco) {
|
|
4978
4852
|
if (!lqco.isCaseSensitive) {
|
|
4979
4853
|
a = (a || "").toLowerCase();
|
|
4980
4854
|
b = (b || "").toLowerCase();
|
|
@@ -4988,93 +4862,94 @@ function stringContains(a, b, lqco) {
|
|
|
4988
4862
|
}
|
|
4989
4863
|
return a.indexOf(b) >= 0;
|
|
4990
4864
|
}
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
|
|
4994
|
-
|
|
4995
|
-
}
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
}
|
|
5002
|
-
|
|
5003
|
-
|
|
5004
|
-
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
if (this.op.key === "eq") {
|
|
5010
|
-
json[expr1Val] = expr2Val;
|
|
5011
|
-
}
|
|
5012
|
-
else {
|
|
5013
|
-
let value = {};
|
|
5014
|
-
json[expr1Val] = value;
|
|
5015
|
-
value[this.op.key] = expr2Val;
|
|
5016
|
-
}
|
|
5017
|
-
return json;
|
|
5018
|
-
},
|
|
5019
|
-
andOrPredicate: function (context) {
|
|
5020
|
-
let predVals = this.preds.map(function (pred) {
|
|
5021
|
-
return pred.visit(context);
|
|
5022
|
-
});
|
|
5023
|
-
if (!predVals || !predVals.length) {
|
|
5024
|
-
return {};
|
|
5025
|
-
}
|
|
5026
|
-
let json;
|
|
5027
|
-
// normalizeAnd clauses if possible.
|
|
5028
|
-
// passthru predicate will appear as string and their 'ands' can't be 'normalized'
|
|
5029
|
-
if (this.op.key === 'and' && predVals.length === 2 && !predVals.some((v) => v.or || typeof (v) === 'string')) {
|
|
5030
|
-
// normalize 'and' clauses - will return null if can't be combined.
|
|
5031
|
-
json = predVals.reduce(combine);
|
|
5032
|
-
}
|
|
5033
|
-
if (json == null) {
|
|
5034
|
-
json = {};
|
|
5035
|
-
json[this.op.key] = predVals;
|
|
5036
|
-
}
|
|
5037
|
-
return json;
|
|
5038
|
-
},
|
|
5039
|
-
anyAllPredicate: function (context) {
|
|
5040
|
-
let exprVal = this.expr.visit(context);
|
|
5041
|
-
let newContext = core.extend({}, context);
|
|
5042
|
-
newContext.entityType = this.expr.dataType;
|
|
5043
|
-
let predVal = this.pred.visit(newContext);
|
|
5044
|
-
let json = {};
|
|
4865
|
+
const ɵ8 = function () {
|
|
4866
|
+
return this.value;
|
|
4867
|
+
}, ɵ9 = function (context) {
|
|
4868
|
+
let predVal = this.pred.visit(context);
|
|
4869
|
+
let json = {};
|
|
4870
|
+
json[this.op.key] = predVal;
|
|
4871
|
+
return json;
|
|
4872
|
+
}, ɵ10 = function (context) {
|
|
4873
|
+
let expr1Val = this.expr1.visit(context);
|
|
4874
|
+
let expr2Val = this.expr2.visit(context);
|
|
4875
|
+
let json = {};
|
|
4876
|
+
if (this.expr2 instanceof PropExpr) {
|
|
4877
|
+
expr2Val = { value: expr2Val, isProperty: true };
|
|
4878
|
+
}
|
|
4879
|
+
if (this.op.key === "eq") {
|
|
4880
|
+
json[expr1Val] = expr2Val;
|
|
4881
|
+
}
|
|
4882
|
+
else {
|
|
5045
4883
|
let value = {};
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5049
|
-
|
|
5050
|
-
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
|
|
5054
|
-
|
|
5055
|
-
}
|
|
5056
|
-
|
|
5057
|
-
|
|
5058
|
-
|
|
5059
|
-
|
|
5060
|
-
|
|
5061
|
-
if
|
|
5062
|
-
|
|
5063
|
-
|
|
5064
|
-
|
|
5065
|
-
|
|
5066
|
-
|
|
5067
|
-
|
|
5068
|
-
|
|
4884
|
+
json[expr1Val] = value;
|
|
4885
|
+
value[this.op.key] = expr2Val;
|
|
4886
|
+
}
|
|
4887
|
+
return json;
|
|
4888
|
+
}, ɵ11 = function (context) {
|
|
4889
|
+
let predVals = this.preds.map(function (pred) {
|
|
4890
|
+
return pred.visit(context);
|
|
4891
|
+
});
|
|
4892
|
+
if (!predVals || !predVals.length) {
|
|
4893
|
+
return {};
|
|
4894
|
+
}
|
|
4895
|
+
let json;
|
|
4896
|
+
// normalizeAnd clauses if possible.
|
|
4897
|
+
// passthru predicate will appear as string and their 'ands' can't be 'normalized'
|
|
4898
|
+
if (this.op.key === 'and' && predVals.length === 2 && !predVals.some((v) => v.or || typeof (v) === 'string')) {
|
|
4899
|
+
// normalize 'and' clauses - will return null if can't be combined.
|
|
4900
|
+
json = predVals.reduce(combine);
|
|
4901
|
+
}
|
|
4902
|
+
if (json == null) {
|
|
4903
|
+
json = {};
|
|
4904
|
+
json[this.op.key] = predVals;
|
|
4905
|
+
}
|
|
4906
|
+
return json;
|
|
4907
|
+
}, ɵ12 = function (context) {
|
|
4908
|
+
let exprVal = this.expr.visit(context);
|
|
4909
|
+
let newContext = core.extend({}, context);
|
|
4910
|
+
newContext.entityType = this.expr.dataType;
|
|
4911
|
+
let predVal = this.pred.visit(newContext);
|
|
4912
|
+
let json = {};
|
|
4913
|
+
let value = {};
|
|
4914
|
+
value[this.op.key] = predVal;
|
|
4915
|
+
json[exprVal] = value;
|
|
4916
|
+
return json;
|
|
4917
|
+
}, ɵ13 = function (context) {
|
|
4918
|
+
// special handling for DateOnly because it serializes improperly
|
|
4919
|
+
const value = (this.dataType === DataType.DateOnly) ? DataType.toDateOnlyString(this.value) : this.value;
|
|
4920
|
+
if (this.hasExplicitDataType || context.useExplicitDataType) {
|
|
4921
|
+
return { value: value, dataType: this.dataType.name };
|
|
4922
|
+
}
|
|
4923
|
+
else {
|
|
4924
|
+
return value;
|
|
4925
|
+
}
|
|
4926
|
+
}, ɵ14 = function (context) {
|
|
4927
|
+
if (context.toNameOnServer) {
|
|
4928
|
+
if (!context.entityType) {
|
|
4929
|
+
console.warn(`No EntityType for propertyPath "${this.propertyPath}". ${core.strings.TO_TYPE}`);
|
|
5069
4930
|
return this.propertyPath;
|
|
5070
4931
|
}
|
|
5071
|
-
|
|
5072
|
-
fnExpr: function (context) {
|
|
5073
|
-
let exprVals = this.exprs.map(function (expr) {
|
|
5074
|
-
return expr.visit(context);
|
|
5075
|
-
});
|
|
5076
|
-
return this.fnName + "(" + exprVals.join(",") + ")";
|
|
4932
|
+
return context.entityType.clientPropertyPathToServer(this.propertyPath);
|
|
5077
4933
|
}
|
|
4934
|
+
else {
|
|
4935
|
+
return this.propertyPath;
|
|
4936
|
+
}
|
|
4937
|
+
}, ɵ15 = function (context) {
|
|
4938
|
+
let exprVals = this.exprs.map(function (expr) {
|
|
4939
|
+
return expr.visit(context);
|
|
4940
|
+
});
|
|
4941
|
+
return this.fnName + "(" + exprVals.join(",") + ")";
|
|
4942
|
+
};
|
|
4943
|
+
// toJSONVisitor
|
|
4944
|
+
let toJSONVisitor = {
|
|
4945
|
+
passthruPredicate: ɵ8,
|
|
4946
|
+
unaryPredicate: ɵ9,
|
|
4947
|
+
binaryPredicate: ɵ10,
|
|
4948
|
+
andOrPredicate: ɵ11,
|
|
4949
|
+
anyAllPredicate: ɵ12,
|
|
4950
|
+
litExpr: ɵ13,
|
|
4951
|
+
propExpr: ɵ14,
|
|
4952
|
+
fnExpr: ɵ15
|
|
5078
4953
|
};
|
|
5079
4954
|
function combine(j1, j2) {
|
|
5080
4955
|
let ok = Object.keys(j2).every(function (key) {
|
|
@@ -5646,28 +5521,6 @@ class EntityQuery {
|
|
|
5646
5521
|
q = q.where(pred).toType(entityKey.entityType);
|
|
5647
5522
|
return q;
|
|
5648
5523
|
}
|
|
5649
|
-
/**
|
|
5650
|
-
Creates an EntityQuery for the specified entity and [[NavigationProperty]].
|
|
5651
|
-
> // 'employee' is a previously queried employee
|
|
5652
|
-
> let ordersNavProp = employee.entityType.getProperty("Orders");
|
|
5653
|
-
> let query = EntityQuery.fromEntityNavigation(employee, ordersNavProp);
|
|
5654
|
-
|
|
5655
|
-
will return a query for the "Orders" of the specified 'employee'.
|
|
5656
|
-
@param entity - The Entity whose navigation property will be queried.
|
|
5657
|
-
@param navigationProperty - The [[NavigationProperty]] or name of the NavigationProperty to be queried.
|
|
5658
|
-
**/
|
|
5659
|
-
static fromEntityNavigation = function (entity, navigationProperty) {
|
|
5660
|
-
assertParam(entity, "entity").isEntity().check();
|
|
5661
|
-
let navProperty = entity.entityType._checkNavProperty(navigationProperty);
|
|
5662
|
-
let q = new EntityQuery(navProperty.entityType.defaultResourceName);
|
|
5663
|
-
let pred = buildNavigationPredicate(entity, navProperty);
|
|
5664
|
-
if (pred == null) {
|
|
5665
|
-
throw new Error("Unable to create a NavigationQuery for navigationProperty: " + navProperty.name);
|
|
5666
|
-
}
|
|
5667
|
-
q = q.where(pred);
|
|
5668
|
-
let em = entity.entityAspect.entityManager;
|
|
5669
|
-
return em ? q.using(em) : q;
|
|
5670
|
-
};
|
|
5671
5524
|
// protected methods
|
|
5672
5525
|
/** @hidden @internal */
|
|
5673
5526
|
_getFromEntityType(metadataStore, throwErrorIfNotFound) {
|
|
@@ -5739,6 +5592,28 @@ class EntityQuery {
|
|
|
5739
5592
|
return ds.uriBuilder.buildUri(this, em.metadataStore);
|
|
5740
5593
|
}
|
|
5741
5594
|
}
|
|
5595
|
+
/**
|
|
5596
|
+
Creates an EntityQuery for the specified entity and [[NavigationProperty]].
|
|
5597
|
+
> // 'employee' is a previously queried employee
|
|
5598
|
+
> let ordersNavProp = employee.entityType.getProperty("Orders");
|
|
5599
|
+
> let query = EntityQuery.fromEntityNavigation(employee, ordersNavProp);
|
|
5600
|
+
|
|
5601
|
+
will return a query for the "Orders" of the specified 'employee'.
|
|
5602
|
+
@param entity - The Entity whose navigation property will be queried.
|
|
5603
|
+
@param navigationProperty - The [[NavigationProperty]] or name of the NavigationProperty to be queried.
|
|
5604
|
+
**/
|
|
5605
|
+
EntityQuery.fromEntityNavigation = function (entity, navigationProperty) {
|
|
5606
|
+
assertParam(entity, "entity").isEntity().check();
|
|
5607
|
+
let navProperty = entity.entityType._checkNavProperty(navigationProperty);
|
|
5608
|
+
let q = new EntityQuery(navProperty.entityType.defaultResourceName);
|
|
5609
|
+
let pred = buildNavigationPredicate(entity, navProperty);
|
|
5610
|
+
if (pred == null) {
|
|
5611
|
+
throw new Error("Unable to create a NavigationQuery for navigationProperty: " + navProperty.name);
|
|
5612
|
+
}
|
|
5613
|
+
q = q.where(pred);
|
|
5614
|
+
let em = entity.entityAspect.entityManager;
|
|
5615
|
+
return em ? q.using(em) : q;
|
|
5616
|
+
};
|
|
5742
5617
|
EntityQuery.prototype._$typeName = "EntityQuery";
|
|
5743
5618
|
// private functions
|
|
5744
5619
|
function fromJSON(eq, json) {
|
|
@@ -5880,33 +5755,33 @@ FilterQueryOp is an 'Enum' containing all of the valid [[Predicate]]
|
|
|
5880
5755
|
filter operators for an [[EntityQuery]].
|
|
5881
5756
|
**/
|
|
5882
5757
|
class FilterQueryOp extends BreezeEnum {
|
|
5883
|
-
/** Aliases: "eq", "==" **/
|
|
5884
|
-
static Equals = new FilterQueryOp({ operator: "eq" });
|
|
5885
|
-
/** Aliases: "ne", "!=" **/
|
|
5886
|
-
static NotEquals = new FilterQueryOp({ operator: "ne" });
|
|
5887
|
-
/** Aliases: "gt", ">" **/
|
|
5888
|
-
static GreaterThan = new FilterQueryOp({ operator: "gt" });
|
|
5889
|
-
/** Aliases: "lt", "<" **/
|
|
5890
|
-
static LessThan = new FilterQueryOp({ operator: "lt" });
|
|
5891
|
-
/** Aliases: "ge", ">=" **/
|
|
5892
|
-
static GreaterThanOrEqual = new FilterQueryOp({ operator: "ge" });
|
|
5893
|
-
/** Aliases: "le", "<=" **/
|
|
5894
|
-
static LessThanOrEqual = new FilterQueryOp({ operator: "le" });
|
|
5895
|
-
/** String operation: Is a string a substring of another string. Aliases: "substringof" **/
|
|
5896
|
-
static Contains = new FilterQueryOp({ operator: "contains" });
|
|
5897
|
-
/** No aliases */
|
|
5898
|
-
static StartsWith = new FilterQueryOp({ operator: "startswith" });
|
|
5899
|
-
/** No aliases */
|
|
5900
|
-
static EndsWith = new FilterQueryOp({ operator: "endswith" });
|
|
5901
|
-
/** Aliases: "some" **/
|
|
5902
|
-
static Any = new FilterQueryOp({ operator: "any" });
|
|
5903
|
-
/** Aliases: "every" **/
|
|
5904
|
-
static All = new FilterQueryOp({ operator: "all" });
|
|
5905
|
-
/** No aliases */
|
|
5906
|
-
static In = new FilterQueryOp({ operator: "in" });
|
|
5907
|
-
/** No aliases */
|
|
5908
|
-
static IsTypeOf = new FilterQueryOp({ operator: "isof" });
|
|
5909
5758
|
}
|
|
5759
|
+
/** Aliases: "eq", "==" **/
|
|
5760
|
+
FilterQueryOp.Equals = new FilterQueryOp({ operator: "eq" });
|
|
5761
|
+
/** Aliases: "ne", "!=" **/
|
|
5762
|
+
FilterQueryOp.NotEquals = new FilterQueryOp({ operator: "ne" });
|
|
5763
|
+
/** Aliases: "gt", ">" **/
|
|
5764
|
+
FilterQueryOp.GreaterThan = new FilterQueryOp({ operator: "gt" });
|
|
5765
|
+
/** Aliases: "lt", "<" **/
|
|
5766
|
+
FilterQueryOp.LessThan = new FilterQueryOp({ operator: "lt" });
|
|
5767
|
+
/** Aliases: "ge", ">=" **/
|
|
5768
|
+
FilterQueryOp.GreaterThanOrEqual = new FilterQueryOp({ operator: "ge" });
|
|
5769
|
+
/** Aliases: "le", "<=" **/
|
|
5770
|
+
FilterQueryOp.LessThanOrEqual = new FilterQueryOp({ operator: "le" });
|
|
5771
|
+
/** String operation: Is a string a substring of another string. Aliases: "substringof" **/
|
|
5772
|
+
FilterQueryOp.Contains = new FilterQueryOp({ operator: "contains" });
|
|
5773
|
+
/** No aliases */
|
|
5774
|
+
FilterQueryOp.StartsWith = new FilterQueryOp({ operator: "startswith" });
|
|
5775
|
+
/** No aliases */
|
|
5776
|
+
FilterQueryOp.EndsWith = new FilterQueryOp({ operator: "endswith" });
|
|
5777
|
+
/** Aliases: "some" **/
|
|
5778
|
+
FilterQueryOp.Any = new FilterQueryOp({ operator: "any" });
|
|
5779
|
+
/** Aliases: "every" **/
|
|
5780
|
+
FilterQueryOp.All = new FilterQueryOp({ operator: "all" });
|
|
5781
|
+
/** No aliases */
|
|
5782
|
+
FilterQueryOp.In = new FilterQueryOp({ operator: "in" });
|
|
5783
|
+
/** No aliases */
|
|
5784
|
+
FilterQueryOp.IsTypeOf = new FilterQueryOp({ operator: "isof" });
|
|
5910
5785
|
FilterQueryOp.prototype._$typeName = "FilterQueryOp";
|
|
5911
5786
|
Error['x'] = FilterQueryOp.resolveSymbols();
|
|
5912
5787
|
/**
|
|
@@ -5914,10 +5789,10 @@ Error['x'] = FilterQueryOp.resolveSymbols();
|
|
|
5914
5789
|
operators for an [[EntityQuery]].
|
|
5915
5790
|
**/
|
|
5916
5791
|
class BooleanQueryOp extends BreezeEnum {
|
|
5917
|
-
static And = new BooleanQueryOp({ operator: "and" });
|
|
5918
|
-
static Or = new BooleanQueryOp({ operator: "or" });
|
|
5919
|
-
static Not = new BooleanQueryOp({ operator: "not" });
|
|
5920
5792
|
}
|
|
5793
|
+
BooleanQueryOp.And = new BooleanQueryOp({ operator: "and" });
|
|
5794
|
+
BooleanQueryOp.Or = new BooleanQueryOp({ operator: "or" });
|
|
5795
|
+
BooleanQueryOp.Not = new BooleanQueryOp({ operator: "not" });
|
|
5921
5796
|
BooleanQueryOp.prototype._$typeName = "BooleanQueryOp";
|
|
5922
5797
|
Error['x'] = BooleanQueryOp.resolveSymbols();
|
|
5923
5798
|
/** For use by breeze plugin authors only. The class is used in most [[IUriBuilderAdapter]] implementations
|
|
@@ -5938,8 +5813,6 @@ or
|
|
|
5938
5813
|
> let obc = new OrderByClause("Company.CompanyName, LastName", true);
|
|
5939
5814
|
*/
|
|
5940
5815
|
class OrderByClause {
|
|
5941
|
-
/** @hidden @internal */
|
|
5942
|
-
items;
|
|
5943
5816
|
constructor(propertyPaths, isDesc) {
|
|
5944
5817
|
if (propertyPaths.length === 0) {
|
|
5945
5818
|
throw new Error("OrderByClause cannot be empty");
|
|
@@ -5986,9 +5859,6 @@ class OrderByClause {
|
|
|
5986
5859
|
}
|
|
5987
5860
|
/** @hidden @internal */
|
|
5988
5861
|
class OrderByItem {
|
|
5989
|
-
propertyPath;
|
|
5990
|
-
isDesc;
|
|
5991
|
-
lastProperty;
|
|
5992
5862
|
constructor(propertyPath, isDesc) {
|
|
5993
5863
|
if (!(typeof propertyPath === 'string')) {
|
|
5994
5864
|
throw new Error("propertyPath is not a string");
|
|
@@ -6064,9 +5934,6 @@ class OrderByItem {
|
|
|
6064
5934
|
@hidden
|
|
6065
5935
|
**/
|
|
6066
5936
|
class SelectClause {
|
|
6067
|
-
propertyPaths;
|
|
6068
|
-
/** @hidden @internal */
|
|
6069
|
-
_pathNames;
|
|
6070
5937
|
constructor(propertyPaths) {
|
|
6071
5938
|
this.propertyPaths = propertyPaths;
|
|
6072
5939
|
this._pathNames = propertyPaths.map(function (pp) {
|
|
@@ -6102,7 +5969,6 @@ class SelectClause {
|
|
|
6102
5969
|
@hidden
|
|
6103
5970
|
**/
|
|
6104
5971
|
class ExpandClause {
|
|
6105
|
-
propertyPaths;
|
|
6106
5972
|
constructor(propertyPaths) {
|
|
6107
5973
|
this.propertyPaths = propertyPaths;
|
|
6108
5974
|
}
|
|
@@ -6128,96 +5994,53 @@ a query, import or [[EntityManager.createEntity]] call.
|
|
|
6128
5994
|
|
|
6129
5995
|
**/
|
|
6130
5996
|
class EntityAspect {
|
|
6131
|
-
/** The Entity that this aspect is associated with. __Read Only__ **/
|
|
6132
|
-
entity;
|
|
6133
|
-
/** The [[EntityManager]] that contains this entity. __Read Only__ **/
|
|
6134
|
-
entityManager;
|
|
6135
|
-
/** @hidden @internal */
|
|
6136
|
-
entityGroup;
|
|
6137
|
-
/** The [[EntityState]] of this entity. __Read Only__ **/
|
|
6138
|
-
entityState;
|
|
6139
|
-
/** Whether this entity is in the process of being saved. __Read Only__ */
|
|
6140
|
-
isBeingSaved;
|
|
6141
|
-
/** The 'original values' of this entity where they are different from the 'current values'.
|
|
6142
|
-
This is a map where the key is a property name and the value is the 'original value' of the property. */
|
|
6143
|
-
originalValues;
|
|
6144
|
-
/** Whether this entity has any validation errors. __Read Only__ */
|
|
6145
|
-
hasValidationErrors;
|
|
6146
|
-
/** Whether this entity has a temporary [[EntityKey]]. */
|
|
6147
|
-
hasTempKey;
|
|
6148
|
-
/** Whether this entity was created by being loaded from the database */
|
|
6149
|
-
wasLoaded;
|
|
6150
|
-
/** Extra metadata about this entity such as the entity's etag.
|
|
6151
|
-
You may extend this object with your own metadata information.
|
|
6152
|
-
Breeze (de)serializes this object when importing/exporting the entity. **/
|
|
6153
|
-
extraMetadata;
|
|
6154
|
-
/**
|
|
6155
|
-
A [[BreezeEvent]] that fires whenever any of the validation errors on this entity change.
|
|
6156
|
-
Note that this might be the removal of an error when some data on the entity is fixed.
|
|
6157
|
-
@eventArgs -
|
|
6158
|
-
- entity - The entity on which the validation errors are being added or removed.
|
|
6159
|
-
- added - An array containing any newly added [[ValidationError]]s
|
|
6160
|
-
- removed - An array containing any newly removed [[ValidationError]]s. This is those
|
|
6161
|
-
errors that have been 'fixed'.
|
|
6162
|
-
|
|
6163
|
-
> // assume order is an order entity attached to an EntityManager.
|
|
6164
|
-
> order.entityAspect.validationErrorsChanged.subscribe(
|
|
6165
|
-
> function (validationChangeArgs) {
|
|
6166
|
-
> // this code will be executed anytime a property value changes on the 'order' entity.
|
|
6167
|
-
> var entity == validationChangeArgs.entity; // Note: entity === order
|
|
6168
|
-
> var errorsAdded = validationChangeArgs.added;
|
|
6169
|
-
> var errorsCleared = validationChangeArgs.removed;
|
|
6170
|
-
> });
|
|
6171
|
-
@event
|
|
6172
|
-
**/
|
|
6173
|
-
validationErrorsChanged;
|
|
6174
|
-
/**
|
|
6175
|
-
A [[BreezeEvent]] that fires whenever a value of one of this entity's properties change.
|
|
6176
|
-
@eventArgs -
|
|
6177
|
-
- entity - The entity whose property has changed.
|
|
6178
|
-
- property - The [[DataProperty]] that changed.
|
|
6179
|
-
- propertyName - The name of the property that changed. This value will be 'null' for operations that replace the entire entity. This includes
|
|
6180
|
-
queries, imports and saves that require a merge. The remaining parameters will not exist in this case either. This will actually be a "property path"
|
|
6181
|
-
for any properties of a complex type.
|
|
6182
|
-
- oldValue - The old value of this property before the change.
|
|
6183
|
-
- newValue - The new value of this property after the change.
|
|
6184
|
-
- parent - The immediate parent object for the changed property. This will be a ComplexType instance as opposed to an Entity
|
|
6185
|
-
for any complex type or nested complex type properties.
|
|
6186
|
-
|
|
6187
|
-
> // assume order is an order entity attached to an EntityManager.
|
|
6188
|
-
> order.entityAspect.propertyChanged.subscribe(
|
|
6189
|
-
> function (propertyChangedArgs) {
|
|
6190
|
-
> // this code will be executed anytime a property value changes on the 'order' entity.
|
|
6191
|
-
> var entity = propertyChangedArgs.entity; // Note: entity === order
|
|
6192
|
-
> var propertyNameChanged = propertyChangedArgs.propertyName;
|
|
6193
|
-
> var oldValue = propertyChangedArgs.oldValue;
|
|
6194
|
-
> var newValue = propertyChangedArgs.newValue;
|
|
6195
|
-
> });
|
|
6196
|
-
@event
|
|
6197
|
-
**/
|
|
6198
|
-
propertyChanged;
|
|
6199
|
-
/** @hidden @internal */
|
|
6200
|
-
_validationErrors;
|
|
6201
|
-
/** @hidden @internal */
|
|
6202
|
-
_pendingValidationResult;
|
|
6203
|
-
/** @hidden @internal */
|
|
6204
|
-
_entityKey;
|
|
6205
|
-
/** @hidden @internal */
|
|
6206
|
-
_loadedNps;
|
|
6207
|
-
/** @hidden @internal */
|
|
6208
|
-
_initialized;
|
|
6209
|
-
/** @hidden @internal */
|
|
6210
|
-
_inProcess; // used in defaultPropertyInterceptor for temp storage.
|
|
6211
|
-
/** @hidden @internal */
|
|
6212
|
-
_inProcessEntity; // used in EntityManager
|
|
6213
|
-
/** @hidden @internal */
|
|
6214
|
-
static _nullInstance = new EntityAspect(); // TODO: determine if this works
|
|
6215
5997
|
/** @hidden @internal */
|
|
6216
5998
|
constructor(entity) {
|
|
6217
5999
|
// if called without new
|
|
6218
6000
|
// if (!(this instanceof EntityAspect)) {
|
|
6219
6001
|
// return new EntityAspect(entity);
|
|
6220
6002
|
// }
|
|
6003
|
+
/**
|
|
6004
|
+
Sets the entity to an EntityState of 'Unchanged'. This is also the equivalent of calling [[EntityAspect.acceptChanges]].
|
|
6005
|
+
The same operation can be performed by calling [[EntityAspect.setEntityState]].
|
|
6006
|
+
> // assume order is an order entity attached to an EntityManager.
|
|
6007
|
+
> order.entityAspect.setUnchanged();
|
|
6008
|
+
> // The 'order' entity will now be in an 'Unchanged' state with any changes committed.
|
|
6009
|
+
**/
|
|
6010
|
+
this.setUnchanged = function () {
|
|
6011
|
+
return this.setEntityState(EntityState.Unchanged);
|
|
6012
|
+
};
|
|
6013
|
+
/**
|
|
6014
|
+
Sets the entity to an EntityState of 'Modified'. This can also be achieved by changing the value of any property on an 'Unchanged' entity.
|
|
6015
|
+
The same operation can be performed by calling [[EntityAspect.setEntityState]].
|
|
6016
|
+
> // assume order is an order entity attached to an EntityManager.
|
|
6017
|
+
> order.entityAspect.setModified();
|
|
6018
|
+
> // The 'order' entity will now be in a 'Modified' state.
|
|
6019
|
+
**/
|
|
6020
|
+
this.setModified = function () {
|
|
6021
|
+
return this.setEntityState(EntityState.Modified);
|
|
6022
|
+
};
|
|
6023
|
+
/**
|
|
6024
|
+
Sets the entity to an EntityState of 'Deleted'. This both marks the entity as being scheduled for deletion during the next 'Save' call
|
|
6025
|
+
but also removes the entity from all of its related entities. If the current entityState is 'Added', then `setDeleted()` will mark it 'Detached'
|
|
6026
|
+
The same operation can be performed by calling [[EntityAspect.setEntityState]].
|
|
6027
|
+
> // assume order is an order entity attached to an EntityManager.
|
|
6028
|
+
> order.entityAspect.setDeleted();
|
|
6029
|
+
> // The 'order' entity will now be in a 'Deleted' state and it will no longer have any 'related' entities.
|
|
6030
|
+
**/
|
|
6031
|
+
this.setDeleted = function () {
|
|
6032
|
+
return this.setEntityState(EntityState.Deleted);
|
|
6033
|
+
};
|
|
6034
|
+
/**
|
|
6035
|
+
Sets the entity to an EntityState of 'Detached'. This removes the entity from all of its related entities, but does NOT change the EntityState of any existing entities.
|
|
6036
|
+
The same operation can be performed by calling [[EntityAspect.setEntityState]].
|
|
6037
|
+
> // assume order is an order entity attached to an EntityManager.
|
|
6038
|
+
> order.entityAspect.setDetached();
|
|
6039
|
+
> // The 'order' entity will now be in a 'Detached' state and it will no longer have any 'related' entities.
|
|
6040
|
+
**/
|
|
6041
|
+
this.setDetached = function () {
|
|
6042
|
+
return this.setEntityState(EntityState.Detached);
|
|
6043
|
+
};
|
|
6221
6044
|
this.entity = entity;
|
|
6222
6045
|
// TODO: keep public or not?
|
|
6223
6046
|
this.entityGroup = undefined;
|
|
@@ -6378,47 +6201,6 @@ class EntityAspect {
|
|
|
6378
6201
|
return this.setEntityState(EntityState.Added);
|
|
6379
6202
|
}
|
|
6380
6203
|
/**
|
|
6381
|
-
Sets the entity to an EntityState of 'Unchanged'. This is also the equivalent of calling [[EntityAspect.acceptChanges]].
|
|
6382
|
-
The same operation can be performed by calling [[EntityAspect.setEntityState]].
|
|
6383
|
-
> // assume order is an order entity attached to an EntityManager.
|
|
6384
|
-
> order.entityAspect.setUnchanged();
|
|
6385
|
-
> // The 'order' entity will now be in an 'Unchanged' state with any changes committed.
|
|
6386
|
-
**/
|
|
6387
|
-
setUnchanged = function () {
|
|
6388
|
-
return this.setEntityState(EntityState.Unchanged);
|
|
6389
|
-
};
|
|
6390
|
-
/**
|
|
6391
|
-
Sets the entity to an EntityState of 'Modified'. This can also be achieved by changing the value of any property on an 'Unchanged' entity.
|
|
6392
|
-
The same operation can be performed by calling [[EntityAspect.setEntityState]].
|
|
6393
|
-
> // assume order is an order entity attached to an EntityManager.
|
|
6394
|
-
> order.entityAspect.setModified();
|
|
6395
|
-
> // The 'order' entity will now be in a 'Modified' state.
|
|
6396
|
-
**/
|
|
6397
|
-
setModified = function () {
|
|
6398
|
-
return this.setEntityState(EntityState.Modified);
|
|
6399
|
-
};
|
|
6400
|
-
/**
|
|
6401
|
-
Sets the entity to an EntityState of 'Deleted'. This both marks the entity as being scheduled for deletion during the next 'Save' call
|
|
6402
|
-
but also removes the entity from all of its related entities. If the current entityState is 'Added', then `setDeleted()` will mark it 'Detached'
|
|
6403
|
-
The same operation can be performed by calling [[EntityAspect.setEntityState]].
|
|
6404
|
-
> // assume order is an order entity attached to an EntityManager.
|
|
6405
|
-
> order.entityAspect.setDeleted();
|
|
6406
|
-
> // The 'order' entity will now be in a 'Deleted' state and it will no longer have any 'related' entities.
|
|
6407
|
-
**/
|
|
6408
|
-
setDeleted = function () {
|
|
6409
|
-
return this.setEntityState(EntityState.Deleted);
|
|
6410
|
-
};
|
|
6411
|
-
/**
|
|
6412
|
-
Sets the entity to an EntityState of 'Detached'. This removes the entity from all of its related entities, but does NOT change the EntityState of any existing entities.
|
|
6413
|
-
The same operation can be performed by calling [[EntityAspect.setEntityState]].
|
|
6414
|
-
> // assume order is an order entity attached to an EntityManager.
|
|
6415
|
-
> order.entityAspect.setDetached();
|
|
6416
|
-
> // The 'order' entity will now be in a 'Detached' state and it will no longer have any 'related' entities.
|
|
6417
|
-
**/
|
|
6418
|
-
setDetached = function () {
|
|
6419
|
-
return this.setEntityState(EntityState.Detached);
|
|
6420
|
-
};
|
|
6421
|
-
/**
|
|
6422
6204
|
Sets the entity to the specified EntityState. See also 'setUnchanged', 'setModified', 'setDetached', etc.
|
|
6423
6205
|
> // assume order is an order entity attached to an EntityManager.
|
|
6424
6206
|
> order.entityAspect.setEntityState(EntityState.Unchanged);
|
|
@@ -6435,12 +6217,12 @@ class EntityAspect {
|
|
|
6435
6217
|
let em = this.entityManager;
|
|
6436
6218
|
let needsSave = true;
|
|
6437
6219
|
if (entityState === EntityState.Unchanged) {
|
|
6438
|
-
clearOriginalValues
|
|
6220
|
+
clearOriginalValues(entity);
|
|
6439
6221
|
delete this.hasTempKey;
|
|
6440
6222
|
needsSave = false;
|
|
6441
6223
|
}
|
|
6442
6224
|
else if (entityState === EntityState.Added) {
|
|
6443
|
-
clearOriginalValues
|
|
6225
|
+
clearOriginalValues(entity);
|
|
6444
6226
|
// TODO: more to do here... like regenerating key ???
|
|
6445
6227
|
}
|
|
6446
6228
|
else if (entityState === EntityState.Deleted) {
|
|
@@ -6781,6 +6563,8 @@ class EntityAspect {
|
|
|
6781
6563
|
}
|
|
6782
6564
|
}
|
|
6783
6565
|
}
|
|
6566
|
+
/** @hidden @internal */
|
|
6567
|
+
EntityAspect._nullInstance = new EntityAspect(); // TODO: determine if this works
|
|
6784
6568
|
BreezeEvent.bubbleEvent(EntityAspect.prototype, function () {
|
|
6785
6569
|
return this.entityManager;
|
|
6786
6570
|
});
|
|
@@ -6914,17 +6698,6 @@ entity via either a query, import or EntityManager.createEntity call.
|
|
|
6914
6698
|
> // aCustomer === aspect.parent;
|
|
6915
6699
|
**/
|
|
6916
6700
|
class ComplexAspect {
|
|
6917
|
-
/** The complex object that this aspect is associated with. __Read Only__ */
|
|
6918
|
-
complexObject;
|
|
6919
|
-
/** The 'original values' of this complex object where they are different from the 'current values'.
|
|
6920
|
-
This is a map where the key is a property name and the value is the 'original value' of the property.
|
|
6921
|
-
__Read Only__ */
|
|
6922
|
-
originalValues;
|
|
6923
|
-
/** The parent object that to which this aspect belongs; this will either be an entity or another complex object. __Read Only__ */
|
|
6924
|
-
parent;
|
|
6925
|
-
/** The [[DataProperty]] on the 'parent' that contains this complex object. __Read Only__ */
|
|
6926
|
-
parentProperty;
|
|
6927
|
-
extraMetadata;
|
|
6928
6701
|
/** You will rarely, if ever, create a ComplexAspect directly. */
|
|
6929
6702
|
constructor(complexObject, parent, parentProperty) {
|
|
6930
6703
|
if (!complexObject) {
|
|
@@ -6984,18 +6757,18 @@ class ComplexAspect {
|
|
|
6984
6757
|
return aspect.getPropertyPath(this.parentProperty.name + "." + propName);
|
|
6985
6758
|
}
|
|
6986
6759
|
}
|
|
6987
|
-
function clearOriginalValues
|
|
6760
|
+
function clearOriginalValues(target) {
|
|
6988
6761
|
let aspect = target.entityAspect || target.complexAspect;
|
|
6989
6762
|
aspect.originalValues = {};
|
|
6990
6763
|
let stype = target.entityType || target.complexType;
|
|
6991
6764
|
stype.complexProperties.forEach(function (cp) {
|
|
6992
6765
|
let cos = target.getProperty(cp.name);
|
|
6993
6766
|
if (cp.isScalar) {
|
|
6994
|
-
clearOriginalValues
|
|
6767
|
+
clearOriginalValues(cos);
|
|
6995
6768
|
}
|
|
6996
6769
|
else {
|
|
6997
6770
|
cos._acceptChanges();
|
|
6998
|
-
cos.forEach(clearOriginalValues
|
|
6771
|
+
cos.forEach(clearOriginalValues);
|
|
6999
6772
|
}
|
|
7000
6773
|
});
|
|
7001
6774
|
}
|
|
@@ -7008,14 +6781,6 @@ The default NamingConvention does not perform any translation, it simply passes
|
|
|
7008
6781
|
@dynamic
|
|
7009
6782
|
**/
|
|
7010
6783
|
class NamingConvention {
|
|
7011
|
-
/** @hidden @internal */
|
|
7012
|
-
_$typeName;
|
|
7013
|
-
/** The name of this NamingConvention. __Read Only__ */
|
|
7014
|
-
name;
|
|
7015
|
-
/** Function that takes a server property name add converts it into a client side property name. __Read Only__ */
|
|
7016
|
-
serverPropertyNameToClient;
|
|
7017
|
-
/** Function that takes a client property name add converts it into a server side property name. __Read Only__ */
|
|
7018
|
-
clientPropertyNameToServer;
|
|
7019
6784
|
/**
|
|
7020
6785
|
NamingConvention constructor
|
|
7021
6786
|
> // A naming convention that converts the first character of every property name to uppercase on the server
|
|
@@ -7043,38 +6808,6 @@ class NamingConvention {
|
|
|
7043
6808
|
config._storeObject(this, "NamingConvention", this.name);
|
|
7044
6809
|
}
|
|
7045
6810
|
/**
|
|
7046
|
-
|
|
7047
|
-
|
|
7048
|
-
/**
|
|
7049
|
-
A noop naming convention - This is the default unless another is specified.
|
|
7050
|
-
**/
|
|
7051
|
-
static none = new NamingConvention({
|
|
7052
|
-
name: "noChange",
|
|
7053
|
-
serverPropertyNameToClient: (serverPropertyName) => {
|
|
7054
|
-
return serverPropertyName;
|
|
7055
|
-
},
|
|
7056
|
-
clientPropertyNameToServer: (clientPropertyName) => {
|
|
7057
|
-
return clientPropertyName;
|
|
7058
|
-
}
|
|
7059
|
-
});
|
|
7060
|
-
/**
|
|
7061
|
-
The "camelCase" naming convention - This implementation only lowercases the first character of the server property name
|
|
7062
|
-
but leaves the rest of the property name intact. If a more complicated version is needed then one should be created via the ctor.
|
|
7063
|
-
**/
|
|
7064
|
-
static camelCase = new NamingConvention({
|
|
7065
|
-
name: "camelCase",
|
|
7066
|
-
serverPropertyNameToClient: (serverPropertyName) => {
|
|
7067
|
-
return serverPropertyName.substr(0, 1).toLowerCase() + serverPropertyName.substr(1);
|
|
7068
|
-
},
|
|
7069
|
-
clientPropertyNameToServer: (clientPropertyName) => {
|
|
7070
|
-
return clientPropertyName.substr(0, 1).toUpperCase() + clientPropertyName.substr(1);
|
|
7071
|
-
}
|
|
7072
|
-
});
|
|
7073
|
-
/**
|
|
7074
|
-
The default value whenever NamingConventions are not specified.
|
|
7075
|
-
**/
|
|
7076
|
-
static defaultInstance = new NamingConvention(NamingConvention.none);
|
|
7077
|
-
/**
|
|
7078
6811
|
Sets the 'defaultInstance' by creating a copy of the current 'defaultInstance' and then applying all of the properties of the current instance.
|
|
7079
6812
|
The current instance is returned unchanged.
|
|
7080
6813
|
> var namingConv = new NamingConvention({
|
|
@@ -7091,6 +6824,38 @@ class NamingConvention {
|
|
|
7091
6824
|
return core.setAsDefault(this, NamingConvention);
|
|
7092
6825
|
}
|
|
7093
6826
|
}
|
|
6827
|
+
/**
|
|
6828
|
+
|
|
6829
|
+
|
|
6830
|
+
/**
|
|
6831
|
+
A noop naming convention - This is the default unless another is specified.
|
|
6832
|
+
**/
|
|
6833
|
+
NamingConvention.none = new NamingConvention({
|
|
6834
|
+
name: "noChange",
|
|
6835
|
+
serverPropertyNameToClient: (serverPropertyName) => {
|
|
6836
|
+
return serverPropertyName;
|
|
6837
|
+
},
|
|
6838
|
+
clientPropertyNameToServer: (clientPropertyName) => {
|
|
6839
|
+
return clientPropertyName;
|
|
6840
|
+
}
|
|
6841
|
+
});
|
|
6842
|
+
/**
|
|
6843
|
+
The "camelCase" naming convention - This implementation only lowercases the first character of the server property name
|
|
6844
|
+
but leaves the rest of the property name intact. If a more complicated version is needed then one should be created via the ctor.
|
|
6845
|
+
**/
|
|
6846
|
+
NamingConvention.camelCase = new NamingConvention({
|
|
6847
|
+
name: "camelCase",
|
|
6848
|
+
serverPropertyNameToClient: (serverPropertyName) => {
|
|
6849
|
+
return serverPropertyName.substr(0, 1).toLowerCase() + serverPropertyName.substr(1);
|
|
6850
|
+
},
|
|
6851
|
+
clientPropertyNameToServer: (clientPropertyName) => {
|
|
6852
|
+
return clientPropertyName.substr(0, 1).toUpperCase() + clientPropertyName.substr(1);
|
|
6853
|
+
}
|
|
6854
|
+
});
|
|
6855
|
+
/**
|
|
6856
|
+
The default value whenever NamingConventions are not specified.
|
|
6857
|
+
**/
|
|
6858
|
+
NamingConvention.defaultInstance = new NamingConvention(NamingConvention.none);
|
|
7094
6859
|
NamingConvention.prototype._$typeName = "NamingConvention";
|
|
7095
6860
|
|
|
7096
6861
|
const RX_COLLECTION = /Collection\((.*)\)/;
|
|
@@ -7483,16 +7248,6 @@ The default LocalQueryComparisonOptions stipulates 'caseInsensitive" queries wit
|
|
|
7483
7248
|
length strings.
|
|
7484
7249
|
**/
|
|
7485
7250
|
class LocalQueryComparisonOptions {
|
|
7486
|
-
/** @hidden @internal */
|
|
7487
|
-
_$typeName; // on prototype
|
|
7488
|
-
/** The name for this instance. */
|
|
7489
|
-
name;
|
|
7490
|
-
/** Whether predicates that involve strings will be interpreted in a "caseSensitive" manner. (default = false). */
|
|
7491
|
-
isCaseSensitive;
|
|
7492
|
-
/* Whether or not to enforce the ANSI SQL standard
|
|
7493
|
-
of padding strings of unequal lengths before comparison with spaces. Note that per the standard, padding only occurs with equality and
|
|
7494
|
-
inequality predicates, and not with operations like 'startsWith', 'endsWith' or 'contains'. Default is true. */
|
|
7495
|
-
usesSql92CompliantStringComparison;
|
|
7496
7251
|
/**
|
|
7497
7252
|
LocalQueryComparisonOptions constructor
|
|
7498
7253
|
> // create a 'caseSensitive - non SQL' instance.
|
|
@@ -7520,18 +7275,6 @@ class LocalQueryComparisonOptions {
|
|
|
7520
7275
|
config._storeObject(this, "LocalQueryComparisonOptions", this.name);
|
|
7521
7276
|
}
|
|
7522
7277
|
/**
|
|
7523
|
-
Case insensitive SQL compliant options - this is also the default unless otherwise changed.
|
|
7524
|
-
**/
|
|
7525
|
-
static caseInsensitiveSQL = new LocalQueryComparisonOptions({
|
|
7526
|
-
name: "caseInsensitiveSQL",
|
|
7527
|
-
isCaseSensitive: false,
|
|
7528
|
-
usesSql92CompliantStringComparison: true
|
|
7529
|
-
});
|
|
7530
|
-
/**
|
|
7531
|
-
The default value whenever LocalQueryComparisonOptions are not specified. By default this is 'caseInsensitiveSQL'.
|
|
7532
|
-
**/
|
|
7533
|
-
static defaultInstance = new LocalQueryComparisonOptions(LocalQueryComparisonOptions.caseInsensitiveSQL);
|
|
7534
|
-
/**
|
|
7535
7278
|
Sets the 'defaultInstance' by creating a copy of the current 'defaultInstance' and then applying all of the properties of the current instance.
|
|
7536
7279
|
The current instance is returned unchanged.
|
|
7537
7280
|
> var lqco = new LocalQueryComparisonOptions({
|
|
@@ -7544,6 +7287,18 @@ class LocalQueryComparisonOptions {
|
|
|
7544
7287
|
return core.setAsDefault(this, LocalQueryComparisonOptions);
|
|
7545
7288
|
}
|
|
7546
7289
|
}
|
|
7290
|
+
/**
|
|
7291
|
+
Case insensitive SQL compliant options - this is also the default unless otherwise changed.
|
|
7292
|
+
**/
|
|
7293
|
+
LocalQueryComparisonOptions.caseInsensitiveSQL = new LocalQueryComparisonOptions({
|
|
7294
|
+
name: "caseInsensitiveSQL",
|
|
7295
|
+
isCaseSensitive: false,
|
|
7296
|
+
usesSql92CompliantStringComparison: true
|
|
7297
|
+
});
|
|
7298
|
+
/**
|
|
7299
|
+
The default value whenever LocalQueryComparisonOptions are not specified. By default this is 'caseInsensitiveSQL'.
|
|
7300
|
+
**/
|
|
7301
|
+
LocalQueryComparisonOptions.defaultInstance = new LocalQueryComparisonOptions(LocalQueryComparisonOptions.caseInsensitiveSQL);
|
|
7547
7302
|
LocalQueryComparisonOptions.prototype._$typeName = "LocalQueryComparisonOptions";
|
|
7548
7303
|
|
|
7549
7304
|
/** @hidden @internal */
|
|
@@ -8007,52 +7762,6 @@ explicit MetadataStore, the MetadataStore from the MetadataStore.defaultInstance
|
|
|
8007
7762
|
@dynamic
|
|
8008
7763
|
**/
|
|
8009
7764
|
class MetadataStore {
|
|
8010
|
-
/** @hidden @internal */
|
|
8011
|
-
static __id = 0;
|
|
8012
|
-
/** @hidden @internal */
|
|
8013
|
-
static ANONTYPE_PREFIX = "_IB_";
|
|
8014
|
-
/** The version of any MetadataStores created by this class */
|
|
8015
|
-
static metadataVersion = '1.0.5';
|
|
8016
|
-
name;
|
|
8017
|
-
dataServices;
|
|
8018
|
-
/** The [[NamingConvention]] associated with this MetadataStore. __Read Only__ */
|
|
8019
|
-
namingConvention;
|
|
8020
|
-
/** The [[LocalQueryComparisonOptions]] associated with this MetadataStore. __Read Only__ */
|
|
8021
|
-
localQueryComparisonOptions;
|
|
8022
|
-
serializerFn;
|
|
8023
|
-
/**
|
|
8024
|
-
An [[BreezeEvent]] that fires after a MetadataStore has completed fetching metadata from a remote service.
|
|
8025
|
-
|
|
8026
|
-
@eventArgs -
|
|
8027
|
-
- metadataStore - The MetadataStore into which the metadata was fetched.
|
|
8028
|
-
- dataService - The [[DataService]] that metadata was fetched from.
|
|
8029
|
-
- rawMetadata - {Object} The raw metadata returned from the service. (It will have already been processed by this point).
|
|
8030
|
-
> let ms = myEntityManager.metadataStore;
|
|
8031
|
-
> ms.metadataFetched.subscribe(function(args) {
|
|
8032
|
-
> let metadataStore = args.metadataStore;
|
|
8033
|
-
> let dataService = args.dataService;
|
|
8034
|
-
> });
|
|
8035
|
-
@event
|
|
8036
|
-
**/
|
|
8037
|
-
metadataFetched;
|
|
8038
|
-
/** @hidden @internal */
|
|
8039
|
-
_resourceEntityTypeMap;
|
|
8040
|
-
/** @hidden @internal */
|
|
8041
|
-
_entityTypeResourceMap;
|
|
8042
|
-
/** @hidden @internal key is qualified structuraltype name - value is structuralType. ( structural = entityType or complexType). */
|
|
8043
|
-
_structuralTypeMap;
|
|
8044
|
-
/** @hidden @internal key is shortName, value is qualified name - does not need to be serialized. **/
|
|
8045
|
-
_shortNameMap;
|
|
8046
|
-
/** @hidden @internal key is either short or qual type name - value is ctor; **/
|
|
8047
|
-
_ctorRegistry;
|
|
8048
|
-
/** @hidden @internal key is entityTypeName; value is array of nav props **/
|
|
8049
|
-
_incompleteTypeMap;
|
|
8050
|
-
/** @hidden @internal **/
|
|
8051
|
-
_incompleteComplexTypeMap;
|
|
8052
|
-
/** @hidden @internal { json: any, stype: StructuralType }[] | { entityType: EntityType, csdlEntityType: any }[] **/
|
|
8053
|
-
_deferredTypes;
|
|
8054
|
-
/** @hidden @internal **/
|
|
8055
|
-
_id;
|
|
8056
7765
|
/**
|
|
8057
7766
|
Constructs a new MetadataStore.
|
|
8058
7767
|
|
|
@@ -8092,10 +7801,6 @@ class MetadataStore {
|
|
|
8092
7801
|
this._id = MetadataStore.__id++;
|
|
8093
7802
|
this.metadataFetched = new BreezeEvent("metadataFetched", this);
|
|
8094
7803
|
}
|
|
8095
|
-
// needs to be made avail to dataService.xxx files
|
|
8096
|
-
static normalizeTypeName = core.memoize(function (rawTypeName) {
|
|
8097
|
-
return rawTypeName && MetadataStore.parseTypeName(rawTypeName).typeName;
|
|
8098
|
-
});
|
|
8099
7804
|
// for debugging use the line below instead.
|
|
8100
7805
|
//ctor.normalizeTypeName = function (rawTypeName) { return parseTypeName(rawTypeName).typeName; };
|
|
8101
7806
|
/**
|
|
@@ -8626,6 +8331,16 @@ class MetadataStore {
|
|
|
8626
8331
|
}
|
|
8627
8332
|
}
|
|
8628
8333
|
}
|
|
8334
|
+
/** @hidden @internal */
|
|
8335
|
+
MetadataStore.__id = 0;
|
|
8336
|
+
/** @hidden @internal */
|
|
8337
|
+
MetadataStore.ANONTYPE_PREFIX = "_IB_";
|
|
8338
|
+
/** The version of any MetadataStores created by this class */
|
|
8339
|
+
MetadataStore.metadataVersion = '1.0.5';
|
|
8340
|
+
// needs to be made avail to dataService.xxx files
|
|
8341
|
+
MetadataStore.normalizeTypeName = core.memoize(function (rawTypeName) {
|
|
8342
|
+
return rawTypeName && MetadataStore.parseTypeName(rawTypeName).typeName;
|
|
8343
|
+
});
|
|
8629
8344
|
MetadataStore.prototype._$typeName = "MetadataStore";
|
|
8630
8345
|
BreezeEvent.bubbleEvent(MetadataStore.prototype);
|
|
8631
8346
|
function getTypesFromMap(typeMap) {
|
|
@@ -8744,76 +8459,6 @@ function getQualifiedTypeName(metadataStore, structTypeName, throwIfNotFound) {
|
|
|
8744
8459
|
/** Container for all of the metadata about a specific type of Entity.
|
|
8745
8460
|
**/
|
|
8746
8461
|
class EntityType {
|
|
8747
|
-
/** @hidden @internal */
|
|
8748
|
-
static __nextAnonIx = 0;
|
|
8749
|
-
/** Always false for an EntityType. **/
|
|
8750
|
-
isComplexType = false;
|
|
8751
|
-
/** The [[MetadataStore]] that contains this EntityType. __Read Only__ **/
|
|
8752
|
-
metadataStore;
|
|
8753
|
-
/** The DataProperties (see [[DataProperty]] associated with this EntityType. __Read Only__ **/
|
|
8754
|
-
dataProperties;
|
|
8755
|
-
/** The NavigationProperties (see [[NavigationProperty]] associated with this EntityType. __Read Only__ **/
|
|
8756
|
-
navigationProperties;
|
|
8757
|
-
/**
|
|
8758
|
-
The DataProperties associated with this EntityType that make up it's [[EntityKey]]. __Read Only__ **/
|
|
8759
|
-
keyProperties;
|
|
8760
|
-
/** The DataProperties associated with this EntityType that are foreign key properties. __Read Only__ **/
|
|
8761
|
-
foreignKeyProperties;
|
|
8762
|
-
inverseForeignKeyProperties;
|
|
8763
|
-
/** The DataProperties associated with this EntityType that are concurrency properties. __Read Only__ **/
|
|
8764
|
-
concurrencyProperties;
|
|
8765
|
-
/** The DataProperties for this EntityType that contain instances of a [[ComplexType]]. __Read Only__ **/
|
|
8766
|
-
complexProperties;
|
|
8767
|
-
/** The DataProperties associated with this EntityType that are not mapped to any backend datastore. These are effectively free standing
|
|
8768
|
-
properties. __Read Only__ **/
|
|
8769
|
-
unmappedProperties;
|
|
8770
|
-
/** The fully qualified name of this EntityType. __Read Only__ **/
|
|
8771
|
-
name;
|
|
8772
|
-
/** The short, unqualified, name for this EntityType. __Read Only__ **/
|
|
8773
|
-
shortName;
|
|
8774
|
-
/** The namespace for this EntityType. __Read Only__ **/
|
|
8775
|
-
namespace;
|
|
8776
|
-
/** The name of this EntityType's base EntityType (if any) */
|
|
8777
|
-
baseTypeName;
|
|
8778
|
-
/** The base EntityType (if any) for this EntityType. __Read Only__ **/
|
|
8779
|
-
baseEntityType;
|
|
8780
|
-
subtypes;
|
|
8781
|
-
/** Whether this EntityType is abstract. __Read Only__ **/
|
|
8782
|
-
isAbstract;
|
|
8783
|
-
/** Whether this EntityType is anonymous. Anonymous types will never be communicated to or from the server. They are purely for
|
|
8784
|
-
client side use and are given an automatically generated name. __Read Only__ **/
|
|
8785
|
-
isAnonymous;
|
|
8786
|
-
/** Whether this EntityType has been 'frozen'. EntityTypes become frozen after the first instance
|
|
8787
|
-
of that type has been created and attached to an EntityManager. */
|
|
8788
|
-
isFrozen;
|
|
8789
|
-
/** The [[AutoGeneratedKeyType]] for this EntityType. __Read Only__ **/
|
|
8790
|
-
autoGeneratedKeyType;
|
|
8791
|
-
/** The default resource name associated with this EntityType. An EntityType may be queried via a variety of 'resource names' but this one
|
|
8792
|
-
is used as the default when no resource name is provided. This will occur when calling [[EntityAspect.loadNavigationProperty]]
|
|
8793
|
-
or when executing any [[EntityQuery]] that was created via an [[EntityKey]]. __Read Only__ **/
|
|
8794
|
-
defaultResourceName;
|
|
8795
|
-
/** A function that is used to customize the serialization of any EntityProperties of this type. */
|
|
8796
|
-
serializerFn;
|
|
8797
|
-
/** A free form object that can be used to define any custom metadata for this EntityType. __Read Only__ **/
|
|
8798
|
-
custom;
|
|
8799
|
-
/** The entity level validators associated with this EntityType. Validators can be added and
|
|
8800
|
-
removed from this collection. __Read Only__. **/
|
|
8801
|
-
validators;
|
|
8802
|
-
warnings;
|
|
8803
|
-
initFn;
|
|
8804
|
-
noTrackingFn;
|
|
8805
|
-
/** @hidden @internal */
|
|
8806
|
-
_extra;
|
|
8807
|
-
/** @hidden @internal */
|
|
8808
|
-
_ctor;
|
|
8809
|
-
/** @hidden @internal */
|
|
8810
|
-
_mappedPropertiesCount;
|
|
8811
|
-
/**
|
|
8812
|
-
@deprecated Use [[getCtor]] instead.
|
|
8813
|
-
*/
|
|
8814
|
-
getEntityCtor = this.getCtor;
|
|
8815
|
-
/** @hidden @internal */
|
|
8816
|
-
static qualifyTypeName = qualifyTypeName;
|
|
8817
8462
|
/** EntityType constructor
|
|
8818
8463
|
> let entityType = new EntityType( {
|
|
8819
8464
|
> shortName: "person",
|
|
@@ -8824,6 +8469,12 @@ class EntityType {
|
|
|
8824
8469
|
client side use and will be given an automatically generated name. Normally, however, you will use a configuration object.
|
|
8825
8470
|
**/
|
|
8826
8471
|
constructor(config) {
|
|
8472
|
+
/** Always false for an EntityType. **/
|
|
8473
|
+
this.isComplexType = false;
|
|
8474
|
+
/**
|
|
8475
|
+
@deprecated Use [[getCtor]] instead.
|
|
8476
|
+
*/
|
|
8477
|
+
this.getEntityCtor = this.getCtor;
|
|
8827
8478
|
if (arguments.length > 1) {
|
|
8828
8479
|
throw new Error("The EntityType ctor has a single argument that is either a 'MetadataStore' or a configuration object.");
|
|
8829
8480
|
}
|
|
@@ -9475,6 +9126,10 @@ class EntityType {
|
|
|
9475
9126
|
delete incompleteTypeMap[this.name];
|
|
9476
9127
|
}
|
|
9477
9128
|
}
|
|
9129
|
+
/** @hidden @internal */
|
|
9130
|
+
EntityType.__nextAnonIx = 0;
|
|
9131
|
+
/** @hidden @internal */
|
|
9132
|
+
EntityType.qualifyTypeName = qualifyTypeName;
|
|
9478
9133
|
EntityType.prototype._$typeName = "EntityType";
|
|
9479
9134
|
function getRawValueFromConfig(rawEntity, dp) {
|
|
9480
9135
|
// 'true' fork can happen if an initializer contains an actaul instance of an already created complex object.
|
|
@@ -9613,66 +9268,33 @@ function calcUnmappedProperties(stype, instance) {
|
|
|
9613
9268
|
@param config - Configuration settings
|
|
9614
9269
|
**/
|
|
9615
9270
|
class ComplexType {
|
|
9616
|
-
/** For polymorphic purpose only - always true here */
|
|
9617
|
-
isComplexType = true;
|
|
9618
|
-
/** The [[MetadataStore]] containing this ComplexType. */
|
|
9619
|
-
metadataStore;
|
|
9620
|
-
/** The fully qualifed name of this ComplexType. __Read Only__ **/
|
|
9621
|
-
name;
|
|
9622
|
-
/** The short, unqualified, name for this ComplexType. __Read Only__ **/
|
|
9623
|
-
shortName;
|
|
9624
|
-
/** The namespace for this ComplexType. __Read Only__ **/
|
|
9625
|
-
namespace;
|
|
9626
|
-
/** The DataProperties (see [[DataProperty]] associated with this ComplexType. __Read Only__ */
|
|
9627
|
-
dataProperties;
|
|
9628
|
-
/** The DataProperties for this ComplexType that contain instances of a [[ComplexType]]. __Read Only__ */
|
|
9629
|
-
complexProperties;
|
|
9630
|
-
/**
|
|
9631
|
-
The entity level validators associated with this ComplexType. Validators can be added and
|
|
9632
|
-
removed from this collection. __Read Only__ **/
|
|
9633
|
-
validators;
|
|
9634
|
-
/** For polymorphic purpose only - always empty here */
|
|
9635
|
-
concurrencyProperties;
|
|
9636
|
-
/** The DataProperties associated with this ComplexType that are not mapped to any backend datastore. These are effectively free standing
|
|
9637
|
-
properties. __Read Only__ **/
|
|
9638
|
-
unmappedProperties;
|
|
9639
|
-
// keyProperties and navigationProperties are not used on complexTypes - but here to allow sharing of code between EntityType and ComplexType.
|
|
9640
|
-
navigationProperties;
|
|
9641
|
-
// and may be used later to enforce uniqueness on arrays of complextypes.
|
|
9642
|
-
keyProperties;
|
|
9643
|
-
warnings;
|
|
9644
|
-
serializerFn;
|
|
9645
|
-
/** A free form object that can be used to define any custom metadata for this ComplexType. ***/
|
|
9646
|
-
custom;
|
|
9647
|
-
/** @hidden @internal */
|
|
9648
|
-
_mappedPropertiesCount;
|
|
9649
|
-
/** @hidden @internal */
|
|
9650
|
-
_extra;
|
|
9651
|
-
// copy entityType methods onto complexType
|
|
9652
|
-
/** See [[EntityType.getCtor]] */
|
|
9653
|
-
getCtor = EntityType.prototype.getCtor;
|
|
9654
|
-
// note the name change.
|
|
9655
|
-
createInstance = EntityType.prototype.createEntity;
|
|
9656
|
-
/** See [EntityType.addValidator] */
|
|
9657
|
-
addValidator = EntityType.prototype.addValidator;
|
|
9658
|
-
getProperty = EntityType.prototype.getProperty;
|
|
9659
|
-
getPropertiesOnPath = EntityType.prototype.getPropertiesOnPath;
|
|
9660
|
-
getPropertyNames = EntityType.prototype.getPropertyNames;
|
|
9661
|
-
/** @hidden @internal */
|
|
9662
|
-
_addPropertyCore = EntityType.prototype._addPropertyCore;
|
|
9663
|
-
/** @hidden @internal */
|
|
9664
|
-
_addDataProperty = EntityType.prototype._addDataProperty;
|
|
9665
|
-
/** @hidden @internal */
|
|
9666
|
-
_updateNames = EntityType.prototype._updateNames;
|
|
9667
|
-
/** @hidden @internal */
|
|
9668
|
-
_updateCps = EntityType.prototype._updateCps;
|
|
9669
|
-
/** @hidden @internal */
|
|
9670
|
-
_initializeInstance = EntityType.prototype._initializeInstance;
|
|
9671
|
-
/** @hidden @internal */
|
|
9672
|
-
_updateTargetFromRaw = EntityType.prototype._updateTargetFromRaw;
|
|
9673
|
-
/** @hidden @internal */
|
|
9674
|
-
_setCtor = EntityType.prototype._setCtor;
|
|
9675
9271
|
constructor(config) {
|
|
9272
|
+
/** For polymorphic purpose only - always true here */
|
|
9273
|
+
this.isComplexType = true;
|
|
9274
|
+
// copy entityType methods onto complexType
|
|
9275
|
+
/** See [[EntityType.getCtor]] */
|
|
9276
|
+
this.getCtor = EntityType.prototype.getCtor;
|
|
9277
|
+
// note the name change.
|
|
9278
|
+
this.createInstance = EntityType.prototype.createEntity;
|
|
9279
|
+
/** See [EntityType.addValidator] */
|
|
9280
|
+
this.addValidator = EntityType.prototype.addValidator;
|
|
9281
|
+
this.getProperty = EntityType.prototype.getProperty;
|
|
9282
|
+
this.getPropertiesOnPath = EntityType.prototype.getPropertiesOnPath;
|
|
9283
|
+
this.getPropertyNames = EntityType.prototype.getPropertyNames;
|
|
9284
|
+
/** @hidden @internal */
|
|
9285
|
+
this._addPropertyCore = EntityType.prototype._addPropertyCore;
|
|
9286
|
+
/** @hidden @internal */
|
|
9287
|
+
this._addDataProperty = EntityType.prototype._addDataProperty;
|
|
9288
|
+
/** @hidden @internal */
|
|
9289
|
+
this._updateNames = EntityType.prototype._updateNames;
|
|
9290
|
+
/** @hidden @internal */
|
|
9291
|
+
this._updateCps = EntityType.prototype._updateCps;
|
|
9292
|
+
/** @hidden @internal */
|
|
9293
|
+
this._initializeInstance = EntityType.prototype._initializeInstance;
|
|
9294
|
+
/** @hidden @internal */
|
|
9295
|
+
this._updateTargetFromRaw = EntityType.prototype._updateTargetFromRaw;
|
|
9296
|
+
/** @hidden @internal */
|
|
9297
|
+
this._setCtor = EntityType.prototype._setCtor;
|
|
9676
9298
|
if (arguments.length > 1) {
|
|
9677
9299
|
throw new Error("The ComplexType ctor has a single argument that is a configuration object.");
|
|
9678
9300
|
}
|
|
@@ -9753,10 +9375,6 @@ Instances of the DataProperty class are constructed automatically during Metadat
|
|
|
9753
9375
|
directly via the constructor.
|
|
9754
9376
|
**/
|
|
9755
9377
|
class DataProperty {
|
|
9756
|
-
/** Is this a DataProperty? - always true here. Allows polymorphic treatment of DataProperties and NavigationProperties. __Read Only__ */
|
|
9757
|
-
isDataProperty = true;
|
|
9758
|
-
/** Is this a NavigationProperty? - always false here. Allows polymorphic treatment of DataProperties and NavigationProperties. __Read Only__ */
|
|
9759
|
-
isNavigationProperty = false;
|
|
9760
9378
|
/** DataProperty constructor
|
|
9761
9379
|
> let lastNameProp = new DataProperty( {
|
|
9762
9380
|
> name: "lastName",
|
|
@@ -9769,6 +9387,10 @@ class DataProperty {
|
|
|
9769
9387
|
@param config - A configuration Object or a DataProperty
|
|
9770
9388
|
*/
|
|
9771
9389
|
constructor(config) {
|
|
9390
|
+
/** Is this a DataProperty? - always true here. Allows polymorphic treatment of DataProperties and NavigationProperties. __Read Only__ */
|
|
9391
|
+
this.isDataProperty = true;
|
|
9392
|
+
/** Is this a NavigationProperty? - always false here. Allows polymorphic treatment of DataProperties and NavigationProperties. __Read Only__ */
|
|
9393
|
+
this.isNavigationProperty = false;
|
|
9772
9394
|
assertConfig(config)
|
|
9773
9395
|
.whereParam("name").isString().isOptional()
|
|
9774
9396
|
.whereParam("nameOnServer").isString().isOptional()
|
|
@@ -9932,15 +9554,6 @@ Instances of the NavigationProperty class are constructed automatically during M
|
|
|
9932
9554
|
directly via the constructor.
|
|
9933
9555
|
**/
|
|
9934
9556
|
class NavigationProperty {
|
|
9935
|
-
/** Is this a DataProperty? - always false here
|
|
9936
|
-
Allows polymorphic treatment of DataProperties and NavigationProperties. __Read Only__ */
|
|
9937
|
-
isDataProperty = false;
|
|
9938
|
-
/** Is this a NavigationProperty? - always true here
|
|
9939
|
-
Allows polymorphic treatment of DataProperties and NavigationProperties. __Read Only__ */
|
|
9940
|
-
isNavigationProperty = true;
|
|
9941
|
-
formatName = DataProperty.prototype.formatName;
|
|
9942
|
-
getAllValidators = DataProperty.prototype.getAllValidators;
|
|
9943
|
-
resolveProperty = DataProperty.prototype.resolveProperty;
|
|
9944
9557
|
/** NavigationProperty constructor
|
|
9945
9558
|
> let homeAddressProp = new NavigationProperty( {
|
|
9946
9559
|
> name: "homeAddress",
|
|
@@ -9959,6 +9572,15 @@ class NavigationProperty {
|
|
|
9959
9572
|
@param config - A configuration object.
|
|
9960
9573
|
**/
|
|
9961
9574
|
constructor(config) {
|
|
9575
|
+
/** Is this a DataProperty? - always false here
|
|
9576
|
+
Allows polymorphic treatment of DataProperties and NavigationProperties. __Read Only__ */
|
|
9577
|
+
this.isDataProperty = false;
|
|
9578
|
+
/** Is this a NavigationProperty? - always true here
|
|
9579
|
+
Allows polymorphic treatment of DataProperties and NavigationProperties. __Read Only__ */
|
|
9580
|
+
this.isNavigationProperty = true;
|
|
9581
|
+
this.formatName = DataProperty.prototype.formatName;
|
|
9582
|
+
this.getAllValidators = DataProperty.prototype.getAllValidators;
|
|
9583
|
+
this.resolveProperty = DataProperty.prototype.resolveProperty;
|
|
9962
9584
|
assertConfig(config)
|
|
9963
9585
|
.whereParam("name").isString().isOptional()
|
|
9964
9586
|
.whereParam("nameOnServer").isString().isOptional()
|
|
@@ -10150,24 +9772,24 @@ function resolveRelated(np) {
|
|
|
10150
9772
|
AutoGeneratedKeyType is an 'Enum' containing all of the valid states for an automatically generated key.
|
|
10151
9773
|
**/
|
|
10152
9774
|
class AutoGeneratedKeyType extends BreezeEnum {
|
|
10153
|
-
/**
|
|
10154
|
-
This entity does not have an autogenerated key.
|
|
10155
|
-
The client must set the key before adding the entity to the EntityManager
|
|
10156
|
-
**/
|
|
10157
|
-
static None = new AutoGeneratedKeyType();
|
|
10158
|
-
/**
|
|
10159
|
-
This entity's key is an Identity column and is set by the backend database.
|
|
10160
|
-
Keys for new entities will be temporary until the entities are saved at which point the keys will
|
|
10161
|
-
be converted to their 'real' versions.
|
|
10162
|
-
**/
|
|
10163
|
-
static Identity = new AutoGeneratedKeyType();
|
|
10164
|
-
/**
|
|
10165
|
-
This entity's key is generated by a KeyGenerator and is set by the backend database.
|
|
10166
|
-
Keys for new entities will be temporary until the entities are saved at which point the keys will
|
|
10167
|
-
be converted to their 'real' versions.
|
|
10168
|
-
**/
|
|
10169
|
-
static KeyGenerator = new AutoGeneratedKeyType();
|
|
10170
9775
|
}
|
|
9776
|
+
/**
|
|
9777
|
+
This entity does not have an autogenerated key.
|
|
9778
|
+
The client must set the key before adding the entity to the EntityManager
|
|
9779
|
+
**/
|
|
9780
|
+
AutoGeneratedKeyType.None = new AutoGeneratedKeyType();
|
|
9781
|
+
/**
|
|
9782
|
+
This entity's key is an Identity column and is set by the backend database.
|
|
9783
|
+
Keys for new entities will be temporary until the entities are saved at which point the keys will
|
|
9784
|
+
be converted to their 'real' versions.
|
|
9785
|
+
**/
|
|
9786
|
+
AutoGeneratedKeyType.Identity = new AutoGeneratedKeyType();
|
|
9787
|
+
/**
|
|
9788
|
+
This entity's key is generated by a KeyGenerator and is set by the backend database.
|
|
9789
|
+
Keys for new entities will be temporary until the entities are saved at which point the keys will
|
|
9790
|
+
be converted to their 'real' versions.
|
|
9791
|
+
**/
|
|
9792
|
+
AutoGeneratedKeyType.KeyGenerator = new AutoGeneratedKeyType();
|
|
10171
9793
|
AutoGeneratedKeyType.prototype._$typeName = "AutoGeneratedKeyType";
|
|
10172
9794
|
Error['x'] = AutoGeneratedKeyType.resolveSymbols();
|
|
10173
9795
|
let proto = Param.prototype;
|
|
@@ -10233,6 +9855,41 @@ function addProperties(entityType, propObj, ctor) {
|
|
|
10233
9855
|
@hidden
|
|
10234
9856
|
*/
|
|
10235
9857
|
class AbstractDataServiceAdapter {
|
|
9858
|
+
constructor() {
|
|
9859
|
+
/**
|
|
9860
|
+
Returns a constructor function for a "ChangeRequestInterceptor"
|
|
9861
|
+
that can tweak the saveBundle both as it is built and when it is completed
|
|
9862
|
+
by a concrete DataServiceAdapater.
|
|
9863
|
+
|
|
9864
|
+
Initialized with a default, no-op implementation that developers can replace with a
|
|
9865
|
+
substantive implementation that changes the individual entity change requests
|
|
9866
|
+
or aspects of the entire 'saveBundle' without having to write their own DataService adapters.
|
|
9867
|
+
> let adapter = breeze.config.getAdapterInstance('dataService');
|
|
9868
|
+
> adapter.changeRequestInterceptor = function (saveContext, saveBundle) {
|
|
9869
|
+
> this.getRequest = function (request, entity, index) {
|
|
9870
|
+
> // alter the request that the adapter prepared for this entity
|
|
9871
|
+
> // based on the entity, saveContext, and saveBundle
|
|
9872
|
+
> // e.g., add a custom header or prune the originalValuesMap
|
|
9873
|
+
> return request;
|
|
9874
|
+
> };
|
|
9875
|
+
> this.done = function (requests) {
|
|
9876
|
+
> // alter the array of requests representing the entire change-set
|
|
9877
|
+
> // based on the saveContext and saveBundle
|
|
9878
|
+
> };
|
|
9879
|
+
> }
|
|
9880
|
+
|
|
9881
|
+
@param saveContext - The BreezeJS "context" for the save operation.
|
|
9882
|
+
@param saveBundle - Contains the array of entities-to-be-saved (AKA, the entity change-set).
|
|
9883
|
+
@return Constructor for a "ChangeRequestInterceptor".
|
|
9884
|
+
**/
|
|
9885
|
+
this.changeRequestInterceptor = DefaultChangeRequestInterceptor;
|
|
9886
|
+
this.jsonResultsAdapter = new JsonResultsAdapter({
|
|
9887
|
+
name: "noop",
|
|
9888
|
+
visitNode: function ( /* node, mappingContext, nodeContext */) {
|
|
9889
|
+
return {};
|
|
9890
|
+
}
|
|
9891
|
+
});
|
|
9892
|
+
}
|
|
10236
9893
|
// TODO use interface
|
|
10237
9894
|
checkForRecomposition(interfaceInitializedArgs) {
|
|
10238
9895
|
if (interfaceInitializedArgs.interfaceName === "ajax" && interfaceInitializedArgs.isDefault) {
|
|
@@ -10398,33 +10055,6 @@ class AbstractDataServiceAdapter {
|
|
|
10398
10055
|
// The implementor should call _createChangeRequestInterceptor
|
|
10399
10056
|
throw new Error("Need a concrete implementation of _prepareSaveBundle");
|
|
10400
10057
|
}
|
|
10401
|
-
/**
|
|
10402
|
-
Returns a constructor function for a "ChangeRequestInterceptor"
|
|
10403
|
-
that can tweak the saveBundle both as it is built and when it is completed
|
|
10404
|
-
by a concrete DataServiceAdapater.
|
|
10405
|
-
|
|
10406
|
-
Initialized with a default, no-op implementation that developers can replace with a
|
|
10407
|
-
substantive implementation that changes the individual entity change requests
|
|
10408
|
-
or aspects of the entire 'saveBundle' without having to write their own DataService adapters.
|
|
10409
|
-
> let adapter = breeze.config.getAdapterInstance('dataService');
|
|
10410
|
-
> adapter.changeRequestInterceptor = function (saveContext, saveBundle) {
|
|
10411
|
-
> this.getRequest = function (request, entity, index) {
|
|
10412
|
-
> // alter the request that the adapter prepared for this entity
|
|
10413
|
-
> // based on the entity, saveContext, and saveBundle
|
|
10414
|
-
> // e.g., add a custom header or prune the originalValuesMap
|
|
10415
|
-
> return request;
|
|
10416
|
-
> };
|
|
10417
|
-
> this.done = function (requests) {
|
|
10418
|
-
> // alter the array of requests representing the entire change-set
|
|
10419
|
-
> // based on the saveContext and saveBundle
|
|
10420
|
-
> };
|
|
10421
|
-
> }
|
|
10422
|
-
|
|
10423
|
-
@param saveContext - The BreezeJS "context" for the save operation.
|
|
10424
|
-
@param saveBundle - Contains the array of entities-to-be-saved (AKA, the entity change-set).
|
|
10425
|
-
@return Constructor for a "ChangeRequestInterceptor".
|
|
10426
|
-
**/
|
|
10427
|
-
changeRequestInterceptor = DefaultChangeRequestInterceptor;
|
|
10428
10058
|
/** @hidden @internal */
|
|
10429
10059
|
_createChangeRequestInterceptor(saveContext, saveBundle) {
|
|
10430
10060
|
let adapter = saveContext.adapter;
|
|
@@ -10462,12 +10092,6 @@ class AbstractDataServiceAdapter {
|
|
|
10462
10092
|
"Likely did not or could not reach server. Is the server running?";
|
|
10463
10093
|
}
|
|
10464
10094
|
}
|
|
10465
|
-
jsonResultsAdapter = new JsonResultsAdapter({
|
|
10466
|
-
name: "noop",
|
|
10467
|
-
visitNode: function ( /* node, mappingContext, nodeContext */) {
|
|
10468
|
-
return {};
|
|
10469
|
-
}
|
|
10470
|
-
});
|
|
10471
10095
|
}
|
|
10472
10096
|
function handleHttpError(reject, httpResponse, messagePrefix) {
|
|
10473
10097
|
let err = createError(httpResponse);
|
|
@@ -10554,20 +10178,6 @@ A ValidationOptions instance is used to specify the conditions under which valid
|
|
|
10554
10178
|
|
|
10555
10179
|
*/
|
|
10556
10180
|
class ValidationOptions {
|
|
10557
|
-
/** @hidden @internal */
|
|
10558
|
-
_$typeName; // on proto
|
|
10559
|
-
/** Whether entity and property level validation should occur when entities are attached to the EntityManager
|
|
10560
|
-
other than via a query. (default = true) __Read Only__ */
|
|
10561
|
-
validateOnAttach;
|
|
10562
|
-
/** Whether entity and property level validation should occur before entities are saved.
|
|
10563
|
-
A failed validation will force the save to fail early. (default = true) __Read Only__ */
|
|
10564
|
-
validateOnSave;
|
|
10565
|
-
/** Whether entity and property level validation should occur after entities are queried from a remote server.
|
|
10566
|
-
(default = false) __Read Only__ **/
|
|
10567
|
-
validateOnQuery;
|
|
10568
|
-
/** Whether property level validation should occur after entities are modified.
|
|
10569
|
-
(default = true) __Read Only__ **/
|
|
10570
|
-
validateOnPropertyChange;
|
|
10571
10181
|
/**
|
|
10572
10182
|
ValidationOptions constructor
|
|
10573
10183
|
> var newVo = new ValidationOptions( { validateOnSave: false, validateOnAttach: false });
|
|
@@ -10576,7 +10186,7 @@ class ValidationOptions {
|
|
|
10576
10186
|
@param config - A configuration object.
|
|
10577
10187
|
**/
|
|
10578
10188
|
constructor(config) {
|
|
10579
|
-
updateWithConfig(this, config);
|
|
10189
|
+
updateWithConfig$1(this, config);
|
|
10580
10190
|
}
|
|
10581
10191
|
/**
|
|
10582
10192
|
Returns a copy of this ValidationOptions with changes to the specified config properties.
|
|
@@ -10589,7 +10199,7 @@ class ValidationOptions {
|
|
|
10589
10199
|
if (!config)
|
|
10590
10200
|
return this;
|
|
10591
10201
|
let result = new ValidationOptions(this);
|
|
10592
|
-
updateWithConfig(result, config);
|
|
10202
|
+
updateWithConfig$1(result, config);
|
|
10593
10203
|
return result;
|
|
10594
10204
|
}
|
|
10595
10205
|
/**
|
|
@@ -10602,18 +10212,18 @@ class ValidationOptions {
|
|
|
10602
10212
|
setAsDefault() {
|
|
10603
10213
|
return core.setAsDefault(this, ValidationOptions);
|
|
10604
10214
|
}
|
|
10605
|
-
/**
|
|
10606
|
-
The default instance for use whenever ValidationOptions are not specified.
|
|
10607
|
-
**/
|
|
10608
|
-
static defaultInstance = new ValidationOptions({
|
|
10609
|
-
validateOnAttach: true,
|
|
10610
|
-
validateOnSave: true,
|
|
10611
|
-
validateOnQuery: false,
|
|
10612
|
-
validateOnPropertyChange: true
|
|
10613
|
-
});
|
|
10614
10215
|
}
|
|
10216
|
+
/**
|
|
10217
|
+
The default instance for use whenever ValidationOptions are not specified.
|
|
10218
|
+
**/
|
|
10219
|
+
ValidationOptions.defaultInstance = new ValidationOptions({
|
|
10220
|
+
validateOnAttach: true,
|
|
10221
|
+
validateOnSave: true,
|
|
10222
|
+
validateOnQuery: false,
|
|
10223
|
+
validateOnPropertyChange: true
|
|
10224
|
+
});
|
|
10615
10225
|
ValidationOptions.prototype._$typeName = "ValidationOptions";
|
|
10616
|
-
function updateWithConfig(options, config) {
|
|
10226
|
+
function updateWithConfig$1(options, config) {
|
|
10617
10227
|
if (config) {
|
|
10618
10228
|
assertConfig(config)
|
|
10619
10229
|
.whereParam("validateOnAttach").isBoolean().isOptional()
|
|
@@ -10629,18 +10239,6 @@ function updateWithConfig(options, config) {
|
|
|
10629
10239
|
A SaveOptions instance is used to specify the 'options' under which a save will occur.
|
|
10630
10240
|
**/
|
|
10631
10241
|
class SaveOptions {
|
|
10632
|
-
/** @hidden @internal */
|
|
10633
|
-
_$typeName; // on proto
|
|
10634
|
-
/** Resource name to be used during the save - this defaults to "SaveChanges". __Read Only__ */
|
|
10635
|
-
resourceName;
|
|
10636
|
-
/** The DataService to be used for this save. __Read Only__ */
|
|
10637
|
-
dataService;
|
|
10638
|
-
/** Whether multiple saves can be in-flight at the same time. The default is false. __Read Only__ */
|
|
10639
|
-
allowConcurrentSaves;
|
|
10640
|
-
/** Free form value that will be sent to the server during the save. __Read Only__ */
|
|
10641
|
-
tag;
|
|
10642
|
-
/** The default value whenever SaveOptions are not specified. */
|
|
10643
|
-
static defaultInstance = new SaveOptions({ allowConcurrentSaves: false });
|
|
10644
10242
|
constructor(config) {
|
|
10645
10243
|
SaveOptions._updateWithConfig(this, config);
|
|
10646
10244
|
}
|
|
@@ -10671,14 +10269,14 @@ class SaveOptions {
|
|
|
10671
10269
|
return obj;
|
|
10672
10270
|
}
|
|
10673
10271
|
}
|
|
10272
|
+
/** The default value whenever SaveOptions are not specified. */
|
|
10273
|
+
SaveOptions.defaultInstance = new SaveOptions({ allowConcurrentSaves: false });
|
|
10674
10274
|
SaveOptions.prototype._$typeName = "SaveOptions";
|
|
10675
10275
|
|
|
10676
10276
|
/*
|
|
10677
10277
|
@class KeyGenerator
|
|
10678
10278
|
*/
|
|
10679
10279
|
class KeyGenerator {
|
|
10680
|
-
/** @hidden @internal */
|
|
10681
|
-
_tempIdMap;
|
|
10682
10280
|
constructor() {
|
|
10683
10281
|
// key is dataProperty.name + || + entityType.name, value is propEntry
|
|
10684
10282
|
// propEntry = { entityType, propertyName, keyMap }
|
|
@@ -10783,11 +10381,6 @@ config.registerType(KeyGenerator, "KeyGenerator");
|
|
|
10783
10381
|
|
|
10784
10382
|
/** @hidden @internal */
|
|
10785
10383
|
class EntityGroup {
|
|
10786
|
-
entityManager;
|
|
10787
|
-
entityType;
|
|
10788
|
-
_indexMap;
|
|
10789
|
-
_entities;
|
|
10790
|
-
_emptyIndexes;
|
|
10791
10384
|
constructor(entityManager, entityType) {
|
|
10792
10385
|
this.entityManager = entityManager;
|
|
10793
10386
|
this.entityType = entityType;
|
|
@@ -10975,19 +10568,8 @@ For use by breeze plugin authors only. The class is for use in building a [[IDat
|
|
|
10975
10568
|
@hidden
|
|
10976
10569
|
*/
|
|
10977
10570
|
class MappingContext {
|
|
10978
|
-
/** @hidden @internal */
|
|
10979
|
-
_$typeName; // on prototype
|
|
10980
|
-
rawValueFn = DataProperty.getRawValueFromServer; // think about passing this in later.
|
|
10981
|
-
dataService;
|
|
10982
|
-
query;
|
|
10983
|
-
entityManager;
|
|
10984
|
-
mergeOptions;
|
|
10985
|
-
adapter; // assigned in the AbstractDataServiceAdapter.
|
|
10986
|
-
refMap; // TODO
|
|
10987
|
-
deferredFns; // TODO
|
|
10988
|
-
jsonResultsAdapter;
|
|
10989
|
-
metadataStore;
|
|
10990
10571
|
constructor(config) {
|
|
10572
|
+
this.rawValueFn = DataProperty.getRawValueFromServer; // think about passing this in later.
|
|
10991
10573
|
core.extend(this, config, [
|
|
10992
10574
|
"query", "entityManager", "dataService", "mergeOptions"
|
|
10993
10575
|
]);
|
|
@@ -11210,7 +10792,7 @@ function mergeEntity(mc, node, meta) {
|
|
|
11210
10792
|
targetEntity.entityAspect.extraMetadata = meta.extraMetadata;
|
|
11211
10793
|
}
|
|
11212
10794
|
targetEntity.entityAspect.entityState = EntityState.Unchanged;
|
|
11213
|
-
clearOriginalValues(targetEntity);
|
|
10795
|
+
clearOriginalValues$1(targetEntity);
|
|
11214
10796
|
// propertyName not specified because multiple props EntityChangedEventArgs
|
|
11215
10797
|
targetEntity.entityAspect.propertyChanged.publish({ entity: targetEntity, propertyName: null });
|
|
11216
10798
|
let action = isSaving ? EntityAction.MergeOnSave : EntityAction.MergeOnQuery;
|
|
@@ -11244,18 +10826,18 @@ function mergeEntity(mc, node, meta) {
|
|
|
11244
10826
|
return targetEntity;
|
|
11245
10827
|
}
|
|
11246
10828
|
// copied from entityAspect
|
|
11247
|
-
function clearOriginalValues(target) {
|
|
10829
|
+
function clearOriginalValues$1(target) {
|
|
11248
10830
|
let aspect = target.entityAspect || target.complexAspect;
|
|
11249
10831
|
aspect.originalValues = {};
|
|
11250
10832
|
let stype = target.entityType || target.complexType;
|
|
11251
10833
|
stype.complexProperties.forEach(function (cp) {
|
|
11252
10834
|
let cos = target.getProperty(cp.name);
|
|
11253
10835
|
if (cp.isScalar) {
|
|
11254
|
-
clearOriginalValues(cos);
|
|
10836
|
+
clearOriginalValues$1(cos);
|
|
11255
10837
|
}
|
|
11256
10838
|
else {
|
|
11257
10839
|
cos._acceptChanges();
|
|
11258
|
-
cos.forEach(clearOriginalValues);
|
|
10840
|
+
cos.forEach(clearOriginalValues$1);
|
|
11259
10841
|
}
|
|
11260
10842
|
});
|
|
11261
10843
|
}
|
|
@@ -11387,8 +10969,10 @@ function updateRelatedEntityInCollection(mc, relatedEntity, relatedEntities, tar
|
|
|
11387
10969
|
/** @hidden @internal */
|
|
11388
10970
|
// Represents entities not yet attached to navigationProperties.
|
|
11389
10971
|
class UnattachedChildrenMap {
|
|
11390
|
-
|
|
11391
|
-
|
|
10972
|
+
constructor() {
|
|
10973
|
+
// key is EntityKey.toString(), value is array of { navigationProperty, children }
|
|
10974
|
+
this.map = {};
|
|
10975
|
+
}
|
|
11392
10976
|
addChild(parentEntityKey, navigationProperty, child) {
|
|
11393
10977
|
let tuple = this.getTuple(parentEntityKey, navigationProperty);
|
|
11394
10978
|
if (!tuple) {
|
|
@@ -11443,100 +11027,6 @@ class UnattachedChildrenMap {
|
|
|
11443
11027
|
Instances of the EntityManager contain and manage collections of entities, either retrieved from a backend datastore or created on the client.
|
|
11444
11028
|
**/
|
|
11445
11029
|
class EntityManager {
|
|
11446
|
-
/** @hidden @internal */
|
|
11447
|
-
_$typeName; // actually defined on prototype
|
|
11448
|
-
/** The service name associated with this EntityManager. __Read Only__ **/
|
|
11449
|
-
serviceName;
|
|
11450
|
-
/** The DataService associated with this EntityManager. __Read Only__ **/
|
|
11451
|
-
dataService;
|
|
11452
|
-
/** The [[QueryOptions]] associated with this EntityManager. __Read Only__ **/
|
|
11453
|
-
queryOptions;
|
|
11454
|
-
/** The [[SaveOptions]] associated with this EntityManager. __Read Only__ **/
|
|
11455
|
-
saveOptions;
|
|
11456
|
-
/** The [[ValidationOptions]] associated with this EntityManager. __Read Only__ **/
|
|
11457
|
-
validationOptions;
|
|
11458
|
-
/** The [[KeyGenerator]] associated with this EntityManager. __Read Only__ **/
|
|
11459
|
-
keyGenerator;
|
|
11460
|
-
/** The [[KeyGenerator]] constructor associated with this EntityManager. __Read Only__ **/
|
|
11461
|
-
keyGeneratorCtor; // TODO: review this
|
|
11462
|
-
/** The [[MetadataStore]] associated with this EntityManager. __Read Only__ **/
|
|
11463
|
-
metadataStore;
|
|
11464
|
-
isLoading;
|
|
11465
|
-
isRejectingChanges;
|
|
11466
|
-
// events
|
|
11467
|
-
/**
|
|
11468
|
-
A [[BreezeEvent]] that fires whenever a change to any entity in this EntityManager occurs. __Read Only__
|
|
11469
|
-
|
|
11470
|
-
@eventArgs -
|
|
11471
|
-
- entityAction - The [[EntityAction]] that occured.
|
|
11472
|
-
- entity - The entity that changed. If this is null, then all entities in the entityManager were affected.
|
|
11473
|
-
- args - Additional information about this event. This will differ based on the entityAction.
|
|
11474
|
-
|
|
11475
|
-
> let em = new EntityManager( {serviceName: "breeze/NorthwindIBModel" });
|
|
11476
|
-
> em.entityChanged.subscribe(function(changeArgs) {
|
|
11477
|
-
> // This code will be executed any time any entity within the entityManager
|
|
11478
|
-
> // is added, modified, deleted or detached for any reason.
|
|
11479
|
-
> let action = changeArgs.entityAction;
|
|
11480
|
-
> let entity = changeArgs.entity;
|
|
11481
|
-
> // .. do something to this entity when it is changed.
|
|
11482
|
-
> });
|
|
11483
|
-
> });
|
|
11484
|
-
@event
|
|
11485
|
-
**/
|
|
11486
|
-
entityChanged;
|
|
11487
|
-
/**
|
|
11488
|
-
An [[BreezeEvent]] that fires whenever validationErrors change for any entity in this EntityManager. __Read Only__
|
|
11489
|
-
@eventArgs -
|
|
11490
|
-
- entity - The entity on which the validation errors have been added or removed.
|
|
11491
|
-
- added - An array containing any newly added [[ValidationError]]s
|
|
11492
|
-
- removed - An array containing any newly removed [[ValidationError]]s. This is those errors that have been 'fixed'
|
|
11493
|
-
|
|
11494
|
-
> let em = new EntityManager( {serviceName: "breeze/NorthwindIBModel" });
|
|
11495
|
-
> em.validationErrorsChanged.subscribe(function(changeArgs) {
|
|
11496
|
-
> // This code will be executed any time any entity within the entityManager experiences a change to its validationErrors collection.
|
|
11497
|
-
> function (validationChangeArgs) {
|
|
11498
|
-
> let entity == validationChangeArgs.entity;
|
|
11499
|
-
> let errorsAdded = validationChangeArgs.added;
|
|
11500
|
-
> let errorsCleared = validationChangeArgs.removed;
|
|
11501
|
-
> // ... do something interesting with the order.
|
|
11502
|
-
> });
|
|
11503
|
-
> });
|
|
11504
|
-
> });
|
|
11505
|
-
@event
|
|
11506
|
-
**/
|
|
11507
|
-
validationErrorsChanged;
|
|
11508
|
-
/**
|
|
11509
|
-
A [[BreezeEvent]] that fires whenever an EntityManager transitions to or from having changes. __Read Only__
|
|
11510
|
-
@eventArgs -
|
|
11511
|
-
- entityManager - The EntityManager whose 'hasChanges' status has changed.
|
|
11512
|
-
- hasChanges - Whether or not this EntityManager has changes.
|
|
11513
|
-
|
|
11514
|
-
> let em = new EntityManager( {serviceName: "breeze/NorthwindIBModel" });
|
|
11515
|
-
> em.hasChangesChanged.subscribe(function(args) {
|
|
11516
|
-
> let hasChangesChanged = args.hasChanges;
|
|
11517
|
-
> let entityManager = args.entityManager;
|
|
11518
|
-
> });
|
|
11519
|
-
> });
|
|
11520
|
-
@event
|
|
11521
|
-
**/
|
|
11522
|
-
hasChangesChanged;
|
|
11523
|
-
/** @hidden @internal */
|
|
11524
|
-
_pendingPubs; // TODO: refine later
|
|
11525
|
-
/** @hidden @internal */
|
|
11526
|
-
_hasChangesAction; // TODO refine later
|
|
11527
|
-
/** @hidden @internal */
|
|
11528
|
-
_hasChanges;
|
|
11529
|
-
/** @hidden @internal */
|
|
11530
|
-
_entityGroupMap;
|
|
11531
|
-
/** @hidden @internal */
|
|
11532
|
-
_unattachedChildrenMap;
|
|
11533
|
-
/** @hidden @internal */
|
|
11534
|
-
_inKeyFixup;
|
|
11535
|
-
helper = {
|
|
11536
|
-
unwrapInstance: unwrapInstance,
|
|
11537
|
-
unwrapOriginalValues: unwrapOriginalValues,
|
|
11538
|
-
unwrapChangedValues: unwrapChangedValues
|
|
11539
|
-
};
|
|
11540
11030
|
/**
|
|
11541
11031
|
EntityManager constructor.
|
|
11542
11032
|
|
|
@@ -11575,6 +11065,11 @@ class EntityManager {
|
|
|
11575
11065
|
@param emConfig - Configuration settings or a service name.
|
|
11576
11066
|
**/
|
|
11577
11067
|
constructor(emConfig) {
|
|
11068
|
+
this.helper = {
|
|
11069
|
+
unwrapInstance: unwrapInstance,
|
|
11070
|
+
unwrapOriginalValues: unwrapOriginalValues,
|
|
11071
|
+
unwrapChangedValues: unwrapChangedValues
|
|
11072
|
+
};
|
|
11578
11073
|
if (arguments.length > 1) {
|
|
11579
11074
|
throw new Error("The EntityManager ctor has a single optional argument that is either a 'serviceName' or a configuration object.");
|
|
11580
11075
|
}
|
|
@@ -13604,10 +13099,12 @@ function getSerializerFn(stype) {
|
|
|
13604
13099
|
|
|
13605
13100
|
/** Registers adapters used by Breeze */
|
|
13606
13101
|
class InterfaceRegistry {
|
|
13607
|
-
|
|
13608
|
-
|
|
13609
|
-
|
|
13610
|
-
|
|
13102
|
+
constructor() {
|
|
13103
|
+
this.ajax = new InterfaceDef("ajax");
|
|
13104
|
+
this.modelLibrary = new InterfaceDef("modelLibrary");
|
|
13105
|
+
this.dataService = new InterfaceDef("dataService");
|
|
13106
|
+
this.uriBuilder = new InterfaceDef("uriBuilder");
|
|
13107
|
+
}
|
|
13611
13108
|
}
|
|
13612
13109
|
config.interfaceRegistry = new InterfaceRegistry();
|
|
13613
13110
|
config._interfaceRegistry = config.interfaceRegistry;
|
|
@@ -13638,118 +13135,119 @@ config.initializeAdapterInstances = function (irConfig) {
|
|
|
13638
13135
|
return core.objectMap(config, this.initializeAdapterInstance);
|
|
13639
13136
|
};
|
|
13640
13137
|
|
|
13641
|
-
|
|
13642
|
-
|
|
13643
|
-
|
|
13644
|
-
|
|
13645
|
-
|
|
13646
|
-
|
|
13647
|
-
|
|
13648
|
-
|
|
13649
|
-
|
|
13650
|
-
|
|
13651
|
-
|
|
13652
|
-
|
|
13653
|
-
|
|
13654
|
-
|
|
13655
|
-
|
|
13656
|
-
|
|
13657
|
-
|
|
13658
|
-
|
|
13659
|
-
|
|
13660
|
-
|
|
13661
|
-
|
|
13662
|
-
|
|
13663
|
-
|
|
13664
|
-
|
|
13665
|
-
|
|
13666
|
-
|
|
13667
|
-
|
|
13668
|
-
|
|
13669
|
-
|
|
13670
|
-
if (objPrototype.push) {
|
|
13671
|
-
result = objPrototype.push.apply(this, goodAdds);
|
|
13672
|
-
}
|
|
13673
|
-
else {
|
|
13674
|
-
result = Array.prototype.push.apply(this, goodAdds);
|
|
13675
|
-
}
|
|
13676
|
-
processAdds$2(this, goodAdds);
|
|
13677
|
-
return result;
|
|
13678
|
-
},
|
|
13679
|
-
unshift: function (...args) {
|
|
13680
|
-
let goodAdds = this._getGoodAdds(args);
|
|
13681
|
-
if (!goodAdds.length) {
|
|
13682
|
-
return this.length;
|
|
13683
|
-
}
|
|
13684
|
-
this._beforeChange();
|
|
13685
|
-
let result;
|
|
13686
|
-
let objPrototype = Object.getPrototypeOf(this);
|
|
13687
|
-
if (objPrototype.unshift) {
|
|
13688
|
-
result = objPrototype.unshift.apply(this, goodAdds);
|
|
13689
|
-
}
|
|
13690
|
-
else {
|
|
13691
|
-
result = Array.prototype.unshift.apply(this, goodAdds);
|
|
13692
|
-
}
|
|
13693
|
-
processAdds$2(this, goodAdds);
|
|
13694
|
-
return result;
|
|
13695
|
-
},
|
|
13696
|
-
pop: function () {
|
|
13697
|
-
this._beforeChange();
|
|
13698
|
-
let result;
|
|
13699
|
-
let objPrototype = Object.getPrototypeOf(this);
|
|
13700
|
-
if (objPrototype.pop) {
|
|
13701
|
-
result = objPrototype.pop.apply(this);
|
|
13702
|
-
}
|
|
13703
|
-
else {
|
|
13704
|
-
result = Array.prototype.pop.apply(this);
|
|
13705
|
-
}
|
|
13706
|
-
processRemoves$2(this, [result]);
|
|
13707
|
-
return result;
|
|
13708
|
-
},
|
|
13709
|
-
shift: function () {
|
|
13710
|
-
this._beforeChange();
|
|
13711
|
-
let result;
|
|
13712
|
-
let objPrototype = Object.getPrototypeOf(this);
|
|
13713
|
-
if (objPrototype.shift) {
|
|
13714
|
-
result = objPrototype.shift.apply(this);
|
|
13715
|
-
}
|
|
13716
|
-
else {
|
|
13717
|
-
result = Array.prototype.shift.apply(this);
|
|
13718
|
-
}
|
|
13719
|
-
processRemoves$2(this, [result]);
|
|
13720
|
-
return result;
|
|
13721
|
-
},
|
|
13722
|
-
splice: function (...args) {
|
|
13723
|
-
let goodAdds = this._getGoodAdds(core.arraySlice(args, 2));
|
|
13724
|
-
let newArgs = core.arraySlice(args, 0, 2).concat(goodAdds);
|
|
13725
|
-
this._beforeChange();
|
|
13726
|
-
let result;
|
|
13727
|
-
let objPrototype = Object.getPrototypeOf(this);
|
|
13728
|
-
if (objPrototype.splice) {
|
|
13729
|
-
result = objPrototype.splice.apply(this, newArgs);
|
|
13730
|
-
}
|
|
13731
|
-
else {
|
|
13732
|
-
result = Array.prototype.splice.apply(this, newArgs);
|
|
13733
|
-
}
|
|
13734
|
-
processRemoves$2(this, result);
|
|
13735
|
-
if (goodAdds.length) {
|
|
13736
|
-
processAdds$2(this, goodAdds);
|
|
13737
|
-
}
|
|
13738
|
-
return result;
|
|
13739
|
-
},
|
|
13740
|
-
getEntityAspect: function () {
|
|
13741
|
-
return this.parent.entityAspect || this.parent.complexAspect.getEntityAspect();
|
|
13742
|
-
},
|
|
13743
|
-
_getEventParent: function () {
|
|
13744
|
-
return this.getEntityAspect();
|
|
13745
|
-
},
|
|
13746
|
-
_getPendingPubs: function () {
|
|
13747
|
-
let em = this.getEntityAspect().entityManager;
|
|
13748
|
-
return em && em._pendingPubs;
|
|
13749
|
-
},
|
|
13750
|
-
_beforeChange: function () {
|
|
13751
|
-
// default is to do nothing
|
|
13138
|
+
const ɵ0$3 = function (...args) {
|
|
13139
|
+
if (this._inProgress) {
|
|
13140
|
+
return -1;
|
|
13141
|
+
}
|
|
13142
|
+
let goodAdds = this._getGoodAdds(args);
|
|
13143
|
+
if (!goodAdds.length) {
|
|
13144
|
+
return this.length;
|
|
13145
|
+
}
|
|
13146
|
+
this._beforeChange();
|
|
13147
|
+
let result;
|
|
13148
|
+
let objPrototype = Object.getPrototypeOf(this);
|
|
13149
|
+
if (objPrototype.push) {
|
|
13150
|
+
result = objPrototype.push.apply(this, goodAdds);
|
|
13151
|
+
}
|
|
13152
|
+
else {
|
|
13153
|
+
result = Array.prototype.push.apply(this, goodAdds);
|
|
13154
|
+
}
|
|
13155
|
+
processAdds(this, goodAdds);
|
|
13156
|
+
return result;
|
|
13157
|
+
}, ɵ1$2 = function (...args) {
|
|
13158
|
+
if (this._inProgress) {
|
|
13159
|
+
return -1;
|
|
13160
|
+
}
|
|
13161
|
+
let goodAdds = args;
|
|
13162
|
+
this._beforeChange();
|
|
13163
|
+
let result;
|
|
13164
|
+
let objPrototype = Object.getPrototypeOf(this);
|
|
13165
|
+
if (objPrototype.push) {
|
|
13166
|
+
result = objPrototype.push.apply(this, goodAdds);
|
|
13752
13167
|
}
|
|
13168
|
+
else {
|
|
13169
|
+
result = Array.prototype.push.apply(this, goodAdds);
|
|
13170
|
+
}
|
|
13171
|
+
processAdds(this, goodAdds);
|
|
13172
|
+
return result;
|
|
13173
|
+
}, ɵ2$1 = function (...args) {
|
|
13174
|
+
let goodAdds = this._getGoodAdds(args);
|
|
13175
|
+
if (!goodAdds.length) {
|
|
13176
|
+
return this.length;
|
|
13177
|
+
}
|
|
13178
|
+
this._beforeChange();
|
|
13179
|
+
let result;
|
|
13180
|
+
let objPrototype = Object.getPrototypeOf(this);
|
|
13181
|
+
if (objPrototype.unshift) {
|
|
13182
|
+
result = objPrototype.unshift.apply(this, goodAdds);
|
|
13183
|
+
}
|
|
13184
|
+
else {
|
|
13185
|
+
result = Array.prototype.unshift.apply(this, goodAdds);
|
|
13186
|
+
}
|
|
13187
|
+
processAdds(this, goodAdds);
|
|
13188
|
+
return result;
|
|
13189
|
+
}, ɵ3$1 = function () {
|
|
13190
|
+
this._beforeChange();
|
|
13191
|
+
let result;
|
|
13192
|
+
let objPrototype = Object.getPrototypeOf(this);
|
|
13193
|
+
if (objPrototype.pop) {
|
|
13194
|
+
result = objPrototype.pop.apply(this);
|
|
13195
|
+
}
|
|
13196
|
+
else {
|
|
13197
|
+
result = Array.prototype.pop.apply(this);
|
|
13198
|
+
}
|
|
13199
|
+
processRemoves(this, [result]);
|
|
13200
|
+
return result;
|
|
13201
|
+
}, ɵ4$1 = function () {
|
|
13202
|
+
this._beforeChange();
|
|
13203
|
+
let result;
|
|
13204
|
+
let objPrototype = Object.getPrototypeOf(this);
|
|
13205
|
+
if (objPrototype.shift) {
|
|
13206
|
+
result = objPrototype.shift.apply(this);
|
|
13207
|
+
}
|
|
13208
|
+
else {
|
|
13209
|
+
result = Array.prototype.shift.apply(this);
|
|
13210
|
+
}
|
|
13211
|
+
processRemoves(this, [result]);
|
|
13212
|
+
return result;
|
|
13213
|
+
}, ɵ5$1 = function (...args) {
|
|
13214
|
+
let goodAdds = this._getGoodAdds(core.arraySlice(args, 2));
|
|
13215
|
+
let newArgs = core.arraySlice(args, 0, 2).concat(goodAdds);
|
|
13216
|
+
this._beforeChange();
|
|
13217
|
+
let result;
|
|
13218
|
+
let objPrototype = Object.getPrototypeOf(this);
|
|
13219
|
+
if (objPrototype.splice) {
|
|
13220
|
+
result = objPrototype.splice.apply(this, newArgs);
|
|
13221
|
+
}
|
|
13222
|
+
else {
|
|
13223
|
+
result = Array.prototype.splice.apply(this, newArgs);
|
|
13224
|
+
}
|
|
13225
|
+
processRemoves(this, result);
|
|
13226
|
+
if (goodAdds.length) {
|
|
13227
|
+
processAdds(this, goodAdds);
|
|
13228
|
+
}
|
|
13229
|
+
return result;
|
|
13230
|
+
}, ɵ6$1 = function () {
|
|
13231
|
+
return this.parent.entityAspect || this.parent.complexAspect.getEntityAspect();
|
|
13232
|
+
}, ɵ7$1 = function () {
|
|
13233
|
+
return this.getEntityAspect();
|
|
13234
|
+
}, ɵ8$1 = function () {
|
|
13235
|
+
let em = this.getEntityAspect().entityManager;
|
|
13236
|
+
return em && em._pendingPubs;
|
|
13237
|
+
}, ɵ9$1 = function () {
|
|
13238
|
+
// default is to do nothing
|
|
13239
|
+
};
|
|
13240
|
+
let mixin = {
|
|
13241
|
+
push: ɵ0$3,
|
|
13242
|
+
_push: ɵ1$2,
|
|
13243
|
+
unshift: ɵ2$1,
|
|
13244
|
+
pop: ɵ3$1,
|
|
13245
|
+
shift: ɵ4$1,
|
|
13246
|
+
splice: ɵ5$1,
|
|
13247
|
+
getEntityAspect: ɵ6$1,
|
|
13248
|
+
_getEventParent: ɵ7$1,
|
|
13249
|
+
_getPendingPubs: ɵ8$1,
|
|
13250
|
+
_beforeChange: ɵ9$1
|
|
13753
13251
|
};
|
|
13754
13252
|
function updateEntityState(obsArray) {
|
|
13755
13253
|
let entityAspect = obsArray.getEntityAspect();
|
|
@@ -13782,14 +13280,14 @@ function initializeParent(obsArray, parent, parentProperty) {
|
|
|
13782
13280
|
obsArray.parent = parent;
|
|
13783
13281
|
obsArray.parentProperty = parentProperty;
|
|
13784
13282
|
}
|
|
13785
|
-
function processAdds
|
|
13283
|
+
function processAdds(obsArray, adds) {
|
|
13786
13284
|
obsArray._processAdds(adds);
|
|
13787
13285
|
// this is referencing the name of the method on the complexArray not the name of the event
|
|
13788
13286
|
//var args = { added: adds };
|
|
13789
13287
|
//args[obsArray._typeName] = obsArray;
|
|
13790
13288
|
publish(obsArray, "arrayChanged", { array: obsArray, added: adds });
|
|
13791
13289
|
}
|
|
13792
|
-
function processRemoves
|
|
13290
|
+
function processRemoves(obsArray, removes) {
|
|
13793
13291
|
obsArray._processRemoves(removes);
|
|
13794
13292
|
// this is referencing the name of the method on the array not the name of the event
|
|
13795
13293
|
publish(obsArray, "arrayChanged", { array: obsArray, removed: removes });
|
|
@@ -13820,6 +13318,23 @@ const observableArray = {
|
|
|
13820
13318
|
initializeParent: initializeParent
|
|
13821
13319
|
};
|
|
13822
13320
|
|
|
13321
|
+
const ɵ0$4 = function (callback, errorCallback) {
|
|
13322
|
+
let parent = this.parentEntity;
|
|
13323
|
+
let query = EntityQuery.fromEntityNavigation(this.parentEntity, this.navigationProperty);
|
|
13324
|
+
let em = parent.entityAspect.entityManager;
|
|
13325
|
+
return em.executeQuery(query, callback, errorCallback);
|
|
13326
|
+
}, ɵ1$3 = function () {
|
|
13327
|
+
return this.parentEntity.entityAspect;
|
|
13328
|
+
}, ɵ2$2 = function () {
|
|
13329
|
+
let em = this.parentEntity.entityAspect.entityManager;
|
|
13330
|
+
return em && em._pendingPubs;
|
|
13331
|
+
}, ɵ3$2 = function (adds) {
|
|
13332
|
+
return getGoodAdds(this, adds);
|
|
13333
|
+
}, ɵ4$2 = function (adds) {
|
|
13334
|
+
processAdds$1(this, adds);
|
|
13335
|
+
}, ɵ5$2 = function (removes) {
|
|
13336
|
+
processRemoves$1(this, removes);
|
|
13337
|
+
};
|
|
13823
13338
|
let relationArrayMixin = {
|
|
13824
13339
|
/**
|
|
13825
13340
|
Relation arrays are not actually classes, they are objects that mimic arrays. A relation array is collection of
|
|
@@ -13856,31 +13371,15 @@ let relationArrayMixin = {
|
|
|
13856
13371
|
@param [errorCallback] {Function}
|
|
13857
13372
|
@return {Promise}
|
|
13858
13373
|
**/
|
|
13859
|
-
load:
|
|
13860
|
-
|
|
13861
|
-
|
|
13862
|
-
let em = parent.entityAspect.entityManager;
|
|
13863
|
-
return em.executeQuery(query, callback, errorCallback);
|
|
13864
|
-
},
|
|
13865
|
-
_getEventParent: function () {
|
|
13866
|
-
return this.parentEntity.entityAspect;
|
|
13867
|
-
},
|
|
13868
|
-
_getPendingPubs: function () {
|
|
13869
|
-
let em = this.parentEntity.entityAspect.entityManager;
|
|
13870
|
-
return em && em._pendingPubs;
|
|
13871
|
-
},
|
|
13374
|
+
load: ɵ0$4,
|
|
13375
|
+
_getEventParent: ɵ1$3,
|
|
13376
|
+
_getPendingPubs: ɵ2$2,
|
|
13872
13377
|
// virtual impls
|
|
13873
|
-
_getGoodAdds:
|
|
13874
|
-
|
|
13875
|
-
|
|
13876
|
-
_processAdds: function (adds) {
|
|
13877
|
-
processAdds$1(this, adds);
|
|
13878
|
-
},
|
|
13879
|
-
_processRemoves: function (removes) {
|
|
13880
|
-
processRemoves$1(this, removes);
|
|
13881
|
-
}
|
|
13378
|
+
_getGoodAdds: ɵ3$2,
|
|
13379
|
+
_processAdds: ɵ4$2,
|
|
13380
|
+
_processRemoves: ɵ5$2
|
|
13882
13381
|
};
|
|
13883
|
-
function getGoodAdds
|
|
13382
|
+
function getGoodAdds(relationArray, adds) {
|
|
13884
13383
|
let goodAdds = checkForDups(relationArray, adds);
|
|
13885
13384
|
if (!goodAdds.length) {
|
|
13886
13385
|
return goodAdds;
|
|
@@ -13988,6 +13487,28 @@ function makeRelationArray(arr, parentEntity, navigationProperty) {
|
|
|
13988
13487
|
return core.extend(arrX, relationArrayMixin);
|
|
13989
13488
|
}
|
|
13990
13489
|
|
|
13490
|
+
const ɵ0$5 = function (adds) {
|
|
13491
|
+
return getGoodAdds$1(this, adds);
|
|
13492
|
+
}, ɵ1$4 = function () {
|
|
13493
|
+
observableArray.updateEntityState(this);
|
|
13494
|
+
}, ɵ2$3 = function (adds) {
|
|
13495
|
+
processAdds$2(this, adds);
|
|
13496
|
+
}, ɵ3$3 = function (removes) {
|
|
13497
|
+
processRemoves$2(this, removes);
|
|
13498
|
+
}, ɵ4$3 = function () {
|
|
13499
|
+
if (!this._origValues)
|
|
13500
|
+
return;
|
|
13501
|
+
let that = this;
|
|
13502
|
+
this.forEach(function (co) {
|
|
13503
|
+
clearAspect(co, that);
|
|
13504
|
+
});
|
|
13505
|
+
this.length = 0;
|
|
13506
|
+
this._origValues.forEach(function (co) {
|
|
13507
|
+
that.push(co);
|
|
13508
|
+
});
|
|
13509
|
+
}, ɵ5$3 = function () {
|
|
13510
|
+
this._origValues = null;
|
|
13511
|
+
};
|
|
13991
13512
|
let complexArrayMixin = {
|
|
13992
13513
|
// complexArray will have the following props
|
|
13993
13514
|
// parent
|
|
@@ -14022,43 +13543,22 @@ let complexArrayMixin = {
|
|
|
14022
13543
|
@readOnly
|
|
14023
13544
|
**/
|
|
14024
13545
|
// virtual impls
|
|
14025
|
-
_getGoodAdds:
|
|
14026
|
-
|
|
14027
|
-
|
|
14028
|
-
|
|
14029
|
-
|
|
14030
|
-
|
|
14031
|
-
_processAdds: function (adds) {
|
|
14032
|
-
processAdds(this, adds);
|
|
14033
|
-
},
|
|
14034
|
-
_processRemoves: function (removes) {
|
|
14035
|
-
processRemoves(this, removes);
|
|
14036
|
-
},
|
|
14037
|
-
_rejectChanges: function () {
|
|
14038
|
-
if (!this._origValues)
|
|
14039
|
-
return;
|
|
14040
|
-
let that = this;
|
|
14041
|
-
this.forEach(function (co) {
|
|
14042
|
-
clearAspect(co, that);
|
|
14043
|
-
});
|
|
14044
|
-
this.length = 0;
|
|
14045
|
-
this._origValues.forEach(function (co) {
|
|
14046
|
-
that.push(co);
|
|
14047
|
-
});
|
|
14048
|
-
},
|
|
14049
|
-
_acceptChanges: function () {
|
|
14050
|
-
this._origValues = null;
|
|
14051
|
-
}
|
|
13546
|
+
_getGoodAdds: ɵ0$5,
|
|
13547
|
+
_beforeChange: ɵ1$4,
|
|
13548
|
+
_processAdds: ɵ2$3,
|
|
13549
|
+
_processRemoves: ɵ3$3,
|
|
13550
|
+
_rejectChanges: ɵ4$3,
|
|
13551
|
+
_acceptChanges: ɵ5$3
|
|
14052
13552
|
};
|
|
14053
13553
|
// local functions
|
|
14054
|
-
function getGoodAdds(complexArray, adds) {
|
|
13554
|
+
function getGoodAdds$1(complexArray, adds) {
|
|
14055
13555
|
// remove any that are already added here
|
|
14056
13556
|
return adds.filter(function (a) {
|
|
14057
13557
|
// return a.parent !== complexArray.parent; // TODO: check if this is actually a bug in original breezejs ???
|
|
14058
13558
|
return a.complexAspect == null || a.complexAspect.parent !== complexArray.parent;
|
|
14059
13559
|
});
|
|
14060
13560
|
}
|
|
14061
|
-
function processAdds(complexArray, adds) {
|
|
13561
|
+
function processAdds$2(complexArray, adds) {
|
|
14062
13562
|
adds.forEach(function (a) {
|
|
14063
13563
|
// if (a.parent != null) { // TODO: check if this is actually a bug in original breezejs ???
|
|
14064
13564
|
if (a.complexAspect && a.complexAspect.parent != null) {
|
|
@@ -14067,7 +13567,7 @@ function processAdds(complexArray, adds) {
|
|
|
14067
13567
|
setAspect(a, complexArray);
|
|
14068
13568
|
});
|
|
14069
13569
|
}
|
|
14070
|
-
function processRemoves(complexArray, removes) {
|
|
13570
|
+
function processRemoves$2(complexArray, removes) {
|
|
14071
13571
|
removes.forEach(function (a) {
|
|
14072
13572
|
clearAspect(a, complexArray);
|
|
14073
13573
|
});
|
|
@@ -14102,6 +13602,28 @@ function makeComplexArray(arr, parent, parentProperty) {
|
|
|
14102
13602
|
return core.extend(arrX, complexArrayMixin);
|
|
14103
13603
|
}
|
|
14104
13604
|
|
|
13605
|
+
const ɵ0$6 = function (adds) {
|
|
13606
|
+
return adds;
|
|
13607
|
+
}, ɵ1$5 = function () {
|
|
13608
|
+
let entityAspect = this.getEntityAspect();
|
|
13609
|
+
if (entityAspect.entityState.isUnchanged()) {
|
|
13610
|
+
entityAspect.setModified();
|
|
13611
|
+
}
|
|
13612
|
+
if (entityAspect.entityState.isModified() && !this._origValues) {
|
|
13613
|
+
this._origValues = this.slice(0);
|
|
13614
|
+
}
|
|
13615
|
+
}, ɵ2$4 = function (adds) {
|
|
13616
|
+
// nothing needed
|
|
13617
|
+
}, ɵ3$4 = function (removes) {
|
|
13618
|
+
// nothing needed;
|
|
13619
|
+
}, ɵ4$4 = function () {
|
|
13620
|
+
if (!this._origValues)
|
|
13621
|
+
return;
|
|
13622
|
+
this.length = 0;
|
|
13623
|
+
Array.prototype.push.apply(this, this._origValues);
|
|
13624
|
+
}, ɵ5$4 = function () {
|
|
13625
|
+
this._origValues = null;
|
|
13626
|
+
};
|
|
14105
13627
|
// TODO: mixin impl is not very typesafe
|
|
14106
13628
|
// Not needed
|
|
14107
13629
|
// interface IPrimitiveArray extends IObservableArray {
|
|
@@ -14143,33 +13665,12 @@ let primitiveArrayMixin = {
|
|
|
14143
13665
|
@readOnly
|
|
14144
13666
|
**/
|
|
14145
13667
|
// virtual impls
|
|
14146
|
-
_getGoodAdds:
|
|
14147
|
-
|
|
14148
|
-
|
|
14149
|
-
|
|
14150
|
-
|
|
14151
|
-
|
|
14152
|
-
entityAspect.setModified();
|
|
14153
|
-
}
|
|
14154
|
-
if (entityAspect.entityState.isModified() && !this._origValues) {
|
|
14155
|
-
this._origValues = this.slice(0);
|
|
14156
|
-
}
|
|
14157
|
-
},
|
|
14158
|
-
_processAdds: function (adds) {
|
|
14159
|
-
// nothing needed
|
|
14160
|
-
},
|
|
14161
|
-
_processRemoves: function (removes) {
|
|
14162
|
-
// nothing needed;
|
|
14163
|
-
},
|
|
14164
|
-
_rejectChanges: function () {
|
|
14165
|
-
if (!this._origValues)
|
|
14166
|
-
return;
|
|
14167
|
-
this.length = 0;
|
|
14168
|
-
Array.prototype.push.apply(this, this._origValues);
|
|
14169
|
-
},
|
|
14170
|
-
_acceptChanges: function () {
|
|
14171
|
-
this._origValues = null;
|
|
14172
|
-
}
|
|
13668
|
+
_getGoodAdds: ɵ0$6,
|
|
13669
|
+
_beforeChange: ɵ1$5,
|
|
13670
|
+
_processAdds: ɵ2$4,
|
|
13671
|
+
_processRemoves: ɵ3$4,
|
|
13672
|
+
_rejectChanges: ɵ4$4,
|
|
13673
|
+
_acceptChanges: ɵ5$4
|
|
14173
13674
|
};
|
|
14174
13675
|
// local functions
|
|
14175
13676
|
/** For use by breeze plugin authors only. The class is for use in building a [[IModelLibraryAdapter]] implementation.
|
|
@@ -14244,5 +13745,5 @@ if (win) {
|
|
|
14244
13745
|
* Generated bundle index. Do not edit.
|
|
14245
13746
|
*/
|
|
14246
13747
|
|
|
14247
|
-
export { AbstractDataServiceAdapter, AndOrPredicate, AnyAllPredicate, AutoGeneratedKeyType, BinaryPredicate, BreezeConfig, BreezeEnum, BreezeEvent, ComplexAspect, ComplexType, DataProperty, DataService, DataType, EntityAction, EntityAspect, EntityKey, EntityManager, EntityQuery, EntityState, EntityType, ExpandClause, FetchStrategy, FilterQueryOp, FnExpr, InterfaceRegistry, JsonResultsAdapter, KeyGenerator, LitExpr, LocalQueryComparisonOptions, MappingContext, MergeStrategy, MetadataStore, NamingConvention, NavigationProperty, OrderByClause, Predicate, PropExpr, QueryOptions, SaveOptions, SelectClause, UnaryPredicate, ValidationError, ValidationOptions, Validator, assertConfig, assertParam, breeze, config, core, makeComplexArray, makePrimitiveArray, makeRelationArray };
|
|
14248
|
-
//# sourceMappingURL=breeze-client.
|
|
13748
|
+
export { AbstractDataServiceAdapter, AndOrPredicate, AnyAllPredicate, AutoGeneratedKeyType, BinaryPredicate, BreezeConfig, BreezeEnum, BreezeEvent, ComplexAspect, ComplexType, DataProperty, DataService, DataType, EntityAction, EntityAspect, EntityKey, EntityManager, EntityQuery, EntityState, EntityType, ExpandClause, FetchStrategy, FilterQueryOp, FnExpr, InterfaceRegistry, JsonResultsAdapter, KeyGenerator, LitExpr, LocalQueryComparisonOptions, MappingContext, MergeStrategy, MetadataStore, NamingConvention, NavigationProperty, OrderByClause, Predicate, PropExpr, QueryOptions, SaveOptions, SelectClause, UnaryPredicate, ValidationError, ValidationOptions, Validator, assertConfig, assertParam, breeze, config, core, makeComplexArray, makePrimitiveArray, makeRelationArray, PredicateExpression as ɵa, Param as ɵb, qualifyTypeName as ɵc, BooleanQueryOp as ɵd };
|
|
13749
|
+
//# sourceMappingURL=breeze-client.js.map
|