@sinclair/typebox 0.32.0-dev-21 → 0.32.0-dev-22
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/import/index.d.mts +2 -2
- package/build/import/type/awaited/awaited.d.mts +4 -6
- package/build/import/type/awaited/awaited.mjs +3 -3
- package/build/import/type/composite/composite.d.mts +8 -8
- package/build/import/type/const/const.d.mts +4 -7
- package/build/import/type/constructor/constructor.d.mts +4 -4
- package/build/import/type/deref/deref.d.mts +2 -2
- package/build/import/type/deref/deref.mjs +26 -36
- package/build/import/type/exclude/exclude-from-mapped-result.d.mts +4 -6
- package/build/import/type/exclude/exclude.d.mts +7 -8
- package/build/import/type/extends/extends-from-mapped-key.d.mts +5 -8
- package/build/import/type/extends/extends-from-mapped-key.mjs +3 -3
- package/build/import/type/extends/extends-from-mapped-result.d.mts +4 -6
- package/build/import/type/extends/extends.d.mts +2 -3
- package/build/import/type/extract/extract-from-mapped-result.d.mts +4 -6
- package/build/import/type/extract/extract.d.mts +8 -8
- package/build/import/type/function/function.d.mts +1 -1
- package/build/import/type/helpers/helpers.d.mts +1 -1
- package/build/import/type/index.d.mts +0 -1
- package/build/import/type/index.mjs +0 -1
- package/build/import/type/indexed/indexed-from-mapped-key.d.mts +5 -8
- package/build/import/type/indexed/indexed-from-mapped-key.mjs +3 -6
- package/build/import/type/indexed/indexed-property-keys.d.mts +4 -7
- package/build/import/type/indexed/indexed.d.mts +13 -23
- package/build/import/type/indexed/indexed.mjs +13 -13
- package/build/import/type/intersect/intersect-create.mjs +0 -1
- package/build/import/type/intersect/intersect-evaluated.d.mts +7 -11
- package/build/import/type/intersect/intersect-evaluated.mjs +12 -7
- package/build/import/type/intersect/intersect-type.d.mts +2 -2
- package/build/import/type/intersect/intersect.mjs +1 -2
- package/build/import/type/intrinsic/intrinsic-from-mapped-key.d.mts +7 -9
- package/build/import/type/intrinsic/intrinsic-from-mapped-key.mjs +3 -3
- package/build/import/type/intrinsic/intrinsic.d.mts +6 -8
- package/build/import/type/intrinsic/intrinsic.mjs +5 -3
- package/build/import/type/keyof/keyof-from-mapped-result.d.mts +4 -6
- package/build/import/type/keyof/keyof-property-keys.d.mts +9 -13
- package/build/import/type/keyof/keyof-property-keys.mjs +12 -9
- package/build/import/type/keyof/keyof.d.mts +7 -8
- package/build/import/type/keyof/keyof.mjs +8 -6
- package/build/import/type/mapped/mapped.d.mts +9 -13
- package/build/import/type/mapped/mapped.mjs +9 -9
- package/build/import/type/omit/omit-from-mapped-key.d.mts +5 -8
- package/build/import/type/omit/omit-from-mapped-key.mjs +3 -3
- package/build/import/type/omit/omit.d.mts +6 -9
- package/build/import/type/omit/omit.mjs +0 -1
- package/build/import/type/operators/operators.d.mts +16 -16
- package/build/import/type/operators/operators.mjs +21 -25
- package/build/import/type/optional/optional-from-mapped-result.d.mts +4 -6
- package/build/import/type/optional/optional.d.mts +3 -7
- package/build/import/type/partial/partial-from-mapped-result.d.mts +4 -6
- package/build/import/type/partial/partial.d.mts +4 -7
- package/build/import/type/partial/partial.mjs +6 -7
- package/build/import/type/pick/pick-from-mapped-key.d.mts +5 -8
- package/build/import/type/pick/pick-from-mapped-key.mjs +3 -3
- package/build/import/type/pick/pick.d.mts +4 -4
- package/build/import/type/readonly/readonly-from-mapped-result.d.mts +4 -6
- package/build/import/type/readonly/readonly.d.mts +3 -7
- package/build/import/type/record/record.d.mts +13 -19
- package/build/import/type/record/record.mjs +0 -1
- package/build/import/type/ref/ref.mjs +3 -0
- package/build/import/type/required/required-from-mapped-result.d.mts +4 -6
- package/build/import/type/required/required.d.mts +5 -9
- package/build/import/type/required/required.mjs +6 -7
- package/build/import/type/rest/rest.d.mts +3 -3
- package/build/import/type/static/static.d.mts +1 -1
- package/build/import/type/template-literal/finite.d.mts +3 -3
- package/build/import/type/template-literal/generate.d.mts +7 -8
- package/build/import/type/template-literal/syntax.d.mts +2 -2
- package/build/import/type/template-literal/syntax.mjs +2 -2
- package/build/import/type/transform/transform.mjs +0 -1
- package/build/import/type/tuple/tuple.d.mts +1 -2
- package/build/import/type/union/union-evaluated.d.mts +6 -10
- package/build/import/type/union/union-evaluated.mjs +7 -2
- package/build/require/index.d.ts +2 -2
- package/build/require/type/awaited/awaited.d.ts +4 -6
- package/build/require/type/awaited/awaited.js +3 -3
- package/build/require/type/composite/composite.d.ts +8 -8
- package/build/require/type/const/const.d.ts +4 -7
- package/build/require/type/constructor/constructor.d.ts +4 -4
- package/build/require/type/deref/deref.d.ts +2 -2
- package/build/require/type/deref/deref.js +25 -35
- package/build/require/type/exclude/exclude-from-mapped-result.d.ts +4 -6
- package/build/require/type/exclude/exclude.d.ts +7 -8
- package/build/require/type/extends/extends-from-mapped-key.d.ts +5 -8
- package/build/require/type/extends/extends-from-mapped-key.js +3 -3
- package/build/require/type/extends/extends-from-mapped-result.d.ts +4 -6
- package/build/require/type/extends/extends.d.ts +2 -3
- package/build/require/type/extract/extract-from-mapped-result.d.ts +4 -6
- package/build/require/type/extract/extract.d.ts +8 -8
- package/build/require/type/function/function.d.ts +1 -1
- package/build/require/type/helpers/helpers.d.ts +1 -1
- package/build/require/type/index.d.ts +0 -1
- package/build/require/type/index.js +0 -1
- package/build/require/type/indexed/indexed-from-mapped-key.d.ts +5 -8
- package/build/require/type/indexed/indexed-from-mapped-key.js +3 -6
- package/build/require/type/indexed/indexed-property-keys.d.ts +4 -7
- package/build/require/type/indexed/indexed.d.ts +13 -23
- package/build/require/type/indexed/indexed.js +13 -13
- package/build/require/type/intersect/intersect-create.js +0 -1
- package/build/require/type/intersect/intersect-evaluated.d.ts +7 -11
- package/build/require/type/intersect/intersect-evaluated.js +9 -4
- package/build/require/type/intersect/intersect-type.d.ts +2 -2
- package/build/require/type/intersect/intersect.js +0 -1
- package/build/require/type/intrinsic/intrinsic-from-mapped-key.d.ts +7 -9
- package/build/require/type/intrinsic/intrinsic-from-mapped-key.js +3 -3
- package/build/require/type/intrinsic/intrinsic.d.ts +6 -8
- package/build/require/type/intrinsic/intrinsic.js +5 -3
- package/build/require/type/keyof/keyof-from-mapped-result.d.ts +4 -6
- package/build/require/type/keyof/keyof-property-keys.d.ts +9 -13
- package/build/require/type/keyof/keyof-property-keys.js +12 -9
- package/build/require/type/keyof/keyof.d.ts +7 -8
- package/build/require/type/keyof/keyof.js +8 -6
- package/build/require/type/mapped/mapped.d.ts +9 -13
- package/build/require/type/mapped/mapped.js +9 -9
- package/build/require/type/omit/omit-from-mapped-key.d.ts +5 -8
- package/build/require/type/omit/omit-from-mapped-key.js +3 -3
- package/build/require/type/omit/omit.d.ts +6 -9
- package/build/require/type/omit/omit.js +0 -1
- package/build/require/type/operators/operators.d.ts +16 -16
- package/build/require/type/operators/operators.js +21 -25
- package/build/require/type/optional/optional-from-mapped-result.d.ts +4 -6
- package/build/require/type/optional/optional.d.ts +3 -7
- package/build/require/type/partial/partial-from-mapped-result.d.ts +4 -6
- package/build/require/type/partial/partial.d.ts +4 -7
- package/build/require/type/partial/partial.js +6 -7
- package/build/require/type/pick/pick-from-mapped-key.d.ts +5 -8
- package/build/require/type/pick/pick-from-mapped-key.js +3 -3
- package/build/require/type/pick/pick.d.ts +4 -4
- package/build/require/type/readonly/readonly-from-mapped-result.d.ts +4 -6
- package/build/require/type/readonly/readonly.d.ts +3 -7
- package/build/require/type/record/record.d.ts +13 -19
- package/build/require/type/record/record.js +0 -1
- package/build/require/type/ref/ref.js +3 -0
- package/build/require/type/required/required-from-mapped-result.d.ts +4 -6
- package/build/require/type/required/required.d.ts +5 -9
- package/build/require/type/required/required.js +6 -7
- package/build/require/type/rest/rest.d.ts +3 -3
- package/build/require/type/static/static.d.ts +1 -1
- package/build/require/type/template-literal/finite.d.ts +3 -3
- package/build/require/type/template-literal/generate.d.ts +7 -8
- package/build/require/type/template-literal/syntax.d.ts +2 -2
- package/build/require/type/template-literal/syntax.js +1 -1
- package/build/require/type/transform/transform.js +0 -1
- package/build/require/type/tuple/tuple.d.ts +1 -2
- package/build/require/type/union/union-evaluated.d.ts +6 -10
- package/build/require/type/union/union-evaluated.js +7 -2
- package/package.json +1 -1
- package/build/import/type/modifiers/index.d.mts +0 -1
- package/build/import/type/modifiers/index.mjs +0 -1
- package/build/import/type/modifiers/modifiers.d.mts +0 -18
- package/build/import/type/modifiers/modifiers.mjs +0 -50
- package/build/require/type/modifiers/index.d.ts +0 -1
- package/build/require/type/modifiers/index.js +0 -18
- package/build/require/type/modifiers/modifiers.d.ts +0 -18
- package/build/require/type/modifiers/modifiers.js +0 -56
|
@@ -3,7 +3,7 @@ import { Boolean } from '../boolean/index.mjs';
|
|
|
3
3
|
import { BigInt } from '../bigint/index.mjs';
|
|
4
4
|
import { Number } from '../number/index.mjs';
|
|
5
5
|
import { String } from '../string/index.mjs';
|
|
6
|
-
import {
|
|
6
|
+
import { UnionEvaluated } from '../union/index.mjs';
|
|
7
7
|
import { Never } from '../never/index.mjs';
|
|
8
8
|
// ------------------------------------------------------------------
|
|
9
9
|
// SyntaxParsers
|
|
@@ -19,7 +19,7 @@ function* FromUnion(syntax) {
|
|
|
19
19
|
const literals = trim.split('|').map((literal) => Literal(literal.trim()));
|
|
20
20
|
return (literals.length === 0 ? Never() :
|
|
21
21
|
literals.length === 1 ? literals[0] :
|
|
22
|
-
|
|
22
|
+
UnionEvaluated(literals));
|
|
23
23
|
})());
|
|
24
24
|
}
|
|
25
25
|
// prettier-ignore
|
|
@@ -3,7 +3,6 @@ import { TransformKind } from '../symbols/index.mjs';
|
|
|
3
3
|
// ------------------------------------------------------------------
|
|
4
4
|
// TypeGuard
|
|
5
5
|
// ------------------------------------------------------------------
|
|
6
|
-
// prettier-ignore
|
|
7
6
|
import { IsTransform } from '../guard/type.mjs';
|
|
8
7
|
// ------------------------------------------------------------------
|
|
9
8
|
// TransformBuilders
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { TSchema, SchemaOptions } from '../schema/index.mjs';
|
|
2
2
|
import type { Static } from '../static/index.mjs';
|
|
3
3
|
import { Kind } from '../symbols/index.mjs';
|
|
4
|
-
type
|
|
5
|
-
type TupleStatic<T extends TSchema[], P extends unknown[], R extends unknown[] = TupleStaticRest<T, P>> = R;
|
|
4
|
+
type TupleStatic<T extends TSchema[], P extends unknown[], Acc extends unknown[] = []> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TupleStatic<R, P, [...Acc, Static<L, P>]> : Acc;
|
|
6
5
|
export interface TTuple<T extends TSchema[] = TSchema[]> extends TSchema {
|
|
7
6
|
[Kind]: 'Tuple';
|
|
8
7
|
static: TupleStatic<T, this['params']>;
|
|
@@ -3,15 +3,11 @@ import { type TNever } from '../never/index.mjs';
|
|
|
3
3
|
import { type TOptional } from '../optional/index.mjs';
|
|
4
4
|
import type { TReadonly } from '../readonly/index.mjs';
|
|
5
5
|
import type { TUnion } from './union-type.mjs';
|
|
6
|
-
type
|
|
7
|
-
|
|
8
|
-
type
|
|
9
|
-
|
|
10
|
-
type
|
|
11
|
-
declare function RemoveOptionalFromType<T extends TSchema>(T: T): RemoveOptionalFromType<T>;
|
|
12
|
-
type ResolveUnion<T extends TSchema[], R extends TSchema[] = RemoveOptionalFromRest<T>> = (IsUnionOptional<T> extends true ? TOptional<TUnion<R>> : TUnion<R>);
|
|
13
|
-
declare function ResolveUnion<T extends TSchema[]>(T: T, options: SchemaOptions): ResolveUnion<T>;
|
|
14
|
-
export type UnionEvaluated<T extends TSchema[]> = (T extends [] ? TNever : T extends [TSchema] ? T[0] : ResolveUnion<T>);
|
|
6
|
+
type TIsUnionOptional<T extends TSchema[]> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? L extends TOptional<TSchema> ? true : TIsUnionOptional<R> : false);
|
|
7
|
+
type TRemoveOptionalFromRest<T extends TSchema[], Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? L extends TOptional<infer S extends TSchema> ? TRemoveOptionalFromRest<R, [...Acc, TRemoveOptionalFromType<S>]> : TRemoveOptionalFromRest<R, [...Acc, L]> : Acc);
|
|
8
|
+
type TRemoveOptionalFromType<T extends TSchema> = (T extends TReadonly<infer S extends TSchema> ? TReadonly<TRemoveOptionalFromType<S>> : T extends TOptional<infer S extends TSchema> ? TRemoveOptionalFromType<S> : T);
|
|
9
|
+
type TResolveUnion<T extends TSchema[], R extends TSchema[] = TRemoveOptionalFromRest<T>> = (TIsUnionOptional<T> extends true ? TOptional<TUnion<R>> : TUnion<R>);
|
|
10
|
+
export type TUnionEvaluated<T extends TSchema[]> = (T extends [] ? TNever : T extends [TSchema] ? T[0] : TResolveUnion<T>);
|
|
15
11
|
/** `[Json]` Creates an evaluated Union type */
|
|
16
|
-
export declare function UnionEvaluated<T extends TSchema[], R =
|
|
12
|
+
export declare function UnionEvaluated<T extends TSchema[], R = TUnionEvaluated<T>>(T: [...T], options?: SchemaOptions): R;
|
|
17
13
|
export {};
|
|
@@ -19,8 +19,13 @@ function IsUnionOptional(T) {
|
|
|
19
19
|
: false);
|
|
20
20
|
}
|
|
21
21
|
// prettier-ignore
|
|
22
|
-
function RemoveOptionalFromRest(T) {
|
|
23
|
-
|
|
22
|
+
function RemoveOptionalFromRest(T, Acc = []) {
|
|
23
|
+
const [L, ...R] = T;
|
|
24
|
+
return (T.length > 0
|
|
25
|
+
? IsOptional(L)
|
|
26
|
+
? RemoveOptionalFromRest(R, [...Acc, RemoveOptionalFromType(L)])
|
|
27
|
+
: RemoveOptionalFromRest(R, [...Acc, L])
|
|
28
|
+
: Acc);
|
|
24
29
|
}
|
|
25
30
|
// prettier-ignore
|
|
26
31
|
function RemoveOptionalFromType(T) {
|
package/build/require/index.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export { Increment, type Assert, type AssertType, type AssertRest, type AssertPr
|
|
|
24
24
|
export { Index, IndexPropertyKeys, IndexFromMappedKey, type TIndex, type TIndexPropertyKeys, type TIndexFromMappedKey } from './type/indexed/index';
|
|
25
25
|
export { InstanceType, type TInstanceType } from './type/instance-type/index';
|
|
26
26
|
export { Integer, type TInteger, type IntegerOptions } from './type/integer/index';
|
|
27
|
-
export { Intersect, IntersectEvaluated, type TIntersect, type IntersectOptions } from './type/intersect/index';
|
|
27
|
+
export { Intersect, IntersectEvaluated, type TIntersect, type TIntersectEvaluated, type IntersectOptions } from './type/intersect/index';
|
|
28
28
|
export { Iterator, type TIterator } from './type/iterator/index';
|
|
29
29
|
export { Intrinsic, IntrinsicFromMappedKey, type TIntrinsic, Capitalize, type TCapitalize, Lowercase, type TLowercase, Uncapitalize, type TUncapitalize, Uppercase, type TUppercase } from './type/intrinsic/index';
|
|
30
30
|
export { KeyOf, type TKeyOf, type KeyOfFromMappedResult, KeyOfPropertyKeys, KeyOfPattern } from './type/keyof/index';
|
|
@@ -60,7 +60,7 @@ export { Transform, TransformDecodeBuilder, TransformEncodeBuilder, type TTransf
|
|
|
60
60
|
export { Tuple, type TTuple } from './type/tuple/index';
|
|
61
61
|
export { Uint8Array, type TUint8Array, type Uint8ArrayOptions } from './type/uint8array/index';
|
|
62
62
|
export { Undefined, type TUndefined } from './type/undefined/index';
|
|
63
|
-
export { Union, UnionEvaluated, type TUnion } from './type/union/index';
|
|
63
|
+
export { Union, UnionEvaluated, type TUnion, type TUnionEvaluated } from './type/union/index';
|
|
64
64
|
export { Unknown, type TUnknown } from './type/unknown/index';
|
|
65
65
|
export { Unsafe, type TUnsafe } from './type/unsafe/index';
|
|
66
66
|
export { Void, type TVoid } from './type/void/index';
|
|
@@ -2,11 +2,9 @@ import type { TSchema, SchemaOptions } from '../schema/index';
|
|
|
2
2
|
import { type TIntersect } from '../intersect/index';
|
|
3
3
|
import { type TUnion } from '../union/index';
|
|
4
4
|
import { type TPromise } from '../promise/index';
|
|
5
|
-
type
|
|
6
|
-
|
|
7
|
-
type
|
|
8
|
-
declare function FromSchema<T extends TSchema>(T: T): FromSchema<T>;
|
|
9
|
-
export type TAwaited<T extends TSchema> = (FromSchema<T>);
|
|
5
|
+
type TFromRest<T extends TSchema[], Acc extends TSchema[] = []> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromRest<R, [...Acc, TFromSchema<L>]> : Acc;
|
|
6
|
+
type TFromSchema<T extends TSchema> = T extends TIntersect<infer S> ? TIntersect<TFromRest<S>> : T extends TUnion<infer S> ? TUnion<TFromRest<S>> : T extends TPromise<infer S> ? TFromSchema<S> : T;
|
|
7
|
+
export type TAwaited<T extends TSchema> = (TFromSchema<T>);
|
|
10
8
|
/** `[JavaScript]` Constructs a type by recursively unwrapping Promise types */
|
|
11
|
-
export declare function Awaited<T extends TSchema>(T: T, options?: SchemaOptions):
|
|
9
|
+
export declare function Awaited<T extends TSchema>(T: T, options?: SchemaOptions): TFromSchema<T>;
|
|
12
10
|
export {};
|
|
@@ -11,11 +11,11 @@ const type_1 = require("../clone/type");
|
|
|
11
11
|
// prettier-ignore
|
|
12
12
|
const type_2 = require("../guard/type");
|
|
13
13
|
// prettier-ignore
|
|
14
|
-
function FromRest(T) {
|
|
14
|
+
function FromRest(T, Acc = []) {
|
|
15
15
|
const [L, ...R] = T;
|
|
16
16
|
return (T.length > 0
|
|
17
|
-
?
|
|
18
|
-
:
|
|
17
|
+
? FromRest(R, [...Acc, FromSchema(L)])
|
|
18
|
+
: Acc);
|
|
19
19
|
}
|
|
20
20
|
// prettier-ignore
|
|
21
21
|
function FromIntersect(T) {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { UnionToTuple, Assert, Evaluate } from '../helpers/index';
|
|
2
|
-
import { type TObject, type ObjectOptions } from '../object/index';
|
|
2
|
+
import { type TObject, type TProperties, type ObjectOptions } from '../object/index';
|
|
3
3
|
import { type TIntersect } from '../intersect/index';
|
|
4
4
|
import { type TIndex } from '../indexed/index';
|
|
5
|
-
type
|
|
6
|
-
type
|
|
5
|
+
type TCompositeKeys<T extends TObject[], Acc extends PropertyKey = never> = T extends [infer L extends TObject, ...infer R extends TObject[]] ? TCompositeKeys<R, Acc | keyof L['properties']> : Acc;
|
|
6
|
+
type TCompositeIndex<T extends TIntersect<TObject[]>, K extends string[], Acc extends TProperties = {}> = K extends [infer L extends string, ...infer R extends string[]] ? TCompositeIndex<T, R, Acc & {
|
|
7
7
|
[_ in L]: TIndex<T, [L]>;
|
|
8
|
-
}
|
|
9
|
-
type
|
|
10
|
-
export type
|
|
11
|
-
export declare function CompositeResolve<T extends TObject[]>(T: [...T]):
|
|
12
|
-
export type TComposite<T extends TObject[]> =
|
|
8
|
+
}> : Acc;
|
|
9
|
+
type TCompositeReduce<T extends TObject[]> = UnionToTuple<TCompositeKeys<T>> extends infer K ? Evaluate<TCompositeIndex<TIntersect<T>, Assert<K, string[]>>> : {};
|
|
10
|
+
export type TCompositeResolve<T extends TObject[]> = TIntersect<T> extends TIntersect ? TObject<TCompositeReduce<T>> : TObject<{}>;
|
|
11
|
+
export declare function CompositeResolve<T extends TObject[]>(T: [...T]): TCompositeResolve<T>;
|
|
12
|
+
export type TComposite<T extends TObject[]> = TCompositeResolve<T>;
|
|
13
13
|
/** `[Json]` Creates a Composite object type */
|
|
14
14
|
export declare function Composite<T extends TObject[]>(T: [...T], options?: ObjectOptions): TComposite<T>;
|
|
15
15
|
export {};
|
|
@@ -14,15 +14,12 @@ import { type TReadonly } from '../readonly/index';
|
|
|
14
14
|
import { type TUndefined } from '../undefined/index';
|
|
15
15
|
import { type TUint8Array } from '../uint8array/index';
|
|
16
16
|
import { type TUnknown } from '../unknown/index';
|
|
17
|
-
type
|
|
18
|
-
|
|
19
|
-
type FromProperties<T extends Record<PropertyKey, unknown>> = {
|
|
17
|
+
type TFromArray<T extends readonly unknown[]> = T extends readonly [infer L extends unknown, ...infer R extends unknown[]] ? [FromValue<L, false>, ...TFromArray<R>] : T;
|
|
18
|
+
type TFromProperties<T extends Record<PropertyKey, unknown>> = {
|
|
20
19
|
-readonly [K in keyof T]: FromValue<T[K], false> extends infer R extends TSchema ? TReadonly<R> : TReadonly<TNever>;
|
|
21
20
|
};
|
|
22
|
-
|
|
23
|
-
type
|
|
24
|
-
declare function ConditionalReadonly<T extends TSchema, Root extends boolean>(T: T, root: Root): ConditionalReadonly<T, Root>;
|
|
25
|
-
type FromValue<T, Root extends boolean> = T extends AsyncIterableIterator<unknown> ? ConditionalReadonly<TAny, Root> : T extends IterableIterator<unknown> ? ConditionalReadonly<TAny, Root> : T extends readonly unknown[] ? TReadonly<TTuple<AssertRest<FromArray<T>>>> : T extends Uint8Array ? TUint8Array : T extends Date ? TDate : T extends Record<PropertyKey, unknown> ? ConditionalReadonly<TObject<Evaluate<FromProperties<T>>>, Root> : T extends Function ? ConditionalReadonly<TFunction<[], TUnknown>, Root> : T extends undefined ? TUndefined : T extends null ? TNull : T extends symbol ? TSymbol : T extends number ? TLiteral<T> : T extends boolean ? TLiteral<T> : T extends string ? TLiteral<T> : T extends bigint ? TBigInt : TObject<{}>;
|
|
21
|
+
type TConditionalReadonly<T extends TSchema, Root extends boolean> = Root extends true ? T : TReadonly<T>;
|
|
22
|
+
type FromValue<T, Root extends boolean> = T extends AsyncIterableIterator<unknown> ? TConditionalReadonly<TAny, Root> : T extends IterableIterator<unknown> ? TConditionalReadonly<TAny, Root> : T extends readonly unknown[] ? TReadonly<TTuple<AssertRest<TFromArray<T>>>> : T extends Uint8Array ? TUint8Array : T extends Date ? TDate : T extends Record<PropertyKey, unknown> ? TConditionalReadonly<TObject<Evaluate<TFromProperties<T>>>, Root> : T extends Function ? TConditionalReadonly<TFunction<[], TUnknown>, Root> : T extends undefined ? TUndefined : T extends null ? TNull : T extends symbol ? TSymbol : T extends number ? TLiteral<T> : T extends boolean ? TLiteral<T> : T extends string ? TLiteral<T> : T extends bigint ? TBigInt : TObject<{}>;
|
|
26
23
|
declare function FromValue<T, Root extends boolean>(value: T, root: Root): FromValue<T, Root>;
|
|
27
24
|
export type TConst<T> = FromValue<T, true>;
|
|
28
25
|
/** `[JavaScript]` Creates a readonly const type from the given value. */
|
|
@@ -2,12 +2,12 @@ import type { TSchema, SchemaOptions } from '../schema/index';
|
|
|
2
2
|
import type { Static } from '../static/index';
|
|
3
3
|
import type { Ensure } from '../helpers/index';
|
|
4
4
|
import { Kind } from '../symbols/index';
|
|
5
|
-
type
|
|
6
|
-
type
|
|
7
|
-
export type
|
|
5
|
+
type ConstructorStaticReturnType<T extends TSchema, P extends unknown[]> = Static<T, P>;
|
|
6
|
+
type ConstructorStaticParameters<T extends TSchema[], P extends unknown[], Acc extends unknown[] = []> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? ConstructorStaticParameters<R, P, [...Acc, Static<L, P>]> : Acc;
|
|
7
|
+
export type ConstructorStatic<T extends TSchema[], U extends TSchema, P extends unknown[]> = (Ensure<new (...param: ConstructorStaticParameters<T, P>) => ConstructorStaticReturnType<U, P>>);
|
|
8
8
|
export interface TConstructor<T extends TSchema[] = TSchema[], U extends TSchema = TSchema> extends TSchema {
|
|
9
9
|
[Kind]: 'Constructor';
|
|
10
|
-
static:
|
|
10
|
+
static: ConstructorStatic<T, U, this['params']>;
|
|
11
11
|
type: 'Constructor';
|
|
12
12
|
parameters: T;
|
|
13
13
|
returns: U;
|
|
@@ -11,12 +11,12 @@ import type { TConstructor } from '../constructor/index';
|
|
|
11
11
|
import type { TFunction } from '../function/index';
|
|
12
12
|
import type { TRef } from '../ref/index';
|
|
13
13
|
import type { TObject, TProperties } from '../object/index';
|
|
14
|
-
export type
|
|
14
|
+
export type TFromRest<T extends TSchema[], Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromRest<R, [...Acc, DerefResolve<L>]> : Acc);
|
|
15
15
|
type FromProperties<T extends TProperties> = Evaluate<{
|
|
16
16
|
[K in keyof T]: DerefResolve<T[K]>;
|
|
17
17
|
}>;
|
|
18
18
|
declare function FromProperties(properties: TProperties, references: TSchema[]): TProperties;
|
|
19
|
-
export type DerefResolve<T extends TSchema> = T extends TConstructor<infer S extends TSchema[], infer R extends TSchema> ? TConstructor<
|
|
19
|
+
export type DerefResolve<T extends TSchema> = T extends TConstructor<infer S extends TSchema[], infer R extends TSchema> ? TConstructor<TFromRest<S>, DerefResolve<R>> : T extends TFunction<infer S extends TSchema[], infer R extends TSchema> ? TFunction<TFromRest<S>, DerefResolve<R>> : T extends TIntersect<infer S extends TSchema[]> ? TIntersect<TFromRest<S>> : T extends TUnion<infer S extends TSchema[]> ? TUnion<TFromRest<S>> : T extends TTuple<infer S extends TSchema[]> ? TTuple<TFromRest<S>> : T extends TObject<infer S extends TProperties> ? TObject<FromProperties<S>> : T extends TArray<infer S extends TSchema> ? TArray<DerefResolve<S>> : T extends TPromise<infer S extends TSchema> ? TPromise<DerefResolve<S>> : T extends TAsyncIterator<infer S extends TSchema> ? TAsyncIterator<DerefResolve<S>> : T extends TIterator<infer S extends TSchema> ? TIterator<DerefResolve<S>> : T extends TRef<infer S extends TSchema> ? DerefResolve<S> : T;
|
|
20
20
|
export declare function DerefResolve<T extends TSchema>(schema: T, references: TSchema[]): TDeref<T>;
|
|
21
21
|
export type TDeref<T extends TSchema> = DerefResolve<T>;
|
|
22
22
|
/** `[Json]` Creates a dereferenced type */
|
|
@@ -21,67 +21,57 @@ function FromProperties(properties, references) {
|
|
|
21
21
|
}
|
|
22
22
|
// prettier-ignore
|
|
23
23
|
function FromConstructor(schema, references) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return clone;
|
|
24
|
+
schema.parameters = FromRest(schema.parameters, references);
|
|
25
|
+
schema.returns = Deref(schema.returns, references);
|
|
26
|
+
return schema;
|
|
28
27
|
}
|
|
29
28
|
// prettier-ignore
|
|
30
29
|
function FromFunction(schema, references) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return clone;
|
|
30
|
+
schema.parameters = FromRest(schema.parameters, references);
|
|
31
|
+
schema.returns = Deref(schema.returns, references);
|
|
32
|
+
return schema;
|
|
35
33
|
}
|
|
36
34
|
// prettier-ignore
|
|
37
35
|
function FromIntersect(schema, references) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return clone;
|
|
36
|
+
schema.allOf = FromRest(schema.allOf, references);
|
|
37
|
+
return schema;
|
|
41
38
|
}
|
|
42
39
|
// prettier-ignore
|
|
43
40
|
function FromUnion(schema, references) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return clone;
|
|
41
|
+
schema.anyOf = FromRest(schema.anyOf, references);
|
|
42
|
+
return schema;
|
|
47
43
|
}
|
|
48
44
|
// prettier-ignore
|
|
49
45
|
function FromTuple(schema, references) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return clone;
|
|
46
|
+
if ((0, value_1.IsUndefined)(schema.items))
|
|
47
|
+
return schema;
|
|
48
|
+
schema.items = FromRest(schema.items, references);
|
|
49
|
+
return schema;
|
|
55
50
|
}
|
|
56
51
|
// prettier-ignore
|
|
57
52
|
function FromArray(schema, references) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return clone;
|
|
53
|
+
schema.items = Deref(schema.items, references);
|
|
54
|
+
return schema;
|
|
61
55
|
}
|
|
62
56
|
// prettier-ignore
|
|
63
57
|
function FromObject(schema, references) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return clone;
|
|
58
|
+
schema.properties = FromProperties(schema.properties, references);
|
|
59
|
+
return schema;
|
|
67
60
|
}
|
|
68
61
|
// prettier-ignore
|
|
69
62
|
function FromPromise(schema, references) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return clone;
|
|
63
|
+
schema.item = Deref(schema.item, references);
|
|
64
|
+
return schema;
|
|
73
65
|
}
|
|
74
66
|
// prettier-ignore
|
|
75
67
|
function FromAsyncIterator(schema, references) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return clone;
|
|
68
|
+
schema.items = Deref(schema.items, references);
|
|
69
|
+
return schema;
|
|
79
70
|
}
|
|
80
71
|
// prettier-ignore
|
|
81
72
|
function FromIterator(schema, references) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return clone;
|
|
73
|
+
schema.items = Deref(schema.items, references);
|
|
74
|
+
return schema;
|
|
85
75
|
}
|
|
86
76
|
// prettier-ignore
|
|
87
77
|
function FromRef(schema, references) {
|
|
@@ -109,6 +99,6 @@ function DerefResolve(schema, references) {
|
|
|
109
99
|
exports.DerefResolve = DerefResolve;
|
|
110
100
|
/** `[Json]` Creates a dereferenced type */
|
|
111
101
|
function Deref(schema, references) {
|
|
112
|
-
return DerefResolve(schema, references);
|
|
102
|
+
return DerefResolve((0, type_1.CloneType)(schema), (0, type_1.CloneRest)(references));
|
|
113
103
|
}
|
|
114
104
|
exports.Deref = Deref;
|
|
@@ -2,12 +2,10 @@ import type { TSchema, SchemaOptions } from '../schema/index';
|
|
|
2
2
|
import type { TProperties } from '../object/index';
|
|
3
3
|
import { type TMappedResult } from '../mapped/index';
|
|
4
4
|
import { type TExclude } from './exclude';
|
|
5
|
-
type
|
|
5
|
+
type TFromProperties<K extends TProperties, U extends TSchema> = ({
|
|
6
6
|
[K2 in keyof K]: TExclude<K[K2], U>;
|
|
7
7
|
});
|
|
8
|
-
|
|
9
|
-
type
|
|
10
|
-
declare function
|
|
11
|
-
export type TExcludeFromMappedResult<T extends TMappedResult, U extends TSchema, P extends TProperties = FromMappedResult<T, U>> = (TMappedResult<P>);
|
|
12
|
-
export declare function ExcludeFromMappedResult<T extends TMappedResult, U extends TSchema, P extends TProperties = FromMappedResult<T, U>>(T: T, U: U, options: SchemaOptions): TMappedResult<P>;
|
|
8
|
+
type TFromMappedResult<K extends TMappedResult, U extends TSchema> = (TFromProperties<K['properties'], U>);
|
|
9
|
+
export type TExcludeFromMappedResult<T extends TMappedResult, U extends TSchema, P extends TProperties = TFromMappedResult<T, U>> = (TMappedResult<P>);
|
|
10
|
+
export declare function ExcludeFromMappedResult<T extends TMappedResult, U extends TSchema, P extends TProperties = TFromMappedResult<T, U>>(T: T, U: U, options: SchemaOptions): TMappedResult<P>;
|
|
13
11
|
export {};
|
|
@@ -6,18 +6,17 @@ import { type TUnion } from '../union/index';
|
|
|
6
6
|
import { type TNever } from '../never/index';
|
|
7
7
|
import { type TLiteral } from '../literal/index';
|
|
8
8
|
import { type Static } from '../static/index';
|
|
9
|
-
import {
|
|
9
|
+
import { type TUnionEvaluated } from '../union/index';
|
|
10
10
|
import { type TExcludeFromMappedResult } from './exclude-from-mapped-result';
|
|
11
|
-
type
|
|
11
|
+
type TExcludeTemplateLiteralResult<T extends string> = TUnionEvaluated<AssertRest<UnionToTuple<{
|
|
12
12
|
[K in T]: TLiteral<K>;
|
|
13
13
|
}[T]>>>;
|
|
14
|
-
type
|
|
15
|
-
type
|
|
14
|
+
type TExcludeTemplateLiteral<T extends TTemplateLiteral, U extends TSchema> = (Exclude<Static<T>, Static<U>> extends infer S ? TExcludeTemplateLiteralResult<Assert<S, string>> : never);
|
|
15
|
+
type TExcludeArray<T extends TSchema[], U extends TSchema> = AssertRest<UnionToTuple<{
|
|
16
16
|
[K in keyof T]: Static<AssertType<T[K]>> extends Static<U> ? never : T[K];
|
|
17
|
-
}[number]>> extends infer R extends TSchema[] ?
|
|
18
|
-
type
|
|
19
|
-
|
|
20
|
-
export type TExclude<T extends TSchema, U extends TSchema> = ExcludeResolve<T, U>;
|
|
17
|
+
}[number]>> extends infer R extends TSchema[] ? TUnionEvaluated<R> : never;
|
|
18
|
+
type TExcludeResolve<T extends TSchema, U extends TSchema> = T extends TTemplateLiteral ? TExcludeTemplateLiteral<T, U> : T extends TUnion<infer S> ? TExcludeArray<S, U> : T extends U ? TNever : T;
|
|
19
|
+
export type TExclude<T extends TSchema, U extends TSchema> = TExcludeResolve<T, U>;
|
|
21
20
|
/** `[Json]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */
|
|
22
21
|
export declare function Exclude<L extends TMappedResult, R extends TSchema>(unionType: L, excludedMembers: R, options?: SchemaOptions): TExcludeFromMappedResult<L, R>;
|
|
23
22
|
/** `[Json]` Constructs a type by excluding from unionType all union members that are assignable to excludedMembers */
|
|
@@ -4,14 +4,11 @@ import type { Assert } from '../helpers/index';
|
|
|
4
4
|
import { type TMappedResult, type TMappedKey } from '../mapped/index';
|
|
5
5
|
import { TLiteral, TLiteralValue } from '../literal/index';
|
|
6
6
|
import { type TExtends } from './extends';
|
|
7
|
-
type
|
|
7
|
+
type TFromPropertyKey<K extends PropertyKey, U extends TSchema, L extends TSchema, R extends TSchema> = {
|
|
8
8
|
[_ in K]: TExtends<TLiteral<Assert<K, TLiteralValue>>, U, L, R>;
|
|
9
9
|
};
|
|
10
|
-
|
|
11
|
-
type
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
declare function FromMappedKey<K extends TMappedKey, U extends TSchema, L extends TSchema, R extends TSchema>(K: K, U: U, L: L, R: R, options: SchemaOptions): FromMappedKey<K, U, L, R>;
|
|
15
|
-
export type TExtendsFromMappedKey<T extends TMappedKey, U extends TSchema, L extends TSchema, R extends TSchema, P extends TProperties = FromMappedKey<T, U, L, R>> = (TMappedResult<P>);
|
|
16
|
-
export declare function ExtendsFromMappedKey<T extends TMappedKey, U extends TSchema, L extends TSchema, R extends TSchema, P extends TProperties = FromMappedKey<T, U, L, R>>(T: T, U: U, L: L, R: R, options: SchemaOptions): TMappedResult<P>;
|
|
10
|
+
type TFromPropertyKeys<K extends PropertyKey[], U extends TSchema, L extends TSchema, R extends TSchema, Acc extends TProperties = {}> = (K extends [infer LK extends PropertyKey, ...infer RK extends PropertyKey[]] ? TFromPropertyKeys<RK, U, L, R, Acc & TFromPropertyKey<LK, U, L, R>> : Acc);
|
|
11
|
+
type TFromMappedKey<K extends TMappedKey, U extends TSchema, L extends TSchema, R extends TSchema> = (TFromPropertyKeys<K['keys'], U, L, R>);
|
|
12
|
+
export type TExtendsFromMappedKey<T extends TMappedKey, U extends TSchema, L extends TSchema, R extends TSchema, P extends TProperties = TFromMappedKey<T, U, L, R>> = (TMappedResult<P>);
|
|
13
|
+
export declare function ExtendsFromMappedKey<T extends TMappedKey, U extends TSchema, L extends TSchema, R extends TSchema, P extends TProperties = TFromMappedKey<T, U, L, R>>(T: T, U: U, L: L, R: R, options: SchemaOptions): TMappedResult<P>;
|
|
17
14
|
export {};
|
|
@@ -12,11 +12,11 @@ function FromPropertyKey(K, U, L, R, options) {
|
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
// prettier-ignore
|
|
15
|
-
function FromPropertyKeys(K, U, L, R, options) {
|
|
15
|
+
function FromPropertyKeys(K, U, L, R, options, Acc = {}) {
|
|
16
16
|
const [LK, ...RK] = K;
|
|
17
17
|
return (K.length > 0
|
|
18
|
-
?
|
|
19
|
-
:
|
|
18
|
+
? FromPropertyKeys(RK, U, L, R, options, { ...Acc, ...FromPropertyKey(LK, U, L, R, options) })
|
|
19
|
+
: Acc);
|
|
20
20
|
}
|
|
21
21
|
// prettier-ignore
|
|
22
22
|
function FromMappedKey(K, U, L, R, options) {
|
|
@@ -2,12 +2,10 @@ import type { TSchema, SchemaOptions } from '../schema/index';
|
|
|
2
2
|
import type { TProperties } from '../object/index';
|
|
3
3
|
import { type TMappedResult } from '../mapped/index';
|
|
4
4
|
import { type TExtends } from './extends';
|
|
5
|
-
type
|
|
5
|
+
type TFromProperties<K extends TProperties, U extends TSchema, L extends TSchema, R extends TSchema> = ({
|
|
6
6
|
[K2 in keyof K]: TExtends<K[K2], U, L, R>;
|
|
7
7
|
});
|
|
8
|
-
|
|
9
|
-
type
|
|
10
|
-
declare function
|
|
11
|
-
export type TExtendsFromMappedResult<T extends TMappedResult, U extends TSchema, L extends TSchema, R extends TSchema, P extends TProperties = FromMappedResult<T, U, L, R>> = (TMappedResult<P>);
|
|
12
|
-
export declare function ExtendsFromMappedResult<T extends TMappedResult, U extends TSchema, L extends TSchema, R extends TSchema, P extends TProperties = FromMappedResult<T, U, L, R>>(T: T, U: U, L: L, R: R, options: SchemaOptions): TMappedResult<P>;
|
|
8
|
+
type TFromMappedResult<K extends TMappedResult, U extends TSchema, L extends TSchema, R extends TSchema> = (TFromProperties<K['properties'], U, L, R>);
|
|
9
|
+
export type TExtendsFromMappedResult<T extends TMappedResult, U extends TSchema, L extends TSchema, R extends TSchema, P extends TProperties = TFromMappedResult<T, U, L, R>> = (TMappedResult<P>);
|
|
10
|
+
export declare function ExtendsFromMappedResult<T extends TMappedResult, U extends TSchema, L extends TSchema, R extends TSchema, P extends TProperties = TFromMappedResult<T, U, L, R>>(T: T, U: U, L: L, R: R, options: SchemaOptions): TMappedResult<P>;
|
|
13
11
|
export {};
|
|
@@ -5,9 +5,8 @@ import { TMappedKey, TMappedResult } from '../mapped/index';
|
|
|
5
5
|
import { UnionToTuple } from '../helpers/index';
|
|
6
6
|
import { type TExtendsFromMappedKey } from './extends-from-mapped-key';
|
|
7
7
|
import { type TExtendsFromMappedResult } from './extends-from-mapped-result';
|
|
8
|
-
type
|
|
9
|
-
|
|
10
|
-
export type TExtends<L extends TSchema, R extends TSchema, T extends TSchema, F extends TSchema> = ExtendsResolve<L, R, T, F>;
|
|
8
|
+
type TExtendsResolve<L extends TSchema, R extends TSchema, T extends TSchema, U extends TSchema> = ((Static<L> extends Static<R> ? T : U) extends infer O extends TSchema ? UnionToTuple<O> extends [infer X extends TSchema, infer Y extends TSchema] ? TUnion<[X, Y]> : O : never);
|
|
9
|
+
export type TExtends<L extends TSchema, R extends TSchema, T extends TSchema, F extends TSchema> = TExtendsResolve<L, R, T, F>;
|
|
11
10
|
/** `[Json]` Creates a Conditional type */
|
|
12
11
|
export declare function Extends<L extends TMappedResult, R extends TSchema, T extends TSchema, F extends TSchema>(L: L, R: R, T: T, F: F, options?: SchemaOptions): TExtendsFromMappedResult<L, R, T, F>;
|
|
13
12
|
/** `[Json]` Creates a Conditional type */
|
|
@@ -2,12 +2,10 @@ import type { TSchema, SchemaOptions } from '../schema/index';
|
|
|
2
2
|
import type { TProperties } from '../object/index';
|
|
3
3
|
import { type TMappedResult } from '../mapped/index';
|
|
4
4
|
import { type TExtract } from './extract';
|
|
5
|
-
type
|
|
5
|
+
type TFromProperties<K extends TProperties, U extends TSchema> = ({
|
|
6
6
|
[K2 in keyof K]: TExtract<K[K2], U>;
|
|
7
7
|
});
|
|
8
|
-
|
|
9
|
-
type
|
|
10
|
-
declare function
|
|
11
|
-
export type TExtractFromMappedResult<T extends TMappedResult, U extends TSchema, P extends TProperties = FromMappedResult<T, U>> = (TMappedResult<P>);
|
|
12
|
-
export declare function ExtractFromMappedResult<T extends TMappedResult, U extends TSchema, P extends TProperties = FromMappedResult<T, U>>(T: T, U: U, options: SchemaOptions): TMappedResult<P>;
|
|
8
|
+
type TFromMappedResult<K extends TMappedResult, U extends TSchema> = (TFromProperties<K['properties'], U>);
|
|
9
|
+
export type TExtractFromMappedResult<T extends TMappedResult, U extends TSchema, P extends TProperties = TFromMappedResult<T, U>> = (TMappedResult<P>);
|
|
10
|
+
export declare function ExtractFromMappedResult<T extends TMappedResult, U extends TSchema, P extends TProperties = TFromMappedResult<T, U>>(T: T, U: U, options: SchemaOptions): TMappedResult<P>;
|
|
13
11
|
export {};
|
|
@@ -5,18 +5,18 @@ import { type TTemplateLiteral } from '../template-literal/index';
|
|
|
5
5
|
import { type TLiteral } from '../literal/index';
|
|
6
6
|
import { type TUnion } from '../union/index';
|
|
7
7
|
import { type Static } from '../static/index';
|
|
8
|
-
import {
|
|
8
|
+
import { type TUnionEvaluated } from '../union/index';
|
|
9
9
|
import { type TExtractFromMappedResult } from './extract-from-mapped-result';
|
|
10
|
-
type
|
|
10
|
+
type TFromTemplateLiteralResult<T extends string> = TUnionEvaluated<AssertRest<UnionToTuple<{
|
|
11
11
|
[K in T]: TLiteral<K>;
|
|
12
12
|
}[T]>>>;
|
|
13
|
-
type
|
|
14
|
-
type
|
|
13
|
+
type TFromTemplateLiteral<T extends TTemplateLiteral, U extends TSchema> = Extract<Static<T>, Static<U>> extends infer S ? TFromTemplateLiteralResult<Assert<S, string>> : never;
|
|
14
|
+
type TFromArray<T extends TSchema[], U extends TSchema> = AssertRest<UnionToTuple<{
|
|
15
15
|
[K in keyof T]: Static<AssertType<T[K]>> extends Static<U> ? T[K] : never;
|
|
16
|
-
}[number]>> extends infer R extends TSchema[] ?
|
|
17
|
-
export type
|
|
18
|
-
export declare function ExtractResolve<L extends TSchema, R extends TSchema>(L: L, R: R):
|
|
19
|
-
export type TExtract<T extends TSchema, U extends TSchema> =
|
|
16
|
+
}[number]>> extends infer R extends TSchema[] ? TUnionEvaluated<R> : never;
|
|
17
|
+
export type TExtractResolve<T extends TSchema, U extends TSchema> = (T extends TTemplateLiteral ? TFromTemplateLiteral<T, U> : T extends TUnion<infer S> ? TFromArray<S, U> : T extends U ? T : T);
|
|
18
|
+
export declare function ExtractResolve<L extends TSchema, R extends TSchema>(L: L, R: R): TExtractResolve<L, R>;
|
|
19
|
+
export type TExtract<T extends TSchema, U extends TSchema> = TExtractResolve<T, U>;
|
|
20
20
|
/** `[Json]` Constructs a type by extracting from type all union members that are assignable to union */
|
|
21
21
|
export declare function Extract<L extends TMappedResult, R extends TSchema>(type: L, union: R, options?: SchemaOptions): TExtractFromMappedResult<L, R>;
|
|
22
22
|
/** `[Json]` Constructs a type by extracting from type all union members that are assignable to union */
|
|
@@ -3,7 +3,7 @@ import type { Static } from '../static/index';
|
|
|
3
3
|
import type { Ensure } from '../helpers/index';
|
|
4
4
|
import { Kind } from '../symbols/index';
|
|
5
5
|
type FunctionStaticReturnType<T extends TSchema, P extends unknown[]> = Static<T, P>;
|
|
6
|
-
type FunctionStaticParameters<T extends TSchema[], P extends unknown[]> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ?
|
|
6
|
+
type FunctionStaticParameters<T extends TSchema[], P extends unknown[], Acc extends unknown[] = []> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? FunctionStaticParameters<R, P, [...Acc, Static<L, P>]> : Acc;
|
|
7
7
|
type FunctionStatic<T extends TSchema[], U extends TSchema, P extends unknown[]> = (Ensure<(...param: FunctionStaticParameters<T, P>) => FunctionStaticReturnType<U, P>>);
|
|
8
8
|
export interface TFunction<T extends TSchema[] = TSchema[], U extends TSchema = TSchema> extends TSchema {
|
|
9
9
|
[Kind]: 'Function';
|
|
@@ -7,7 +7,7 @@ export type TupleToUnion<T extends any[]> = {
|
|
|
7
7
|
}[number];
|
|
8
8
|
export type UnionToIntersect<U> = (U extends unknown ? (arg: U) => 0 : never) extends (arg: infer I) => 0 ? I : never;
|
|
9
9
|
export type UnionLast<U> = UnionToIntersect<U extends unknown ? (x: U) => 0 : never> extends (x: infer L) => 0 ? L : never;
|
|
10
|
-
export type UnionToTuple<U,
|
|
10
|
+
export type UnionToTuple<U, Acc extends unknown[] = [], R = UnionLast<U>> = [U] extends [never] ? Acc : UnionToTuple<Exclude<U, R>, [Extract<U, R>, ...Acc]>;
|
|
11
11
|
export type Trim<T> = T extends `${' '}${infer U}` ? Trim<U> : T extends `${infer U}${' '}` ? Trim<U> : T;
|
|
12
12
|
export type Assert<T, E> = T extends E ? T : never;
|
|
13
13
|
export type Evaluate<T> = T extends infer O ? {
|
|
@@ -28,7 +28,6 @@ export * from './iterator/index';
|
|
|
28
28
|
export * from './keyof/index';
|
|
29
29
|
export * from './literal/index';
|
|
30
30
|
export * from './mapped/index';
|
|
31
|
-
export * from './modifiers/index';
|
|
32
31
|
export * from './never/index';
|
|
33
32
|
export * from './not/index';
|
|
34
33
|
export * from './null/index';
|
|
@@ -45,7 +45,6 @@ __exportStar(require("./iterator/index"), exports);
|
|
|
45
45
|
__exportStar(require("./keyof/index"), exports);
|
|
46
46
|
__exportStar(require("./literal/index"), exports);
|
|
47
47
|
__exportStar(require("./mapped/index"), exports);
|
|
48
|
-
__exportStar(require("./modifiers/index"), exports);
|
|
49
48
|
__exportStar(require("./never/index"), exports);
|
|
50
49
|
__exportStar(require("./not/index"), exports);
|
|
51
50
|
__exportStar(require("./null/index"), exports);
|
|
@@ -3,14 +3,11 @@ import { type TProperties } from '../object/index';
|
|
|
3
3
|
import { type TIndex } from './indexed';
|
|
4
4
|
import { type TMappedResult, type TMappedKey } from '../mapped/index';
|
|
5
5
|
import { Evaluate } from '../helpers/index';
|
|
6
|
-
type
|
|
6
|
+
type TMappedIndexPropertyKey<T extends TSchema, K extends PropertyKey> = {
|
|
7
7
|
[_ in K]: TIndex<T, [K]>;
|
|
8
8
|
};
|
|
9
|
-
|
|
10
|
-
type
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
declare function MappedIndexProperties<T extends TSchema, K extends TMappedKey>(T: T, K: K, options: SchemaOptions): MappedIndexProperties<T, K>;
|
|
14
|
-
export type TIndexFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = MappedIndexProperties<T, K>> = (TMappedResult<P>);
|
|
15
|
-
export declare function IndexFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = MappedIndexProperties<T, K>>(T: T, K: K, options: SchemaOptions): TMappedResult<P>;
|
|
9
|
+
type TMappedIndexPropertyKeys<T extends TSchema, K extends PropertyKey[], Acc extends TProperties = {}> = (K extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? TMappedIndexPropertyKeys<T, R, Acc & TMappedIndexPropertyKey<T, L>> : Acc);
|
|
10
|
+
type TMappedIndexProperties<T extends TSchema, K extends TMappedKey> = Evaluate<TMappedIndexPropertyKeys<T, K['keys']>>;
|
|
11
|
+
export type TIndexFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = TMappedIndexProperties<T, K>> = (TMappedResult<P>);
|
|
12
|
+
export declare function IndexFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = TMappedIndexProperties<T, K>>(T: T, K: K, options: SchemaOptions): TMappedResult<P>;
|
|
16
13
|
export {};
|
|
@@ -6,17 +6,14 @@ const indexed_1 = require("./indexed");
|
|
|
6
6
|
const index_1 = require("../mapped/index");
|
|
7
7
|
// prettier-ignore
|
|
8
8
|
function MappedIndexPropertyKey(T, K, options) {
|
|
9
|
-
// todo: propogate options into index result. This type looks like it
|
|
10
|
-
// could use a clean up, possibly inlining it into indexed.ts to
|
|
11
|
-
// bring it inline with other mapping types.
|
|
12
9
|
return { [K]: (0, indexed_1.Index)(T, [K], options) };
|
|
13
10
|
}
|
|
14
11
|
// prettier-ignore
|
|
15
|
-
function MappedIndexPropertyKeys(T, K, options) {
|
|
12
|
+
function MappedIndexPropertyKeys(T, K, options, Acc = {}) {
|
|
16
13
|
const [L, ...R] = K;
|
|
17
14
|
return (K.length > 0
|
|
18
|
-
?
|
|
19
|
-
:
|
|
15
|
+
? MappedIndexPropertyKeys(T, R, options, { ...Acc, ...MappedIndexPropertyKey(T, L, options) })
|
|
16
|
+
: Acc);
|
|
20
17
|
}
|
|
21
18
|
// prettier-ignore
|
|
22
19
|
function MappedIndexProperties(T, K, options) {
|