@sinclair/typebox 0.26.0-dev.4 → 0.26.0

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,26 +27,26 @@ THE SOFTWARE.
27
27
 
28
28
  ---------------------------------------------------------------------------*/
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- exports.ValueConvert = exports.ValueConvertUnknownTypeError = exports.ValueConvertReferenceTypeError = void 0;
30
+ exports.ValueConvert = exports.ValueConvertDereferenceError = exports.ValueConvertUnknownTypeError = void 0;
31
31
  const Types = require("../typebox");
32
32
  const clone_1 = require("./clone");
33
33
  // ----------------------------------------------------------------------------------------------
34
34
  // Errors
35
35
  // ----------------------------------------------------------------------------------------------
36
- class ValueConvertReferenceTypeError extends Error {
36
+ class ValueConvertUnknownTypeError extends Error {
37
37
  constructor(schema) {
38
- super(`ValueConvert: Cannot locate referenced schema with $id '${schema.$ref}'`);
38
+ super('ValueConvert: Unknown type');
39
39
  this.schema = schema;
40
40
  }
41
41
  }
42
- exports.ValueConvertReferenceTypeError = ValueConvertReferenceTypeError;
43
- class ValueConvertUnknownTypeError extends Error {
42
+ exports.ValueConvertUnknownTypeError = ValueConvertUnknownTypeError;
43
+ class ValueConvertDereferenceError extends Error {
44
44
  constructor(schema) {
45
- super('ValueConvert: Unknown type');
45
+ super(`ValueConvert: Unable to dereference schema with $id '${schema.$ref}'`);
46
46
  this.schema = schema;
47
47
  }
48
48
  }
49
- exports.ValueConvertUnknownTypeError = ValueConvertUnknownTypeError;
49
+ exports.ValueConvertDereferenceError = ValueConvertDereferenceError;
50
50
  var ValueConvert;
51
51
  (function (ValueConvert) {
52
52
  // ----------------------------------------------------------------------------------------------
@@ -183,163 +183,172 @@ var ValueConvert;
183
183
  // ----------------------------------------------------------------------------------------------
184
184
  // Cast
185
185
  // ----------------------------------------------------------------------------------------------
186
- function Any(schema, value) {
186
+ function Any(schema, references, value) {
187
187
  return value;
188
188
  }
189
- function Array(schema, value) {
189
+ function Array(schema, references, value) {
190
190
  if (IsArray(value)) {
191
- return value.map((value) => Visit(schema.items, value));
191
+ return value.map((value) => Visit(schema.items, references, value));
192
192
  }
193
193
  return value;
194
194
  }
195
- function BigInt(schema, value) {
195
+ function BigInt(schema, references, value) {
196
196
  return TryConvertBigInt(value);
197
197
  }
198
- function Boolean(schema, value) {
198
+ function Boolean(schema, references, value) {
199
199
  return TryConvertBoolean(value);
200
200
  }
201
- function Constructor(schema, value) {
201
+ function Constructor(schema, references, value) {
202
202
  return clone_1.ValueClone.Clone(value);
203
203
  }
204
- function Date(schema, value) {
204
+ function Date(schema, references, value) {
205
205
  return TryConvertDate(value);
206
206
  }
207
- function Function(schema, value) {
207
+ function Function(schema, references, value) {
208
208
  return value;
209
209
  }
210
- function Integer(schema, value) {
210
+ function Integer(schema, references, value) {
211
211
  return TryConvertInteger(value);
212
212
  }
213
- function Intersect(schema, value) {
213
+ function Intersect(schema, references, value) {
214
214
  return value;
215
215
  }
216
- function Literal(schema, value) {
216
+ function Literal(schema, references, value) {
217
217
  return TryConvertLiteral(schema, value);
218
218
  }
219
- function Never(schema, value) {
219
+ function Never(schema, references, value) {
220
220
  return value;
221
221
  }
222
- function Null(schema, value) {
222
+ function Null(schema, references, value) {
223
223
  return TryConvertNull(value);
224
224
  }
225
- function Number(schema, value) {
225
+ function Number(schema, references, value) {
226
226
  return TryConvertNumber(value);
227
227
  }
228
- function Object(schema, value) {
228
+ function Object(schema, references, value) {
229
229
  if (IsObject(value))
230
230
  return globalThis.Object.keys(schema.properties).reduce((acc, key) => {
231
- return value[key] !== undefined ? { ...acc, [key]: Visit(schema.properties[key], value[key]) } : { ...acc };
231
+ return value[key] !== undefined ? { ...acc, [key]: Visit(schema.properties[key], references, value[key]) } : { ...acc };
232
232
  }, value);
233
233
  return value;
234
234
  }
235
- function Promise(schema, value) {
235
+ function Promise(schema, references, value) {
236
236
  return value;
237
237
  }
238
- function Record(schema, value) {
238
+ function Record(schema, references, value) {
239
239
  return value;
240
240
  }
241
- function Ref(schema, value) {
242
- return Visit(Types.ReferenceRegistry.DerefOne(schema), value);
243
- }
244
- function Self(schema, value) {
245
- return Visit(Types.ReferenceRegistry.DerefOne(schema), value);
246
- }
247
- function String(schema, value) {
241
+ function Ref(schema, references, value) {
242
+ const index = references.findIndex((foreign) => foreign.$id === schema.$ref);
243
+ if (index === -1)
244
+ throw new ValueConvertDereferenceError(schema);
245
+ const target = references[index];
246
+ return Visit(target, references, value);
247
+ }
248
+ function Self(schema, references, value) {
249
+ const index = references.findIndex((foreign) => foreign.$id === schema.$ref);
250
+ if (index === -1)
251
+ throw new ValueConvertDereferenceError(schema);
252
+ const target = references[index];
253
+ return Visit(target, references, value);
254
+ }
255
+ function String(schema, references, value) {
248
256
  return TryConvertString(value);
249
257
  }
250
- function Symbol(schema, value) {
258
+ function Symbol(schema, references, value) {
251
259
  return value;
252
260
  }
253
- function Tuple(schema, value) {
261
+ function Tuple(schema, references, value) {
254
262
  if (IsArray(value) && schema.items !== undefined) {
255
263
  return value.map((value, index) => {
256
- return index < schema.items.length ? Visit(schema.items[index], value) : value;
264
+ return index < schema.items.length ? Visit(schema.items[index], references, value) : value;
257
265
  });
258
266
  }
259
267
  return value;
260
268
  }
261
- function Undefined(schema, value) {
269
+ function Undefined(schema, references, value) {
262
270
  return TryConvertUndefined(value);
263
271
  }
264
- function Union(schema, value) {
272
+ function Union(schema, references, value) {
265
273
  return value;
266
274
  }
267
- function Uint8Array(schema, value) {
275
+ function Uint8Array(schema, references, value) {
268
276
  return value;
269
277
  }
270
- function Unknown(schema, value) {
278
+ function Unknown(schema, references, value) {
271
279
  return value;
272
280
  }
273
- function Void(schema, value) {
281
+ function Void(schema, references, value) {
274
282
  return value;
275
283
  }
276
- function UserDefined(schema, value) {
284
+ function UserDefined(schema, references, value) {
277
285
  return value;
278
286
  }
279
- function Visit(schema, value) {
280
- const anySchema = schema;
287
+ function Visit(schema, references, value) {
288
+ const references_ = IsString(schema.$id) ? [...references, schema] : references;
289
+ const schema_ = schema;
281
290
  switch (schema[Types.Kind]) {
282
291
  case 'Any':
283
- return Any(anySchema, value);
292
+ return Any(schema_, references_, value);
284
293
  case 'Array':
285
- return Array(anySchema, value);
294
+ return Array(schema_, references_, value);
286
295
  case 'BigInt':
287
- return BigInt(anySchema, value);
296
+ return BigInt(schema_, references_, value);
288
297
  case 'Boolean':
289
- return Boolean(anySchema, value);
298
+ return Boolean(schema_, references_, value);
290
299
  case 'Constructor':
291
- return Constructor(anySchema, value);
300
+ return Constructor(schema_, references_, value);
292
301
  case 'Date':
293
- return Date(anySchema, value);
302
+ return Date(schema_, references_, value);
294
303
  case 'Function':
295
- return Function(anySchema, value);
304
+ return Function(schema_, references_, value);
296
305
  case 'Integer':
297
- return Integer(anySchema, value);
306
+ return Integer(schema_, references_, value);
298
307
  case 'Intersect':
299
- return Intersect(anySchema, value);
308
+ return Intersect(schema_, references_, value);
300
309
  case 'Literal':
301
- return Literal(anySchema, value);
310
+ return Literal(schema_, references_, value);
302
311
  case 'Never':
303
- return Never(anySchema, value);
312
+ return Never(schema_, references_, value);
304
313
  case 'Null':
305
- return Null(anySchema, value);
314
+ return Null(schema_, references_, value);
306
315
  case 'Number':
307
- return Number(anySchema, value);
316
+ return Number(schema_, references_, value);
308
317
  case 'Object':
309
- return Object(anySchema, value);
318
+ return Object(schema_, references_, value);
310
319
  case 'Promise':
311
- return Promise(anySchema, value);
320
+ return Promise(schema_, references_, value);
312
321
  case 'Record':
313
- return Record(anySchema, value);
322
+ return Record(schema_, references_, value);
314
323
  case 'Ref':
315
- return Ref(anySchema, value);
324
+ return Ref(schema_, references_, value);
316
325
  case 'Self':
317
- return Self(anySchema, value);
326
+ return Self(schema_, references_, value);
318
327
  case 'String':
319
- return String(anySchema, value);
328
+ return String(schema_, references_, value);
320
329
  case 'Symbol':
321
- return Symbol(anySchema, value);
330
+ return Symbol(schema_, references_, value);
322
331
  case 'Tuple':
323
- return Tuple(anySchema, value);
332
+ return Tuple(schema_, references_, value);
324
333
  case 'Undefined':
325
- return Undefined(anySchema, value);
334
+ return Undefined(schema_, references_, value);
326
335
  case 'Union':
327
- return Union(anySchema, value);
336
+ return Union(schema_, references_, value);
328
337
  case 'Uint8Array':
329
- return Uint8Array(anySchema, value);
338
+ return Uint8Array(schema_, references_, value);
330
339
  case 'Unknown':
331
- return Unknown(anySchema, value);
340
+ return Unknown(schema_, references_, value);
332
341
  case 'Void':
333
- return Void(anySchema, value);
342
+ return Void(schema_, references_, value);
334
343
  default:
335
- if (!Types.TypeRegistry.Has(anySchema[Types.Kind]))
336
- throw new ValueConvertUnknownTypeError(anySchema);
337
- return UserDefined(anySchema, value);
344
+ if (!Types.TypeRegistry.Has(schema_[Types.Kind]))
345
+ throw new ValueConvertUnknownTypeError(schema_);
346
+ return UserDefined(schema_, references_, value);
338
347
  }
339
348
  }
340
349
  ValueConvert.Visit = Visit;
341
- function Convert(schema, value) {
342
- return Visit(schema, clone_1.ValueClone.Clone(value));
350
+ function Convert(schema, references, value) {
351
+ return Visit(schema, references, clone_1.ValueClone.Clone(value));
343
352
  }
344
353
  ValueConvert.Convert = Convert;
345
354
  })(ValueConvert = exports.ValueConvert || (exports.ValueConvert = {}));
package/value/create.d.ts CHANGED
@@ -11,8 +11,12 @@ export declare class ValueCreateIntersectTypeError extends Error {
11
11
  readonly schema: Types.TSchema;
12
12
  constructor(schema: Types.TSchema);
13
13
  }
14
+ export declare class ValueCreateDereferenceError extends Error {
15
+ readonly schema: Types.TRef | Types.TSelf;
16
+ constructor(schema: Types.TRef | Types.TSelf);
17
+ }
14
18
  export declare namespace ValueCreate {
15
19
  /** Creates a value from the given schema. If the schema specifies a default value, then that value is returned. */
16
- function Visit<T extends Types.TSchema>(schema: T): Types.Static<T>;
17
- function Create<T extends Types.TSchema>(schema: T): Types.Static<T>;
20
+ function Visit(schema: Types.TSchema, references: Types.TSchema[]): unknown;
21
+ function Create<T extends Types.TSchema>(schema: T, references: Types.TSchema[]): Types.Static<T>;
18
22
  }