@sinclair/typebox 0.32.0-dev-26 → 0.32.0-dev-27
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.mjs +2 -6
- package/build/import/type/composite/composite.d.mts +1 -2
- package/build/import/type/composite/composite.mjs +2 -2
- package/build/import/type/const/const.mjs +6 -6
- package/build/import/type/constructor/constructor.d.mts +1 -1
- package/build/import/type/constructor/constructor.mjs +1 -1
- package/build/import/type/deref/deref.mjs +1 -2
- package/build/import/type/discard/discard.mjs +2 -2
- package/build/import/type/enum/enum.mjs +3 -0
- package/build/import/type/exclude/exclude-from-mapped-result.d.mts +5 -5
- package/build/import/type/exclude/exclude-from-mapped-result.mjs +7 -7
- package/build/import/type/exclude/exclude.mjs +0 -1
- package/build/import/type/extends/extends-from-mapped-key.d.mts +1 -1
- package/build/import/type/extends/extends-from-mapped-key.mjs +4 -5
- package/build/import/type/extends/extends-from-mapped-result.d.mts +5 -5
- package/build/import/type/extends/extends-from-mapped-result.mjs +7 -7
- package/build/import/type/extends/extends.mjs +0 -1
- package/build/import/type/extract/extract-from-mapped-result.d.mts +5 -5
- package/build/import/type/extract/extract-from-mapped-result.mjs +7 -7
- package/build/import/type/extract/extract.d.mts +1 -2
- package/build/import/type/extract/extract.mjs +4 -2
- package/build/import/type/index.d.mts +1 -1
- package/build/import/type/index.mjs +1 -1
- package/build/import/type/indexed/indexed-from-mapped-key.d.mts +2 -2
- package/build/import/type/indexed/indexed-from-mapped-key.mjs +4 -5
- package/build/import/type/indexed/indexed-from-mapped-result.d.mts +1 -1
- package/build/import/type/indexed/indexed-property-keys.d.mts +6 -6
- package/build/import/type/indexed/indexed-property-keys.mjs +3 -5
- package/build/import/type/indexed/indexed.d.mts +1 -1
- package/build/import/type/indexed/indexed.mjs +9 -27
- package/build/import/type/intersect/intersect-evaluated.mjs +3 -13
- package/build/import/type/intrinsic/capitalize.d.mts +2 -2
- package/build/import/type/intrinsic/intrinsic-from-mapped-key.d.mts +1 -1
- package/build/import/type/intrinsic/intrinsic-from-mapped-key.mjs +4 -5
- package/build/import/type/intrinsic/intrinsic.d.mts +2 -3
- package/build/import/type/intrinsic/intrinsic.mjs +2 -5
- package/build/import/type/intrinsic/lowercase.d.mts +2 -2
- package/build/import/type/intrinsic/uncapitalize.d.mts +2 -2
- package/build/import/type/intrinsic/uppercase.d.mts +2 -2
- package/build/import/type/iterator/iterator.mjs +1 -1
- package/build/import/type/keyof/keyof-from-mapped-result.d.mts +3 -3
- package/build/import/type/keyof/keyof-from-mapped-result.mjs +4 -4
- package/build/import/type/keyof/keyof-property-keys.d.mts +3 -3
- package/build/import/type/keyof/keyof-property-keys.mjs +9 -15
- package/build/import/type/keyof/keyof.mjs +2 -8
- package/build/import/type/mapped/mapped.d.mts +6 -1
- package/build/import/type/mapped/mapped.mjs +21 -14
- package/build/import/type/not/not.mjs +1 -1
- package/build/import/type/object/object.d.mts +1 -1
- package/build/import/type/object/object.mjs +0 -1
- package/build/import/type/omit/index.d.mts +1 -0
- package/build/import/type/omit/index.mjs +1 -0
- package/build/import/type/omit/omit-from-mapped-key.mjs +4 -5
- package/build/import/type/omit/omit-from-mapped-result.d.mts +11 -0
- package/build/import/type/omit/omit-from-mapped-result.mjs +17 -0
- package/build/import/type/omit/omit.d.mts +6 -3
- package/build/import/type/omit/omit.mjs +11 -9
- package/build/import/type/optional/optional-from-mapped-result.d.mts +5 -5
- package/build/import/type/optional/optional-from-mapped-result.mjs +7 -7
- package/build/import/type/partial/partial-from-mapped-result.d.mts +5 -5
- package/build/import/type/partial/partial-from-mapped-result.mjs +4 -4
- package/build/import/type/partial/partial.d.mts +2 -3
- package/build/import/type/partial/partial.mjs +8 -21
- package/build/import/type/pick/index.d.mts +1 -0
- package/build/import/type/pick/index.mjs +1 -0
- package/build/import/type/pick/pick-from-mapped-key.mjs +4 -5
- package/build/import/type/pick/pick-from-mapped-result.d.mts +11 -0
- package/build/import/type/pick/pick-from-mapped-result.mjs +17 -0
- package/build/import/type/pick/pick.d.mts +5 -2
- package/build/import/type/pick/pick.mjs +11 -10
- package/build/import/type/promise/promise.mjs +1 -1
- package/build/import/type/readonly/readonly-from-mapped-result.d.mts +5 -5
- package/build/import/type/readonly/readonly-from-mapped-result.mjs +4 -4
- package/build/import/type/record/record.d.mts +2 -2
- package/build/import/type/record/record.mjs +3 -0
- package/build/import/type/ref/ref.mjs +1 -1
- package/build/import/type/required/required-from-mapped-result.d.mts +5 -5
- package/build/import/type/required/required-from-mapped-result.mjs +7 -7
- package/build/import/type/required/required.d.mts +2 -3
- package/build/import/type/required/required.mjs +4 -14
- package/build/import/type/rest/rest.d.mts +2 -2
- package/build/import/type/rest/rest.mjs +1 -2
- package/build/import/type/sets/index.d.mts +1 -0
- package/build/import/type/sets/index.mjs +1 -0
- package/build/import/type/sets/set.d.mts +24 -0
- package/build/import/type/sets/set.mjs +35 -0
- package/build/import/type/strict/strict.d.mts +1 -1
- package/build/import/type/strict/strict.mjs +1 -1
- package/build/import/type/template-literal/syntax.d.mts +1 -1
- package/build/import/type/template-literal/template-literal.d.mts +1 -1
- package/build/import/type/transform/transform.mjs +1 -1
- package/build/import/type/type/json.d.mts +6 -2
- package/build/import/type/union/union-evaluated.mjs +3 -14
- package/build/require/index.d.ts +2 -2
- package/build/require/type/awaited/awaited.js +2 -6
- package/build/require/type/composite/composite.d.ts +1 -2
- package/build/require/type/composite/composite.js +5 -6
- package/build/require/type/const/const.js +6 -6
- package/build/require/type/constructor/constructor.d.ts +1 -1
- package/build/require/type/constructor/constructor.js +1 -1
- package/build/require/type/deref/deref.js +0 -1
- package/build/require/type/discard/discard.js +2 -2
- package/build/require/type/enum/enum.js +3 -0
- package/build/require/type/exclude/exclude-from-mapped-result.d.ts +5 -5
- package/build/require/type/exclude/exclude-from-mapped-result.js +7 -7
- package/build/require/type/exclude/exclude.js +0 -1
- package/build/require/type/extends/extends-from-mapped-key.d.ts +1 -1
- package/build/require/type/extends/extends-from-mapped-key.js +4 -5
- package/build/require/type/extends/extends-from-mapped-result.d.ts +5 -5
- package/build/require/type/extends/extends-from-mapped-result.js +7 -7
- package/build/require/type/extends/extends.js +0 -1
- package/build/require/type/extract/extract-from-mapped-result.d.ts +5 -5
- package/build/require/type/extract/extract-from-mapped-result.js +7 -7
- package/build/require/type/extract/extract.d.ts +1 -2
- package/build/require/type/extract/extract.js +4 -3
- package/build/require/type/index.d.ts +1 -1
- package/build/require/type/index.js +1 -1
- package/build/require/type/indexed/indexed-from-mapped-key.d.ts +2 -2
- package/build/require/type/indexed/indexed-from-mapped-key.js +4 -5
- package/build/require/type/indexed/indexed-from-mapped-result.d.ts +1 -1
- package/build/require/type/indexed/indexed-property-keys.d.ts +6 -6
- package/build/require/type/indexed/indexed-property-keys.js +3 -5
- package/build/require/type/indexed/indexed.d.ts +1 -1
- package/build/require/type/indexed/indexed.js +9 -27
- package/build/require/type/intersect/intersect-evaluated.js +3 -13
- package/build/require/type/intrinsic/capitalize.d.ts +2 -2
- package/build/require/type/intrinsic/intrinsic-from-mapped-key.d.ts +1 -1
- package/build/require/type/intrinsic/intrinsic-from-mapped-key.js +4 -5
- package/build/require/type/intrinsic/intrinsic.d.ts +2 -3
- package/build/require/type/intrinsic/intrinsic.js +2 -5
- package/build/require/type/intrinsic/lowercase.d.ts +2 -2
- package/build/require/type/intrinsic/uncapitalize.d.ts +2 -2
- package/build/require/type/intrinsic/uppercase.d.ts +2 -2
- package/build/require/type/iterator/iterator.js +1 -1
- package/build/require/type/keyof/keyof-from-mapped-result.d.ts +3 -3
- package/build/require/type/keyof/keyof-from-mapped-result.js +4 -4
- package/build/require/type/keyof/keyof-property-keys.d.ts +3 -3
- package/build/require/type/keyof/keyof-property-keys.js +9 -15
- package/build/require/type/keyof/keyof.js +2 -8
- package/build/require/type/mapped/mapped.d.ts +6 -1
- package/build/require/type/mapped/mapped.js +21 -14
- package/build/require/type/not/not.js +1 -1
- package/build/require/type/object/object.d.ts +1 -1
- package/build/require/type/object/object.js +0 -1
- package/build/require/type/omit/index.d.ts +1 -0
- package/build/require/type/omit/index.js +1 -0
- package/build/require/type/omit/omit-from-mapped-key.js +4 -5
- package/build/require/type/omit/omit-from-mapped-result.d.ts +11 -0
- package/build/require/type/omit/omit-from-mapped-result.js +22 -0
- package/build/require/type/omit/omit.d.ts +6 -3
- package/build/require/type/omit/omit.js +10 -8
- package/build/require/type/optional/optional-from-mapped-result.d.ts +5 -5
- package/build/require/type/optional/optional-from-mapped-result.js +7 -7
- package/build/require/type/partial/partial-from-mapped-result.d.ts +5 -5
- package/build/require/type/partial/partial-from-mapped-result.js +4 -4
- package/build/require/type/partial/partial.d.ts +2 -3
- package/build/require/type/partial/partial.js +8 -21
- package/build/require/type/pick/index.d.ts +1 -0
- package/build/require/type/pick/index.js +1 -0
- package/build/require/type/pick/pick-from-mapped-key.js +4 -5
- package/build/require/type/pick/pick-from-mapped-result.d.ts +11 -0
- package/build/require/type/pick/pick-from-mapped-result.js +22 -0
- package/build/require/type/pick/pick.d.ts +5 -2
- package/build/require/type/pick/pick.js +10 -9
- package/build/require/type/promise/promise.js +1 -1
- package/build/require/type/readonly/readonly-from-mapped-result.d.ts +5 -5
- package/build/require/type/readonly/readonly-from-mapped-result.js +4 -4
- package/build/require/type/record/record.d.ts +2 -2
- package/build/require/type/record/record.js +3 -0
- package/build/require/type/ref/ref.js +1 -1
- package/build/require/type/required/required-from-mapped-result.d.ts +5 -5
- package/build/require/type/required/required-from-mapped-result.js +7 -7
- package/build/require/type/required/required.d.ts +2 -3
- package/build/require/type/required/required.js +4 -14
- package/build/require/type/rest/rest.d.ts +2 -2
- package/build/require/type/rest/rest.js +1 -3
- package/build/require/type/sets/index.d.ts +1 -0
- package/build/require/type/{operators → sets}/index.js +1 -1
- package/build/require/type/sets/set.d.ts +24 -0
- package/build/require/type/sets/set.js +47 -0
- package/build/require/type/strict/strict.d.ts +1 -1
- package/build/require/type/strict/strict.js +1 -1
- package/build/require/type/template-literal/parse.js +1 -1
- package/build/require/type/template-literal/syntax.d.ts +1 -1
- package/build/require/type/template-literal/template-literal.d.ts +1 -1
- package/build/require/type/transform/transform.js +1 -1
- package/build/require/type/type/json.d.ts +6 -2
- package/build/require/type/union/union-evaluated.js +3 -14
- package/package.json +1 -1
- package/readme.md +64 -64
- package/build/import/type/operators/index.d.mts +0 -1
- package/build/import/type/operators/index.mjs +0 -1
- package/build/import/type/operators/operators.d.mts +0 -24
- package/build/import/type/operators/operators.mjs +0 -77
- package/build/require/type/operators/index.d.ts +0 -1
- package/build/require/type/operators/operators.d.ts +0 -24
- package/build/require/type/operators/operators.js +0 -89
|
@@ -7,9 +7,8 @@ import { type TMappedKey } from '../mapped/index.mjs';
|
|
|
7
7
|
export type IntrinsicMode = 'Uppercase' | 'Lowercase' | 'Capitalize' | 'Uncapitalize';
|
|
8
8
|
type TFromTemplateLiteral<T extends TTemplateLiteralKind[], M extends IntrinsicMode> = M extends IntrinsicMode ? T extends [infer L extends TTemplateLiteralKind, ...infer R extends TTemplateLiteralKind[]] ? [TIntrinsic<L, M>, ...TFromTemplateLiteral<R, M>] : T : T;
|
|
9
9
|
type TFromLiteralValue<T, M extends IntrinsicMode> = (T extends string ? M extends 'Uncapitalize' ? Uncapitalize<T> : M extends 'Capitalize' ? Capitalize<T> : M extends 'Uppercase' ? Uppercase<T> : M extends 'Lowercase' ? Lowercase<T> : string : T);
|
|
10
|
-
type
|
|
11
|
-
|
|
12
|
-
export type TIntrinsic<T extends TSchema, M extends IntrinsicMode> = T extends TMappedKey ? TIntrinsicFromMappedKey<T, M> : T extends TTemplateLiteral<infer S> ? TTemplateLiteral<TFromTemplateLiteral<S, M>> : T extends TUnion<infer S> ? TUnion<FromRest<S, M>> : T extends TLiteral<infer S> ? TLiteral<TFromLiteralValue<S, M>> : T;
|
|
10
|
+
type TFromRest<T extends TSchema[], M extends IntrinsicMode, Acc extends TSchema[] = []> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromRest<R, M, [...Acc, TIntrinsic<L, M>]> : Acc;
|
|
11
|
+
export type TIntrinsic<T extends TSchema, M extends IntrinsicMode> = T extends TMappedKey ? TIntrinsicFromMappedKey<T, M> : T extends TTemplateLiteral<infer S> ? TTemplateLiteral<TFromTemplateLiteral<S, M>> : T extends TUnion<infer S> ? TUnion<TFromRest<S, M>> : T extends TLiteral<infer S> ? TLiteral<TFromLiteralValue<S, M>> : T;
|
|
13
12
|
/** Applies an intrinsic string manipulation to the given type. */
|
|
14
13
|
export declare function Intrinsic<T extends TMappedKey, M extends IntrinsicMode>(schema: T, mode: M, options?: SchemaOptions): TIntrinsicFromMappedKey<T, M>;
|
|
15
14
|
/** Applies an intrinsic string manipulation to the given type. */
|
|
@@ -45,11 +45,8 @@ function FromLiteralValue(value, mode) {
|
|
|
45
45
|
value) : value.toString());
|
|
46
46
|
}
|
|
47
47
|
// prettier-ignore
|
|
48
|
-
function FromRest(T, M
|
|
49
|
-
|
|
50
|
-
return (T.length > 0
|
|
51
|
-
? FromRest(R, M, [...Acc, Intrinsic(L, M)])
|
|
52
|
-
: Acc);
|
|
48
|
+
function FromRest(T, M) {
|
|
49
|
+
return T.map(L => Intrinsic(L, M));
|
|
53
50
|
}
|
|
54
51
|
/** Applies an intrinsic string manipulation to the given type. */
|
|
55
52
|
export function Intrinsic(schema, mode, options = {}) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TSchema, SchemaOptions } from '../schema/index.mjs';
|
|
2
|
-
import { TIntrinsic } from './intrinsic.mjs';
|
|
1
|
+
import type { TSchema, SchemaOptions } from '../schema/index.mjs';
|
|
2
|
+
import { type TIntrinsic } from './intrinsic.mjs';
|
|
3
3
|
export type TLowercase<T extends TSchema> = TIntrinsic<T, 'Lowercase'>;
|
|
4
4
|
/** `[Json]` Intrinsic function to Lowercase LiteralString types */
|
|
5
5
|
export declare function Lowercase<T extends TSchema>(T: T, options?: SchemaOptions): TLowercase<T>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TSchema, SchemaOptions } from '../schema/index.mjs';
|
|
2
|
-
import { TIntrinsic } from './intrinsic.mjs';
|
|
1
|
+
import type { TSchema, SchemaOptions } from '../schema/index.mjs';
|
|
2
|
+
import { type TIntrinsic } from './intrinsic.mjs';
|
|
3
3
|
export type TUncapitalize<T extends TSchema> = TIntrinsic<T, 'Uncapitalize'>;
|
|
4
4
|
/** `[Json]` Intrinsic function to Uncapitalize LiteralString types */
|
|
5
5
|
export declare function Uncapitalize<T extends TSchema>(T: T, options?: SchemaOptions): TUncapitalize<T>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { TSchema, SchemaOptions } from '../schema/index.mjs';
|
|
2
|
-
import { TIntrinsic } from './intrinsic.mjs';
|
|
1
|
+
import type { TSchema, SchemaOptions } from '../schema/index.mjs';
|
|
2
|
+
import { type TIntrinsic } from './intrinsic.mjs';
|
|
3
3
|
export type TUppercase<T extends TSchema> = TIntrinsic<T, 'Uppercase'>;
|
|
4
4
|
/** `[Json]` Intrinsic function to Uppercase LiteralString types */
|
|
5
5
|
export declare function Uppercase<T extends TSchema>(T: T, options?: SchemaOptions): TUppercase<T>;
|
|
@@ -5,7 +5,7 @@ import { type TKeyOf } from './keyof.mjs';
|
|
|
5
5
|
type TFromProperties<K extends TProperties> = ({
|
|
6
6
|
[K2 in keyof K]: TKeyOf<K[K2]>;
|
|
7
7
|
});
|
|
8
|
-
type TFromMappedResult<
|
|
9
|
-
export type TKeyOfFromMappedResult<
|
|
10
|
-
export declare function KeyOfFromMappedResult<
|
|
8
|
+
type TFromMappedResult<R extends TMappedResult> = (TFromProperties<R['properties']>);
|
|
9
|
+
export type TKeyOfFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>> = (TMappedResult<P>);
|
|
10
|
+
export declare function KeyOfFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>>(R: R, options: SchemaOptions): TMappedResult<P>;
|
|
11
11
|
export {};
|
|
@@ -7,11 +7,11 @@ function FromProperties(K, options) {
|
|
|
7
7
|
}, {});
|
|
8
8
|
}
|
|
9
9
|
// prettier-ignore
|
|
10
|
-
function FromMappedResult(
|
|
11
|
-
return FromProperties(
|
|
10
|
+
function FromMappedResult(R, options) {
|
|
11
|
+
return FromProperties(R.properties, options);
|
|
12
12
|
}
|
|
13
13
|
// prettier-ignore
|
|
14
|
-
export function KeyOfFromMappedResult(
|
|
15
|
-
const P = FromMappedResult(
|
|
14
|
+
export function KeyOfFromMappedResult(R, options) {
|
|
15
|
+
const P = FromMappedResult(R, options);
|
|
16
16
|
return MappedResult(P);
|
|
17
17
|
}
|
|
@@ -6,11 +6,11 @@ import type { TUnion } from '../union/index.mjs';
|
|
|
6
6
|
import type { TTuple } from '../tuple/index.mjs';
|
|
7
7
|
import type { TArray } from '../array/index.mjs';
|
|
8
8
|
import type { TObject, TProperties } from '../object/index.mjs';
|
|
9
|
-
import {
|
|
9
|
+
import { type TSetUnionMany, type TSetIntersectMany } from '../sets/index.mjs';
|
|
10
10
|
type TFromRest<T extends TSchema[], Acc extends PropertyKey[][] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromRest<R, [...Acc, TKeyOfPropertyKeys<L>]> : Acc);
|
|
11
|
-
type FromIntersect<T extends TSchema[], C extends PropertyKey[][] = TFromRest<T>, R extends PropertyKey[] =
|
|
11
|
+
type FromIntersect<T extends TSchema[], C extends PropertyKey[][] = TFromRest<T>, R extends PropertyKey[] = TSetUnionMany<C>> = R;
|
|
12
12
|
declare function FromIntersect<T extends TSchema[]>(T: [...T]): FromIntersect<T>;
|
|
13
|
-
type FromUnion<T extends TSchema[], C extends PropertyKey[][] = TFromRest<T>, R extends PropertyKey[] =
|
|
13
|
+
type FromUnion<T extends TSchema[], C extends PropertyKey[][] = TFromRest<T>, R extends PropertyKey[] = TSetIntersectMany<C>> = R;
|
|
14
14
|
declare function FromUnion<T extends TSchema[]>(T: [...T]): FromUnion<T>;
|
|
15
15
|
type TFromTuple<T extends TSchema[], I extends string = ZeroString, Acc extends PropertyKey[] = []> = T extends [infer _ extends TSchema, ...infer R extends TSchema[]] ? TFromTuple<R, Increment<I>, [...Acc, I]> : Acc;
|
|
16
16
|
type TFromArray<_ extends TSchema> = ([
|
|
@@ -1,35 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { OperatorUnionMany, OperatorIntersectMany } from '../operators/index.mjs';
|
|
1
|
+
import { SetUnionMany, SetIntersectMany } from '../sets/index.mjs';
|
|
3
2
|
// ------------------------------------------------------------------
|
|
4
3
|
// TypeGuard
|
|
5
4
|
// ------------------------------------------------------------------
|
|
6
|
-
// prettier-ignore
|
|
7
5
|
import { IsIntersect, IsUnion, IsTuple, IsArray, IsObject, IsRecord } from '../guard/type.mjs';
|
|
8
6
|
// prettier-ignore
|
|
9
|
-
function FromRest(T
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
: Acc);
|
|
7
|
+
function FromRest(T) {
|
|
8
|
+
return T.reduce((Acc, L) => {
|
|
9
|
+
return [...Acc, KeyOfPropertyKeys(L)];
|
|
10
|
+
}, []);
|
|
14
11
|
}
|
|
15
12
|
// prettier-ignore
|
|
16
13
|
function FromIntersect(T) {
|
|
17
14
|
const C = FromRest(T);
|
|
18
|
-
const R =
|
|
15
|
+
const R = SetUnionMany(C);
|
|
19
16
|
return R;
|
|
20
17
|
}
|
|
21
18
|
// prettier-ignore
|
|
22
19
|
function FromUnion(T) {
|
|
23
20
|
const C = FromRest(T);
|
|
24
|
-
const R =
|
|
21
|
+
const R = SetIntersectMany(C);
|
|
25
22
|
return R;
|
|
26
23
|
}
|
|
27
24
|
// prettier-ignore
|
|
28
|
-
function FromTuple(T
|
|
29
|
-
|
|
30
|
-
return (T.length > 0
|
|
31
|
-
? FromTuple(R, Increment(I), [...Acc, I])
|
|
32
|
-
: Acc);
|
|
25
|
+
function FromTuple(T) {
|
|
26
|
+
return T.map((_, I) => I.toString());
|
|
33
27
|
}
|
|
34
28
|
// prettier-ignore
|
|
35
29
|
function FromArray(_) {
|
|
@@ -7,16 +7,10 @@ import { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';
|
|
|
7
7
|
// ------------------------------------------------------------------
|
|
8
8
|
// TypeGuard
|
|
9
9
|
// ------------------------------------------------------------------
|
|
10
|
-
// prettier-ignore
|
|
11
10
|
import { IsMappedResult } from '../guard/type.mjs';
|
|
12
11
|
// prettier-ignore
|
|
13
|
-
function FromPropertyKeys(T
|
|
14
|
-
|
|
15
|
-
return (T.length > 0
|
|
16
|
-
? L === '[number]'
|
|
17
|
-
? FromPropertyKeys(R, [...Acc, Number()])
|
|
18
|
-
: FromPropertyKeys(R, [...Acc, Literal(L)])
|
|
19
|
-
: Acc);
|
|
12
|
+
function FromPropertyKeys(T) {
|
|
13
|
+
return T.map(L => L === '[number]' ? Number() : Literal(L));
|
|
20
14
|
}
|
|
21
15
|
/** `[Json]` Creates a KeyOf type */
|
|
22
16
|
export function KeyOf(T, options = {}) {
|
|
@@ -14,12 +14,17 @@ import { type TPromise } from '../promise/index.mjs';
|
|
|
14
14
|
import { type TReadonly } from '../readonly/index.mjs';
|
|
15
15
|
import { type TTuple } from '../tuple/index.mjs';
|
|
16
16
|
import { type TUnion } from '../union/index.mjs';
|
|
17
|
+
import { type TSetIncludes } from '../sets/index.mjs';
|
|
17
18
|
import { type TMappedResult } from './mapped-result.mjs';
|
|
18
19
|
import type { TMappedKey } from './mapped-key.mjs';
|
|
19
20
|
type TFromMappedResult<K extends PropertyKey, P extends TProperties> = (K extends keyof P ? FromSchemaType<K, P[K]> : TMappedResult<P>);
|
|
20
|
-
type
|
|
21
|
+
type TMappedKeyToKnownMappedResultProperties<K extends PropertyKey> = {
|
|
22
|
+
[_ in K]: TLiteral<Assert<K, TLiteralValue>>;
|
|
23
|
+
};
|
|
24
|
+
type TMappedKeyToUnknownMappedResultProperties<P extends PropertyKey[], Acc extends TProperties = {}> = (P extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? TMappedKeyToUnknownMappedResultProperties<R, Acc & {
|
|
21
25
|
[_ in L]: TLiteral<Assert<L, TLiteralValue>>;
|
|
22
26
|
}> : Acc);
|
|
27
|
+
type TMappedKeyToMappedResultProperties<K extends PropertyKey, P extends PropertyKey[]> = (TSetIncludes<P, K> extends true ? TMappedKeyToKnownMappedResultProperties<K> : TMappedKeyToUnknownMappedResultProperties<P>);
|
|
23
28
|
type TFromMappedKey<K extends PropertyKey, P extends PropertyKey[], R extends TProperties = TMappedKeyToMappedResultProperties<K, P>> = (TFromMappedResult<K, R>);
|
|
24
29
|
type TFromRest<K extends PropertyKey, T extends TSchema[], Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromRest<K, R, [...Acc, FromSchemaType<K, L>]> : Acc);
|
|
25
30
|
type FromProperties<K extends PropertyKey, T extends TProperties, R extends TProperties = Evaluate<{
|
|
@@ -16,6 +16,8 @@ import { Promise } from '../promise/index.mjs';
|
|
|
16
16
|
import { Readonly } from '../readonly/index.mjs';
|
|
17
17
|
import { Tuple } from '../tuple/index.mjs';
|
|
18
18
|
import { Union } from '../union/index.mjs';
|
|
19
|
+
// operator
|
|
20
|
+
import { SetIncludes } from '../sets/index.mjs';
|
|
19
21
|
// mapping types
|
|
20
22
|
import { MappedResult } from './mapped-result.mjs';
|
|
21
23
|
// ------------------------------------------------------------------
|
|
@@ -30,11 +32,20 @@ function FromMappedResult(K, P) {
|
|
|
30
32
|
: MappedResult(P));
|
|
31
33
|
}
|
|
32
34
|
// prettier-ignore
|
|
33
|
-
function
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
function MappedKeyToKnownMappedResultProperties(K) {
|
|
36
|
+
return { [K]: Literal(K) };
|
|
37
|
+
}
|
|
38
|
+
// prettier-ignore
|
|
39
|
+
function MappedKeyToUnknownMappedResultProperties(P) {
|
|
40
|
+
return P.reduce((Acc, L) => {
|
|
41
|
+
return { ...Acc, [L]: Literal(L) };
|
|
42
|
+
}, {});
|
|
43
|
+
}
|
|
44
|
+
// prettier-ignore
|
|
45
|
+
function MappedKeyToMappedResultProperties(K, P) {
|
|
46
|
+
return (SetIncludes(P, K)
|
|
47
|
+
? MappedKeyToKnownMappedResultProperties(K)
|
|
48
|
+
: MappedKeyToUnknownMappedResultProperties(P));
|
|
38
49
|
}
|
|
39
50
|
// prettier-ignore
|
|
40
51
|
function FromMappedKey(K, P) {
|
|
@@ -42,11 +53,8 @@ function FromMappedKey(K, P) {
|
|
|
42
53
|
return FromMappedResult(K, R);
|
|
43
54
|
}
|
|
44
55
|
// prettier-ignore
|
|
45
|
-
function FromRest(K, T
|
|
46
|
-
|
|
47
|
-
return (T.length > 0
|
|
48
|
-
? FromRest(K, R, [...Acc, FromSchemaType(K, L)])
|
|
49
|
-
: Acc);
|
|
56
|
+
function FromRest(K, T) {
|
|
57
|
+
return T.map(L => FromSchemaType(K, L));
|
|
50
58
|
}
|
|
51
59
|
// prettier-ignore
|
|
52
60
|
function FromProperties(K, T) {
|
|
@@ -78,10 +86,9 @@ function FromSchemaType(K, T) {
|
|
|
78
86
|
}
|
|
79
87
|
// prettier-ignore
|
|
80
88
|
function FromMappedFunctionReturnType(K, T, Acc = {}) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
: Acc);
|
|
89
|
+
return K.reduce((Acc, L) => {
|
|
90
|
+
return { ...Acc, [L]: FromSchemaType(L, T) };
|
|
91
|
+
}, {});
|
|
85
92
|
}
|
|
86
93
|
/** `[Json]` Creates a Mapped object type */
|
|
87
94
|
export function Mapped(key, map, options = {}) {
|
|
@@ -15,7 +15,7 @@ type OptionalPropertyKeys<T extends TProperties> = {
|
|
|
15
15
|
}[keyof T];
|
|
16
16
|
type RequiredPropertyKeys<T extends TProperties> = keyof Omit<T, ReadonlyOptionalPropertyKeys<T> | ReadonlyPropertyKeys<T> | OptionalPropertyKeys<T>>;
|
|
17
17
|
type ObjectStaticProperties<T extends TProperties, R extends Record<keyof any, unknown>> = Evaluate<(Readonly<Partial<Pick<R, ReadonlyOptionalPropertyKeys<T>>>> & Readonly<Pick<R, ReadonlyPropertyKeys<T>>> & Partial<Pick<R, OptionalPropertyKeys<T>>> & Required<Pick<R, RequiredPropertyKeys<T>>>)>;
|
|
18
|
-
|
|
18
|
+
type ObjectStatic<T extends TProperties, P extends unknown[]> = ObjectStaticProperties<T, {
|
|
19
19
|
[K in keyof T]: Static<T[K], P>;
|
|
20
20
|
}>;
|
|
21
21
|
export type TPropertyKey = string | number;
|
|
@@ -3,7 +3,6 @@ import { Kind } from '../symbols/index.mjs';
|
|
|
3
3
|
// ------------------------------------------------------------------
|
|
4
4
|
// TypeGuard
|
|
5
5
|
// ------------------------------------------------------------------
|
|
6
|
-
// prettier-ignore
|
|
7
6
|
import { IsOptional, IsSchema } from '../guard/type.mjs';
|
|
8
7
|
/** `[Json]` Creates an Object type */
|
|
9
8
|
export function _Object(properties, options = {}) {
|
|
@@ -7,11 +7,10 @@ function FromPropertyKey(T, K, options) {
|
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
9
|
// prettier-ignore
|
|
10
|
-
function FromPropertyKeys(T, K, options
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
: Acc);
|
|
10
|
+
function FromPropertyKeys(T, K, options) {
|
|
11
|
+
return K.reduce((Acc, LK) => {
|
|
12
|
+
return { ...Acc, ...FromPropertyKey(T, LK, options) };
|
|
13
|
+
}, {});
|
|
15
14
|
}
|
|
16
15
|
// prettier-ignore
|
|
17
16
|
function FromMappedKey(T, K, options) {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SchemaOptions } from '../schema/index.mjs';
|
|
2
|
+
import type { TProperties } from '../object/index.mjs';
|
|
3
|
+
import { type TMappedResult } from '../mapped/index.mjs';
|
|
4
|
+
import { type TOmit } from './omit.mjs';
|
|
5
|
+
type TFromProperties<P extends TProperties, K extends PropertyKey[]> = ({
|
|
6
|
+
[K2 in keyof P]: TOmit<P[K2], K>;
|
|
7
|
+
});
|
|
8
|
+
type TFromMappedResult<R extends TMappedResult, K extends PropertyKey[]> = (TFromProperties<R['properties'], K>);
|
|
9
|
+
export type TOmitFromMappedResult<T extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<T, K>> = (TMappedResult<P>);
|
|
10
|
+
export declare function OmitFromMappedResult<R extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<R, K>>(R: R, K: [...K], options: SchemaOptions): TMappedResult<P>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MappedResult } from '../mapped/index.mjs';
|
|
2
|
+
import { Omit } from './omit.mjs';
|
|
3
|
+
// prettier-ignore
|
|
4
|
+
function FromProperties(P, K, options) {
|
|
5
|
+
return globalThis.Object.getOwnPropertyNames(P).reduce((Acc, K2) => {
|
|
6
|
+
return { ...Acc, [K2]: Omit(P[K2], K, options) };
|
|
7
|
+
}, {});
|
|
8
|
+
}
|
|
9
|
+
// prettier-ignore
|
|
10
|
+
function FromMappedResult(R, K, options) {
|
|
11
|
+
return FromProperties(R.properties, K, options);
|
|
12
|
+
}
|
|
13
|
+
// prettier-ignore
|
|
14
|
+
export function OmitFromMappedResult(R, K, options) {
|
|
15
|
+
const P = FromMappedResult(R, K, options);
|
|
16
|
+
return MappedResult(P);
|
|
17
|
+
}
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
import type { TSchema, SchemaOptions } from '../schema/index.mjs';
|
|
2
2
|
import type { TupleToUnion, Evaluate } from '../helpers/index.mjs';
|
|
3
3
|
import { type TRecursive } from '../recursive/index.mjs';
|
|
4
|
+
import type { TMappedKey, TMappedResult } from '../mapped/index.mjs';
|
|
4
5
|
import { type TIntersect } from '../intersect/index.mjs';
|
|
5
6
|
import { type TUnion } from '../union/index.mjs';
|
|
6
7
|
import { type TObject, type TProperties } from '../object/index.mjs';
|
|
7
8
|
import { type TIndexPropertyKeys } from '../indexed/index.mjs';
|
|
8
|
-
import { TMappedKey } from '../mapped/index.mjs';
|
|
9
9
|
import { type TOmitFromMappedKey } from './omit-from-mapped-key.mjs';
|
|
10
|
+
import { type TOmitFromMappedResult } from './omit-from-mapped-result.mjs';
|
|
10
11
|
type TFromIntersect<T extends TSchema[], K extends PropertyKey[], Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromIntersect<R, K, [...Acc, TOmitResolve<L, K>]> : Acc);
|
|
11
12
|
type TFromUnion<T extends TSchema[], K extends PropertyKey[], Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromUnion<R, K, [...Acc, TOmitResolve<L, K>]> : Acc);
|
|
12
13
|
type TFromProperties<T extends TProperties, K extends PropertyKey[], I extends PropertyKey = TupleToUnion<K>> = Evaluate<Omit<T, I>>;
|
|
13
14
|
export type TOmitResolve<T extends TProperties, K extends PropertyKey[]> = T extends TRecursive<infer S> ? TRecursive<TOmitResolve<S, K>> : T extends TIntersect<infer S> ? TIntersect<TFromIntersect<S, K>> : T extends TUnion<infer S> ? TUnion<TFromUnion<S, K>> : T extends TObject<infer S> ? TObject<TFromProperties<S, K>> : TObject<{}>;
|
|
14
15
|
export declare function OmitResolve<T extends TSchema, K extends PropertyKey[]>(T: T, K: [...K]): TOmitResolve<T, K>;
|
|
15
16
|
export type TOmit<T extends TSchema, K extends PropertyKey[]> = TOmitResolve<T, K>;
|
|
16
|
-
/** `[Json]` Constructs a type whose keys are
|
|
17
|
-
export declare function Omit<T extends
|
|
17
|
+
/** `[Json]` Constructs a type whose keys are omitted from the given type */
|
|
18
|
+
export declare function Omit<T extends TMappedResult, K extends PropertyKey[]>(T: T, K: [...K], options?: SchemaOptions): TOmitFromMappedResult<T, K>;
|
|
19
|
+
/** `[Json]` Constructs a type whose keys are omitted from the given type */
|
|
20
|
+
export declare function Omit<T extends TSchema, K extends TMappedKey>(T: T, K: K, options?: SchemaOptions): TOmitFromMappedKey<T, K>;
|
|
18
21
|
/** `[Json]` Constructs a type whose keys are omitted from the given type */
|
|
19
22
|
export declare function Omit<T extends TSchema, K extends TSchema, I extends PropertyKey[] = TIndexPropertyKeys<K>>(T: T, K: K, options?: SchemaOptions): TOmit<T, I>;
|
|
20
23
|
/** `[Json]` Constructs a type whose keys are omitted from the given type */
|
|
@@ -6,10 +6,11 @@ import { Discard } from '../discard/index.mjs';
|
|
|
6
6
|
import { TransformKind } from '../symbols/index.mjs';
|
|
7
7
|
import { CloneType } from '../clone/type.mjs';
|
|
8
8
|
import { OmitFromMappedKey } from './omit-from-mapped-key.mjs';
|
|
9
|
+
import { OmitFromMappedResult } from './omit-from-mapped-result.mjs';
|
|
9
10
|
// ------------------------------------------------------------------
|
|
10
11
|
// TypeGuard
|
|
11
12
|
// ------------------------------------------------------------------
|
|
12
|
-
import { IsMappedKey, IsIntersect, IsUnion, IsObject, IsSchema } from '../guard/type.mjs';
|
|
13
|
+
import { IsMappedKey, IsIntersect, IsUnion, IsObject, IsSchema, IsMappedResult } from '../guard/type.mjs';
|
|
13
14
|
// prettier-ignore
|
|
14
15
|
function FromIntersect(T, K) {
|
|
15
16
|
return T.map((T) => OmitResolve(T, K));
|
|
@@ -40,13 +41,14 @@ export function OmitResolve(T, K) {
|
|
|
40
41
|
Object({}));
|
|
41
42
|
}
|
|
42
43
|
export function Omit(T, K, options = {}) {
|
|
43
|
-
|
|
44
|
+
// mapped
|
|
45
|
+
if (IsMappedKey(K))
|
|
44
46
|
return OmitFromMappedKey(T, K, options);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
47
|
+
if (IsMappedResult(T))
|
|
48
|
+
return OmitFromMappedResult(T, K, options);
|
|
49
|
+
// non-mapped
|
|
50
|
+
const I = IsSchema(K) ? IndexPropertyKeys(K) : K;
|
|
51
|
+
const D = Discard(T, [TransformKind, '$id', 'required']);
|
|
52
|
+
const R = CloneType(OmitResolve(T, I), options);
|
|
53
|
+
return { ...D, ...R };
|
|
52
54
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { TProperties } from '../object/index.mjs';
|
|
2
2
|
import { type TMappedResult } from '../mapped/index.mjs';
|
|
3
3
|
import { type TOptionalWithFlag } from './optional.mjs';
|
|
4
|
-
type TFromProperties<
|
|
5
|
-
[K2 in keyof
|
|
4
|
+
type TFromProperties<P extends TProperties, F extends boolean> = ({
|
|
5
|
+
[K2 in keyof P]: TOptionalWithFlag<P[K2], F>;
|
|
6
6
|
});
|
|
7
|
-
type TFromMappedResult<
|
|
8
|
-
export type TOptionalFromMappedResult<
|
|
9
|
-
export declare function OptionalFromMappedResult<
|
|
7
|
+
type TFromMappedResult<R extends TMappedResult, F extends boolean> = (TFromProperties<R['properties'], F>);
|
|
8
|
+
export type TOptionalFromMappedResult<R extends TMappedResult, F extends boolean, P extends TProperties = TFromMappedResult<R, F>> = (TMappedResult<P>);
|
|
9
|
+
export declare function OptionalFromMappedResult<R extends TMappedResult, F extends boolean, P extends TProperties = TFromMappedResult<R, F>>(R: R, F: F): TMappedResult<P>;
|
|
10
10
|
export {};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { MappedResult } from '../mapped/index.mjs';
|
|
2
2
|
import { Optional } from './optional.mjs';
|
|
3
3
|
// prettier-ignore
|
|
4
|
-
function FromProperties(
|
|
5
|
-
return globalThis.Object.getOwnPropertyNames(
|
|
6
|
-
return { ...Acc, [K2]: Optional(
|
|
4
|
+
function FromProperties(P, F) {
|
|
5
|
+
return globalThis.Object.getOwnPropertyNames(P).reduce((Acc, K2) => {
|
|
6
|
+
return { ...Acc, [K2]: Optional(P[K2], F) };
|
|
7
7
|
}, {});
|
|
8
8
|
}
|
|
9
9
|
// prettier-ignore
|
|
10
|
-
function FromMappedResult(
|
|
11
|
-
return FromProperties(
|
|
10
|
+
function FromMappedResult(R, F) {
|
|
11
|
+
return FromProperties(R.properties, F);
|
|
12
12
|
}
|
|
13
13
|
// prettier-ignore
|
|
14
|
-
export function OptionalFromMappedResult(
|
|
15
|
-
const P = FromMappedResult(
|
|
14
|
+
export function OptionalFromMappedResult(R, F) {
|
|
15
|
+
const P = FromMappedResult(R, F);
|
|
16
16
|
return MappedResult(P);
|
|
17
17
|
}
|
|
@@ -2,10 +2,10 @@ import type { SchemaOptions } from '../schema/index.mjs';
|
|
|
2
2
|
import type { TProperties } from '../object/index.mjs';
|
|
3
3
|
import { type TMappedResult } from '../mapped/index.mjs';
|
|
4
4
|
import { type TPartial } from './partial.mjs';
|
|
5
|
-
type TFromProperties<
|
|
6
|
-
[K2 in keyof
|
|
5
|
+
type TFromProperties<P extends TProperties> = ({
|
|
6
|
+
[K2 in keyof P]: TPartial<P[K2]>;
|
|
7
7
|
});
|
|
8
|
-
type TFromMappedResult<
|
|
9
|
-
export type TPartialFromMappedResult<
|
|
10
|
-
export declare function PartialFromMappedResult<
|
|
8
|
+
type TFromMappedResult<R extends TMappedResult> = (TFromProperties<R['properties']>);
|
|
9
|
+
export type TPartialFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>> = (TMappedResult<P>);
|
|
10
|
+
export declare function PartialFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>>(R: R, options: SchemaOptions): TMappedResult<P>;
|
|
11
11
|
export {};
|
|
@@ -7,11 +7,11 @@ function FromProperties(K, options) {
|
|
|
7
7
|
}, {});
|
|
8
8
|
}
|
|
9
9
|
// prettier-ignore
|
|
10
|
-
function FromMappedResult(
|
|
11
|
-
return FromProperties(
|
|
10
|
+
function FromMappedResult(R, options) {
|
|
11
|
+
return FromProperties(R.properties, options);
|
|
12
12
|
}
|
|
13
13
|
// prettier-ignore
|
|
14
|
-
export function PartialFromMappedResult(
|
|
15
|
-
const P = FromMappedResult(
|
|
14
|
+
export function PartialFromMappedResult(R, options) {
|
|
15
|
+
const P = FromMappedResult(R, options);
|
|
16
16
|
return MappedResult(P);
|
|
17
17
|
}
|
|
@@ -9,12 +9,11 @@ import { type TObject, type TProperties } from '../object/index.mjs';
|
|
|
9
9
|
import { type TIntersect } from '../intersect/index.mjs';
|
|
10
10
|
import { type TUnion } from '../union/index.mjs';
|
|
11
11
|
import { type TPartialFromMappedResult } from './partial-from-mapped-result.mjs';
|
|
12
|
-
type
|
|
13
|
-
type TFromUnion<T extends TSchema[], Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromUnion<R, [...Acc, PartialResolve<L>]> : Acc);
|
|
12
|
+
type TFromRest<T extends TSchema[], Acc extends TSchema[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromRest<R, [...Acc, PartialResolve<L>]> : Acc);
|
|
14
13
|
type TFromProperties<T extends TProperties> = Evaluate<{
|
|
15
14
|
[K in keyof T]: T[K] extends (TReadonlyOptional<infer S>) ? TReadonlyOptional<S> : T[K] extends (TReadonly<infer S>) ? TReadonlyOptional<S> : T[K] extends (TOptional<infer S>) ? TOptional<S> : TOptional<T[K]>;
|
|
16
15
|
}>;
|
|
17
|
-
type PartialResolve<T extends TSchema> = (T extends TRecursive<infer S> ? TRecursive<PartialResolve<S>> : T extends TIntersect<infer S> ? TIntersect<
|
|
16
|
+
type PartialResolve<T extends TSchema> = (T extends TRecursive<infer S> ? TRecursive<PartialResolve<S>> : T extends TIntersect<infer S> ? TIntersect<TFromRest<S>> : T extends TUnion<infer S> ? TUnion<TFromRest<S>> : T extends TObject<infer S> ? TObject<TFromProperties<S>> : TObject<{}>);
|
|
18
17
|
declare function PartialResolve<T extends TSchema>(T: T): PartialResolve<T>;
|
|
19
18
|
export type TPartial<T extends TSchema> = PartialResolve<T>;
|
|
20
19
|
/** `[Json]` Constructs a type where all properties are optional */
|
|
@@ -11,18 +11,8 @@ import { PartialFromMappedResult } from './partial-from-mapped-result.mjs';
|
|
|
11
11
|
// ------------------------------------------------------------------
|
|
12
12
|
import { IsMappedResult, IsIntersect, IsUnion, IsObject } from '../guard/type.mjs';
|
|
13
13
|
// prettier-ignore
|
|
14
|
-
function
|
|
15
|
-
|
|
16
|
-
return (T.length > 0
|
|
17
|
-
? FromIntersect(R, [...Acc, PartialResolve(L)])
|
|
18
|
-
: Acc);
|
|
19
|
-
}
|
|
20
|
-
// prettier-ignore
|
|
21
|
-
function FromUnion(T, Acc = []) {
|
|
22
|
-
const [L, ...R] = T;
|
|
23
|
-
return (T.length > 0
|
|
24
|
-
? FromUnion(R, [...Acc, PartialResolve(L)])
|
|
25
|
-
: Acc);
|
|
14
|
+
function FromRest(T) {
|
|
15
|
+
return T.map(L => PartialResolve(L));
|
|
26
16
|
}
|
|
27
17
|
// prettier-ignore
|
|
28
18
|
function FromProperties(T) {
|
|
@@ -32,19 +22,16 @@ function FromProperties(T) {
|
|
|
32
22
|
}
|
|
33
23
|
// prettier-ignore
|
|
34
24
|
function PartialResolve(T) {
|
|
35
|
-
return (IsIntersect(T) ? Intersect(
|
|
36
|
-
IsUnion(T) ? Union(
|
|
25
|
+
return (IsIntersect(T) ? Intersect(FromRest(T.allOf)) :
|
|
26
|
+
IsUnion(T) ? Union(FromRest(T.anyOf)) :
|
|
37
27
|
IsObject(T) ? Object(FromProperties(T.properties)) :
|
|
38
28
|
Object({}));
|
|
39
29
|
}
|
|
40
30
|
/** `[Json]` Constructs a type where all properties are optional */
|
|
41
31
|
export function Partial(T, options = {}) {
|
|
42
|
-
if (IsMappedResult(T))
|
|
32
|
+
if (IsMappedResult(T))
|
|
43
33
|
return PartialFromMappedResult(T, options);
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const R = CloneType(PartialResolve(T), options);
|
|
48
|
-
return { ...D, ...R };
|
|
49
|
-
}
|
|
34
|
+
const D = Discard(T, [TransformKind, '$id', 'required']);
|
|
35
|
+
const R = CloneType(PartialResolve(T), options);
|
|
36
|
+
return { ...D, ...R };
|
|
50
37
|
}
|
|
@@ -7,11 +7,10 @@ function FromPropertyKey(T, K, options) {
|
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
9
|
// prettier-ignore
|
|
10
|
-
function FromPropertyKeys(T, K, options
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
: Acc);
|
|
10
|
+
function FromPropertyKeys(T, K, options) {
|
|
11
|
+
return K.reduce((Acc, LK) => {
|
|
12
|
+
return { ...Acc, ...FromPropertyKey(T, LK, options) };
|
|
13
|
+
}, {});
|
|
15
14
|
}
|
|
16
15
|
// prettier-ignore
|
|
17
16
|
function FromMappedKey(T, K, options) {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SchemaOptions } from '../schema/index.mjs';
|
|
2
|
+
import type { TProperties } from '../object/index.mjs';
|
|
3
|
+
import { type TMappedResult } from '../mapped/index.mjs';
|
|
4
|
+
import { type TPick } from './pick.mjs';
|
|
5
|
+
type TFromProperties<P extends TProperties, K extends PropertyKey[]> = ({
|
|
6
|
+
[K2 in keyof P]: TPick<P[K2], K>;
|
|
7
|
+
});
|
|
8
|
+
type TFromMappedResult<R extends TMappedResult, K extends PropertyKey[]> = (TFromProperties<R['properties'], K>);
|
|
9
|
+
export type TPickFromMappedResult<T extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<T, K>> = (TMappedResult<P>);
|
|
10
|
+
export declare function PickFromMappedResult<R extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<R, K>>(R: R, K: [...K], options: SchemaOptions): TMappedResult<P>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { MappedResult } from '../mapped/index.mjs';
|
|
2
|
+
import { Pick } from './pick.mjs';
|
|
3
|
+
// prettier-ignore
|
|
4
|
+
function FromProperties(P, K, options) {
|
|
5
|
+
return globalThis.Object.getOwnPropertyNames(P).reduce((Acc, K2) => {
|
|
6
|
+
return { ...Acc, [K2]: Pick(P[K2], K, options) };
|
|
7
|
+
}, {});
|
|
8
|
+
}
|
|
9
|
+
// prettier-ignore
|
|
10
|
+
function FromMappedResult(R, K, options) {
|
|
11
|
+
return FromProperties(R.properties, K, options);
|
|
12
|
+
}
|
|
13
|
+
// prettier-ignore
|
|
14
|
+
export function PickFromMappedResult(R, K, options) {
|
|
15
|
+
const P = FromMappedResult(R, K, options);
|
|
16
|
+
return MappedResult(P);
|
|
17
|
+
}
|