breeze-client 2.2.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +83 -63
- package/adapters/abstract-data-service-adapter.d.ts +120 -0
- package/adapters/abstract-data-service-adapter.js +395 -0
- package/adapters/abstract-data-service-adapter.js.map +1 -0
- package/adapters/adapter-ajax-fetch.d.ts +12 -0
- package/adapters/adapter-ajax-fetch.js +13 -0
- package/adapters/adapter-ajax-fetch.js.map +1 -0
- package/{adapter-ajax-post → adapters}/adapter-ajax-post.d.ts +40 -36
- package/{fesm2022/breeze-client-adapter-ajax-post.mjs → adapters/adapter-ajax-post.js} +80 -82
- package/adapters/adapter-ajax-post.js.map +1 -0
- package/{adapter-ajax-fetch → adapters}/adapter-core.d.ts +4 -4
- package/{fesm2022/breeze-client-adapter-uri-builder-json.mjs → adapters/adapter-core.js} +48 -91
- package/adapters/adapter-core.js.map +1 -0
- package/adapters/adapter-data-service-webapi.d.ts +9 -0
- package/{fesm2022/breeze-client-adapter-data-service-webapi.mjs → adapters/adapter-data-service-webapi.js} +105 -107
- package/adapters/adapter-data-service-webapi.js.map +1 -0
- package/adapters/adapter-model-library-backing-store.d.ts +32 -0
- package/adapters/adapter-model-library-backing-store.js +321 -0
- package/adapters/adapter-model-library-backing-store.js.map +1 -0
- package/adapters/adapter-uri-builder-json.d.ts +11 -0
- package/adapters/adapter-uri-builder-json.js +40 -0
- package/adapters/adapter-uri-builder-json.js.map +1 -0
- package/adapters/http.d.ts +52 -0
- package/adapters/http.js +202 -0
- package/adapters/http.js.map +1 -0
- package/angular/adapter-angular-httpclient.d.ts +21 -0
- package/angular/adapter-angular-httpclient.js +70 -0
- package/angular/adapter-angular-httpclient.js.map +1 -0
- package/breeze.d.ts +215 -0
- package/breeze.js +141 -0
- package/breeze.js.map +1 -0
- package/config/config.d.ts +212 -0
- package/config/config.js +392 -0
- package/config/config.js.map +1 -0
- package/config/configure.d.ts +66 -0
- package/config/configure.js +46 -0
- package/config/configure.js.map +1 -0
- package/config/default-adapters.d.ts +1 -0
- package/config/default-adapters.js +40 -0
- package/config/default-adapters.js.map +1 -0
- package/config/interface-registry.d.ts +191 -0
- package/config/interface-registry.js +5 -0
- package/config/interface-registry.js.map +1 -0
- package/{src → core}/assert-param.d.ts +52 -60
- package/core/assert-param.js +390 -0
- package/core/assert-param.js.map +1 -0
- package/core/core.d.ts +285 -0
- package/core/core.js +772 -0
- package/core/core.js.map +1 -0
- package/core/enum.d.ts +116 -0
- package/core/enum.js +167 -0
- package/core/enum.js.map +1 -0
- package/core/event.d.ts +169 -0
- package/core/event.js +338 -0
- package/core/event.js.map +1 -0
- package/entity/array.d.ts +3 -0
- package/entity/array.js +4 -0
- package/entity/array.js.map +1 -0
- package/entity/complex-array.d.ts +17 -0
- package/entity/complex-array.js +104 -0
- package/entity/complex-array.js.map +1 -0
- package/entity/default-property-interceptor.d.ts +1 -0
- package/entity/default-property-interceptor.js +496 -0
- package/entity/default-property-interceptor.js.map +1 -0
- package/{src → entity}/entity-action.d.ts +36 -42
- package/entity/entity-action.js +45 -0
- package/entity/entity-action.js.map +1 -0
- package/entity/entity-aspect.d.ts +457 -0
- package/entity/entity-aspect.js +1262 -0
- package/entity/entity-aspect.js.map +1 -0
- package/entity/entity-base.d.ts +55 -0
- package/entity/entity-base.js +41 -0
- package/entity/entity-base.js.map +1 -0
- package/entity/entity-group.d.ts +1 -0
- package/entity/entity-group.js +224 -0
- package/entity/entity-group.js.map +1 -0
- package/entity/entity-key.d.ts +95 -0
- package/entity/entity-key.js +189 -0
- package/entity/entity-key.js.map +1 -0
- package/{src → entity}/entity-state.d.ts +112 -84
- package/entity/entity-state.js +135 -0
- package/entity/entity-state.js.map +1 -0
- package/entity/key-generator.d.ts +57 -0
- package/entity/key-generator.js +155 -0
- package/entity/key-generator.js.map +1 -0
- package/entity/observable-array.d.ts +25 -0
- package/entity/observable-array.js +230 -0
- package/entity/observable-array.js.map +1 -0
- package/entity/primitive-array.d.ts +12 -0
- package/entity/primitive-array.js +71 -0
- package/entity/primitive-array.js.map +1 -0
- package/entity/relation-array.d.ts +24 -0
- package/entity/relation-array.js +176 -0
- package/entity/relation-array.js.map +1 -0
- package/entity/unattached-children-map.d.ts +1 -0
- package/entity/unattached-children-map.js +105 -0
- package/entity/unattached-children-map.js.map +1 -0
- package/generate-entity-classes.js +1176 -0
- package/manager/entity-manager.d.ts +801 -0
- package/manager/entity-manager.js +2395 -0
- package/manager/entity-manager.js.map +1 -0
- package/{src → manager}/save-options.d.ts +48 -42
- package/manager/save-options.js +51 -0
- package/manager/save-options.js.map +1 -0
- package/{src → metadata}/data-service.d.ts +229 -184
- package/metadata/data-service.js +246 -0
- package/metadata/data-service.js.map +1 -0
- package/metadata/data-type.d.ts +122 -0
- package/metadata/data-type.js +465 -0
- package/metadata/data-type.js.map +1 -0
- package/metadata/entity-metadata.d.ts +1193 -0
- package/metadata/entity-metadata.js +2502 -0
- package/metadata/entity-metadata.js.map +1 -0
- package/{src → metadata}/local-query-comparison-options.d.ts +65 -59
- package/metadata/local-query-comparison-options.js +69 -0
- package/metadata/local-query-comparison-options.js.map +1 -0
- package/{src → metadata}/naming-convention.d.ts +75 -72
- package/metadata/naming-convention.js +97 -0
- package/metadata/naming-convention.js.map +1 -0
- package/mixins/mixin-get-entity-graph.d.ts +63 -0
- package/{fesm2022/breeze-client-mixin-get-entity-graph.mjs → mixins/mixin-get-entity-graph.js} +331 -253
- package/mixins/mixin-get-entity-graph.js.map +1 -0
- package/mixins/mixin-save-queuing.d.ts +98 -0
- package/{fesm2022/breeze-client-mixin-save-queuing.mjs → mixins/mixin-save-queuing.js} +493 -365
- package/mixins/mixin-save-queuing.js.map +1 -0
- package/package.json +63 -94
- package/query/entity-query.d.ts +521 -0
- package/query/entity-query.js +1149 -0
- package/query/entity-query.js.map +1 -0
- package/{src → query}/mapping-context.d.ts +44 -46
- package/query/mapping-context.js +412 -0
- package/query/mapping-context.js.map +1 -0
- package/query/predicate.d.ts +394 -0
- package/query/predicate.js +1294 -0
- package/query/predicate.js.map +1 -0
- package/query/property-path.d.ts +252 -0
- package/query/property-path.js +2 -0
- package/query/property-path.js.map +1 -0
- package/{src → query}/query-options.d.ts +143 -119
- package/query/query-options.js +180 -0
- package/query/query-options.js.map +1 -0
- package/rxjs/breeze-rxjs.d.ts +72 -0
- package/rxjs/breeze-rxjs.js +117 -0
- package/rxjs/breeze-rxjs.js.map +1 -0
- package/validation/validate.d.ts +583 -0
- package/validation/validate.js +961 -0
- package/validation/validate.js.map +1 -0
- package/{src → validation}/validation-options.d.ts +67 -63
- package/validation/validation-options.js +70 -0
- package/validation/validation-options.js.map +1 -0
- package/adapter-ajax-angularjs/adapter-ajax-angularjs.d.ts +0 -17
- package/adapter-ajax-angularjs/adapter-core.d.ts +0 -4
- package/adapter-ajax-angularjs/index.d.ts +0 -5
- package/adapter-ajax-fetch/adapter-ajax-fetch.d.ts +0 -18
- package/adapter-ajax-fetch/index.d.ts +0 -5
- package/adapter-ajax-httpclient/adapter-ajax-httpclient.d.ts +0 -13
- package/adapter-ajax-httpclient/adapter-core.d.ts +0 -4
- package/adapter-ajax-httpclient/index.d.ts +0 -5
- package/adapter-ajax-jquery/adapter-ajax-jquery.d.ts +0 -15
- package/adapter-ajax-jquery/index.d.ts +0 -5
- package/adapter-ajax-post/index.d.ts +0 -5
- package/adapter-data-service-odata/adapter-core.d.ts +0 -4
- package/adapter-data-service-odata/adapter-data-service-odata.d.ts +0 -17
- package/adapter-data-service-odata/index.d.ts +0 -5
- package/adapter-data-service-webapi/adapter-data-service-webapi.d.ts +0 -15
- package/adapter-data-service-webapi/index.d.ts +0 -5
- package/adapter-model-library-backing-store/adapter-model-library-backing-store.d.ts +0 -10
- package/adapter-model-library-backing-store/index.d.ts +0 -5
- package/adapter-model-library-ko/adapter-model-library-ko.d.ts +0 -10
- package/adapter-model-library-ko/index.d.ts +0 -5
- package/adapter-uri-builder-json/adapter-core.d.ts +0 -4
- package/adapter-uri-builder-json/adapter-uri-builder-json.d.ts +0 -8
- package/adapter-uri-builder-json/index.d.ts +0 -5
- package/adapter-uri-builder-odata/adapter-core.d.ts +0 -4
- package/adapter-uri-builder-odata/adapter-uri-builder-odata.d.ts +0 -8
- package/adapter-uri-builder-odata/index.d.ts +0 -5
- 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/adapter-data-service-odata.mjs +0 -461
- 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 -221
- package/esm2022/src/data-type.mjs +0 -510
- package/esm2022/src/default-property-interceptor.mjs +0 -460
- package/esm2022/src/entity-action.mjs +0 -45
- package/esm2022/src/entity-aspect.mjs +0 -897
- package/esm2022/src/entity-group.mjs +0 -192
- package/esm2022/src/entity-key.mjs +0 -125
- package/esm2022/src/entity-manager.mjs +0 -2163
- 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 -65
- package/esm2022/src/mapping-context.mjs +0 -411
- package/esm2022/src/naming-convention.mjs +0 -92
- 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 -152
- package/esm2022/src/relation-array.mjs +0 -173
- package/esm2022/src/save-options.mjs +0 -41
- package/esm2022/src/unattached-children-map.mjs +0 -56
- package/esm2022/src/validate.mjs +0 -995
- package/esm2022/src/validation-options.mjs +0 -64
- package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs +0 -190
- package/fesm2022/breeze-client-adapter-ajax-angularjs.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-fetch.mjs +0 -190
- package/fesm2022/breeze-client-adapter-ajax-fetch.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs +0 -194
- package/fesm2022/breeze-client-adapter-ajax-httpclient.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-ajax-jquery.mjs +0 -114
- 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 +0 -516
- 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 +0 -276
- package/fesm2022/breeze-client-adapter-model-library-backing-store.mjs.map +0 -1
- package/fesm2022/breeze-client-adapter-model-library-ko.mjs +0 -248
- 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 +0 -246
- 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 +0 -14144
- package/fesm2022/breeze-client.mjs.map +0 -1
- package/index.d.ts +0 -1
- package/mixin-get-entity-graph/index.d.ts +0 -5
- package/mixin-get-entity-graph/mixin-get-entity-graph.d.ts +0 -31
- package/mixin-save-queuing/index.d.ts +0 -5
- package/mixin-save-queuing/mixin-save-queuing.d.ts +0 -32
- package/src/abstract-data-service-adapter.d.ts +0 -84
- package/src/array.d.ts +0 -3
- package/src/breeze.d.ts +0 -139
- package/src/complex-array.d.ts +0 -13
- package/src/config.d.ts +0 -104
- package/src/core.d.ts +0 -164
- package/src/csdl-metadata-parser.d.ts +0 -7
- package/src/data-type.d.ts +0 -89
- package/src/default-property-interceptor.d.ts +0 -4
- package/src/entity-aspect.d.ts +0 -332
- package/src/entity-group.d.ts +0 -28
- package/src/entity-key.d.ts +0 -77
- package/src/entity-manager.d.ts +0 -680
- package/src/entity-metadata.d.ts +0 -988
- package/src/entity-query.d.ts +0 -444
- package/src/enum.d.ts +0 -100
- package/src/event.d.ts +0 -142
- package/src/interface-registry.d.ts +0 -150
- package/src/key-generator.d.ts +0 -12
- package/src/observable-array.d.ts +0 -52
- package/src/predicate.d.ts +0 -376
- package/src/primitive-array.d.ts +0 -7
- package/src/relation-array.d.ts +0 -18
- package/src/unattached-children-map.d.ts +0 -19
- package/src/validate.d.ts +0 -650
package/core/core.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"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","sourcesContent":["/** See if this comment will make it into .d.ts */\nimport { BreezeEnum } from './enum.js';\n\n/** The success callback accepted by the deprecated callback form of the async methods.\n@deprecated Await the returned promise instead of passing callbacks. */\nexport interface Callback {\n (data: any): void;\n}\n\n// type Predicate = (i: any) => boolean;\ntype Predicate<T> = (i: T) => boolean;\n\n/** An object being deliberately indexed by arbitrary string key.\n The exported signatures below keep `Object` on purpose: narrowing them to this type\n would reject the class instances callers pass, because class types have no index\n signature. The cast is confined to the one line that needs it. */\ntype Indexed = Record<string, any>;\n\n// NOTE: the `|| {}` on every Object.keys call below is load-bearing. These helpers are\n// called with null and undefined by design; the `for...in` loops they replaced treated\n// that as a no-op, whereas Object.keys(null) throws.\n\n// iterate over object\nfunction objectForEach(obj: Object, kvFn: (key: string, val: any) => any) {\n const rec = obj as Indexed;\n for (const key of Object.keys(rec || {})) {\n kvFn(key, rec[key]);\n }\n}\n\nfunction objectMap(obj: Object, kvFn?: (key: string, val: any) => any): any[] {\n const rec = obj as Indexed;\n let results: any[] = [];\n for (const key of Object.keys(rec || {})) {\n let result = kvFn ? kvFn(key, rec[key]) : rec[key];\n if (result !== undefined) {\n results.push(result);\n }\n }\n return results;\n}\n\nfunction objectFirst(obj: Object, kvPredicate: (key: string, val: any) => boolean): {\n /** The property's name. */\n key: string,\n /** The property's value. */\n value: any\n} | null {\n const rec = obj as Indexed;\n for (const key of Object.keys(rec || {})) {\n let value = rec[key];\n if (kvPredicate(key, value)) {\n return { key: key, value: value };\n }\n }\n return null;\n}\n\nfunction isSettable(obj: Object, propertyName: string): boolean {\n let pd = getPropDescriptor(obj, propertyName);\n if (pd == null) return true;\n return !!(pd.writable || pd.set);\n}\n\nfunction getPropDescriptor(obj: Object, propertyName: string): PropertyDescriptor | undefined {\n if (obj.hasOwnProperty(propertyName)) {\n return Object.getOwnPropertyDescriptor(obj, propertyName);\n } else {\n let nextObj = Object.getPrototypeOf(obj);\n if (nextObj == null) return undefined;\n return getPropDescriptor(nextObj, propertyName);\n }\n}\n\n// Functional extensions\n\n/** can be used like: persons.filter(propEq(\"firstName\", \"John\")) */\nfunction propEq(propertyName: string, value: any): (obj: Object) => boolean {\n return function (obj: any) {\n return obj[propertyName] === value;\n };\n}\n\n/** can be used like: persons.filter(propEq(\"firstName\", \"FirstName\", \"John\")) */\nfunction propsEq(property1Name: string, property2Name: string, value: any): (obj: Object) => boolean {\n return function (obj: any) {\n return obj[property1Name] === value || obj[property2Name] === value;\n };\n}\n\n/** can be used like persons.map(pluck(\"firstName\")) */\nfunction pluck(propertyName: any): (obj: Object) => any {\n return function (obj: any) {\n return obj[propertyName];\n };\n}\n\n// end functional extensions\n\n/** Return an array of property values from source */\nfunction getOwnPropertyValues(source: Object): any[] {\n const rec = source as Indexed;\n let result: any[] = [];\n for (const name of Object.keys(rec || {})) {\n result.push(rec[name]);\n }\n return result;\n}\n\n/** Copy properties from source to target. Returns target. */\nfunction extend(target: Object, source?: Object, propNames?: string[]): Object {\n if (!source) return target;\n const tgt = target as Indexed, src = source as Indexed;\n if (propNames) {\n propNames.forEach(function (propName) {\n tgt[propName] = src[propName];\n });\n } else {\n for (const propName of Object.keys(src || {})) {\n tgt[propName] = src[propName];\n }\n }\n return target;\n}\n\n/** Copy properties from defaults iff undefined on target. Returns target. */\nfunction updateWithDefaults(target: Object, defaults: Object): any {\n const tgt = target as Indexed, def = defaults as Indexed;\n for (const name of Object.keys(def || {})) {\n if (tgt[name] === undefined) {\n tgt[name] = def[name];\n }\n }\n return target;\n}\n\n/** Set ctor.defaultInstance to an instance of ctor with properties from target.\n We want to insure that the object returned by ctor.defaultInstance is always immutable\n Use 'target' as the primary template for the ctor.defaultInstance;\n Use current 'ctor.defaultInstance' as the template for any missing properties\n creates a new instance for ctor.defaultInstance\n returns target unchanged */\nfunction setAsDefault(target: Object, ctor: { new (...args: any[]): any, defaultInstance?: any }): any {\n ctor.defaultInstance = updateWithDefaults(new ctor(target), ctor.defaultInstance);\n return target;\n}\n\n/**\n 'source' is an object that will be transformed into another\n 'template' is a map where the\n keys: are the keys to return\n if a key contains ','s then the key is treated as a delimited string with first of the\n keys being the key to return and the others all valid aliases for this key\n 'values' are either\n 1) the 'default' value of the key\n 2) a function that takes in the source value and should return the value to set\n The value from the source is then set on the target,\n after first passing thru the fn, if provided, UNLESS:\n 1) it is the default value\n 2) it is undefined ( nulls WILL be set)\n 'target' is optional\n - if it exists then properties of the target will be set ( overwritten if the exist)\n - if it does not exist then a new object will be created as filled.\n 'target is returned.\n*/\nfunction toJson(source: Object, template: Object, target: Object = {}): Object {\n\n const src = source as Indexed, tmpl = template as Indexed, tgt = target as Indexed;\n for (const key of Object.keys(tmpl || {})) {\n let aliases = key.split(\",\");\n let defaultValue = tmpl[key];\n // using some as a forEach with a 'break'\n aliases.some(function (propName) {\n if (!(propName in source)) return false;\n let value = src[propName];\n // there is a functional property defined with this alias ( not what we want to replace).\n if (typeof value === 'function') return false;\n // '==' is deliberate here - idea is that null or undefined values will never get serialized\n // if default value is set to null.\n // tslint:disable-next-line\n if (value == defaultValue) return true;\n if (Array.isArray(value) && value.length === 0) return true;\n if (typeof (defaultValue) === \"function\") {\n value = defaultValue(value);\n } else if (typeof (value) === \"object\") {\n if (value && value instanceof BreezeEnum) {\n value = value.name;\n }\n }\n if (value === undefined) return true;\n tgt[aliases[0]] = value;\n return true;\n });\n }\n return target;\n}\n\n/** Replacer function for toJSONSafe, when serializing entities. Excludes entityAspect and other internal properties. */\nfunction toJSONSafeReplacer(prop: string, val: any) {\n if (prop === \"entityAspect\" || prop === \"complexAspect\" || prop === \"entityType\" || prop === \"complexType\"\n || prop === \"getProperty\" || prop === \"setProperty\"\n || prop === \"constructor\" || prop.charAt(0) === '_' || prop.charAt(0) === '$') return;\n return val;\n}\n\n/** Safely perform toJSON logic on objects with cycles. */\nfunction toJSONSafe(obj: any, replacer?: (prop: string, value: any) => any): any {\n if (obj !== Object(obj)) return obj; // primitive value\n if (obj._$visited) return undefined;\n if (obj.toJSON) {\n let newObj = obj.toJSON();\n if (newObj !== Object(newObj)) return newObj; // primitive value\n if (newObj !== obj) return toJSONSafe(newObj, replacer);\n // toJSON returned the object unchanged.\n obj = newObj;\n }\n obj._$visited = true;\n let result: any;\n if (obj instanceof Array) {\n result = obj.map(function (o: any) {\n return toJSONSafe(o, replacer);\n });\n } else if (typeof (obj) === \"function\") {\n result = undefined;\n } else {\n result = {};\n for (let prop in obj) {\n if (prop === \"_$visited\") continue;\n let val = obj[prop];\n if (replacer) {\n val = replacer(prop, val);\n if (val === undefined) continue;\n }\n val = toJSONSafe(val, replacer);\n if (val === undefined) continue;\n result[prop] = val;\n }\n }\n delete obj._$visited;\n return result;\n}\n\n/** Resolves the values of a list of properties by checking each property in multiple sources until a value is found. */\nfunction resolveProperties(sources: Object[], propertyNames: string[]): any {\n let r: Indexed = {};\n let length = sources.length;\n propertyNames.forEach(function (pn) {\n for (let i = 0; i < length; i++) {\n let src = sources[i] as Indexed;\n if (src) {\n let val = src[pn];\n if (val !== undefined) {\n r[pn] = val;\n break;\n }\n }\n }\n });\n return r;\n}\n\n\n// array functions\n\nfunction toArray(item: any): any[] {\n if (item == null) {\n return [];\n } else if (Array.isArray(item)) {\n return item;\n } else {\n return [item];\n }\n}\n\n/** a version of Array.map that doesn't require an array, i.e. works on arrays and scalars. */\n// function map<T, U>(items: T | T[], fn: (v: T, ix?: number) => U, includeNull?: boolean): U | U[] {\n function map<T>(items: T | T[], fn: (v: T, ix?: number) => any, includeNull?: boolean): any | any[] {\n // whether to return nulls in array of results; default = true;\n includeNull = includeNull == null ? true : includeNull;\n if (items == null) return items;\n // let result: U[];\n if (Array.isArray(items)) {\n let result: any[] = [];\n items.forEach(function (v: any, ix: number) {\n let r = fn(v, ix);\n if (r != null || includeNull) {\n result[ix] = r;\n }\n });\n return result;\n } else {\n let result = fn(items);\n return result;\n }\n\n}\n\n/** Return first element matching predicate */\nfunction arrayFirst<T>(array: T[], predicate: Predicate<any>): T;\nfunction arrayFirst<T>(array: T[], predicate: Predicate<T>) {\n for (let i = 0, j = array.length; i < j; i++) {\n if (predicate(array[i])) {\n return array[i];\n }\n }\n return null;\n}\n\n/** Return index of first element matching predicate */\nfunction arrayIndexOf<T>(array: T[], predicate: Predicate<any>): number;\nfunction arrayIndexOf<T>(array: T[], predicate: Predicate<T>): number {\n for (let i = 0, j = array.length; i < j; i++) {\n if (predicate(array[i])) return i;\n }\n return -1;\n}\n\n/** Add item if not already in array */\nfunction arrayAddItemUnique<T>(array: T[], item: T) {\n let ix = array.indexOf(item);\n if (ix === -1) array.push(item);\n}\n\n/** Remove items from the array\n * @param array\n * @param predicateOrItem - item to remove, or function to determine matching item\n * @param shouldRemoveMultiple - true to keep removing after first match, false otherwise\n */\nfunction arrayRemoveItem<T>(array: T[], predicateOrItem: T | Predicate<T> , shouldRemoveMultiple?: boolean) {\n let predicate = (isFunction(predicateOrItem) ? predicateOrItem : undefined) as Predicate<T>;\n let lastIx = array.length - 1;\n let removed = false;\n for (let i = lastIx; i >= 0; i--) {\n if (predicate ? predicate(array[i]) : (array[i] === predicateOrItem)) {\n array.splice(i, 1);\n removed = true;\n if (!shouldRemoveMultiple) {\n return true;\n }\n }\n }\n return removed;\n}\n\n/** Combine array elements using the callback. Returns array with length == min(a1.length, a2.length) */\nfunction arrayZip(a1: any[], a2: any[], callback: (x1: any, x2: any) => any): any[] {\n let result: any[] = [];\n let n = Math.min(a1.length, a2.length);\n for (let i = 0; i < n; ++i) {\n result.push(callback(a1[i], a2[i]));\n }\n return result;\n}\n\n//function arrayDistinct(array) {\n// array = array || [];\n// let result = [];\n// for (let i = 0, j = array.length; i < j; i++) {\n// if (result.indexOf(array[i]) < 0)\n// result.push(array[i]);\n// }\n// return result;\n//}\n\n// Not yet needed\n//// much faster but only works on array items with a toString method that\n//// returns distinct string for distinct objects. So this is safe for arrays with primitive\n//// types but not for arrays with object types, unless toString() has been implemented.\n//function arrayDistinctUnsafe(array) {\n// let o = {}, i, l = array.length, r = [];\n// for (i = 0; i < l; i += 1) {\n// let v = array[i];\n// o[v] = v;\n// }\n// for (i in o) r.push(o[i]);\n// return r;\n//}\n\nfunction arrayEquals(a1: any[], a2: any[], equalsFn?: (x1: any, x2: any) => boolean): boolean {\n //Check if the arrays are undefined/null\n if (!a1 || !a2) return false;\n\n if (a1.length !== a2.length) return false;\n\n //go thru all the vars\n for (let i = 0; i < a1.length; i++) {\n //if the let is an array, we need to make a recursive check\n //otherwise we'll just compare the values\n if (Array.isArray(a1[i])) {\n if (!arrayEquals(a1[i], a2[i])) return false;\n } else {\n if (equalsFn) {\n if (!equalsFn(a1[i], a2[i])) return false;\n } else {\n if (a1[i] !== a2[i]) return false;\n }\n }\n }\n return true;\n}\n\n// end of array functions\n\n/** Returns the array stored under key, creating it if absent. */\nfunction getMapArray<K, V>(map: Map<K, V[]>, key: K): V[] {\n let arr = map.get(key);\n if (!arr) {\n arr = [];\n map.set(key, arr);\n }\n return arr;\n}\n\n/** Execute fn while obj has tempValue for property */\nfunction using(obj: Object, property: string, tempValue: any, fn: () => any) {\n if (!obj) {\n return fn();\n }\n const rec = obj as Indexed;\n let originalValue = rec[property];\n if (tempValue === originalValue) {\n return fn();\n }\n rec[property] = tempValue;\n try {\n return fn();\n } finally {\n if (originalValue === undefined) {\n delete rec[property];\n } else {\n rec[property] = originalValue;\n }\n }\n}\n\n/** Call state = startFn(), call fn(), call endFn(state) */\nfunction wrapExecution(startFn: () => any, endFn: (state: any) => any, fn: () => any) {\n let state: any;\n try {\n state = startFn();\n return fn();\n } catch (e) {\n if (typeof (state) === 'object') {\n state.error = e;\n }\n throw e;\n } finally {\n endFn(state);\n }\n}\n\n/** Remember & return the value of fn() when it was called with its current args */\nfunction memoize(fn: any): any {\n return function () {\n let args = arraySlice(<any>arguments),\n hash = \"\",\n i = args.length,\n currentArg: any = null;\n while (i--) {\n currentArg = args[i];\n hash += (currentArg === Object(currentArg)) ? JSON.stringify(currentArg) : currentArg;\n fn.memoize || (fn.memoize = {});\n }\n return (hash in fn.memoize) ?\n fn.memoize[hash] :\n fn.memoize[hash] = fn.apply(this, args);\n };\n}\n\nconst durationrex = /^P((\\d+Y)?(\\d+M)?(\\d+D)?)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$/;\nconst lettersrex = /[A-Za-z]+/g;\nfunction durationToSeconds(duration: string) {\n // basic algorithm from https://github.com/nezasa/iso8601-js-period\n if (typeof duration !== \"string\") throw new Error(\"Invalid ISO8601 duration '\" + duration + \"'\");\n\n // regex splits as follows - grp0, grp1, y, m, d, grp2, h, m, s\n // 0 1 2 3 4 5 6 7 8\n let struct = durationrex.exec(duration);\n if (!struct) throw new Error(\"Invalid ISO8601 duration '\" + duration + \"'\");\n\n let ymdhmsIndexes = [2, 3, 4, 6, 7, 8]; // -> grp1,y,m,d,grp2,h,m,s\n let factors = [31104000, // year (360*24*60*60)\n 2592000, // month (30*24*60*60)\n 86400, // day (24*60*60)\n 3600, // hour (60*60)\n 60, // minute (60)\n 1]; // second (1)\n\n let seconds = 0;\n for (let i = 0; i < 6; i++) {\n let digit = struct[ymdhmsIndexes[i]];\n // remove letters, replace by 0 if not defined\n digit = <any>(digit ? +digit.replace(lettersrex, '') : 0);\n seconds += <any>digit * factors[i];\n }\n return seconds;\n\n}\n\n// is functions\n\nfunction noop() {\n // does nothing\n}\n\nfunction identity(x: any): any {\n return x;\n}\n\nfunction classof(o: any) {\n if (o === null) {\n return \"null\";\n }\n if (o === undefined) {\n return \"undefined\";\n }\n return Object.prototype.toString.call(o).slice(8, -1).toLowerCase();\n}\n\nfunction isDate(o: any) {\n return classof(o) === \"date\" && !isNaN(o.getTime());\n}\n\nconst isdaterex = /^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/;\nfunction isDateString(s: string) {\n // let rx = /^(\\d{4}|[+\\-]\\d{6})(?:-(\\d{2})(?:-(\\d{2}))?)?(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/;\n return (typeof s === \"string\") && isdaterex.test(s);\n}\n\nfunction isFunction(o: any) {\n return classof(o) === \"function\";\n}\n\n// function isString(o: any) {\n// return (typeof o === \"string\");\n// }\n\n// function isObject(o: any) {\n// return (typeof o === \"object\");\n// }\n\nconst isguidrex = /^[a-fA-F\\d]{8}-(?:[a-fA-F\\d]{4}-){3}[a-fA-F\\d]{12}$/;\nfunction isGuid(value: any) {\n return (typeof value === \"string\") && isguidrex.test(value);\n}\n\nconst isdurationrex = /^(-|)?P[T]?[\\d\\.,\\-]+[YMDTHS]/;\nfunction isDuration(value: any) {\n return (typeof value === \"string\") && isdurationrex.test(value);\n}\n\nfunction isEmpty(obj: any) {\n if (obj === null || obj === undefined) {\n return true;\n }\n for (let key in obj) {\n if (hasOwnProperty(obj, key)) {\n return false;\n }\n }\n return true;\n}\n\n// end of is Functions\n\n// string functions\n\n// Based on fragment from Dean Edwards' Base 2 library\n/**\n * Replaces `%1`, `%2`, ... in `str` with the arguments that follow it.\n *\n * formatString(\"a %1 and a %2\", \"cat\", \"dog\") // \"a cat and a dog\"\n *\n * It declared rest parameters and then read `arguments` anyway, and compiled a fresh `RegExp`\n * on every call to bound the placeholder to the number of arguments given - so `%3` with two\n * arguments was left in place rather than replaced. One shared pattern does the same thing:\n * a placeholder with no argument for it is left alone here too.\n * @hidden\n */\nexport function formatString(str: string, ...params: any[]) {\n return str.replace(formatStringRex, (match, index) => {\n const param = params[Number(index) - 1];\n return param === undefined ? match : param;\n });\n}\nconst formatStringRex = /%([1-9])/g;\n\n// end of string functions\n\n\n// --- superseded by the language -------------------------------------------------------------\n//\n// Each of these is now exactly a JavaScript built-in, and calls it. They are gathered here,\n// apart from the helpers that still earn their place, because `core` marks every one of them\n// @deprecated. What an application should stop writing is the access path - `breeze.core.getUuid`\n// and the rest - not the function, so Breeze imports them by name from this module instead of\n// reading them off `core`. Nothing inside the library uses a member it tells applications not\n// to use.\n//\n// They stay above the `core` object literal, which reads them by value.\n\n// Both of these were built with an `uncurry` helper - `Function.call.apply(fn, arguments)` -\n// which is how you borrowed a prototype method before the language had a way to say it.\n/** @hidden @internal */\nexport const hasOwnProperty: (obj: Object, key: string) => boolean = Object.hasOwn;\n\n/** @hidden @internal */\nexport const arraySlice = (ar: any[], start?: number, end?: number): any[] =>\n Array.prototype.slice.call(ar, start, end);\n\n/** @hidden */\nexport function arrayFlatMap<T, U>(arr: T[], mapFn: (arg: T) => U[]): U[] {\n return arr.flatMap(mapFn);\n}\n\nconst uuidrex = /[xy]/g;\n\n/**\n * A version 4 UUID.\n *\n * `crypto.randomUUID()` where it exists, which is everywhere Breeze supports except a browser\n * outside a secure context - it is unavailable over plain HTTP. It is both properly random and\n * about 30x faster than building one out of `Math.random()`, which matters because this is what\n * names a new entity with a Guid key.\n *\n * The fallback is the old implementation. `Math.random()` is not a cryptographic source, so the\n * values it produces are unique enough for a client-side temporary key and should not be relied\n * on for anything else.\n * @hidden\n */\nexport function getUuid(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(uuidrex, function (c) {\n // tslint:disable-next-line\n let r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\n// These two exist for their null handling, which is what the local query operators need: a\n// property that is null does not start with anything, and comparing against a null prefix asks\n// nothing. `String.prototype.startsWith` throws on the first and compares against the text\n// \"null\" on the second. The comparison itself is the built-in now - `endsWith` is 2.3x the\n// `indexOf` arithmetic it replaces.\n/** @hidden */\nexport function stringStartsWith(str: string, prefix: string) {\n // returns true for empty string or null prefix\n if ((!str)) return false;\n if (prefix === \"\" || prefix == null) return true;\n return str.startsWith(prefix);\n}\n\n/** @hidden */\nexport function stringEndsWith(str: string, suffix: string) {\n // returns true for empty string or null suffix\n if ((!str)) return false;\n if (suffix === \"\" || suffix == null) return true;\n return str.endsWith(suffix);\n}\n\n// strings for error messages\n\nconst strings = {\n /** Advice appended to errors about a query whose entity type Breeze cannot determine. */\n \"TO_TYPE\": \"Add 'EntityQuery.toType()' to your query, or call 'MetadataStore.setEntityTypeForResourceName()' to register an EntityType for this resourceName.\"\n}\n\n// // not all methods above are exported\n/** Utility functions that Breeze 2.x exposed as `breeze.core`, kept for code written against 2.x.\n Several now just call a JavaScript built-in; those are marked deprecated and name it. */\nexport const core = {\n /** @deprecated Use `Object.hasOwn(obj, key)`, which this now calls. */\n hasOwnProperty: hasOwnProperty,\n /** The values of an object's own enumerable properties. `Object.values(obj)`, except that null\n or undefined gives `[]`. */\n getOwnPropertyValues: getOwnPropertyValues,\n /** The descriptor of `propertyName` on `obj` or, failing that, on the nearest prototype that\n has it; `undefined` if none does. Unlike `Object.getOwnPropertyDescriptor`, it searches the\n prototype chain. */\n getPropertyDescriptor: getPropDescriptor,\n /** Calls `kvFn(key, value)` for each of an object's own enumerable properties. Does nothing for\n null or undefined. */\n objectForEach: objectForEach,\n /** The first of an object's own enumerable properties for which `kvPredicate(key, value)` is\n true, as `{ key, value }`; `null` if there is none. */\n objectFirst: objectFirst,\n /** Calls `kvFn(key, value)` for each of an object's own enumerable properties and returns the\n results, leaving out any that are `undefined`. Without `kvFn`, returns the values. */\n objectMap: objectMap, // TODO: replace this with something strongly typed.\n /** Copies properties from `source` onto `target` and returns `target`: all of `source`'s own\n enumerable properties, or only `propNames` when given. A shallow copy, like `Object.assign`. */\n extend: extend,\n /** A predicate that is true for an object whose `propertyName` is `=== value`:\n `people.filter(core.propEq('firstName', 'John'))`. */\n propEq: propEq,\n /** A predicate that is true for an object whose `property1Name` or `property2Name` is\n `=== value`. */\n propsEq: propsEq,\n /** A function that returns an object's `propertyName`: `people.map(core.pluck('firstName'))`. */\n pluck: pluck,\n /** `Array.prototype.map` that also takes a single value, which it passes to `fn` and returns\n the result of. Null or undefined is returned as is. With `includeNull` false, an element\n whose result is null or undefined is left as a hole in the returned array. */\n map: map,\n /** An object with each of `propertyNames` taken from the first of `sources` in which it is not\n `undefined`. Breeze uses it to combine a query's settings with its manager's and the\n defaults, in {@link QueryOptions.resolve} and {@link DataService.resolve}. */\n resolveProperties: resolveProperties,\n /** Creates an instance of `ctor` from `target`, fills in whatever it leaves unset from the\n current `ctor.defaultInstance`, and makes that the new `ctor.defaultInstance`. Returns\n `target`. The `setAsDefault()` methods of {@link QueryOptions}, {@link SaveOptions},\n {@link NamingConvention} and {@link LocalQueryComparisonOptions} are built on it. */\n setAsDefault: setAsDefault,\n /** Copies each property of `defaults` onto `target` where `target`'s is `undefined`, and\n returns `target`. */\n updateWithDefaults: updateWithDefaults,\n /** The array stored in `map` under `key`, after storing an empty one there if there was none. */\n getMapArray: getMapArray,\n /** `[]` for null or undefined, the array itself for an array, and `[item]` for anything else. */\n toArray: toArray,\n /** Whether two arrays have the same length and equal elements, compared with `===` or with\n `equalsFn` if given. An element that is itself an array is compared element by element, with\n `===`. False if either array is null or undefined. */\n arrayEquals: arrayEquals,\n /** @deprecated Use `arr.slice(start, end)`, or `Array.prototype.slice.call(arrayLike)` for\n an arguments object. That is what this now does. */\n arraySlice: arraySlice,\n /** The first element for which `predicate` is true, or `null`. Like `Array.prototype.find`,\n except for returning `null` rather than `undefined`. */\n arrayFirst: arrayFirst,\n /** The index of the first element for which `predicate` is true, or -1. The same as\n `Array.prototype.findIndex`. */\n arrayIndexOf: arrayIndexOf,\n /** Removes from `array`, in place, either `predicateOrItem` itself or the elements that\n `predicateOrItem`, a function, matches. Removes only the last match unless\n `shouldRemoveMultiple` is true. Returns whether anything was removed. */\n arrayRemoveItem: arrayRemoveItem,\n /** Combines the elements of two arrays pairwise with `callback`. The result is as long as the\n shorter array. */\n arrayZip: arrayZip,\n /** Pushes `item` onto `array` unless the array already holds it. */\n arrayAddItemUnique: arrayAddItemUnique,\n /** @deprecated Use `arr.flatMap(fn)`, which this now calls. */\n arrayFlatMap: arrayFlatMap,\n\n /** Sets `obj[property]` to `tempValue`, calls `fn`, then restores the original value, deleting\n the property if it had none, whether or not `fn` throws. Returns what `fn` returns. */\n using: using,\n /** Calls `startFn()`, then `fn()`, then `endFn(state)` with what `startFn` returned, whether or\n not `fn` throws. If it throws and the state is an object, the error is set on `state.error`\n first. Returns what `fn` returns. */\n wrapExecution: wrapExecution,\n\n /** Wraps `fn` so that it runs once for each distinct set of arguments and afterwards returns\n the stored result. Arguments are keyed by value, objects by their `JSON.stringify`. The\n results are stored on `fn` itself and never released. */\n memoize: memoize,\n /** @deprecated Use `crypto.randomUUID()`. This calls it where it exists and falls back to a\n `Math.random()` implementation in a browser outside a secure context, where it does not. */\n getUuid: getUuid,\n /** Converts an ISO 8601 duration such as `PT1H30M` to seconds, counting a year as 360 days and\n a month as 30. Throws for a string that is not a duration. */\n durationToSeconds: durationToSeconds,\n\n /** Whether `obj[propertyName]` can be assigned: true if no object on the prototype chain\n defines it, or if its descriptor is writable or has a setter. */\n isSettable: isSettable,\n\n /** Whether `o` is a `Date` holding a valid time - not an Invalid Date. */\n isDate: isDate,\n /** Whether `s` is an ISO 8601 date-time with a time zone, such as `2024-05-01T10:30:00Z` or\n `2024-05-01T10:30:00.5+02:00`. A string with no time zone, or a date with no time, is not. */\n isDateString: isDateString,\n /** Whether `value` is a string in GUID form: 8-4-4-4-12 hexadecimal digits. */\n isGuid: isGuid,\n /** Whether `value` is a string that looks like an ISO 8601 duration, such as `PT1H`. A quick\n check of its shape, not a full parse - see {@link core.durationToSeconds}. */\n isDuration: isDuration,\n /** Whether `o` is an ordinary function. False for async and generator functions: it checks\n `Object.prototype.toString`, which names those differently. */\n isFunction: isFunction,\n /** Whether `obj` is null, undefined, or has no own enumerable properties. */\n isEmpty: isEmpty,\n\n /** Returns its argument. */\n identity: identity,\n /** Does nothing. */\n noop: noop,\n\n /** @deprecated Use `str.startsWith(prefix)`. Not quite the same: this answers `false` for a\n null string and `true` for a null prefix, where the built-in throws and compares against\n the text \"null\" respectively. Guard the null yourself. */\n stringStartsWith: stringStartsWith,\n /** @deprecated Use `str.endsWith(suffix)`, with the same caveat about nulls as\n {@link core.stringStartsWith}. */\n stringEndsWith: stringEndsWith,\n /** Replaces `%1`, `%2`, ... in `str` with the arguments that follow it:\n `formatString('a %1 and a %2', 'cat', 'dog')` is `'a cat and a dog'`. */\n formatString: formatString,\n\n /** Copies properties of `source` to `target`, a new object by default, as `template` directs,\n and returns `target`. Each key of `template` names a property to copy; a key such as `'a,b'`\n also accepts `b` as another name for `a`. The template's value is the property's default: a\n property equal to it (by `==`), `undefined`, or an empty array is left out. If the\n template's value is a function, it converts the property's value instead, and a\n {@link BreezeEnum} is written as its name. Breeze's metadata classes build their `toJSON`\n output with it. */\n toJson: toJson,\n /** A copy of `obj` that `JSON.stringify` can serialize even when the object graph has cycles: a\n reference back to an object already being copied is left out. Uses an object's own `toJSON`\n when it has one, leaves out functions, and passes each property through `replacer` when\n given, leaving out any it returns `undefined` for. */\n toJSONSafe: toJSONSafe,\n /** A `replacer` for {@link core.toJSONSafe} that leaves out an entity's Breeze members -\n `entityAspect`, `complexAspect`, `entityType`, `complexType`, `getProperty`, `setProperty`\n and `constructor` - and any property whose name starts with `_` or `$`. Breeze serializes\n unmapped property values with it. */\n toJSONSafeReplacer: toJSONSafeReplacer,\n\n /** Text that Breeze uses in its error messages. */\n strings: strings\n};\n\n/** The failure callback accepted by the deprecated callback form of the async methods.\n@deprecated Await the returned promise instead of passing callbacks. */\nexport interface ErrorCallback {\n (error: any): void;\n}\n\n\n// Unused\n/*\n// returns true for booleans, numbers, strings and dates\n// false for null, and non-date objects, functions, and arrays\nfunction isPrimitive(obj: any) {\n if (obj == null) return false;\n // true for numbers, strings, booleans and null, false for objects\n if (obj != Object(obj)) return true;\n return isDate(obj);\n}\n\n*/"]}
|
package/core/enum.d.ts
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Base class for all Breeze enumerations, such as EntityState, DataType, FetchStrategy, MergeStrategy etc.
|
|
3
|
+
A Breeze Enum is a namespaced set of constant values. Each Enum consists of a group of related constants, called 'symbols'.
|
|
4
|
+
Unlike enums in some other environments, each 'symbol' can have both methods and properties.
|
|
5
|
+
```ts
|
|
6
|
+
class DayOfWeek extends BreezeEnum {
|
|
7
|
+
dayIndex: number;
|
|
8
|
+
isWeekend?: boolean;
|
|
9
|
+
nextDay() {
|
|
10
|
+
let nextIndex = (this.dayIndex + 1) % 7;
|
|
11
|
+
return DayOfWeek.getSymbols()[nextIndex];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
static Monday = new DayOfWeek( { dayIndex: 0});
|
|
15
|
+
static Tuesday = new DayOfWeek( { dayIndex: 1 });
|
|
16
|
+
static Wednesday = new DayOfWeek( { dayIndex: 2 });
|
|
17
|
+
static Thursday = new DayOfWeek( { dayIndex: 3 });
|
|
18
|
+
static Friday = new DayOfWeek( { dayIndex: 4 });
|
|
19
|
+
static Saturday = new DayOfWeek( { dayIndex: 5, isWeekend: true });
|
|
20
|
+
static Sunday = new DayOfWeek( { dayIndex: 6, isWeekend: true });
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
describe("DayOfWeek", () => {
|
|
24
|
+
test("should support full enum capabilities", function() {
|
|
25
|
+
// // custom methods
|
|
26
|
+
let dowSymbols = DayOfWeek.getSymbols();
|
|
27
|
+
expect(dowSymbols.length).toBe(7);
|
|
28
|
+
expect(DayOfWeek.Monday.nextDay()).toBe(DayOfWeek.Tuesday);
|
|
29
|
+
expect(DayOfWeek.Sunday.nextDay()).toBe(DayOfWeek.Monday);
|
|
30
|
+
// // custom properties
|
|
31
|
+
expect(DayOfWeek.Tuesday.isWeekend).toBe(undefined);
|
|
32
|
+
expect(DayOfWeek.Saturday.isWeekend).toBe(true);
|
|
33
|
+
// // Standard enum capabilities
|
|
34
|
+
expect(DayOfWeek.Thursday instanceof DayOfWeek).toBe(true);
|
|
35
|
+
expect(BreezeEnum.isSymbol(DayOfWeek.Wednesday)).toBe(true);
|
|
36
|
+
expect(DayOfWeek.contains(DayOfWeek.Thursday)).toBe(true);
|
|
37
|
+
expect(DayOfWeek.Friday.toString()).toBe("Friday");
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
Each enum module calls `resolveSymbols()` at import time. Until v3 those calls were written as
|
|
42
|
+
`Error['x'] = MyEnum.resolveSymbols()`, to keep a bundler from discarding a call whose result
|
|
43
|
+
nothing uses. That is no longer needed: `package.json` declares every module but the entity-graph
|
|
44
|
+
mixin side-effect free, so a module is kept exactly when something uses one of its exports - and
|
|
45
|
+
whatever needs the resolved symbols does. See the sideEffects section of CHANGES-DEV.md.
|
|
46
|
+
*/
|
|
47
|
+
export declare class BreezeEnum {
|
|
48
|
+
/** The name of this symbol */
|
|
49
|
+
name: string;
|
|
50
|
+
/** Type of the enum; set in prototype of each enum */
|
|
51
|
+
_$typeName: string;
|
|
52
|
+
/** Creates a symbol, copying each property of `propertiesObj` onto it. Used to declare the
|
|
53
|
+
symbols of an enum, as static members of its class; its name is set when the class calls
|
|
54
|
+
{@link BreezeEnum.resolveSymbols}. */
|
|
55
|
+
constructor(propertiesObj?: Object);
|
|
56
|
+
/**
|
|
57
|
+
Returns all of the symbols contained within this Enum.
|
|
58
|
+
```ts
|
|
59
|
+
let symbols = DayOfWeek.getSymbols();
|
|
60
|
+
```
|
|
61
|
+
@returns All of the symbols contained within this Enum.
|
|
62
|
+
*/
|
|
63
|
+
static getSymbols<T extends typeof BreezeEnum>(this: T): InstanceType<T>[];
|
|
64
|
+
/**
|
|
65
|
+
Returns the names of all of the symbols contained within this Enum.
|
|
66
|
+
```ts
|
|
67
|
+
let symbols = DayOfWeek.getNames();
|
|
68
|
+
```
|
|
69
|
+
@returns All of the names of the symbols contained within this Enum.
|
|
70
|
+
*/
|
|
71
|
+
static getNames(): string[];
|
|
72
|
+
/**
|
|
73
|
+
Returns an Enum symbol given its name.
|
|
74
|
+
```ts
|
|
75
|
+
let dayOfWeek = DayOfWeek.from("Thursday");
|
|
76
|
+
// nowdayOfWeek === DayOfWeek.Thursday
|
|
77
|
+
```
|
|
78
|
+
@param name - Name for which an enum symbol should be returned.
|
|
79
|
+
@returns The symbol that matches the name or 'undefined' if not found.
|
|
80
|
+
*/
|
|
81
|
+
static fromName(name: string): any;
|
|
82
|
+
/**
|
|
83
|
+
Seals this enum so that no more symbols may be added to it. This should only be called after all symbols
|
|
84
|
+
have already been added to the Enum. This method also sets the 'name' property on each of the symbols.
|
|
85
|
+
```ts
|
|
86
|
+
DayOfWeek.resolveSymbols();
|
|
87
|
+
```
|
|
88
|
+
*/
|
|
89
|
+
static resolveSymbols(): {
|
|
90
|
+
/** The symbol's name, such as `"Added"`. */
|
|
91
|
+
name: string;
|
|
92
|
+
/** The symbol itself, such as `EntityState.Added`. */
|
|
93
|
+
symbol: BreezeEnum;
|
|
94
|
+
}[];
|
|
95
|
+
/**
|
|
96
|
+
Returns whether an Enum contains a specified symbol.
|
|
97
|
+
```ts
|
|
98
|
+
let symbol = DayOfWeek.Friday;
|
|
99
|
+
if (DayOfWeek.contains(symbol)) {
|
|
100
|
+
// do something
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
@param sym - Object or symbol to test.
|
|
104
|
+
@returns Whether this Enum contains the specified symbol.
|
|
105
|
+
*/
|
|
106
|
+
static contains(sym: BreezeEnum): boolean;
|
|
107
|
+
/** Returns the string name of this Enum */
|
|
108
|
+
toString(): string;
|
|
109
|
+
/** Return enum name and symbol name */
|
|
110
|
+
toJSON(): {
|
|
111
|
+
/** The name of the enum, such as `"EntityState"`. */
|
|
112
|
+
_$typeName: any;
|
|
113
|
+
/** The name of the symbol, such as `"Added"`. */
|
|
114
|
+
name: string;
|
|
115
|
+
};
|
|
116
|
+
}
|
package/core/enum.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2012-2026 IdeaBlade, Inc. All Rights Reserved.
|
|
3
|
+
* Use, reproduction, distribution, and modification of this code is subject to the terms and
|
|
4
|
+
* conditions of the IdeaBlade Breeze license, available at http://www.breezejs.com/license
|
|
5
|
+
*
|
|
6
|
+
* Author: Jay Traband
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
Base class for all Breeze enumerations, such as EntityState, DataType, FetchStrategy, MergeStrategy etc.
|
|
10
|
+
A Breeze Enum is a namespaced set of constant values. Each Enum consists of a group of related constants, called 'symbols'.
|
|
11
|
+
Unlike enums in some other environments, each 'symbol' can have both methods and properties.
|
|
12
|
+
```ts
|
|
13
|
+
class DayOfWeek extends BreezeEnum {
|
|
14
|
+
dayIndex: number;
|
|
15
|
+
isWeekend?: boolean;
|
|
16
|
+
nextDay() {
|
|
17
|
+
let nextIndex = (this.dayIndex + 1) % 7;
|
|
18
|
+
return DayOfWeek.getSymbols()[nextIndex];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
static Monday = new DayOfWeek( { dayIndex: 0});
|
|
22
|
+
static Tuesday = new DayOfWeek( { dayIndex: 1 });
|
|
23
|
+
static Wednesday = new DayOfWeek( { dayIndex: 2 });
|
|
24
|
+
static Thursday = new DayOfWeek( { dayIndex: 3 });
|
|
25
|
+
static Friday = new DayOfWeek( { dayIndex: 4 });
|
|
26
|
+
static Saturday = new DayOfWeek( { dayIndex: 5, isWeekend: true });
|
|
27
|
+
static Sunday = new DayOfWeek( { dayIndex: 6, isWeekend: true });
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe("DayOfWeek", () => {
|
|
31
|
+
test("should support full enum capabilities", function() {
|
|
32
|
+
// // custom methods
|
|
33
|
+
let dowSymbols = DayOfWeek.getSymbols();
|
|
34
|
+
expect(dowSymbols.length).toBe(7);
|
|
35
|
+
expect(DayOfWeek.Monday.nextDay()).toBe(DayOfWeek.Tuesday);
|
|
36
|
+
expect(DayOfWeek.Sunday.nextDay()).toBe(DayOfWeek.Monday);
|
|
37
|
+
// // custom properties
|
|
38
|
+
expect(DayOfWeek.Tuesday.isWeekend).toBe(undefined);
|
|
39
|
+
expect(DayOfWeek.Saturday.isWeekend).toBe(true);
|
|
40
|
+
// // Standard enum capabilities
|
|
41
|
+
expect(DayOfWeek.Thursday instanceof DayOfWeek).toBe(true);
|
|
42
|
+
expect(BreezeEnum.isSymbol(DayOfWeek.Wednesday)).toBe(true);
|
|
43
|
+
expect(DayOfWeek.contains(DayOfWeek.Thursday)).toBe(true);
|
|
44
|
+
expect(DayOfWeek.Friday.toString()).toBe("Friday");
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
Each enum module calls `resolveSymbols()` at import time. Until v3 those calls were written as
|
|
49
|
+
`Error['x'] = MyEnum.resolveSymbols()`, to keep a bundler from discarding a call whose result
|
|
50
|
+
nothing uses. That is no longer needed: `package.json` declares every module but the entity-graph
|
|
51
|
+
mixin side-effect free, so a module is kept exactly when something uses one of its exports - and
|
|
52
|
+
whatever needs the resolved symbols does. See the sideEffects section of CHANGES-DEV.md.
|
|
53
|
+
*/
|
|
54
|
+
export class BreezeEnum {
|
|
55
|
+
/** @hidden @internal */
|
|
56
|
+
static _resolvedNamesAndSymbols;
|
|
57
|
+
/** Creates a symbol, copying each property of `propertiesObj` onto it. Used to declare the
|
|
58
|
+
symbols of an enum, as static members of its class; its name is set when the class calls
|
|
59
|
+
{@link BreezeEnum.resolveSymbols}. */
|
|
60
|
+
constructor(propertiesObj) {
|
|
61
|
+
if (propertiesObj) {
|
|
62
|
+
const self = this, props = propertiesObj;
|
|
63
|
+
Object.keys(props).forEach((key) => self[key] = props[key]);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
Returns all of the symbols contained within this Enum.
|
|
68
|
+
```ts
|
|
69
|
+
let symbols = DayOfWeek.getSymbols();
|
|
70
|
+
```
|
|
71
|
+
@returns All of the symbols contained within this Enum.
|
|
72
|
+
*/
|
|
73
|
+
static getSymbols() {
|
|
74
|
+
// Typed through `this` so a subclass gets its own instances: FilterQueryOp.getSymbols() is
|
|
75
|
+
// FilterQueryOp[], not BreezeEnum[]. The example above depends on that - nextDay() returns a
|
|
76
|
+
// DayOfWeek - and so does passing a symbol to anything that wants the specific enum.
|
|
77
|
+
return this.resolveSymbols().map(ks => ks.symbol);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
Returns the names of all of the symbols contained within this Enum.
|
|
81
|
+
```ts
|
|
82
|
+
let symbols = DayOfWeek.getNames();
|
|
83
|
+
```
|
|
84
|
+
@returns All of the names of the symbols contained within this Enum.
|
|
85
|
+
*/
|
|
86
|
+
static getNames() {
|
|
87
|
+
return this.resolveSymbols().map(ks => ks.name);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
Returns an Enum symbol given its name.
|
|
91
|
+
```ts
|
|
92
|
+
let dayOfWeek = DayOfWeek.from("Thursday");
|
|
93
|
+
// nowdayOfWeek === DayOfWeek.Thursday
|
|
94
|
+
```
|
|
95
|
+
@param name - Name for which an enum symbol should be returned.
|
|
96
|
+
@returns The symbol that matches the name or 'undefined' if not found.
|
|
97
|
+
*/
|
|
98
|
+
static fromName(name) {
|
|
99
|
+
return this[name];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
Seals this enum so that no more symbols may be added to it. This should only be called after all symbols
|
|
103
|
+
have already been added to the Enum. This method also sets the 'name' property on each of the symbols.
|
|
104
|
+
```ts
|
|
105
|
+
DayOfWeek.resolveSymbols();
|
|
106
|
+
```
|
|
107
|
+
*/
|
|
108
|
+
static resolveSymbols() {
|
|
109
|
+
if (this._resolvedNamesAndSymbols)
|
|
110
|
+
return this._resolvedNamesAndSymbols;
|
|
111
|
+
let result = [];
|
|
112
|
+
const self = this;
|
|
113
|
+
for (let key in this) {
|
|
114
|
+
if (this.hasOwnProperty(key)) {
|
|
115
|
+
let symb = self[key];
|
|
116
|
+
if (symb instanceof BreezeEnum) {
|
|
117
|
+
result.push({ name: key, symbol: symb });
|
|
118
|
+
self[key] = symb;
|
|
119
|
+
symb.name = key;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
this._resolvedNamesAndSymbols = result;
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
Returns whether an Enum contains a specified symbol.
|
|
128
|
+
```ts
|
|
129
|
+
let symbol = DayOfWeek.Friday;
|
|
130
|
+
if (DayOfWeek.contains(symbol)) {
|
|
131
|
+
// do something
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
@param sym - Object or symbol to test.
|
|
135
|
+
@returns Whether this Enum contains the specified symbol.
|
|
136
|
+
*/
|
|
137
|
+
static contains(sym) {
|
|
138
|
+
if (!(sym instanceof BreezeEnum)) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
return this[sym.name] != null;
|
|
142
|
+
}
|
|
143
|
+
// /**
|
|
144
|
+
// Checks if an object is an Enum 'symbol'. Use the 'contains' method instead of this one
|
|
145
|
+
// if you want to test for a specific Enum.
|
|
146
|
+
// > if (Enum.isSymbol(DayOfWeek.Wednesday)) {
|
|
147
|
+
// > // do something ...
|
|
148
|
+
// > };
|
|
149
|
+
// **/
|
|
150
|
+
// static isSymbol(obj: any) {
|
|
151
|
+
// return obj instanceof BreezeEnum;
|
|
152
|
+
// };
|
|
153
|
+
/** Returns the string name of this Enum */
|
|
154
|
+
toString() {
|
|
155
|
+
return this.name;
|
|
156
|
+
}
|
|
157
|
+
/** Return enum name and symbol name */
|
|
158
|
+
toJSON() {
|
|
159
|
+
return {
|
|
160
|
+
/** The name of the enum, such as `"EntityState"`. */
|
|
161
|
+
_$typeName: this['_$typeName'] || this.constructor.name,
|
|
162
|
+
/** The name of the symbol, such as `"Added"`. */
|
|
163
|
+
name: this.name
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=enum.js.map
|
package/core/enum.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/core/enum.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CE;AACF,MAAM,OAAO,UAAU;IAMrB,wBAAwB;IACxB,MAAM,CAAC,wBAAwB,CAK3B;IAEJ;;yCAEqC;IACrC,YAAY,aAAsB;QAChC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,IAA2B,EAAE,KAAK,GAAG,aAAoC,CAAC;YACvF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED;;;;;;MAME;IACF,MAAM,CAAC,UAAU;QACf,2FAA2F;QAC3F,6FAA6F;QAC7F,qFAAqF;QACrF,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAsB,CAAC;IACzE,CAAC;IAED;;;;;;MAME;IACF,MAAM,CAAC,QAAQ;QACb,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;MAQE;IACF,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,OAAQ,IAA4B,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;MAME;IACF,MAAM,CAAC,cAAc;QACnB,IAAI,IAAI,CAAC,wBAAwB;YAAE,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACxE,IAAI,MAAM,GAA0C,EAAE,CAAC;QAEvD,MAAM,IAAI,GAAG,IAAsC,CAAC;QACpD,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBACjB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;;MAUE;IACF,MAAM,CAAC,QAAQ,CAAC,GAAe;QAC7B,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAQ,IAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACzD,CAAC;IAGD,MAAM;IACN,0FAA0F;IAC1F,4CAA4C;IAC5C,kDAAkD;IAClD,8BAA8B;IAC9B,WAAW;IACX,MAAM;IACN,8BAA8B;IAC9B,sCAAsC;IACtC,KAAK;IAEL,2CAA2C;IAC3C,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,uCAAuC;IACvC,MAAM;QACJ,OAAO;YACL,qDAAqD;YACrD,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAK,IAAI,CAAC,WAAmB,CAAC,IAAI;YAChE,iDAAiD;YACjD,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;CAEF","sourcesContent":["/*\r\n * Copyright 2012-2026 IdeaBlade, Inc. All Rights Reserved. \r\n * Use, reproduction, distribution, and modification of this code is subject to the terms and \r\n * conditions of the IdeaBlade Breeze license, available at http://www.breezejs.com/license\r\n *\r\n * Author: Jay Traband\r\n */\r\n\r\n/**\r\nBase class for all Breeze enumerations, such as EntityState, DataType, FetchStrategy, MergeStrategy etc.\r\nA Breeze Enum is a namespaced set of constant values. Each Enum consists of a group of related constants, called 'symbols'.\r\nUnlike enums in some other environments, each 'symbol' can have both methods and properties.\r\n```ts\r\n class DayOfWeek extends BreezeEnum {\r\n dayIndex: number;\r\n isWeekend?: boolean;\r\n nextDay() {\r\n let nextIndex = (this.dayIndex + 1) % 7;\r\n return DayOfWeek.getSymbols()[nextIndex];\r\n }\r\n\r\n static Monday = new DayOfWeek( { dayIndex: 0});\r\n static Tuesday = new DayOfWeek( { dayIndex: 1 });\r\n static Wednesday = new DayOfWeek( { dayIndex: 2 });\r\n static Thursday = new DayOfWeek( { dayIndex: 3 });\r\n static Friday = new DayOfWeek( { dayIndex: 4 });\r\n static Saturday = new DayOfWeek( { dayIndex: 5, isWeekend: true });\r\n static Sunday = new DayOfWeek( { dayIndex: 6, isWeekend: true });\r\n }\r\n\r\n describe(\"DayOfWeek\", () => {\r\n test(\"should support full enum capabilities\", function() {\r\n // // custom methods\r\n let dowSymbols = DayOfWeek.getSymbols();\r\n expect(dowSymbols.length).toBe(7);\r\n expect(DayOfWeek.Monday.nextDay()).toBe(DayOfWeek.Tuesday);\r\n expect(DayOfWeek.Sunday.nextDay()).toBe(DayOfWeek.Monday);\r\n // // custom properties\r\n expect(DayOfWeek.Tuesday.isWeekend).toBe(undefined);\r\n expect(DayOfWeek.Saturday.isWeekend).toBe(true);\r\n // // Standard enum capabilities\r\n expect(DayOfWeek.Thursday instanceof DayOfWeek).toBe(true);\r\n expect(BreezeEnum.isSymbol(DayOfWeek.Wednesday)).toBe(true);\r\n expect(DayOfWeek.contains(DayOfWeek.Thursday)).toBe(true);\r\n expect(DayOfWeek.Friday.toString()).toBe(\"Friday\");\r\n });\r\n});\r\n```\r\nEach enum module calls `resolveSymbols()` at import time. Until v3 those calls were written as\r\n`Error['x'] = MyEnum.resolveSymbols()`, to keep a bundler from discarding a call whose result\r\nnothing uses. That is no longer needed: `package.json` declares every module but the entity-graph\r\nmixin side-effect free, so a module is kept exactly when something uses one of its exports - and\r\nwhatever needs the resolved symbols does. See the sideEffects section of CHANGES-DEV.md.\r\n*/\r\nexport class BreezeEnum {\r\n // // TODO: think about CompositeEnum (flags impl).\r\n /** The name of this symbol */\r\n declare name: string;\r\n /** Type of the enum; set in prototype of each enum */\r\n declare _$typeName: string;\r\n /** @hidden @internal */\r\n static _resolvedNamesAndSymbols: {\r\n /** The symbol's name, such as `\"Added\"`. */\r\n name: string,\r\n /** The symbol itself, such as `EntityState.Added`. */\r\n symbol: BreezeEnum\r\n }[];\r\n\r\n /** Creates a symbol, copying each property of `propertiesObj` onto it. Used to declare the\r\n symbols of an enum, as static members of its class; its name is set when the class calls\r\n {@link BreezeEnum.resolveSymbols}. */\r\n constructor(propertiesObj?: Object) {\r\n if (propertiesObj) {\r\n const self = this as Record<string, any>, props = propertiesObj as Record<string, any>;\r\n Object.keys(props).forEach((key) => self[key] = props[key]);\r\n }\r\n }\r\n\r\n /**\r\n Returns all of the symbols contained within this Enum.\r\n ```ts\r\n let symbols = DayOfWeek.getSymbols();\r\n ```\r\n @returns All of the symbols contained within this Enum.\r\n */\r\n static getSymbols<T extends typeof BreezeEnum>(this: T): InstanceType<T>[] {\r\n // Typed through `this` so a subclass gets its own instances: FilterQueryOp.getSymbols() is\r\n // FilterQueryOp[], not BreezeEnum[]. The example above depends on that - nextDay() returns a\r\n // DayOfWeek - and so does passing a symbol to anything that wants the specific enum.\r\n return this.resolveSymbols().map(ks => ks.symbol) as InstanceType<T>[];\r\n }\r\n\r\n /**\r\n Returns the names of all of the symbols contained within this Enum.\r\n ```ts\r\n let symbols = DayOfWeek.getNames();\r\n ```\r\n @returns All of the names of the symbols contained within this Enum.\r\n */\r\n static getNames() {\r\n return this.resolveSymbols().map(ks => ks.name);\r\n }\r\n\r\n /**\r\n Returns an Enum symbol given its name.\r\n ```ts\r\n let dayOfWeek = DayOfWeek.from(\"Thursday\");\r\n // nowdayOfWeek === DayOfWeek.Thursday\r\n ```\r\n @param name - Name for which an enum symbol should be returned.\r\n @returns The symbol that matches the name or 'undefined' if not found.\r\n */\r\n static fromName(name: string) {\r\n return (this as Record<string, any>)[name];\r\n }\r\n\r\n /**\r\n Seals this enum so that no more symbols may be added to it. This should only be called after all symbols\r\n have already been added to the Enum. This method also sets the 'name' property on each of the symbols.\r\n ```ts\r\n DayOfWeek.resolveSymbols();\r\n ```\r\n */\r\n static resolveSymbols() {\r\n if (this._resolvedNamesAndSymbols) return this._resolvedNamesAndSymbols;\r\n let result: {name: string, symbol: BreezeEnum }[] = [];\r\n\r\n const self = this as unknown as Record<string, any>;\r\n for (let key in this) {\r\n if (this.hasOwnProperty(key)) {\r\n let symb = self[key];\r\n if (symb instanceof BreezeEnum) {\r\n result.push( { name: key, symbol: symb });\r\n self[key] = symb;\r\n symb.name = key;\r\n }\r\n }\r\n }\r\n this._resolvedNamesAndSymbols = result;\r\n return result;\r\n }\r\n\r\n /**\r\n Returns whether an Enum contains a specified symbol.\r\n ```ts\r\n let symbol = DayOfWeek.Friday;\r\n if (DayOfWeek.contains(symbol)) {\r\n // do something\r\n }\r\n ```\r\n @param sym - Object or symbol to test.\r\n @returns Whether this Enum contains the specified symbol.\r\n */\r\n static contains(sym: BreezeEnum) {\r\n if (!(sym instanceof BreezeEnum)) {\r\n return false;\r\n }\r\n\r\n return (this as Record<string, any>)[sym.name] != null;\r\n }\r\n\r\n\r\n // /**\r\n // Checks if an object is an Enum 'symbol'. Use the 'contains' method instead of this one \r\n // if you want to test for a specific Enum. \r\n // > if (Enum.isSymbol(DayOfWeek.Wednesday)) {\r\n // > // do something ...\r\n // > };\r\n // **/\r\n // static isSymbol(obj: any) {\r\n // return obj instanceof BreezeEnum;\r\n // };\r\n\r\n /** Returns the string name of this Enum */\r\n toString() {\r\n return this.name;\r\n }\r\n\r\n /** Return enum name and symbol name */\r\n toJSON() {\r\n return {\r\n /** The name of the enum, such as `\"EntityState\"`. */\r\n _$typeName: this['_$typeName'] || (this.constructor as any).name,\r\n /** The name of the symbol, such as `\"Added\"`. */\r\n name: this.name\r\n };\r\n }\r\n\r\n}\r\n\r\n\r\n"]}
|
package/core/event.d.ts
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Class to support basic event publication and subscription semantics.
|
|
3
|
+
*/
|
|
4
|
+
export declare class BreezeEvent<T> {
|
|
5
|
+
/**
|
|
6
|
+
* Called with any exception a subscriber throws that nothing else has handled - that is, when
|
|
7
|
+
* neither `publish` nor the event was given an error callback.
|
|
8
|
+
*
|
|
9
|
+
* It logs to `console.error` by default. Set your own to route it into a logger, or `null` to
|
|
10
|
+
* go back to discarding these silently (which is what Breeze did before 3.0, and why handler
|
|
11
|
+
* bugs were so hard to find).
|
|
12
|
+
*
|
|
13
|
+
* ```ts
|
|
14
|
+
* BreezeEvent.unhandledErrorCallback = e => myLogger.error(e);
|
|
15
|
+
* BreezeEvent.unhandledErrorCallback = null; // say nothing
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
static unhandledErrorCallback: ((e: Error) => void) | null;
|
|
19
|
+
/** The name of this Event */
|
|
20
|
+
name: string;
|
|
21
|
+
/** The object doing the publication. i.e. the object to which this event is attached. */
|
|
22
|
+
publisher: Object;
|
|
23
|
+
/**
|
|
24
|
+
Constructor for an Event
|
|
25
|
+
```ts
|
|
26
|
+
salaryEvent = new BreezeEvent("salaryEvent", person);
|
|
27
|
+
```
|
|
28
|
+
@param name - The name of the event.
|
|
29
|
+
@param publisher - The object that will be doing the publication. i.e. the object to which this event is attached.
|
|
30
|
+
@param defaultErrorCallback - Function to call when an error occurs during subscription execution.
|
|
31
|
+
If omitted then subscriber notification failures will be ignored.
|
|
32
|
+
*/
|
|
33
|
+
constructor(name: string, publisher: Object, defaultErrorCallback?: (e: Error) => any);
|
|
34
|
+
/**
|
|
35
|
+
Publish data for this event.
|
|
36
|
+
```ts
|
|
37
|
+
// Assume 'salaryEvent' is previously constructed Event
|
|
38
|
+
salaryEvent.publish( { eventType: "payRaise", amount: 100 });
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
This event can also be published asychronously
|
|
42
|
+
```ts
|
|
43
|
+
salaryEvent.publish( { eventType: "payRaise", amount: 100 }, true);
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
And we can add a handler in case the subscriber 'mishandles' the event.
|
|
47
|
+
```ts
|
|
48
|
+
salaryEvent.publish( { eventType: "payRaise", amount: 100 }, true, function(error) {
|
|
49
|
+
// do something with the 'error' object
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
@param data - Data to publish
|
|
53
|
+
@param publishAsync - (default=false) Whether to publish asynchonously or not.
|
|
54
|
+
@param errorCallback - Function to be called for any errors that occur during publication. If omitted,
|
|
55
|
+
errors will be eaten.
|
|
56
|
+
@returns false if event is disabled; true otherwise.
|
|
57
|
+
*/
|
|
58
|
+
publish(data: T, publishAsync?: boolean, errorCallback?: (e: Error) => any): boolean;
|
|
59
|
+
/**
|
|
60
|
+
Publish data for this event asynchronously.
|
|
61
|
+
```ts
|
|
62
|
+
// Assume 'salaryEvent' is previously constructed Event
|
|
63
|
+
salaryEvent.publishAsync( { eventType: "payRaise", amount: 100 });
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
And we can add a handler in case the subscriber 'mishandles' the event.
|
|
67
|
+
```ts
|
|
68
|
+
salaryEvent.publishAsync( { eventType: "payRaise", amount: 100 }, function(error) {
|
|
69
|
+
// do something with the 'error' object
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
@param data - Data to publish
|
|
73
|
+
@param errorCallback - Function to be called for any errors that occur during publication. If omitted,
|
|
74
|
+
errors will be eaten.
|
|
75
|
+
*/
|
|
76
|
+
publishAsync(data: T, errorCallback: (e: Error) => any): void;
|
|
77
|
+
/**
|
|
78
|
+
Subscribe to this event.
|
|
79
|
+
```ts
|
|
80
|
+
// Assume 'salaryEvent' is previously constructed Event
|
|
81
|
+
salaryEvent.subscribe(function (eventArgs) {
|
|
82
|
+
if (eventArgs.eventType === "payRaise") {
|
|
83
|
+
// do something
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
There are several built in Breeze events, such as {@link EntityAspect.propertyChanged}, {@link EntityAspect.validationErrorsChanged} as well.
|
|
89
|
+
```ts
|
|
90
|
+
// Assume order is a preexisting 'order' entity
|
|
91
|
+
order.entityAspect.propertyChanged.subscribe(function (pcEvent) {
|
|
92
|
+
if ( pcEvent.propertyName === "OrderDate") {
|
|
93
|
+
// do something
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
```
|
|
97
|
+
@param callback - Called whenever data is published for this event, with that data as its argument. What is published is documented on each specific event.
|
|
98
|
+
@returns This is a key for 'unsubscription'. It can be passed to the 'unsubscribe' method.
|
|
99
|
+
*/
|
|
100
|
+
subscribe(callback: (data: T) => any): number;
|
|
101
|
+
/**
|
|
102
|
+
Unsubscribe from this event.
|
|
103
|
+
```ts
|
|
104
|
+
// Assume order is a preexisting 'order' entity
|
|
105
|
+
let token = order.entityAspect.propertyChanged.subscribe(function (pcEvent) {
|
|
106
|
+
// do something
|
|
107
|
+
});
|
|
108
|
+
// sometime later
|
|
109
|
+
order.entityAspect.propertyChanged.unsubscribe(token);
|
|
110
|
+
```
|
|
111
|
+
@param unsubKey - The value returned from the 'subscribe' method may be used to unsubscribe here.
|
|
112
|
+
@returns Whether unsubscription occured. This will return false if already unsubscribed or if the key simply
|
|
113
|
+
cannot be found.
|
|
114
|
+
*/
|
|
115
|
+
unsubscribe(unsubKey: number): boolean;
|
|
116
|
+
/** remove all subscribers */
|
|
117
|
+
clear(): void;
|
|
118
|
+
/** event bubbling - document later. */
|
|
119
|
+
static bubbleEvent(target: any, getParentFn?: (() => any)): void;
|
|
120
|
+
/**
|
|
121
|
+
Enables or disables the named event for an object and all of its children.
|
|
122
|
+
```ts
|
|
123
|
+
BreezeEvent.enable(“propertyChanged”, myEntityManager, false)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
will disable all EntityAspect.propertyChanged events within a EntityManager.
|
|
127
|
+
```ts
|
|
128
|
+
BreezeEvent.enable(“propertyChanged”, myEntityManager, true)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
will enable all EntityAspect.propertyChanged events within a EntityManager.
|
|
132
|
+
```ts
|
|
133
|
+
BreezeEvent.enable(“propertyChanged”, myEntity.entityAspect, false)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
will disable EntityAspect.propertyChanged events for a specific entity.
|
|
137
|
+
```ts
|
|
138
|
+
BreezeEvent.enable(“propertyChanged”, myEntity.entityAspect, null)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
will removes any enabling / disabling at the entity aspect level so now any 'Event.enable' calls at the EntityManager level,
|
|
142
|
+
made either previously or in the future, will control notification.
|
|
143
|
+
```ts
|
|
144
|
+
BreezeEvent.enable(“validationErrorsChanged”, myEntityManager, function(em) {
|
|
145
|
+
return em.customTag === “blue”;
|
|
146
|
+
})
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
will either enable or disable myEntityManager based on the current value of a ‘customTag’ property on myEntityManager.
|
|
151
|
+
Note that this is dynamic, changing the customTag value will cause events to be enabled or disabled immediately.
|
|
152
|
+
@param eventName - The name of the event.
|
|
153
|
+
@param obj - The object at which enabling or disabling will occur. All event notifications that occur to this object or
|
|
154
|
+
children of this object will be enabled or disabled.
|
|
155
|
+
@param isEnabled - A boolean, a null or a function that returns either a boolean or a null.
|
|
156
|
+
*/
|
|
157
|
+
static enable(eventName: string, obj: Object, isEnabled: boolean | ((x: any) => boolean)): void;
|
|
158
|
+
/**
|
|
159
|
+
Returns whether for a specific event and a specific object and its children, notification is enabled or disabled or not set.
|
|
160
|
+
```ts
|
|
161
|
+
BreezeEvent.isEnabled(“propertyChanged”, myEntityManager)
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
@param eventName - The name of the event.
|
|
165
|
+
@param obj - The object for which we want to know if notifications are enabled.
|
|
166
|
+
@returns Whether notifications are enabled. If nothing is set on the object, the answer comes from its parent chain, and defaults to true.
|
|
167
|
+
*/
|
|
168
|
+
static isEnabled(eventName: string, obj: Object): boolean;
|
|
169
|
+
}
|