typebox 1.0.68 → 1.0.70
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/build/schema/static/schema.d.mts +3 -1
- package/build/system/memory/discard.mjs +1 -1
- package/build/system/memory/update.mjs +1 -1
- package/build/type/engine/evaluate/distribute.d.mts +2 -2
- package/build/type/engine/evaluate/distribute.mjs +2 -2
- package/build/type/engine/evaluate/evaluate.d.mts +4 -1
- package/build/type/engine/evaluate/evaluate.mjs +9 -1
- package/build/type/engine/evaluate/narrow.d.mts +2 -2
- package/build/type/engine/evaluate/narrow.mjs +2 -2
- package/build/type/engine/indexed/from-tuple.d.mts +3 -3
- package/build/type/engine/indexed/from-tuple.mjs +3 -3
- package/build/type/engine/keyof/from-object.d.mts +2 -2
- package/build/type/engine/keyof/from-object.mjs +2 -2
- package/build/type/engine/keyof/from-tuple.d.mts +2 -2
- package/build/type/engine/keyof/from-tuple.mjs +2 -2
- package/build/type/types/record.d.mts +4 -1
- package/build/value/create/from-type.mjs +1 -1
- package/package.json +1 -1
|
@@ -49,5 +49,7 @@ type TKeywordsIntersected<Schemas extends unknown[], Result extends unknown = un
|
|
|
49
49
|
type TKeywordsEvaluated<Schema extends unknown, Result extends unknown = Schema extends object ? {
|
|
50
50
|
[Key in keyof Schema]: Schema[Key];
|
|
51
51
|
} : Schema> = Result;
|
|
52
|
-
export type
|
|
52
|
+
export type XStaticObject<Stack extends string[], Root extends XSchema, Schema extends XSchema, Keywords extends unknown[] = TFromKeywords<Stack, Root, Schema>, Intersected extends unknown = TKeywordsIntersected<Keywords>, Evaluated extends unknown = TKeywordsEvaluated<Intersected>> = Evaluated;
|
|
53
|
+
export type XStaticBoolean<Schema extends boolean, Result extends unknown = Schema extends false ? never : unknown> = Result;
|
|
54
|
+
export type XStaticSchema<Stack extends string[], Root extends XSchema, Schema extends XSchema, Result extends unknown = Schema extends boolean ? XStaticBoolean<Schema> : XStaticObject<Stack, Root, Schema>> = Result;
|
|
53
55
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import { Settings } from '../settings/index.mjs';
|
|
3
|
-
import { Metrics } from
|
|
3
|
+
import { Metrics } from './metrics.mjs';
|
|
4
4
|
import { Clone } from './clone.mjs';
|
|
5
5
|
/**
|
|
6
6
|
* Updates a value with new properties while preserving property enumerability. Use this function to modify
|
|
@@ -5,8 +5,8 @@ import { type TObject } from '../../types/object.mjs';
|
|
|
5
5
|
import { type TTuple } from '../../types/tuple.mjs';
|
|
6
6
|
import { type TComposite } from './composite.mjs';
|
|
7
7
|
import { type TNarrow } from './narrow.mjs';
|
|
8
|
-
import { type TEvaluateType } from
|
|
9
|
-
import { type TEvaluateIntersect } from
|
|
8
|
+
import { type TEvaluateType } from './evaluate.mjs';
|
|
9
|
+
import { type TEvaluateIntersect } from './evaluate.mjs';
|
|
10
10
|
type TCanDistribute<Type extends TSchema> = Type extends TObject | TTuple ? true : false;
|
|
11
11
|
type TDistributeNormalize<Type extends TSchema> = Type extends TIntersect<infer Types extends TSchema[]> ? TEvaluateIntersect<Types> : Type;
|
|
12
12
|
type TDistributeOperation<Left extends TSchema, Right extends TSchema, NormalLeft extends TSchema = TDistributeNormalize<Left>, NormalRight extends TSchema = TDistributeNormalize<Right>, IsObjectLeft extends boolean = TCanDistribute<NormalLeft>, IsObjectRight extends boolean = TCanDistribute<NormalRight>, Result extends TSchema = ([
|
|
@@ -8,8 +8,8 @@ import { IsObject } from '../../types/object.mjs';
|
|
|
8
8
|
import { IsTuple } from '../../types/tuple.mjs';
|
|
9
9
|
import { Composite } from './composite.mjs';
|
|
10
10
|
import { Narrow } from './narrow.mjs';
|
|
11
|
-
import { EvaluateType } from
|
|
12
|
-
import { EvaluateIntersect } from
|
|
11
|
+
import { EvaluateType } from './evaluate.mjs';
|
|
12
|
+
import { EvaluateIntersect } from './evaluate.mjs';
|
|
13
13
|
function CanDistribute(type) {
|
|
14
14
|
return IsObject(type) || IsTuple(type);
|
|
15
15
|
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { type TSchema } from '../../types/schema.mjs';
|
|
2
2
|
import { type TIntersect } from '../../types/intersect.mjs';
|
|
3
|
-
import { type TUnion } from '../../types/union.mjs';
|
|
4
3
|
import { type TDistribute } from './distribute.mjs';
|
|
5
4
|
import { type TBroaden } from './broaden.mjs';
|
|
5
|
+
import { type TUnion } from '../../types/union.mjs';
|
|
6
|
+
import { type TNever } from '../../types/never.mjs';
|
|
6
7
|
export type TEvaluateIntersect<Types extends TSchema[], Distribution extends TSchema[] = TDistribute<Types>, Result extends TSchema = TBroaden<Distribution>> = Result;
|
|
7
8
|
export declare function EvaluateIntersect<Types extends TSchema[]>(types: [...Types]): TEvaluateIntersect<Types>;
|
|
8
9
|
export type TEvaluateUnion<Types extends TSchema[], Result extends TSchema = TBroaden<Types>> = Result;
|
|
9
10
|
export declare function EvaluateUnion<Types extends TSchema[]>(types: [...Types]): TEvaluateUnion<Types>;
|
|
10
11
|
export type TEvaluateType<Type extends TSchema, Result extends TSchema = (Type extends TIntersect<infer Types extends TSchema[]> ? TEvaluateIntersect<Types> : Type extends TUnion<infer Types extends TSchema[]> ? TEvaluateUnion<Types> : Type)> = Result;
|
|
11
12
|
export declare function EvaluateType<Type extends TSchema>(type: Type): TEvaluateType<Type>;
|
|
13
|
+
export type TEvaluateUnionFast<Types extends TSchema[], Result extends TSchema = (Types extends [infer Type extends TSchema] ? Type : Types extends [] ? TNever : TUnion<Types>)> = Result;
|
|
14
|
+
export declare function EvaluateUnionFast<Types extends TSchema[]>(types: [...Types]): TEvaluateUnionFast<Types>;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
|
+
import { Guard } from '../../../guard/index.mjs';
|
|
2
3
|
import { IsIntersect } from '../../types/intersect.mjs';
|
|
3
|
-
import { IsUnion } from '../../types/union.mjs';
|
|
4
4
|
import { Distribute } from './distribute.mjs';
|
|
5
5
|
import { Broaden } from './broaden.mjs';
|
|
6
|
+
import { Union, IsUnion } from '../../types/union.mjs';
|
|
7
|
+
import { Never } from '../../types/never.mjs';
|
|
6
8
|
export function EvaluateIntersect(types) {
|
|
7
9
|
const distribution = Distribute(types);
|
|
8
10
|
const result = Broaden(distribution);
|
|
@@ -17,3 +19,9 @@ export function EvaluateType(type) {
|
|
|
17
19
|
IsUnion(type) ? EvaluateUnion(type.anyOf) :
|
|
18
20
|
type);
|
|
19
21
|
}
|
|
22
|
+
export function EvaluateUnionFast(types) {
|
|
23
|
+
const result = (Guard.IsEqual(types.length, 1) ? types[0] :
|
|
24
|
+
Guard.IsEqual(types.length, 0) ? Never() :
|
|
25
|
+
Union(types));
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TSchema } from '../../types/schema.mjs';
|
|
2
|
-
import { TNever } from
|
|
3
|
-
import { TCompare, TCompareResult, ResultLeftInside, ResultRightInside, ResultEqual } from
|
|
2
|
+
import { TNever } from '../../types/never.mjs';
|
|
3
|
+
import { TCompare, TCompareResult, ResultLeftInside, ResultRightInside, ResultEqual } from './compare.mjs';
|
|
4
4
|
export type TNarrow<Left extends TSchema, Right extends TSchema, Result extends TCompareResult = TCompare<Left, Right>> = (Result extends typeof ResultLeftInside ? Left : Result extends typeof ResultRightInside ? Right : Result extends typeof ResultEqual ? Right : TNever);
|
|
5
5
|
export declare function Narrow<Left extends TSchema, Right extends TSchema>(left: Left, right: Right): TNarrow<Left, Right>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import { Guard } from '../../../guard/index.mjs';
|
|
3
|
-
import { Never } from
|
|
4
|
-
import { Compare, ResultLeftInside, ResultRightInside, ResultEqual } from
|
|
3
|
+
import { Never } from '../../types/never.mjs';
|
|
4
|
+
import { Compare, ResultLeftInside, ResultRightInside, ResultEqual } from './compare.mjs';
|
|
5
5
|
export function Narrow(left, right) {
|
|
6
6
|
const result = Compare(left, right);
|
|
7
7
|
return (Guard.IsEqual(result, ResultLeftInside) ? left :
|
|
@@ -2,12 +2,12 @@ import { type TSchema } from '../../types/schema.mjs';
|
|
|
2
2
|
import { type TLiteral } from '../../types/literal.mjs';
|
|
3
3
|
import { type TNumber } from '../../types/number.mjs';
|
|
4
4
|
import { type TInteger } from '../../types/integer.mjs';
|
|
5
|
-
import { type
|
|
5
|
+
import { type TEvaluateUnionFast } from '../evaluate/evaluate.mjs';
|
|
6
6
|
import { type TExtends, ExtendsResult } from '../../extends/index.mjs';
|
|
7
7
|
import { type TFormatArrayIndexer } from './array-indexer.mjs';
|
|
8
8
|
type TIndexElementsWithIndexer<Types extends TSchema[], Indexer extends TSchema, Result extends TSchema[] = []> = (Types extends [...infer Left extends TSchema[], infer Right extends TSchema] ? TExtends<{}, TLiteral<Left['length']>, Indexer> extends ExtendsResult.TExtendsTrueLike ? TIndexElementsWithIndexer<Left, Indexer, [Right, ...Result]> : TIndexElementsWithIndexer<Left, Indexer, Result> : Result);
|
|
9
|
-
type TFromTupleWithIndexer<Types extends TSchema[], Indexer extends TSchema, ArrayIndexer extends TSchema = TFormatArrayIndexer<Indexer>, Elements extends TSchema[] = TIndexElementsWithIndexer<Types, ArrayIndexer>, Result extends TSchema =
|
|
10
|
-
type TFromTupleWithoutIndexer<Types extends TSchema[], Result extends TSchema =
|
|
9
|
+
type TFromTupleWithIndexer<Types extends TSchema[], Indexer extends TSchema, ArrayIndexer extends TSchema = TFormatArrayIndexer<Indexer>, Elements extends TSchema[] = TIndexElementsWithIndexer<Types, ArrayIndexer>, Result extends TSchema = TEvaluateUnionFast<Elements>> = Result;
|
|
10
|
+
type TFromTupleWithoutIndexer<Types extends TSchema[], Result extends TSchema = TEvaluateUnionFast<Types>> = Result;
|
|
11
11
|
export type TFromTuple<Types extends TSchema[], Indexer extends TSchema, Result extends TSchema = (Indexer extends TNumber | TInteger ? TFromTupleWithoutIndexer<Types> : TFromTupleWithIndexer<Types, Indexer>)> = Result;
|
|
12
12
|
export declare function FromTuple<Types extends TSchema[], Indexer extends TSchema>(types: [...Types], indexer: Indexer): TFromTuple<Types, Indexer>;
|
|
13
13
|
export {};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Literal } from '../../types/literal.mjs';
|
|
3
3
|
import { IsNumber } from '../../types/number.mjs';
|
|
4
4
|
import { IsInteger } from '../../types/integer.mjs';
|
|
5
|
-
import {
|
|
5
|
+
import { EvaluateUnionFast } from '../evaluate/evaluate.mjs';
|
|
6
6
|
import { Extends, ExtendsResult } from '../../extends/index.mjs';
|
|
7
7
|
import { FormatArrayIndexer } from './array-indexer.mjs';
|
|
8
8
|
function IndexElementsWithIndexer(types, indexer) {
|
|
@@ -16,10 +16,10 @@ function IndexElementsWithIndexer(types, indexer) {
|
|
|
16
16
|
function FromTupleWithIndexer(types, indexer) {
|
|
17
17
|
const formattedArrayIndexer = FormatArrayIndexer(indexer);
|
|
18
18
|
const elements = IndexElementsWithIndexer(types, formattedArrayIndexer);
|
|
19
|
-
return
|
|
19
|
+
return EvaluateUnionFast(elements);
|
|
20
20
|
}
|
|
21
21
|
function FromTupleWithoutIndexer(types) {
|
|
22
|
-
return
|
|
22
|
+
return EvaluateUnionFast(types);
|
|
23
23
|
}
|
|
24
24
|
export function FromTuple(types, indexer) {
|
|
25
25
|
return (IsNumber(indexer) || IsInteger(indexer)
|
|
@@ -3,8 +3,8 @@ import { type TSchema } from '../../types/index.mjs';
|
|
|
3
3
|
import { type TUnionToTuple } from '../helpers/index.mjs';
|
|
4
4
|
import { type TProperties } from '../../types/properties.mjs';
|
|
5
5
|
import { type TLiteral, type TLiteralValue } from '../../types/literal.mjs';
|
|
6
|
-
import { type
|
|
6
|
+
import { type TEvaluateUnionFast } from '../evaluate/evaluate.mjs';
|
|
7
7
|
type TFromPropertyKeys<Keys extends PropertyKey[], Result extends TSchema[] = []> = (Keys extends [infer Left extends PropertyKey, ...infer Right extends PropertyKey[]] ? Left extends TLiteralValue ? TFromPropertyKeys<Right, [...Result, TLiteral<Left>]> : TUnreachable : Result);
|
|
8
|
-
export type TFromObject<Properties extends TProperties, PropertyKeys extends PropertyKey[] = TUnionToTuple<keyof Properties>, Variants extends TSchema[] = TFromPropertyKeys<PropertyKeys>, Result extends TSchema =
|
|
8
|
+
export type TFromObject<Properties extends TProperties, PropertyKeys extends PropertyKey[] = TUnionToTuple<keyof Properties>, Variants extends TSchema[] = TFromPropertyKeys<PropertyKeys>, Result extends TSchema = TEvaluateUnionFast<Variants>> = Result;
|
|
9
9
|
export declare function FromObject<Properties extends TProperties>(properties: Properties): TFromObject<Properties>;
|
|
10
10
|
export {};
|
|
@@ -3,7 +3,7 @@ import { Unreachable } from '../../../system/unreachable/index.mjs';
|
|
|
3
3
|
import { Guard } from '../../../guard/index.mjs';
|
|
4
4
|
import { Literal, IsLiteralValue } from '../../types/literal.mjs';
|
|
5
5
|
import { ConvertToIntegerKey } from '../helpers/keys.mjs';
|
|
6
|
-
import {
|
|
6
|
+
import { EvaluateUnionFast } from '../evaluate/evaluate.mjs';
|
|
7
7
|
function FromPropertyKeys(keys) {
|
|
8
8
|
const result = keys.reduce((result, left) => {
|
|
9
9
|
return IsLiteralValue(left)
|
|
@@ -15,6 +15,6 @@ function FromPropertyKeys(keys) {
|
|
|
15
15
|
export function FromObject(properties) {
|
|
16
16
|
const propertyKeys = Guard.Keys(properties);
|
|
17
17
|
const variants = FromPropertyKeys(propertyKeys);
|
|
18
|
-
const result =
|
|
18
|
+
const result = EvaluateUnionFast(variants);
|
|
19
19
|
return result;
|
|
20
20
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type TSchema } from '../../types/index.mjs';
|
|
2
2
|
import { type TLiteral } from '../../types/literal.mjs';
|
|
3
|
-
import { type
|
|
4
|
-
export type TFromTuple<Types extends TSchema[], Result extends TSchema[] = []> = (Types extends [...infer Left extends TSchema[], infer _ extends TSchema] ? TFromTuple<Left, [TLiteral<Left['length']>, ...Result]> :
|
|
3
|
+
import { type TEvaluateUnionFast } from '../evaluate/evaluate.mjs';
|
|
4
|
+
export type TFromTuple<Types extends TSchema[], Result extends TSchema[] = []> = (Types extends [...infer Left extends TSchema[], infer _ extends TSchema] ? TFromTuple<Left, [TLiteral<Left['length']>, ...Result]> : TEvaluateUnionFast<Result>);
|
|
5
5
|
export declare function FromTuple<Types extends TSchema[]>(types: [...Types]): TFromTuple<Types>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import { Literal } from '../../types/literal.mjs';
|
|
3
|
-
import {
|
|
3
|
+
import { EvaluateUnionFast } from '../evaluate/evaluate.mjs';
|
|
4
4
|
export function FromTuple(types) {
|
|
5
5
|
const result = types.map((_, index) => Literal(index));
|
|
6
|
-
return
|
|
6
|
+
return EvaluateUnionFast(result);
|
|
7
7
|
}
|
|
@@ -6,7 +6,9 @@ import { type TNumber } from './number.mjs';
|
|
|
6
6
|
import { type TString } from './string.mjs';
|
|
7
7
|
import { type TDeferred } from './deferred.mjs';
|
|
8
8
|
import { type TInstantiate } from '../engine/instantiate.mjs';
|
|
9
|
-
|
|
9
|
+
import { type TTemplateLiteralStatic } from '../engine/template-literal/index.mjs';
|
|
10
|
+
type StaticPropertyKey<Key extends string, Result extends PropertyKey = (Key extends TStringKey ? string : Key extends TIntegerKey ? number : Key extends TNumberKey ? number : Key extends `^${string}$` ? TTemplateLiteralStatic<Key> : string)> = Result;
|
|
11
|
+
export type StaticRecord<Stack extends string[], Direction extends StaticDirection, Context extends TProperties, This extends TProperties, Key extends string, Value extends TSchema, StaticKey extends PropertyKey = StaticPropertyKey<Key>, StaticValue extends unknown = StaticType<Stack, Direction, Context, This, Value>> = Record<StaticKey, StaticValue>;
|
|
10
12
|
export type TStringKey = typeof StringKey;
|
|
11
13
|
export type TIntegerKey = typeof IntegerKey;
|
|
12
14
|
export type TNumberKey = typeof NumberKey;
|
|
@@ -42,3 +44,4 @@ export type TRecordValue<Type extends TRecord, Result extends TSchema = Type['pa
|
|
|
42
44
|
export declare function RecordValue<Type extends TRecord>(type: Type): TRecordValue<Type>;
|
|
43
45
|
export declare function IsRecord(value: unknown): value is TRecord;
|
|
44
46
|
export declare function RecordOptions(type: TRecord): TObjectOptions;
|
|
47
|
+
export {};
|
|
@@ -14,7 +14,7 @@ import { FromFunction } from './from-function.mjs';
|
|
|
14
14
|
import { FromInteger } from './from-integer.mjs';
|
|
15
15
|
import { FromIntersect } from './from-intersect.mjs';
|
|
16
16
|
import { FromIterator } from './from-iterator.mjs';
|
|
17
|
-
import { FromLiteral } from
|
|
17
|
+
import { FromLiteral } from './from-literal.mjs';
|
|
18
18
|
import { FromNever } from './from-never.mjs';
|
|
19
19
|
import { FromNull } from './from-null.mjs';
|
|
20
20
|
import { FromNumber } from './from-number.mjs';
|