@sinclair/typebox 0.32.0-dev-14 → 0.32.0-dev-16

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 (236) hide show
  1. package/build/import/index.d.mts +12 -12
  2. package/build/import/index.mjs +5 -5
  3. package/build/import/type/array/array.d.mts +1 -1
  4. package/build/import/type/constructor/constructor.d.mts +4 -4
  5. package/build/import/type/exclude/exclude-from-mapped-result.d.mts +13 -0
  6. package/build/import/type/exclude/exclude-from-mapped-result.mjs +14 -0
  7. package/build/import/type/exclude/exclude.d.mts +7 -4
  8. package/build/import/type/exclude/exclude.mjs +10 -4
  9. package/build/import/type/exclude/index.d.mts +1 -0
  10. package/build/import/type/exclude/index.mjs +1 -0
  11. package/build/import/type/extends/extends-from-mapped-key.d.mts +17 -0
  12. package/build/import/type/extends/extends-from-mapped-key.mjs +21 -0
  13. package/build/import/type/extends/extends-from-mapped-result.d.mts +13 -0
  14. package/build/import/type/extends/extends-from-mapped-result.mjs +14 -0
  15. package/build/import/type/extends/extends.d.mts +4 -4
  16. package/build/import/type/extends/extends.mjs +5 -5
  17. package/build/import/type/extends/index.d.mts +2 -2
  18. package/build/import/type/extends/index.mjs +2 -2
  19. package/build/import/type/extract/extract-from-mapped-result.d.mts +13 -0
  20. package/build/import/type/extract/extract-from-mapped-result.mjs +14 -0
  21. package/build/import/type/extract/extract.d.mts +6 -3
  22. package/build/import/type/extract/extract.mjs +9 -3
  23. package/build/import/type/extract/index.d.mts +1 -0
  24. package/build/import/type/extract/index.mjs +1 -0
  25. package/build/import/type/function/function.d.mts +4 -4
  26. package/build/import/type/indexed/index.d.mts +1 -1
  27. package/build/import/type/indexed/index.mjs +1 -1
  28. package/build/import/type/indexed/{indexed-mapped-result.d.mts → indexed-from-mapped-key.d.mts} +6 -6
  29. package/build/import/type/indexed/indexed-from-mapped-key.mjs +18 -0
  30. package/build/import/type/indexed/indexed-result.d.mts +8 -8
  31. package/build/import/type/indexed/indexed-result.mjs +9 -8
  32. package/build/import/type/indexed/indexed.d.mts +2 -2
  33. package/build/import/type/indexed/indexed.mjs +5 -5
  34. package/build/import/type/intersect/index.d.mts +2 -0
  35. package/build/import/type/intersect/index.mjs +2 -0
  36. package/build/import/type/intersect/intersect-create.d.mts +3 -0
  37. package/build/import/type/intersect/intersect-create.mjs +12 -0
  38. package/build/import/type/intersect/intersect-evaluated.d.mts +16 -0
  39. package/build/import/type/intersect/intersect-evaluated.mjs +35 -0
  40. package/build/import/type/intersect/intersect-type.d.mts +15 -0
  41. package/build/import/type/intersect/intersect-type.mjs +1 -0
  42. package/build/import/type/intersect/intersect.d.mts +4 -20
  43. package/build/import/type/intersect/intersect.mjs +5 -17
  44. package/build/import/type/intrinsic/capitalize.mjs +1 -2
  45. package/build/import/type/intrinsic/index.d.mts +1 -1
  46. package/build/import/type/intrinsic/index.mjs +1 -1
  47. package/build/import/type/intrinsic/{intrinsic-mapped-result.d.mts → intrinsic-from-mapped-key.d.mts} +6 -5
  48. package/build/import/type/intrinsic/intrinsic-from-mapped-key.mjs +21 -0
  49. package/build/import/type/intrinsic/intrinsic.d.mts +6 -6
  50. package/build/import/type/intrinsic/intrinsic.mjs +8 -8
  51. package/build/import/type/intrinsic/lowercase.mjs +1 -2
  52. package/build/import/type/intrinsic/uncapitalize.mjs +1 -2
  53. package/build/import/type/intrinsic/uppercase.mjs +1 -2
  54. package/build/import/type/keyof/index.d.mts +1 -0
  55. package/build/import/type/keyof/index.mjs +1 -0
  56. package/build/import/type/keyof/keyof-from-mapped-result.d.mts +13 -0
  57. package/build/import/type/keyof/keyof-from-mapped-result.mjs +14 -0
  58. package/build/import/type/keyof/keyof.d.mts +5 -2
  59. package/build/import/type/keyof/keyof.mjs +10 -3
  60. package/build/import/type/mapped/mapped.mjs +1 -2
  61. package/build/import/type/object/object.d.mts +5 -5
  62. package/build/import/type/omit/index.d.mts +1 -1
  63. package/build/import/type/omit/index.mjs +1 -1
  64. package/build/import/type/omit/omit-from-mapped-key.d.mts +15 -0
  65. package/build/import/type/omit/omit-from-mapped-key.mjs +20 -0
  66. package/build/import/type/omit/omit.d.mts +2 -2
  67. package/build/import/type/omit/omit.mjs +2 -2
  68. package/build/import/type/partial/index.d.mts +1 -0
  69. package/build/import/type/partial/index.mjs +1 -0
  70. package/build/import/type/partial/partial-from-mapped-result.d.mts +13 -0
  71. package/build/import/type/partial/partial-from-mapped-result.mjs +14 -0
  72. package/build/import/type/partial/partial.d.mts +5 -2
  73. package/build/import/type/partial/partial.mjs +11 -5
  74. package/build/import/type/pick/index.d.mts +1 -1
  75. package/build/import/type/pick/index.mjs +1 -1
  76. package/build/import/type/pick/pick-from-mapped-key.d.mts +15 -0
  77. package/build/import/type/pick/pick-from-mapped-key.mjs +20 -0
  78. package/build/import/type/pick/pick.d.mts +2 -2
  79. package/build/import/type/pick/pick.mjs +2 -2
  80. package/build/import/type/record/record.d.mts +0 -1
  81. package/build/import/type/record/record.mjs +1 -1
  82. package/build/import/type/recursive/recursive.d.mts +3 -2
  83. package/build/import/type/recursive/recursive.mjs +1 -5
  84. package/build/import/type/required/index.d.mts +1 -0
  85. package/build/import/type/required/index.mjs +1 -0
  86. package/build/import/type/required/required-from-mapped-result.d.mts +13 -0
  87. package/build/import/type/required/required-from-mapped-result.mjs +14 -0
  88. package/build/import/type/required/required.d.mts +5 -2
  89. package/build/import/type/required/required.mjs +11 -5
  90. package/build/import/type/template-literal/syntax.d.mts +4 -4
  91. package/build/import/type/template-literal/template-literal.d.mts +4 -4
  92. package/build/import/type/transform/transform.d.mts +3 -2
  93. package/build/import/type/transform/transform.mjs +1 -1
  94. package/build/import/type/tuple/tuple.d.mts +3 -3
  95. package/build/import/type/type/json.d.mts +25 -20
  96. package/build/import/type/type/json.mjs +3 -3
  97. package/build/import/type/union/index.d.mts +2 -0
  98. package/build/import/type/union/index.mjs +2 -0
  99. package/build/import/type/union/union-create.d.mts +3 -0
  100. package/build/import/type/union/union-create.mjs +5 -0
  101. package/build/import/type/union/union-evaluated.d.mts +16 -0
  102. package/build/import/type/union/union-evaluated.mjs +31 -0
  103. package/build/import/type/union/union-type.d.mts +12 -0
  104. package/build/import/type/union/union-type.mjs +1 -0
  105. package/build/import/type/union/union.d.mts +3 -13
  106. package/build/import/type/union/union.mjs +3 -10
  107. package/build/import/value/delta/delta.d.mts +1 -1
  108. package/build/require/index.d.ts +12 -12
  109. package/build/require/index.js +8 -3
  110. package/build/require/type/array/array.d.ts +1 -1
  111. package/build/require/type/constructor/constructor.d.ts +4 -4
  112. package/build/require/type/exclude/exclude-from-mapped-result.d.ts +13 -0
  113. package/build/require/type/exclude/exclude-from-mapped-result.js +18 -0
  114. package/build/require/type/exclude/exclude.d.ts +7 -4
  115. package/build/require/type/exclude/exclude.js +9 -4
  116. package/build/require/type/exclude/index.d.ts +1 -0
  117. package/build/require/type/exclude/index.js +1 -0
  118. package/build/require/type/extends/extends-from-mapped-key.d.ts +17 -0
  119. package/build/require/type/extends/extends-from-mapped-key.js +25 -0
  120. package/build/require/type/extends/extends-from-mapped-result.d.ts +13 -0
  121. package/build/require/type/extends/extends-from-mapped-result.js +18 -0
  122. package/build/require/type/extends/extends.d.ts +4 -4
  123. package/build/require/type/extends/extends.js +7 -7
  124. package/build/require/type/extends/index.d.ts +2 -2
  125. package/build/require/type/extends/index.js +2 -2
  126. package/build/require/type/extract/extract-from-mapped-result.d.ts +13 -0
  127. package/build/require/type/extract/extract-from-mapped-result.js +18 -0
  128. package/build/require/type/extract/extract.d.ts +6 -3
  129. package/build/require/type/extract/extract.js +8 -2
  130. package/build/require/type/extract/index.d.ts +1 -0
  131. package/build/require/type/extract/index.js +1 -0
  132. package/build/require/type/function/function.d.ts +4 -4
  133. package/build/require/type/indexed/index.d.ts +1 -1
  134. package/build/require/type/indexed/index.js +1 -1
  135. package/build/require/type/indexed/{indexed-mapped-result.d.ts → indexed-from-mapped-key.d.ts} +6 -6
  136. package/build/require/type/indexed/indexed-from-mapped-key.js +22 -0
  137. package/build/require/type/indexed/indexed-result.d.ts +8 -8
  138. package/build/require/type/indexed/indexed-result.js +14 -13
  139. package/build/require/type/indexed/indexed.d.ts +2 -2
  140. package/build/require/type/indexed/indexed.js +6 -6
  141. package/build/require/type/intersect/index.d.ts +2 -0
  142. package/build/require/type/intersect/index.js +2 -0
  143. package/build/require/type/intersect/intersect-create.d.ts +3 -0
  144. package/build/require/type/intersect/intersect-create.js +16 -0
  145. package/build/require/type/intersect/intersect-evaluated.d.ts +16 -0
  146. package/build/require/type/intersect/intersect-evaluated.js +39 -0
  147. package/build/require/type/intersect/intersect-type.d.ts +15 -0
  148. package/build/require/type/intersect/intersect-type.js +3 -0
  149. package/build/require/type/intersect/intersect.d.ts +4 -20
  150. package/build/require/type/intersect/intersect.js +5 -18
  151. package/build/require/type/intrinsic/capitalize.js +1 -2
  152. package/build/require/type/intrinsic/index.d.ts +1 -1
  153. package/build/require/type/intrinsic/index.js +1 -1
  154. package/build/require/type/intrinsic/{intrinsic-mapped-result.d.ts → intrinsic-from-mapped-key.d.ts} +6 -5
  155. package/build/require/type/intrinsic/intrinsic-from-mapped-key.js +25 -0
  156. package/build/require/type/intrinsic/intrinsic.d.ts +6 -6
  157. package/build/require/type/intrinsic/intrinsic.js +8 -8
  158. package/build/require/type/intrinsic/lowercase.js +1 -2
  159. package/build/require/type/intrinsic/uncapitalize.js +1 -2
  160. package/build/require/type/intrinsic/uppercase.js +1 -2
  161. package/build/require/type/keyof/index.d.ts +1 -0
  162. package/build/require/type/keyof/index.js +1 -0
  163. package/build/require/type/keyof/keyof-from-mapped-result.d.ts +13 -0
  164. package/build/require/type/keyof/keyof-from-mapped-result.js +18 -0
  165. package/build/require/type/keyof/keyof.d.ts +5 -2
  166. package/build/require/type/keyof/keyof.js +9 -2
  167. package/build/require/type/mapped/mapped.js +18 -19
  168. package/build/require/type/object/object.d.ts +5 -5
  169. package/build/require/type/omit/index.d.ts +1 -1
  170. package/build/require/type/omit/index.js +1 -1
  171. package/build/require/type/omit/omit-from-mapped-key.d.ts +15 -0
  172. package/build/require/type/omit/omit-from-mapped-key.js +24 -0
  173. package/build/require/type/omit/omit.d.ts +2 -2
  174. package/build/require/type/omit/omit.js +2 -2
  175. package/build/require/type/partial/index.d.ts +1 -0
  176. package/build/require/type/partial/index.js +1 -0
  177. package/build/require/type/partial/partial-from-mapped-result.d.ts +13 -0
  178. package/build/require/type/partial/partial-from-mapped-result.js +18 -0
  179. package/build/require/type/partial/partial.d.ts +5 -2
  180. package/build/require/type/partial/partial.js +10 -5
  181. package/build/require/type/pick/index.d.ts +1 -1
  182. package/build/require/type/pick/index.js +1 -1
  183. package/build/require/type/pick/pick-from-mapped-key.d.ts +15 -0
  184. package/build/require/type/pick/pick-from-mapped-key.js +24 -0
  185. package/build/require/type/pick/pick.d.ts +2 -2
  186. package/build/require/type/pick/pick.js +2 -2
  187. package/build/require/type/record/record.d.ts +0 -1
  188. package/build/require/type/record/record.js +1 -2
  189. package/build/require/type/recursive/recursive.d.ts +3 -2
  190. package/build/require/type/recursive/recursive.js +1 -5
  191. package/build/require/type/required/index.d.ts +1 -0
  192. package/build/require/type/required/index.js +1 -0
  193. package/build/require/type/required/required-from-mapped-result.d.ts +13 -0
  194. package/build/require/type/required/required-from-mapped-result.js +18 -0
  195. package/build/require/type/required/required.d.ts +5 -2
  196. package/build/require/type/required/required.js +10 -5
  197. package/build/require/type/template-literal/syntax.d.ts +4 -4
  198. package/build/require/type/template-literal/template-literal.d.ts +4 -4
  199. package/build/require/type/transform/transform.d.ts +3 -2
  200. package/build/require/type/transform/transform.js +4 -4
  201. package/build/require/type/tuple/tuple.d.ts +3 -3
  202. package/build/require/type/type/json.d.ts +25 -20
  203. package/build/require/type/type/json.js +3 -3
  204. package/build/require/type/union/index.d.ts +2 -0
  205. package/build/require/type/union/index.js +2 -0
  206. package/build/require/type/union/union-create.d.ts +3 -0
  207. package/build/require/type/union/union-create.js +9 -0
  208. package/build/require/type/union/union-evaluated.d.ts +16 -0
  209. package/build/require/type/union/union-evaluated.js +35 -0
  210. package/build/require/type/union/union-type.d.ts +12 -0
  211. package/build/require/type/union/union-type.js +3 -0
  212. package/build/require/type/union/union.d.ts +3 -13
  213. package/build/require/type/union/union.js +3 -11
  214. package/build/require/value/delta/delta.d.ts +1 -1
  215. package/package.json +1 -1
  216. package/readme.md +97 -101
  217. package/build/import/type/extends/extends-mapped-result-from-result.d.mts +0 -13
  218. package/build/import/type/extends/extends-mapped-result-from-result.mjs +0 -14
  219. package/build/import/type/extends/extends-mapped-result.d.mts +0 -17
  220. package/build/import/type/extends/extends-mapped-result.mjs +0 -21
  221. package/build/import/type/indexed/indexed-mapped-result.mjs +0 -18
  222. package/build/import/type/intrinsic/intrinsic-mapped-result.mjs +0 -21
  223. package/build/import/type/omit/omit-mapped-result.d.mts +0 -15
  224. package/build/import/type/omit/omit-mapped-result.mjs +0 -20
  225. package/build/import/type/pick/pick-mapped-result.d.mts +0 -15
  226. package/build/import/type/pick/pick-mapped-result.mjs +0 -20
  227. package/build/require/type/extends/extends-mapped-result-from-result.d.ts +0 -13
  228. package/build/require/type/extends/extends-mapped-result-from-result.js +0 -18
  229. package/build/require/type/extends/extends-mapped-result.d.ts +0 -17
  230. package/build/require/type/extends/extends-mapped-result.js +0 -25
  231. package/build/require/type/indexed/indexed-mapped-result.js +0 -22
  232. package/build/require/type/intrinsic/intrinsic-mapped-result.js +0 -25
  233. package/build/require/type/omit/omit-mapped-result.d.ts +0 -15
  234. package/build/require/type/omit/omit-mapped-result.js +0 -24
  235. package/build/require/type/pick/pick-mapped-result.d.ts +0 -15
  236. package/build/require/type/pick/pick-mapped-result.js +0 -24
