@sinclair/typebox 0.32.35 → 0.33.1

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 (209) hide show
  1. package/build/cjs/index.d.ts +1 -0
  2. package/build/cjs/index.js +1 -0
  3. package/build/cjs/system/policy.d.ts +9 -1
  4. package/build/cjs/system/policy.js +13 -2
  5. package/build/cjs/type/any/any.js +4 -3
  6. package/build/cjs/type/array/array.d.ts +1 -1
  7. package/build/cjs/type/array/array.js +3 -8
  8. package/build/cjs/type/async-iterator/async-iterator.js +3 -8
  9. package/build/cjs/type/awaited/awaited.js +3 -3
  10. package/build/cjs/type/bigint/bigint.js +3 -6
  11. package/build/cjs/type/boolean/boolean.js +3 -6
  12. package/build/cjs/type/clone/type.d.ts +1 -1
  13. package/build/cjs/type/clone/type.js +2 -2
  14. package/build/cjs/type/composite/composite.js +1 -1
  15. package/build/cjs/type/const/const.js +3 -3
  16. package/build/cjs/type/constructor/constructor.js +2 -8
  17. package/build/cjs/type/constructor-parameters/constructor-parameters.js +2 -3
  18. package/build/cjs/type/create/immutable.d.ts +2 -0
  19. package/build/cjs/type/create/immutable.js +41 -0
  20. package/build/cjs/type/create/index.d.ts +1 -0
  21. package/build/cjs/type/create/index.js +18 -0
  22. package/build/cjs/type/create/type.d.ts +3 -0
  23. package/build/cjs/type/create/type.js +19 -0
  24. package/build/cjs/type/date/date.js +3 -6
  25. package/build/cjs/type/discard/discard.d.ts +1 -0
  26. package/build/cjs/type/discard/discard.js +1 -0
  27. package/build/cjs/type/enum/enum.js +1 -1
  28. package/build/cjs/type/exclude/exclude.js +4 -4
  29. package/build/cjs/type/extends/extends-from-mapped-key.d.ts +1 -1
  30. package/build/cjs/type/extends/extends-from-mapped-key.js +2 -1
  31. package/build/cjs/type/extends/extends-from-mapped-result.d.ts +1 -1
  32. package/build/cjs/type/extends/extends-from-mapped-result.js +2 -1
  33. package/build/cjs/type/extends/extends.js +4 -4
  34. package/build/cjs/type/extract/extract.js +5 -5
  35. package/build/cjs/type/function/function.js +2 -8
  36. package/build/cjs/type/guard/value.js +3 -0
  37. package/build/cjs/type/indexed/indexed-from-mapped-key.d.ts +1 -1
  38. package/build/cjs/type/indexed/indexed-from-mapped-key.js +2 -1
  39. package/build/cjs/type/indexed/indexed-from-mapped-result.d.ts +1 -1
  40. package/build/cjs/type/indexed/indexed.js +10 -6
  41. package/build/cjs/type/instance-type/instance-type.js +3 -3
  42. package/build/cjs/type/integer/integer.js +3 -6
  43. package/build/cjs/type/intersect/intersect-create.d.ts +1 -1
  44. package/build/cjs/type/intersect/intersect-create.js +6 -6
  45. package/build/cjs/type/intersect/intersect-evaluated.js +2 -2
  46. package/build/cjs/type/intersect/intersect.js +3 -3
  47. package/build/cjs/type/intrinsic/intrinsic-from-mapped-key.js +4 -2
  48. package/build/cjs/type/intrinsic/intrinsic.js +4 -2
  49. package/build/cjs/type/iterator/iterator.js +3 -8
  50. package/build/cjs/type/keyof/keyof-from-mapped-result.d.ts +1 -1
  51. package/build/cjs/type/keyof/keyof-from-mapped-result.js +2 -1
  52. package/build/cjs/type/keyof/keyof.js +3 -3
  53. package/build/cjs/type/literal/literal.js +4 -4
  54. package/build/cjs/type/mapped/mapped-key.js +3 -2
  55. package/build/cjs/type/mapped/mapped-result.js +3 -2
  56. package/build/cjs/type/mapped/mapped.js +2 -3
  57. package/build/cjs/type/never/never.js +3 -6
  58. package/build/cjs/type/not/not.d.ts +1 -1
  59. package/build/cjs/type/not/not.js +3 -7
  60. package/build/cjs/type/null/null.js +3 -6
  61. package/build/cjs/type/number/number.js +3 -6
  62. package/build/cjs/type/object/object.js +13 -12
  63. package/build/cjs/type/omit/omit-from-mapped-key.d.ts +1 -1
  64. package/build/cjs/type/omit/omit-from-mapped-key.js +2 -1
  65. package/build/cjs/type/omit/omit-from-mapped-result.d.ts +1 -1
  66. package/build/cjs/type/omit/omit-from-mapped-result.js +2 -1
  67. package/build/cjs/type/omit/omit.js +4 -4
  68. package/build/cjs/type/optional/optional.js +3 -3
  69. package/build/cjs/type/parameters/parameters.js +2 -3
  70. package/build/cjs/type/partial/partial-from-mapped-result.d.ts +1 -1
  71. package/build/cjs/type/partial/partial-from-mapped-result.js +2 -1
  72. package/build/cjs/type/partial/partial.js +4 -4
  73. package/build/cjs/type/pick/pick-from-mapped-key.d.ts +1 -1
  74. package/build/cjs/type/pick/pick-from-mapped-key.js +2 -1
  75. package/build/cjs/type/pick/pick-from-mapped-result.d.ts +1 -1
  76. package/build/cjs/type/pick/pick-from-mapped-result.js +2 -1
  77. package/build/cjs/type/pick/pick.js +4 -4
  78. package/build/cjs/type/promise/promise.js +3 -8
  79. package/build/cjs/type/readonly/readonly.js +3 -3
  80. package/build/cjs/type/record/record.js +5 -6
  81. package/build/cjs/type/recursive/recursive.js +3 -2
  82. package/build/cjs/type/ref/ref.js +4 -7
  83. package/build/cjs/type/regexp/regexp.js +3 -2
  84. package/build/cjs/type/required/required-from-mapped-result.d.ts +1 -1
  85. package/build/cjs/type/required/required.js +4 -4
  86. package/build/cjs/type/rest/rest.d.ts +1 -1
  87. package/build/cjs/type/rest/rest.js +4 -5
  88. package/build/cjs/type/return-type/return-type.js +3 -3
  89. package/build/cjs/type/string/string.js +3 -2
  90. package/build/cjs/type/symbol/symbol.js +2 -1
  91. package/build/cjs/type/template-literal/template-literal.js +3 -2
  92. package/build/cjs/type/transform/transform.js +1 -3
  93. package/build/cjs/type/tuple/tuple.js +5 -7
  94. package/build/cjs/type/type/javascript.js +13 -13
  95. package/build/cjs/type/type/json.js +35 -35
  96. package/build/cjs/type/uint8array/uint8array.js +3 -2
  97. package/build/cjs/type/undefined/undefined.js +3 -2
  98. package/build/cjs/type/union/union-create.d.ts +1 -1
  99. package/build/cjs/type/union/union-create.js +2 -2
  100. package/build/cjs/type/union/union-evaluated.js +3 -3
  101. package/build/cjs/type/union/union.js +3 -3
  102. package/build/cjs/type/unknown/unknown.js +3 -5
  103. package/build/cjs/type/unsafe/unsafe.js +2 -4
  104. package/build/cjs/type/void/void.js +3 -6
  105. package/build/esm/index.d.mts +1 -0
  106. package/build/esm/index.mjs +1 -0
  107. package/build/esm/system/policy.d.mts +9 -1
  108. package/build/esm/system/policy.mjs +13 -2
  109. package/build/esm/type/any/any.mjs +3 -2
  110. package/build/esm/type/array/array.d.mts +1 -1
  111. package/build/esm/type/array/array.mjs +3 -8
  112. package/build/esm/type/async-iterator/async-iterator.mjs +3 -8
  113. package/build/esm/type/awaited/awaited.mjs +3 -3
  114. package/build/esm/type/bigint/bigint.mjs +3 -6
  115. package/build/esm/type/boolean/boolean.mjs +3 -6
  116. package/build/esm/type/clone/type.d.mts +1 -1
  117. package/build/esm/type/clone/type.mjs +2 -2
  118. package/build/esm/type/composite/composite.mjs +1 -1
  119. package/build/esm/type/const/const.mjs +3 -3
  120. package/build/esm/type/constructor/constructor.mjs +2 -8
  121. package/build/esm/type/constructor-parameters/constructor-parameters.mjs +2 -3
  122. package/build/esm/type/create/immutable.d.mts +2 -0
  123. package/build/esm/type/create/immutable.mjs +37 -0
  124. package/build/esm/type/create/index.d.mts +1 -0
  125. package/build/esm/type/create/index.mjs +1 -0
  126. package/build/esm/type/create/type.d.mts +3 -0
  127. package/build/esm/type/create/type.mjs +15 -0
  128. package/build/esm/type/date/date.mjs +3 -6
  129. package/build/esm/type/discard/discard.d.mts +1 -0
  130. package/build/esm/type/discard/discard.mjs +1 -0
  131. package/build/esm/type/enum/enum.mjs +1 -1
  132. package/build/esm/type/exclude/exclude.mjs +4 -4
  133. package/build/esm/type/extends/extends-from-mapped-key.d.mts +1 -1
  134. package/build/esm/type/extends/extends-from-mapped-key.mjs +2 -1
  135. package/build/esm/type/extends/extends-from-mapped-result.d.mts +1 -1
  136. package/build/esm/type/extends/extends-from-mapped-result.mjs +2 -1
  137. package/build/esm/type/extends/extends.mjs +4 -4
  138. package/build/esm/type/extract/extract.mjs +5 -5
  139. package/build/esm/type/function/function.mjs +2 -8
  140. package/build/esm/type/guard/value.mjs +3 -0
  141. package/build/esm/type/indexed/indexed-from-mapped-key.d.mts +1 -1
  142. package/build/esm/type/indexed/indexed-from-mapped-key.mjs +2 -1
  143. package/build/esm/type/indexed/indexed-from-mapped-result.d.mts +1 -1
  144. package/build/esm/type/indexed/indexed.mjs +10 -6
  145. package/build/esm/type/instance-type/instance-type.mjs +3 -3
  146. package/build/esm/type/integer/integer.mjs +3 -6
  147. package/build/esm/type/intersect/intersect-create.d.mts +1 -1
  148. package/build/esm/type/intersect/intersect-create.mjs +6 -6
  149. package/build/esm/type/intersect/intersect-evaluated.mjs +2 -2
  150. package/build/esm/type/intersect/intersect.mjs +3 -3
  151. package/build/esm/type/intrinsic/intrinsic-from-mapped-key.mjs +4 -2
  152. package/build/esm/type/intrinsic/intrinsic.mjs +4 -2
  153. package/build/esm/type/iterator/iterator.mjs +3 -8
  154. package/build/esm/type/keyof/keyof-from-mapped-result.d.mts +1 -1
  155. package/build/esm/type/keyof/keyof-from-mapped-result.mjs +2 -1
  156. package/build/esm/type/keyof/keyof.mjs +3 -3
  157. package/build/esm/type/literal/literal.mjs +4 -4
  158. package/build/esm/type/mapped/mapped-key.mjs +3 -2
  159. package/build/esm/type/mapped/mapped-result.mjs +3 -2
  160. package/build/esm/type/mapped/mapped.mjs +2 -3
  161. package/build/esm/type/never/never.mjs +3 -6
  162. package/build/esm/type/not/not.d.mts +1 -1
  163. package/build/esm/type/not/not.mjs +3 -7
  164. package/build/esm/type/null/null.mjs +3 -6
  165. package/build/esm/type/number/number.mjs +3 -6
  166. package/build/esm/type/object/object.mjs +14 -13
  167. package/build/esm/type/omit/omit-from-mapped-key.d.mts +1 -1
  168. package/build/esm/type/omit/omit-from-mapped-key.mjs +2 -1
  169. package/build/esm/type/omit/omit-from-mapped-result.d.mts +1 -1
  170. package/build/esm/type/omit/omit-from-mapped-result.mjs +2 -1
  171. package/build/esm/type/omit/omit.mjs +4 -4
  172. package/build/esm/type/optional/optional.mjs +3 -3
  173. package/build/esm/type/parameters/parameters.mjs +2 -3
  174. package/build/esm/type/partial/partial-from-mapped-result.d.mts +1 -1
  175. package/build/esm/type/partial/partial-from-mapped-result.mjs +2 -1
  176. package/build/esm/type/partial/partial.mjs +4 -4
  177. package/build/esm/type/pick/pick-from-mapped-key.d.mts +1 -1
  178. package/build/esm/type/pick/pick-from-mapped-key.mjs +2 -1
  179. package/build/esm/type/pick/pick-from-mapped-result.d.mts +1 -1
  180. package/build/esm/type/pick/pick-from-mapped-result.mjs +2 -1
  181. package/build/esm/type/pick/pick.mjs +4 -4
  182. package/build/esm/type/promise/promise.mjs +3 -8
  183. package/build/esm/type/readonly/readonly.mjs +3 -3
  184. package/build/esm/type/record/record.mjs +5 -6
  185. package/build/esm/type/recursive/recursive.mjs +3 -2
  186. package/build/esm/type/ref/ref.mjs +4 -7
  187. package/build/esm/type/regexp/regexp.mjs +3 -2
  188. package/build/esm/type/required/required-from-mapped-result.d.mts +1 -1
  189. package/build/esm/type/required/required.mjs +4 -4
  190. package/build/esm/type/rest/rest.d.mts +1 -1
  191. package/build/esm/type/rest/rest.mjs +4 -5
  192. package/build/esm/type/return-type/return-type.mjs +3 -3
  193. package/build/esm/type/string/string.mjs +3 -2
  194. package/build/esm/type/symbol/symbol.mjs +2 -1
  195. package/build/esm/type/template-literal/template-literal.mjs +3 -2
  196. package/build/esm/type/transform/transform.mjs +1 -3
  197. package/build/esm/type/tuple/tuple.mjs +5 -7
  198. package/build/esm/type/type/javascript.mjs +13 -13
  199. package/build/esm/type/type/json.mjs +35 -35
  200. package/build/esm/type/uint8array/uint8array.mjs +3 -2
  201. package/build/esm/type/undefined/undefined.mjs +3 -2
  202. package/build/esm/type/union/union-create.d.mts +1 -1
  203. package/build/esm/type/union/union-create.mjs +2 -2
  204. package/build/esm/type/union/union-evaluated.mjs +3 -3
  205. package/build/esm/type/union/union.mjs +3 -3
  206. package/build/esm/type/unknown/unknown.mjs +3 -5
  207. package/build/esm/type/unsafe/unsafe.mjs +2 -4
  208. package/build/esm/type/void/void.mjs +3 -6
  209. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Never } from '../never/index.mjs';
