@sinclair/typebox 0.32.18 → 0.32.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.
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Clone } from '../clone/index.mjs';
|
|
2
|
+
import { Check } from '../check/index.mjs';
|
|
2
3
|
import { Deref } from '../deref/index.mjs';
|
|
3
4
|
import { Kind } from '../../type/symbols/index.mjs';
|
|
4
5
|
// ------------------------------------------------------------------
|
|
@@ -185,7 +186,13 @@ function FromUndefined(schema, references, value) {
|
|
|
185
186
|
return TryConvertUndefined(value);
|
|
186
187
|
}
|
|
187
188
|
function FromUnion(schema, references, value) {
|
|
188
|
-
|
|
189
|
+
for (const subschema of schema.anyOf) {
|
|
190
|
+
const converted = Visit(subschema, references, value);
|
|
191
|
+
if (!Check(subschema, references, converted))
|
|
192
|
+
continue;
|
|
193
|
+
return converted;
|
|
194
|
+
}
|
|
195
|
+
return value;
|
|
189
196
|
}
|
|
190
197
|
function Visit(schema, references, value) {
|
|
191
198
|
const references_ = IsString(schema.$id) ? [...references, schema] : references;
|
|
@@ -3,41 +3,42 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.Convert = void 0;
|
|
5
5
|
const index_1 = require("../clone/index");
|
|
6
|
-
const index_2 = require("../
|
|
7
|
-
const index_3 = require("
|
|
6
|
+
const index_2 = require("../check/index");
|
|
7
|
+
const index_3 = require("../deref/index");
|
|
8
|
+
const index_4 = require("../../type/symbols/index");
|
|
8
9
|
// ------------------------------------------------------------------
|
|
9
10
|
// ValueGuard
|
|
10
11
|
// ------------------------------------------------------------------
|
|
11
|
-
const
|
|
12
|
+
const index_5 = require("../guard/index");
|
|
12
13
|
// ------------------------------------------------------------------
|
|
13
14
|
// Conversions
|
|
14
15
|
// ------------------------------------------------------------------
|
|
15
16
|
function IsStringNumeric(value) {
|
|
16
|
-
return (0,
|
|
17
|
+
return (0, index_5.IsString)(value) && !isNaN(value) && !isNaN(parseFloat(value));
|
|
17
18
|
}
|
|
18
19
|
function IsValueToString(value) {
|
|
19
|
-
return (0,
|
|
20
|
+
return (0, index_5.IsBigInt)(value) || (0, index_5.IsBoolean)(value) || (0, index_5.IsNumber)(value);
|
|
20
21
|
}
|
|
21
22
|
function IsValueTrue(value) {
|
|
22
|
-
return value === true || ((0,
|
|
23
|
+
return value === true || ((0, index_5.IsNumber)(value) && value === 1) || ((0, index_5.IsBigInt)(value) && value === BigInt('1')) || ((0, index_5.IsString)(value) && (value.toLowerCase() === 'true' || value === '1'));
|
|
23
24
|
}
|
|
24
25
|
function IsValueFalse(value) {
|
|
25
|
-
return value === false || ((0,
|
|
26
|
+
return value === false || ((0, index_5.IsNumber)(value) && (value === 0 || Object.is(value, -0))) || ((0, index_5.IsBigInt)(value) && value === BigInt('0')) || ((0, index_5.IsString)(value) && (value.toLowerCase() === 'false' || value === '0' || value === '-0'));
|
|
26
27
|
}
|
|
27
28
|
function IsTimeStringWithTimeZone(value) {
|
|
28
|
-
return (0,
|
|
29
|
+
return (0, index_5.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
|
|
29
30
|
}
|
|
30
31
|
function IsTimeStringWithoutTimeZone(value) {
|
|
31
|
-
return (0,
|
|
32
|
+
return (0, index_5.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
|
|
32
33
|
}
|
|
33
34
|
function IsDateTimeStringWithTimeZone(value) {
|
|
34
|
-
return (0,
|
|
35
|
+
return (0, index_5.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);
|
|
35
36
|
}
|
|
36
37
|
function IsDateTimeStringWithoutTimeZone(value) {
|
|
37
|
-
return (0,
|
|
38
|
+
return (0, index_5.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);
|
|
38
39
|
}
|
|
39
40
|
function IsDateString(value) {
|
|
40
|
-
return (0,
|
|
41
|
+
return (0, index_5.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value);
|
|
41
42
|
}
|
|
42
43
|
// ------------------------------------------------------------------
|
|
43
44
|
// Convert
|
|
@@ -56,31 +57,31 @@ function TryConvertLiteralBoolean(value, target) {
|
|
|
56
57
|
}
|
|
57
58
|
// prettier-ignore
|
|
58
59
|
function TryConvertLiteral(schema, value) {
|
|
59
|
-
return ((0,
|
|
60
|
-
(0,
|
|
61
|
-
(0,
|
|
60
|
+
return ((0, index_5.IsString)(schema.const) ? TryConvertLiteralString(value, schema.const) :
|
|
61
|
+
(0, index_5.IsNumber)(schema.const) ? TryConvertLiteralNumber(value, schema.const) :
|
|
62
|
+
(0, index_5.IsBoolean)(schema.const) ? TryConvertLiteralBoolean(value, schema.const) :
|
|
62
63
|
(0, index_1.Clone)(value));
|
|
63
64
|
}
|
|
64
65
|
function TryConvertBoolean(value) {
|
|
65
66
|
return IsValueTrue(value) ? true : IsValueFalse(value) ? false : value;
|
|
66
67
|
}
|
|
67
68
|
function TryConvertBigInt(value) {
|
|
68
|
-
return IsStringNumeric(value) ? BigInt(parseInt(value)) : (0,
|
|
69
|
+
return IsStringNumeric(value) ? BigInt(parseInt(value)) : (0, index_5.IsNumber)(value) ? BigInt(value | 0) : IsValueFalse(value) ? BigInt(0) : IsValueTrue(value) ? BigInt(1) : value;
|
|
69
70
|
}
|
|
70
71
|
function TryConvertString(value) {
|
|
71
|
-
return IsValueToString(value) ? value.toString() : (0,
|
|
72
|
+
return IsValueToString(value) ? value.toString() : (0, index_5.IsSymbol)(value) && value.description !== undefined ? value.description.toString() : value;
|
|
72
73
|
}
|
|
73
74
|
function TryConvertNumber(value) {
|
|
74
75
|
return IsStringNumeric(value) ? parseFloat(value) : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
|
|
75
76
|
}
|
|
76
77
|
function TryConvertInteger(value) {
|
|
77
|
-
return IsStringNumeric(value) ? parseInt(value) : (0,
|
|
78
|
+
return IsStringNumeric(value) ? parseInt(value) : (0, index_5.IsNumber)(value) ? value | 0 : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
|
|
78
79
|
}
|
|
79
80
|
function TryConvertNull(value) {
|
|
80
|
-
return (0,
|
|
81
|
+
return (0, index_5.IsString)(value) && value.toLowerCase() === 'null' ? null : value;
|
|
81
82
|
}
|
|
82
83
|
function TryConvertUndefined(value) {
|
|
83
|
-
return (0,
|
|
84
|
+
return (0, index_5.IsString)(value) && value === 'undefined' ? undefined : value;
|
|
84
85
|
}
|
|
85
86
|
// ------------------------------------------------------------------
|
|
86
87
|
// note: this function may return an invalid dates for the regex
|
|
@@ -91,8 +92,8 @@ function TryConvertUndefined(value) {
|
|
|
91
92
|
// ------------------------------------------------------------------
|
|
92
93
|
// prettier-ignore
|
|
93
94
|
function TryConvertDate(value) {
|
|
94
|
-
return ((0,
|
|
95
|
-
(0,
|
|
95
|
+
return ((0, index_5.IsDate)(value) ? value :
|
|
96
|
+
(0, index_5.IsNumber)(value) ? new Date(value) :
|
|
96
97
|
IsValueTrue(value) ? new Date(1) :
|
|
97
98
|
IsValueFalse(value) ? new Date(0) :
|
|
98
99
|
IsStringNumeric(value) ? new Date(parseInt(value)) :
|
|
@@ -113,7 +114,7 @@ function Default(value) {
|
|
|
113
114
|
// Convert
|
|
114
115
|
// ------------------------------------------------------------------
|
|
115
116
|
function FromArray(schema, references, value) {
|
|
116
|
-
if ((0,
|
|
117
|
+
if ((0, index_5.IsArray)(value)) {
|
|
117
118
|
return value.map((value) => Visit(schema.items, references, value));
|
|
118
119
|
}
|
|
119
120
|
return value;
|
|
@@ -144,11 +145,11 @@ function FromNumber(schema, references, value) {
|
|
|
144
145
|
}
|
|
145
146
|
// prettier-ignore
|
|
146
147
|
function FromObject(schema, references, value) {
|
|
147
|
-
const isConvertable = (0,
|
|
148
|
+
const isConvertable = (0, index_5.IsObject)(value);
|
|
148
149
|
if (!isConvertable)
|
|
149
150
|
return value;
|
|
150
151
|
return Object.getOwnPropertyNames(schema.properties).reduce((value, key) => {
|
|
151
|
-
return !(0,
|
|
152
|
+
return !(0, index_5.IsUndefined)(value[key])
|
|
152
153
|
? ({ ...value, [key]: Visit(schema.properties[key], references, value[key]) })
|
|
153
154
|
: ({ ...value });
|
|
154
155
|
}, value);
|
|
@@ -163,20 +164,20 @@ function FromRecord(schema, references, value) {
|
|
|
163
164
|
return result;
|
|
164
165
|
}
|
|
165
166
|
function FromRef(schema, references, value) {
|
|
166
|
-
return Visit((0,
|
|
167
|
+
return Visit((0, index_3.Deref)(schema, references), references, value);
|
|
167
168
|
}
|
|
168
169
|
function FromString(schema, references, value) {
|
|
169
170
|
return TryConvertString(value);
|
|
170
171
|
}
|
|
171
172
|
function FromSymbol(schema, references, value) {
|
|
172
|
-
return (0,
|
|
173
|
+
return (0, index_5.IsString)(value) || (0, index_5.IsNumber)(value) ? Symbol(value) : value;
|
|
173
174
|
}
|
|
174
175
|
function FromThis(schema, references, value) {
|
|
175
|
-
return Visit((0,
|
|
176
|
+
return Visit((0, index_3.Deref)(schema, references), references, value);
|
|
176
177
|
}
|
|
177
178
|
// prettier-ignore
|
|
178
179
|
function FromTuple(schema, references, value) {
|
|
179
|
-
const isConvertable = (0,
|
|
180
|
+
const isConvertable = (0, index_5.IsArray)(value) && !(0, index_5.IsUndefined)(schema.items);
|
|
180
181
|
if (!isConvertable)
|
|
181
182
|
return value;
|
|
182
183
|
return value.map((value, index) => {
|
|
@@ -189,12 +190,18 @@ function FromUndefined(schema, references, value) {
|
|
|
189
190
|
return TryConvertUndefined(value);
|
|
190
191
|
}
|
|
191
192
|
function FromUnion(schema, references, value) {
|
|
192
|
-
|
|
193
|
+
for (const subschema of schema.anyOf) {
|
|
194
|
+
const converted = Visit(subschema, references, value);
|
|
195
|
+
if (!(0, index_2.Check)(subschema, references, converted))
|
|
196
|
+
continue;
|
|
197
|
+
return converted;
|
|
198
|
+
}
|
|
199
|
+
return value;
|
|
193
200
|
}
|
|
194
201
|
function Visit(schema, references, value) {
|
|
195
|
-
const references_ = (0,
|
|
202
|
+
const references_ = (0, index_5.IsString)(schema.$id) ? [...references, schema] : references;
|
|
196
203
|
const schema_ = schema;
|
|
197
|
-
switch (schema[
|
|
204
|
+
switch (schema[index_4.Kind]) {
|
|
198
205
|
case 'Array':
|
|
199
206
|
return FromArray(schema_, references_, value);
|
|
200
207
|
case 'BigInt':
|