@sinclair/typebox 0.32.30 → 0.32.32

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.
@@ -3,6 +3,7 @@ import type { Ensure, Evaluate, Assert } from '../helpers/index';
3
3
  import { type TArray } from '../array/index';
4
4
  import { type TAsyncIterator } from '../async-iterator/index';
5
5
  import { type TConstructor } from '../constructor/index';
6
+ import { type TEnum, type TEnumRecord } from '../enum/index';
6
7
  import { type TFunction } from '../function/index';
7
8
  import { type TIndexPropertyKeys } from '../indexed/index';
8
9
  import { type TIntersect } from '../intersect/index';
@@ -31,7 +32,7 @@ type FromProperties<K extends PropertyKey, T extends TProperties, R extends TPro
31
32
  [K2 in keyof T]: FromSchemaType<K, T[K2]>;
32
33
  }>> = R;
33
34
  declare function FromProperties<K extends PropertyKey, T extends TProperties>(K: K, T: T): FromProperties<K, T>;
34
- type FromSchemaType<K extends PropertyKey, T extends TSchema> = (T extends TReadonly<infer S> ? TReadonly<FromSchemaType<K, S>> : T extends TOptional<infer S> ? TOptional<FromSchemaType<K, S>> : T extends TMappedResult<infer P> ? TFromMappedResult<K, P> : T extends TMappedKey<infer P> ? TFromMappedKey<K, P> : T extends TConstructor<infer S extends TSchema[], infer R extends TSchema> ? TConstructor<TFromRest<K, S>, FromSchemaType<K, R>> : T extends TFunction<infer S extends TSchema[], infer R extends TSchema> ? TFunction<TFromRest<K, S>, FromSchemaType<K, R>> : T extends TAsyncIterator<infer S> ? TAsyncIterator<FromSchemaType<K, S>> : T extends TIterator<infer S> ? TIterator<FromSchemaType<K, S>> : T extends TIntersect<infer S> ? TIntersect<TFromRest<K, S>> : T extends TUnion<infer S> ? TUnion<TFromRest<K, S>> : T extends TTuple<infer S> ? TTuple<TFromRest<K, S>> : T extends TObject<infer S> ? TObject<FromProperties<K, S>> : T extends TArray<infer S> ? TArray<FromSchemaType<K, S>> : T extends TPromise<infer S> ? TPromise<FromSchemaType<K, S>> : T);
35
+ type FromSchemaType<K extends PropertyKey, T extends TSchema> = (T extends TReadonly<infer S extends TSchema> ? TReadonly<FromSchemaType<K, S>> : T extends TOptional<infer S extends TSchema> ? TOptional<FromSchemaType<K, S>> : T extends TMappedResult<infer P extends TProperties> ? TFromMappedResult<K, P> : T extends TMappedKey<infer P extends PropertyKey[]> ? TFromMappedKey<K, P> : T extends TConstructor<infer S extends TSchema[], infer R extends TSchema> ? TConstructor<TFromRest<K, S>, FromSchemaType<K, R>> : T extends TFunction<infer S extends TSchema[], infer R extends TSchema> ? TFunction<TFromRest<K, S>, FromSchemaType<K, R>> : T extends TAsyncIterator<infer S extends TSchema> ? TAsyncIterator<FromSchemaType<K, S>> : T extends TIterator<infer S extends TSchema> ? TIterator<FromSchemaType<K, S>> : T extends TIntersect<infer S extends TSchema[]> ? TIntersect<TFromRest<K, S>> : T extends TEnum<infer S extends TEnumRecord> ? TEnum<S> : T extends TUnion<infer S extends TSchema[]> ? TUnion<TFromRest<K, S>> : T extends TTuple<infer S extends TSchema[]> ? TTuple<TFromRest<K, S>> : T extends TObject<infer S extends TProperties> ? TObject<FromProperties<K, S>> : T extends TArray<infer S extends TSchema> ? TArray<FromSchemaType<K, S>> : T extends TPromise<infer S extends TSchema> ? TPromise<FromSchemaType<K, S>> : T);
35
36
  declare function FromSchemaType<K extends PropertyKey, T extends TSchema>(K: K, T: T): FromSchemaType<K, T>;