@@ -1,7 +1,8 @@
1
1
  import { Never } from '../never/index.mjs';
2
- import { IntersectResolve } from '../intersect/index.mjs';
3
- import { UnionResolve } from '../union/index.mjs';
4
- import { TIntersect as IsIntersectType, TUnion as IsUnionType, TTuple as IsTupleType, TArray as IsArrayType, TObject as IsObjectType, TNever as IsNeverType } from '../guard/type.mjs';
2
+ import { IntersectEvaluated } from '../intersect/index.mjs';
3
+ import { UnionEvaluated } from '../union/index.mjs';
4
+ import { CloneType } from '../clone/type.mjs';
5
+ import { TArray as IsArrayType, TIntersect as IsIntersectType, TObject as IsObjectType, TNever as IsNeverType, TTuple as IsTupleType, TUnion as IsUnionType } from '../guard/type.mjs';
5
6
  function FromRest(T, K) {
6
7
  const [L, ...R] = T;
7
8
  return (T.length > 0
@@ -17,7 +18,7 @@ function FromIntersectRest(T) {
17
18
  : []);
18
19
  }
19
20
  function FromIntersect(T, K) {
20
- return (IntersectResolve(FromIntersectRest(FromRest(T, K))));
21
+ return (IntersectEvaluated(FromIntersectRest(FromRest(T, K))));
21
22
  }
22
23
  function FromUnionRest(T, S = T) {
23
24
  const [L, ...R] = T;
@@ -28,11 +29,11 @@ function FromUnionRest(T, S = T) {
28
29
  : S);
29
30
  }
30
31
  function FromUnion(T, K) {
31
- return (UnionResolve(FromUnionRest(FromRest(T, K))));
32
+ return (UnionEvaluated(FromUnionRest(FromRest(T, K))));
32
33
  }
33
34
  function FromTuple(T, K) {
34
35
  return (K in T ? T[K] :
35
- K === '[number]' ? UnionResolve(T) :
36
+ K === '[number]' ? UnionEvaluated(T) :
36
37
  Never());
37
38
  }
38
39
  function FromArray(T, K) {
@@ -59,6 +60,6 @@ function FromKeys(T, K) {
59
60
  ? [FromKey(T, L), ...FromKeys(T, R)]
60
61
  : []);
61
62
  }
62
- export function IndexResult(T, K) {
63
- return (UnionResolve(FromKeys(T, K)));
63
+ export function IndexResult(T, K, options) {
64
+ return (CloneType(UnionEvaluated(FromKeys(T, K)), options));
64
65
  }
@@ -1,9 +1,9 @@
1
1
  import type { TSchema, SchemaOptions } from '../schema/index.mjs';
2
2
  import { type TIndexResult } from './indexed-result.mjs';
3
3
  import { type TIndexPropertyKeys } from './indexed-property-keys.mjs';
4
- import { type TIndexMappedResult } from './indexed-mapped-result.mjs';
4
+ import { type TIndexFromMappedKey } from './indexed-from-mapped-key.mjs';
5
5
  import { TMappedKey } from '../mapped/index.mjs';
6
6
  export type TIndex<T extends TSchema, K extends PropertyKey[]> = TIndexResult<T, K>;
7
- export declare function Index<T extends TSchema, K extends TMappedKey>(T: T, K: K): TIndexMappedResult<T, K>;
7
+ export declare function Index<T extends TSchema, K extends TMappedKey>(T: T, K: K, options?: SchemaOptions): TIndexFromMappedKey<T, K>;
8
8
  export declare function Index<T extends TSchema, K extends TSchema, I extends PropertyKey[] = TIndexPropertyKeys<K>>(T: T, K: K, options?: SchemaOptions): TIndex<T, I>;
9
9
  export declare function Index<T extends TSchema, K extends PropertyKey[]>(T: T, K: readonly [...K], options?: SchemaOptions): TIndex<T, K>;
@@ -1,10 +1,10 @@
1
- import { TSchema as IsSchemaType, TMappedKey as IsMappedKey } from '../guard/type.mjs';
2
1
  import { IndexResult } from './indexed-result.mjs';
3
2
  import { IndexPropertyKeys } from './indexed-property-keys.mjs';
4
- import { IndexMappedResult } from './indexed-mapped-result.mjs';
3
+ import { IndexFromMappedKey } from './indexed-from-mapped-key.mjs';
5
4
  import { CloneType } from '../clone/type.mjs';
5
+ import { TMappedKey as IsMappedKey, TSchema as IsSchemaType } from '../guard/type.mjs';
6
6
  export function Index(T, K, options = {}) {
7
- return (IsMappedKey(K) ? CloneType(IndexMappedResult(T, K), options) :
8
- IsSchemaType(K) ? CloneType(IndexResult(T, IndexPropertyKeys(K)), options) :
9
- CloneType(IndexResult(T, K), options));
7
+ return (IsMappedKey(K) ? CloneType(IndexFromMappedKey(T, K, options)) :
8
+ IsSchemaType(K) ? IndexResult(T, IndexPropertyKeys(K), options) :
9
+ IndexResult(T, K, options));
10
10
  }
@@ -1 +1,3 @@
1
+ export * from './intersect-evaluated.mjs';
2
+ export * from './intersect-type.mjs';
1
3
  export * from './intersect.mjs';
@@ -1 +1,3 @@
1
+ export * from './intersect-evaluated.mjs';
2
+ export * from './intersect-type.mjs';
1
3
  export * from './intersect.mjs';
@@ -0,0 +1,3 @@
1
+ import type { TSchema } from '../schema/index.mjs';
2
+ import type { TIntersect, IntersectOptions } from './intersect-type.mjs';
3
+ export declare function IntersectCreate<T extends TSchema[]>(T: [...T], options: IntersectOptions): TIntersect<T>;
@@ -0,0 +1,12 @@
1
+ import { Kind } from '../symbols/index.mjs';
2
+ import { CloneType, CloneRest } from '../clone/type.mjs';
3
+ import { TObject as IsObjectType, TSchema as IsSchemaType } from '../guard/type.mjs';
4
+ export function IntersectCreate(T, options) {
5
+ const allObjects = T.every((schema) => IsObjectType(schema));
6
+ const clonedUnevaluatedProperties = IsSchemaType(options.unevaluatedProperties)
7
+ ? { unevaluatedProperties: CloneType(options.unevaluatedProperties) }
8
+ : {};
9
+ return ((options.unevaluatedProperties === false || IsSchemaType(options.unevaluatedProperties) || allObjects
10
+ ? { ...options, ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: CloneRest(T) }
11
+ : { ...options, ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: CloneRest(T) }));
12
+ }
@@ -0,0 +1,16 @@
1
+ import type { SchemaOptions, TSchema } from '../schema/index.mjs';
2
+ import { type TNever } from '../never/index.mjs';
3
+ import { type TOptional } from '../optional/index.mjs';
4
+ import type { TReadonly } from '../readonly/index.mjs';
5
+ import { TIntersect, IntersectOptions } from './intersect-type.mjs';
6
+ type IsIntersectOptional<T extends TSchema[]> = (T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? L extends TOptional<TSchema> ? IsIntersectOptional<R> : false : true);
7
+ declare function IsIntersectOptional<T extends TSchema[]>(T: T): IsIntersectOptional<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 ResolveIntersect<T extends TSchema[]> = (IsIntersectOptional<T> extends true ? TOptional<TIntersect<RemoveOptionalFromRest<T>>> : TIntersect<RemoveOptionalFromRest<T>>);
13
+ declare function ResolveIntersect<T extends TSchema[]>(T: [...T], options: SchemaOptions): ResolveIntersect<T>;
14
+ export type IntersectEvaluated<T extends TSchema[]> = (T extends [] ? TNever : T extends [TSchema] ? T[0] : ResolveIntersect<T>);
15
+ export declare function IntersectEvaluated<T extends TSchema[], R = IntersectEvaluated<T>>(T: [...T], options?: IntersectOptions): R;
16
+ export {};
@@ -0,0 +1,35 @@
1
+ import { OptionalKind } from '../symbols/index.mjs';
2
+ import { CloneType } from '../clone/type.mjs';
3
+ import { Discard } from '../discard/index.mjs';
4
+ import { Never } from '../never/index.mjs';
5
+ import { Optional } from '../optional/index.mjs';
6
+ import { IntersectCreate } from './intersect-create.mjs';
7
+ import { TOptional as IsOptionalType, TTransform as IsTransformType, } from '../guard/type.mjs';
8
+ function IsIntersectOptional(T) {
9
+ const [L, ...R] = T;
10
+ return (T.length > 0
11
+ ? IsOptionalType(L)
12
+ ? IsIntersectOptional(R)
13
+ : false
14
+ : true);
15
+ }
16
+ function RemoveOptionalFromRest(T) {
17
+ return (T.map(T => RemoveOptionalFromType(T)));
18
+ }
19
+ function RemoveOptionalFromType(T) {
20
+ return (Discard(T, [OptionalKind]));
21
+ }
22
+ function ResolveIntersect(T, options) {
23
+ return (IsIntersectOptional(T)
24
+ ? Optional(IntersectCreate(RemoveOptionalFromRest(T), options))
25
+ : IntersectCreate(RemoveOptionalFromRest(T), options));
26
+ }
27
+ export function IntersectEvaluated(T, options = {}) {
28
+ if (T.length === 0)
29
+ return Never(options);
30
+ if (T.length === 1)
31
+ return CloneType(T[0], options);
32
+ if (T.some((schema) => IsTransformType(schema)))
33
+ throw new Error('Cannot intersect transform types');
34
+ return ResolveIntersect(T, options);
35
+ }
@@ -0,0 +1,15 @@
1
+ import type { TSchema, SchemaOptions } from '../schema/index.mjs';
2
+ import type { Static } from '../static/index.mjs';
3
+ import { Kind } from '../symbols/index.mjs';
4
+ type IntersectStatic<T extends TSchema[], P extends unknown[]> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? Static<L, P> & IntersectStatic<R, P> : unknown;
5
+ export type TUnevaluatedProperties = undefined | TSchema | boolean;
6
+ export interface IntersectOptions extends SchemaOptions {
7
+ unevaluatedProperties?: TUnevaluatedProperties;
8
+ }
9
+ export interface TIntersect<T extends TSchema[] = TSchema[]> extends TSchema, IntersectOptions {
10
+ [Kind]: 'Intersect';
11
+ static: IntersectStatic<T, this['params']>;
12
+ type?: 'object';
13
+ allOf: [...T];
14
+ }
15
+ export {};
@@ -0,0 +1 @@
1
+ import { Kind } from '../symbols/index.mjs';
@@ -1,21 +1,5 @@
1
- import type { TupleToIntersect, AssertType } from '../helpers/index.mjs';
2
- import type { TSchema, SchemaOptions } from '../schema/index.mjs';
3
- import type { Static } from '../static/index.mjs';
1
+ import type { TSchema } from '../schema/index.mjs';
4
2
  import { type TNever } from '../never/index.mjs';
5
- import { OptionalFromIntersect } from '../modifiers/index.mjs';
6
- import { Kind } from '../symbols/index.mjs';
7
- export type IntersectResolve<T extends TSchema[]> = (T extends [] ? TNever : T extends [TSchema] ? T[0] : OptionalFromIntersect<T>);
8
- export declare function IntersectResolve<T extends TSchema[]>(T: T): IntersectResolve<T>;
9
- export type TUnevaluatedProperties = undefined | TSchema | boolean;
10
- export interface IntersectOptions extends SchemaOptions {
11
- unevaluatedProperties?: TUnevaluatedProperties;
12
- }
13
- export interface TIntersect<T extends TSchema[] = TSchema[]> extends TSchema, IntersectOptions {
14
- [Kind]: 'Intersect';
15
- static: TupleToIntersect<{
16
- [K in keyof T]: Static<AssertType<T[K]>, this['params']>;
17
- }>;
18
- type?: 'object';
19
- allOf: [...T];
20
- }
21
- export declare function Intersect<T extends TSchema[]>(T: [...T], options?: IntersectOptions): IntersectResolve<T>;
3
+ import { TIntersect, IntersectOptions } from './intersect-type.mjs';
4
+ export type Intersect<T extends TSchema[]> = (T extends [] ? TNever : T extends [TSchema] ? T[0] : TIntersect<T>);
5
+ export declare function Intersect<T extends TSchema[]>(T: [...T], options?: IntersectOptions): Intersect<T>;
@@ -1,25 +1,13 @@
1
+ import { CloneType } from '../clone/type.mjs';
1
2
  import { Never } from '../never/index.mjs';
2
- import { OptionalFromIntersect } from '../modifiers/index.mjs';
3
- import { Kind } from '../symbols/index.mjs';
4
- import { CloneType, CloneRest } from '../clone/type.mjs';
5
- import { TTransform as IsTransformType, TObject as IsObjectType, TSchema as IsSchemaType } from '../guard/type.mjs';
6
- export function IntersectResolve(T) {
7
- return (T.length === 0
8
- ? Never()
9
- : T.length === 1
10
- ? T[0]
11
- : OptionalFromIntersect(T));
12
- }
3
+ import { IntersectCreate } from './intersect-create.mjs';
4
+ import { TTransform as IsTransformType, } from '../guard/type.mjs';
13
5
  export function Intersect(T, options = {}) {
14
6
  if (T.length === 0)
15
- return Never();
7
+ return Never(options);
16
8
  if (T.length === 1)
17
9
  return CloneType(T[0], options);
18
10
  if (T.some((schema) => IsTransformType(schema)))
19
11
  throw new Error('Cannot intersect transform types');
20
- const allObjects = T.every((schema) => IsObjectType(schema));
21
- const clonedUnevaluatedProperties = IsSchemaType(options.unevaluatedProperties) ? { unevaluatedProperties: CloneType(options.unevaluatedProperties) } : {};
22
- return (options.unevaluatedProperties === false || IsSchemaType(options.unevaluatedProperties) || allObjects
23
- ? { ...options, ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: CloneRest(T) }
24
- : { ...options, ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: CloneRest(T) });
12
+ return IntersectCreate(T, options);
25
13
  }
@@ -1,5 +1,4 @@
1
1
  import { Intrinsic } from './intrinsic.mjs';
2
- import { CloneType } from '../clone/type.mjs';
3
2
  export function Capitalize(T, options = {}) {
4
- return CloneType(Intrinsic(T, 'Capitalize'), options);
3
+ return Intrinsic(T, 'Capitalize', options);
5
4
  }
@@ -1,5 +1,5 @@
1
1
  export * from './capitalize.mjs';
2
- export * from './intrinsic-mapped-result.mjs';
2
+ export * from './intrinsic-from-mapped-key.mjs';
3
3
  export * from './intrinsic.mjs';
4
4
  export * from './lowercase.mjs';
5
5
  export * from './uncapitalize.mjs';
@@ -1,5 +1,5 @@
1
1
  export * from './capitalize.mjs';
2
- export * from './intrinsic-mapped-result.mjs';
2
+ export * from './intrinsic-from-mapped-key.mjs';
3
3
  export * from './intrinsic.mjs';
4
4
  export * from './lowercase.mjs';
5
5
  export * from './uncapitalize.mjs';
@@ -1,3 +1,4 @@
1
+ import type { SchemaOptions } from '../schema/index.mjs';
1
2
  import type { TProperties } from '../object/index.mjs';
2
3
  import { type TMappedResult, type TMappedKey } from '../mapped/index.mjs';
3
4
  import { type TIntrinsic, type IntrinsicMode } from './intrinsic.mjs';
@@ -5,11 +6,11 @@ import { TLiteral, TLiteralValue } from '../literal/index.mjs';
5
6
  type MappedIntrinsicPropertyKey<K extends PropertyKey, M extends IntrinsicMode, P extends TLiteralValue = K extends TLiteralValue ? K : never> = {
6
7
  [_ in K]: TIntrinsic<TLiteral<P>, M>;
7
8
  };
8
- declare function MappedIntrinsicPropertyKey<K extends PropertyKey, M extends IntrinsicMode>(K: K, M: M): MappedIntrinsicPropertyKey<K, M>;
9
+ declare function MappedIntrinsicPropertyKey<K extends PropertyKey, M extends IntrinsicMode>(K: K, M: M, options: SchemaOptions): MappedIntrinsicPropertyKey<K, M>;
9
10
  type MappedIntrinsicPropertyKeys<K extends PropertyKey[], M extends IntrinsicMode> = (K extends [infer L extends PropertyKey, ...infer R extends PropertyKey[]] ? MappedIntrinsicPropertyKey<L, M> & MappedIntrinsicPropertyKeys<R, M> : {});
10
- declare function MappedIntrinsicPropertyKeys<K extends PropertyKey[], M extends IntrinsicMode>(K: [...K], M: M): MappedIntrinsicPropertyKeys<K, M>;
11
+ declare function MappedIntrinsicPropertyKeys<K extends PropertyKey[], M extends IntrinsicMode>(K: [...K], M: M, options: SchemaOptions): MappedIntrinsicPropertyKeys<K, M>;
11
12
  type MappedIntrinsicProperties<K extends TMappedKey, M extends IntrinsicMode> = (MappedIntrinsicPropertyKeys<K['keys'], M>);
12
- declare function MappedIntrinsicProperties<K extends TMappedKey, M extends IntrinsicMode>(T: K, M: M): MappedIntrinsicProperties<K, M>;
13
- export type TIntrinsicMappedResult<K extends TMappedKey, M extends IntrinsicMode, P extends TProperties = MappedIntrinsicProperties<K, M>> = (TMappedResult<P>);
14
- export declare function IntrinsicMappedResult<K extends TMappedKey, M extends IntrinsicMode, P extends TProperties = MappedIntrinsicProperties<K, M>>(T: K, M: M): TMappedResult<P>;
13
+ declare function MappedIntrinsicProperties<K extends TMappedKey, M extends IntrinsicMode>(T: K, M: M, options: SchemaOptions): MappedIntrinsicProperties<K, M>;
14
+ export type TIntrinsicFromMappedKey<K extends TMappedKey, M extends IntrinsicMode, P extends TProperties = MappedIntrinsicProperties<K, M>> = (TMappedResult<P>);
15
+ export declare function IntrinsicFromMappedKey<K extends TMappedKey, M extends IntrinsicMode, P extends TProperties = MappedIntrinsicProperties<K, M>>(T: K, M: M, options: SchemaOptions): TMappedResult<P>;
15
16
  export {};
@@ -0,0 +1,21 @@
1
+ import { MappedResult } from '../mapped/index.mjs';
2
+ import { Intrinsic } from './intrinsic.mjs';
3
+ import { Literal } from '../literal/index.mjs';
4
+ function MappedIntrinsicPropertyKey(K, M, options) {
5
+ return {
6
+ [K]: Intrinsic(Literal(K), M, options)
7
+ };
8
+ }
9
+ function MappedIntrinsicPropertyKeys(K, M, options) {
10
+ const [L, ...R] = K;
11
+ return (K.length > 0
12
+ ? { ...MappedIntrinsicPropertyKey(L, M, options), ...MappedIntrinsicPropertyKeys(R, M, options) }
13
+ : {});
14
+ }
15
+ function MappedIntrinsicProperties(T, M, options) {
16
+ return MappedIntrinsicPropertyKeys(T['keys'], M, options);
17
+ }
18
+ export function IntrinsicFromMappedKey(T, M, options) {
19
+ const P = MappedIntrinsicProperties(T, M, options);
20
+ return MappedResult(P);
21
+ }
@@ -1,17 +1,17 @@
1
- import type { TSchema } from '../schema/index.mjs';
1
+ import type { TSchema, SchemaOptions } from '../schema/index.mjs';
2
2
  import { type TTemplateLiteral, type TTemplateLiteralKind } from '../template-literal/index.mjs';
3
- import { type TIntrinsicMappedResult } from './intrinsic-mapped-result.mjs';
3
+ import { type TIntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';
4
4
  import { type TLiteral, type TLiteralValue } from '../literal/index.mjs';
5
5
  import { type TUnion } from '../union/index.mjs';
6
6
  import { type TMappedKey } from '../mapped/index.mjs';
7
7
  export type IntrinsicMode = 'Uppercase' | 'Lowercase' | 'Capitalize' | 'Uncapitalize';
8
8
  type FromTemplateLiteral<T extends TTemplateLiteralKind[], M extends IntrinsicMode> = M extends IntrinsicMode ? T extends [infer L extends TTemplateLiteralKind, ...infer R extends TTemplateLiteralKind[]] ? [TIntrinsic<L, M>, ...FromTemplateLiteral<R, M>] : T : T;
9
- declare function FromTemplateLiteral<T extends TTemplateLiteralKind[], M extends IntrinsicMode>(schema: TTemplateLiteral, mode: IntrinsicMode): FromTemplateLiteral<T, M>;
9
+ declare function FromTemplateLiteral<T extends TTemplateLiteralKind[], M extends IntrinsicMode>(schema: TTemplateLiteral, mode: IntrinsicMode, options: SchemaOptions): FromTemplateLiteral<T, M>;
10
10
  type FromLiteralValue<T, M extends IntrinsicMode> = (T extends string ? M extends 'Uncapitalize' ? Uncapitalize<T> : M extends 'Capitalize' ? Capitalize<T> : M extends 'Uppercase' ? Uppercase<T> : M extends 'Lowercase' ? Lowercase<T> : string : T);
11
11
  declare function FromLiteralValue(value: TLiteralValue, mode: IntrinsicMode): string;
12
12
  type FromRest<T extends TSchema[], M extends IntrinsicMode> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? [TIntrinsic<L, M>, ...FromRest<R, M>] : [];
13
13
  declare function FromRest<T extends TSchema[], M extends IntrinsicMode>(T: [...T], mode: M): FromRest<T, M>;
14
- export type TIntrinsic<T extends TSchema, M extends IntrinsicMode> = T extends TMappedKey ? TIntrinsicMappedResult<T, M> : T extends TTemplateLiteral<infer S> ? TTemplateLiteral<FromTemplateLiteral<S, M>> : T extends TUnion<infer S> ? TUnion<FromRest<S, M>> : T extends TLiteral<infer S> ? TLiteral<FromLiteralValue<S, M>> : T;
15
- export declare function Intrinsic<T extends TMappedKey, M extends IntrinsicMode>(schema: T, mode: M): TIntrinsicMappedResult<T, M>;
16
- export declare function Intrinsic<T extends TSchema, M extends IntrinsicMode>(schema: T, mode: M): TIntrinsic<T, M>;
14
+ export type TIntrinsic<T extends TSchema, M extends IntrinsicMode> = T extends TMappedKey ? TIntrinsicFromMappedKey<T, M> : T extends TTemplateLiteral<infer S> ? TTemplateLiteral<FromTemplateLiteral<S, M>> : T extends TUnion<infer S> ? TUnion<FromRest<S, M>> : T extends TLiteral<infer S> ? TLiteral<FromLiteralValue<S, M>> : T;
15
+ export declare function Intrinsic<T extends TMappedKey, M extends IntrinsicMode>(schema: T, mode: M, options?: SchemaOptions): TIntrinsicFromMappedKey<T, M>;
16
+ export declare function Intrinsic<T extends TSchema, M extends IntrinsicMode>(schema: T, mode: M, options?: SchemaOptions): TIntrinsic<T, M>;
17
17
  export {};
@@ -1,5 +1,5 @@
1
1
  import { TemplateLiteral, TemplateLiteralParseExact, IsTemplateLiteralFinite, TemplateLiteralGenerate } from '../template-literal/index.mjs';
2
- import { IntrinsicMappedResult } from './intrinsic-mapped-result.mjs';
2
+ import { IntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';
3
3
  import { Literal } from '../literal/index.mjs';
4
4
  import { Union } from '../union/index.mjs';
5
5
  import { TMappedKey as IsMappedKeyType, TTemplateLiteral as IsTemplateLiteralType, TUnion as IsUnionType, TLiteral as IsLiteralType } from '../guard/type.mjs';
@@ -17,7 +17,7 @@ function ApplyUppercase(value) {
17
17
  function ApplyLowercase(value) {
18
18
  return value.toLowerCase();
19
19
  }
20
- function FromTemplateLiteral(schema, mode) {
20
+ function FromTemplateLiteral(schema, mode, options) {
21
21
  const expression = TemplateLiteralParseExact(schema.pattern);
22
22
  const finite = IsTemplateLiteralFinite(expression);
23
23
  if (!finite)
@@ -26,7 +26,7 @@ function FromTemplateLiteral(schema, mode) {
26
26
  const literals = strings.map((value) => Literal(value));
27
27
  const mapped = FromRest(literals, mode);
28
28
  const union = Union(mapped);
29
- return TemplateLiteral([union]);
29
+ return TemplateLiteral([union], options);
30
30
  }
31
31
  function FromLiteralValue(value, mode) {
32
32
  return (typeof value === 'string' ? (mode === 'Uncapitalize' ? ApplyUncapitalize(value) :
@@ -39,10 +39,10 @@ function FromRest(T, mode) {
39
39
  const [L, ...R] = T;
40
40
  return (T.length > 0 ? [Intrinsic(L, mode), ...FromRest(R, mode)] : []);
41
41
  }
42
- export function Intrinsic(schema, mode) {
43
- return (IsMappedKeyType(schema) ? IntrinsicMappedResult(schema, mode) :
44
- IsTemplateLiteralType(schema) ? FromTemplateLiteral(schema, mode) :
45
- IsUnionType(schema) ? Union(FromRest(schema.anyOf, mode)) :
46
- IsLiteralType(schema) ? Literal(FromLiteralValue(schema.const, mode)) :
42
+ export function Intrinsic(schema, mode, options = {}) {
43
+ return (IsMappedKeyType(schema) ? IntrinsicFromMappedKey(schema, mode, options) :
44
+ IsTemplateLiteralType(schema) ? FromTemplateLiteral(schema, mode, schema) :
45
+ IsUnionType(schema) ? Union(FromRest(schema.anyOf, mode), options) :
46
+ IsLiteralType(schema) ? Literal(FromLiteralValue(schema.const, mode), options) :
47
47
  schema);
48
48
  }
@@ -1,5 +1,4 @@
1
1
  import { Intrinsic } from './intrinsic.mjs';
2
- import { CloneType } from '../clone/type.mjs';
3
2
  export function Lowercase(T, options = {}) {
4
- return CloneType(Intrinsic(T, 'Lowercase'), options);
3
+ return Intrinsic(T, 'Lowercase', options);
5
4
  }
@@ -1,5 +1,4 @@
1
1
  import { Intrinsic } from './intrinsic.mjs';
2
- import { CloneType } from '../clone/type.mjs';
3
2
  export function Uncapitalize(T, options = {}) {
4
- return CloneType(Intrinsic(T, 'Uncapitalize'), options);
3
+ return Intrinsic(T, 'Uncapitalize', options);
5
4
  }
@@ -1,5 +1,4 @@
1
1
  import { Intrinsic } from './intrinsic.mjs';
2
- import { CloneType } from '../clone/type.mjs';
3
2
  export function Uppercase(T, options = {}) {
4
- return CloneType(Intrinsic(T, 'Uppercase'), options);
3
+ return Intrinsic(T, 'Uppercase', options);
5
4
  }
@@ -1,2 +1,3 @@
1
+ export * from './keyof-from-mapped-result.mjs';
1
2
  export * from './keyof-property-keys.mjs';
2
3
  export * from './keyof.mjs';
@@ -1,2 +1,3 @@
1
+ export * from './keyof-from-mapped-result.mjs';
1
2
  export * from './keyof-property-keys.mjs';
2
3
  export * from './keyof.mjs';
@@ -0,0 +1,13 @@
1
+ import type { SchemaOptions } from '../schema/index.mjs';
2
+ import type { TProperties } from '../object/index.mjs';
3
+ import { type TMappedResult } from '../mapped/index.mjs';
4
+ import { type TKeyOf } from './keyof.mjs';
5
+ type FromProperties<K extends TProperties> = ({
6
+ [K2 in keyof K]: TKeyOf<K[K2]>;
7
+ });
8
+ declare function FromProperties<K extends TProperties>(K: K, options: SchemaOptions): FromProperties<K>;
9
+ type FromMappedResult<K extends TMappedResult> = (FromProperties<K['properties']>);
10
+ declare function FromMappedResult<K extends TMappedResult>(K: K, options: SchemaOptions): FromMappedResult<K>;
11
+ export type TKeyOfFromMappedResult<T extends TMappedResult, P extends TProperties = FromMappedResult<T>> = (TMappedResult<P>);
12
+ export declare function KeyOfFromMappedResult<T extends TMappedResult, P extends TProperties = FromMappedResult<T>>(T: T, options: SchemaOptions): TMappedResult<P>;
13
+ export {};
@@ -0,0 +1,14 @@
1
+ import { MappedResult } from '../mapped/index.mjs';
2
+ import { KeyOf } from './keyof.mjs';
3
+ function FromProperties(K, options) {
4
+ return globalThis.Object.getOwnPropertyNames(K).reduce((Acc, K2) => {
5
+ return { ...Acc, [K2]: KeyOf(K[K2], options) };
6
+ }, {});
7
+ }
8
+ function FromMappedResult(K, options) {
9
+ return FromProperties(K.properties, options);
10
+ }
11
+ export function KeyOfFromMappedResult(T, options) {
12
+ const P = FromMappedResult(T, options);
13
+ return MappedResult(P);
14
+ }
@@ -1,12 +1,15 @@
1
1
  import type { TSchema } from '../schema/index.mjs';
2
2
  import type { Ensure } from '../helpers/index.mjs';
3
+ import type { TMappedResult } from '../mapped/index.mjs';
3
4
  import { type TLiteral, TLiteralValue } from '../literal/index.mjs';
4
5
  import { type TNumber } from '../number/index.mjs';
5
6
  import { type SchemaOptions } from '../schema/index.mjs';
6
7
  import { KeyOfPropertyKeys } from './keyof-property-keys.mjs';
7
- import { UnionResolve } from '../union/index.mjs';
8
+ import { UnionEvaluated } from '../union/index.mjs';
9
+ import { type TKeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';
8
10
  type FromLiterals<T extends TLiteralValue[]> = (T extends [infer L extends TLiteralValue, ...infer R extends TLiteralValue[]] ? L extends '[number]' ? [TNumber, ...FromLiterals<R>] : [TLiteral<L>, ...FromLiterals<R>] : []);
9
11
  declare function FromLiterals<T extends TLiteralValue[]>(T: [...T]): FromLiterals<T>;
10
- export type TKeyOf<T extends TSchema> = (Ensure<UnionResolve<FromLiterals<KeyOfPropertyKeys<T>>>>);
12
+ export type TKeyOf<T extends TSchema> = (Ensure<UnionEvaluated<FromLiterals<KeyOfPropertyKeys<T>>>>);
13
+ export declare function KeyOf<T extends TMappedResult>(T: T, options?: SchemaOptions): TKeyOfFromMappedResult<T>;
11
14
  export declare function KeyOf<T extends TSchema>(T: T, options?: SchemaOptions): TKeyOf<T>;
12
15
  export {};
@@ -1,8 +1,10 @@
1
1
  import { Literal } from '../literal/index.mjs';
2
2
  import { Number } from '../number/index.mjs';
3
3
  import { KeyOfPropertyKeys } from './keyof-property-keys.mjs';
4
- import { UnionResolve } from '../union/index.mjs';
4
+ import { UnionEvaluated } from '../union/index.mjs';
5
5
  import { CloneType } from '../clone/type.mjs';
6
+ import { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';
7
+ import { TMappedResult as IsMappedResultType } from '../guard/type.mjs';
6
8
  function FromLiterals(T) {
7
9
  const [L, ...R] = T;
8
10
  return (T.length > 0
@@ -12,6 +14,11 @@ function FromLiterals(T) {
12
14
  : []);
13
15
  }
14
16
  export function KeyOf(T, options = {}) {
15
- const K = UnionResolve(FromLiterals(KeyOfPropertyKeys(T)));
16
- return CloneType(K, options);
17
+ if (IsMappedResultType(T)) {
18
+ return KeyOfFromMappedResult(T, options);
19
+ }
20
+ else {
21
+ const K = UnionEvaluated(FromLiterals(KeyOfPropertyKeys(T)));
22
+ return CloneType(K, options);
23
+ }
17
24
  }
@@ -1,4 +1,3 @@
1
- import { TSchema as IsSchemaType } from '../guard/type.mjs';
2
1
  import { Kind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';
3
2
  import { CloneType } from '../clone/type.mjs';
4
3
  import { Discard } from '../discard/index.mjs';
@@ -17,7 +16,7 @@ import { Readonly } from '../readonly/index.mjs';
17
16
  import { Tuple } from '../tuple/index.mjs';
18
17
  import { Union } from '../union/index.mjs';
19
18
  import { MappedResult } from './mapped-result.mjs';
20
- import { TArray as IsArrayType, TAsyncIterator as IsAsyncIteratorType, TConstructor as IsConstructorType, TFunction as IsFunctionType, TIntersect as IsIntersectType, TIterator as IsIteratorType, TReadonly as IsReadonlyType, TMappedResult as IsMappedResultType, TMappedKey as IsMappedKeyType, TObject as IsObjectType, TOptional as IsOptionalType, TPromise as IsPromiseType, TTuple as IsTupleType, TUnion as IsUnionType, } from '../guard/type.mjs';
19
+ import { TArray as IsArrayType, TAsyncIterator as IsAsyncIteratorType, TConstructor as IsConstructorType, TFunction as IsFunctionType, TIntersect as IsIntersectType, TIterator as IsIteratorType, TReadonly as IsReadonlyType, TMappedResult as IsMappedResultType, TMappedKey as IsMappedKeyType, TObject as IsObjectType, TOptional as IsOptionalType, TPromise as IsPromiseType, TSchema as IsSchemaType, TTuple as IsTupleType, TUnion as IsUnionType, } from '../guard/type.mjs';
21
20
  function FromMappedResult(K, P) {
22
21
  return (K in P
23
22
  ? FromSchemaType(K, P[K])
@@ -4,8 +4,6 @@ import type { Evaluate } from '../helpers/index.mjs';
4
4
  import type { TReadonly } from '../readonly/index.mjs';
5
5
  import type { TOptional } from '../optional/index.mjs';
6
6
  import { Kind } from '../symbols/index.mjs';
7
- export type TPropertyKey = string | number;
8
- export type TProperties = Record<TPropertyKey, TSchema>;
9
7
  type ReadonlyOptionalPropertyKeys<T extends TProperties> = {
10
8
  [K in keyof T]: T[K] extends TReadonly<TSchema> ? (T[K] extends TOptional<T[K]> ? K : never) : never;
11
9
  }[keyof T];
@@ -16,10 +14,12 @@ type OptionalPropertyKeys<T extends TProperties> = {
16
14
  [K in keyof T]: T[K] extends TOptional<TSchema> ? (T[K] extends TReadonly<T[K]> ? never : K) : never;
17
15
  }[keyof T];
18
16
  type RequiredPropertyKeys<T extends TProperties> = keyof Omit<T, ReadonlyOptionalPropertyKeys<T> | ReadonlyPropertyKeys<T> | OptionalPropertyKeys<T>>;
19
- type PropertiesResolve<T extends TProperties, R extends Record<keyof any, unknown>> = Evaluate<(Readonly<Partial<Pick<R, ReadonlyOptionalPropertyKeys<T>>>> & Readonly<Pick<R, ReadonlyPropertyKeys<T>>> & Partial<Pick<R, OptionalPropertyKeys<T>>> & Required<Pick<R, RequiredPropertyKeys<T>>>)>;
20
- export type ObjectResolve<T extends TProperties, P extends unknown[]> = PropertiesResolve<T, {
17
+ type ObjectStaticProperties<T extends TProperties, R extends Record<keyof any, unknown>> = Evaluate<(Readonly<Partial<Pick<R, ReadonlyOptionalPropertyKeys<T>>>> & Readonly<Pick<R, ReadonlyPropertyKeys<T>>> & Partial<Pick<R, OptionalPropertyKeys<T>>> & Required<Pick<R, RequiredPropertyKeys<T>>>)>;
18
+ export type ObjectStatic<T extends TProperties, P extends unknown[]> = ObjectStaticProperties<T, {
21
19
  [K in keyof T]: Static<T[K], P>;
22
20
  }>;
21
+ export type TPropertyKey = string | number;
22
+ export type TProperties = Record<TPropertyKey, TSchema>;
23
23
  export type TAdditionalProperties = undefined | TSchema | boolean;
24
24
  export interface ObjectOptions extends SchemaOptions {
25
25
  additionalProperties?: TAdditionalProperties;
@@ -28,7 +28,7 @@ export interface ObjectOptions extends SchemaOptions {
28
28
  }
29
29
  export interface TObject<T extends TProperties = TProperties> extends TSchema, ObjectOptions {
30
30
  [Kind]: 'Object';
31
- static: ObjectResolve<T, this['params']>;
31
+ static: ObjectStatic<T, this['params']>;
32
32
  additionalProperties?: TAdditionalProperties;
33
33
  type: 'object';
34
34
  properties: T;
@@ -1,2 +1,2 @@
1
- export * from './omit-mapped-result.mjs';
1
+ export * from './omit-from-mapped-key.mjs';
2
2
  export * from './omit.mjs';
@@ -1,2 +1,2 @@
1
- export * from './omit-mapped-result.mjs';
1
+ export * from './omit-from-mapped-key.mjs';
2
2
  export * from './omit.mjs';
@@ -0,0 +1,15 @@
1
+ import type { TSchema, SchemaOptions } from '../schema/index.mjs';
2
+ import type { TProperties } from '../object/index.mjs';
3
+ import { type TMappedResult, type TMappedKey } from '../mapped/index.mjs';
4
+ import { type TOmit } from './omit.mjs';
5
+ type FromPropertyKey<T extends TSchema, K extends PropertyKey> = {
6
+ [_ in K]: TOmit<T, [K]>;
7
+ };
8
+ declare function FromPropertyKey<T extends TSchema, K extends PropertyKey>(T: T, K: K, options: SchemaOptions): FromPropertyKey<T, K>;
9
+ type FromPropertyKeys<T extends TSchema, K extends PropertyKey[]> = (K extends [infer LK extends PropertyKey, ...infer RK extends PropertyKey[]] ? FromPropertyKey<T, LK> & FromPropertyKeys<T, RK> : {});
10
+ declare function FromPropertyKeys<T extends TSchema, K extends PropertyKey[]>(T: T, K: [...K], options: SchemaOptions): FromPropertyKeys<T, K>;
11
+ type FromMappedKey<T extends TSchema, K extends TMappedKey> = (FromPropertyKeys<T, K['keys']>);
12
+ declare function FromMappedKey<T extends TSchema, K extends TMappedKey>(T: T, K: K, options: SchemaOptions): FromMappedKey<T, K>;
13
+ export type TOmitFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = FromMappedKey<T, K>> = (TMappedResult<P>);
14
+ export declare function OmitFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = FromMappedKey<T, K>>(T: T, K: K, options: SchemaOptions): TMappedResult<P>;
15
+ export {};
@@ -0,0 +1,20 @@
1
+ import { MappedResult } from '../mapped/index.mjs';
2
+ import { Omit } from './omit.mjs';
3
+ function FromPropertyKey(T, K, options) {
4
+ return {
5
+ [K]: Omit(T, [K], options)
6
+ };
7
+ }
8
+ function FromPropertyKeys(T, K, options) {
9
+ const [LK, ...RK] = K;
10
+ return (K.length > 0
11
+ ? { ...FromPropertyKey(T, LK, options), ...FromPropertyKeys(T, RK, options) }
12
+ : {});
13
+ }
14
+ function FromMappedKey(T, K, options) {
15
+ return FromPropertyKeys(T, K.keys, options);
16
+ }
17
+ export function OmitFromMappedKey(T, K, options) {
18
+ const P = FromMappedKey(T, K, options);
19
+ return MappedResult(P);
20
+ }
@@ -6,7 +6,7 @@ import { type TUnion } from '../union/index.mjs';
6
6
  import { type TObject, type TProperties } from '../object/index.mjs';
7
7
  import { type TIndexPropertyKeys } from '../indexed/index.mjs';
8
8
  import { TMappedKey } from '../mapped/index.mjs';
9
- import { type TOmitMappedResult } from './omit-mapped-result.mjs';
9
+ import { type TOmitFromMappedKey } from './omit-from-mapped-key.mjs';
10
10
  type FromIntersect<T extends TSchema[], K extends PropertyKey[]> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? [OmitResolve<L, K>, ...FromIntersect<R, K>] : [];
11
11
  declare function FromIntersect<T extends TSchema[], K extends PropertyKey[]>(T: T, K: K): FromIntersect<T, K>;
12
12
  type FromUnion<T extends TSchema[], K extends PropertyKey[]> = T extends [infer L extends TSchema, ...infer R extends TSchema[]] ? [OmitResolve<L, K>, ...FromUnion<R, K>] : [];
@@ -16,7 +16,7 @@ declare function FromProperties<T extends TProperties, K extends PropertyKey[]>(
16
16
  export type OmitResolve<T extends TProperties, K extends PropertyKey[]> = T extends TRecursive<infer S> ? TRecursive<OmitResolve<S, K>> : T extends TIntersect<infer S> ? TIntersect<FromIntersect<S, K>> : T extends TUnion<infer S> ? TUnion<FromUnion<S, K>> : T extends TObject<infer S> ? TObject<FromProperties<S, K>> : TObject<{}>;
17
17
  export declare function OmitResolve<T extends TSchema, K extends PropertyKey[]>(T: T, K: [...K]): OmitResolve<T, K>;
18
18
  export type TOmit<T extends TSchema, K extends PropertyKey[]> = OmitResolve<T, K>;
19
- export declare function Omit<T extends TSchema, K extends TMappedKey>(T: T, K: K): TOmitMappedResult<T, K>;
19
+ export declare function Omit<T extends TSchema, K extends TMappedKey>(T: T, K: K): TOmitFromMappedKey<T, K>;
20
20
  export declare function Omit<T extends TSchema, K extends TSchema, I extends PropertyKey[] = TIndexPropertyKeys<K>>(T: T, K: K, options?: SchemaOptions): TOmit<T, I>;
21
21
  export declare function Omit<T extends TSchema, K extends PropertyKey[]>(T: T, K: readonly [...K], options?: SchemaOptions): TOmit<T, K>;
22
22
  export {};