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
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import { core } from './core.js';
|
|
2
|
+
/** @hidden */
|
|
3
|
+
export class Param {
|
|
4
|
+
// The %1 parameter
|
|
5
|
+
// is required
|
|
6
|
+
// must be a %2
|
|
7
|
+
// must be an instance of %2
|
|
8
|
+
// must be an instance of the %2 enumeration
|
|
9
|
+
// must have a %2 property
|
|
10
|
+
// must be an array where each element
|
|
11
|
+
// is optional or
|
|
12
|
+
v;
|
|
13
|
+
name;
|
|
14
|
+
defaultValue;
|
|
15
|
+
parent;
|
|
16
|
+
/** @hidden @internal */
|
|
17
|
+
_context;
|
|
18
|
+
/** @hidden @internal */
|
|
19
|
+
_contexts;
|
|
20
|
+
constructor(v, name) {
|
|
21
|
+
this.v = v;
|
|
22
|
+
this.name = name;
|
|
23
|
+
this._contexts = [null];
|
|
24
|
+
}
|
|
25
|
+
isObject() {
|
|
26
|
+
return this.isTypeOf('object');
|
|
27
|
+
}
|
|
28
|
+
isBoolean() {
|
|
29
|
+
return this.isTypeOf('boolean');
|
|
30
|
+
}
|
|
31
|
+
isString() {
|
|
32
|
+
return this.isTypeOf('string');
|
|
33
|
+
}
|
|
34
|
+
isNumber() {
|
|
35
|
+
return this.isTypeOf('number');
|
|
36
|
+
}
|
|
37
|
+
isFunction() {
|
|
38
|
+
return this.isTypeOf('function');
|
|
39
|
+
}
|
|
40
|
+
/** @hidden @internal */
|
|
41
|
+
isEntity() {
|
|
42
|
+
return addContext(this, {
|
|
43
|
+
fn: isEntity,
|
|
44
|
+
msg: " must be an entity"
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/** @hidden @internal */
|
|
48
|
+
isEntityProperty() {
|
|
49
|
+
return addContext(this, {
|
|
50
|
+
fn: isEntityProperty,
|
|
51
|
+
msg: " must be either a DataProperty or a NavigationProperty"
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
isNonEmptyString() {
|
|
55
|
+
return addContext(this, {
|
|
56
|
+
fn: isNonEmptyString,
|
|
57
|
+
msg: "must be a nonEmpty string"
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
isTypeOf(typeName) {
|
|
61
|
+
return addContext(this, {
|
|
62
|
+
fn: isTypeOf,
|
|
63
|
+
typeName: typeName,
|
|
64
|
+
msg: typeOfMessage
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
isInstanceOf(type, typeName) {
|
|
68
|
+
return addContext(this, {
|
|
69
|
+
fn: isInstanceOf,
|
|
70
|
+
type: type,
|
|
71
|
+
typeName: typeName,
|
|
72
|
+
msg: instanceOfMessage
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
hasProperty(propertyName) {
|
|
76
|
+
return addContext(this, {
|
|
77
|
+
fn: hasProperty,
|
|
78
|
+
propertyName: propertyName,
|
|
79
|
+
msg: hasPropertyMessage
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
isEnumOf(enumType) {
|
|
83
|
+
return addContext(this, {
|
|
84
|
+
fn: isEnumOf,
|
|
85
|
+
enumType: enumType,
|
|
86
|
+
msg: enumOfMessage
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
isRequired(allowNull = false) {
|
|
90
|
+
return addContext(this, {
|
|
91
|
+
fn: isRequired,
|
|
92
|
+
allowNull: allowNull,
|
|
93
|
+
msg: "is required"
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
isOptional() {
|
|
97
|
+
let context = {
|
|
98
|
+
fn: isOptional,
|
|
99
|
+
prevContext: null,
|
|
100
|
+
msg: isOptionalMessage
|
|
101
|
+
};
|
|
102
|
+
return addContext(this, context);
|
|
103
|
+
}
|
|
104
|
+
isNonEmptyArray() {
|
|
105
|
+
return this.isArray(true);
|
|
106
|
+
}
|
|
107
|
+
isArray(mustNotBeEmpty) {
|
|
108
|
+
let context = {
|
|
109
|
+
fn: isArray,
|
|
110
|
+
mustNotBeEmpty: mustNotBeEmpty,
|
|
111
|
+
prevContext: null,
|
|
112
|
+
msg: isArrayMessage
|
|
113
|
+
};
|
|
114
|
+
return addContext(this, context);
|
|
115
|
+
}
|
|
116
|
+
or() {
|
|
117
|
+
this._contexts.push(null);
|
|
118
|
+
this._context = null;
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
check(defaultValue) {
|
|
122
|
+
let ok = exec(this);
|
|
123
|
+
if (ok === undefined)
|
|
124
|
+
return;
|
|
125
|
+
if (!ok) {
|
|
126
|
+
throw new Error(this.getMessage());
|
|
127
|
+
}
|
|
128
|
+
if (this.v !== undefined) {
|
|
129
|
+
return this.v;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
return defaultValue;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/** @hidden @internal */
|
|
136
|
+
// called from outside this file.
|
|
137
|
+
_addContext(context) {
|
|
138
|
+
return addContext(this, context);
|
|
139
|
+
}
|
|
140
|
+
getMessage() {
|
|
141
|
+
let that = this;
|
|
142
|
+
let message = this._contexts.map(function (context) {
|
|
143
|
+
return getMessage(context, that.v);
|
|
144
|
+
}).join(", or it ");
|
|
145
|
+
return core.formatString(this.MESSAGE_PREFIX, this.name) + " " + message;
|
|
146
|
+
}
|
|
147
|
+
withDefault(defaultValue) {
|
|
148
|
+
this.defaultValue = defaultValue;
|
|
149
|
+
return this;
|
|
150
|
+
}
|
|
151
|
+
whereParam(propName) {
|
|
152
|
+
return this.parent.whereParam(propName);
|
|
153
|
+
}
|
|
154
|
+
applyAll(instance, checkOnly = false) {
|
|
155
|
+
let parentTypeName = instance._$typeName;
|
|
156
|
+
let allowUnknownProperty = (parentTypeName && this.parent.config._$typeName === parentTypeName);
|
|
157
|
+
let clone = core.extend({}, this.parent.config);
|
|
158
|
+
this.parent.params.forEach(function (p) {
|
|
159
|
+
if (!allowUnknownProperty)
|
|
160
|
+
delete clone[p.name];
|
|
161
|
+
try {
|
|
162
|
+
p.check();
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
throwConfigError(instance, e.message);
|
|
166
|
+
}
|
|
167
|
+
(!checkOnly) && p._applyOne(instance);
|
|
168
|
+
});
|
|
169
|
+
// should be no properties left in the clone
|
|
170
|
+
if (!allowUnknownProperty) {
|
|
171
|
+
for (let key in clone) {
|
|
172
|
+
// allow props with an undefined value
|
|
173
|
+
if (clone[key] !== undefined) {
|
|
174
|
+
throwConfigError(instance, core.formatString("Unknown property: '%1'.", key));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** @hidden @internal */
|
|
180
|
+
_applyOne = function (instance) {
|
|
181
|
+
if (this.v !== undefined) {
|
|
182
|
+
instance[this.name] = this.v;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
if (this.defaultValue !== undefined) {
|
|
186
|
+
instance[this.name] = this.defaultValue;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
MESSAGE_PREFIX = "The '%1' parameter ";
|
|
191
|
+
}
|
|
192
|
+
/** @hidden */
|
|
193
|
+
export let assertParam = function (v, name) {
|
|
194
|
+
return new Param(v, name);
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* The error an `assertParam` chain would have thrown, worded identically, without building the
|
|
198
|
+
* chain to get it.
|
|
199
|
+
*
|
|
200
|
+
* `assertParam(v, name).isX().check()` allocates a `Param`, its contexts array, a context object
|
|
201
|
+
* per check and a closure to run them - four or five objects to answer a question that is usually
|
|
202
|
+
* one `typeof`. That is the right trade at a public entry point called once per operation, and
|
|
203
|
+
* the wrong one somewhere that runs per entity: `new BreezeEvent` was 56% assertParam, and every
|
|
204
|
+
* entity constructs two of them.
|
|
205
|
+
*
|
|
206
|
+
* So the few places on a per-object path check inline and call this on the failing branch, where
|
|
207
|
+
* the allocation no longer matters. Everywhere else keeps the chain, which reads better and
|
|
208
|
+
* composes. See *Assertions on per-object paths* in CHANGES-DEV.md.
|
|
209
|
+
*
|
|
210
|
+
* @hidden @internal
|
|
211
|
+
*/
|
|
212
|
+
export function paramError(name, message) {
|
|
213
|
+
// The two spaces match what Param.getMessage produces - prefix, then a joining space.
|
|
214
|
+
return new Error("The '" + name + "' parameter " + message);
|
|
215
|
+
}
|
|
216
|
+
function isTypeOf(context, v) {
|
|
217
|
+
if (v == null)
|
|
218
|
+
return false;
|
|
219
|
+
if (typeof (v) === context.typeName)
|
|
220
|
+
return true;
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
function isNonEmptyString(context, v) {
|
|
224
|
+
if (v == null)
|
|
225
|
+
return false;
|
|
226
|
+
return (typeof (v) === 'string') && v.length > 0;
|
|
227
|
+
}
|
|
228
|
+
function isInstanceOf(context, v) {
|
|
229
|
+
if (v == null || context.type == null)
|
|
230
|
+
return false;
|
|
231
|
+
return (v instanceof context.type);
|
|
232
|
+
}
|
|
233
|
+
function isEnumOf(context, v) {
|
|
234
|
+
if (v == null || context.enumType == null)
|
|
235
|
+
return false;
|
|
236
|
+
return context.enumType.contains(v);
|
|
237
|
+
}
|
|
238
|
+
function hasProperty(context, v) {
|
|
239
|
+
if (v == null || context.propertyName == null)
|
|
240
|
+
return false;
|
|
241
|
+
return (v[context.propertyName] !== undefined);
|
|
242
|
+
}
|
|
243
|
+
function isRequired(context, v) {
|
|
244
|
+
if (context.allowNull) {
|
|
245
|
+
return v !== undefined;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
return v != null;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function isOptional(context, v) {
|
|
252
|
+
if (v == null)
|
|
253
|
+
return true;
|
|
254
|
+
let prevContext = context.prevContext;
|
|
255
|
+
if (prevContext && prevContext.fn) {
|
|
256
|
+
return prevContext.fn(prevContext, v);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function isOptionalMessage(context, v) {
|
|
263
|
+
let prevContext = context.prevContext;
|
|
264
|
+
let element = prevContext ? " or it " + getMessage(prevContext, v) : "";
|
|
265
|
+
return "is optional" + element;
|
|
266
|
+
}
|
|
267
|
+
function isArray(context, v) {
|
|
268
|
+
if (!Array.isArray(v)) {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
if (context.mustNotBeEmpty) {
|
|
272
|
+
if (v.length === 0)
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
// allow standalone is array call.
|
|
276
|
+
let prevContext = context.prevContext;
|
|
277
|
+
if (!prevContext)
|
|
278
|
+
return true;
|
|
279
|
+
let pc = prevContext;
|
|
280
|
+
return v.every(function (v1) {
|
|
281
|
+
return pc.fn && pc.fn(pc, v1);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
// Built only when a check has actually failed. These used to be concatenated eagerly, on
|
|
285
|
+
// every call, and thrown away - which is what happens on every call that passes.
|
|
286
|
+
function typeOfMessage(context) {
|
|
287
|
+
return "must be a '" + context.typeName + "'";
|
|
288
|
+
}
|
|
289
|
+
function instanceOfMessage(context) {
|
|
290
|
+
const typeName = context.typeName || context.type?.prototype?._$typeName;
|
|
291
|
+
return "must be an instance of '" + typeName + "'";
|
|
292
|
+
}
|
|
293
|
+
function hasPropertyMessage(context) {
|
|
294
|
+
return "must have a '" + context.propertyName + "' property";
|
|
295
|
+
}
|
|
296
|
+
function enumOfMessage(context) {
|
|
297
|
+
return "must be an instance of the '" + (context.enumType?.name || 'unknown') + "' enumeration";
|
|
298
|
+
}
|
|
299
|
+
function isArrayMessage(context, v) {
|
|
300
|
+
let arrayDescr = context.mustNotBeEmpty ? "a nonEmpty array" : "an array";
|
|
301
|
+
let prevContext = context.prevContext;
|
|
302
|
+
let element = prevContext ? " where each element " + getMessage(prevContext, v) : "";
|
|
303
|
+
return " must be " + arrayDescr + element;
|
|
304
|
+
}
|
|
305
|
+
function getMessage(context, v) {
|
|
306
|
+
let msg = context.msg;
|
|
307
|
+
if (typeof (msg) === "function") {
|
|
308
|
+
msg = msg(context, v);
|
|
309
|
+
}
|
|
310
|
+
return msg;
|
|
311
|
+
}
|
|
312
|
+
function addContext(that, context) {
|
|
313
|
+
if (that._context) {
|
|
314
|
+
let curContext = that._context;
|
|
315
|
+
while (curContext.prevContext != null) {
|
|
316
|
+
curContext = curContext.prevContext;
|
|
317
|
+
}
|
|
318
|
+
if (curContext.prevContext === null) {
|
|
319
|
+
curContext.prevContext = context;
|
|
320
|
+
// just update the prevContext but don't change the curContext.
|
|
321
|
+
return that;
|
|
322
|
+
}
|
|
323
|
+
else if (context.prevContext == null) {
|
|
324
|
+
context.prevContext = that._context;
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
throw new Error("Illegal construction - use 'or' to combine checks");
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return setContext(that, context);
|
|
331
|
+
}
|
|
332
|
+
function setContext(that, context) {
|
|
333
|
+
that._contexts[that._contexts.length - 1] = context;
|
|
334
|
+
that._context = context;
|
|
335
|
+
return that;
|
|
336
|
+
}
|
|
337
|
+
function exec(self) {
|
|
338
|
+
// clear off last one if null
|
|
339
|
+
let contexts = self._contexts;
|
|
340
|
+
if (contexts[contexts.length - 1] == null) {
|
|
341
|
+
contexts.pop();
|
|
342
|
+
}
|
|
343
|
+
if (contexts.length === 0) {
|
|
344
|
+
return undefined;
|
|
345
|
+
}
|
|
346
|
+
return contexts.some(function (context) {
|
|
347
|
+
return context.fn ? context.fn(context, self.v) : false;
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
function throwConfigError(instance, message) {
|
|
351
|
+
throw new Error(core.formatString("Error configuring an instance of '%1'. %2", (instance && instance._$typeName) || "object", message));
|
|
352
|
+
}
|
|
353
|
+
class ConfigParam {
|
|
354
|
+
config;
|
|
355
|
+
params;
|
|
356
|
+
constructor(config) {
|
|
357
|
+
if (typeof (config) !== "object") {
|
|
358
|
+
throw new Error("Configuration parameter should be an object, instead it is a: " + typeof (config));
|
|
359
|
+
}
|
|
360
|
+
this.config = config;
|
|
361
|
+
this.params = [];
|
|
362
|
+
}
|
|
363
|
+
whereParam(propName) {
|
|
364
|
+
let param = new Param(this.config[propName], propName);
|
|
365
|
+
param.parent = this;
|
|
366
|
+
this.params.push(param);
|
|
367
|
+
return param;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
/** @hidden */
|
|
371
|
+
export let assertConfig = function (config) {
|
|
372
|
+
return new ConfigParam(config);
|
|
373
|
+
};
|
|
374
|
+
// Duck-typed, so this module needs nothing from the metadata classes. These used to be patched
|
|
375
|
+
// onto Param.prototype by entity-metadata.ts at import time.
|
|
376
|
+
function isEntity(context, v) {
|
|
377
|
+
if (v == null)
|
|
378
|
+
return false;
|
|
379
|
+
return (v.entityType !== undefined);
|
|
380
|
+
}
|
|
381
|
+
function isEntityProperty(context, v) {
|
|
382
|
+
if (v == null)
|
|
383
|
+
return false;
|
|
384
|
+
return (v.isDataProperty || v.isNavigationProperty);
|
|
385
|
+
}
|
|
386
|
+
// Param is exposed so that additional 'is' methods can be added to the prototype.
|
|
387
|
+
core.Param = Param;
|
|
388
|
+
core.assertParam = assertParam;
|
|
389
|
+
core.assertConfig = assertConfig;
|
|
390
|
+
//# sourceMappingURL=assert-param.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert-param.js","sourceRoot":"","sources":["../../src/core/assert-param.ts"],"names":[],"mappings":"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","sourcesContent":["import { BreezeEnum } from './enum.js';\r\nimport { core } from './core.js';\r\n\r\n/** @hidden */\r\nexport interface IParamContext {\r\n typeName?: string;\r\n type?: Function;\r\n prevContext?: IParamContext;\r\n msg?: string | ((context: IParamContext, v: any) => string);\r\n mustNotBeEmpty?: boolean;\r\n enumType?: BreezeEnum;\r\n propertyName?: string;\r\n allowNull?: boolean;\r\n fn?(context: IParamContext, v: any): boolean;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IConfigParam {\r\n config: any;\r\n params: Param[];\r\n whereParam: (propName: string) => Param;\r\n}\r\n\r\n/** @hidden */\r\nexport class Param {\r\n // The %1 parameter\r\n // is required\r\n // must be a %2\r\n // must be an instance of %2\r\n // must be an instance of the %2 enumeration\r\n // must have a %2 property\r\n // must be an array where each element\r\n // is optional or\r\n\r\n v: any;\r\n name: string;\r\n defaultValue: any;\r\n parent: IConfigParam;\r\n /** @hidden @internal */\r\n _context: IParamContext;\r\n /** @hidden @internal */\r\n _contexts: IParamContext[];\r\n\r\n constructor(v: any, name: string) {\r\n this.v = v;\r\n this.name = name;\r\n this._contexts = [<any>null];\r\n }\r\n\r\n isObject(): Param {\r\n return this.isTypeOf('object');\r\n }\r\n\r\n isBoolean(): Param {\r\n return this.isTypeOf('boolean');\r\n }\r\n\r\n isString(): Param {\r\n return this.isTypeOf('string');\r\n }\r\n\r\n isNumber(): Param {\r\n return this.isTypeOf('number');\r\n }\r\n\r\n isFunction(): Param {\r\n return this.isTypeOf('function');\r\n }\r\n\r\n /** @hidden @internal */\r\n isEntity(): Param {\r\n return addContext(this, {\r\n fn: isEntity,\r\n msg: \" must be an entity\"\r\n });\r\n }\r\n\r\n /** @hidden @internal */\r\n isEntityProperty(): Param {\r\n return addContext(this, {\r\n fn: isEntityProperty,\r\n msg: \" must be either a DataProperty or a NavigationProperty\"\r\n });\r\n }\r\n\r\n isNonEmptyString(): Param {\r\n return addContext(this, {\r\n fn: isNonEmptyString,\r\n msg: \"must be a nonEmpty string\"\r\n });\r\n }\r\n\r\n\r\n isTypeOf(typeName: string): Param {\r\n return addContext(this, {\r\n fn: isTypeOf,\r\n typeName: typeName,\r\n msg: typeOfMessage\r\n });\r\n }\r\n\r\n\r\n isInstanceOf(type: Function, typeName?: string): Param {\r\n return addContext(this, {\r\n fn: isInstanceOf,\r\n type: type,\r\n typeName: typeName,\r\n msg: instanceOfMessage\r\n });\r\n }\r\n\r\n\r\n hasProperty(propertyName: string): Param {\r\n return addContext(this, {\r\n fn: hasProperty,\r\n propertyName: propertyName,\r\n msg: hasPropertyMessage\r\n });\r\n }\r\n\r\n\r\n isEnumOf(enumType: any): Param {\r\n return addContext(this, {\r\n fn: isEnumOf,\r\n enumType: enumType,\r\n msg: enumOfMessage\r\n });\r\n }\r\n\r\n isRequired(allowNull: boolean = false): Param {\r\n return addContext(this, {\r\n fn: isRequired,\r\n allowNull: allowNull,\r\n msg: \"is required\"\r\n });\r\n }\r\n\r\n isOptional(): Param {\r\n let context = {\r\n fn: isOptional,\r\n prevContext: <any>null,\r\n msg: isOptionalMessage\r\n };\r\n return addContext(this, context);\r\n }\r\n\r\n isNonEmptyArray(): Param {\r\n return this.isArray(true);\r\n }\r\n\r\n isArray(mustNotBeEmpty?: boolean): Param {\r\n let context = {\r\n fn: isArray,\r\n mustNotBeEmpty: mustNotBeEmpty,\r\n prevContext: <any>null,\r\n msg: isArrayMessage\r\n };\r\n return addContext(this, context);\r\n }\r\n\r\n or() {\r\n this._contexts.push(<any>null);\r\n this._context = <any>null;\r\n return this;\r\n }\r\n\r\n check(defaultValue?: any) {\r\n let ok = exec(this);\r\n if (ok === undefined) return;\r\n if (!ok) {\r\n throw new Error(this.getMessage());\r\n }\r\n\r\n if (this.v !== undefined) {\r\n return this.v;\r\n } else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n /** @hidden @internal */\r\n // called from outside this file.\r\n _addContext(context: IParamContext) {\r\n return addContext(this, context);\r\n }\r\n\r\n getMessage() {\r\n let that = this;\r\n let message = this._contexts.map(function (context) {\r\n return getMessage(context, that.v);\r\n }).join(\", or it \");\r\n return core.formatString(this.MESSAGE_PREFIX, this.name) + \" \" + message;\r\n }\r\n\r\n withDefault(defaultValue: any) {\r\n this.defaultValue = defaultValue;\r\n return this;\r\n }\r\n\r\n whereParam(propName: string) {\r\n return this.parent.whereParam(propName);\r\n }\r\n\r\n applyAll(instance: any, checkOnly: boolean = false) {\r\n let parentTypeName = instance._$typeName;\r\n let allowUnknownProperty = (parentTypeName && this.parent.config._$typeName === parentTypeName);\r\n\r\n let clone = core.extend({}, this.parent.config) as Record<string, any>;\r\n this.parent.params.forEach(function (p) {\r\n if (!allowUnknownProperty) delete clone[p.name];\r\n try {\r\n p.check();\r\n } catch (e) {\r\n throwConfigError(instance, e.message);\r\n }\r\n (!checkOnly) && p._applyOne(instance);\r\n });\r\n // should be no properties left in the clone\r\n if (!allowUnknownProperty) {\r\n for (let key in clone) {\r\n // allow props with an undefined value\r\n if (clone[key] !== undefined) {\r\n throwConfigError(instance, core.formatString(\"Unknown property: '%1'.\", key));\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @hidden @internal */\r\n _applyOne = function (this: Param, instance: any) {\r\n if (this.v !== undefined) {\r\n instance[this.name] = this.v;\r\n } else {\r\n if (this.defaultValue !== undefined) {\r\n instance[this.name] = this.defaultValue;\r\n }\r\n }\r\n };\r\n\r\n MESSAGE_PREFIX = \"The '%1' parameter \";\r\n\r\n}\r\n\r\n/** @hidden */\r\nexport let assertParam = function (v: any, name: string) {\r\n return new Param(v, name);\r\n};\r\n\r\n/**\r\n * The error an `assertParam` chain would have thrown, worded identically, without building the\r\n * chain to get it.\r\n *\r\n * `assertParam(v, name).isX().check()` allocates a `Param`, its contexts array, a context object\r\n * per check and a closure to run them - four or five objects to answer a question that is usually\r\n * one `typeof`. That is the right trade at a public entry point called once per operation, and\r\n * the wrong one somewhere that runs per entity: `new BreezeEvent` was 56% assertParam, and every\r\n * entity constructs two of them.\r\n *\r\n * So the few places on a per-object path check inline and call this on the failing branch, where\r\n * the allocation no longer matters. Everywhere else keeps the chain, which reads better and\r\n * composes. See *Assertions on per-object paths* in CHANGES-DEV.md.\r\n *\r\n * @hidden @internal\r\n */\r\nexport function paramError(name: string, message: string) {\r\n // The two spaces match what Param.getMessage produces - prefix, then a joining space.\r\n return new Error(\"The '\" + name + \"' parameter \" + message);\r\n}\r\n\r\nfunction isTypeOf(context: IParamContext, v: any) {\r\n if (v == null) return false;\r\n if (typeof (v) === context.typeName) return true;\r\n return false;\r\n}\r\n\r\nfunction isNonEmptyString(context: IParamContext, v: any) {\r\n if (v == null) return false;\r\n return (typeof (v) === 'string') && v.length > 0;\r\n}\r\n\r\nfunction isInstanceOf(context: IParamContext, v: any) {\r\n if (v == null || context.type == null) return false;\r\n return (v instanceof context.type);\r\n}\r\n\r\nfunction isEnumOf(context: IParamContext, v: any) {\r\n if (v == null || context.enumType == null ) return false;\r\n return (context.enumType as any).contains(v);\r\n}\r\n\r\nfunction hasProperty(context: IParamContext, v: any) {\r\n if (v == null || context.propertyName == null) return false;\r\n return (v[context.propertyName] !== undefined);\r\n}\r\n\r\nfunction isRequired(context: IParamContext, v: any) {\r\n if (context.allowNull) {\r\n return v !== undefined;\r\n } else {\r\n return v != null;\r\n }\r\n}\r\n\r\nfunction isOptional(context: IParamContext, v: any) {\r\n if (v == null) return true;\r\n let prevContext = context.prevContext;\r\n if (prevContext && prevContext.fn) {\r\n return prevContext.fn(prevContext, v);\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nfunction isOptionalMessage(context: IParamContext, v: any) {\r\n let prevContext = context.prevContext;\r\n let element = prevContext ? \" or it \" + getMessage(prevContext, v) : \"\";\r\n return \"is optional\" + element;\r\n}\r\n\r\nfunction isArray(context: IParamContext, v: any) {\r\n if (!Array.isArray(v)) {\r\n return false;\r\n }\r\n if (context.mustNotBeEmpty) {\r\n if (v.length === 0) return false;\r\n }\r\n // allow standalone is array call.\r\n let prevContext = context.prevContext;\r\n if (!prevContext) return true;\r\n\r\n let pc = <any>prevContext;\r\n return v.every(function (v1: any) {\r\n return pc.fn && pc.fn(pc, v1);\r\n });\r\n}\r\n\r\n// Built only when a check has actually failed. These used to be concatenated eagerly, on\r\n// every call, and thrown away - which is what happens on every call that passes.\r\nfunction typeOfMessage(context: IParamContext) {\r\n return \"must be a '\" + context.typeName + \"'\";\r\n}\r\n\r\nfunction instanceOfMessage(context: IParamContext) {\r\n const typeName = context.typeName || (context.type as any)?.prototype?._$typeName;\r\n return \"must be an instance of '\" + typeName + \"'\";\r\n}\r\n\r\nfunction hasPropertyMessage(context: IParamContext) {\r\n return \"must have a '\" + context.propertyName + \"' property\";\r\n}\r\n\r\nfunction enumOfMessage(context: IParamContext) {\r\n return \"must be an instance of the '\" + ((context.enumType as any)?.name || 'unknown') + \"' enumeration\";\r\n}\r\n\r\nfunction isArrayMessage(context: IParamContext, v: any) {\r\n let arrayDescr = context.mustNotBeEmpty ? \"a nonEmpty array\" : \"an array\";\r\n let prevContext = context.prevContext;\r\n let element = prevContext ? \" where each element \" + getMessage(prevContext, v) : \"\";\r\n return \" must be \" + arrayDescr + element;\r\n}\r\n\r\nfunction getMessage(context: IParamContext, v: any) {\r\n let msg = context.msg;\r\n if (typeof (msg) === \"function\") {\r\n msg = (<any>msg)(context, v);\r\n }\r\n return msg;\r\n}\r\n\r\nfunction addContext(that: Param, context: IParamContext) {\r\n if (that._context) {\r\n let curContext = that._context;\r\n\r\n while (curContext.prevContext != null) {\r\n curContext = curContext.prevContext;\r\n }\r\n\r\n if (curContext.prevContext === null) {\r\n curContext.prevContext = context;\r\n // just update the prevContext but don't change the curContext.\r\n return that;\r\n } else if (context.prevContext == null) {\r\n context.prevContext = that._context;\r\n } else {\r\n throw new Error(\"Illegal construction - use 'or' to combine checks\");\r\n }\r\n }\r\n return setContext(that, context);\r\n}\r\n\r\nfunction setContext(that: Param, context: IParamContext) {\r\n that._contexts[that._contexts.length - 1] = context;\r\n that._context = context;\r\n return that;\r\n}\r\n\r\n\r\nfunction exec(self: Param) {\r\n // clear off last one if null\r\n let contexts = self._contexts;\r\n if (contexts[contexts.length - 1] == null) {\r\n contexts.pop();\r\n }\r\n if (contexts.length === 0) {\r\n return undefined;\r\n }\r\n return contexts.some(function (context: IParamContext) {\r\n return context.fn ? context.fn(context, self.v) : false;\r\n });\r\n}\r\n\r\nfunction throwConfigError(instance: any, message: string) {\r\n throw new Error(core.formatString(\"Error configuring an instance of '%1'. %2\", (instance && instance._$typeName) || \"object\", message));\r\n}\r\n\r\nclass ConfigParam {\r\n config: any;\r\n params: Param[];\r\n constructor(config: Object) {\r\n if (typeof (config) !== \"object\") {\r\n throw new Error(\"Configuration parameter should be an object, instead it is a: \" + typeof (config));\r\n }\r\n this.config = config;\r\n this.params = [];\r\n }\r\n\r\n whereParam(propName: string) {\r\n let param = new Param(this.config[propName], propName);\r\n param.parent = this;\r\n this.params.push(param);\r\n return param;\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport let assertConfig = function (config: Object) {\r\n return new ConfigParam(config) as IConfigParam;\r\n};\r\n\r\n\r\n// Duck-typed, so this module needs nothing from the metadata classes. These used to be patched\r\n// onto Param.prototype by entity-metadata.ts at import time.\r\nfunction isEntity(context: any, v: any) {\r\n if (v == null) return false;\r\n return (v.entityType !== undefined);\r\n}\r\n\r\nfunction isEntityProperty(context: any, v: any) {\r\n if (v == null) return false;\r\n return (v.isDataProperty || v.isNavigationProperty);\r\n}\r\n\r\n// Param is exposed so that additional 'is' methods can be added to the prototype.\r\n(core as any).Param = Param;\r\n(core as any).assertParam = assertParam;\r\n(core as any).assertConfig = assertConfig;\r\n"]}
|