36
37
  export type TMappedFunctionReturnType<K extends PropertyKey[], T extends TSchema, Acc extends TProperties = {}> = (K extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? TMappedFunctionReturnType<R, T, Acc & {
37
38
  [_ in L]: FromSchemaType<L, T>;
@@ -45,8 +45,9 @@ function ScoreUnion(schema, references, value) {
45
45
  }
46
46
  }
47
47
  function SelectUnion(union, references, value) {
48
- let [select, best] = [union.anyOf[0], 0];
49
- for (const schema of union.anyOf) {
48
+ const schemas = union.anyOf.map((schema) => (0, index_7.Deref)(schema, references));
49
+ let [select, best] = [schemas[0], 0];
50
+ for (const schema of schemas) {
50
51
  const score = ScoreUnion(schema, references, value);
51
52
  if (score > best) {
52
53
  select = schema;
@@ -7,4 +7,4 @@ export declare class TypeDereferenceError extends TypeBoxError {
7
7
  constructor(schema: TRef | TThis);
8
8
  }
9
9
  /** Dereferences a schema from the references array or throws if not found */
10
- export declare function Deref(schema: TRef | TThis, references: TSchema[]): TSchema;
10
+ export declare function Deref(schema: TSchema, references: TSchema[]): TSchema;
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.Deref = exports.TypeDereferenceError = void 0;
5
5
  const index_1 = require("../../type/error/index");
6
+ const index_2 = require("../../type/symbols/index");
6
7
  class TypeDereferenceError extends index_1.TypeBoxError {
7
8
  constructor(schema) {
8
9
  super(`Unable to dereference schema with $id '${schema.$id}'`);
@@ -10,11 +11,17 @@ class TypeDereferenceError extends index_1.TypeBoxError {
10
11
  }
11
12
  }
12
13
  exports.TypeDereferenceError = TypeDereferenceError;
14
+ function Resolve(schema, references) {
15
+ const target = references.find((target) => target.$id === schema.$ref);
16
+ if (target === undefined)
17
+ throw new TypeDereferenceError(schema);
18
+ return Deref(target, references);
19
+ }
13
20
  /** Dereferences a schema from the references array or throws if not found */
14
21
  function Deref(schema, references) {
15
- const index = references.findIndex((target) => target.$id === schema.$ref);
16
- if (index === -1)
17
- throw new TypeDereferenceError(schema);
18
- return references[index];
22
+ // prettier-ignore
23
+ return (schema[index_2.Kind] === 'This' || schema[index_2.Kind] === 'Ref')
24
+ ? Resolve(schema, references)
25
+ : schema;
19
26
  }
20
27
  exports.Deref = Deref;
@@ -3,6 +3,7 @@ import type { Ensure, Evaluate, Assert } from '../helpers/index.mjs';
3
3
  import { type TArray } from '../array/index.mjs';
4
4
  import { type TAsyncIterator } from '../async-iterator/index.mjs';
5
5
  import { type TConstructor } from '../constructor/index.mjs';
6
+ import { type TEnum, type TEnumRecord } from '../enum/index.mjs';
6
7
  import { type TFunction } from '../function/index.mjs';
7
8
  import { type TIndexPropertyKeys } from '../indexed/index.mjs';
8
9
  import { type TIntersect } from '../intersect/index.mjs';
@@ -31,7 +32,7 @@ type FromProperties<K extends PropertyKey, T extends TProperties, R extends TPro
31
32
  [K2 in keyof T]: FromSchemaType<K, T[K2]>;
32
33
  }>> = R;
33
34
  declare function FromProperties<K extends PropertyKey, T extends TProperties>(K: K, T: T): FromProperties<K, T>;
34
- type FromSchemaType<K extends PropertyKey, T extends TSchema> = (T extends TReadonly<infer S> ? TReadonly<FromSchemaType<K, S>> : T extends TOptional<infer S> ? TOptional<FromSchemaType<K, S>> : T extends TMappedResult<infer P> ? TFromMappedResult<K, P> : T extends TMappedKey<infer P> ? TFromMappedKey<K, P> : T extends TConstructor<infer S extends TSchema[], infer R extends TSchema> ? TConstructor<TFromRest<K, S>, FromSchemaType<K, R>> : T extends TFunction<infer S extends TSchema[], infer R extends TSchema> ? TFunction<TFromRest<K, S>, FromSchemaType<K, R>> : T extends TAsyncIterator<infer S> ? TAsyncIterator<FromSchemaType<K, S>> : T extends TIterator<infer S> ? TIterator<FromSchemaType<K, S>> : T extends TIntersect<infer S> ? TIntersect<TFromRest<K, S>> : T extends TUnion<infer S> ? TUnion<TFromRest<K, S>> : T extends TTuple<infer S> ? TTuple<TFromRest<K, S>> : T extends TObject<infer S> ? TObject<FromProperties<K, S>> : T extends TArray<infer S> ? TArray<FromSchemaType<K, S>> : T extends TPromise<infer S> ? TPromise<FromSchemaType<K, S>> : T);
35
+ type FromSchemaType<K extends PropertyKey, T extends TSchema> = (T extends TReadonly<infer S extends TSchema> ? TReadonly<FromSchemaType<K, S>> : T extends TOptional<infer S extends TSchema> ? TOptional<FromSchemaType<K, S>> : T extends TMappedResult<infer P extends TProperties> ? TFromMappedResult<K, P> : T extends TMappedKey<infer P extends PropertyKey[]> ? TFromMappedKey<K, P> : T extends TConstructor<infer S extends TSchema[], infer R extends TSchema> ? TConstructor<TFromRest<K, S>, FromSchemaType<K, R>> : T extends TFunction<infer S extends TSchema[], infer R extends TSchema> ? TFunction<TFromRest<K, S>, FromSchemaType<K, R>> : T extends TAsyncIterator<infer S extends TSchema> ? TAsyncIterator<FromSchemaType<K, S>> : T extends TIterator<infer S extends TSchema> ? TIterator<FromSchemaType<K, S>> : T extends TIntersect<infer S extends TSchema[]> ? TIntersect<TFromRest<K, S>> : T extends TEnum<infer S extends TEnumRecord> ? TEnum<S> : T extends TUnion<infer S extends TSchema[]> ? TUnion<TFromRest<K, S>> : T extends TTuple<infer S extends TSchema[]> ? TTuple<TFromRest<K, S>> : T extends TObject<infer S extends TProperties> ? TObject<FromProperties<K, S>> : T extends TArray<infer S extends TSchema> ? TArray<FromSchemaType<K, S>> : T extends TPromise<infer S extends TSchema> ? TPromise<FromSchemaType<K, S>> : T);
35
36
  declare function FromSchemaType<K extends PropertyKey, T extends TSchema>(K: K, T: T): FromSchemaType<K, T>;
36
37
  export type TMappedFunctionReturnType<K extends PropertyKey[], T extends TSchema, Acc extends TProperties = {}> = (K extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? TMappedFunctionReturnType<R, T, Acc & {
37
38
  [_ in L]: FromSchemaType<L, T>;
@@ -41,8 +41,9 @@ function ScoreUnion(schema, references, value) {
41
41
  }
42
42
  }
43
43
  function SelectUnion(union, references, value) {
44
- let [select, best] = [union.anyOf[0], 0];
45
- for (const schema of union.anyOf) {
44
+ const schemas = union.anyOf.map((schema) => Deref(schema, references));
45
+ let [select, best] = [schemas[0], 0];
46
+ for (const schema of schemas) {
46
47
  const score = ScoreUnion(schema, references, value);
47
48
  if (score > best) {
48
49
  select = schema;
@@ -7,4 +7,4 @@ export declare class TypeDereferenceError extends TypeBoxError {
7
7
  constructor(schema: TRef | TThis);
8
8
  }
9
9
  /** Dereferences a schema from the references array or throws if not found */
10
- export declare function Deref(schema: TRef | TThis, references: TSchema[]): TSchema;
10
+ export declare function Deref(schema: TSchema, references: TSchema[]): TSchema;
@@ -1,4 +1,5 @@
1
1
  import { TypeBoxError } from '../../type/error/index.mjs';
2
+ import { Kind } from '../../type/symbols/index.mjs';
2
3
  export class TypeDereferenceError extends TypeBoxError {
3
4
  schema;
4
5
  constructor(schema) {
@@ -6,10 +7,16 @@ export class TypeDereferenceError extends TypeBoxError {
6
7
  this.schema = schema;
7
8
  }
8
9
  }
10
+ function Resolve(schema, references) {
11
+ const target = references.find((target) => target.$id === schema.$ref);
12
+ if (target === undefined)
13
+ throw new TypeDereferenceError(schema);
14
+ return Deref(target, references);
15
+ }
9
16
  /** Dereferences a schema from the references array or throws if not found */
10
17
  export function Deref(schema, references) {
11
- const index = references.findIndex((target) => target.$id === schema.$ref);
12
- if (index === -1)
13
- throw new TypeDereferenceError(schema);
14
- return references[index];
18
+ // prettier-ignore
19
+ return (schema[Kind] === 'This' || schema[Kind] === 'Ref')
20
+ ? Resolve(schema, references)
21
+ : schema;
15
22
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sinclair/typebox",
3
- "version": "0.32.30",
3
+ "version": "0.32.32",
4
4
  "description": "Json Schema Type Builder with Static Type Resolution for TypeScript",
5
5
  "keywords": [
6
6
  "typescript",