@sinclair/typebox 0.32.0-dev-20 → 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 (208) hide show
  1. package/build/import/compiler/compiler.mjs +62 -62
  2. package/build/import/errors/errors.mjs +62 -62
  3. package/build/import/index.d.mts +6 -6
  4. package/build/import/index.mjs +1 -1
  5. package/build/import/type/awaited/awaited.d.mts +4 -6
  6. package/build/import/type/awaited/awaited.mjs +3 -3
  7. package/build/import/type/composite/composite.d.mts +8 -8
  8. package/build/import/type/const/const.d.mts +4 -7
  9. package/build/import/type/constructor/constructor.d.mts +4 -4
  10. package/build/import/type/deref/deref.d.mts +2 -2
  11. package/build/import/type/deref/deref.mjs +26 -36
  12. package/build/import/type/exclude/exclude-from-mapped-result.d.mts +4 -6
  13. package/build/import/type/exclude/exclude.d.mts +7 -8
  14. package/build/import/type/extends/extends-from-mapped-key.d.mts +5 -8
  15. package/build/import/type/extends/extends-from-mapped-key.mjs +3 -3
  16. package/build/import/type/extends/extends-from-mapped-result.d.mts +4 -6
  17. package/build/import/type/extends/extends.d.mts +2 -3
  18. package/build/import/type/extract/extract-from-mapped-result.d.mts +4 -6
  19. package/build/import/type/extract/extract.d.mts +8 -8
  20. package/build/import/type/function/function.d.mts +1 -1
  21. package/build/import/type/helpers/helpers.d.mts +1 -1
  22. package/build/import/type/index.d.mts +0 -1
  23. package/build/import/type/index.mjs +0 -1
  24. package/build/import/type/indexed/indexed-from-mapped-key.d.mts +5 -8
  25. package/build/import/type/indexed/indexed-from-mapped-key.mjs +3 -6
  26. package/build/import/type/indexed/indexed-property-keys.d.mts +5 -8
  27. package/build/import/type/indexed/indexed-property-keys.mjs +6 -11
  28. package/build/import/type/indexed/indexed.d.mts +13 -23
  29. package/build/import/type/indexed/indexed.mjs +13 -13
  30. package/build/import/type/intersect/intersect-create.mjs +0 -1
  31. package/build/import/type/intersect/intersect-evaluated.d.mts +7 -11
  32. package/build/import/type/intersect/intersect-evaluated.mjs +12 -7
  33. package/build/import/type/intersect/intersect-type.d.mts +2 -2
  34. package/build/import/type/intersect/intersect.mjs +1 -2
  35. package/build/import/type/intrinsic/intrinsic-from-mapped-key.d.mts +7 -9
  36. package/build/import/type/intrinsic/intrinsic-from-mapped-key.mjs +3 -3
  37. package/build/import/type/intrinsic/intrinsic.d.mts +6 -8
  38. package/build/import/type/intrinsic/intrinsic.mjs +8 -6
  39. package/build/import/type/keyof/keyof-from-mapped-result.d.mts +4 -6
  40. package/build/import/type/keyof/keyof-property-keys.d.mts +9 -13
  41. package/build/import/type/keyof/keyof-property-keys.mjs +12 -9
  42. package/build/import/type/keyof/keyof.d.mts +7 -8
  43. package/build/import/type/keyof/keyof.mjs +8 -6
  44. package/build/import/type/mapped/mapped.d.mts +9 -13
  45. package/build/import/type/mapped/mapped.mjs +9 -9
  46. package/build/import/type/omit/omit-from-mapped-key.d.mts +5 -8
  47. package/build/import/type/omit/omit-from-mapped-key.mjs +3 -3
  48. package/build/import/type/omit/omit.d.mts +6 -9
  49. package/build/import/type/omit/omit.mjs +0 -1
  50. package/build/import/type/operators/operators.d.mts +16 -16
  51. package/build/import/type/operators/operators.mjs +21 -25
  52. package/build/import/type/optional/optional-from-mapped-result.d.mts +4 -6
  53. package/build/import/type/optional/optional.d.mts +3 -7
  54. package/build/import/type/partial/partial-from-mapped-result.d.mts +4 -6
  55. package/build/import/type/partial/partial.d.mts +4 -7
  56. package/build/import/type/partial/partial.mjs +6 -7
  57. package/build/import/type/pick/pick-from-mapped-key.d.mts +5 -8
  58. package/build/import/type/pick/pick-from-mapped-key.mjs +3 -3
  59. package/build/import/type/pick/pick.d.mts +4 -4
  60. package/build/import/type/readonly/readonly-from-mapped-result.d.mts +4 -6
  61. package/build/import/type/readonly/readonly.d.mts +3 -7
  62. package/build/import/type/record/record.d.mts +14 -20
  63. package/build/import/type/record/record.mjs +2 -4
  64. package/build/import/type/ref/ref.mjs +3 -0
  65. package/build/import/type/required/required-from-mapped-result.d.mts +4 -6
  66. package/build/import/type/required/required.d.mts +5 -9
  67. package/build/import/type/required/required.mjs +6 -7
  68. package/build/import/type/rest/rest.d.mts +3 -3
  69. package/build/import/type/schema/schema.d.mts +1 -1
  70. package/build/import/type/static/static.d.mts +1 -1
  71. package/build/import/type/symbol/symbol.d.mts +1 -1
  72. package/build/import/type/template-literal/finite.d.mts +7 -5
  73. package/build/import/type/template-literal/finite.mjs +14 -5
  74. package/build/import/type/template-literal/generate.d.mts +14 -9
  75. package/build/import/type/template-literal/generate.mjs +19 -9
  76. package/build/import/type/template-literal/index.d.mts +1 -1
  77. package/build/import/type/template-literal/index.mjs +1 -1
  78. package/build/import/type/template-literal/{parser.mjs → parse.mjs} +7 -2
  79. package/build/import/type/template-literal/syntax.d.mts +3 -3
  80. package/build/import/type/template-literal/syntax.mjs +2 -3
  81. package/build/import/type/template-literal/template-literal.d.mts +2 -2
  82. package/build/import/type/template-literal/template-literal.mjs +1 -1
  83. package/build/import/type/template-literal/union.d.mts +2 -2
  84. package/build/import/type/template-literal/union.mjs +5 -10
  85. package/build/import/type/transform/transform.mjs +0 -1
  86. package/build/import/type/tuple/tuple.d.mts +1 -2
  87. package/build/import/type/type/json.d.mts +2 -2
  88. package/build/import/type/union/union-evaluated.d.mts +6 -10
  89. package/build/import/type/union/union-evaluated.mjs +7 -2
  90. package/build/import/value/cast/cast.mjs +20 -20
  91. package/build/import/value/check/check.mjs +62 -62
  92. package/build/import/value/clean/clean.mjs +16 -16
  93. package/build/import/value/convert/convert.mjs +36 -36
  94. package/build/import/value/create/create.mjs +66 -67
  95. package/build/import/value/default/default.mjs +16 -16
  96. package/build/import/value/transform/decode.mjs +18 -18
  97. package/build/import/value/transform/encode.mjs +18 -18
  98. package/build/import/value/transform/has.mjs +28 -28
  99. package/build/require/compiler/compiler.js +62 -62
  100. package/build/require/errors/errors.js +62 -62
  101. package/build/require/index.d.ts +6 -6
  102. package/build/require/index.js +4 -2
  103. package/build/require/type/awaited/awaited.d.ts +4 -6
  104. package/build/require/type/awaited/awaited.js +3 -3
  105. package/build/require/type/composite/composite.d.ts +8 -8
  106. package/build/require/type/const/const.d.ts +4 -7
  107. package/build/require/type/constructor/constructor.d.ts +4 -4
  108. package/build/require/type/deref/deref.d.ts +2 -2
  109. package/build/require/type/deref/deref.js +25 -35
  110. package/build/require/type/exclude/exclude-from-mapped-result.d.ts +4 -6
  111. package/build/require/type/exclude/exclude.d.ts +7 -8
  112. package/build/require/type/extends/extends-from-mapped-key.d.ts +5 -8
  113. package/build/require/type/extends/extends-from-mapped-key.js +3 -3
  114. package/build/require/type/extends/extends-from-mapped-result.d.ts +4 -6
  115. package/build/require/type/extends/extends.d.ts +2 -3
  116. package/build/require/type/extract/extract-from-mapped-result.d.ts +4 -6
  117. package/build/require/type/extract/extract.d.ts +8 -8
  118. package/build/require/type/function/function.d.ts +1 -1
  119. package/build/require/type/helpers/helpers.d.ts +1 -1
  120. package/build/require/type/index.d.ts +0 -1
  121. package/build/require/type/index.js +0 -1
  122. package/build/require/type/indexed/indexed-from-mapped-key.d.ts +5 -8
  123. package/build/require/type/indexed/indexed-from-mapped-key.js +3 -6
  124. package/build/require/type/indexed/indexed-property-keys.d.ts +5 -8
  125. package/build/require/type/indexed/indexed-property-keys.js +4 -9
  126. package/build/require/type/indexed/indexed.d.ts +13 -23
  127. package/build/require/type/indexed/indexed.js +13 -13
  128. package/build/require/type/intersect/intersect-create.js +0 -1
  129. package/build/require/type/intersect/intersect-evaluated.d.ts +7 -11
  130. package/build/require/type/intersect/intersect-evaluated.js +9 -4
  131. package/build/require/type/intersect/intersect-type.d.ts +2 -2
  132. package/build/require/type/intersect/intersect.js +0 -1
  133. package/build/require/type/intrinsic/intrinsic-from-mapped-key.d.ts +7 -9
  134. package/build/require/type/intrinsic/intrinsic-from-mapped-key.js +3 -3
  135. package/build/require/type/intrinsic/intrinsic.d.ts +6 -8
  136. package/build/require/type/intrinsic/intrinsic.js +7 -5
  137. package/build/require/type/keyof/keyof-from-mapped-result.d.ts +4 -6
  138. package/build/require/type/keyof/keyof-property-keys.d.ts +9 -13
  139. package/build/require/type/keyof/keyof-property-keys.js +12 -9
  140. package/build/require/type/keyof/keyof.d.ts +7 -8
  141. package/build/require/type/keyof/keyof.js +8 -6
  142. package/build/require/type/mapped/mapped.d.ts +9 -13
  143. package/build/require/type/mapped/mapped.js +9 -9
  144. package/build/require/type/omit/omit-from-mapped-key.d.ts +5 -8
  145. package/build/require/type/omit/omit-from-mapped-key.js +3 -3
  146. package/build/require/type/omit/omit.d.ts +6 -9
  147. package/build/require/type/omit/omit.js +0 -1
  148. package/build/require/type/operators/operators.d.ts +16 -16
  149. package/build/require/type/operators/operators.js +21 -25
  150. package/build/require/type/optional/optional-from-mapped-result.d.ts +4 -6
  151. package/build/require/type/optional/optional.d.ts +3 -7
  152. package/build/require/type/partial/partial-from-mapped-result.d.ts +4 -6
  153. package/build/require/type/partial/partial.d.ts +4 -7
  154. package/build/require/type/partial/partial.js +6 -7
  155. package/build/require/type/pick/pick-from-mapped-key.d.ts +5 -8
  156. package/build/require/type/pick/pick-from-mapped-key.js +3 -3
  157. package/build/require/type/pick/pick.d.ts +4 -4
  158. package/build/require/type/readonly/readonly-from-mapped-result.d.ts +4 -6
  159. package/build/require/type/readonly/readonly.d.ts +3 -7
  160. package/build/require/type/record/record.d.ts +14 -20
  161. package/build/require/type/record/record.js +1 -3
  162. package/build/require/type/ref/ref.js +3 -0
  163. package/build/require/type/required/required-from-mapped-result.d.ts +4 -6
  164. package/build/require/type/required/required.d.ts +5 -9
  165. package/build/require/type/required/required.js +6 -7
  166. package/build/require/type/rest/rest.d.ts +3 -3
  167. package/build/require/type/schema/schema.d.ts +1 -1
  168. package/build/require/type/static/static.d.ts +1 -1
  169. package/build/require/type/symbol/symbol.d.ts +1 -1
  170. package/build/require/type/template-literal/finite.d.ts +7 -5
  171. package/build/require/type/template-literal/finite.js +16 -6
  172. package/build/require/type/template-literal/generate.d.ts +14 -9
  173. package/build/require/type/template-literal/generate.js +22 -11
  174. package/build/require/type/template-literal/index.d.ts +1 -1
  175. package/build/require/type/template-literal/index.js +1 -1
  176. package/build/require/type/template-literal/{parser.js → parse.js} +7 -2
  177. package/build/require/type/template-literal/syntax.d.ts +3 -3
  178. package/build/require/type/template-literal/syntax.js +1 -2
  179. package/build/require/type/template-literal/template-literal.d.ts +2 -2
  180. package/build/require/type/template-literal/template-literal.js +1 -1
  181. package/build/require/type/template-literal/union.d.ts +2 -2
  182. package/build/require/type/template-literal/union.js +5 -10
  183. package/build/require/type/transform/transform.js +0 -1
  184. package/build/require/type/tuple/tuple.d.ts +1 -2
  185. package/build/require/type/type/json.d.ts +2 -2
  186. package/build/require/type/union/union-evaluated.d.ts +6 -10
  187. package/build/require/type/union/union-evaluated.js +7 -2
  188. package/build/require/value/cast/cast.js +20 -20
  189. package/build/require/value/check/check.js +62 -62
  190. package/build/require/value/clean/clean.js +16 -16
  191. package/build/require/value/convert/convert.js +36 -36
  192. package/build/require/value/create/create.js +65 -66
  193. package/build/require/value/default/default.js +16 -16
  194. package/build/require/value/transform/decode.js +18 -18
  195. package/build/require/value/transform/encode.js +18 -18
  196. package/build/require/value/transform/has.js +28 -28
  197. package/package.json +1 -1
  198. package/readme.md +47 -47
  199. package/build/import/type/modifiers/index.d.mts +0 -1
  200. package/build/import/type/modifiers/index.mjs +0 -1
  201. package/build/import/type/modifiers/modifiers.d.mts +0 -18
  202. package/build/import/type/modifiers/modifiers.mjs +0 -50
  203. package/build/require/type/modifiers/index.d.ts +0 -1
  204. package/build/require/type/modifiers/index.js +0 -18
  205. package/build/require/type/modifiers/modifiers.d.ts +0 -18
  206. package/build/require/type/modifiers/modifiers.js +0 -56
  207. /package/build/import/type/template-literal/{parser.d.mts → parse.d.mts} +0 -0
  208. /package/build/require/type/template-literal/{parser.d.ts → parse.d.ts} +0 -0
