@sinclair/typebox 0.30.4 → 0.31.0-dev-1

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/cast.d.ts CHANGED
@@ -1,29 +1,23 @@
1
1
  import * as Types from '../typebox';
2
- export declare class ValueCastReferenceTypeError extends Error {
3
- readonly schema: Types.TRef | Types.TThis;
4
- constructor(schema: Types.TRef | Types.TThis);
5
- }
6
- export declare class ValueCastArrayUniqueItemsTypeError extends Error {
2
+ export declare class ValueCastArrayUniqueItemsTypeError extends Types.TypeBoxError {
7
3
  readonly schema: Types.TSchema;
8
4
  readonly value: unknown;
9
5
  constructor(schema: Types.TSchema, value: unknown);
10
6
  }
11
- export declare class ValueCastNeverTypeError extends Error {
7
+ export declare class ValueCastNeverTypeError extends Types.TypeBoxError {
12
8
  readonly schema: Types.TSchema;
13
9
  constructor(schema: Types.TSchema);
14
10
  }
15
- export declare class ValueCastRecursiveTypeError extends Error {
11
+ export declare class ValueCastRecursiveTypeError extends Types.TypeBoxError {
16
12
  readonly schema: Types.TSchema;
17
13
  constructor(schema: Types.TSchema);
18
14
  }
19
- export declare class ValueCastUnknownTypeError extends Error {
15
+ export declare class ValueCastUnknownTypeError extends Types.TypeBoxError {
20
16
  readonly schema: Types.TSchema;
21
17
  constructor(schema: Types.TSchema);
22
18
  }
23
- export declare class ValueCastDereferenceError extends Error {
24
- readonly schema: Types.TRef | Types.TThis;
25
- constructor(schema: Types.TRef | Types.TThis);
26
- }
19
+ export declare function DefaultClone(schema: Types.TSchema, references: Types.TSchema[], value: any): any;
20
+ export declare function Default(schema: Types.TSchema, references: Types.TSchema[], value: any): any;
27
21
  /** Casts a value into a given type and references. The return value will retain as much information of the original value as possible. */
28
22
  export declare function Cast<T extends Types.TSchema>(schema: T, references: Types.TSchema[], value: unknown): Types.Static<T>;
29
23
  /** Casts a value into a given type. The return value will retain as much information of the original value as possible. */
package/value/cast.js CHANGED
@@ -27,58 +27,45 @@ THE SOFTWARE.
27
27
 
28
28
  ---------------------------------------------------------------------------*/
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.Cast = exports.ValueCastDereferenceError = exports.ValueCastUnknownTypeError = exports.ValueCastRecursiveTypeError = exports.ValueCastNeverTypeError = exports.ValueCastArrayUniqueItemsTypeError = exports.ValueCastReferenceTypeError = void 0;
30
+ exports.Cast = exports.Default = exports.DefaultClone = exports.ValueCastUnknownTypeError = exports.ValueCastRecursiveTypeError = exports.ValueCastNeverTypeError = exports.ValueCastArrayUniqueItemsTypeError = void 0;
31
+ const guard_1 = require("./guard");
32
+ const create_1 = require("./create");
33
+ const check_1 = require("./check");
34
+ const clone_1 = require("./clone");
35
+ const deref_1 = require("./deref");
31
36
  const Types = require("../typebox");
32
- const ValueCreate = require("./create");
33
- const ValueCheck = require("./check");
34
- const ValueClone = require("./clone");
35
- const ValueGuard = require("./guard");
36
37
  // --------------------------------------------------------------------------
37
38
  // Errors
38
39
  // --------------------------------------------------------------------------
39
- class ValueCastReferenceTypeError extends Error {
40
- constructor(schema) {
41
- super(`ValueCast: Cannot locate referenced schema with $id '${schema.$ref}'`);
42
- this.schema = schema;
43
- }
44
- }
45
- exports.ValueCastReferenceTypeError = ValueCastReferenceTypeError;
46
- class ValueCastArrayUniqueItemsTypeError extends Error {
40
+ class ValueCastArrayUniqueItemsTypeError extends Types.TypeBoxError {
47
41
  constructor(schema, value) {
48
- super('ValueCast: Array cast produced invalid data due to uniqueItems constraint');
42
+ super('Array cast produced invalid data due to uniqueItems constraint');
49
43
  this.schema = schema;
50
44
  this.value = value;
51
45
  }
52
46
  }
53
47
  exports.ValueCastArrayUniqueItemsTypeError = ValueCastArrayUniqueItemsTypeError;
54
- class ValueCastNeverTypeError extends Error {
48
+ class ValueCastNeverTypeError extends Types.TypeBoxError {
55
49
  constructor(schema) {
56
- super('ValueCast: Never types cannot be cast');
50
+ super('Never types cannot be cast');
57
51
  this.schema = schema;
58
52
  }
59
53
  }
60
54
  exports.ValueCastNeverTypeError = ValueCastNeverTypeError;
61
- class ValueCastRecursiveTypeError extends Error {
55
+ class ValueCastRecursiveTypeError extends Types.TypeBoxError {
62
56
  constructor(schema) {
63
- super('ValueCast.Recursive: Cannot cast recursive schemas');
57
+ super('Cannot cast recursive schemas');
64
58
  this.schema = schema;
65
59
  }
66
60
  }
67
61
  exports.ValueCastRecursiveTypeError = ValueCastRecursiveTypeError;
68
- class ValueCastUnknownTypeError extends Error {
62
+ class ValueCastUnknownTypeError extends Types.TypeBoxError {
69
63
  constructor(schema) {
70
- super('ValueCast: Unknown type');
64
+ super('Unknown type');
71
65
  this.schema = schema;
72
66
  }
73
67
  }
74
68
  exports.ValueCastUnknownTypeError = ValueCastUnknownTypeError;
75
- class ValueCastDereferenceError extends Error {
76
- constructor(schema) {
77
- super(`ValueCast: Unable to dereference type with $id '${schema.$ref}'`);
78
- this.schema = schema;
79
- }
80
- }
81
- exports.ValueCastDereferenceError = ValueCastDereferenceError;
82
69
  // --------------------------------------------------------------------------
83
70
  // The following will score a schema against a value. For objects, the score
84
71
  // is the tally of points awarded for each property of the value. Property
@@ -89,20 +76,20 @@ exports.ValueCastDereferenceError = ValueCastDereferenceError;
89
76
  var UnionCastCreate;
90
77
  (function (UnionCastCreate) {
91
78
  function Score(schema, references, value) {
92
- if (schema[Types.Kind] === 'Object' && typeof value === 'object' && !ValueGuard.IsNull(value)) {
79
+ if (schema[Types.Kind] === 'Object' && typeof value === 'object' && !(0, guard_1.IsNull)(value)) {
93
80
  const object = schema;
94
81
  const keys = Object.getOwnPropertyNames(value);
95
82
  const entries = Object.entries(object.properties);
96
83
  const [point, max] = [1 / entries.length, entries.length];
97
84
  return entries.reduce((acc, [key, schema]) => {
98
85
  const literal = schema[Types.Kind] === 'Literal' && schema.const === value[key] ? max : 0;
99
- const checks = ValueCheck.Check(schema, references, value[key]) ? point : 0;
86
+ const checks = (0, check_1.Check)(schema, references, value[key]) ? point : 0;
100
87
  const exists = keys.includes(key) ? point : 0;
101
88
  return acc + (literal + checks + exists);
102
89
  }, 0);
103
90
  }
104
91
  else {
105
- return ValueCheck.Check(schema, references, value) ? 1 : 0;
92
+ return (0, check_1.Check)(schema, references, value) ? 1 : 0;
106
93
  }
107
94
  }
108
95
  function Select(union, references, value) {
@@ -128,37 +115,36 @@ var UnionCastCreate;
128
115
  UnionCastCreate.Create = Create;
129
116
  })(UnionCastCreate || (UnionCastCreate = {}));
130
117
  // --------------------------------------------------------------------------
131
- // Cast
118
+ // Default
132
119
  // --------------------------------------------------------------------------
133
- function TAny(schema, references, value) {
134
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
120
+ function DefaultClone(schema, references, value) {
121
+ return (0, check_1.Check)(schema, references, value) ? (0, clone_1.Clone)(value) : (0, create_1.Create)(schema, references);
135
122
  }
123
+ exports.DefaultClone = DefaultClone;
124
+ function Default(schema, references, value) {
125
+ return (0, check_1.Check)(schema, references, value) ? value : (0, create_1.Create)(schema, references);
126
+ }
127
+ exports.Default = Default;
128
+ // --------------------------------------------------------------------------
129
+ // Cast
130
+ // --------------------------------------------------------------------------
136
131
  function TArray(schema, references, value) {
137
- if (ValueCheck.Check(schema, references, value))
138
- return ValueClone.Clone(value);
139
- const created = ValueGuard.IsArray(value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
140
- const minimum = ValueGuard.IsNumber(schema.minItems) && created.length < schema.minItems ? [...created, ...Array.from({ length: schema.minItems - created.length }, () => null)] : created;
141
- const maximum = ValueGuard.IsNumber(schema.maxItems) && minimum.length > schema.maxItems ? minimum.slice(0, schema.maxItems) : minimum;
132
+ if ((0, check_1.Check)(schema, references, value))
133
+ return (0, clone_1.Clone)(value);
134
+ const created = (0, guard_1.IsArray)(value) ? (0, clone_1.Clone)(value) : (0, create_1.Create)(schema, references);
135
+ const minimum = (0, guard_1.IsNumber)(schema.minItems) && created.length < schema.minItems ? [...created, ...Array.from({ length: schema.minItems - created.length }, () => null)] : created;
136
+ const maximum = (0, guard_1.IsNumber)(schema.maxItems) && minimum.length > schema.maxItems ? minimum.slice(0, schema.maxItems) : minimum;
142
137
  const casted = maximum.map((value) => Visit(schema.items, references, value));
143
138
  if (schema.uniqueItems !== true)
144
139
  return casted;
145
140
  const unique = [...new Set(casted)];
146
- if (!ValueCheck.Check(schema, references, unique))
141
+ if (!(0, check_1.Check)(schema, references, unique))
147
142
  throw new ValueCastArrayUniqueItemsTypeError(schema, unique);
148
143
  return unique;
149
144
  }
150
- function TAsyncIterator(schema, references, value) {
151
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
152
- }
153
- function TBigInt(schema, references, value) {
154
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
155
- }
156
- function TBoolean(schema, references, value) {
157
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
158
- }
159
145
  function TConstructor(schema, references, value) {
160
- if (ValueCheck.Check(schema, references, value))
161
- return ValueCreate.Create(schema, references);
146
+ if ((0, check_1.Check)(schema, references, value))
147
+ return (0, create_1.Create)(schema, references);
162
148
  const required = new Set(schema.returns.required || []);
163
149
  const result = function () { };
164
150
  for (const [key, property] of Object.entries(schema.returns.properties)) {
@@ -168,43 +154,19 @@ function TConstructor(schema, references, value) {
168
154
  }
169
155
  return result;
170
156
  }
171
- function TDate(schema, references, value) {
172
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
173
- }
174
- function TFunction(schema, references, value) {
175
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
176
- }
177
- function TInteger(schema, references, value) {
178
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
179
- }
180
157
  function TIntersect(schema, references, value) {
181
- const created = ValueCreate.Create(schema, references);
182
- const mapped = ValueGuard.IsPlainObject(created) && ValueGuard.IsPlainObject(value) ? { ...created, ...value } : value;
183
- return ValueCheck.Check(schema, references, mapped) ? mapped : ValueCreate.Create(schema, references);
184
- }
185
- function TIterator(schema, references, value) {
186
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
187
- }
188
- function TLiteral(schema, references, value) {
189
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
158
+ const created = (0, create_1.Create)(schema, references);
159
+ const mapped = (0, guard_1.IsPlainObject)(created) && (0, guard_1.IsPlainObject)(value) ? { ...created, ...value } : value;
160
+ return (0, check_1.Check)(schema, references, mapped) ? mapped : (0, create_1.Create)(schema, references);
190
161
  }
191
162
  function TNever(schema, references, value) {
192
163
  throw new ValueCastNeverTypeError(schema);
193
164
  }
194
- function TNot(schema, references, value) {
195
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
196
- }
197
- function TNull(schema, references, value) {
198
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
199
- }
200
- function TNumber(schema, references, value) {
201
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
202
- }
203
165
  function TObject(schema, references, value) {
204
- if (ValueCheck.Check(schema, references, value))
166
+ if ((0, check_1.Check)(schema, references, value))
205
167
  return value;
206
168
  if (value === null || typeof value !== 'object')
207
- return ValueCreate.Create(schema, references);
169
+ return (0, create_1.Create)(schema, references);
208
170
  const required = new Set(schema.required || []);
209
171
  const result = {};
210
172
  for (const [key, property] of Object.entries(schema.properties)) {
@@ -223,14 +185,11 @@ function TObject(schema, references, value) {
223
185
  }
224
186
  return result;
225
187
  }
226
- function TPromise(schema, references, value) {
227
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
228
- }
229
188
  function TRecord(schema, references, value) {
230
- if (ValueCheck.Check(schema, references, value))
231
- return ValueClone.Clone(value);
189
+ if ((0, check_1.Check)(schema, references, value))
190
+ return (0, clone_1.Clone)(value);
232
191
  if (value === null || typeof value !== 'object' || Array.isArray(value) || value instanceof Date)
233
- return ValueCreate.Create(schema, references);
192
+ return (0, create_1.Create)(schema, references);
234
193
  const subschemaPropertyName = Object.getOwnPropertyNames(schema.patternProperties)[0];
235
194
  const subschema = schema.patternProperties[subschemaPropertyName];
236
195
  const result = {};
@@ -240,123 +199,82 @@ function TRecord(schema, references, value) {
240
199
  return result;
241
200
  }
242
201
  function TRef(schema, references, value) {
243
- const index = references.findIndex((foreign) => foreign.$id === schema.$ref);
244
- if (index === -1)
245
- throw new ValueCastDereferenceError(schema);
246
- const target = references[index];
247
- return Visit(target, references, value);
248
- }
249
- function TString(schema, references, value) {
250
- return ValueCheck.Check(schema, references, value) ? value : ValueCreate.Create(schema, references);
251
- }
252
- function TSymbol(schema, references, value) {
253
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
254
- }
255
- function TTemplateLiteral(schema, references, value) {
256
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
202
+ return Visit((0, deref_1.Deref)(schema, references), references, value);
257
203
  }
258
204
  function TThis(schema, references, value) {
259
- const index = references.findIndex((foreign) => foreign.$id === schema.$ref);
260
- if (index === -1)
261
- throw new ValueCastDereferenceError(schema);
262
- const target = references[index];
263
- return Visit(target, references, value);
205
+ return Visit((0, deref_1.Deref)(schema, references), references, value);
264
206
  }
265
207
  function TTuple(schema, references, value) {
266
- if (ValueCheck.Check(schema, references, value))
267
- return ValueClone.Clone(value);
268
- if (!ValueGuard.IsArray(value))
269
- return ValueCreate.Create(schema, references);
208
+ if ((0, check_1.Check)(schema, references, value))
209
+ return (0, clone_1.Clone)(value);
210
+ if (!(0, guard_1.IsArray)(value))
211
+ return (0, create_1.Create)(schema, references);
270
212
  if (schema.items === undefined)
271
213
  return [];
272
214
  return schema.items.map((schema, index) => Visit(schema, references, value[index]));
273
215
  }
274
- function TUndefined(schema, references, value) {
275
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
276
- }
277
216
  function TUnion(schema, references, value) {
278
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : UnionCastCreate.Create(schema, references, value);
279
- }
280
- function TUint8Array(schema, references, value) {
281
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
282
- }
283
- function TUnknown(schema, references, value) {
284
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
285
- }
286
- function TVoid(schema, references, value) {
287
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
288
- }
289
- function TKind(schema, references, value) {
290
- return ValueCheck.Check(schema, references, value) ? ValueClone.Clone(value) : ValueCreate.Create(schema, references);
217
+ return (0, check_1.Check)(schema, references, value) ? (0, clone_1.Clone)(value) : UnionCastCreate.Create(schema, references, value);
291
218
  }
292
219
  function Visit(schema, references, value) {
293
- const references_ = ValueGuard.IsString(schema.$id) ? [...references, schema] : references;
220
+ const references_ = (0, guard_1.IsString)(schema.$id) ? [...references, schema] : references;
294
221
  const schema_ = schema;
295
222
  switch (schema[Types.Kind]) {
296
- case 'Any':
297
- return TAny(schema_, references_, value);
223
+ // ------------------------------------------------------
224
+ // Structural
225
+ // ------------------------------------------------------
298
226
  case 'Array':
299
227
  return TArray(schema_, references_, value);
300
- case 'AsyncIterator':
301
- return TAsyncIterator(schema_, references_, value);
302
- case 'BigInt':
303
- return TBigInt(schema_, references_, value);
304
- case 'Boolean':
305
- return TBoolean(schema_, references_, value);
306
228
  case 'Constructor':
307
229
  return TConstructor(schema_, references_, value);
308
- case 'Date':
309
- return TDate(schema_, references_, value);
310
- case 'Function':
311
- return TFunction(schema_, references_, value);
312
- case 'Integer':
313
- return TInteger(schema_, references_, value);
314
230
  case 'Intersect':
315
231
  return TIntersect(schema_, references_, value);
316
- case 'Iterator':
317
- return TIterator(schema_, references_, value);
318
- case 'Literal':
319
- return TLiteral(schema_, references_, value);
320
232
  case 'Never':
321
233
  return TNever(schema_, references_, value);
322
- case 'Not':
323
- return TNot(schema_, references_, value);
324
- case 'Null':
325
- return TNull(schema_, references_, value);
326
- case 'Number':
327
- return TNumber(schema_, references_, value);
328
234
  case 'Object':
329
235
  return TObject(schema_, references_, value);
330
- case 'Promise':
331
- return TPromise(schema_, references_, value);
332
236
  case 'Record':
333
237
  return TRecord(schema_, references_, value);
334
238
  case 'Ref':
335
239
  return TRef(schema_, references_, value);
336
- case 'String':
337
- return TString(schema_, references_, value);
338
- case 'Symbol':
339
- return TSymbol(schema_, references_, value);
340
- case 'TemplateLiteral':
341
- return TTemplateLiteral(schema_, references_, value);
342
240
  case 'This':
343
241
  return TThis(schema_, references_, value);
344
242
  case 'Tuple':
345
243
  return TTuple(schema_, references_, value);
346
- case 'Undefined':
347
- return TUndefined(schema_, references_, value);
348
244
  case 'Union':
349
245
  return TUnion(schema_, references_, value);
246
+ // ------------------------------------------------------
247
+ // DefaultClone
248
+ // ------------------------------------------------------
249
+ case 'Date':
250
+ case 'Symbol':
350
251
  case 'Uint8Array':
351
- return TUint8Array(schema_, references_, value);
252
+ return DefaultClone(schema, references, value);
253
+ // ------------------------------------------------------
254
+ // Default
255
+ // ------------------------------------------------------
256
+ case 'Any':
257
+ case 'AsyncIterator':
258
+ case 'BigInt':
259
+ case 'Boolean':
260
+ case 'Function':
261
+ case 'Integer':
262
+ case 'Iterator':
263
+ case 'Literal':
264
+ case 'Not':
265
+ case 'Null':
266
+ case 'Number':
267
+ case 'Promise':
268
+ case 'String':
269
+ case 'TemplateLiteral':
270
+ case 'Undefined':
352
271
  case 'Unknown':
353
- return TUnknown(schema_, references_, value);
354
272
  case 'Void':
355
- return TVoid(schema_, references_, value);
273
+ return Default(schema_, references_, value);
356
274
  default:
357
275
  if (!Types.TypeRegistry.Has(schema_[Types.Kind]))
358
276
  throw new ValueCastUnknownTypeError(schema_);
359
- return TKind(schema_, references_, value);
277
+ return Default(schema_, references_, value);
360
278
  }
361
279
  }
362
280
  /** Casts a value into a given type. The return value will retain as much information of the original value as possible. */
package/value/check.d.ts CHANGED
@@ -1,12 +1,8 @@
1
1
  import * as Types from '../typebox';
2
- export declare class ValueCheckUnknownTypeError extends Error {
2
+ export declare class ValueCheckUnknownTypeError extends Types.TypeBoxError {
3
3
  readonly schema: Types.TSchema;
4
4
  constructor(schema: Types.TSchema);
5
5
  }
6
- export declare class ValueCheckDereferenceError extends Error {
7
- readonly schema: Types.TRef | Types.TThis;
8
- constructor(schema: Types.TRef | Types.TThis);
9
- }
10
6
  /** Returns true if the value matches the given type. */
11
7
  export declare function Check<T extends Types.TSchema>(schema: T, references: Types.TSchema[], value: unknown): value is Types.Static<T>;
12
8
  /** Returns true if the value matches the given type. */