@sinclair/typebox 0.32.14 → 0.32.16
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/build/import/compiler/index.d.mts +1 -1
- package/build/import/compiler/index.mjs +1 -1
- package/build/import/errors/index.d.mts +2 -2
- package/build/import/errors/index.mjs +2 -2
- package/build/import/system/index.d.mts +2 -2
- package/build/import/system/index.mjs +2 -2
- package/build/import/system/system.d.mts +1 -1
- package/build/import/type/indexed/indexed.d.mts +1 -1
- package/build/import/type/indexed/indexed.mjs +3 -1
- package/build/import/type/template-literal/parse.mjs +24 -5
- package/build/import/type/template-literal/syntax.d.mts +1 -1
- package/build/import/value/cast/cast.mjs +2 -2
- package/build/import/value/clone/clone.mjs +2 -2
- package/build/import/value/convert/convert.mjs +2 -15
- package/build/import/value/delta/delta.d.mts +22 -22
- package/build/import/value/delta/delta.mjs +3 -3
- package/build/import/value/equal/equal.mjs +3 -3
- package/build/import/value/guard/guard.d.mts +34 -6
- package/build/import/value/guard/guard.mjs +71 -12
- package/build/import/value/hash/hash.mjs +2 -2
- package/build/import/value/index.d.mts +14 -14
- package/build/import/value/index.mjs +18 -18
- package/build/import/value/mutate/mutate.mjs +5 -5
- package/build/import/value/transform/decode.d.mts +3 -1
- package/build/import/value/transform/decode.mjs +62 -56
- package/build/import/value/transform/encode.d.mts +3 -1
- package/build/import/value/transform/encode.mjs +60 -54
- package/build/import/value/value/value.mjs +1 -1
- package/build/require/compiler/index.d.ts +1 -1
- package/build/require/compiler/index.js +16 -6
- package/build/require/errors/index.d.ts +2 -2
- package/build/require/errors/index.js +16 -10
- package/build/require/system/index.d.ts +2 -2
- package/build/require/system/index.js +16 -7
- package/build/require/system/system.d.ts +1 -1
- package/build/require/type/indexed/indexed.d.ts +1 -1
- package/build/require/type/indexed/indexed.js +3 -1
- package/build/require/type/template-literal/parse.js +24 -5
- package/build/require/type/template-literal/syntax.d.ts +1 -1
- package/build/require/value/cast/cast.js +1 -1
- package/build/require/value/clone/clone.js +1 -1
- package/build/require/value/convert/convert.js +33 -46
- package/build/require/value/delta/delta.d.ts +22 -22
- package/build/require/value/delta/delta.js +2 -2
- package/build/require/value/equal/equal.js +2 -2
- package/build/require/value/guard/guard.d.ts +34 -6
- package/build/require/value/guard/guard.js +89 -16
- package/build/require/value/hash/hash.js +1 -1
- package/build/require/value/index.d.ts +14 -14
- package/build/require/value/index.js +35 -71
- package/build/require/value/mutate/mutate.js +4 -4
- package/build/require/value/transform/decode.d.ts +3 -1
- package/build/require/value/transform/decode.js +59 -55
- package/build/require/value/transform/encode.d.ts +3 -1
- package/build/require/value/transform/encode.js +57 -53
- package/build/require/value/value/value.js +1 -1
- package/package.json +1 -1
- package/readme.md +1 -0
|
@@ -7,7 +7,7 @@ import { Check } from '../check/index.mjs';
|
|
|
7
7
|
// ------------------------------------------------------------------
|
|
8
8
|
// ValueGuard
|
|
9
9
|
// ------------------------------------------------------------------
|
|
10
|
-
import {
|
|
10
|
+
import { IsStandardObject, IsArray, IsValueType } from '../guard/index.mjs';
|
|
11
11
|
// ------------------------------------------------------------------
|
|
12
12
|
// TypeGuard
|
|
13
13
|
// ------------------------------------------------------------------
|
|
@@ -16,168 +16,174 @@ import { IsTransform, IsSchema } from '../../type/guard/type.mjs';
|
|
|
16
16
|
// Errors
|
|
17
17
|
// ------------------------------------------------------------------
|
|
18
18
|
// thrown externally
|
|
19
|
+
// prettier-ignore
|
|
19
20
|
export class TransformDecodeCheckError extends TypeBoxError {
|
|
20
21
|
schema;
|
|
21
22
|
value;
|
|
22
23
|
error;
|
|
23
24
|
constructor(schema, value, error) {
|
|
24
|
-
super(`Unable to decode
|
|
25
|
+
super(`Unable to decode value as it does not match the expected schema`);
|
|
25
26
|
this.schema = schema;
|
|
26
27
|
this.value = value;
|
|
27
28
|
this.error = error;
|
|
28
29
|
}
|
|
29
30
|
}
|
|
31
|
+
// prettier-ignore
|
|
30
32
|
export class TransformDecodeError extends TypeBoxError {
|
|
31
33
|
schema;
|
|
34
|
+
path;
|
|
32
35
|
value;
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
error;
|
|
37
|
+
constructor(schema, path, value, error) {
|
|
38
|
+
super(error instanceof Error ? error.message : 'Unknown error');
|
|
35
39
|
this.schema = schema;
|
|
40
|
+
this.path = path;
|
|
36
41
|
this.value = value;
|
|
42
|
+
this.error = error;
|
|
37
43
|
}
|
|
38
44
|
}
|
|
39
45
|
// ------------------------------------------------------------------
|
|
40
46
|
// Decode
|
|
41
47
|
// ------------------------------------------------------------------
|
|
42
48
|
// prettier-ignore
|
|
43
|
-
function Default(schema, value) {
|
|
49
|
+
function Default(schema, path, value) {
|
|
44
50
|
try {
|
|
45
51
|
return IsTransform(schema) ? schema[TransformKind].Decode(value) : value;
|
|
46
52
|
}
|
|
47
53
|
catch (error) {
|
|
48
|
-
throw new TransformDecodeError(schema, value, error);
|
|
54
|
+
throw new TransformDecodeError(schema, path, value, error);
|
|
49
55
|
}
|
|
50
56
|
}
|
|
51
57
|
// prettier-ignore
|
|
52
|
-
function FromArray(schema, references, value) {
|
|
58
|
+
function FromArray(schema, references, path, value) {
|
|
53
59
|
return (IsArray(value))
|
|
54
|
-
? Default(schema, value.map((value) => Visit(schema.items, references, value)))
|
|
55
|
-
: Default(schema, value);
|
|
60
|
+
? Default(schema, path, value.map((value, index) => Visit(schema.items, references, `${path}/${index}`, value)))
|
|
61
|
+
: Default(schema, path, value);
|
|
56
62
|
}
|
|
57
63
|
// prettier-ignore
|
|
58
|
-
function FromIntersect(schema, references, value) {
|
|
59
|
-
if (!
|
|
60
|
-
return Default(schema, value);
|
|
64
|
+
function FromIntersect(schema, references, path, value) {
|
|
65
|
+
if (!IsStandardObject(value) || IsValueType(value))
|
|
66
|
+
return Default(schema, path, value);
|
|
61
67
|
const knownKeys = KeyOfPropertyKeys(schema);
|
|
62
68
|
const knownProperties = knownKeys.reduce((value, key) => {
|
|
63
69
|
return (key in value)
|
|
64
|
-
? { ...value, [key]: Visit(Index(schema, [key]), references, value[key]) }
|
|
70
|
+
? { ...value, [key]: Visit(Index(schema, [key]), references, `${path}/${key}`, value[key]) }
|
|
65
71
|
: value;
|
|
66
72
|
}, value);
|
|
67
73
|
if (!IsTransform(schema.unevaluatedProperties)) {
|
|
68
|
-
return Default(schema, knownProperties);
|
|
74
|
+
return Default(schema, path, knownProperties);
|
|
69
75
|
}
|
|
70
76
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
71
77
|
const unevaluatedProperties = schema.unevaluatedProperties;
|
|
72
78
|
const unknownProperties = unknownKeys.reduce((value, key) => {
|
|
73
79
|
return !knownKeys.includes(key)
|
|
74
|
-
? { ...value, [key]: Default(unevaluatedProperties, value[key]) }
|
|
80
|
+
? { ...value, [key]: Default(unevaluatedProperties, `${path}/${key}`, value[key]) }
|
|
75
81
|
: value;
|
|
76
82
|
}, knownProperties);
|
|
77
|
-
return Default(schema, unknownProperties);
|
|
83
|
+
return Default(schema, path, unknownProperties);
|
|
78
84
|
}
|
|
79
|
-
function FromNot(schema, references, value) {
|
|
80
|
-
return Default(schema, Visit(schema.not, references, value));
|
|
85
|
+
function FromNot(schema, references, path, value) {
|
|
86
|
+
return Default(schema, path, Visit(schema.not, references, path, value));
|
|
81
87
|
}
|
|
82
88
|
// prettier-ignore
|
|
83
|
-
function FromObject(schema, references, value) {
|
|
84
|
-
if (!
|
|
85
|
-
return Default(schema, value);
|
|
89
|
+
function FromObject(schema, references, path, value) {
|
|
90
|
+
if (!IsStandardObject(value))
|
|
91
|
+
return Default(schema, path, value);
|
|
86
92
|
const knownKeys = KeyOfPropertyKeys(schema);
|
|
87
93
|
const knownProperties = knownKeys.reduce((value, key) => {
|
|
88
94
|
return (key in value)
|
|
89
|
-
? { ...value, [key]: Visit(schema.properties[key], references, value[key]) }
|
|
95
|
+
? { ...value, [key]: Visit(schema.properties[key], references, `${path}/${key}`, value[key]) }
|
|
90
96
|
: value;
|
|
91
97
|
}, value);
|
|
92
98
|
if (!IsSchema(schema.additionalProperties)) {
|
|
93
|
-
return Default(schema, knownProperties);
|
|
99
|
+
return Default(schema, path, knownProperties);
|
|
94
100
|
}
|
|
95
101
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
96
102
|
const additionalProperties = schema.additionalProperties;
|
|
97
103
|
const unknownProperties = unknownKeys.reduce((value, key) => {
|
|
98
104
|
return !knownKeys.includes(key)
|
|
99
|
-
? { ...value, [key]: Default(additionalProperties, value[key]) }
|
|
105
|
+
? { ...value, [key]: Default(additionalProperties, `${path}/${key}`, value[key]) }
|
|
100
106
|
: value;
|
|
101
107
|
}, knownProperties);
|
|
102
|
-
return Default(schema, unknownProperties);
|
|
108
|
+
return Default(schema, path, unknownProperties);
|
|
103
109
|
}
|
|
104
110
|
// prettier-ignore
|
|
105
|
-
function FromRecord(schema, references, value) {
|
|
106
|
-
if (!
|
|
107
|
-
return Default(schema, value);
|
|
111
|
+
function FromRecord(schema, references, path, value) {
|
|
112
|
+
if (!IsStandardObject(value))
|
|
113
|
+
return Default(schema, path, value);
|
|
108
114
|
const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0];
|
|
109
115
|
const knownKeys = new RegExp(pattern);
|
|
110
116
|
const knownProperties = Object.getOwnPropertyNames(value).reduce((value, key) => {
|
|
111
117
|
return knownKeys.test(key)
|
|
112
|
-
? { ...value, [key]: Visit(schema.patternProperties[pattern], references, value[key]) }
|
|
118
|
+
? { ...value, [key]: Visit(schema.patternProperties[pattern], references, `${path}/${key}`, value[key]) }
|
|
113
119
|
: value;
|
|
114
120
|
}, value);
|
|
115
121
|
if (!IsSchema(schema.additionalProperties)) {
|
|
116
|
-
return Default(schema, knownProperties);
|
|
122
|
+
return Default(schema, path, knownProperties);
|
|
117
123
|
}
|
|
118
124
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
119
125
|
const additionalProperties = schema.additionalProperties;
|
|
120
126
|
const unknownProperties = unknownKeys.reduce((value, key) => {
|
|
121
127
|
return !knownKeys.test(key)
|
|
122
|
-
? { ...value, [key]: Default(additionalProperties, value[key]) }
|
|
128
|
+
? { ...value, [key]: Default(additionalProperties, `${path}/${key}`, value[key]) }
|
|
123
129
|
: value;
|
|
124
130
|
}, knownProperties);
|
|
125
|
-
return Default(schema, unknownProperties);
|
|
131
|
+
return Default(schema, path, unknownProperties);
|
|
126
132
|
}
|
|
127
133
|
// prettier-ignore
|
|
128
|
-
function FromRef(schema, references, value) {
|
|
134
|
+
function FromRef(schema, references, path, value) {
|
|
129
135
|
const target = Deref(schema, references);
|
|
130
|
-
return Default(schema, Visit(target, references, value));
|
|
136
|
+
return Default(schema, path, Visit(target, references, path, value));
|
|
131
137
|
}
|
|
132
138
|
// prettier-ignore
|
|
133
|
-
function FromThis(schema, references, value) {
|
|
139
|
+
function FromThis(schema, references, path, value) {
|
|
134
140
|
const target = Deref(schema, references);
|
|
135
|
-
return Default(schema, Visit(target, references, value));
|
|
141
|
+
return Default(schema, path, Visit(target, references, path, value));
|
|
136
142
|
}
|
|
137
143
|
// prettier-ignore
|
|
138
|
-
function FromTuple(schema, references, value) {
|
|
144
|
+
function FromTuple(schema, references, path, value) {
|
|
139
145
|
return (IsArray(value) && IsArray(schema.items))
|
|
140
|
-
? Default(schema, schema.items.map((schema, index) => Visit(schema, references, value[index])))
|
|
141
|
-
: Default(schema, value);
|
|
146
|
+
? Default(schema, path, schema.items.map((schema, index) => Visit(schema, references, `${path}/${index}`, value[index])))
|
|
147
|
+
: Default(schema, path, value);
|
|
142
148
|
}
|
|
143
149
|
// prettier-ignore
|
|
144
|
-
function FromUnion(schema, references, value) {
|
|
150
|
+
function FromUnion(schema, references, path, value) {
|
|
145
151
|
for (const subschema of schema.anyOf) {
|
|
146
152
|
if (!Check(subschema, references, value))
|
|
147
153
|
continue;
|
|
148
154
|
// note: ensure interior is decoded first
|
|
149
|
-
const decoded = Visit(subschema, references, value);
|
|
150
|
-
return Default(schema, decoded);
|
|
155
|
+
const decoded = Visit(subschema, references, path, value);
|
|
156
|
+
return Default(schema, path, decoded);
|
|
151
157
|
}
|
|
152
|
-
return Default(schema, value);
|
|
158
|
+
return Default(schema, path, value);
|
|
153
159
|
}
|
|
154
160
|
// prettier-ignore
|
|
155
|
-
function Visit(schema, references, value) {
|
|
161
|
+
function Visit(schema, references, path, value) {
|
|
156
162
|
const references_ = typeof schema.$id === 'string' ? [...references, schema] : references;
|
|
157
163
|
const schema_ = schema;
|
|
158
164
|
switch (schema[Kind]) {
|
|
159
165
|
case 'Array':
|
|
160
|
-
return FromArray(schema_, references_, value);
|
|
166
|
+
return FromArray(schema_, references_, path, value);
|
|
161
167
|
case 'Intersect':
|
|
162
|
-
return FromIntersect(schema_, references_, value);
|
|
168
|
+
return FromIntersect(schema_, references_, path, value);
|
|
163
169
|
case 'Not':
|
|
164
|
-
return FromNot(schema_, references_, value);
|
|
170
|
+
return FromNot(schema_, references_, path, value);
|
|
165
171
|
case 'Object':
|
|
166
|
-
return FromObject(schema_, references_, value);
|
|
172
|
+
return FromObject(schema_, references_, path, value);
|
|
167
173
|
case 'Record':
|
|
168
|
-
return FromRecord(schema_, references_, value);
|
|
174
|
+
return FromRecord(schema_, references_, path, value);
|
|
169
175
|
case 'Ref':
|
|
170
|
-
return FromRef(schema_, references_, value);
|
|
176
|
+
return FromRef(schema_, references_, path, value);
|
|
171
177
|
case 'Symbol':
|
|
172
|
-
return Default(schema_, value);
|
|
178
|
+
return Default(schema_, path, value);
|
|
173
179
|
case 'This':
|
|
174
|
-
return FromThis(schema_, references_, value);
|
|
180
|
+
return FromThis(schema_, references_, path, value);
|
|
175
181
|
case 'Tuple':
|
|
176
|
-
return FromTuple(schema_, references_, value);
|
|
182
|
+
return FromTuple(schema_, references_, path, value);
|
|
177
183
|
case 'Union':
|
|
178
|
-
return FromUnion(schema_, references_, value);
|
|
184
|
+
return FromUnion(schema_, references_, path, value);
|
|
179
185
|
default:
|
|
180
|
-
return Default(schema_, value);
|
|
186
|
+
return Default(schema_, path, value);
|
|
181
187
|
}
|
|
182
188
|
}
|
|
183
189
|
/**
|
|
@@ -186,5 +192,5 @@ function Visit(schema, references, value) {
|
|
|
186
192
|
* undefined behavior. Refer to the `Value.Decode()` for implementation details.
|
|
187
193
|
*/
|
|
188
194
|
export function TransformDecode(schema, references, value) {
|
|
189
|
-
return Visit(schema, references, value);
|
|
195
|
+
return Visit(schema, references, '', value);
|
|
190
196
|
}
|
|
@@ -9,8 +9,10 @@ export declare class TransformEncodeCheckError extends TypeBoxError {
|
|
|
9
9
|
}
|
|
10
10
|
export declare class TransformEncodeError extends TypeBoxError {
|
|
11
11
|
readonly schema: TSchema;
|
|
12
|
+
readonly path: string;
|
|
12
13
|
readonly value: unknown;
|
|
13
|
-
|
|
14
|
+
readonly error: Error;
|
|
15
|
+
constructor(schema: TSchema, path: string, value: unknown, error: Error);
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* `[Internal]` Encodes the value and returns the result. This function expects the
|
|
@@ -7,7 +7,7 @@ import { Check } from '../check/index.mjs';
|
|
|
7
7
|
// ------------------------------------------------------------------
|
|
8
8
|
// ValueGuard
|
|
9
9
|
// ------------------------------------------------------------------
|
|
10
|
-
import {
|
|
10
|
+
import { IsStandardObject, IsArray, IsValueType } from '../guard/index.mjs';
|
|
11
11
|
// ------------------------------------------------------------------
|
|
12
12
|
// TypeGuard
|
|
13
13
|
// ------------------------------------------------------------------
|
|
@@ -15,80 +15,86 @@ import { IsTransform, IsSchema } from '../../type/guard/type.mjs';
|
|
|
15
15
|
// ------------------------------------------------------------------
|
|
16
16
|
// Errors
|
|
17
17
|
// ------------------------------------------------------------------
|
|
18
|
+
// prettier-ignore
|
|
18
19
|
export class TransformEncodeCheckError extends TypeBoxError {
|
|
19
20
|
schema;
|
|
20
21
|
value;
|
|
21
22
|
error;
|
|
22
23
|
constructor(schema, value, error) {
|
|
23
|
-
super(`
|
|
24
|
+
super(`The encoded value does not match the expected schema`);
|
|
24
25
|
this.schema = schema;
|
|
25
26
|
this.value = value;
|
|
26
27
|
this.error = error;
|
|
27
28
|
}
|
|
28
29
|
}
|
|
30
|
+
// prettier-ignore
|
|
29
31
|
export class TransformEncodeError extends TypeBoxError {
|
|
30
32
|
schema;
|
|
33
|
+
path;
|
|
31
34
|
value;
|
|
32
|
-
|
|
35
|
+
error;
|
|
36
|
+
constructor(schema, path, value, error) {
|
|
33
37
|
super(`${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
34
38
|
this.schema = schema;
|
|
39
|
+
this.path = path;
|
|
35
40
|
this.value = value;
|
|
41
|
+
this.error = error;
|
|
36
42
|
}
|
|
37
43
|
}
|
|
38
44
|
// ------------------------------------------------------------------
|
|
39
45
|
// Encode
|
|
40
46
|
// ------------------------------------------------------------------
|
|
41
47
|
// prettier-ignore
|
|
42
|
-
function Default(schema, value) {
|
|
48
|
+
function Default(schema, path, value) {
|
|
43
49
|
try {
|
|
44
50
|
return IsTransform(schema) ? schema[TransformKind].Encode(value) : value;
|
|
45
51
|
}
|
|
46
52
|
catch (error) {
|
|
47
|
-
throw new TransformEncodeError(schema, value, error);
|
|
53
|
+
throw new TransformEncodeError(schema, path, value, error);
|
|
48
54
|
}
|
|
49
55
|
}
|
|
50
56
|
// prettier-ignore
|
|
51
|
-
function FromArray(schema, references, value) {
|
|
52
|
-
const defaulted = Default(schema, value);
|
|
57
|
+
function FromArray(schema, references, path, value) {
|
|
58
|
+
const defaulted = Default(schema, path, value);
|
|
53
59
|
return IsArray(defaulted)
|
|
54
|
-
? defaulted.map((value) => Visit(schema.items, references, value))
|
|
60
|
+
? defaulted.map((value, index) => Visit(schema.items, references, `${path}/${index}`, value))
|
|
55
61
|
: defaulted;
|
|
56
62
|
}
|
|
57
63
|
// prettier-ignore
|
|
58
|
-
function FromIntersect(schema, references, value) {
|
|
59
|
-
const defaulted = Default(schema, value);
|
|
60
|
-
if (!
|
|
64
|
+
function FromIntersect(schema, references, path, value) {
|
|
65
|
+
const defaulted = Default(schema, path, value);
|
|
66
|
+
if (!IsStandardObject(value) || IsValueType(value))
|
|
61
67
|
return defaulted;
|
|
62
68
|
const knownKeys = KeyOfPropertyKeys(schema);
|
|
63
69
|
const knownProperties = knownKeys.reduce((value, key) => {
|
|
64
70
|
return key in defaulted
|
|
65
|
-
? { ...value, [key]: Visit(Index(schema, [key]), references, value[key]) }
|
|
71
|
+
? { ...value, [key]: Visit(Index(schema, [key]), references, `${path}/${key}`, value[key]) }
|
|
66
72
|
: value;
|
|
67
73
|
}, defaulted);
|
|
68
74
|
if (!IsTransform(schema.unevaluatedProperties)) {
|
|
69
|
-
return Default(schema, knownProperties);
|
|
75
|
+
return Default(schema, path, knownProperties);
|
|
70
76
|
}
|
|
71
77
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
72
78
|
const unevaluatedProperties = schema.unevaluatedProperties;
|
|
73
79
|
return unknownKeys.reduce((value, key) => {
|
|
74
80
|
return !knownKeys.includes(key)
|
|
75
|
-
? { ...value, [key]: Default(unevaluatedProperties, value[key]) }
|
|
81
|
+
? { ...value, [key]: Default(unevaluatedProperties, `${path}/${key}`, value[key]) }
|
|
76
82
|
: value;
|
|
77
83
|
}, knownProperties);
|
|
78
84
|
}
|
|
79
85
|
// prettier-ignore
|
|
80
|
-
function FromNot(schema, references, value) {
|
|
81
|
-
return Default(schema.not, Default(schema, value));
|
|
86
|
+
function FromNot(schema, references, path, value) {
|
|
87
|
+
return Default(schema.not, path, Default(schema, path, value));
|
|
82
88
|
}
|
|
83
89
|
// prettier-ignore
|
|
84
|
-
function FromObject(schema, references, value) {
|
|
85
|
-
const defaulted = Default(schema, value);
|
|
86
|
-
if (!
|
|
90
|
+
function FromObject(schema, references, path, value) {
|
|
91
|
+
const defaulted = Default(schema, path, value);
|
|
92
|
+
if (!IsStandardObject(value))
|
|
87
93
|
return defaulted;
|
|
88
94
|
const knownKeys = KeyOfPropertyKeys(schema);
|
|
89
95
|
const knownProperties = knownKeys.reduce((value, key) => {
|
|
90
96
|
return key in value
|
|
91
|
-
? { ...value, [key]: Visit(schema.properties[key], references, value[key]) }
|
|
97
|
+
? { ...value, [key]: Visit(schema.properties[key], references, `${path}/${key}`, value[key]) }
|
|
92
98
|
: value;
|
|
93
99
|
}, defaulted);
|
|
94
100
|
if (!IsSchema(schema.additionalProperties)) {
|
|
@@ -98,93 +104,93 @@ function FromObject(schema, references, value) {
|
|
|
98
104
|
const additionalProperties = schema.additionalProperties;
|
|
99
105
|
return unknownKeys.reduce((value, key) => {
|
|
100
106
|
return !knownKeys.includes(key)
|
|
101
|
-
? { ...value, [key]: Default(additionalProperties, value[key]) }
|
|
107
|
+
? { ...value, [key]: Default(additionalProperties, `${path}/${key}`, value[key]) }
|
|
102
108
|
: value;
|
|
103
109
|
}, knownProperties);
|
|
104
110
|
}
|
|
105
111
|
// prettier-ignore
|
|
106
|
-
function FromRecord(schema, references, value) {
|
|
107
|
-
const defaulted = Default(schema, value);
|
|
108
|
-
if (!
|
|
112
|
+
function FromRecord(schema, references, path, value) {
|
|
113
|
+
const defaulted = Default(schema, path, value);
|
|
114
|
+
if (!IsStandardObject(value))
|
|
109
115
|
return defaulted;
|
|
110
116
|
const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0];
|
|
111
117
|
const knownKeys = new RegExp(pattern);
|
|
112
118
|
const knownProperties = Object.getOwnPropertyNames(value).reduce((value, key) => {
|
|
113
119
|
return knownKeys.test(key)
|
|
114
|
-
? { ...value, [key]: Visit(schema.patternProperties[pattern], references, value[key]) }
|
|
120
|
+
? { ...value, [key]: Visit(schema.patternProperties[pattern], references, `${path}/${key}`, value[key]) }
|
|
115
121
|
: value;
|
|
116
122
|
}, defaulted);
|
|
117
123
|
if (!IsSchema(schema.additionalProperties)) {
|
|
118
|
-
return Default(schema, knownProperties);
|
|
124
|
+
return Default(schema, path, knownProperties);
|
|
119
125
|
}
|
|
120
126
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
121
127
|
const additionalProperties = schema.additionalProperties;
|
|
122
128
|
return unknownKeys.reduce((value, key) => {
|
|
123
129
|
return !knownKeys.test(key)
|
|
124
|
-
? { ...value, [key]: Default(additionalProperties, value[key]) }
|
|
130
|
+
? { ...value, [key]: Default(additionalProperties, `${path}/${key}`, value[key]) }
|
|
125
131
|
: value;
|
|
126
132
|
}, knownProperties);
|
|
127
133
|
}
|
|
128
134
|
// prettier-ignore
|
|
129
|
-
function FromRef(schema, references, value) {
|
|
135
|
+
function FromRef(schema, references, path, value) {
|
|
130
136
|
const target = Deref(schema, references);
|
|
131
|
-
const resolved = Visit(target, references, value);
|
|
132
|
-
return Default(schema, resolved);
|
|
137
|
+
const resolved = Visit(target, references, path, value);
|
|
138
|
+
return Default(schema, path, resolved);
|
|
133
139
|
}
|
|
134
140
|
// prettier-ignore
|
|
135
|
-
function FromThis(schema, references, value) {
|
|
141
|
+
function FromThis(schema, references, path, value) {
|
|
136
142
|
const target = Deref(schema, references);
|
|
137
|
-
const resolved = Visit(target, references, value);
|
|
138
|
-
return Default(schema, resolved);
|
|
143
|
+
const resolved = Visit(target, references, path, value);
|
|
144
|
+
return Default(schema, path, resolved);
|
|
139
145
|
}
|
|
140
146
|
// prettier-ignore
|
|
141
|
-
function FromTuple(schema, references, value) {
|
|
142
|
-
const value1 = Default(schema, value);
|
|
143
|
-
return IsArray(schema.items) ? schema.items.map((schema, index) => Visit(schema, references, value1[index])) : [];
|
|
147
|
+
function FromTuple(schema, references, path, value) {
|
|
148
|
+
const value1 = Default(schema, path, value);
|
|
149
|
+
return IsArray(schema.items) ? schema.items.map((schema, index) => Visit(schema, references, `${path}/${index}`, value1[index])) : [];
|
|
144
150
|
}
|
|
145
151
|
// prettier-ignore
|
|
146
|
-
function FromUnion(schema, references, value) {
|
|
152
|
+
function FromUnion(schema, references, path, value) {
|
|
147
153
|
// test value against union variants
|
|
148
154
|
for (const subschema of schema.anyOf) {
|
|
149
155
|
if (!Check(subschema, references, value))
|
|
150
156
|
continue;
|
|
151
|
-
const value1 = Visit(subschema, references, value);
|
|
152
|
-
return Default(schema, value1);
|
|
157
|
+
const value1 = Visit(subschema, references, path, value);
|
|
158
|
+
return Default(schema, path, value1);
|
|
153
159
|
}
|
|
154
160
|
// test transformed value against union variants
|
|
155
161
|
for (const subschema of schema.anyOf) {
|
|
156
|
-
const value1 = Visit(subschema, references, value);
|
|
162
|
+
const value1 = Visit(subschema, references, path, value);
|
|
157
163
|
if (!Check(schema, references, value1))
|
|
158
164
|
continue;
|
|
159
|
-
return Default(schema, value1);
|
|
165
|
+
return Default(schema, path, value1);
|
|
160
166
|
}
|
|
161
|
-
return Default(schema, value);
|
|
167
|
+
return Default(schema, path, value);
|
|
162
168
|
}
|
|
163
169
|
// prettier-ignore
|
|
164
|
-
function Visit(schema, references, value) {
|
|
170
|
+
function Visit(schema, references, path, value) {
|
|
165
171
|
const references_ = typeof schema.$id === 'string' ? [...references, schema] : references;
|
|
166
172
|
const schema_ = schema;
|
|
167
173
|
switch (schema[Kind]) {
|
|
168
174
|
case 'Array':
|
|
169
|
-
return FromArray(schema_, references_, value);
|
|
175
|
+
return FromArray(schema_, references_, path, value);
|
|
170
176
|
case 'Intersect':
|
|
171
|
-
return FromIntersect(schema_, references_, value);
|
|
177
|
+
return FromIntersect(schema_, references_, path, value);
|
|
172
178
|
case 'Not':
|
|
173
|
-
return FromNot(schema_, references_, value);
|
|
179
|
+
return FromNot(schema_, references_, path, value);
|
|
174
180
|
case 'Object':
|
|
175
|
-
return FromObject(schema_, references_, value);
|
|
181
|
+
return FromObject(schema_, references_, path, value);
|
|
176
182
|
case 'Record':
|
|
177
|
-
return FromRecord(schema_, references_, value);
|
|
183
|
+
return FromRecord(schema_, references_, path, value);
|
|
178
184
|
case 'Ref':
|
|
179
|
-
return FromRef(schema_, references_, value);
|
|
185
|
+
return FromRef(schema_, references_, path, value);
|
|
180
186
|
case 'This':
|
|
181
|
-
return FromThis(schema_, references_, value);
|
|
187
|
+
return FromThis(schema_, references_, path, value);
|
|
182
188
|
case 'Tuple':
|
|
183
|
-
return FromTuple(schema_, references_, value);
|
|
189
|
+
return FromTuple(schema_, references_, path, value);
|
|
184
190
|
case 'Union':
|
|
185
|
-
return FromUnion(schema_, references_, value);
|
|
191
|
+
return FromUnion(schema_, references_, path, value);
|
|
186
192
|
default:
|
|
187
|
-
return Default(schema_, value);
|
|
193
|
+
return Default(schema_, path, value);
|
|
188
194
|
}
|
|
189
195
|
}
|
|
190
196
|
/**
|
|
@@ -194,5 +200,5 @@ function Visit(schema, references, value) {
|
|
|
194
200
|
* `Value.Encode()` function for implementation details.
|
|
195
201
|
*/
|
|
196
202
|
export function TransformEncode(schema, references, value) {
|
|
197
|
-
return Visit(schema, references, value);
|
|
203
|
+
return Visit(schema, references, '', value);
|
|
198
204
|
}
|
|
@@ -51,7 +51,7 @@ export function Encode(...args) {
|
|
|
51
51
|
const [schema, references, value] = args.length === 3 ? [args[0], args[1], args[2]] : [args[0], [], args[1]];
|
|
52
52
|
const encoded = TransformEncode(schema, references, value);
|
|
53
53
|
if (!Check(schema, references, encoded))
|
|
54
|
-
throw new TransformEncodeCheckError(schema,
|
|
54
|
+
throw new TransformEncodeCheckError(schema, encoded, Errors(schema, references, encoded).First());
|
|
55
55
|
return encoded;
|
|
56
56
|
}
|
|
57
57
|
/** Returns an iterator for each error in this value. */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { ValueError, ValueErrorType, ValueErrorIterator } from '../errors/index';
|
|
2
|
-
export
|
|
2
|
+
export * from './compiler';
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
3
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
18
|
+
exports.ValueErrorIterator = exports.ValueErrorType = void 0;
|
|
5
19
|
var index_1 = require("../errors/index");
|
|
6
20
|
Object.defineProperty(exports, "ValueErrorType", { enumerable: true, get: function () { return index_1.ValueErrorType; } });
|
|
7
21
|
Object.defineProperty(exports, "ValueErrorIterator", { enumerable: true, get: function () { return index_1.ValueErrorIterator; } });
|
|
8
|
-
|
|
9
|
-
Object.defineProperty(exports, "TypeCompiler", { enumerable: true, get: function () { return compiler_1.TypeCompiler; } });
|
|
10
|
-
Object.defineProperty(exports, "TypeCheck", { enumerable: true, get: function () { return compiler_1.TypeCheck; } });
|
|
11
|
-
Object.defineProperty(exports, "TypeCompilerTypeGuardError", { enumerable: true, get: function () { return compiler_1.TypeCompilerTypeGuardError; } });
|
|
12
|
-
Object.defineProperty(exports, "TypeCompilerUnknownTypeError", { enumerable: true, get: function () { return compiler_1.TypeCompilerUnknownTypeError; } });
|
|
22
|
+
__exportStar(require("./compiler"), exports);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export * from './errors';
|
|
2
|
+
export * from './function';
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
3
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Object.defineProperty(exports, "Errors", { enumerable: true, get: function () { return errors_1.Errors; } });
|
|
7
|
-
Object.defineProperty(exports, "ValueErrorIterator", { enumerable: true, get: function () { return errors_1.ValueErrorIterator; } });
|
|
8
|
-
Object.defineProperty(exports, "ValueErrorType", { enumerable: true, get: function () { return errors_1.ValueErrorType; } });
|
|
9
|
-
Object.defineProperty(exports, "ValueErrorsUnknownTypeError", { enumerable: true, get: function () { return errors_1.ValueErrorsUnknownTypeError; } });
|
|
10
|
-
var function_1 = require("./function");
|
|
11
|
-
Object.defineProperty(exports, "DefaultErrorFunction", { enumerable: true, get: function () { return function_1.DefaultErrorFunction; } });
|
|
12
|
-
Object.defineProperty(exports, "GetErrorFunction", { enumerable: true, get: function () { return function_1.GetErrorFunction; } });
|
|
13
|
-
Object.defineProperty(exports, "SetErrorFunction", { enumerable: true, get: function () { return function_1.SetErrorFunction; } });
|
|
18
|
+
__exportStar(require("./errors"), exports);
|
|
19
|
+
__exportStar(require("./function"), exports);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export * from './policy';
|
|
2
|
+
export * from './system';
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
3
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Object.defineProperty(exports, "TypeSystemPolicy", { enumerable: true, get: function () { return policy_1.TypeSystemPolicy; } });
|
|
7
|
-
var system_1 = require("./system");
|
|
8
|
-
Object.defineProperty(exports, "TypeSystem", { enumerable: true, get: function () { return system_1.TypeSystem; } });
|
|
9
|
-
Object.defineProperty(exports, "TypeSystemDuplicateFormat", { enumerable: true, get: function () { return system_1.TypeSystemDuplicateFormat; } });
|
|
10
|
-
Object.defineProperty(exports, "TypeSystemDuplicateTypeKind", { enumerable: true, get: function () { return system_1.TypeSystemDuplicateTypeKind; } });
|
|
18
|
+
__exportStar(require("./policy"), exports);
|
|
19
|
+
__exportStar(require("./system"), exports);
|
|
@@ -8,7 +8,7 @@ export declare class TypeSystemDuplicateFormat extends TypeBoxError {
|
|
|
8
8
|
/** Creates user defined types and formats and provides overrides for value checking behaviours */
|
|
9
9
|
export declare namespace TypeSystem {
|
|
10
10
|
/** Creates a new type */
|
|
11
|
-
function Type<Type, Options = Record<PropertyKey, unknown>>(kind: string, check: (options: Options, value: unknown) => boolean): (options?: Partial<Options>) => import("
|
|
11
|
+
function Type<Type, Options = Record<PropertyKey, unknown>>(kind: string, check: (options: Options, value: unknown) => boolean): (options?: Partial<Options>) => import("src/type/unsafe/unsafe").TUnsafe<Type>;
|
|
12
12
|
/** Creates a new string format */
|
|
13
13
|
function Format<F extends string>(format: F, check: (value: string) => boolean): F;
|
|
14
14
|
}
|
|
@@ -16,7 +16,7 @@ import { type TIndexFromMappedResult } from './indexed-from-mapped-result';
|
|
|
16
16
|
type TFromRest<T extends TSchema[], K extends PropertyKey, Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromRest<R, K, [...Acc, Assert<TIndexFromPropertyKey<L, K>, TSchema>]> : Acc);
|
|
17
17
|
type TFromIntersectRest<T extends TSchema[], Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? L extends TNever ? TFromIntersectRest<R, [...Acc]> : TFromIntersectRest<R, [...Acc, L]> : Acc);
|
|
18
18
|
type TFromIntersect<T extends TSchema[], K extends PropertyKey> = (TIntersectEvaluated<TFromIntersectRest<TFromRest<T, K>>>);
|
|
19
|
-
type TFromUnionRest<T extends TSchema[]> = T;
|
|
19
|
+
type TFromUnionRest<T extends TSchema[], Acc extends TSchema[] = []> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? L extends TNever ? [] : TFromUnionRest<R, [L, ...Acc]> : Acc;
|
|
20
20
|
type TFromUnion<T extends TSchema[], K extends PropertyKey> = (TUnionEvaluated<TFromUnionRest<TFromRest<T, K>>>);
|
|
21
21
|
type TFromTuple<T extends TSchema[], K extends PropertyKey> = (K extends keyof T ? T[K] : K extends '[number]' ? TUnionEvaluated<T> : TNever);
|
|
22
22
|
type TFromArray<T extends TSchema, K extends PropertyKey> = (K extends '[number]' ? T : TNever);
|