@sinclair/typebox 0.30.4 → 0.31.0-dev-2

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/value/convert.js CHANGED
@@ -27,57 +27,51 @@ THE SOFTWARE.
27
27
 
28
28
  ---------------------------------------------------------------------------*/
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.Convert = exports.ValueConvertDereferenceError = exports.ValueConvertUnknownTypeError = void 0;
30
+ exports.Convert = exports.Default = exports.ValueConvertUnknownTypeError = void 0;
31
+ const guard_1 = require("./guard");
32
+ const clone_1 = require("./clone");
33
+ const check_1 = require("./check");
34
+ const deref_1 = require("./deref");
31
35
  const Types = require("../typebox");
32
- const ValueClone = require("./clone");
33
- const ValueCheck = require("./check");
34
- const ValueGuard = require("./guard");
35
36
  // --------------------------------------------------------------------------
36
37
  // Errors
37
38
  // --------------------------------------------------------------------------
38
- class ValueConvertUnknownTypeError extends Error {
39
+ class ValueConvertUnknownTypeError extends Types.TypeBoxError {
39
40
  constructor(schema) {
40
- super('ValueConvert: Unknown type');
41
+ super('Unknown type');
41
42
  this.schema = schema;
42
43
  }
43
44
  }
44
45
  exports.ValueConvertUnknownTypeError = ValueConvertUnknownTypeError;
45
- class ValueConvertDereferenceError extends Error {
46
- constructor(schema) {
47
- super(`ValueConvert: Unable to dereference type with $id '${schema.$ref}'`);
48
- this.schema = schema;
49
- }
50
- }
51
- exports.ValueConvertDereferenceError = ValueConvertDereferenceError;
52
46
  // --------------------------------------------------------------------------
53
47
  // Conversions
54
48
  // --------------------------------------------------------------------------
55
49
  function IsStringNumeric(value) {
56
- return ValueGuard.IsString(value) && !isNaN(value) && !isNaN(parseFloat(value));
50
+ return (0, guard_1.IsString)(value) && !isNaN(value) && !isNaN(parseFloat(value));
57
51
  }
58
52
  function IsValueToString(value) {
59
- return ValueGuard.IsBigInt(value) || ValueGuard.IsBoolean(value) || ValueGuard.IsNumber(value);
53
+ return (0, guard_1.IsBigInt)(value) || (0, guard_1.IsBoolean)(value) || (0, guard_1.IsNumber)(value);
60
54
  }
61
55
  function IsValueTrue(value) {
62
- return value === true || (ValueGuard.IsNumber(value) && value === 1) || (ValueGuard.IsBigInt(value) && value === BigInt('1')) || (ValueGuard.IsString(value) && (value.toLowerCase() === 'true' || value === '1'));
56
+ return value === true || ((0, guard_1.IsNumber)(value) && value === 1) || ((0, guard_1.IsBigInt)(value) && value === BigInt('1')) || ((0, guard_1.IsString)(value) && (value.toLowerCase() === 'true' || value === '1'));
63
57
  }
64
58
  function IsValueFalse(value) {
65
- return value === false || (ValueGuard.IsNumber(value) && value === 0) || (ValueGuard.IsBigInt(value) && value === BigInt('0')) || (ValueGuard.IsString(value) && (value.toLowerCase() === 'false' || value === '0'));
59
+ return value === false || ((0, guard_1.IsNumber)(value) && (value === 0 || Object.is(value, -0))) || ((0, guard_1.IsBigInt)(value) && value === BigInt('0')) || ((0, guard_1.IsString)(value) && (value.toLowerCase() === 'false' || value === '0' || value === '-0'));
66
60
  }
67
61
  function IsTimeStringWithTimeZone(value) {
68
- return ValueGuard.IsString(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
62
+ return (0, guard_1.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i.test(value);
69
63
  }
70
64
  function IsTimeStringWithoutTimeZone(value) {
71
- return ValueGuard.IsString(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
65
+ return (0, guard_1.IsString)(value) && /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)?$/i.test(value);
72
66
  }
73
67
  function IsDateTimeStringWithTimeZone(value) {
74
- return ValueGuard.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);
68
+ return (0, guard_1.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);
75
69
  }
76
70
  function IsDateTimeStringWithoutTimeZone(value) {
77
- return ValueGuard.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);
71
+ return (0, guard_1.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);
78
72
  }
79
73
  function IsDateString(value) {
80
- return ValueGuard.IsString(value) && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value);
74
+ return (0, guard_1.IsString)(value) && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value);
81
75
  }
82
76
  // --------------------------------------------------------------------------
83
77
  // Convert
@@ -105,29 +99,29 @@ function TryConvertLiteral(schema, value) {
105
99
  return TryConvertLiteralBoolean(value, schema.const);
106
100
  }
