@sinclair/typebox 0.32.0-dev-18 → 0.32.0-dev-19
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/compiler.mjs +14 -8
- package/build/import/errors/errors.mjs +15 -11
- package/build/import/type/awaited/awaited.mjs +4 -4
- package/build/import/type/deref/deref.mjs +12 -12
- package/build/import/type/exclude/exclude.mjs +8 -5
- package/build/import/type/extends/extends-check.mjs +167 -167
- package/build/import/type/extends/extends.mjs +3 -3
- package/build/import/type/extract/extract.mjs +5 -5
- package/build/import/type/guard/type.d.mts +50 -50
- package/build/import/type/guard/type.mjs +136 -136
- package/build/import/type/indexed/indexed-property-keys.mjs +7 -7
- package/build/import/type/indexed/indexed.mjs +9 -9
- package/build/import/type/intersect/intersect-create.mjs +4 -4
- package/build/import/type/intersect/intersect-evaluated.mjs +1 -1
- package/build/import/type/intersect/intersect.mjs +2 -2
- package/build/import/type/intrinsic/intrinsic.mjs +5 -5
- package/build/import/type/keyof/keyof-property-keys.mjs +7 -7
- package/build/import/type/keyof/keyof.mjs +2 -2
- package/build/import/type/mapped/mapped.mjs +16 -16
- package/build/import/type/modifiers/modifiers.mjs +3 -3
- package/build/import/type/object/object.mjs +3 -3
- package/build/import/type/omit/omit.mjs +6 -6
- package/build/import/type/partial/partial.mjs +5 -5
- package/build/import/type/pick/pick.mjs +6 -6
- package/build/import/type/record/record.mjs +7 -7
- package/build/import/type/required/required.mjs +5 -5
- package/build/import/type/rest/rest.mjs +6 -2
- package/build/import/type/template-literal/pattern.mjs +9 -9
- package/build/import/type/transform/transform.mjs +1 -1
- package/build/import/type/union/union-evaluated.mjs +2 -2
- package/build/import/value/check/check.mjs +18 -11
- package/build/import/value/clean/clean.mjs +9 -7
- package/build/import/value/clone/clone.mjs +7 -4
- package/build/import/value/convert/convert.mjs +6 -2
- package/build/import/value/default/default.mjs +12 -4
- package/build/import/value/transform/decode.mjs +12 -6
- package/build/import/value/transform/encode.mjs +12 -6
- package/build/import/value/transform/has.mjs +24 -18
- package/build/require/compiler/compiler.js +77 -71
- package/build/require/errors/errors.js +58 -54
- package/build/require/type/awaited/awaited.js +3 -3
- package/build/require/type/deref/deref.js +11 -11
- package/build/require/type/exclude/exclude.js +7 -4
- package/build/require/type/extends/extends-check.js +167 -167
- package/build/require/type/extends/extends.js +2 -2
- package/build/require/type/extract/extract.js +4 -4
- package/build/require/type/guard/type.d.ts +50 -50
- package/build/require/type/guard/type.js +184 -184
- package/build/require/type/indexed/indexed-property-keys.js +6 -6
- package/build/require/type/indexed/indexed.js +9 -9
- package/build/require/type/intersect/intersect-create.js +3 -3
- package/build/require/type/intersect/intersect-evaluated.js +2 -2
- package/build/require/type/intersect/intersect.js +1 -1
- package/build/require/type/intrinsic/intrinsic.js +4 -4
- package/build/require/type/keyof/keyof-property-keys.js +6 -6
- package/build/require/type/keyof/keyof.js +1 -1
- package/build/require/type/mapped/mapped.js +15 -15
- package/build/require/type/modifiers/modifiers.js +2 -2
- package/build/require/type/object/object.js +2 -2
- package/build/require/type/omit/omit.js +5 -5
- package/build/require/type/partial/partial.js +4 -4
- package/build/require/type/pick/pick.js +5 -5
- package/build/require/type/record/record.js +6 -6
- package/build/require/type/required/required.js +4 -4
- package/build/require/type/rest/rest.js +5 -1
- package/build/require/type/template-literal/pattern.js +8 -8
- package/build/require/type/transform/transform.js +1 -1
- package/build/require/type/union/union-evaluated.js +1 -1
- package/build/require/value/check/check.js +63 -56
- package/build/require/value/clean/clean.js +31 -29
- package/build/require/value/clone/clone.js +7 -4
- package/build/require/value/convert/convert.js +42 -38
- package/build/require/value/default/default.js +24 -16
- package/build/require/value/transform/decode.js +27 -21
- package/build/require/value/transform/encode.js +28 -22
- package/build/require/value/transform/has.js +29 -23
- package/package.json +1 -1
- package/readme.md +5 -5
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.Convert = exports.ValueConvertUnknownTypeError = void 0;
|
|
5
|
-
const index_1 = require("../
|
|
6
|
-
const index_2 = require("../
|
|
7
|
-
const index_3 = require("../
|
|
8
|
-
const index_4 = require("../deref/index");
|
|
5
|
+
const index_1 = require("../clone/index");
|
|
6
|
+
const index_2 = require("../check/index");
|
|
7
|
+
const index_3 = require("../deref/index");
|
|
9
8
|
const type_1 = require("../../type/guard/type");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
9
|
+
const index_4 = require("../../type/symbols/index");
|
|
10
|
+
const index_5 = require("../../type/composite/index");
|
|
11
|
+
// ------------------------------------------------------------------
|
|
12
|
+
// ValueGuard
|
|
13
|
+
// ------------------------------------------------------------------
|
|
14
|
+
// prettier-ignore
|
|
15
|
+
const index_6 = require("../guard/index");
|
|
12
16
|
// ------------------------------------------------------------------
|
|
13
17
|
// Errors
|
|
14
18
|
// ------------------------------------------------------------------
|
|
@@ -23,31 +27,31 @@ exports.ValueConvertUnknownTypeError = ValueConvertUnknownTypeError;
|
|
|
23
27
|
// Conversions
|
|
24
28
|
// ------------------------------------------------------------------
|
|
25
29
|
function IsStringNumeric(value) {
|
|
26
|
-
return (0,
|
|
30
|
+
return (0, index_6.IsString)(value) && !isNaN(value) && !isNaN(parseFloat(value));
|
|
27
31
|
}
|
|
28
32
|
function IsValueToString(value) {
|
|
29
|
-
return (0,
|
|
33
|
+
return (0, index_6.IsBigInt)(value) || (0, index_6.IsBoolean)(value) || (0, index_6.IsNumber)(value);
|
|
30
34
|
}
|
|
31
35
|
function IsValueTrue(value) {
|
|
32
|
-
return value === true || ((0,
|
|
36
|
+
return value === true || ((0, index_6.IsNumber)(value) && value === 1) || ((0, index_6.IsBigInt)(value) && value === BigInt('1')) || ((0, index_6.IsString)(value) && (value.toLowerCase() === 'true' || value === '1'));
|
|
33
37
|
}
|
|
34
38
|
function IsValueFalse(value) {
|
|
35
|
-
return value === false || ((0,
|
|
39
|
+
return value === false || ((0, index_6.IsNumber)(value) && (value === 0 || Object.is(value, -0))) || ((0, index_6.IsBigInt)(value) && value === BigInt('0')) || ((0, index_6.IsString)(value) && (value.toLowerCase() === 'false' || value === '0' || value === '-0'));
|
|
36
40
|
}
|
|
37
41
|
function IsTimeStringWithTimeZone(value) {
|
|
38
|
-
return (0,
|
|
42
|
+
return (0, index_6.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
|
|
39
43
|
}
|
|
40
44
|
function IsTimeStringWithoutTimeZone(value) {
|
|
41
|
-
return (0,
|
|
45
|
+
return (0, index_6.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
|
|
42
46
|
}
|
|
43
47
|
function IsDateTimeStringWithTimeZone(value) {
|
|
44
|
-
return (0,
|
|
48
|
+
return (0, index_6.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
|
|
45
49
|
}
|
|
46
50
|
function IsDateTimeStringWithoutTimeZone(value) {
|
|
47
|
-
return (0,
|
|
51
|
+
return (0, index_6.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
|
|
48
52
|
}
|
|
49
53
|
function IsDateString(value) {
|
|
50
|
-
return (0,
|
|
54
|
+
return (0, index_6.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value);
|
|
51
55
|
}
|
|
52
56
|
// ------------------------------------------------------------------
|
|
53
57
|
// Convert
|
|
@@ -66,31 +70,31 @@ function TryConvertLiteralBoolean(value, target) {
|
|
|
66
70
|
}
|
|
67
71
|
// prettier-ignore
|
|
68
72
|
function TryConvertLiteral(schema, value) {
|
|
69
|
-
return ((0,
|
|
70
|
-
(0,
|
|
71
|
-
(0,
|
|
72
|
-
(0,
|
|
73
|
+
return ((0, index_6.IsString)(schema.const) ? TryConvertLiteralString(value, schema.const) :
|
|
74
|
+
(0, index_6.IsNumber)(schema.const) ? TryConvertLiteralNumber(value, schema.const) :
|
|
75
|
+
(0, index_6.IsBoolean)(schema.const) ? TryConvertLiteralBoolean(value, schema.const) :
|
|
76
|
+
(0, index_1.Clone)(value));
|
|
73
77
|
}
|
|
74
78
|
function TryConvertBoolean(value) {
|
|
75
79
|
return IsValueTrue(value) ? true : IsValueFalse(value) ? false : value;
|
|
76
80
|
}
|
|
77
81
|
function TryConvertBigInt(value) {
|
|
78
|
-
return IsStringNumeric(value) ? BigInt(parseInt(value)) : (0,
|
|
82
|
+
return IsStringNumeric(value) ? BigInt(parseInt(value)) : (0, index_6.IsNumber)(value) ? BigInt(value | 0) : IsValueFalse(value) ? BigInt(0) : IsValueTrue(value) ? BigInt(1) : value;
|
|
79
83
|
}
|
|
80
84
|
function TryConvertString(value) {
|
|
81
|
-
return IsValueToString(value) ? value.toString() : (0,
|
|
85
|
+
return IsValueToString(value) ? value.toString() : (0, index_6.IsSymbol)(value) && value.description !== undefined ? value.description.toString() : value;
|
|
82
86
|
}
|
|
83
87
|
function TryConvertNumber(value) {
|
|
84
88
|
return IsStringNumeric(value) ? parseFloat(value) : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
|
|
85
89
|
}
|
|
86
90
|
function TryConvertInteger(value) {
|
|
87
|
-
return IsStringNumeric(value) ? parseInt(value) : (0,
|
|
91
|
+
return IsStringNumeric(value) ? parseInt(value) : (0, index_6.IsNumber)(value) ? value | 0 : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
|
|
88
92
|
}
|
|
89
93
|
function TryConvertNull(value) {
|
|
90
|
-
return (0,
|
|
94
|
+
return (0, index_6.IsString)(value) && value.toLowerCase() === 'null' ? null : value;
|
|
91
95
|
}
|
|
92
96
|
function TryConvertUndefined(value) {
|
|
93
|
-
return (0,
|
|
97
|
+
return (0, index_6.IsString)(value) && value === 'undefined' ? undefined : value;
|
|
94
98
|
}
|
|
95
99
|
// ------------------------------------------------------------------
|
|
96
100
|
// note: this function may return an invalid dates for the regex
|
|
@@ -101,8 +105,8 @@ function TryConvertUndefined(value) {
|
|
|
101
105
|
// ------------------------------------------------------------------
|
|
102
106
|
// prettier-ignore
|
|
103
107
|
function TryConvertDate(value) {
|
|
104
|
-
return ((0,
|
|
105
|
-
(0,
|
|
108
|
+
return ((0, index_6.IsDate)(value) ? value :
|
|
109
|
+
(0, index_6.IsNumber)(value) ? new Date(value) :
|
|
106
110
|
IsValueTrue(value) ? new Date(1) :
|
|
107
111
|
IsValueFalse(value) ? new Date(0) :
|
|
108
112
|
IsStringNumeric(value) ? new Date(parseInt(value)) :
|
|
@@ -123,7 +127,7 @@ function Default(value) {
|
|
|
123
127
|
// Convert
|
|
124
128
|
// ------------------------------------------------------------------
|
|
125
129
|
function TArray(schema, references, value) {
|
|
126
|
-
if ((0,
|
|
130
|
+
if ((0, index_6.IsArray)(value)) {
|
|
127
131
|
return value.map((value) => Visit(schema.items, references, value));
|
|
128
132
|
}
|
|
129
133
|
return value;
|
|
@@ -142,9 +146,9 @@ function TInteger(schema, references, value) {
|
|
|
142
146
|
}
|
|
143
147
|
// prettier-ignore
|
|
144
148
|
function TIntersect(schema, references, value) {
|
|
145
|
-
const allObjects = schema.allOf.every(schema => (0, type_1.
|
|
149
|
+
const allObjects = schema.allOf.every(schema => (0, type_1.IsObject)(schema));
|
|
146
150
|
if (allObjects)
|
|
147
|
-
return Visit((0,
|
|
151
|
+
return Visit((0, index_5.Composite)(schema.allOf), references, value);
|
|
148
152
|
return Visit(schema.allOf[0], references, value); // todo: fix this
|
|
149
153
|
}
|
|
150
154
|
function TLiteral(schema, references, value) {
|
|
@@ -158,11 +162,11 @@ function TNumber(schema, references, value) {
|
|
|
158
162
|
}
|
|
159
163
|
// prettier-ignore
|
|
160
164
|
function TObject(schema, references, value) {
|
|
161
|
-
const isConvertable = (0,
|
|
165
|
+
const isConvertable = (0, index_6.IsObject)(value);
|
|
162
166
|
if (!isConvertable)
|
|
163
167
|
return value;
|
|
164
168
|
return Object.getOwnPropertyNames(schema.properties).reduce((value, key) => {
|
|
165
|
-
return !(0,
|
|
169
|
+
return !(0, index_6.IsUndefined)(value[key])
|
|
166
170
|
? ({ ...value, [key]: Visit(schema.properties[key], references, value[key]) })
|
|
167
171
|
: ({ ...value });
|
|
168
172
|
}, value);
|
|
@@ -177,20 +181,20 @@ function TRecord(schema, references, value) {
|
|
|
177
181
|
return result;
|
|
178
182
|
}
|
|
179
183
|
function TRef(schema, references, value) {
|
|
180
|
-
return Visit((0,
|
|
184
|
+
return Visit((0, index_3.Deref)(schema, references), references, value);
|
|
181
185
|
}
|
|
182
186
|
function TString(schema, references, value) {
|
|
183
187
|
return TryConvertString(value);
|
|
184
188
|
}
|
|
185
189
|
function TSymbol(schema, references, value) {
|
|
186
|
-
return (0,
|
|
190
|
+
return (0, index_6.IsString)(value) || (0, index_6.IsNumber)(value) ? Symbol(value) : value;
|
|
187
191
|
}
|
|
188
192
|
function TThis(schema, references, value) {
|
|
189
|
-
return Visit((0,
|
|
193
|
+
return Visit((0, index_3.Deref)(schema, references), references, value);
|
|
190
194
|
}
|
|
191
195
|
// prettier-ignore
|
|
192
196
|
function TTuple(schema, references, value) {
|
|
193
|
-
const isConvertable = (0,
|
|
197
|
+
const isConvertable = (0, index_6.IsArray)(value) && !(0, index_6.IsUndefined)(schema.items);
|
|
194
198
|
if (!isConvertable)
|
|
195
199
|
return value;
|
|
196
200
|
return value.map((value, index) => {
|
|
@@ -205,16 +209,16 @@ function TUndefined(schema, references, value) {
|
|
|
205
209
|
function TUnion(schema, references, value) {
|
|
206
210
|
for (const subschema of schema.anyOf) {
|
|
207
211
|
const converted = Visit(subschema, references, value);
|
|
208
|
-
if ((0,
|
|
212
|
+
if ((0, index_2.Check)(subschema, references, converted)) {
|
|
209
213
|
return converted;
|
|
210
214
|
}
|
|
211
215
|
}
|
|
212
216
|
return value;
|
|
213
217
|
}
|
|
214
218
|
function Visit(schema, references, value) {
|
|
215
|
-
const references_ = (0,
|
|
219
|
+
const references_ = (0, index_6.IsString)(schema.$id) ? [...references, schema] : references;
|
|
216
220
|
const schema_ = schema;
|
|
217
|
-
switch (schema[
|
|
221
|
+
switch (schema[index_4.Kind]) {
|
|
218
222
|
case 'Array':
|
|
219
223
|
return TArray(schema_, references_, value);
|
|
220
224
|
case 'BigInt':
|
|
@@ -2,11 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.Default = void 0;
|
|
5
|
-
const index_1 = require("../
|
|
5
|
+
const index_1 = require("../check/index");
|
|
6
|
+
const index_2 = require("../deref/index");
|
|
7
|
+
const index_3 = require("../../type/symbols/index");
|
|
8
|
+
// ------------------------------------------------------------------
|
|
9
|
+
// ValueGuard
|
|
10
|
+
// ------------------------------------------------------------------
|
|
11
|
+
// prettier-ignore
|
|
12
|
+
const index_4 = require("../guard/index");
|
|
13
|
+
// ------------------------------------------------------------------
|
|
14
|
+
// TypeGuard
|
|
15
|
+
// ------------------------------------------------------------------
|
|
16
|
+
// prettier-ignore
|
|
6
17
|
const type_1 = require("../../type/guard/type");
|
|
7
|
-
const index_2 = require("../check/index");
|
|
8
|
-
const index_3 = require("../deref/index");
|
|
9
|
-
const index_4 = require("../../type/symbols/index");
|
|
10
18
|
// ------------------------------------------------------------------
|
|
11
19
|
// ValueOrDefault
|
|
12
20
|
// ------------------------------------------------------------------
|
|
@@ -17,20 +25,20 @@ function ValueOrDefault(schema, value) {
|
|
|
17
25
|
// IsCheckable
|
|
18
26
|
// ------------------------------------------------------------------
|
|
19
27
|
function IsCheckable(schema) {
|
|
20
|
-
return (0, type_1.
|
|
28
|
+
return (0, type_1.IsSchema)(schema) && schema[index_3.Kind] !== 'Unsafe';
|
|
21
29
|
}
|
|
22
30
|
// ------------------------------------------------------------------
|
|
23
31
|
// IsDefaultSchema
|
|
24
32
|
// ------------------------------------------------------------------
|
|
25
33
|
function IsDefaultSchema(value) {
|
|
26
|
-
return (0, type_1.
|
|
34
|
+
return (0, type_1.IsSchema)(value) && 'default' in value;
|
|
27
35
|
}
|
|
28
36
|
// ------------------------------------------------------------------
|
|
29
37
|
// Types
|
|
30
38
|
// ------------------------------------------------------------------
|
|
31
39
|
function TArray(schema, references, value) {
|
|
32
40
|
const defaulted = ValueOrDefault(schema, value);
|
|
33
|
-
if (!(0,
|
|
41
|
+
if (!(0, index_4.IsArray)(defaulted))
|
|
34
42
|
return defaulted;
|
|
35
43
|
for (let i = 0; i < defaulted.length; i++) {
|
|
36
44
|
defaulted[i] = Visit(schema.items, references, defaulted[i]);
|
|
@@ -41,12 +49,12 @@ function TIntersect(schema, references, value) {
|
|
|
41
49
|
const defaulted = ValueOrDefault(schema, value);
|
|
42
50
|
return schema.allOf.reduce((acc, schema) => {
|
|
43
51
|
const next = Visit(schema, references, defaulted);
|
|
44
|
-
return (0,
|
|
52
|
+
return (0, index_4.IsObject)(next) ? { ...acc, ...next } : next;
|
|
45
53
|
}, {});
|
|
46
54
|
}
|
|
47
55
|
function TObject(schema, references, value) {
|
|
48
56
|
const defaulted = ValueOrDefault(schema, value);
|
|
49
|
-
if (!(0,
|
|
57
|
+
if (!(0, index_4.IsObject)(defaulted))
|
|
50
58
|
return defaulted;
|
|
51
59
|
const additionalPropertiesSchema = schema.additionalProperties;
|
|
52
60
|
const knownPropertyKeys = Object.getOwnPropertyNames(schema.properties);
|
|
@@ -69,7 +77,7 @@ function TObject(schema, references, value) {
|
|
|
69
77
|
}
|
|
70
78
|
function TRecord(schema, references, value) {
|
|
71
79
|
const defaulted = ValueOrDefault(schema, value);
|
|
72
|
-
if (!(0,
|
|
80
|
+
if (!(0, index_4.IsObject)(defaulted))
|
|
73
81
|
return defaulted;
|
|
74
82
|
const additionalPropertiesSchema = schema.additionalProperties;
|
|
75
83
|
const [propertyKeyPattern, propertySchema] = Object.entries(schema.patternProperties)[0];
|
|
@@ -92,14 +100,14 @@ function TRecord(schema, references, value) {
|
|
|
92
100
|
return defaulted;
|
|
93
101
|
}
|
|
94
102
|
function TRef(schema, references, value) {
|
|
95
|
-
return Visit((0,
|
|
103
|
+
return Visit((0, index_2.Deref)(schema, references), references, ValueOrDefault(schema, value));
|
|
96
104
|
}
|
|
97
105
|
function TThis(schema, references, value) {
|
|
98
|
-
return Visit((0,
|
|
106
|
+
return Visit((0, index_2.Deref)(schema, references), references, value);
|
|
99
107
|
}
|
|
100
108
|
function TTuple(schema, references, value) {
|
|
101
109
|
const defaulted = ValueOrDefault(schema, value);
|
|
102
|
-
if (!(0,
|
|
110
|
+
if (!(0, index_4.IsArray)(defaulted) || (0, index_4.IsUndefined)(schema.items))
|
|
103
111
|
return defaulted;
|
|
104
112
|
const [items, max] = [schema.items, Math.max(schema.items.length, defaulted.length)];
|
|
105
113
|
for (let i = 0; i < max; i++) {
|
|
@@ -112,16 +120,16 @@ function TUnion(schema, references, value) {
|
|
|
112
120
|
const defaulted = ValueOrDefault(schema, value);
|
|
113
121
|
for (const inner of schema.anyOf) {
|
|
114
122
|
const result = Visit(inner, references, defaulted);
|
|
115
|
-
if (IsCheckable(inner) && (0,
|
|
123
|
+
if (IsCheckable(inner) && (0, index_1.Check)(inner, result)) {
|
|
116
124
|
return result;
|
|
117
125
|
}
|
|
118
126
|
}
|
|
119
127
|
return defaulted;
|
|
120
128
|
}
|
|
121
129
|
function Visit(schema, references, value) {
|
|
122
|
-
const references_ = (0,
|
|
130
|
+
const references_ = (0, index_4.IsString)(schema.$id) ? [...references, schema] : references;
|
|
123
131
|
const schema_ = schema;
|
|
124
|
-
switch (schema_[
|
|
132
|
+
switch (schema_[index_3.Kind]) {
|
|
125
133
|
case 'Array':
|
|
126
134
|
return TArray(schema_, references_, value);
|
|
127
135
|
case 'Intersect':
|
|
@@ -2,13 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.TransformDecode = exports.TransformDecodeError = exports.TransformDecodeCheckError = void 0;
|
|
5
|
-
const type_1 = require("../../type/guard/type");
|
|
6
5
|
const index_1 = require("../../type/symbols/index");
|
|
7
|
-
const index_2 = require("
|
|
8
|
-
const index_3 = require("../../type/
|
|
9
|
-
const index_4 = require("
|
|
10
|
-
const index_5 = require("../
|
|
11
|
-
|
|
6
|
+
const index_2 = require("../../type/keyof/index");
|
|
7
|
+
const index_3 = require("../../type/indexed/index");
|
|
8
|
+
const index_4 = require("../deref/index");
|
|
9
|
+
const index_5 = require("../check/index");
|
|
10
|
+
// ------------------------------------------------------------------
|
|
11
|
+
// ValueGuard
|
|
12
|
+
// ------------------------------------------------------------------
|
|
13
|
+
const index_6 = require("../guard/index");
|
|
14
|
+
// ------------------------------------------------------------------
|
|
15
|
+
// TypeGuard
|
|
16
|
+
// ------------------------------------------------------------------
|
|
17
|
+
const type_1 = require("../../type/guard/type");
|
|
12
18
|
// ------------------------------------------------------------------
|
|
13
19
|
// Errors
|
|
14
20
|
// ------------------------------------------------------------------
|
|
@@ -36,7 +42,7 @@ exports.TransformDecodeError = TransformDecodeError;
|
|
|
36
42
|
// prettier-ignore
|
|
37
43
|
function Default(schema, value) {
|
|
38
44
|
try {
|
|
39
|
-
return (0, type_1.
|
|
45
|
+
return (0, type_1.IsTransform)(schema) ? schema[index_1.TransformKind].Decode(value) : value;
|
|
40
46
|
}
|
|
41
47
|
catch (error) {
|
|
42
48
|
throw new TransformDecodeError(schema, value, error);
|
|
@@ -44,21 +50,21 @@ function Default(schema, value) {
|
|
|
44
50
|
}
|
|
45
51
|
// prettier-ignore
|
|
46
52
|
function TArray(schema, references, value) {
|
|
47
|
-
return ((0,
|
|
53
|
+
return ((0, index_6.IsArray)(value))
|
|
48
54
|
? Default(schema, value.map((value) => Visit(schema.items, references, value)))
|
|
49
55
|
: Default(schema, value);
|
|
50
56
|
}
|
|
51
57
|
// prettier-ignore
|
|
52
58
|
function TIntersect(schema, references, value) {
|
|
53
|
-
if (!(0,
|
|
59
|
+
if (!(0, index_6.IsPlainObject)(value) || (0, index_6.IsValueType)(value))
|
|
54
60
|
return Default(schema, value);
|
|
55
|
-
const knownKeys = (0,
|
|
61
|
+
const knownKeys = (0, index_2.KeyOfPropertyKeys)(schema);
|
|
56
62
|
const knownProperties = knownKeys.reduce((value, key) => {
|
|
57
63
|
return (key in value)
|
|
58
|
-
? { ...value, [key]: Visit((0,
|
|
64
|
+
? { ...value, [key]: Visit((0, index_3.Index)(schema, [key]), references, value[key]) }
|
|
59
65
|
: value;
|
|
60
66
|
}, value);
|
|
61
|
-
if (!(0, type_1.
|
|
67
|
+
if (!(0, type_1.IsTransform)(schema.unevaluatedProperties)) {
|
|
62
68
|
return Default(schema, knownProperties);
|
|
63
69
|
}
|
|
64
70
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
@@ -75,15 +81,15 @@ function TNot(schema, references, value) {
|
|
|
75
81
|
}
|
|
76
82
|
// prettier-ignore
|
|
77
83
|
function TObject(schema, references, value) {
|
|
78
|
-
if (!(0,
|
|
84
|
+
if (!(0, index_6.IsPlainObject)(value))
|
|
79
85
|
return Default(schema, value);
|
|
80
|
-
const knownKeys = (0,
|
|
86
|
+
const knownKeys = (0, index_2.KeyOfPropertyKeys)(schema);
|
|
81
87
|
const knownProperties = knownKeys.reduce((value, key) => {
|
|
82
88
|
return (key in value)
|
|
83
89
|
? { ...value, [key]: Visit(schema.properties[key], references, value[key]) }
|
|
84
90
|
: value;
|
|
85
91
|
}, value);
|
|
86
|
-
if (!(0, type_1.
|
|
92
|
+
if (!(0, type_1.IsSchema)(schema.additionalProperties)) {
|
|
87
93
|
return Default(schema, knownProperties);
|
|
88
94
|
}
|
|
89
95
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
@@ -97,7 +103,7 @@ function TObject(schema, references, value) {
|
|
|
97
103
|
}
|
|
98
104
|
// prettier-ignore
|
|
99
105
|
function TRecord(schema, references, value) {
|
|
100
|
-
if (!(0,
|
|
106
|
+
if (!(0, index_6.IsPlainObject)(value))
|
|
101
107
|
return Default(schema, value);
|
|
102
108
|
const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0];
|
|
103
109
|
const knownKeys = new RegExp(pattern);
|
|
@@ -106,7 +112,7 @@ function TRecord(schema, references, value) {
|
|
|
106
112
|
? { ...value, [key]: Visit(schema.patternProperties[pattern], references, value[key]) }
|
|
107
113
|
: value;
|
|
108
114
|
}, value);
|
|
109
|
-
if (!(0, type_1.
|
|
115
|
+
if (!(0, type_1.IsSchema)(schema.additionalProperties)) {
|
|
110
116
|
return Default(schema, knownProperties);
|
|
111
117
|
}
|
|
112
118
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
@@ -120,24 +126,24 @@ function TRecord(schema, references, value) {
|
|
|
120
126
|
}
|
|
121
127
|
// prettier-ignore
|
|
122
128
|
function TRef(schema, references, value) {
|
|
123
|
-
const target = (0,
|
|
129
|
+
const target = (0, index_4.Deref)(schema, references);
|
|
124
130
|
return Default(schema, Visit(target, references, value));
|
|
125
131
|
}
|
|
126
132
|
// prettier-ignore
|
|
127
133
|
function TThis(schema, references, value) {
|
|
128
|
-
const target = (0,
|
|
134
|
+
const target = (0, index_4.Deref)(schema, references);
|
|
129
135
|
return Default(schema, Visit(target, references, value));
|
|
130
136
|
}
|
|
131
137
|
// prettier-ignore
|
|
132
138
|
function TTuple(schema, references, value) {
|
|
133
|
-
return ((0,
|
|
139
|
+
return ((0, index_6.IsArray)(value) && (0, index_6.IsArray)(schema.items))
|
|
134
140
|
? Default(schema, schema.items.map((schema, index) => Visit(schema, references, value[index])))
|
|
135
141
|
: Default(schema, value);
|
|
136
142
|
}
|
|
137
143
|
// prettier-ignore
|
|
138
144
|
function TUnion(schema, references, value) {
|
|
139
145
|
for (const subschema of schema.anyOf) {
|
|
140
|
-
if (!(0,
|
|
146
|
+
if (!(0, index_5.Check)(subschema, references, value))
|
|
141
147
|
continue;
|
|
142
148
|
// note: ensure interior is decoded first
|
|
143
149
|
const decoded = Visit(subschema, references, value);
|
|
@@ -2,13 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.TransformEncode = exports.TransformEncodeError = exports.TransformEncodeCheckError = void 0;
|
|
5
|
-
const type_1 = require("../../type/guard/type");
|
|
6
5
|
const index_1 = require("../../type/symbols/index");
|
|
7
|
-
const index_2 = require("
|
|
8
|
-
const index_3 = require("../../type/
|
|
9
|
-
const index_4 = require("
|
|
10
|
-
const index_5 = require("../
|
|
11
|
-
|
|
6
|
+
const index_2 = require("../../type/keyof/index");
|
|
7
|
+
const index_3 = require("../../type/indexed/index");
|
|
8
|
+
const index_4 = require("../deref/index");
|
|
9
|
+
const index_5 = require("../check/index");
|
|
10
|
+
// ------------------------------------------------------------------
|
|
11
|
+
// ValueGuard
|
|
12
|
+
// ------------------------------------------------------------------
|
|
13
|
+
const index_6 = require("../guard/index");
|
|
14
|
+
// ------------------------------------------------------------------
|
|
15
|
+
// TypeGuard
|
|
16
|
+
// ------------------------------------------------------------------
|
|
17
|
+
const type_1 = require("../../type/guard/type");
|
|
12
18
|
// ------------------------------------------------------------------
|
|
13
19
|
// Errors
|
|
14
20
|
// ------------------------------------------------------------------
|
|
@@ -35,7 +41,7 @@ exports.TransformEncodeError = TransformEncodeError;
|
|
|
35
41
|
// prettier-ignore
|
|
36
42
|
function Default(schema, value) {
|
|
37
43
|
try {
|
|
38
|
-
return (0, type_1.
|
|
44
|
+
return (0, type_1.IsTransform)(schema) ? schema[index_1.TransformKind].Encode(value) : value;
|
|
39
45
|
}
|
|
40
46
|
catch (error) {
|
|
41
47
|
throw new TransformEncodeError(schema, value, error);
|
|
@@ -44,22 +50,22 @@ function Default(schema, value) {
|
|
|
44
50
|
// prettier-ignore
|
|
45
51
|
function TArray(schema, references, value) {
|
|
46
52
|
const defaulted = Default(schema, value);
|
|
47
|
-
return (0,
|
|
53
|
+
return (0, index_6.IsArray)(defaulted)
|
|
48
54
|
? defaulted.map((value) => Visit(schema.items, references, value))
|
|
49
55
|
: defaulted;
|
|
50
56
|
}
|
|
51
57
|
// prettier-ignore
|
|
52
58
|
function TIntersect(schema, references, value) {
|
|
53
59
|
const defaulted = Default(schema, value);
|
|
54
|
-
if (!(0,
|
|
60
|
+
if (!(0, index_6.IsPlainObject)(value) || (0, index_6.IsValueType)(value))
|
|
55
61
|
return defaulted;
|
|
56
|
-
const knownKeys = (0,
|
|
62
|
+
const knownKeys = (0, index_2.KeyOfPropertyKeys)(schema);
|
|
57
63
|
const knownProperties = knownKeys.reduce((value, key) => {
|
|
58
64
|
return key in defaulted
|
|
59
|
-
? { ...value, [key]: Visit((0,
|
|
65
|
+
? { ...value, [key]: Visit((0, index_3.Index)(schema, [key]), references, value[key]) }
|
|
60
66
|
: value;
|
|
61
67
|
}, defaulted);
|
|
62
|
-
if (!(0, type_1.
|
|
68
|
+
if (!(0, type_1.IsTransform)(schema.unevaluatedProperties)) {
|
|
63
69
|
return Default(schema, knownProperties);
|
|
64
70
|
}
|
|
65
71
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
@@ -77,15 +83,15 @@ function TNot(schema, references, value) {
|
|
|
77
83
|
// prettier-ignore
|
|
78
84
|
function TObject(schema, references, value) {
|
|
79
85
|
const defaulted = Default(schema, value);
|
|
80
|
-
if (!(0,
|
|
86
|
+
if (!(0, index_6.IsPlainObject)(value))
|
|
81
87
|
return defaulted;
|
|
82
|
-
const knownKeys = (0,
|
|
88
|
+
const knownKeys = (0, index_2.KeyOfPropertyKeys)(schema);
|
|
83
89
|
const knownProperties = knownKeys.reduce((value, key) => {
|
|
84
90
|
return key in value
|
|
85
91
|
? { ...value, [key]: Visit(schema.properties[key], references, value[key]) }
|
|
86
92
|
: value;
|
|
87
93
|
}, defaulted);
|
|
88
|
-
if (!(0, type_1.
|
|
94
|
+
if (!(0, type_1.IsSchema)(schema.additionalProperties)) {
|
|
89
95
|
return knownProperties;
|
|
90
96
|
}
|
|
91
97
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
@@ -99,7 +105,7 @@ function TObject(schema, references, value) {
|
|
|
99
105
|
// prettier-ignore
|
|
100
106
|
function TRecord(schema, references, value) {
|
|
101
107
|
const defaulted = Default(schema, value);
|
|
102
|
-
if (!(0,
|
|
108
|
+
if (!(0, index_6.IsPlainObject)(value))
|
|
103
109
|
return defaulted;
|
|
104
110
|
const pattern = Object.getOwnPropertyNames(schema.patternProperties)[0];
|
|
105
111
|
const knownKeys = new RegExp(pattern);
|
|
@@ -108,7 +114,7 @@ function TRecord(schema, references, value) {
|
|
|
108
114
|
? { ...value, [key]: Visit(schema.patternProperties[pattern], references, value[key]) }
|
|
109
115
|
: value;
|
|
110
116
|
}, defaulted);
|
|
111
|
-
if (!(0, type_1.
|
|
117
|
+
if (!(0, type_1.IsSchema)(schema.additionalProperties)) {
|
|
112
118
|
return Default(schema, knownProperties);
|
|
113
119
|
}
|
|
114
120
|
const unknownKeys = Object.getOwnPropertyNames(knownProperties);
|
|
@@ -121,26 +127,26 @@ function TRecord(schema, references, value) {
|
|
|
121
127
|
}
|
|
122
128
|
// prettier-ignore
|
|
123
129
|
function TRef(schema, references, value) {
|
|
124
|
-
const target = (0,
|
|
130
|
+
const target = (0, index_4.Deref)(schema, references);
|
|
125
131
|
const resolved = Visit(target, references, value);
|
|
126
132
|
return Default(schema, resolved);
|
|
127
133
|
}
|
|
128
134
|
// prettier-ignore
|
|
129
135
|
function TThis(schema, references, value) {
|
|
130
|
-
const target = (0,
|
|
136
|
+
const target = (0, index_4.Deref)(schema, references);
|
|
131
137
|
const resolved = Visit(target, references, value);
|
|
132
138
|
return Default(schema, resolved);
|
|
133
139
|
}
|
|
134
140
|
// prettier-ignore
|
|
135
141
|
function TTuple(schema, references, value) {
|
|
136
142
|
const value1 = Default(schema, value);
|
|
137
|
-
return (0,
|
|
143
|
+
return (0, index_6.IsArray)(schema.items) ? schema.items.map((schema, index) => Visit(schema, references, value1[index])) : [];
|
|
138
144
|
}
|
|
139
145
|
// prettier-ignore
|
|
140
146
|
function TUnion(schema, references, value) {
|
|
141
147
|
// test value against union variants
|
|
142
148
|
for (const subschema of schema.anyOf) {
|
|
143
|
-
if (!(0,
|
|
149
|
+
if (!(0, index_5.Check)(subschema, references, value))
|
|
144
150
|
continue;
|
|
145
151
|
const value1 = Visit(subschema, references, value);
|
|
146
152
|
return Default(schema, value1);
|
|
@@ -148,7 +154,7 @@ function TUnion(schema, references, value) {
|
|
|
148
154
|
// test transformed value against union variants
|
|
149
155
|
for (const subschema of schema.anyOf) {
|
|
150
156
|
const value1 = Visit(subschema, references, value);
|
|
151
|
-
if (!(0,
|
|
157
|
+
if (!(0, index_5.Check)(schema, references, value1))
|
|
152
158
|
continue;
|
|
153
159
|
return Default(schema, value1);
|
|
154
160
|
}
|