@@ -2,11 +2,9 @@ import type { TSchema, SchemaOptions } from '../schema/index.mjs';
2
2
  import { type TIntersect } from '../intersect/index.mjs';
3
3
  import { type TUnion } from '../union/index.mjs';
4
4
  import { type TPromise } from '../promise/index.mjs';
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 {};
@@ -7,11 +7,11 @@ import { CloneType } from '../clone/type.mjs';
7
7
  // prettier-ignore
8
8
  import { IsIntersect, IsUnion, IsPromise } from '../guard/type.mjs';
9
9
  // prettier-ignore
10
- function FromRest(T) {
10
+ function FromRest(T, Acc = []) {
11
11
  const [L, ...R] = T;
12
12
  return (T.length > 0
13
- ? [FromSchema(L), ...FromRest(R)]
14
- : []);
13
+ ? FromRest(R, [...Acc, FromSchema(L)])
14
+ : Acc);
15
15
  }
16
16
  // prettier-ignore
17
17
  function FromIntersect(T) {
@@ -1,15 +1,15 @@
1
1
  import type { UnionToTuple, Assert, Evaluate } from '../helpers/index.mjs';
2
- import { type TObject, type ObjectOptions } from '../object/index.mjs';
2
+ import { type TObject, type TProperties, type ObjectOptions } from '../object/index.mjs';
3
3
  import { type TIntersect } from '../intersect/index.mjs';
4
4
  import { type TIndex } from '../indexed/index.mjs';
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.mjs';
14
14
  import { type TUndefined } from '../undefined/index.mjs';
15
15
  import { type TUint8Array } from '../uint8array/index.mjs';
16
16
  import { type TUnknown } from '../unknown/index.mjs';
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.mjs';
2
2
  import type { Static } from '../static/index.mjs';
3
3
  import type { Ensure } from '../helpers/index.mjs';
4
4
  import { Kind } from '../symbols/index.mjs';
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.mjs';
11
11
  import type { TFunction } from '../function/index.mjs';
12
12
  import type { TRef } from '../ref/index.mjs';
13
13
  import type { TObject, TProperties } from '../object/index.mjs';
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 */
@@ -1,4 +1,4 @@
1
- import { CloneType } from '../clone/type.mjs';
1
+ import { CloneType, CloneRest } from '../clone/type.mjs';
2
2
  import { Discard } from '../discard/index.mjs';
3
3
  import { IsUndefined } from '../guard/value.mjs';
4
4
  // ------------------------------------------------------------------
@@ -17,67 +17,57 @@ function FromProperties(properties, references) {
17
17
  }
18
18
  // prettier-ignore
19
19
  function FromConstructor(schema, references) {
20
- const clone = CloneType(schema);
21
- clone.parameters = FromRest(clone.parameters, references);
22
- clone.returns = Deref(clone.returns, references);
23
- return clone;
20
+ schema.parameters = FromRest(schema.parameters, references);
21
+ schema.returns = Deref(schema.returns, references);
22
+ return schema;
24
23
  }
25
24
  // prettier-ignore
26
25
  function FromFunction(schema, references) {
27
- const clone = CloneType(schema);
28
- clone.parameters = FromRest(clone.parameters, references);
29
- clone.returns = Deref(clone.returns, references);
30
- return clone;
26
+ schema.parameters = FromRest(schema.parameters, references);
27
+ schema.returns = Deref(schema.returns, references);
28
+ return schema;
31
29
  }
32
30
  // prettier-ignore
33
31
  function FromIntersect(schema, references) {
34
- const clone = CloneType(schema);
35
- clone.allOf = FromRest(clone.allOf, references);
36
- return clone;
32
+ schema.allOf = FromRest(schema.allOf, references);
33
+ return schema;
37
34
  }
38
35
  // prettier-ignore
39
36
  function FromUnion(schema, references) {
40
- const clone = CloneType(schema);
41
- clone.anyOf = FromRest(clone.anyOf, references);
42
- return clone;
37
+ schema.anyOf = FromRest(schema.anyOf, references);
38
+ return schema;
43
39
  }
44
40
  // prettier-ignore
45
41
  function FromTuple(schema, references) {
46
- const clone = CloneType(schema);
47
- if (IsUndefined(clone.items))
48
- return clone;
49
- clone.items = FromRest(clone.items, references);
50
- return clone;
42
+ if (IsUndefined(schema.items))
43
+ return schema;
44
+ schema.items = FromRest(schema.items, references);
45
+ return schema;
51
46
  }
52
47
  // prettier-ignore
53
48
  function FromArray(schema, references) {
54
- const clone = CloneType(schema);
55
- clone.items = Deref(clone.items, references);
56
- return clone;
49
+ schema.items = Deref(schema.items, references);
50
+ return schema;
57
51
  }
58
52
  // prettier-ignore
59
53
  function FromObject(schema, references) {
60
- const clone = CloneType(schema);
61
- clone.properties = FromProperties(clone.properties, references);
62
- return clone;
54
+ schema.properties = FromProperties(schema.properties, references);
55
+ return schema;
63
56
  }
64
57
  // prettier-ignore
65
58
  function FromPromise(schema, references) {
66
- const clone = CloneType(schema);
67
- clone.item = Deref(clone.item, references);
68
- return clone;
59
+ schema.item = Deref(schema.item, references);
60
+ return schema;
69
61
  }
70
62
  // prettier-ignore
71
63
  function FromAsyncIterator(schema, references) {
72
- const clone = CloneType(schema);
73
- clone.items = Deref(clone.items, references);
74
- return clone;
64
+ schema.items = Deref(schema.items, references);
65
+ return schema;
75
66
  }
76
67
  // prettier-ignore
77
68
  function FromIterator(schema, references) {
78
- const clone = CloneType(schema);
79
- clone.items = Deref(clone.items, references);
80
- return clone;
69
+ schema.items = Deref(schema.items, references);
70
+ return schema;
81
71
  }
82
72
  // prettier-ignore
83
73
  function FromRef(schema, references) {
@@ -104,5 +94,5 @@ export function DerefResolve(schema, references) {
104
94
  }
105
95
  /** `[Json]` Creates a dereferenced type */
106
96
  export function Deref(schema, references) {
107
- return DerefResolve(schema, references);
97
+ return DerefResolve(CloneType(schema), CloneRest(references));
108
98
  }
@@ -2,12 +2,10 @@ import type { TSchema, 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 TExclude } from './exclude.mjs';
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.mjs';
6
6
  import { type TNever } from '../never/index.mjs';
7
7
  import { type TLiteral } from '../literal/index.mjs';
8
8
  import { type Static } from '../static/index.mjs';
9
- import { UnionEvaluated } from '../union/index.mjs';
9
+ import { type TUnionEvaluated } from '../union/index.mjs';
10
10
  import { type TExcludeFromMappedResult } from './exclude-from-mapped-result.mjs';
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.mjs';
4
4
  import { type TMappedResult, type TMappedKey } from '../mapped/index.mjs';
5
5
  import { TLiteral, TLiteralValue } from '../literal/index.mjs';
6
6
  import { type TExtends } from './extends.mjs';
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 {};
@@ -8,11 +8,11 @@ function FromPropertyKey(K, U, L, R, options) {
8
8
  };
9
9
  }
10
10
  // prettier-ignore
11
- function FromPropertyKeys(K, U, L, R, options) {
11
+ function FromPropertyKeys(K, U, L, R, options, Acc = {}) {
12
12
  const [LK, ...RK] = K;
13
13
  return (K.length > 0
14
- ? { ...FromPropertyKey(LK, U, L, R, options), ...FromPropertyKeys(RK, U, L, R, options) }
15
- : {});
14
+ ? FromPropertyKeys(RK, U, L, R, options, { ...Acc, ...FromPropertyKey(LK, U, L, R, options) })
15
+ : Acc);
16
16
  }
17
17
  // prettier-ignore
18
18
  function FromMappedKey(K, U, L, R, options) {
@@ -2,12 +2,10 @@ import type { TSchema, 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 TExtends } from './extends.mjs';
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.mjs';
5
5
  import { UnionToTuple } from '../helpers/index.mjs';
6
6
  import { type TExtendsFromMappedKey } from './extends-from-mapped-key.mjs';
7
7
  import { type TExtendsFromMappedResult } from './extends-from-mapped-result.mjs';
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.mjs';
2
2
  import type { TProperties } from '../object/index.mjs';
3
3
  import { type TMappedResult } from '../mapped/index.mjs';
4
4
  import { type TExtract } from './extract.mjs';
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.mjs';
5
5
  import { type TLiteral } from '../literal/index.mjs';
6
6
  import { type TUnion } from '../union/index.mjs';
7
7
  import { type Static } from '../static/index.mjs';
8
- import { UnionEvaluated } from '../union/index.mjs';
8
+ import { type TUnionEvaluated } from '../union/index.mjs';
9
9
  import { type TExtractFromMappedResult } from './extract-from-mapped-result.mjs';
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.mjs';
3
3
  import type { Ensure } from '../helpers/index.mjs';
4
4
  import { Kind } from '../symbols/index.mjs';
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.mjs';
28
28
  export * from './keyof/index.mjs';
29
29
  export * from './literal/index.mjs';
30
30
  export * from './mapped/index.mjs';
31
- export * from './modifiers/index.mjs';
32
31
  export * from './never/index.mjs';
33
32
  export * from './not/index.mjs';
34
33
  export * from './null/index.mjs';
@@ -28,7 +28,6 @@ export * from './iterator/index.mjs';
28
28
  export * from './keyof/index.mjs';
29
29
  export * from './literal/index.mjs';
30
30
  export * from './mapped/index.mjs';
31
- export * from './modifiers/index.mjs';
32
31
  export * from './never/index.mjs';
33
32
  export * from './not/index.mjs';
34
33
  export * from './null/index.mjs';
@@ -3,14 +3,11 @@ import { type TProperties } from '../object/index.mjs';
3
3
  import { type TIndex } from './indexed.mjs';
4
4
  import { type TMappedResult, type TMappedKey } from '../mapped/index.mjs';
5
5
  import { Evaluate } from '../helpers/index.mjs';
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 {};
@@ -2,17 +2,14 @@ import { Index } from './indexed.mjs';
2
2
  import { MappedResult } from '../mapped/index.mjs';
3
3
  // prettier-ignore
4
4
  function MappedIndexPropertyKey(T, K, options) {
5
- // todo: propogate options into index result. This type looks like it
6
- // could use a clean up, possibly inlining it into indexed.ts to
7
- // bring it inline with other mapping types.
8
5
  return { [K]: Index(T, [K], options) };
9
6
  }
10
7
  // prettier-ignore
11
- function MappedIndexPropertyKeys(T, K, options) {
8
+ function MappedIndexPropertyKeys(T, K, options, Acc = {}) {
12
9
  const [L, ...R] = K;
13
10
  return (K.length > 0
14
- ? { ...MappedIndexPropertyKey(T, L, options), ...MappedIndexPropertyKeys(T, R, options) } // TS 5.4-dev
15
- : {});
11
+ ? MappedIndexPropertyKeys(T, R, options, { ...Acc, ...MappedIndexPropertyKey(T, L, options) })
12
+ : Acc);
16
13
  }
17
14
  // prettier-ignore
18
15
  function MappedIndexProperties(T, K, options) {
@@ -1,16 +1,13 @@
1
- import { type TTemplateLiteral, TemplateLiteralGenerate, IsTemplateLiteralFinite } from '../template-literal/index.mjs';
1
+ import { type TTemplateLiteral, TTemplateLiteralGenerate } from '../template-literal/index.mjs';
2
2
  import { type TLiteral, type TLiteralValue } from '../literal/index.mjs';
3
3
  import { type TInteger } from '../integer/index.mjs';
4
4
  import { type TNumber } from '../number/index.mjs';
5
5
  import { type TSchema } from '../schema/index.mjs';
6
6
  import { type TUnion } from '../union/index.mjs';
7
- type FromTemplateLiteral<T extends TTemplateLiteral, F = IsTemplateLiteralFinite<T>> = (F extends true ? TemplateLiteralGenerate<T> extends infer R extends string[] ? R : [] : []);
8
- declare function FromTemplateLiteral<T extends TTemplateLiteral>(T: T): FromTemplateLiteral<T>;
9
- type FromUnion<T extends TSchema[]> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? [...TIndexPropertyKeys<L>, ...FromUnion<R>] : []);
10
- declare function FromUnion<T extends TSchema[]>(T: T): FromUnion<T>;
11
- type FromLiteral<T extends TLiteralValue> = (T extends PropertyKey ? [`${T}`] : []);
12
- declare function FromLiteral<T extends TLiteralValue>(T: T): FromLiteral<T>;
13
- export type TIndexPropertyKeys<T extends TSchema> = (T extends TTemplateLiteral ? FromTemplateLiteral<T> : T extends TUnion<infer S> ? FromUnion<S> : T extends TLiteral<infer S> ? FromLiteral<S> : T extends TNumber ? ['[number]'] : T extends TInteger ? ['[number]'] : [
7
+ type TFromTemplateLiteral<T extends TTemplateLiteral, R extends string[] = TTemplateLiteralGenerate<T>> = (R);
8
+ type TFromUnion<T extends TSchema[], Acc extends string[] = []> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? TFromUnion<R, [...TIndexPropertyKeys<L>, ...Acc]> : Acc);
9
+ type TFromLiteral<T extends TLiteralValue> = (T extends PropertyKey ? [`${T}`] : []);
10
+ export type TIndexPropertyKeys<T extends TSchema> = (T extends TTemplateLiteral ? TFromTemplateLiteral<T> : T extends TUnion<infer S> ? TFromUnion<S> : T extends TLiteral<infer S> ? TFromLiteral<S> : T extends TNumber ? ['[number]'] : T extends TInteger ? ['[number]'] : [
14
11
  ]);
15
12
  /** Returns a tuple of PropertyKeys derived from the given TSchema */
16
13
  export declare function IndexPropertyKeys<T extends TSchema>(T: T): TIndexPropertyKeys<T>;
@@ -1,19 +1,13 @@
1
- import { TemplateLiteralParseExact, IsTemplateLiteralFinite, TemplateLiteralToUnion } from '../template-literal/index.mjs';
1
+ import { TemplateLiteralGenerate } from '../template-literal/index.mjs';
2
2
  // ------------------------------------------------------------------
3
3
  // TypeGuard
4
4
  // ------------------------------------------------------------------
5
5
  // prettier-ignore
6
- import { IsTemplateLiteral, IsUnionLiteral, IsUnion, IsLiteral, IsNumber, IsInteger } from '../guard/type.mjs';
6
+ import { IsTemplateLiteral, IsUnion, IsLiteral, IsNumber, IsInteger } from '../guard/type.mjs';
7
7
  // prettier-ignore
8
8
  function FromTemplateLiteral(T) {
9
- const E = TemplateLiteralParseExact(T.pattern);
10
- const F = IsTemplateLiteralFinite(E);
11
- const S = TemplateLiteralToUnion(T);
12
- return (F === true
13
- ? IsUnionLiteral(S)
14
- ? S.anyOf.map(S => S.const.toString())
15
- : []
16
- : []);
9
+ const R = TemplateLiteralGenerate(T);
10
+ return R.map(S => S.toString());
17
11
  }
18
12
  // prettier-ignore
19
13
  function FromUnion(T) {
@@ -24,7 +18,8 @@ function FromUnion(T) {
24
18
  }
25
19
  // prettier-ignore
26
20
  function FromLiteral(T) {
27
- return ([T.toString()]);
21
+ return ([T.toString()] // TS 5.4 observes TLiteralValue as not having a toString()
22
+ );
28
23
  }
29
24
  /** Returns a tuple of PropertyKeys derived from the given TSchema */
30
25
  // prettier-ignore