@matter/node 0.16.0-alpha.0-20251030-e9ca79f93 → 0.16.0-alpha.0-20251031-0f308af69
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/dist/cjs/behavior/state/validation/ValueValidator.d.ts.map +1 -1
- package/dist/cjs/behavior/state/validation/ValueValidator.js +18 -4
- package/dist/cjs/behavior/state/validation/ValueValidator.js.map +1 -1
- package/dist/cjs/behavior/state/validation/assertions.d.ts +13 -0
- package/dist/cjs/behavior/state/validation/assertions.d.ts.map +1 -1
- package/dist/cjs/behavior/state/validation/assertions.js +44 -0
- package/dist/cjs/behavior/state/validation/assertions.js.map +2 -2
- package/dist/cjs/endpoint/properties/EndpointContainer.d.ts +1 -1
- package/dist/cjs/endpoint/properties/EndpointContainer.d.ts.map +1 -1
- package/dist/esm/behavior/state/validation/ValueValidator.d.ts.map +1 -1
- package/dist/esm/behavior/state/validation/ValueValidator.js +21 -6
- package/dist/esm/behavior/state/validation/ValueValidator.js.map +1 -1
- package/dist/esm/behavior/state/validation/assertions.d.ts +13 -0
- package/dist/esm/behavior/state/validation/assertions.d.ts.map +1 -1
- package/dist/esm/behavior/state/validation/assertions.js +45 -1
- package/dist/esm/behavior/state/validation/assertions.js.map +2 -2
- package/dist/esm/endpoint/properties/EndpointContainer.d.ts +1 -1
- package/dist/esm/endpoint/properties/EndpointContainer.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/behavior/state/validation/ValueValidator.ts +25 -6
- package/src/behavior/state/validation/assertions.ts +54 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValueValidator.d.ts","sourceRoot":"","sources":["../../../../../src/behavior/state/validation/ValueValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"ValueValidator.d.ts","sourceRoot":"","sources":["../../../../../src/behavior/state/validation/ValueValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAgB5E;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,eAAe,CAAC,QAAQ,GAAG,SAAS,CA4E/G"}
|
|
@@ -39,8 +39,8 @@ function ValueValidator(schema, supervisor) {
|
|
|
39
39
|
return createStructValidator(schema, supervisor);
|
|
40
40
|
}
|
|
41
41
|
let validator;
|
|
42
|
-
const
|
|
43
|
-
switch (metatype) {
|
|
42
|
+
const metabase = schema.metabase;
|
|
43
|
+
switch (metabase?.metatype) {
|
|
44
44
|
case import_model.Metatype.enum:
|
|
45
45
|
validator = createEnumValidator(schema, supervisor);
|
|
46
46
|
break;
|
|
@@ -48,6 +48,8 @@ function ValueValidator(schema, supervisor) {
|
|
|
48
48
|
validator = createBitmapValidator(schema, supervisor);
|
|
49
49
|
break;
|
|
50
50
|
case import_model.Metatype.integer:
|
|
51
|
+
validator = createIntegerValidator(schema, supervisor, metabase.name);
|
|
52
|
+
break;
|
|
51
53
|
case import_model.Metatype.float:
|
|
52
54
|
validator = createSimpleValidator(schema, supervisor, import_assertions.assertNumeric);
|
|
53
55
|
break;
|
|
@@ -85,7 +87,7 @@ function ValueValidator(schema, supervisor) {
|
|
|
85
87
|
default:
|
|
86
88
|
throw new import_protocol.SchemaImplementationError(
|
|
87
89
|
(0, import_model.DataModelPath)(schema.path),
|
|
88
|
-
`Unsupported validation metatype ${metatype}`
|
|
90
|
+
`Unsupported validation metatype ${metabase?.metatype}`
|
|
89
91
|
);
|
|
90
92
|
}
|
|
91
93
|
validator = createNullValidator(schema, validator);
|
|
@@ -111,7 +113,7 @@ function createEnumValidator(schema, supervisor) {
|
|
|
111
113
|
return (value, session, location) => {
|
|
112
114
|
(0, import_assertions.assertNumber)(value, location);
|
|
113
115
|
if (!valid.has(value)) {
|
|
114
|
-
throw new import_protocol.DatatypeError(location, "defined in enum", value, import_types.
|
|
116
|
+
throw new import_protocol.DatatypeError(location, "defined in enum", value, import_types.Status.ConstraintError);
|
|
115
117
|
}
|
|
116
118
|
constraintValidator?.(value, session, location);
|
|
117
119
|
};
|
|
@@ -170,6 +172,18 @@ function createSimpleValidator(schema, supervisor, validateType) {
|
|
|
170
172
|
validateConstraint?.(value, session, location);
|
|
171
173
|
};
|
|
172
174
|
}
|
|
175
|
+
function createIntegerValidator(schema, supervisor, name) {
|
|
176
|
+
let assertion;
|
|
177
|
+
if (schema.effectiveQuality.nullable) {
|
|
178
|
+
assertion = import_assertions.assertInt.nullable[name];
|
|
179
|
+
} else {
|
|
180
|
+
assertion = import_assertions.assertInt.notNullable[name];
|
|
181
|
+
}
|
|
182
|
+
if (assertion === void 0) {
|
|
183
|
+
throw new import_general.InternalError(`No integer assertion implemented for integer type ${name}`);
|
|
184
|
+
}
|
|
185
|
+
return createSimpleValidator(schema, supervisor, assertion);
|
|
186
|
+
}
|
|
173
187
|
function createStructValidator(schema, supervisor) {
|
|
174
188
|
const validators = {};
|
|
175
189
|
for (const field of supervisor.membersOf(schema)) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/behavior/state/validation/ValueValidator.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -14,4 +14,17 @@ export declare function assertString(value: Val, path: SchemaErrorPath): asserts
|
|
|
14
14
|
export declare function assertBytes(value: Val, path: SchemaErrorPath): asserts value is Bytes;
|
|
15
15
|
export declare function assertSequence(value: Val, path: SchemaErrorPath): asserts value is string | Bytes;
|
|
16
16
|
export declare function assertArray(value: Val, path: SchemaErrorPath): asserts value is Val[];
|
|
17
|
+
export declare const assertInt: {
|
|
18
|
+
/**
|
|
19
|
+
* Assertions for each integer type that is not nullable.
|
|
20
|
+
*/
|
|
21
|
+
notNullable: Record<string, typeof assertNumeric | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* Assertions for nullable integer types.
|
|
24
|
+
*
|
|
25
|
+
* These are separate from the "not nullable" assertions because Matter reserves a high or low value (for unsigned
|
|
26
|
+
* and signed, respectively) to indicate the field is null.
|
|
27
|
+
*/
|
|
28
|
+
nullable: Record<string, typeof assertNumeric | undefined>;
|
|
29
|
+
};
|
|
17
30
|
//# sourceMappingURL=assertions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../../../../src/behavior/state/validation/assertions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAY,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../../../../src/behavior/state/validation/assertions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAY,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAoC,GAAG,EAAE,MAAM,WAAW,CAAC;AAElE,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAKvF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAKxF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAK3F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,GAAG,MAAM,CAKjG;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAKvF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAKrF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,GAAG,KAAK,CAKjG;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,CAIrF;AAED,eAAO,MAAM,SAAS;IAClB;;OAEG;iBACgB,MAAM,CAAC,MAAM,EAAE,OAAO,aAAa,GAAG,SAAS,CAAC;IAEnE;;;;;OAKG;cACa,MAAM,CAAC,MAAM,EAAE,OAAO,aAAa,GAAG,SAAS,CAAC;CACnE,CAAC"}
|
|
@@ -21,6 +21,7 @@ __export(assertions_exports, {
|
|
|
21
21
|
assertArray: () => assertArray,
|
|
22
22
|
assertBoolean: () => assertBoolean,
|
|
23
23
|
assertBytes: () => assertBytes,
|
|
24
|
+
assertInt: () => assertInt,
|
|
24
25
|
assertNumber: () => assertNumber,
|
|
25
26
|
assertNumeric: () => assertNumeric,
|
|
26
27
|
assertObject: () => assertObject,
|
|
@@ -82,4 +83,47 @@ function assertArray(value, path) {
|
|
|
82
83
|
throw new import_protocol.DatatypeError(path, "an array", value);
|
|
83
84
|
}
|
|
84
85
|
}
|
|
86
|
+
const assertInt = {
|
|
87
|
+
/**
|
|
88
|
+
* Assertions for each integer type that is not nullable.
|
|
89
|
+
*/
|
|
90
|
+
notNullable: {},
|
|
91
|
+
/**
|
|
92
|
+
* Assertions for nullable integer types.
|
|
93
|
+
*
|
|
94
|
+
* These are separate from the "not nullable" assertions because Matter reserves a high or low value (for unsigned
|
|
95
|
+
* and signed, respectively) to indicate the field is null.
|
|
96
|
+
*/
|
|
97
|
+
nullable: {}
|
|
98
|
+
};
|
|
99
|
+
for (let i = 1n; i < 9n; i++) {
|
|
100
|
+
const intName = `int${i * 8n}`;
|
|
101
|
+
const uintName = `u${intName}`;
|
|
102
|
+
const numValues = 2n ** (i * 8n);
|
|
103
|
+
const unsignedMax = numValues - 1n;
|
|
104
|
+
assertInt.notNullable[uintName] = createIntAssertion(uintName, 0n, unsignedMax);
|
|
105
|
+
assertInt.nullable[uintName] = createIntAssertion(`nullable ${uintName}`, 0n, unsignedMax - 1n);
|
|
106
|
+
const halfNumValues = numValues / 2n;
|
|
107
|
+
const signedMax = halfNumValues - 1n;
|
|
108
|
+
const signedMin = -halfNumValues;
|
|
109
|
+
assertInt.notNullable[intName] = createIntAssertion(intName, signedMin, signedMax);
|
|
110
|
+
assertInt.nullable[intName] = createIntAssertion(`nullable ${intName}`, signedMin + 1n, signedMax);
|
|
111
|
+
}
|
|
112
|
+
function createIntAssertion(name, lowerBoundInclusive, upperBoundExclusive) {
|
|
113
|
+
if (lowerBoundInclusive < Number.MIN_SAFE_INTEGER || upperBoundExclusive > Number.MAX_SAFE_INTEGER) {
|
|
114
|
+
return createVarIntAssertion(name, lowerBoundInclusive, upperBoundExclusive);
|
|
115
|
+
}
|
|
116
|
+
return createVarIntAssertion(name, Number(lowerBoundInclusive), Number(upperBoundExclusive));
|
|
117
|
+
}
|
|
118
|
+
function createVarIntAssertion(name, min, max) {
|
|
119
|
+
return function assertInt2(value, path) {
|
|
120
|
+
assertNumeric(value, path);
|
|
121
|
+
if (value < min) {
|
|
122
|
+
throw new import_protocol.IntegerRangeError(path, `Value ${value} is below the ${name} minimum of ${min}`);
|
|
123
|
+
}
|
|
124
|
+
if (value > max) {
|
|
125
|
+
throw new import_protocol.IntegerRangeError(path, `Value ${value} is above the ${name} maximum of ${max}`);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
}
|
|
85
129
|
//# sourceMappingURL=assertions.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/behavior/state/validation/assertions.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAAgC;AAEhC,
|
|
5
|
-
"names": []
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["assertInt"]
|
|
6
6
|
}
|
|
@@ -19,7 +19,7 @@ export declare class EndpointContainer<T extends Endpoint = Endpoint> implements
|
|
|
19
19
|
has(endpoint: T): boolean;
|
|
20
20
|
get added(): import("#general").Observable<[T], void>;
|
|
21
21
|
get deleted(): import("#general").Observable<[T], void>;
|
|
22
|
-
get empty(): import("#general").ObservableValue<[boolean]>;
|
|
22
|
+
get empty(): import("#general").ObservableValue<[boolean], void>;
|
|
23
23
|
get size(): number;
|
|
24
24
|
map<T2>(fn: (part: T) => T2): T2[];
|
|
25
25
|
filter(predicate: (part: T) => boolean): T[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointContainer.d.ts","sourceRoot":"","sources":["../../../../src/endpoint/properties/EndpointContainer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAwB,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAErG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,CACxD,YAAW,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;;IAwH1D,CAAC,UAAU,CAAC,KAAK,CAAC;gBAnHV,QAAQ,EAAE,QAAQ;IAI9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAgBvB,GAAG,CAAC,QAAQ,EAAE,CAAC;IAef,MAAM,CAAC,QAAQ,EAAE,CAAC;IAIlB,KAAK;IAIL,GAAG,CAAC,QAAQ,EAAE,CAAC;IAIf,IAAI,KAAK,6CAER;IAED,IAAI,OAAO,6CAEV;IAED,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"EndpointContainer.d.ts","sourceRoot":"","sources":["../../../../src/endpoint/properties/EndpointContainer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAwB,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAErG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,CACxD,YAAW,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;;IAwH1D,CAAC,UAAU,CAAC,KAAK,CAAC;gBAnHV,QAAQ,EAAE,QAAQ;IAI9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAgBvB,GAAG,CAAC,QAAQ,EAAE,CAAC;IAef,MAAM,CAAC,QAAQ,EAAE,CAAC;IAIlB,KAAK;IAIL,GAAG,CAAC,QAAQ,EAAE,CAAC;IAIf,IAAI,KAAK,6CAER;IAED,IAAI,OAAO,6CAEV;IAED,IAAI,KAAK,wDAER;IAED,IAAI,IAAI,WAEP;IAED,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;IAI3B,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO;IAItC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO;IAIpC,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO;IAIhC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAIjB;;OAEG;IACG,KAAK;IAMX;;OAEG;IACG,KAAK;IAMX;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAOhD,SAAS,KAAK,KAAK,uDAElB;CAKJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValueValidator.d.ts","sourceRoot":"","sources":["../../../../../src/behavior/state/validation/ValueValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"ValueValidator.d.ts","sourceRoot":"","sources":["../../../../../src/behavior/state/validation/ValueValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAgB5E;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,eAAe,CAAC,QAAQ,GAAG,SAAS,CA4E/G"}
|
|
@@ -3,15 +3,16 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { camelize } from "#general";
|
|
6
|
+
import { camelize, InternalError } from "#general";
|
|
7
7
|
import { AttributeModel, ClusterModel, DataModelPath, FeatureMap, Metatype } from "#model";
|
|
8
8
|
import { ConformanceError, DatatypeError, SchemaImplementationError, Val } from "#protocol";
|
|
9
|
-
import {
|
|
9
|
+
import { Status } from "#types";
|
|
10
10
|
import { Internal } from "../managed/Internal.js";
|
|
11
11
|
import {
|
|
12
12
|
assertArray,
|
|
13
13
|
assertBoolean,
|
|
14
14
|
assertBytes,
|
|
15
|
+
assertInt,
|
|
15
16
|
assertNumber,
|
|
16
17
|
assertNumeric,
|
|
17
18
|
assertObject,
|
|
@@ -24,8 +25,8 @@ function ValueValidator(schema, supervisor) {
|
|
|
24
25
|
return createStructValidator(schema, supervisor);
|
|
25
26
|
}
|
|
26
27
|
let validator;
|
|
27
|
-
const
|
|
28
|
-
switch (metatype) {
|
|
28
|
+
const metabase = schema.metabase;
|
|
29
|
+
switch (metabase?.metatype) {
|
|
29
30
|
case Metatype.enum:
|
|
30
31
|
validator = createEnumValidator(schema, supervisor);
|
|
31
32
|
break;
|
|
@@ -33,6 +34,8 @@ function ValueValidator(schema, supervisor) {
|
|
|
33
34
|
validator = createBitmapValidator(schema, supervisor);
|
|
34
35
|
break;
|
|
35
36
|
case Metatype.integer:
|
|
37
|
+
validator = createIntegerValidator(schema, supervisor, metabase.name);
|
|
38
|
+
break;
|
|
36
39
|
case Metatype.float:
|
|
37
40
|
validator = createSimpleValidator(schema, supervisor, assertNumeric);
|
|
38
41
|
break;
|
|
@@ -70,7 +73,7 @@ function ValueValidator(schema, supervisor) {
|
|
|
70
73
|
default:
|
|
71
74
|
throw new SchemaImplementationError(
|
|
72
75
|
DataModelPath(schema.path),
|
|
73
|
-
`Unsupported validation metatype ${metatype}`
|
|
76
|
+
`Unsupported validation metatype ${metabase?.metatype}`
|
|
74
77
|
);
|
|
75
78
|
}
|
|
76
79
|
validator = createNullValidator(schema, validator);
|
|
@@ -96,7 +99,7 @@ function createEnumValidator(schema, supervisor) {
|
|
|
96
99
|
return (value, session, location) => {
|
|
97
100
|
assertNumber(value, location);
|
|
98
101
|
if (!valid.has(value)) {
|
|
99
|
-
throw new DatatypeError(location, "defined in enum", value,
|
|
102
|
+
throw new DatatypeError(location, "defined in enum", value, Status.ConstraintError);
|
|
100
103
|
}
|
|
101
104
|
constraintValidator?.(value, session, location);
|
|
102
105
|
};
|
|
@@ -155,6 +158,18 @@ function createSimpleValidator(schema, supervisor, validateType) {
|
|
|
155
158
|
validateConstraint?.(value, session, location);
|
|
156
159
|
};
|
|
157
160
|
}
|
|
161
|
+
function createIntegerValidator(schema, supervisor, name) {
|
|
162
|
+
let assertion;
|
|
163
|
+
if (schema.effectiveQuality.nullable) {
|
|
164
|
+
assertion = assertInt.nullable[name];
|
|
165
|
+
} else {
|
|
166
|
+
assertion = assertInt.notNullable[name];
|
|
167
|
+
}
|
|
168
|
+
if (assertion === void 0) {
|
|
169
|
+
throw new InternalError(`No integer assertion implemented for integer type ${name}`);
|
|
170
|
+
}
|
|
171
|
+
return createSimpleValidator(schema, supervisor, assertion);
|
|
172
|
+
}
|
|
158
173
|
function createStructValidator(schema, supervisor) {
|
|
159
174
|
const validators = {};
|
|
160
175
|
for (const field of supervisor.membersOf(schema)) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/behavior/state/validation/ValueValidator.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -14,4 +14,17 @@ export declare function assertString(value: Val, path: SchemaErrorPath): asserts
|
|
|
14
14
|
export declare function assertBytes(value: Val, path: SchemaErrorPath): asserts value is Bytes;
|
|
15
15
|
export declare function assertSequence(value: Val, path: SchemaErrorPath): asserts value is string | Bytes;
|
|
16
16
|
export declare function assertArray(value: Val, path: SchemaErrorPath): asserts value is Val[];
|
|
17
|
+
export declare const assertInt: {
|
|
18
|
+
/**
|
|
19
|
+
* Assertions for each integer type that is not nullable.
|
|
20
|
+
*/
|
|
21
|
+
notNullable: Record<string, typeof assertNumeric | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* Assertions for nullable integer types.
|
|
24
|
+
*
|
|
25
|
+
* These are separate from the "not nullable" assertions because Matter reserves a high or low value (for unsigned
|
|
26
|
+
* and signed, respectively) to indicate the field is null.
|
|
27
|
+
*/
|
|
28
|
+
nullable: Record<string, typeof assertNumeric | undefined>;
|
|
29
|
+
};
|
|
17
30
|
//# sourceMappingURL=assertions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../../../../src/behavior/state/validation/assertions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAY,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"assertions.d.ts","sourceRoot":"","sources":["../../../../../src/behavior/state/validation/assertions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAY,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAoC,GAAG,EAAE,MAAM,WAAW,CAAC;AAElE,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAKvF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAKxF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,CAK3F;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,GAAG,MAAM,CAKjG;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAKvF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAKrF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,GAAG,KAAK,CAKjG;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,CAIrF;AAED,eAAO,MAAM,SAAS;IAClB;;OAEG;iBACgB,MAAM,CAAC,MAAM,EAAE,OAAO,aAAa,GAAG,SAAS,CAAC;IAEnE;;;;;OAKG;cACa,MAAM,CAAC,MAAM,EAAE,OAAO,aAAa,GAAG,SAAS,CAAC;CACnE,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { Bytes, isObject } from "#general";
|
|
7
|
-
import { DatatypeError } from "#protocol";
|
|
7
|
+
import { DatatypeError, IntegerRangeError } from "#protocol";
|
|
8
8
|
function assertNumber(value, path) {
|
|
9
9
|
if (Number.isFinite(value)) {
|
|
10
10
|
return;
|
|
@@ -52,10 +52,54 @@ function assertArray(value, path) {
|
|
|
52
52
|
throw new DatatypeError(path, "an array", value);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
+
const assertInt = {
|
|
56
|
+
/**
|
|
57
|
+
* Assertions for each integer type that is not nullable.
|
|
58
|
+
*/
|
|
59
|
+
notNullable: {},
|
|
60
|
+
/**
|
|
61
|
+
* Assertions for nullable integer types.
|
|
62
|
+
*
|
|
63
|
+
* These are separate from the "not nullable" assertions because Matter reserves a high or low value (for unsigned
|
|
64
|
+
* and signed, respectively) to indicate the field is null.
|
|
65
|
+
*/
|
|
66
|
+
nullable: {}
|
|
67
|
+
};
|
|
68
|
+
for (let i = 1n; i < 9n; i++) {
|
|
69
|
+
const intName = `int${i * 8n}`;
|
|
70
|
+
const uintName = `u${intName}`;
|
|
71
|
+
const numValues = 2n ** (i * 8n);
|
|
72
|
+
const unsignedMax = numValues - 1n;
|
|
73
|
+
assertInt.notNullable[uintName] = createIntAssertion(uintName, 0n, unsignedMax);
|
|
74
|
+
assertInt.nullable[uintName] = createIntAssertion(`nullable ${uintName}`, 0n, unsignedMax - 1n);
|
|
75
|
+
const halfNumValues = numValues / 2n;
|
|
76
|
+
const signedMax = halfNumValues - 1n;
|
|
77
|
+
const signedMin = -halfNumValues;
|
|
78
|
+
assertInt.notNullable[intName] = createIntAssertion(intName, signedMin, signedMax);
|
|
79
|
+
assertInt.nullable[intName] = createIntAssertion(`nullable ${intName}`, signedMin + 1n, signedMax);
|
|
80
|
+
}
|
|
81
|
+
function createIntAssertion(name, lowerBoundInclusive, upperBoundExclusive) {
|
|
82
|
+
if (lowerBoundInclusive < Number.MIN_SAFE_INTEGER || upperBoundExclusive > Number.MAX_SAFE_INTEGER) {
|
|
83
|
+
return createVarIntAssertion(name, lowerBoundInclusive, upperBoundExclusive);
|
|
84
|
+
}
|
|
85
|
+
return createVarIntAssertion(name, Number(lowerBoundInclusive), Number(upperBoundExclusive));
|
|
86
|
+
}
|
|
87
|
+
function createVarIntAssertion(name, min, max) {
|
|
88
|
+
return function assertInt2(value, path) {
|
|
89
|
+
assertNumeric(value, path);
|
|
90
|
+
if (value < min) {
|
|
91
|
+
throw new IntegerRangeError(path, `Value ${value} is below the ${name} minimum of ${min}`);
|
|
92
|
+
}
|
|
93
|
+
if (value > max) {
|
|
94
|
+
throw new IntegerRangeError(path, `Value ${value} is above the ${name} maximum of ${max}`);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
55
98
|
export {
|
|
56
99
|
assertArray,
|
|
57
100
|
assertBoolean,
|
|
58
101
|
assertBytes,
|
|
102
|
+
assertInt,
|
|
59
103
|
assertNumber,
|
|
60
104
|
assertNumeric,
|
|
61
105
|
assertObject,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/behavior/state/validation/assertions.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,OAAO,gBAAgB;AAEhC,SAAS,
|
|
5
|
-
"names": []
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["assertInt"]
|
|
6
6
|
}
|
|
@@ -19,7 +19,7 @@ export declare class EndpointContainer<T extends Endpoint = Endpoint> implements
|
|
|
19
19
|
has(endpoint: T): boolean;
|
|
20
20
|
get added(): import("#general").Observable<[T], void>;
|
|
21
21
|
get deleted(): import("#general").Observable<[T], void>;
|
|
22
|
-
get empty(): import("#general").ObservableValue<[boolean]>;
|
|
22
|
+
get empty(): import("#general").ObservableValue<[boolean], void>;
|
|
23
23
|
get size(): number;
|
|
24
24
|
map<T2>(fn: (part: T) => T2): T2[];
|
|
25
25
|
filter(predicate: (part: T) => boolean): T[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EndpointContainer.d.ts","sourceRoot":"","sources":["../../../../src/endpoint/properties/EndpointContainer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAwB,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAErG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,CACxD,YAAW,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;;IAwH1D,CAAC,UAAU,CAAC,KAAK,CAAC;gBAnHV,QAAQ,EAAE,QAAQ;IAI9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAgBvB,GAAG,CAAC,QAAQ,EAAE,CAAC;IAef,MAAM,CAAC,QAAQ,EAAE,CAAC;IAIlB,KAAK;IAIL,GAAG,CAAC,QAAQ,EAAE,CAAC;IAIf,IAAI,KAAK,6CAER;IAED,IAAI,OAAO,6CAEV;IAED,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"EndpointContainer.d.ts","sourceRoot":"","sources":["../../../../src/endpoint/properties/EndpointContainer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAwB,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAErG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,CACxD,YAAW,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;;IAwH1D,CAAC,UAAU,CAAC,KAAK,CAAC;gBAnHV,QAAQ,EAAE,QAAQ;IAI9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAgBvB,GAAG,CAAC,QAAQ,EAAE,CAAC;IAef,MAAM,CAAC,QAAQ,EAAE,CAAC;IAIlB,KAAK;IAIL,GAAG,CAAC,QAAQ,EAAE,CAAC;IAIf,IAAI,KAAK,6CAER;IAED,IAAI,OAAO,6CAEV;IAED,IAAI,KAAK,wDAER;IAED,IAAI,IAAI,WAEP;IAED,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE;IAI3B,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO;IAItC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO;IAIpC,OAAO,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO;IAIhC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAIjB;;OAEG;IACG,KAAK;IAMX;;OAEG;IACG,KAAK;IAMX;;OAEG;IACH,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAOhD,SAAS,KAAK,KAAK,uDAElB;CAKJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/node",
|
|
3
|
-
"version": "0.16.0-alpha.0-
|
|
3
|
+
"version": "0.16.0-alpha.0-20251031-0f308af69",
|
|
4
4
|
"description": "API for building Matter nodes",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -42,14 +42,14 @@
|
|
|
42
42
|
"#*": "./src/*"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@matter/general": "0.16.0-alpha.0-
|
|
46
|
-
"@matter/model": "0.16.0-alpha.0-
|
|
47
|
-
"@matter/types": "0.16.0-alpha.0-
|
|
48
|
-
"@matter/protocol": "0.16.0-alpha.0-
|
|
45
|
+
"@matter/general": "0.16.0-alpha.0-20251031-0f308af69",
|
|
46
|
+
"@matter/model": "0.16.0-alpha.0-20251031-0f308af69",
|
|
47
|
+
"@matter/types": "0.16.0-alpha.0-20251031-0f308af69",
|
|
48
|
+
"@matter/protocol": "0.16.0-alpha.0-20251031-0f308af69"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@matter/tools": "0.16.0-alpha.0-
|
|
52
|
-
"@matter/testing": "0.16.0-alpha.0-
|
|
51
|
+
"@matter/tools": "0.16.0-alpha.0-20251031-0f308af69",
|
|
52
|
+
"@matter/testing": "0.16.0-alpha.0-20251031-0f308af69"
|
|
53
53
|
},
|
|
54
54
|
"files": [
|
|
55
55
|
"dist/**/*",
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { camelize } from "#general";
|
|
7
|
+
import { camelize, InternalError } from "#general";
|
|
8
8
|
import type { Schema } from "#model";
|
|
9
9
|
import { AttributeModel, ClusterModel, DataModelPath, FeatureMap, Metatype, ValueModel } from "#model";
|
|
10
10
|
import { ConformanceError, DatatypeError, SchemaImplementationError, Val } from "#protocol";
|
|
11
|
-
import {
|
|
11
|
+
import { Status } from "#types";
|
|
12
12
|
import { RootSupervisor } from "../../supervision/RootSupervisor.js";
|
|
13
13
|
import type { ValueSupervisor } from "../../supervision/ValueSupervisor.js";
|
|
14
14
|
import { Internal } from "../managed/Internal.js";
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
assertArray,
|
|
17
17
|
assertBoolean,
|
|
18
18
|
assertBytes,
|
|
19
|
+
assertInt,
|
|
19
20
|
assertNumber,
|
|
20
21
|
assertNumeric,
|
|
21
22
|
assertObject,
|
|
@@ -37,8 +38,8 @@ export function ValueValidator(schema: Schema, supervisor: RootSupervisor): Valu
|
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
let validator: ValueSupervisor.Validate | undefined;
|
|
40
|
-
const
|
|
41
|
-
switch (metatype) {
|
|
41
|
+
const metabase = schema.metabase;
|
|
42
|
+
switch (metabase?.metatype) {
|
|
42
43
|
case Metatype.enum:
|
|
43
44
|
validator = createEnumValidator(schema, supervisor);
|
|
44
45
|
break;
|
|
@@ -48,6 +49,9 @@ export function ValueValidator(schema: Schema, supervisor: RootSupervisor): Valu
|
|
|
48
49
|
break;
|
|
49
50
|
|
|
50
51
|
case Metatype.integer:
|
|
52
|
+
validator = createIntegerValidator(schema, supervisor, metabase.name);
|
|
53
|
+
break;
|
|
54
|
+
|
|
51
55
|
case Metatype.float:
|
|
52
56
|
validator = createSimpleValidator(schema, supervisor, assertNumeric);
|
|
53
57
|
break;
|
|
@@ -95,7 +99,7 @@ export function ValueValidator(schema: Schema, supervisor: RootSupervisor): Valu
|
|
|
95
99
|
default:
|
|
96
100
|
throw new SchemaImplementationError(
|
|
97
101
|
DataModelPath((schema as unknown as Schema).path),
|
|
98
|
-
`Unsupported validation metatype ${metatype}`,
|
|
102
|
+
`Unsupported validation metatype ${metabase?.metatype}`,
|
|
99
103
|
);
|
|
100
104
|
}
|
|
101
105
|
|
|
@@ -138,7 +142,7 @@ function createEnumValidator(schema: ValueModel, supervisor: RootSupervisor): Va
|
|
|
138
142
|
return (value, session, location) => {
|
|
139
143
|
assertNumber(value, location);
|
|
140
144
|
if (!valid.has(value)) {
|
|
141
|
-
throw new DatatypeError(location, "defined in enum", value,
|
|
145
|
+
throw new DatatypeError(location, "defined in enum", value, Status.ConstraintError);
|
|
142
146
|
}
|
|
143
147
|
|
|
144
148
|
constraintValidator?.(value, session, location);
|
|
@@ -216,6 +220,21 @@ function createSimpleValidator(
|
|
|
216
220
|
};
|
|
217
221
|
}
|
|
218
222
|
|
|
223
|
+
function createIntegerValidator(schema: ValueModel, supervisor: RootSupervisor, name: string) {
|
|
224
|
+
let assertion;
|
|
225
|
+
if (schema.effectiveQuality.nullable) {
|
|
226
|
+
assertion = assertInt.nullable[name];
|
|
227
|
+
} else {
|
|
228
|
+
assertion = assertInt.notNullable[name];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
if (assertion === undefined) {
|
|
232
|
+
throw new InternalError(`No integer assertion implemented for integer type ${name}`);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return createSimpleValidator(schema, supervisor, assertion);
|
|
236
|
+
}
|
|
237
|
+
|
|
219
238
|
function createStructValidator(schema: Schema, supervisor: RootSupervisor): ValueSupervisor.Validate {
|
|
220
239
|
const validators = {} as Record<string, ValueSupervisor.Validate>;
|
|
221
240
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import { Bytes, isObject } from "#general";
|
|
8
8
|
import { SchemaErrorPath } from "#model";
|
|
9
|
-
import { DatatypeError, Val } from "#protocol";
|
|
9
|
+
import { DatatypeError, IntegerRangeError, Val } from "#protocol";
|
|
10
10
|
|
|
11
11
|
export function assertNumber(value: Val, path: SchemaErrorPath): asserts value is number {
|
|
12
12
|
if (Number.isFinite(value)) {
|
|
@@ -62,3 +62,56 @@ export function assertArray(value: Val, path: SchemaErrorPath): asserts value is
|
|
|
62
62
|
throw new DatatypeError(path, "an array", value);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
+
|
|
66
|
+
export const assertInt = {
|
|
67
|
+
/**
|
|
68
|
+
* Assertions for each integer type that is not nullable.
|
|
69
|
+
*/
|
|
70
|
+
notNullable: {} as Record<string, typeof assertNumeric | undefined>,
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Assertions for nullable integer types.
|
|
74
|
+
*
|
|
75
|
+
* These are separate from the "not nullable" assertions because Matter reserves a high or low value (for unsigned
|
|
76
|
+
* and signed, respectively) to indicate the field is null.
|
|
77
|
+
*/
|
|
78
|
+
nullable: {} as Record<string, typeof assertNumeric | undefined>,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
for (let i = 1n; i < 9n; i++) {
|
|
82
|
+
const intName = `int${i * 8n}`;
|
|
83
|
+
const uintName = `u${intName}`;
|
|
84
|
+
|
|
85
|
+
const numValues = 2n ** (i * 8n);
|
|
86
|
+
const unsignedMax = numValues - 1n;
|
|
87
|
+
assertInt.notNullable[uintName] = createIntAssertion(uintName, 0n, unsignedMax);
|
|
88
|
+
assertInt.nullable[uintName] = createIntAssertion(`nullable ${uintName}`, 0n, unsignedMax - 1n);
|
|
89
|
+
|
|
90
|
+
const halfNumValues = numValues / 2n;
|
|
91
|
+
const signedMax = halfNumValues - 1n;
|
|
92
|
+
const signedMin = -halfNumValues;
|
|
93
|
+
assertInt.notNullable[intName] = createIntAssertion(intName, signedMin, signedMax);
|
|
94
|
+
assertInt.nullable[intName] = createIntAssertion(`nullable ${intName}`, signedMin + 1n, signedMax);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function createIntAssertion(name: string, lowerBoundInclusive: bigint, upperBoundExclusive: bigint) {
|
|
98
|
+
if (lowerBoundInclusive < Number.MIN_SAFE_INTEGER || upperBoundExclusive > Number.MAX_SAFE_INTEGER) {
|
|
99
|
+
return createVarIntAssertion(name, lowerBoundInclusive, upperBoundExclusive);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return createVarIntAssertion(name, Number(lowerBoundInclusive), Number(upperBoundExclusive));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function createVarIntAssertion(name: string, min: bigint | number, max: bigint | number): typeof assertNumeric {
|
|
106
|
+
return function assertInt(value, path) {
|
|
107
|
+
assertNumeric(value, path);
|
|
108
|
+
|
|
109
|
+
if (value < min) {
|
|
110
|
+
throw new IntegerRangeError(path, `Value ${value} is below the ${name} minimum of ${min}`);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (value > max) {
|
|
114
|
+
throw new IntegerRangeError(path, `Value ${value} is above the ${name} maximum of ${max}`);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|