@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
- return schema.anyOf.reduce((value, schema) => Visit(schema, references, value), value);
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("../deref/index");
7
- const index_3 = require("../../type/symbols/index");
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 index_4 = require("../guard/index");
12
+ const index_5 = require("../guard/index");
12
13
  // ------------------------------------------------------------------
13
14
  // Conversions
14
15
  // ------------------------------------------------------------------
15
16
  function IsStringNumeric(value) {
16
- return (0, index_4.IsString)(value) && !isNaN(value) && !isNaN(parseFloat(value));
17
+ return (0, index_5.IsString)(value) && !isNaN(value) && !isNaN(parseFloat(value));
17
18
  }
18
19
  function IsValueToString(value) {
19
- return (0, index_4.IsBigInt)(value) || (0, index_4.IsBoolean)(value) || (0, index_4.IsNumber)(value);
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, index_4.IsNumber)(value) && value === 1) || ((0, index_4.IsBigInt)(value) && value === BigInt('1')) || ((0, index_4.IsString)(value) && (value.toLowerCase() === 'true' || value === '1'));
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, index_4.IsNumber)(value) && (value === 0 || Object.is(value, -0))) || ((0, index_4.IsBigInt)(value) && value === BigInt('0')) || ((0, index_4.IsString)(value) && (value.toLowerCase() === 'false' || value === '0' || value === '-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, index_4.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
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, index_4.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
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, index_4.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
+ 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, index_4.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
+ 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, index_4.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value);
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, index_4.IsString)(schema.const) ? TryConvertLiteralString(value, schema.const) :
60
- (0, index_4.IsNumber)(schema.const) ? TryConvertLiteralNumber(value, schema.const) :
61
- (0, index_4.IsBoolean)(schema.const) ? TryConvertLiteralBoolean(value, schema.const) :
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, index_4.IsNumber)(value) ? BigInt(value | 0) : IsValueFalse(value) ? BigInt(0) : IsValueTrue(value) ? BigInt(1) : value;
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, index_4.IsSymbol)(value) && value.description !== undefined ? value.description.toString() : value;
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, index_4.IsNumber)(value) ? value | 0 : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
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, index_4.IsString)(value) && value.toLowerCase() === 'null' ? null : value;
81
+ return (0, index_5.IsString)(value) && value.toLowerCase() === 'null' ? null : value;
81
82
  }
82
83
  function TryConvertUndefined(value) {
83
- return (0, index_4.IsString)(value) && value === 'undefined' ? undefined : value;
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, index_4.IsDate)(value) ? value :
95
- (0, index_4.IsNumber)(value) ? new Date(value) :
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, index_4.IsArray)(value)) {
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, index_4.IsObject)(value);
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, index_4.IsUndefined)(value[key])
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, index_2.Deref)(schema, references), references, value);
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, index_4.IsString)(value) || (0, index_4.IsNumber)(value) ? Symbol(value) : value;
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, index_2.Deref)(schema, references), references, value);
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, index_4.IsArray)(value) && !(0, index_4.IsUndefined)(schema.items);
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
- return schema.anyOf.reduce((value, schema) => Visit(schema, references, value), value);
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, index_4.IsString)(schema.$id) ? [...references, schema] : references;
202
+ const references_ = (0, index_5.IsString)(schema.$id) ? [...references, schema] : references;
196
203
  const schema_ = schema;
197
- switch (schema[index_3.Kind]) {
204
+ switch (schema[index_4.Kind]) {
198
205
  case 'Array':
199
206
  return FromArray(schema_, references_, value);
200
207
  case 'BigInt':
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sinclair/typebox",
3
- "version": "0.32.18",
3
+ "version": "0.32.19",
4
4
  "description": "Json Schema Type Builder with Static Type Resolution for TypeScript",
5
5
  "keywords": [
6
6
  "typescript",