107
101
  else {
108
- return ValueClone.Clone(value);
102
+ return (0, clone_1.Clone)(value);
109
103
  }
110
104
  }
111
105
  function TryConvertBoolean(value) {
112
106
  return IsValueTrue(value) ? true : IsValueFalse(value) ? false : value;
113
107
  }
114
108
  function TryConvertBigInt(value) {
115
- return IsStringNumeric(value) ? BigInt(parseInt(value)) : ValueGuard.IsNumber(value) ? BigInt(value | 0) : IsValueFalse(value) ? 0 : IsValueTrue(value) ? 1 : value;
109
+ return IsStringNumeric(value) ? BigInt(parseInt(value)) : (0, guard_1.IsNumber)(value) ? BigInt(value | 0) : IsValueFalse(value) ? BigInt(0) : IsValueTrue(value) ? BigInt(1) : value;
116
110
  }
117
111
  function TryConvertString(value) {
118
- return IsValueToString(value) ? value.toString() : ValueGuard.IsSymbol(value) && value.description !== undefined ? value.description.toString() : value;
112
+ return IsValueToString(value) ? value.toString() : (0, guard_1.IsSymbol)(value) && value.description !== undefined ? value.description.toString() : value;
119
113
  }
120
114
  function TryConvertNumber(value) {
121
115
  return IsStringNumeric(value) ? parseFloat(value) : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
122
116
  }
123
117
  function TryConvertInteger(value) {
124
- return IsStringNumeric(value) ? parseInt(value) : ValueGuard.IsNumber(value) ? value | 0 : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
118
+ return IsStringNumeric(value) ? parseInt(value) : (0, guard_1.IsNumber)(value) ? value | 0 : IsValueTrue(value) ? 1 : IsValueFalse(value) ? 0 : value;
125
119
  }
126
120
  function TryConvertNull(value) {
127
- return ValueGuard.IsString(value) && value.toLowerCase() === 'null' ? null : value;
121
+ return (0, guard_1.IsString)(value) && value.toLowerCase() === 'null' ? null : value;
128
122
  }
129
123
  function TryConvertUndefined(value) {
130
- return ValueGuard.IsString(value) && value === 'undefined' ? undefined : value;
124
+ return (0, guard_1.IsString)(value) && value === 'undefined' ? undefined : value;
131
125
  }
