@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.
Files changed (155) hide show
  1. package/build/import/index.d.mts +2 -2
  2. package/build/import/type/awaited/awaited.d.mts +4 -6
  3. package/build/import/type/awaited/awaited.mjs +3 -3
  4. package/build/import/type/composite/composite.d.mts +8 -8
  5. package/build/import/type/const/const.d.mts +4 -7
  6. package/build/import/type/constructor/constructor.d.mts +4 -4
  7. package/build/import/type/deref/deref.d.mts +2 -2
  8. package/build/import/type/deref/deref.mjs +26 -36
  9. package/build/import/type/exclude/exclude-from-mapped-result.d.mts +4 -6
  10. package/build/import/type/exclude/exclude.d.mts +7 -8
  11. package/build/import/type/extends/extends-from-mapped-key.d.mts +5 -8
  12. package/build/import/type/extends/extends-from-mapped-key.mjs +3 -3
  13. package/build/import/type/extends/extends-from-mapped-result.d.mts +4 -6
  14. package/build/import/type/extends/extends.d.mts +2 -3
  15. package/build/import/type/extract/extract-from-mapped-result.d.mts +4 -6
  16. package/build/import/type/extract/extract.d.mts +8 -8
  17. package/build/import/type/function/function.d.mts +1 -1
  18. package/build/import/type/helpers/helpers.d.mts +1 -1
  19. package/build/import/type/index.d.mts +0 -1
  20. package/build/import/type/index.mjs +0 -1
  21. package/build/import/type/indexed/indexed-from-mapped-key.d.mts +5 -8
  22. package/build/import/type/indexed/indexed-from-mapped-key.mjs +3 -6
  23. package/build/import/type/indexed/indexed-property-keys.d.mts +4 -7
  24. package/build/import/type/indexed/indexed.d.mts +13 -23
  25. package/build/import/type/indexed/indexed.mjs +13 -13
  26. package/build/import/type/intersect/intersect-create.mjs +0 -1
  27. package/build/import/type/intersect/intersect-evaluated.d.mts +7 -11
  28. package/build/import/type/intersect/intersect-evaluated.mjs +12 -7
  29. package/build/import/type/intersect/intersect-type.d.mts +2 -2
  30. package/build/import/type/intersect/intersect.mjs +1 -2
  31. package/build/import/type/intrinsic/intrinsic-from-mapped-key.d.mts +7 -9
  32. package/build/import/type/intrinsic/intrinsic-from-mapped-key.mjs +3 -3
  33. package/build/import/type/intrinsic/intrinsic.d.mts +6 -8
  34. package/build/import/type/intrinsic/intrinsic.mjs +5 -3
  35. package/build/import/type/keyof/keyof-from-mapped-result.d.mts +4 -6
  36. package/build/import/type/keyof/keyof-property-keys.d.mts +9 -13
  37. package/build/import/type/keyof/keyof-property-keys.mjs +12 -9
  38. package/build/import/type/keyof/keyof.d.mts +7 -8
  39. package/build/import/type/keyof/keyof.mjs +8 -6
  40. package/build/import/type/mapped/mapped.d.mts +9 -13
  41. package/build/import/type/mapped/mapped.mjs +9 -9
  42. package/build/import/type/omit/omit-from-mapped-key.d.mts +5 -8
  43. package/build/import/type/omit/omit-from-mapped-key.mjs +3 -3
  44. package/build/import/type/omit/omit.d.mts +6 -9
  45. package/build/import/type/omit/omit.mjs +0 -1
  46. package/build/import/type/operators/operators.d.mts +16 -16
  47. package/build/import/type/operators/operators.mjs +21 -25
  48. package/build/import/type/optional/optional-from-mapped-result.d.mts +4 -6
  49. package/build/import/type/optional/optional.d.mts +3 -7
  50. package/build/import/type/partial/partial-from-mapped-result.d.mts +4 -6
  51. package/build/import/type/partial/partial.d.mts +4 -7
  52. package/build/import/type/partial/partial.mjs +6 -7
  53. package/build/import/type/pick/pick-from-mapped-key.d.mts +5 -8
  54. package/build/import/type/pick/pick-from-mapped-key.mjs +3 -3
  55. package/build/import/type/pick/pick.d.mts +4 -4
  56. package/build/import/type/readonly/readonly-from-mapped-result.d.mts +4 -6
  57. package/build/import/type/readonly/readonly.d.mts +3 -7
  58. package/build/import/type/record/record.d.mts +13 -19
  59. package/build/import/type/record/record.mjs +0 -1
  60. package/build/import/type/ref/ref.mjs +3 -0
  61. package/build/import/type/required/required-from-mapped-result.d.mts +4 -6
  62. package/build/import/type/required/required.d.mts +5 -9
  63. package/build/import/type/required/required.mjs +6 -7
  64. package/build/import/type/rest/rest.d.mts +3 -3
  65. package/build/import/type/static/static.d.mts +1 -1
  66. package/build/import/type/template-literal/finite.d.mts +3 -3
  67. package/build/import/type/template-literal/generate.d.mts +7 -8
  68. package/build/import/type/template-literal/syntax.d.mts +2 -2
  69. package/build/import/type/template-literal/syntax.mjs +2 -2
  70. package/build/import/type/transform/transform.mjs +0 -1
  71. package/build/import/type/tuple/tuple.d.mts +1 -2
  72. package/build/import/type/union/union-evaluated.d.mts +6 -10
  73. package/build/import/type/union/union-evaluated.mjs +7 -2
  74. package/build/require/index.d.ts +2 -2
  75. package/build/require/type/awaited/awaited.d.ts +4 -6
  76. package/build/require/type/awaited/awaited.js +3 -3
  77. package/build/require/type/composite/composite.d.ts +8 -8
  78. package/build/require/type/const/const.d.ts +4 -7
  79. package/build/require/type/constructor/constructor.d.ts +4 -4
  80. package/build/require/type/deref/deref.d.ts +2 -2
  81. package/build/require/type/deref/deref.js +25 -35
  82. package/build/require/type/exclude/exclude-from-mapped-result.d.ts +4 -6
  83. package/build/require/type/exclude/exclude.d.ts +7 -8
  84. package/build/require/type/extends/extends-from-mapped-key.d.ts +5 -8
  85. package/build/require/type/extends/extends-from-mapped-key.js +3 -3
  86. package/build/require/type/extends/extends-from-mapped-result.d.ts +4 -6
  87. package/build/require/type/extends/extends.d.ts +2 -3
  88. package/build/require/type/extract/extract-from-mapped-result.d.ts +4 -6
  89. package/build/require/type/extract/extract.d.ts +8 -8
  90. package/build/require/type/function/function.d.ts +1 -1
  91. package/build/require/type/helpers/helpers.d.ts +1 -1
  92. package/build/require/type/index.d.ts +0 -1
  93. package/build/require/type/index.js +0 -1
  94. package/build/require/type/indexed/indexed-from-mapped-key.d.ts +5 -8
  95. package/build/require/type/indexed/indexed-from-mapped-key.js +3 -6
  96. package/build/require/type/indexed/indexed-property-keys.d.ts +4 -7
  97. package/build/require/type/indexed/indexed.d.ts +13 -23
  98. package/build/require/type/indexed/indexed.js +13 -13
  99. package/build/require/type/intersect/intersect-create.js +0 -1
  100. package/build/require/type/intersect/intersect-evaluated.d.ts +7 -11
  101. package/build/require/type/intersect/intersect-evaluated.js +9 -4
  102. package/build/require/type/intersect/intersect-type.d.ts +2 -2
  103. package/build/require/type/intersect/intersect.js +0 -1
  104. package/build/require/type/intrinsic/intrinsic-from-mapped-key.d.ts +7 -9
  105. package/build/require/type/intrinsic/intrinsic-from-mapped-key.js +3 -3
  106. package/build/require/type/intrinsic/intrinsic.d.ts +6 -8
  107. package/build/require/type/intrinsic/intrinsic.js +5 -3
  108. package/build/require/type/keyof/keyof-from-mapped-result.d.ts +4 -6
  109. package/build/require/type/keyof/keyof-property-keys.d.ts +9 -13
  110. package/build/require/type/keyof/keyof-property-keys.js +12 -9
  111. package/build/require/type/keyof/keyof.d.ts +7 -8
  112. package/build/require/type/keyof/keyof.js +8 -6
  113. package/build/require/type/mapped/mapped.d.ts +9 -13
  114. package/build/require/type/mapped/mapped.js +9 -9
  115. package/build/require/type/omit/omit-from-mapped-key.d.ts +5 -8
  116. package/build/require/type/omit/omit-from-mapped-key.js +3 -3
  117. package/build/require/type/omit/omit.d.ts +6 -9
  118. package/build/require/type/omit/omit.js +0 -1
  119. package/build/require/type/operators/operators.d.ts +16 -16
  120. package/build/require/type/operators/operators.js +21 -25
  121. package/build/require/type/optional/optional-from-mapped-result.d.ts +4 -6
  122. package/build/require/type/optional/optional.d.ts +3 -7
  123. package/build/require/type/partial/partial-from-mapped-result.d.ts +4 -6
  124. package/build/require/type/partial/partial.d.ts +4 -7
  125. package/build/require/type/partial/partial.js +6 -7
  126. package/build/require/type/pick/pick-from-mapped-key.d.ts +5 -8
  127. package/build/require/type/pick/pick-from-mapped-key.js +3 -3
  128. package/build/require/type/pick/pick.d.ts +4 -4
  129. package/build/require/type/readonly/readonly-from-mapped-result.d.ts +4 -6
  130. package/build/require/type/readonly/readonly.d.ts +3 -7
  131. package/build/require/type/record/record.d.ts +13 -19
  132. package/build/require/type/record/record.js +0 -1
  133. package/build/require/type/ref/ref.js +3 -0
  134. package/build/require/type/required/required-from-mapped-result.d.ts +4 -6
  135. package/build/require/type/required/required.d.ts +5 -9
  136. package/build/require/type/required/required.js +6 -7
  137. package/build/require/type/rest/rest.d.ts +3 -3
  138. package/build/require/type/static/static.d.ts +1 -1
  139. package/build/require/type/template-literal/finite.d.ts +3 -3
  140. package/build/require/type/template-literal/generate.d.ts +7 -8
  141. package/build/require/type/template-literal/syntax.d.ts +2 -2
  142. package/build/require/type/template-literal/syntax.js +1 -1
  143. package/build/require/type/transform/transform.js +0 -1
  144. package/build/require/type/tuple/tuple.d.ts +1 -2
  145. package/build/require/type/union/union-evaluated.d.ts +6 -10
  146. package/build/require/type/union/union-evaluated.js +7 -2
  147. package/package.json +1 -1
  148. package/build/import/type/modifiers/index.d.mts +0 -1
  149. package/build/import/type/modifiers/index.mjs +0 -1
  150. package/build/import/type/modifiers/modifiers.d.mts +0 -18
  151. package/build/import/type/modifiers/modifiers.mjs +0 -50
  152. package/build/require/type/modifiers/index.d.ts +0 -1
  153. package/build/require/type/modifiers/index.js +0 -18
  154. package/build/require/type/modifiers/modifiers.d.ts +0 -18
  155. 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 { Union } from '../union/index.mjs';
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
- Union(literals));
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 TupleStaticRest<T extends TSchema[], P extends unknown[]> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? [Static<L, P>, ...TupleStaticRest<R, P>] : [];
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 IsUnionOptional<T extends TSchema[]> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? L extends TOptional<TSchema> ? true : IsUnionOptional<R> : false);
7
- declare function IsUnionOptional<T extends TSchema[]>(T: T): IsUnionOptional<T>;
8
- type RemoveOptionalFromRest<T extends TSchema[]> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? L extends TOptional<infer S extends TSchema> ? [RemoveOptionalFromType<S>, ...RemoveOptionalFromRest<R>] : [L, ...RemoveOptionalFromRest<R>] : []);
9
- declare function RemoveOptionalFromRest<T extends TSchema[]>(T: T): RemoveOptionalFromRest<T>;
10
- type RemoveOptionalFromType<T extends TSchema> = (T extends TReadonly<infer S extends TSchema> ? TReadonly<RemoveOptionalFromType<S>> : T extends TOptional<infer S extends TSchema> ? RemoveOptionalFromType<S> : T);
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 = UnionEvaluated<T>>(T: [...T], options?: SchemaOptions): 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
- return (T.map(T => RemoveOptionalFromType(T)));
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) {
@@ -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 FromRest<T extends TSchema[]> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? [FromSchema<L>, ...FromRest<R>] : [];
6
- declare function FromRest<T extends TSchema[]>(T: [...T]): FromRest<T>;
7
- type FromSchema<T extends TSchema> = T extends TIntersect<infer S> ? TIntersect<FromRest<S>> : T extends TUnion<infer S> ? TUnion<FromRest<S>> : T extends TPromise<infer S> ? FromSchema<S> : T;
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): FromSchema<T>;
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
- ? [FromSchema(L), ...FromRest(R)]
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 CompositeKeys<T extends TObject[]> = T extends [infer L extends TObject, ...infer R extends TObject[]] ? keyof L['properties'] | CompositeKeys<R> : never;
6
- type CompositeIndex<T extends TIntersect<TObject[]>, K extends string[]> = K extends [infer L extends string, ...infer R extends string[]] ? {
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
- } & CompositeIndex<T, R> : {};
9
- type CompositeReduce<T extends TObject[]> = UnionToTuple<CompositeKeys<T>> extends infer K ? Evaluate<CompositeIndex<TIntersect<T>, Assert<K, string[]>>> : {};
10
- export type CompositeResolve<T extends TObject[]> = TIntersect<T> extends TIntersect ? TObject<CompositeReduce<T>> : TObject<{}>;
11
- export declare function CompositeResolve<T extends TObject[]>(T: [...T]): CompositeResolve<T>;
12
- export type TComposite<T extends TObject[]> = CompositeResolve<T>;
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 FromArray<T extends readonly unknown[]> = T extends readonly [infer L extends unknown, ...infer R extends unknown[]] ? [FromValue<L, false>, ...FromArray<R>] : T;
18
- declare function FromArray<T extends readonly unknown[]>(T: [...T]): FromArray<T>;
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
- declare function FromProperties<T extends Record<PropertyKey, unknown>>(value: T): FromProperties<T>;
23
- type ConditionalReadonly<T extends TSchema, Root extends boolean> = Root extends true ? T : TReadonly<T>;
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 TConstructorStaticReturnType<T extends TSchema, P extends unknown[]> = Static<T, P>;
6
- type TConstructorStaticParameters<T extends TSchema[], P extends unknown[]> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? [Static<L, P>, ...TConstructorStaticParameters<R, P>] : [];
7
- export type TConstructorStatic<T extends TSchema[], U extends TSchema, P extends unknown[]> = (Ensure<new (...param: TConstructorStaticParameters<T, P>) => TConstructorStaticReturnType<U, P>>);
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: TConstructorStatic<T, U, this['params']>;
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 FromRest<T extends TSchema[]> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? [DerefResolve<L>, ...FromRest<R>] : []);
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<FromRest<S>, DerefResolve<R>> : T extends TFunction<infer S extends TSchema[], infer R extends TSchema> ? TFunction<FromRest<S>, DerefResolve<R>> : T extends TIntersect<infer S extends TSchema[]> ? TIntersect<FromRest<S>> : T extends TUnion<infer S extends TSchema[]> ? TUnion<FromRest<S>> : T extends TTuple<infer S extends TSchema[]> ? TTuple<FromRest<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;
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
- const clone = (0, type_1.CloneType)(schema);
25
- clone.parameters = FromRest(clone.parameters, references);
26
- clone.returns = Deref(clone.returns, references);
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
- const clone = (0, type_1.CloneType)(schema);
32
- clone.parameters = FromRest(clone.parameters, references);
33
- clone.returns = Deref(clone.returns, references);
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
- const clone = (0, type_1.CloneType)(schema);
39
- clone.allOf = FromRest(clone.allOf, references);
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
- const clone = (0, type_1.CloneType)(schema);
45
- clone.anyOf = FromRest(clone.anyOf, references);
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
- const clone = (0, type_1.CloneType)(schema);
51
- if ((0, value_1.IsUndefined)(clone.items))
52
- return clone;
53
- clone.items = FromRest(clone.items, references);
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
- const clone = (0, type_1.CloneType)(schema);
59
- clone.items = Deref(clone.items, references);
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
- const clone = (0, type_1.CloneType)(schema);
65
- clone.properties = FromProperties(clone.properties, references);
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
- const clone = (0, type_1.CloneType)(schema);
71
- clone.item = Deref(clone.item, references);
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
- const clone = (0, type_1.CloneType)(schema);
77
- clone.items = Deref(clone.items, references);
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
- const clone = (0, type_1.CloneType)(schema);
83
- clone.items = Deref(clone.items, references);
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 FromProperties<K extends TProperties, U extends TSchema> = ({
5
+ type TFromProperties<K extends TProperties, U extends TSchema> = ({
6
6
  [K2 in keyof K]: TExclude<K[K2], U>;
7
7
  });
8
- declare function FromProperties<K extends TProperties, U extends TSchema>(K: K, U: U, options: SchemaOptions): FromProperties<K, U>;
9
- type FromMappedResult<K extends TMappedResult, U extends TSchema> = (FromProperties<K['properties'], U>);
10
- declare function FromMappedResult<K extends TMappedResult, U extends TSchema>(K: K, U: U, options: SchemaOptions): FromMappedResult<K, U>;
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 { UnionEvaluated } from '../union/index';
9
+ import { type TUnionEvaluated } from '../union/index';
10
10
  import { type TExcludeFromMappedResult } from './exclude-from-mapped-result';
11
- type ExcludeTemplateLiteralResult<T extends string> = UnionEvaluated<AssertRest<UnionToTuple<{
11
+ type TExcludeTemplateLiteralResult<T extends string> = TUnionEvaluated<AssertRest<UnionToTuple<{
12
12
  [K in T]: TLiteral<K>;
13
13
  }[T]>>>;
14
- type ExcludeTemplateLiteral<T extends TTemplateLiteral, U extends TSchema> = (Exclude<Static<T>, Static<U>> extends infer S ? ExcludeTemplateLiteralResult<Assert<S, string>> : never);
15
- type ExcludeArray<T extends TSchema[], U extends TSchema> = AssertRest<UnionToTuple<{
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[] ? UnionEvaluated<R> : never;
18
- type ExcludeResolve<T extends TSchema, U extends TSchema> = T extends TTemplateLiteral ? ExcludeTemplateLiteral<T, U> : T extends TUnion<infer S> ? ExcludeArray<S, U> : T extends U ? TNever : T;
19
- declare function ExcludeResolve<L extends TSchema, R extends TSchema>(L: L, R: R): ExcludeResolve<L, R>;
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 FromPropertyKey<K extends PropertyKey, U extends TSchema, L extends TSchema, R extends TSchema> = {
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
- declare function FromPropertyKey<K extends PropertyKey, U extends TSchema, L extends TSchema, R extends TSchema>(K: K, U: U, L: L, R: R, options: SchemaOptions): FromPropertyKey<K, U, L, R>;
11
- type FromPropertyKeys<K extends PropertyKey[], U extends TSchema, L extends TSchema, R extends TSchema> = (K extends [infer LK extends PropertyKey, ...infer RK extends PropertyKey[]] ? FromPropertyKey<LK, U, L, R> & FromPropertyKeys<RK, U, L, R> : {});
12
- declare function FromPropertyKeys<K extends PropertyKey[], U extends TSchema, L extends TSchema, R extends TSchema>(K: [...K], U: U, L: L, R: R, options: SchemaOptions): FromPropertyKeys<K, U, L, R>;
13
- type FromMappedKey<K extends TMappedKey, U extends TSchema, L extends TSchema, R extends TSchema> = (FromPropertyKeys<K['keys'], U, L, R>);
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
- ? { ...FromPropertyKey(LK, U, L, R, options), ...FromPropertyKeys(RK, U, L, R, options) }
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 FromProperties<K extends TProperties, U extends TSchema, L extends TSchema, R extends TSchema> = ({
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
- declare function FromProperties<K extends TProperties, U extends TSchema, L extends TSchema, R extends TSchema>(K: K, U: U, L: L, R: R, options: SchemaOptions): FromProperties<K, U, L, R>;
9
- type FromMappedResult<K extends TMappedResult, U extends TSchema, L extends TSchema, R extends TSchema> = (FromProperties<K['properties'], U, L, R>);
10
- declare function FromMappedResult<K extends TMappedResult, U extends TSchema, L extends TSchema, R extends TSchema>(K: K, U: U, L: L, R: R, options: SchemaOptions): FromMappedResult<K, U, L, R>;
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 ExtendsResolve<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
- declare function ExtendsResolve<L extends TSchema, R extends TSchema, T extends TSchema, U extends TSchema>(left: L, right: R, trueType: T, falseType: U): ExtendsResolve<L, R, T, U>;
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 FromProperties<K extends TProperties, U extends TSchema> = ({
5
+ type TFromProperties<K extends TProperties, U extends TSchema> = ({
6
6
  [K2 in keyof K]: TExtract<K[K2], U>;
7
7
  });
8
- declare function FromProperties<K extends TProperties, U extends TSchema>(K: K, U: U, options: SchemaOptions): FromProperties<K, U>;
9
- type FromMappedResult<K extends TMappedResult, U extends TSchema> = (FromProperties<K['properties'], U>);
10
- declare function FromMappedResult<K extends TMappedResult, U extends TSchema>(K: K, U: U, options: SchemaOptions): FromMappedResult<K, U>;
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 { UnionEvaluated } from '../union/index';
8
+ import { type TUnionEvaluated } from '../union/index';
9
9
  import { type TExtractFromMappedResult } from './extract-from-mapped-result';
10
- type FromTemplateLiteralResult<T extends string> = UnionEvaluated<AssertRest<UnionToTuple<{
10
+ type TFromTemplateLiteralResult<T extends string> = TUnionEvaluated<AssertRest<UnionToTuple<{
11
11
  [K in T]: TLiteral<K>;
12
12
  }[T]>>>;
13
- type FromTemplateLiteral<T extends TTemplateLiteral, U extends TSchema> = Extract<Static<T>, Static<U>> extends infer S ? FromTemplateLiteralResult<Assert<S, string>> : never;
14
- type FromArray<T extends TSchema[], U extends TSchema> = AssertRest<UnionToTuple<{
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[] ? UnionEvaluated<R> : never;
17
- export type ExtractResolve<T extends TSchema, U extends TSchema> = (T extends TTemplateLiteral ? FromTemplateLiteral<T, U> : T extends TUnion<infer S> ? FromArray<S, U> : T extends U ? T : T);
18
- export declare function ExtractResolve<L extends TSchema, R extends TSchema>(L: L, R: R): ExtractResolve<L, R>;
19
- export type TExtract<T extends TSchema, U extends TSchema> = ExtractResolve<T, U>;
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[]] ? [Static<L, P>, ...FunctionStaticParameters<R, P>] : [];
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, L = UnionLast<U>> = [U] extends [never] ? [] : [...UnionToTuple<Exclude<U, L>>, L];
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 MappedIndexPropertyKey<T extends TSchema, K extends PropertyKey> = {
6
+ type TMappedIndexPropertyKey<T extends TSchema, K extends PropertyKey> = {
7
7
  [_ in K]: TIndex<T, [K]>;
8
8
  };
9
- declare function MappedIndexPropertyKey<T extends TSchema, K extends PropertyKey>(T: T, K: K, options: SchemaOptions): MappedIndexPropertyKey<T, K>;
10
- type MappedIndexPropertyKeys<T extends TSchema, K extends PropertyKey[]> = (K extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? MappedIndexPropertyKey<T, L> & MappedIndexPropertyKeys<T, R> : {});
11
- declare function MappedIndexPropertyKeys<T extends TSchema, K extends PropertyKey[]>(T: T, K: [...K], options: SchemaOptions): MappedIndexPropertyKeys<T, K>;
12
- type MappedIndexProperties<T extends TSchema, K extends TMappedKey> = Evaluate<MappedIndexPropertyKeys<T, K['keys']>>;
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
- ? { ...MappedIndexPropertyKey(T, L, options), ...MappedIndexPropertyKeys(T, R, options) } // TS 5.4-dev
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) {