2
3
  import { IntersectEvaluated } from '../intersect/index.mjs';
3
4
  import { UnionEvaluated } from '../union/index.mjs';
4
- import { CloneType } from '../clone/type.mjs';
5
5
  import { IndexPropertyKeys } from './indexed-property-keys.mjs';
6
6
  import { IndexFromMappedKey } from './indexed-from-mapped-key.mjs';
7
7
  import { IndexFromMappedResult } from './indexed-from-mapped-result.mjs';
@@ -65,10 +65,14 @@ function FromSchema(T, K) {
65
65
  return (UnionEvaluated(IndexFromPropertyKeys(T, K)));
66
66
  }
67
67
  /** `[Json]` Returns an Indexed property type for the given keys */
68
- export function Index(T, K, options = {}) {
68
+ export function Index(T, K, options) {
69
+ // mapped-types
70
+ if (IsMappedResult(K))
71
+ return IndexFromMappedResult(T, K, options);
72
+ if (IsMappedKey(K))
73
+ return IndexFromMappedKey(T, K, options);
69
74
  // prettier-ignore
70
- return (IsMappedResult(K) ? CloneType(IndexFromMappedResult(T, K, options)) :
71
- IsMappedKey(K) ? CloneType(IndexFromMappedKey(T, K, options)) :
72
- IsSchema(K) ? CloneType(FromSchema(T, IndexPropertyKeys(K)), options) :
73
- CloneType(FromSchema(T, K), options));
75
+ return CreateType(IsSchema(K)
76
+ ? FromSchema(T, IndexPropertyKeys(K))
77
+ : FromSchema(T, K), options);
74
78
  }
@@ -1,5 +1,5 @@
1
- import { CloneType } from '../clone/type.mjs';
1
+ import { CreateType } from '../create/type.mjs';
2
2
  /** `[JavaScript]` Extracts the InstanceType from the given Constructor type */
3
- export function InstanceType(schema, options = {}) {
4
- return CloneType(schema.returns, options);
3
+ export function InstanceType(schema, options) {
4
+ return CreateType(schema.returns, options);
5
5
  }
@@ -1,9 +1,6 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Kind } from '../symbols/index.mjs';
2
3
  /** `[Json]` Creates an Integer type */
3
- export function Integer(options = {}) {
4
- return {
5
- ...options,
6
- [Kind]: 'Integer',
7
- type: 'integer',
8
- };
4
+ export function Integer(options) {
5
+ return CreateType({ [Kind]: 'Integer', type: 'integer' }, options);
9
6
  }
@@ -1,3 +1,3 @@
1
1
  import type { TSchema } from '../schema/index.mjs';
2
2
  import type { TIntersect, IntersectOptions } from './intersect-type.mjs';
3
- export declare function IntersectCreate<T extends TSchema[]>(T: [...T], options: IntersectOptions): TIntersect<T>;
3
+ export declare function IntersectCreate<T extends TSchema[]>(T: [...T], options?: IntersectOptions): TIntersect<T>;
@@ -1,5 +1,5 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Kind } from '../symbols/index.mjs';
2
- import { CloneType, CloneRest } from '../clone/type.mjs';
3
3
  // ------------------------------------------------------------------
4
4
  // TypeGuard
5
5
  // ------------------------------------------------------------------
@@ -8,12 +8,12 @@ import { IsObject, IsSchema } from '../guard/kind.mjs';
8
8
  // IntersectCreate
9
9
  // ------------------------------------------------------------------
10
10
  // prettier-ignore
11
- export function IntersectCreate(T, options) {
11
+ export function IntersectCreate(T, options = {}) {
12
12
  const allObjects = T.every((schema) => IsObject(schema));
13
13
  const clonedUnevaluatedProperties = IsSchema(options.unevaluatedProperties)
14
- ? { unevaluatedProperties: CloneType(options.unevaluatedProperties) }
14
+ ? { unevaluatedProperties: options.unevaluatedProperties }
15
15
  : {};
16
- return ((options.unevaluatedProperties === false || IsSchema(options.unevaluatedProperties) || allObjects
17
- ? { ...options, ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: CloneRest(T) }
18
- : { ...options, ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: CloneRest(T) }));
16
+ return CreateType((options.unevaluatedProperties === false || IsSchema(options.unevaluatedProperties) || allObjects
17
+ ? { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', type: 'object', allOf: T }
18
+ : { ...clonedUnevaluatedProperties, [Kind]: 'Intersect', allOf: T }), options);
19
19
  }
@@ -1,5 +1,5 @@
1
1
  import { OptionalKind } from '../symbols/index.mjs';
2
- import { CloneType } from '../clone/type.mjs';
2
+ import { CreateType } from '../create/type.mjs';
3
3
  import { Discard } from '../discard/index.mjs';
4
4
  import { Never } from '../never/index.mjs';
5
5
  import { Optional } from '../optional/index.mjs';
@@ -31,7 +31,7 @@ export function IntersectEvaluated(T, options = {}) {
31
31
  if (T.length === 0)
32
32
  return Never(options);
33
33
  if (T.length === 1)
34
- return CloneType(T[0], options);
34
+ return CreateType(T[0], options);
35
35
  if (T.some((schema) => IsTransform(schema)))
36
36
  throw new Error('Cannot intersect transform types');
37
37
  return ResolveIntersect(T, options);
@@ -1,4 +1,4 @@
1
- import { CloneType } from '../clone/type.mjs';
1
+ import { CreateType } from '../create/type.mjs';
2
2
  import { Never } from '../never/index.mjs';
3
3
  import { IntersectCreate } from './intersect-create.mjs';
4
4
  // ------------------------------------------------------------------
@@ -6,11 +6,11 @@ import { IntersectCreate } from './intersect-create.mjs';
6
6
  // ------------------------------------------------------------------
7
7
  import { IsTransform } from '../guard/kind.mjs';
8
8
  /** `[Json]` Creates an evaluated Intersect type */
9
- export function Intersect(T, options = {}) {
9
+ export function Intersect(T, options) {
10
10
  if (T.length === 0)
11
11
  return Never(options);
12
12
  if (T.length === 1)
13
- return CloneType(T[0], options);
13
+ return CreateType(T[0], options);
14
14
  if (T.some((schema) => IsTransform(schema)))
15
15
  throw new Error('Cannot intersect transform types');
16
16
  return IntersectCreate(T, options);
@@ -1,17 +1,19 @@
1
1
  import { MappedResult } from '../mapped/index.mjs';
2
2
  import { Intrinsic } from './intrinsic.mjs';
3
3
  import { Literal } from '../literal/index.mjs';
4
+ import { Clone } from '../clone/value.mjs';
4
5
  // prettier-ignore
5
6
  function MappedIntrinsicPropertyKey(K, M, options) {
6
7
  return {
7
- [K]: Intrinsic(Literal(K), M, options)
8
+ [K]: Intrinsic(Literal(K), M, Clone(options))
8
9
  };
9
10
  }
10
11
  // prettier-ignore
11
12
  function MappedIntrinsicPropertyKeys(K, M, options) {
12
- return K.reduce((Acc, L) => {
13
+ const result = K.reduce((Acc, L) => {
13
14
  return { ...Acc, ...MappedIntrinsicPropertyKey(L, M, options) };
14
15
  }, {});
16
+ return result;
15
17
  }
16
18
  // prettier-ignore
17
19
  function MappedIntrinsicProperties(T, M, options) {
@@ -1,3 +1,4 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { TemplateLiteral, TemplateLiteralParseExact, IsTemplateLiteralExpressionFinite, TemplateLiteralExpressionGenerate } from '../template-literal/index.mjs';
2
3
  import { IntrinsicFromMappedKey } from './intrinsic-from-mapped-key.mjs';
3
4
  import { Literal } from '../literal/index.mjs';
@@ -55,8 +56,9 @@ export function Intrinsic(schema, mode, options = {}) {
55
56
  // Intrinsic-Mapped-Inference
56
57
  IsMappedKey(schema) ? IntrinsicFromMappedKey(schema, mode, options) :
57
58
  // Standard-Inference
58
- IsTemplateLiteral(schema) ? FromTemplateLiteral(schema, mode, schema) :
59
+ IsTemplateLiteral(schema) ? FromTemplateLiteral(schema, mode, options) :
59
60
  IsUnion(schema) ? Union(FromRest(schema.anyOf, mode), options) :
60
61
  IsLiteral(schema) ? Literal(FromLiteralValue(schema.const, mode), options) :
61
- schema);
62
+ // Default Type
63
+ CreateType(schema, options));
62
64
  }
@@ -1,11 +1,6 @@
1
- import { CloneType } from '../clone/type.mjs';
1
+ import { CreateType } from '../create/type.mjs';
2
2
  import { Kind } from '../symbols/index.mjs';
3
3
  /** `[JavaScript]` Creates an Iterator type */
4
- export function Iterator(items, options = {}) {
5
- return {
6
- ...options,
7
- [Kind]: 'Iterator',
8
- type: 'Iterator',
9
- items: CloneType(items),
10
- };
4
+ export function Iterator(items, options) {
5
+ return CreateType({ [Kind]: 'Iterator', type: 'Iterator', items }, options);
11
6
  }
@@ -8,5 +8,5 @@ type TFromProperties<K extends TProperties> = ({
8
8
  });
9
9
  type TFromMappedResult<R extends TMappedResult> = (Evaluate<TFromProperties<R['properties']>>);
10
10
  export type TKeyOfFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>> = (Ensure<TMappedResult<P>>);
11
- export declare function KeyOfFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>>(R: R, options: SchemaOptions): TMappedResult<P>;
11
+ export declare function KeyOfFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>>(R: R, options?: SchemaOptions): TMappedResult<P>;
12
12
  export {};
@@ -1,10 +1,11 @@
1
1
  import { MappedResult } from '../mapped/index.mjs';
2
2
  import { KeyOf } from './keyof.mjs';
3
+ import { Clone } from '../clone/value.mjs';
3
4
  // prettier-ignore
4
5
  function FromProperties(K, options) {
5
6
  const Acc = {};
6
7
  for (const K2 of globalThis.Object.getOwnPropertyNames(K))
7
- Acc[K2] = KeyOf(K[K2], options);
8
+ Acc[K2] = KeyOf(K[K2], Clone(options));
8
9
  return Acc;
9
10
  }
10
11
  // prettier-ignore
@@ -1,8 +1,8 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Literal } from '../literal/index.mjs';
2
3
  import { Number } from '../number/index.mjs';
3
4
  import { KeyOfPropertyKeys } from './keyof-property-keys.mjs';
4
5
  import { UnionEvaluated } from '../union/index.mjs';
5
- import { CloneType } from '../clone/type.mjs';
6
6
  import { KeyOfFromMappedResult } from './keyof-from-mapped-result.mjs';
7
7
  // ------------------------------------------------------------------
8
8
  // TypeGuard
@@ -13,7 +13,7 @@ export function KeyOfPropertyKeysToRest(T) {
13
13
  return T.map(L => L === '[number]' ? Number() : Literal(L));
14
14
  }
15
15
  /** `[Json]` Creates a KeyOf type */
16
- export function KeyOf(T, options = {}) {
16
+ export function KeyOf(T, options) {
17
17
  if (IsMappedResult(T)) {
18
18
  return KeyOfFromMappedResult(T, options);
19
19
  }
@@ -21,6 +21,6 @@ export function KeyOf(T, options = {}) {
21
21
  const K = KeyOfPropertyKeys(T);
22
22
  const S = KeyOfPropertyKeysToRest(K);
23
23
  const U = UnionEvaluated(S);
24
- return CloneType(U, options);
24
+ return CreateType(U, options);
25
25
  }
26
26
  }
@@ -1,10 +1,10 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Kind } from '../symbols/index.mjs';
2
3
  /** `[Json]` Creates a Literal type */
3
- export function Literal(value, options = {}) {
4
- return {
5
- ...options,
4
+ export function Literal(value, options) {
5
+ return CreateType({
6
6
  [Kind]: 'Literal',
7
7
  const: value,
8
8
  type: typeof value,
9
- };
9
+ }, options);
10
10
  }
@@ -1,8 +1,9 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Kind } from '../symbols/index.mjs';
2
3
  // prettier-ignore
3
4
  export function MappedKey(T) {
4
- return {
5
+ return CreateType({
5
6
  [Kind]: 'MappedKey',
6
7
  keys: T
7
- };
8
+ });
8
9
  }
@@ -1,8 +1,9 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Kind } from '../symbols/index.mjs';
2
3
  // prettier-ignore
3
4
  export function MappedResult(properties) {
4
- return {
5
+ return CreateType({
5
6
  [Kind]: 'MappedResult',
6
7
  properties
7
- };
8
+ });
8
9
  }
@@ -1,5 +1,4 @@
1
1
  import { Kind, OptionalKind, ReadonlyKind } from '../symbols/index.mjs';
2
- import { CloneType } from '../clone/type.mjs';
3
2
  import { Discard } from '../discard/index.mjs';
4
3
  // evaluation types
5
4
  import { Array } from '../array/index.mjs';
@@ -93,9 +92,9 @@ export function MappedFunctionReturnType(K, T) {
93
92
  return Acc;
94
93
  }
95
94
  /** `[Json]` Creates a Mapped object type */
96
- export function Mapped(key, map, options = {}) {
95
+ export function Mapped(key, map, options) {
97
96
  const K = IsSchema(key) ? IndexPropertyKeys(key) : key;
98
97
  const RT = map({ [Kind]: 'MappedKey', keys: K });
99
98
  const R = MappedFunctionReturnType(K, RT);
100
- return CloneType(Object(R), options);
99
+ return Object(R, options);
101
100
  }
@@ -1,9 +1,6 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Kind } from '../symbols/index.mjs';
2
3
  /** `[Json]` Creates a Never type */
3
- export function Never(options = {}) {
4
- return {
5
- ...options,
6
- [Kind]: 'Never',
7
- not: {},
8
- };
4
+ export function Never(options) {
5
+ return CreateType({ [Kind]: 'Never', not: {} }, options);
9
6
  }
@@ -7,4 +7,4 @@ export interface TNot<T extends TSchema = TSchema> extends TSchema {
7
7
  not: T;
8
8
  }
9
9
  /** `[Json]` Creates a Not type */
10
- export declare function Not<T extends TSchema>(schema: T, options?: SchemaOptions): TNot<T>;
10
+ export declare function Not<T extends TSchema>(not: T, options?: SchemaOptions): TNot<T>;
@@ -1,10 +1,6 @@
1
- import { CloneType } from '../clone/type.mjs';
1
+ import { CreateType } from '../create/type.mjs';
2
2
  import { Kind } from '../symbols/index.mjs';
3
3
  /** `[Json]` Creates a Not type */
4
- export function Not(schema, options) {
5
- return {
6
- ...options,
7
- [Kind]: 'Not',
8
- not: CloneType(schema),
9
- };
4
+ export function Not(not, options) {
5
+ return CreateType({ [Kind]: 'Not', not }, options);
10
6
  }
@@ -1,9 +1,6 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Kind } from '../symbols/index.mjs';
2
3
  /** `[Json]` Creates a Null type */
3
- export function Null(options = {}) {
4
- return {
5
- ...options,
6
- [Kind]: 'Null',
7
- type: 'null',
8
- };
4
+ export function Null(options) {
5
+ return CreateType({ [Kind]: 'Null', type: 'null' }, options);
9
6
  }
@@ -1,9 +1,6 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Kind } from '../symbols/index.mjs';
2
3
  /** `[Json]` Creates a Number type */
3
- export function Number(options = {}) {
4
- return {
5
- ...options,
6
- [Kind]: 'Number',
7
- type: 'number',
8
- };
4
+ export function Number(options) {
5
+ return CreateType({ [Kind]: 'Number', type: 'number' }, options);
9
6
  }
@@ -1,21 +1,22 @@
1
- import { CloneType } from '../clone/type.mjs';
1
+ import { CreateType } from '../create/type.mjs';
2
2
  import { Kind } from '../symbols/index.mjs';
3
3
  // ------------------------------------------------------------------
4
4
  // TypeGuard
5
5
  // ------------------------------------------------------------------
6
- import { IsOptional, IsSchema } from '../guard/kind.mjs';
6
+ import { IsOptional } from '../guard/kind.mjs';
7
+ function RequiredKeys(properties) {
8
+ const keys = [];
9
+ for (let key in properties) {
10
+ if (!IsOptional(properties[key]))
11
+ keys.push(key);
12
+ }
13
+ return keys;
14
+ }
7
15
  /** `[Json]` Creates an Object type */
8
- function _Object(properties, options = {}) {
9
- const propertyKeys = globalThis.Object.getOwnPropertyNames(properties);
10
- const optionalKeys = propertyKeys.filter((key) => IsOptional(properties[key]));
11
- const requiredKeys = propertyKeys.filter((name) => !optionalKeys.includes(name));
12
- const clonedAdditionalProperties = IsSchema(options.additionalProperties) ? { additionalProperties: CloneType(options.additionalProperties) } : {};
13
- const clonedProperties = {};
14
- for (const key of propertyKeys)
15
- clonedProperties[key] = CloneType(properties[key]);
16
- return (requiredKeys.length > 0
17
- ? { ...options, ...clonedAdditionalProperties, [Kind]: 'Object', type: 'object', properties: clonedProperties, required: requiredKeys }
18
- : { ...options, ...clonedAdditionalProperties, [Kind]: 'Object', type: 'object', properties: clonedProperties });
16
+ function _Object(properties, options) {
17
+ const required = RequiredKeys(properties);
18
+ const schematic = required.length > 0 ? { [Kind]: 'Object', type: 'object', properties, required } : { [Kind]: 'Object', type: 'object', properties };
19
+ return CreateType(schematic, options);
19
20
  }
20
21
  /** `[Json]` Creates an Object type */
21
22
  export const Object = _Object;
@@ -8,5 +8,5 @@ type TFromPropertyKey<T extends TSchema, K extends PropertyKey> = {
8
8
  type TFromPropertyKeys<T extends TSchema, K extends PropertyKey[], Acc extends TProperties = {}> = (K extends [infer LK extends PropertyKey, ...infer RK extends PropertyKey[]] ? TFromPropertyKeys<T, RK, Acc & TFromPropertyKey<T, LK>> : Acc);
9
9
  type TFromMappedKey<T extends TSchema, K extends TMappedKey> = (TFromPropertyKeys<T, K['keys']>);
10
10
  export type TOmitFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = TFromMappedKey<T, K>> = (TMappedResult<P>);
11
- export declare function OmitFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = TFromMappedKey<T, K>>(T: T, K: K, options: SchemaOptions): TMappedResult<P>;
11
+ export declare function OmitFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = TFromMappedKey<T, K>>(T: T, K: K, options?: SchemaOptions): TMappedResult<P>;
12
12
  export {};
@@ -1,9 +1,10 @@
1
1
  import { MappedResult } from '../mapped/index.mjs';
2
2
  import { Omit } from './omit.mjs';
3
+ import { Clone } from '../clone/value.mjs';
3
4
  // prettier-ignore
4
5
  function FromPropertyKey(T, K, options) {
5
6
  return {
6
- [K]: Omit(T, [K], options)
7
+ [K]: Omit(T, [K], Clone(options))
7
8
  };
8
9
  }
9
10
  // prettier-ignore
@@ -8,5 +8,5 @@ type TFromProperties<P extends TProperties, K extends PropertyKey[]> = ({
8
8
  });
9
9
  type TFromMappedResult<R extends TMappedResult, K extends PropertyKey[]> = (Evaluate<TFromProperties<R['properties'], K>>);
10
10
  export type TOmitFromMappedResult<T extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<T, K>> = (Ensure<TMappedResult<P>>);
11
- export declare function OmitFromMappedResult<R extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<R, K>>(R: R, K: [...K], options: SchemaOptions): TMappedResult<P>;
11
+ export declare function OmitFromMappedResult<R extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<R, K>>(R: R, K: [...K], options?: SchemaOptions): TMappedResult<P>;
12
12
  export {};
@@ -1,10 +1,11 @@
1
1
  import { MappedResult } from '../mapped/index.mjs';
2
2
  import { Omit } from './omit.mjs';
3
+ import { Clone } from '../clone/value.mjs';
3
4
  // prettier-ignore
4
5
  function FromProperties(P, K, options) {
5
6
  const Acc = {};
6
7
  for (const K2 of globalThis.Object.getOwnPropertyNames(P))
7
- Acc[K2] = Omit(P[K2], K, options);
8
+ Acc[K2] = Omit(P[K2], K, Clone(options));
8
9
  return Acc;
9
10
  }
10
11
  // prettier-ignore
@@ -1,10 +1,10 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Intersect } from '../intersect/index.mjs';
2
3
  import { Union } from '../union/index.mjs';
3
4
  import { Object } from '../object/index.mjs';
4
5
  import { IndexPropertyKeys } from '../indexed/index.mjs';
5
6
  import { Discard } from '../discard/index.mjs';
6
7
  import { TransformKind } from '../symbols/index.mjs';
7
- import { CloneType } from '../clone/type.mjs';
8
8
  import { OmitFromMappedKey } from './omit-from-mapped-key.mjs';
9
9
  import { OmitFromMappedResult } from './omit-from-mapped-result.mjs';
10
10
  // ------------------------------------------------------------------
@@ -41,7 +41,7 @@ function OmitResolve(T, K) {
41
41
  IsObject(T) ? Object(FromProperties(T.properties, K)) :
42
42
  Object({}));
43
43
  }
44
- export function Omit(T, K, options = {}) {
44
+ export function Omit(T, K, options) {
45
45
  // mapped
46
46
  if (IsMappedKey(K))
47
47
  return OmitFromMappedKey(T, K, options);
@@ -50,6 +50,6 @@ export function Omit(T, K, options = {}) {
50
50
  // non-mapped
51
51
  const I = IsSchema(K) ? IndexPropertyKeys(K) : K;
52
52
  const D = Discard(T, [TransformKind, '$id', 'required']);
53
- const R = CloneType(OmitResolve(T, I), options);
54
- return { ...D, ...R };
53
+ const R = OmitResolve(T, I);
54
+ return CreateType({ ...D, ...R }, options);
55
55
  }
@@ -1,13 +1,13 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { OptionalKind } from '../symbols/index.mjs';
2
- import { CloneType } from '../clone/type.mjs';
3
3
  import { Discard } from '../discard/index.mjs';
4
4
  import { OptionalFromMappedResult } from './optional-from-mapped-result.mjs';
5
5
  import { IsMappedResult } from '../guard/kind.mjs';
6
6
  function RemoveOptional(schema) {
7
- return Discard(CloneType(schema), [OptionalKind]);
7
+ return CreateType(Discard(schema, [OptionalKind]));
8
8
  }
9
9
  function AddOptional(schema) {
10
- return { ...CloneType(schema), [OptionalKind]: 'Optional' };
10
+ return CreateType({ ...schema, [OptionalKind]: 'Optional' });
11
11
  }
12
12
  // prettier-ignore
13
13
  function OptionalWithFlag(schema, F) {
@@ -1,6 +1,5 @@
1
1
  import { Tuple } from '../tuple/index.mjs';
2
- import { CloneRest } from '../clone/type.mjs';
3
2
  /** `[JavaScript]` Extracts the Parameters from the given Function type */
4
- export function Parameters(schema, options = {}) {
5
- return Tuple(CloneRest(schema.parameters), { ...options });
3
+ export function Parameters(schema, options) {
4
+ return Tuple(schema.parameters, options);
6
5
  }
@@ -8,5 +8,5 @@ type TFromProperties<P extends TProperties> = ({
8
8
  });
9
9
  type TFromMappedResult<R extends TMappedResult> = (Evaluate<TFromProperties<R['properties']>>);
10
10
  export type TPartialFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>> = (Ensure<TMappedResult<P>>);
11
- export declare function PartialFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>>(R: R, options: SchemaOptions): TMappedResult<P>;
11
+ export declare function PartialFromMappedResult<R extends TMappedResult, P extends TProperties = TFromMappedResult<R>>(R: R, options?: SchemaOptions): TMappedResult<P>;
12
12
  export {};
@@ -1,10 +1,11 @@
1
1
  import { MappedResult } from '../mapped/index.mjs';
2
2
  import { Partial } from './partial.mjs';
3
+ import { Clone } from '../clone/value.mjs';
3
4
  // prettier-ignore
4
5
  function FromProperties(K, options) {
5
6
  const Acc = {};
6
7
  for (const K2 of globalThis.Object.getOwnPropertyNames(K))
7
- Acc[K2] = Partial(K[K2], options);
8
+ Acc[K2] = Partial(K[K2], Clone(options));
8
9
  return Acc;
9
10
  }
10
11
  // prettier-ignore
@@ -1,10 +1,10 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Optional } from '../optional/index.mjs';
2
3
  import { Object } from '../object/index.mjs';
3
4
  import { Intersect } from '../intersect/index.mjs';
4
5
  import { Union } from '../union/index.mjs';
5
6
  import { Discard } from '../discard/index.mjs';
6
7
  import { TransformKind } from '../symbols/index.mjs';
7
- import { CloneType } from '../clone/type.mjs';
8
8
  import { PartialFromMappedResult } from './partial-from-mapped-result.mjs';
9
9
  // ------------------------------------------------------------------
10
10
  // TypeGuard
@@ -32,10 +32,10 @@ function PartialResolve(T) {
32
32
  Object({}));
33
33
  }
34
34
  /** `[Json]` Constructs a type where all properties are optional */
35
- export function Partial(T, options = {}) {
35
+ export function Partial(T, options) {
36
36
  if (IsMappedResult(T))
37
37
  return PartialFromMappedResult(T, options);
38
38
  const D = Discard(T, [TransformKind, '$id', 'required']);
39
- const R = CloneType(PartialResolve(T), options);
40
- return { ...D, ...R };
39
+ const R = PartialResolve(T);
40
+ return CreateType({ ...options, ...D, ...R });
41
41
  }
@@ -8,5 +8,5 @@ type TFromPropertyKey<T extends TSchema, K extends PropertyKey> = {
8
8
  type TFromPropertyKeys<T extends TSchema, K extends PropertyKey[], Acc extends TProperties = {}> = (K extends [infer LK extends PropertyKey, ...infer RK extends PropertyKey[]] ? TFromPropertyKeys<T, RK, Acc & TFromPropertyKey<T, LK>> : Acc);
9
9
  type TFromMappedKey<T extends TSchema, K extends TMappedKey> = (TFromPropertyKeys<T, K['keys']>);
10
10
  export type TPickFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = TFromMappedKey<T, K>> = (TMappedResult<P>);
11
- export declare function PickFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = TFromMappedKey<T, K>>(T: T, K: K, options: SchemaOptions): TMappedResult<P>;
11
+ export declare function PickFromMappedKey<T extends TSchema, K extends TMappedKey, P extends TProperties = TFromMappedKey<T, K>>(T: T, K: K, options?: SchemaOptions): TMappedResult<P>;
12
12
  export {};
@@ -1,9 +1,10 @@
1
1
  import { MappedResult } from '../mapped/index.mjs';
2
2
  import { Pick } from './pick.mjs';
3
+ import { Clone } from '../clone/value.mjs';
3
4
  // prettier-ignore
4
5
  function FromPropertyKey(T, K, options) {
5
6
  return {
6
- [K]: Pick(T, [K], options)
7
+ [K]: Pick(T, [K], Clone(options))
7
8
  };
8
9
  }
9
10
  // prettier-ignore
@@ -8,5 +8,5 @@ type TFromProperties<P extends TProperties, K extends PropertyKey[]> = ({
8
8
  });
9
9
  type TFromMappedResult<R extends TMappedResult, K extends PropertyKey[]> = (Evaluate<TFromProperties<R['properties'], K>>);
10
10
  export type TPickFromMappedResult<T extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<T, K>> = (Ensure<TMappedResult<P>>);
11
- export declare function PickFromMappedResult<R extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<R, K>>(R: R, K: [...K], options: SchemaOptions): TMappedResult<P>;
11
+ export declare function PickFromMappedResult<R extends TMappedResult, K extends PropertyKey[], P extends TProperties = TFromMappedResult<R, K>>(R: R, K: [...K], options?: SchemaOptions): TMappedResult<P>;
12
12
  export {};
@@ -1,10 +1,11 @@
1
1
  import { MappedResult } from '../mapped/index.mjs';
2
2
  import { Pick } from './pick.mjs';
3
+ import { Clone } from '../clone/value.mjs';
3
4
  // prettier-ignore
4
5
  function FromProperties(P, K, options) {
5
6
  const Acc = {};
6
7
  for (const K2 of globalThis.Object.getOwnPropertyNames(P))
7
- Acc[K2] = Pick(P[K2], K, options);
8
+ Acc[K2] = Pick(P[K2], K, Clone(options));
8
9
  return Acc;
9
10
  }
10
11
  // prettier-ignore
@@ -1,10 +1,10 @@
1
+ import { CreateType } from '../create/type.mjs';
1
2
  import { Intersect } from '../intersect/index.mjs';
2
3
  import { Union } from '../union/index.mjs';
3
4
  import { Object } from '../object/index.mjs';
4
5
  import { IndexPropertyKeys } from '../indexed/index.mjs';
5
6
  import { Discard } from '../discard/index.mjs';
6
7
  import { TransformKind } from '../symbols/index.mjs';
7
- import { CloneType } from '../clone/type.mjs';
8
8
  import { PickFromMappedKey } from './pick-from-mapped-key.mjs';
9
9
  import { PickFromMappedResult } from './pick-from-mapped-result.mjs';
10
10
  // ------------------------------------------------------------------
@@ -36,7 +36,7 @@ function PickResolve(T, K) {
36
36
  IsObject(T) ? Object(FromProperties(T.properties, K)) :
37
37
  Object({}));
38
38
  }
39
- export function Pick(T, K, options = {}) {
39
+ export function Pick(T, K, options) {
40
40
  // mapped
41
41
  if (IsMappedKey(K))
42
42
  return PickFromMappedKey(T, K, options);
@@ -45,6 +45,6 @@ export function Pick(T, K, options = {}) {
45
45
  // non-mapped
46
46
  const I = IsSchema(K) ? IndexPropertyKeys(K) : K;
47
47
  const D = Discard(T, [TransformKind, '$id', 'required']);
48
- const R = CloneType(PickResolve(T, I), options);
49
- return { ...D, ...R };
48
+ const R = PickResolve(T, I);
49
+ return CreateType({ ...D, ...R }, options);
50
50
  }