132
126
  function TryConvertDate(value) {
133
127
  // --------------------------------------------------------------------------
@@ -136,9 +130,9 @@ function TryConvertDate(value) {
136
130
  // and will return a epoch date if invalid. Consider better string parsing
137
131
  // for the iso dates in future revisions.
138
132
  // --------------------------------------------------------------------------
139
- return ValueGuard.IsDate(value)
133
+ return (0, guard_1.IsDate)(value)
140
134
  ? value
141
- : ValueGuard.IsNumber(value)
135
+ : (0, guard_1.IsNumber)(value)
142
136
  ? new Date(value)
143
137
  : IsValueTrue(value)
144
138
  ? new Date(1)
@@ -159,50 +153,36 @@ function TryConvertDate(value) {
159
153
  : value;
160
154
  }
161
155
  // --------------------------------------------------------------------------
162
- // Cast
156
+ // Default
163
157
  // --------------------------------------------------------------------------
164
- function TAny(schema, references, value) {
158
+ function Default(value) {
165
159
  return value;
166
160
  }
161
+ exports.Default = Default;
162
+ // --------------------------------------------------------------------------
163
+ // Convert
164
+ // --------------------------------------------------------------------------
167
165
  function TArray(schema, references, value) {
168
- if (ValueGuard.IsArray(value)) {
166
+ if ((0, guard_1.IsArray)(value)) {
169
167
  return value.map((value) => Visit(schema.items, references, value));
170
168
  }
171
169
  return value;
172
170
  }
173
- function TAsyncIterator(schema, references, value) {
174
- return value;
175
- }
176
171
  function TBigInt(schema, references, value) {
177
172
  return TryConvertBigInt(value);
178
173
  }
179
174
  function TBoolean(schema, references, value) {
180
175
  return TryConvertBoolean(value);
181
176
  }
182
- function TConstructor(schema, references, value) {
183
- return ValueClone.Clone(value);
184
- }
185
177
  function TDate(schema, references, value) {
186
178
  return TryConvertDate(value);
187
179
  }
188
- function TFunction(schema, references, value) {
189
- return value;
190
- }
191
180
  function TInteger(schema, references, value) {
192
181
  return TryConvertInteger(value);
193
182
  }
194
- function TIntersect(schema, references, value) {
195
- return value;
196
- }
197
- function TIterator(schema, references, value) {
198
- return value;
199
- }
200
183
  function TLiteral(schema, references, value) {
201
184
  return TryConvertLiteral(schema, value);
202
185
  }
203
- function TNever(schema, references, value) {
204
- return value;
205
- }
206
186
  function TNull(schema, references, value) {
207
187
  return TryConvertNull(value);
208
188
  }
@@ -210,15 +190,12 @@ function TNumber(schema, references, value) {
210
190
  return TryConvertNumber(value);
211
191
  }
212
192
  function TObject(schema, references, value) {
213
- if (ValueGuard.IsObject(value))
193
+ if ((0, guard_1.IsObject)(value))
214
194
  return Object.getOwnPropertyNames(schema.properties).reduce((acc, key) => {
215
195
  return value[key] !== undefined ? { ...acc, [key]: Visit(schema.properties[key], references, value[key]) } : { ...acc };
216
196
  }, value);
217
197
  return value;
218
198
  }
219
- function TPromise(schema, references, value) {
220
- return value;
221
- }
222
199
  function TRecord(schema, references, value) {
223
200
  const propertyKey = Object.getOwnPropertyNames(schema.patternProperties)[0];
224
201
  const property = schema.patternProperties[propertyKey];
@@ -229,30 +206,19 @@ function TRecord(schema, references, value) {
229
206
  return result;
230
207
  }
231
208
  function TRef(schema, references, value) {
232
- const index = references.findIndex((foreign) => foreign.$id === schema.$ref);
233
- if (index === -1)
234
- throw new ValueConvertDereferenceError(schema);
235
- const target = references[index];
236
- return Visit(target, references, value);
209
+ return Visit((0, deref_1.Deref)(schema, references), references, value);
237
210
  }
238
211
  function TString(schema, references, value) {
239
212
  return TryConvertString(value);
240
213
  }
241
214
  function TSymbol(schema, references, value) {
242
- return value;
243
- }
244
- function TTemplateLiteral(schema, references, value) {
245
- return value;
215
+ return (0, guard_1.IsString)(value) || (0, guard_1.IsNumber)(value) ? Symbol(value) : value;
246
216
  }
247
217
  function TThis(schema, references, value) {
248
- const index = references.findIndex((foreign) => foreign.$id === schema.$ref);
249
- if (index === -1)
250
- throw new ValueConvertDereferenceError(schema);
251
- const target = references[index];
252
- return Visit(target, references, value);
218
+ return Visit((0, deref_1.Deref)(schema, references), references, value);
253
219
  }
254
220
  function TTuple(schema, references, value) {
255
- if (ValueGuard.IsArray(value) && !ValueGuard.IsUndefined(schema.items)) {
221
+ if ((0, guard_1.IsArray)(value) && !(0, guard_1.IsUndefined)(schema.items)) {
256
222
  return value.map((value, index) => {
257
223
  return index < schema.items.length ? Visit(schema.items[index], references, value) : value;
258
224
  });
@@ -265,62 +231,37 @@ function TUndefined(schema, references, value) {
265
231
  function TUnion(schema, references, value) {
266
232
  for (const subschema of schema.anyOf) {
267
233
  const converted = Visit(subschema, references, value);
268
- if (ValueCheck.Check(subschema, references, converted)) {
234
+ if ((0, check_1.Check)(subschema, references, converted)) {
269
235
  return converted;
270
236
  }
271
237
  }
272
238
  return value;
273
239
  }
274
- function TUint8Array(schema, references, value) {
275
- return value;
276
- }
277
- function TUnknown(schema, references, value) {
278
- return value;
279
- }
280
- function TVoid(schema, references, value) {
281
- return value;
282
- }
283
- function TKind(schema, references, value) {
284
- return value;
285
- }
286
240
  function Visit(schema, references, value) {
287
- const references_ = ValueGuard.IsString(schema.$id) ? [...references, schema] : references;
241
+ const references_ = (0, guard_1.IsString)(schema.$id) ? [...references, schema] : references;
288
242
  const schema_ = schema;
289
243
  switch (schema[Types.Kind]) {
290
- case 'Any':
291
- return TAny(schema_, references_, value);
244
+ // ------------------------------------------------------
245
+ // Structural
246
+ // ------------------------------------------------------
292
247
  case 'Array':
293
248
  return TArray(schema_, references_, value);
294
- case 'AsyncIterator':
295
- return TAsyncIterator(schema_, references_, value);
296
249
  case 'BigInt':
297
250
  return TBigInt(schema_, references_, value);
298
251
  case 'Boolean':
299
252
  return TBoolean(schema_, references_, value);
300
- case 'Constructor':
301
- return TConstructor(schema_, references_, value);
302
253
  case 'Date':
303
254
  return TDate(schema_, references_, value);
304
- case 'Function':
305
- return TFunction(schema_, references_, value);
306
255
  case 'Integer':
307
256
  return TInteger(schema_, references_, value);
308
- case 'Intersect':
309
- return TIntersect(schema_, references_, value);
310
- case 'Iterator':
311
- return TIterator(schema_, references_, value);
312
257
  case 'Literal':
313
258
  return TLiteral(schema_, references_, value);
314
- case 'Never':
315
- return TNever(schema_, references_, value);
316
259
  case 'Null':
317
260
  return TNull(schema_, references_, value);
318
261
  case 'Number':
319
262
  return TNumber(schema_, references_, value);
320
263
  case 'Object':
321
264
  return TObject(schema_, references_, value);
322
- case 'Promise':
323
- return TPromise(schema_, references_, value);
324
265
  case 'Record':
325
266
  return TRecord(schema_, references_, value);
326
267
  case 'Ref':
@@ -329,8 +270,6 @@ function Visit(schema, references, value) {
329
270
  return TString(schema_, references_, value);
330
271
  case 'Symbol':
331
272
  return TSymbol(schema_, references_, value);
332
- case 'TemplateLiteral':
333
- return TTemplateLiteral(schema_, references_, value);
334
273
  case 'This':
335
274
  return TThis(schema_, references_, value);
336
275
  case 'Tuple':
@@ -339,16 +278,26 @@ function Visit(schema, references, value) {
339
278
  return TUndefined(schema_, references_, value);
340
279
  case 'Union':
341
280
  return TUnion(schema_, references_, value);
281
+ // ------------------------------------------------------
282
+ // Default
283
+ // ------------------------------------------------------
284
+ case 'Any':
285
+ case 'AsyncIterator':
286
+ case 'Constructor':
287
+ case 'Function':
288
+ case 'Intersect':
289
+ case 'Iterator':
290
+ case 'Never':
291
+ case 'Promise':
292
+ case 'TemplateLiteral':
342
293
  case 'Uint8Array':
343
- return TUint8Array(schema_, references_, value);
344
294
  case 'Unknown':
345
- return TUnknown(schema_, references_, value);
346
295
  case 'Void':
347
- return TVoid(schema_, references_, value);
296
+ return Default(value);
348
297
  default:
349
298
  if (!Types.TypeRegistry.Has(schema_[Types.Kind]))
350
299
  throw new ValueConvertUnknownTypeError(schema_);
351
- return TKind(schema_, references_, value);
300
+ return Default(value);
352
301
  }
353
302
  }
354
303
  /** Converts any type mismatched values to their target type if a reasonable conversion is possible. */
package/value/create.d.ts CHANGED
@@ -1,29 +1,25 @@
1
1
  import * as Types from '../typebox';
2
- export declare class ValueCreateUnknownTypeError extends Error {
2
+ export declare class ValueCreateUnknownTypeError extends Types.TypeBoxError {
3
3
  readonly schema: Types.TSchema;
4
4
  constructor(schema: Types.TSchema);
5
5
  }
6
- export declare class ValueCreateNeverTypeError extends Error {
6
+ export declare class ValueCreateNeverTypeError extends Types.TypeBoxError {
7
7
  readonly schema: Types.TSchema;
8
8
  constructor(schema: Types.TSchema);
9
9
  }
10
- export declare class ValueCreateNotTypeError extends Error {
10
+ export declare class ValueCreateNotTypeError extends Types.TypeBoxError {
11
11
  readonly schema: Types.TSchema;
12
12
  constructor(schema: Types.TSchema);
13
13
  }
14
- export declare class ValueCreateIntersectTypeError extends Error {
14
+ export declare class ValueCreateIntersectTypeError extends Types.TypeBoxError {
15
15
  readonly schema: Types.TSchema;
16
16
  constructor(schema: Types.TSchema);
17
17
  }
18
- export declare class ValueCreateTempateLiteralTypeError extends Error {
18
+ export declare class ValueCreateTempateLiteralTypeError extends Types.TypeBoxError {
19
19
  readonly schema: Types.TSchema;
20
20
  constructor(schema: Types.TSchema);
21
21
  }
22
- export declare class ValueCreateDereferenceError extends Error {
23
- readonly schema: Types.TRef | Types.TThis;
24
- constructor(schema: Types.TRef | Types.TThis);
25
- }
26
- export declare class ValueCreateRecursiveInstantiationError extends Error {
22
+ export declare class ValueCreateRecursiveInstantiationError extends Types.TypeBoxError {
27
23
  readonly schema: Types.TSchema;
28
24
  readonly recursiveMaxDepth: number;
29
25
  constructor(schema: Types.TSchema, recursiveMaxDepth: number);