@vielzeug/spell 26.11.8 → 26.11.10

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/README.md +1 -1
  2. package/dist/_dev.cjs.map +1 -1
  3. package/dist/_dev.js.map +1 -1
  4. package/dist/_object.cjs +2 -0
  5. package/dist/_object.cjs.map +1 -0
  6. package/dist/_object.d.ts +9 -0
  7. package/dist/_object.d.ts.map +1 -0
  8. package/dist/_object.js +2 -0
  9. package/dist/_object.js.map +1 -0
  10. package/dist/_parse.cjs +2 -0
  11. package/dist/_parse.cjs.map +1 -0
  12. package/dist/_parse.d.ts +38 -0
  13. package/dist/_parse.d.ts.map +1 -0
  14. package/dist/_parse.js +2 -0
  15. package/dist/_parse.js.map +1 -0
  16. package/dist/errors.cjs +2 -2
  17. package/dist/errors.cjs.map +1 -1
  18. package/dist/errors.d.ts +15 -26
  19. package/dist/errors.d.ts.map +1 -1
  20. package/dist/errors.js +2 -2
  21. package/dist/errors.js.map +1 -1
  22. package/dist/index.cjs +1 -1
  23. package/dist/index.d.ts +4 -4
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/json.cjs +2 -1
  27. package/dist/json.cjs.map +1 -0
  28. package/dist/json.d.ts +8 -1
  29. package/dist/json.d.ts.map +1 -1
  30. package/dist/json.js +2 -1
  31. package/dist/json.js.map +1 -0
  32. package/dist/messages.cjs +1 -1
  33. package/dist/messages.cjs.map +1 -1
  34. package/dist/messages.d.ts +7 -6
  35. package/dist/messages.d.ts.map +1 -1
  36. package/dist/messages.js +1 -1
  37. package/dist/messages.js.map +1 -1
  38. package/dist/predicates.cjs +2 -1
  39. package/dist/predicates.cjs.map +1 -0
  40. package/dist/predicates.d.ts +41 -2
  41. package/dist/predicates.d.ts.map +1 -1
  42. package/dist/predicates.js +2 -1
  43. package/dist/predicates.js.map +1 -0
  44. package/dist/s.cjs +1 -1
  45. package/dist/s.cjs.map +1 -1
  46. package/dist/s.d.ts +21 -22
  47. package/dist/s.d.ts.map +1 -1
  48. package/dist/s.js +1 -1
  49. package/dist/s.js.map +1 -1
  50. package/dist/schema.cjs +2 -0
  51. package/dist/schema.cjs.map +1 -0
  52. package/dist/schema.d.ts +93 -0
  53. package/dist/schema.d.ts.map +1 -0
  54. package/dist/schema.js +2 -0
  55. package/dist/schema.js.map +1 -0
  56. package/dist/schemas/array.cjs +1 -1
  57. package/dist/schemas/array.cjs.map +1 -1
  58. package/dist/schemas/array.d.ts +22 -32
  59. package/dist/schemas/array.d.ts.map +1 -1
  60. package/dist/schemas/array.js +1 -1
  61. package/dist/schemas/array.js.map +1 -1
  62. package/dist/schemas/bigint.cjs +1 -1
  63. package/dist/schemas/bigint.cjs.map +1 -1
  64. package/dist/schemas/bigint.d.ts +14 -18
  65. package/dist/schemas/bigint.d.ts.map +1 -1
  66. package/dist/schemas/bigint.js +1 -1
  67. package/dist/schemas/bigint.js.map +1 -1
  68. package/dist/schemas/date.cjs +1 -1
  69. package/dist/schemas/date.cjs.map +1 -1
  70. package/dist/schemas/date.d.ts +7 -6
  71. package/dist/schemas/date.d.ts.map +1 -1
  72. package/dist/schemas/date.js +1 -1
  73. package/dist/schemas/date.js.map +1 -1
  74. package/dist/schemas/discriminated-union.cjs +2 -0
  75. package/dist/schemas/discriminated-union.cjs.map +1 -0
  76. package/dist/schemas/discriminated-union.d.ts +39 -0
  77. package/dist/schemas/discriminated-union.d.ts.map +1 -0
  78. package/dist/schemas/discriminated-union.js +2 -0
  79. package/dist/schemas/discriminated-union.js.map +1 -0
  80. package/dist/schemas/intersect.cjs +1 -1
  81. package/dist/schemas/intersect.cjs.map +1 -1
  82. package/dist/schemas/intersect.d.ts +10 -9
  83. package/dist/schemas/intersect.d.ts.map +1 -1
  84. package/dist/schemas/intersect.js +1 -1
  85. package/dist/schemas/intersect.js.map +1 -1
  86. package/dist/schemas/lazy.cjs +1 -1
  87. package/dist/schemas/lazy.cjs.map +1 -1
  88. package/dist/schemas/lazy.d.ts +10 -10
  89. package/dist/schemas/lazy.d.ts.map +1 -1
  90. package/dist/schemas/lazy.js +1 -1
  91. package/dist/schemas/lazy.js.map +1 -1
  92. package/dist/schemas/map.cjs +1 -1
  93. package/dist/schemas/map.cjs.map +1 -1
  94. package/dist/schemas/map.d.ts +8 -7
  95. package/dist/schemas/map.d.ts.map +1 -1
  96. package/dist/schemas/map.js +1 -1
  97. package/dist/schemas/map.js.map +1 -1
  98. package/dist/schemas/number.cjs +1 -1
  99. package/dist/schemas/number.cjs.map +1 -1
  100. package/dist/schemas/number.d.ts +20 -27
  101. package/dist/schemas/number.d.ts.map +1 -1
  102. package/dist/schemas/number.js +1 -1
  103. package/dist/schemas/number.js.map +1 -1
  104. package/dist/schemas/object.cjs +1 -1
  105. package/dist/schemas/object.cjs.map +1 -1
  106. package/dist/schemas/object.d.ts +40 -88
  107. package/dist/schemas/object.d.ts.map +1 -1
  108. package/dist/schemas/object.js +1 -1
  109. package/dist/schemas/object.js.map +1 -1
  110. package/dist/schemas/primitives.cjs +2 -0
  111. package/dist/schemas/primitives.cjs.map +1 -0
  112. package/dist/schemas/primitives.d.ts +38 -0
  113. package/dist/schemas/primitives.d.ts.map +1 -0
  114. package/dist/schemas/primitives.js +2 -0
  115. package/dist/schemas/primitives.js.map +1 -0
  116. package/dist/schemas/record.cjs +1 -1
  117. package/dist/schemas/record.cjs.map +1 -1
  118. package/dist/schemas/record.d.ts +7 -8
  119. package/dist/schemas/record.d.ts.map +1 -1
  120. package/dist/schemas/record.js +1 -1
  121. package/dist/schemas/record.js.map +1 -1
  122. package/dist/schemas/set.cjs +1 -1
  123. package/dist/schemas/set.cjs.map +1 -1
  124. package/dist/schemas/set.d.ts +8 -7
  125. package/dist/schemas/set.d.ts.map +1 -1
  126. package/dist/schemas/set.js +1 -1
  127. package/dist/schemas/set.js.map +1 -1
  128. package/dist/schemas/string.cjs +1 -1
  129. package/dist/schemas/string.cjs.map +1 -1
  130. package/dist/schemas/string.d.ts +42 -98
  131. package/dist/schemas/string.d.ts.map +1 -1
  132. package/dist/schemas/string.js +1 -1
  133. package/dist/schemas/string.js.map +1 -1
  134. package/dist/schemas/tuple.cjs +1 -1
  135. package/dist/schemas/tuple.cjs.map +1 -1
  136. package/dist/schemas/tuple.d.ts +9 -9
  137. package/dist/schemas/tuple.d.ts.map +1 -1
  138. package/dist/schemas/tuple.js +1 -1
  139. package/dist/schemas/tuple.js.map +1 -1
  140. package/dist/schemas/union.cjs +1 -1
  141. package/dist/schemas/union.cjs.map +1 -1
  142. package/dist/schemas/union.d.ts +9 -7
  143. package/dist/schemas/union.d.ts.map +1 -1
  144. package/dist/schemas/union.js +1 -1
  145. package/dist/schemas/union.js.map +1 -1
  146. package/dist/spell.cjs +2 -2
  147. package/dist/spell.cjs.map +1 -1
  148. package/dist/spell.iife.js +2 -2
  149. package/dist/spell.iife.js.map +1 -1
  150. package/dist/spell.js +842 -1601
  151. package/dist/spell.js.map +1 -1
  152. package/dist/types.cjs +1 -1
  153. package/dist/types.cjs.map +1 -1
  154. package/dist/types.d.ts +151 -265
  155. package/dist/types.d.ts.map +1 -1
  156. package/dist/types.js +1 -1
  157. package/dist/types.js.map +1 -1
  158. package/package.json +2 -2
  159. package/dist/core.cjs +0 -2
  160. package/dist/core.cjs.map +0 -1
  161. package/dist/core.d.ts +0 -101
  162. package/dist/core.d.ts.map +0 -1
  163. package/dist/core.js +0 -2
  164. package/dist/core.js.map +0 -1
  165. package/dist/formats.cjs +0 -2
  166. package/dist/formats.cjs.map +0 -1
  167. package/dist/formats.d.ts +0 -41
  168. package/dist/formats.d.ts.map +0 -1
  169. package/dist/formats.js +0 -2
  170. package/dist/formats.js.map +0 -1
  171. package/dist/json-schema.cjs +0 -2
  172. package/dist/json-schema.cjs.map +0 -1
  173. package/dist/json-schema.d.ts +0 -5
  174. package/dist/json-schema.d.ts.map +0 -1
  175. package/dist/json-schema.js +0 -2
  176. package/dist/json-schema.js.map +0 -1
  177. package/dist/safe-object.cjs +0 -2
  178. package/dist/safe-object.cjs.map +0 -1
  179. package/dist/safe-object.d.ts +0 -6
  180. package/dist/safe-object.d.ts.map +0 -1
  181. package/dist/safe-object.js +0 -2
  182. package/dist/safe-object.js.map +0 -1
  183. package/dist/schemas/boolean.cjs +0 -2
  184. package/dist/schemas/boolean.cjs.map +0 -1
  185. package/dist/schemas/boolean.d.ts +0 -9
  186. package/dist/schemas/boolean.d.ts.map +0 -1
  187. package/dist/schemas/boolean.js +0 -2
  188. package/dist/schemas/boolean.js.map +0 -1
  189. package/dist/schemas/enum.cjs +0 -2
  190. package/dist/schemas/enum.cjs.map +0 -1
  191. package/dist/schemas/enum.d.ts +0 -12
  192. package/dist/schemas/enum.d.ts.map +0 -1
  193. package/dist/schemas/enum.js +0 -2
  194. package/dist/schemas/enum.js.map +0 -1
  195. package/dist/schemas/instanceof.cjs +0 -2
  196. package/dist/schemas/instanceof.cjs.map +0 -1
  197. package/dist/schemas/instanceof.d.ts +0 -9
  198. package/dist/schemas/instanceof.d.ts.map +0 -1
  199. package/dist/schemas/instanceof.js +0 -2
  200. package/dist/schemas/instanceof.js.map +0 -1
  201. package/dist/schemas/literal.cjs +0 -2
  202. package/dist/schemas/literal.cjs.map +0 -1
  203. package/dist/schemas/literal.d.ts +0 -9
  204. package/dist/schemas/literal.d.ts.map +0 -1
  205. package/dist/schemas/literal.js +0 -2
  206. package/dist/schemas/literal.js.map +0 -1
  207. package/dist/schemas/never.cjs +0 -2
  208. package/dist/schemas/never.cjs.map +0 -1
  209. package/dist/schemas/never.d.ts +0 -8
  210. package/dist/schemas/never.d.ts.map +0 -1
  211. package/dist/schemas/never.js +0 -2
  212. package/dist/schemas/never.js.map +0 -1
  213. package/dist/schemas/raw-or.cjs +0 -2
  214. package/dist/schemas/raw-or.cjs.map +0 -1
  215. package/dist/schemas/raw-or.d.ts +0 -17
  216. package/dist/schemas/raw-or.d.ts.map +0 -1
  217. package/dist/schemas/raw-or.js +0 -2
  218. package/dist/schemas/raw-or.js.map +0 -1
  219. package/dist/schemas/variant.cjs +0 -2
  220. package/dist/schemas/variant.cjs.map +0 -1
  221. package/dist/schemas/variant.d.ts +0 -37
  222. package/dist/schemas/variant.d.ts.map +0 -1
  223. package/dist/schemas/variant.js +0 -2
  224. package/dist/schemas/variant.js.map +0 -1
  225. package/dist/tolerate.cjs +0 -2
  226. package/dist/tolerate.cjs.map +0 -1
  227. package/dist/tolerate.d.ts +0 -10
  228. package/dist/tolerate.d.ts.map +0 -1
  229. package/dist/tolerate.js +0 -2
  230. package/dist/tolerate.js.map +0 -1
  231. package/dist/validators.cjs +0 -2
  232. package/dist/validators.cjs.map +0 -1
  233. package/dist/validators.d.ts +0 -20
  234. package/dist/validators.d.ts.map +0 -1
  235. package/dist/validators.js +0 -2
  236. package/dist/validators.js.map +0 -1
@@ -1,12 +1,13 @@
1
- import type { AnySchema, InferInput, InferOutput, MessageFn, ParseContext, ParseValue, SchemaDescriptor } from '../core';
2
- import { Schema } from '../core';
1
+ import { type MaybePromise, type ParseValue, type RunContext } from '../_parse';
2
+ import { Schema } from '../schema';
3
+ import { type AnySchema, type InferInput, type InferOutput, type MessageFn, type SchemaDescriptor, type SchemaKind } from '../types';
3
4
  export declare class MapSchema<K extends AnySchema, V extends AnySchema> extends Schema<Map<InferOutput<K>, InferOutput<V>>, Map<InferInput<K>, InferInput<V>>> {
4
5
  readonly keySchema: K;
5
6
  readonly valueSchema: V;
6
- protected get _kind(): string;
7
7
  constructor(keySchema: K, valueSchema: V);
8
- protected _parse(value: unknown, ctx: ParseContext): ParseValue;
9
- protected _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue>;
8
+ get kind(): SchemaKind;
9
+ /** Key and value failures are reported by entry index; failed entries are left out of the parsed map. */
10
+ protected _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue>;
10
11
  min(size: number, message?: MessageFn<{
11
12
  min: number;
12
13
  value: Map<unknown, unknown>;
@@ -20,8 +21,8 @@ export declare class MapSchema<K extends AnySchema, V extends AnySchema> extends
20
21
  value: Map<unknown, unknown>;
21
22
  }>): this;
22
23
  nonEmpty(message?: MessageFn<{
23
- min: number;
24
+ value: Map<unknown, unknown>;
24
25
  }>): this;
25
- protected _toDescriptorImpl(): SchemaDescriptor;
26
+ protected _describe(): SchemaDescriptor;
26
27
  }
27
28
  //# sourceMappingURL=map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/schemas/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,WAAW,EAEX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAqD,MAAM,EAAE,MAAM,SAAS,CAAC;AAEpF,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,CAAE,SAAQ,MAAM,CAC7E,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EACnC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAClC;IACC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAExB,cAAuB,KAAK,IAAI,MAAM,CAErC;gBAEW,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;cAMrB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,UAAU;cA8B/C,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAiC5F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAY3F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAY3F,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAc/F,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;cAUjC,iBAAiB,IAAI,gBAAgB;CAQzD"}
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/schemas/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,YAAY,EACjB,KAAK,UAAU,EAEf,KAAK,UAAU,EAEhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,UAAU,EACf,KAAK,WAAW,EAEhB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAChB,MAAM,UAAU,CAAC;AAIlB,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,CAAE,SAAQ,MAAM,CAC7E,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EACnC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAClC;IACC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;gBAEZ,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;IAMxC,IAAa,IAAI,IAAI,UAAU,CAE9B;IAED,yGAAyG;cACtF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAqBpF,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAS3F,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAQ3F,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAQ/F,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;cAQlD,SAAS,IAAI,gBAAgB;CASjD"}
@@ -1,2 +1,2 @@
1
- import{fail as e,prependIssuePath as t,resolveMessage as n}from"../errors.js";import{ErrorCode as r}from"../types.js";import{Schema as i}from"../core.js";var a=class extends i{keySchema;valueSchema;get _kind(){return`map`}constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}_parse(e,n){if(!(e instanceof Map))return{data:e,issues:[{code:r.invalid_type,message:n.messages.map.type(),path:[]}],typeOk:!1};let i=/* @__PURE__ */ new Map,a=[],o=0;for(let[r,s]of e){let e=this.keySchema._parseFullSync(r,n),c=this.valueSchema._parseFullSync(s,n);e.issues.length>0&&a.push(...t(e.issues,o)),c.issues.length>0&&a.push(...t(c.issues,o)),e.issues.length===0&&c.issues.length===0&&i.set(e.data,c.data),o+=1}return{data:i,issues:a,typeOk:!0}}async _parseAsync(e,n){if(!(e instanceof Map))return{data:e,issues:[{code:r.invalid_type,message:n.messages.map.type(),path:[]}],typeOk:!1};let i=[...e],a=await Promise.all(i.map(([e,t])=>Promise.all([this.keySchema._parseFullAsync(e,n),this.valueSchema._parseFullAsync(t,n)]))),o=[],s=/* @__PURE__ */ new Map;for(let e=0;e<a.length;e++){let[n,r]=a[e];n.issues.length>0&&o.push(...t(n.issues,e)),r.issues.length>0&&o.push(...t(r.issues,e)),n.issues.length===0&&r.issues.length===0&&s.set(n.data,r.data)}return{data:s,issues:o,typeOk:!0}}min(t,i){return this._addConstraint((a,o)=>{let s=a;return s.size>=t?null:e(r.too_small,n(i??o.messages.map.min,{min:t,value:s}),{min:t})})}max(t,i){return this._addConstraint((a,o)=>{let s=a;return s.size<=t?null:e(r.too_big,n(i??o.messages.map.max,{max:t,value:s}),{max:t})})}size(t,i){return this._addConstraint((a,o)=>{let s=a;return s.size===t?null:e(r.invalid_length,n(i??o.messages.map.size,{exact:t,value:s}),{exact:t})})}nonEmpty(t){return this._addConstraint((i,a)=>i.size>0?null:e(r.too_small,n(t??a.messages.map.nonEmpty,{min:1}),{min:1}))}_toDescriptorImpl(){return{...this._describeBase(),key:this.keySchema.definition(),kind:`map`,value:this.valueSchema.definition()}}};export{a as MapSchema};
1
+ import{all as e,atLeast as t,atMost as n,chain as r,invalid as i,issue as a,prefixIssues as o,resolveMessage as s}from"../_parse.js";import{Schema as c}from"../schema.js";import{ErrorCode as l}from"../types.js";var u=class extends c{keySchema;valueSchema;constructor(e,t){super(),this.keySchema=e,this.valueSchema=t}get kind(){return`map`}_parse(t,n){if(!(t instanceof Map))return i(t,a(l.invalid_type,n.messages.map.type()));let s=[...t].map(([t,r])=>e([this.keySchema._run(t,n),this.valueSchema._run(r,n)]));return r(e(s),e=>{let t=[],n=/* @__PURE__ */ new Map;return e.forEach(([e,r],i)=>{t.push(...o(e.issues,i),...o(r.issues,i)),e.issues.length===0&&r.issues.length===0&&n.set(e.value,r.value)}),{issues:t,typeOk:!0,value:n}})}min(e,n){return this._refine(t=>t.size>=e,(t,r)=>a(l.too_small,s(n??r.map.min,{min:e,value:t}),{min:e}),n=>({minSize:t(n.minSize,e)}))}max(e,t){return this._refine(t=>t.size<=e,(n,r)=>a(l.too_big,s(t??r.map.max,{max:e,value:n}),{max:e}),t=>({maxSize:n(t.maxSize,e)}))}size(e,r){return this._refine(t=>t.size===e,(t,n)=>a(l.invalid_length,s(r??n.map.size,{exact:e,value:t}),{exact:e}),r=>({maxSize:n(r.maxSize,e),minSize:t(r.minSize,e)}))}nonEmpty(e){return this._refine(e=>e.size>0,(t,n)=>a(l.too_small,s(e??n.map.nonEmpty,{value:t}),{min:1}),e=>({minSize:t(e.minSize,1)}))}_describe(){return{...this._describeBase(),...this.state.meta,key:this.keySchema.definition(),kind:`map`,value:this.valueSchema.definition()}}};export{u as MapSchema};
2
2
  //# sourceMappingURL=map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"map.js","names":["typed","MapSchema","Schema","keySchema","valueSchema","value","ErrorCode","ctx","out","issues","i","key","val","keyResult","valResult","prependIssuePath","entries","settled","typed","size","fail","resolveMessage","message","exact"],"sources":["../../src/schemas/map.ts"],"sourcesContent":["import type {\n AnySchema,\n InferInput,\n InferOutput,\n Issue,\n MessageFn,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n} from '../core';\n\nimport { ErrorCode, fail, prependIssuePath, resolveMessage, Schema } from '../core';\n\nexport class MapSchema<K extends AnySchema, V extends AnySchema> extends Schema<\n Map<InferOutput<K>, InferOutput<V>>,\n Map<InferInput<K>, InferInput<V>>\n> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n protected override get _kind(): string {\n return 'map';\n }\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n const issues: Issue[] = [];\n let i = 0;\n\n for (const [key, val] of value) {\n const keyResult = this.keySchema._parseFullSync(key, ctx);\n const valResult = this.valueSchema._parseFullSync(val, ctx);\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n\n i += 1;\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n if (!(value instanceof Map)) {\n return {\n data: value,\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.map.type(), path: [] }],\n typeOk: false,\n };\n }\n\n const entries = [...value];\n const settled = await Promise.all(\n entries.map(([key, val]) =>\n Promise.all([this.keySchema._parseFullAsync(key, ctx), this.valueSchema._parseFullAsync(val, ctx)]),\n ),\n );\n\n const issues: Issue[] = [];\n const out = new Map<InferOutput<K>, InferOutput<V>>();\n\n for (let i = 0; i < settled.length; i++) {\n const [keyResult, valResult] = settled[i];\n\n if (keyResult.issues.length > 0) issues.push(...prependIssuePath(keyResult.issues, i));\n\n if (valResult.issues.length > 0) issues.push(...prependIssuePath(valResult.issues, i));\n\n if (keyResult.issues.length === 0 && valResult.issues.length === 0)\n out.set(keyResult.data as InferOutput<K>, valResult.data as InferOutput<V>);\n }\n\n return { data: out, issues, typeOk: true };\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size >= size) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.min, { min: size, value: typed }), {\n min: size,\n });\n });\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size <= size) return null;\n\n return fail(ErrorCode.too_big, resolveMessage(message ?? ctx!.messages.map.max, { max: size, value: typed }), {\n max: size,\n });\n });\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Map<unknown, unknown> }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size === exact) return null;\n\n return fail(\n ErrorCode.invalid_length,\n resolveMessage(message ?? ctx!.messages.map.size, { exact, value: typed }),\n { exact },\n );\n });\n }\n\n nonEmpty(message?: MessageFn<{ min: number }>): this {\n return this._addConstraint((value, ctx) => {\n const typed = value as Map<unknown, unknown>;\n\n if (typed.size > 0) return null;\n\n return fail(ErrorCode.too_small, resolveMessage(message ?? ctx!.messages.map.nonEmpty, { min: 1 }), { min: 1 });\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n key: this.keySchema.definition(),\n kind: 'map',\n value: this.valueSchema.definition(),\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"map.js","names":["MapSchema","Schema","keySchema","valueSchema","value","invalid","issue","ErrorCode","ctx","runs","key","entry","all","chain","issues","output","results","prefixIssues","index","size","resolveMessage","message","m","atLeast","current","atMost","exact"],"sources":["../../src/schemas/map.ts"],"sourcesContent":["import {\n all,\n atLeast,\n atMost,\n chain,\n invalid,\n issue,\n type MaybePromise,\n type ParseValue,\n prefixIssues,\n type RunContext,\n resolveMessage,\n} from '../_parse';\nimport { Schema } from '../schema';\nimport {\n type AnySchema,\n ErrorCode,\n type InferInput,\n type InferOutput,\n type Issue,\n type MessageFn,\n type SchemaDescriptor,\n type SchemaKind,\n} from '../types';\n\ntype SizeMeta = { maxSize: number; minSize: number };\n\nexport class MapSchema<K extends AnySchema, V extends AnySchema> extends Schema<\n Map<InferOutput<K>, InferOutput<V>>,\n Map<InferInput<K>, InferInput<V>>\n> {\n readonly keySchema: K;\n readonly valueSchema: V;\n\n constructor(keySchema: K, valueSchema: V) {\n super();\n this.keySchema = keySchema;\n this.valueSchema = valueSchema;\n }\n\n override get kind(): SchemaKind {\n return 'map';\n }\n\n /** Key and value failures are reported by entry index; failed entries are left out of the parsed map. */\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n if (!(value instanceof Map)) return invalid(value, issue(ErrorCode.invalid_type, ctx.messages.map.type()));\n\n const runs = [...value].map(([key, entry]) =>\n all([this.keySchema._run(key, ctx), this.valueSchema._run(entry, ctx)]),\n );\n\n return chain(all(runs), (results) => {\n const issues: Issue[] = [];\n const output = new Map<unknown, unknown>();\n\n results.forEach(([key, entry], index) => {\n issues.push(...prefixIssues(key!.issues, index), ...prefixIssues(entry!.issues, index));\n\n if (key!.issues.length === 0 && entry!.issues.length === 0) output.set(key!.value, entry!.value);\n });\n\n return { issues, typeOk: true, value: output };\n });\n }\n\n min(size: number, message?: MessageFn<{ min: number; value: Map<unknown, unknown> }>): this {\n return this._refine<SizeMeta>(\n (value) => value.size >= size,\n (value, m) =>\n issue(ErrorCode.too_small, resolveMessage(message ?? m.map.min, { min: size, value }), { min: size }),\n (current) => ({ minSize: atLeast(current.minSize, size) }),\n );\n }\n\n max(size: number, message?: MessageFn<{ max: number; value: Map<unknown, unknown> }>): this {\n return this._refine<SizeMeta>(\n (value) => value.size <= size,\n (value, m) => issue(ErrorCode.too_big, resolveMessage(message ?? m.map.max, { max: size, value }), { max: size }),\n (current) => ({ maxSize: atMost(current.maxSize, size) }),\n );\n }\n\n size(exact: number, message?: MessageFn<{ exact: number; value: Map<unknown, unknown> }>): this {\n return this._refine<SizeMeta>(\n (value) => value.size === exact,\n (value, m) => issue(ErrorCode.invalid_length, resolveMessage(message ?? m.map.size, { exact, value }), { exact }),\n (current) => ({ maxSize: atMost(current.maxSize, exact), minSize: atLeast(current.minSize, exact) }),\n );\n }\n\n nonEmpty(message?: MessageFn<{ value: Map<unknown, unknown> }>): this {\n return this._refine<SizeMeta>(\n (value) => value.size > 0,\n (value, m) => issue(ErrorCode.too_small, resolveMessage(message ?? m.map.nonEmpty, { value }), { min: 1 }),\n (current) => ({ minSize: atLeast(current.minSize, 1) }),\n );\n }\n\n protected override _describe(): SchemaDescriptor {\n return {\n ...this._describeBase(),\n ...(this.state.meta as Partial<SizeMeta>),\n key: this.keySchema.definition(),\n kind: 'map',\n value: this.valueSchema.definition(),\n };\n }\n}\n"],"mappings":"A,mNA2BA,IAAaA,EAAb,cAAyEC,CAGvE,CACA,UACA,YAEA,YAAY,EAAc,EAAgB,CACxC,MAAM,EACN,KAAK,UAAYC,EACjB,KAAK,YAAcC,CACrB,CAEA,IAAa,MAAmB,CAC9B,MAAO,KACT,CAGA,OAA0B,EAAgB,EAA2C,CACnF,GAAI,EAAEC,aAAiB,KAAM,OAAOC,EAAQD,EAAOE,EAAMC,EAAU,aAAcC,EAAI,SAAS,IAAI,KAAK,CAAC,CAAC,EAEzG,IAAMC,EAAO,CAAC,GAAGL,CAAK,CAAC,CAAC,KAAK,CAACM,EAAKC,KACjCC,EAAI,CAAC,KAAK,UAAU,KAAKF,EAAKF,CAAG,EAAG,KAAK,YAAY,KAAKG,EAAOH,CAAG,CAAC,CAAC,CACxE,EAEA,OAAOK,EAAMD,EAAIH,CAAI,EAAI,GAAY,CACnC,IAAMK,EAAkB,CAAC,EACnBC,kBAAS,IAAI,IAQnB,OANAC,EAAQ,SAAS,CAACN,EAAKC,GAAQ,IAAU,CACvCG,EAAO,KAAK,GAAGG,EAAaP,EAAK,OAAQQ,CAAK,EAAG,GAAGD,EAAaN,EAAO,OAAQO,CAAK,CAAC,EAElFR,EAAK,OAAO,SAAW,GAAKC,EAAO,OAAO,SAAW,GAAGI,EAAO,IAAIL,EAAK,MAAOC,EAAO,KAAK,CACjG,CAAC,EAEM,CAAE,SAAQ,OAAQ,GAAM,MAAOI,CAAO,CAC/C,CAAC,CACH,CAEA,IAAI,EAAc,EAA0E,CAC1F,OAAO,KAAK,QACT,GAAUX,EAAM,MAAQe,GACxB,EAAO,IACNb,EAAMC,EAAU,UAAWa,EAAeC,GAAWC,EAAE,IAAI,IAAK,CAAE,IAAKH,EAAM,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAK,CAAC,EACrG,IAAa,CAAE,QAASI,EAAQC,EAAQ,QAASL,CAAI,CAAE,EAC1D,CACF,CAEA,IAAI,EAAc,EAA0E,CAC1F,OAAO,KAAK,QACT,GAAUf,EAAM,MAAQe,GACxB,EAAO,IAAMb,EAAMC,EAAU,QAASa,EAAeC,GAAWC,EAAE,IAAI,IAAK,CAAE,IAAKH,EAAM,OAAM,CAAC,EAAG,CAAE,IAAKA,CAAK,CAAC,EAC/G,IAAa,CAAE,QAASM,EAAOD,EAAQ,QAASL,CAAI,CAAE,EACzD,CACF,CAEA,KAAK,EAAe,EAA4E,CAC9F,OAAO,KAAK,QACT,GAAUf,EAAM,OAASsB,GACzB,EAAO,IAAMpB,EAAMC,EAAU,eAAgBa,EAAeC,GAAWC,EAAE,IAAI,KAAM,CAAE,QAAO,OAAM,CAAC,EAAG,CAAE,OAAM,CAAC,EAC/G,IAAa,CAAE,QAASG,EAAOD,EAAQ,QAASE,CAAK,EAAG,QAASH,EAAQC,EAAQ,QAASE,CAAK,CAAE,EACpG,CACF,CAEA,SAAS,EAA6D,CACpE,OAAO,KAAK,QACT,GAAUtB,EAAM,KAAO,GACvB,EAAO,IAAME,EAAMC,EAAU,UAAWa,EAAeC,GAAWC,EAAE,IAAI,SAAU,CAAE,OAAM,CAAC,EAAG,CAAE,IAAK,CAAE,CAAC,EACxG,IAAa,CAAE,QAASC,EAAQC,EAAQ,QAAS,CAAC,CAAE,EACvD,CACF,CAEA,WAAiD,CAC/C,MAAO,CACL,GAAG,KAAK,cAAc,EACtB,GAAI,KAAK,MAAM,KACf,IAAK,KAAK,UAAU,WAAW,EAC/B,KAAM,MACN,MAAO,KAAK,YAAY,WAAW,CACrC,CACF,CACF,E"}
@@ -1,2 +1,2 @@
1
- const e=require("../errors.cjs"),t=require("../types.cjs"),n=require("../core.cjs");var r=class r extends n.Schema{get _kind(){return`number`}constructor(){super((n,r)=>typeof n==`number`&&!Number.isNaN(n)?null:e.fail(t.ErrorCode.invalid_type,r.messages.number.type()))}min(n,r){return this._addConstraint((i,a)=>i>=n?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(r??a.messages.number.min,{min:n,value:i}),{min:n}),e=>{let t=e;return{...t,minimum:t.minimum===void 0?n:Math.max(t.minimum,n)}})}max(n,r){return this._addConstraint((i,a)=>i<=n?null:e.fail(t.ErrorCode.too_big,e.resolveMessage(r??a.messages.number.max,{max:n,value:i}),{max:n}),e=>{let t=e;return{...t,maximum:t.maximum===void 0?n:Math.min(t.maximum,n)}})}int(n){return this._addConstraint((r,i)=>Number.isInteger(r)?null:e.fail(t.ErrorCode.invalid_integer,e.resolveMessage(n??i.messages.number.int,{value:r})),e=>({...e,typeHint:`integer`}))}positive(n){return this._addConstraint((r,i)=>r>0?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(n??i.messages.number.positive,{value:r}),{exclusive:!0,min:0}),e=>{let t=e;return{...t,exclusiveMinimum:t.exclusiveMinimum===void 0?0:Math.max(t.exclusiveMinimum,0)}})}negative(n){return this._addConstraint((r,i)=>r<0?null:e.fail(t.ErrorCode.too_big,e.resolveMessage(n??i.messages.number.negative,{value:r}),{exclusive:!0,max:0}),e=>{let t=e;return{...t,exclusiveMaximum:t.exclusiveMaximum===void 0?0:Math.min(t.exclusiveMaximum,0)}})}nonNegative(n){return this._addConstraint((r,i)=>r>=0?null:e.fail(t.ErrorCode.too_small,e.resolveMessage(n??i.messages.number.nonNegative,{value:r}),{min:0}),e=>{let t=e;return{...t,minimum:t.minimum===void 0?0:Math.max(t.minimum,0)}})}nonPositive(n){return this._addConstraint((r,i)=>r<=0?null:e.fail(t.ErrorCode.too_big,e.resolveMessage(n??i.messages.number.nonPositive,{value:r}),{max:0}),e=>{let t=e;return{...t,maximum:t.maximum===void 0?0:Math.min(t.maximum,0)}})}multipleOf(n,r){return this._addConstraint((i,a)=>Math.abs(Math.round(i/n)-i/n)<1e-9?null:e.fail(t.ErrorCode.invalid_multiple_of,e.resolveMessage(r??a.messages.number.multipleOf,{step:n,value:i}),{step:n}),e=>({...e,multipleOf:n}))}safe(n){return this._addConstraint((r,i)=>Number.isSafeInteger(r)?null:e.fail(t.ErrorCode.invalid_safe,e.resolveMessage(n??i.messages.number.safe,{value:r})))}finite(n){return this._addConstraint((r,i)=>Number.isFinite(r)?null:e.fail(t.ErrorCode.invalid_finite,e.resolveMessage(n??i.messages.number.finite,{value:r})))}_toDescriptorImpl(){let e=this._annotations;return{...this._describeBase(),...e.exclusiveMaximum===void 0?{}:{exclusiveMaximum:e.exclusiveMaximum},...e.exclusiveMinimum===void 0?{}:{exclusiveMinimum:e.exclusiveMinimum},...e.maximum===void 0?{}:{maximum:e.maximum},...e.minimum===void 0?{}:{minimum:e.minimum},...e.multipleOf===void 0?{}:{multipleOf:e.multipleOf},...e.typeHint===void 0?{}:{typeHint:e.typeHint},kind:`number`}}static coerce(){return new r().preprocess(e=>{if(typeof e==`number`)return e;if(typeof e==`string`||typeof e==`boolean`){let t=Number(e);return Number.isNaN(t)?e:t}return e})}};exports.NumberSchema=r;
1
+ const e=require("../_parse.cjs"),t=require("../schema.cjs"),n=require("../types.cjs");var r=class extends t.Schema{get kind(){return`number`}_parse(t,r){return typeof t==`number`&&!Number.isNaN(t)?e.ok(t):e.invalid(t,e.issue(n.ErrorCode.invalid_type,r.messages.number.type()))}min(t,r){return this._refine(e=>e>=t,(i,a)=>e.issue(n.ErrorCode.too_small,e.resolveMessage(r??a.number.min,{min:t,value:i}),{min:t}),n=>({minimum:e.atLeast(n.minimum,t)}))}max(t,r){return this._refine(e=>e<=t,(i,a)=>e.issue(n.ErrorCode.too_big,e.resolveMessage(r??a.number.max,{max:t,value:i}),{max:t}),n=>({maximum:e.atMost(n.maximum,t)}))}positive(t){return this._refine(e=>e>0,(r,i)=>e.issue(n.ErrorCode.too_small,e.resolveMessage(t??i.number.positive,{value:r}),{exclusive:!0,min:0}),t=>({exclusiveMinimum:e.atLeast(t.exclusiveMinimum,0)}))}negative(t){return this._refine(e=>e<0,(r,i)=>e.issue(n.ErrorCode.too_big,e.resolveMessage(t??i.number.negative,{value:r}),{exclusive:!0,max:0}),t=>({exclusiveMaximum:e.atMost(t.exclusiveMaximum,0)}))}nonNegative(t){return this._refine(e=>e>=0,(r,i)=>e.issue(n.ErrorCode.too_small,e.resolveMessage(t??i.number.nonNegative,{value:r}),{min:0}),t=>({minimum:e.atLeast(t.minimum,0)}))}nonPositive(t){return this._refine(e=>e<=0,(r,i)=>e.issue(n.ErrorCode.too_big,e.resolveMessage(t??i.number.nonPositive,{value:r}),{max:0}),t=>({maximum:e.atMost(t.maximum,0)}))}int(t){return this._refine(Number.isInteger,(r,i)=>e.issue(n.ErrorCode.invalid_integer,e.resolveMessage(t??i.number.int,{value:r})),()=>({integer:!0}))}safe(t){return this._refine(Number.isSafeInteger,(r,i)=>e.issue(n.ErrorCode.invalid_safe,e.resolveMessage(t??i.number.safe,{value:r})),t=>({integer:!0,maximum:e.atMost(t.maximum,2**53-1),minimum:e.atLeast(t.minimum,-(2**53-1))}))}finite(t){return this._refine(Number.isFinite,(r,i)=>e.issue(n.ErrorCode.invalid_finite,e.resolveMessage(t??i.number.finite,{value:r})),()=>({finite:!0}))}multipleOf(t,r){return this._refine(e=>Math.abs(Math.round(e/t)-e/t)<1e-9,(i,a)=>e.issue(n.ErrorCode.invalid_multiple_of,e.resolveMessage(r??a.number.multipleOf,{step:t,value:i}),{step:t}),()=>({multipleOf:t}))}_describe(){return{...this._describeBase(),...this.state.meta,kind:`number`}}};exports.NumberSchema=r;
2
2
  //# sourceMappingURL=number.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"number.cjs","names":["Schema","fail","ErrorCode","resolveMessage","require_errors","require_types","require_core","NumberSchema","value","ctx","minimum","message","ann","current","maximum","step","v","n"],"sources":["../../src/schemas/number.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface NumberAnnotations extends Record<string, unknown> {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n}\n\nexport class NumberSchema<Input = number> extends Schema<number, Input> {\n protected override get _kind(): string {\n return 'number';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'number' && !Number.isNaN(value)\n ? null\n : fail(ErrorCode.invalid_type, ctx!.messages.number.type()),\n );\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.min, { min: minimum, value: value as number }),\n {\n min: minimum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n minimum: ann.minimum === undefined ? minimum : Math.max(ann.minimum, minimum),\n };\n },\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.max, { max: maximum, value: value as number }),\n {\n max: maximum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n maximum: ann.maximum === undefined ? maximum : Math.min(ann.maximum, maximum),\n };\n },\n );\n }\n\n int(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Number.isInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_integer,\n resolveMessage(message ?? ctx!.messages.number.int, { value: value as number }),\n );\n },\n (ann) => ({ ...ann, typeHint: 'integer' as const }),\n );\n }\n\n positive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.positive, { value: value as number }),\n {\n exclusive: true,\n min: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMinimum: ann.exclusiveMinimum === undefined ? 0 : Math.max(ann.exclusiveMinimum, 0),\n };\n },\n );\n }\n\n negative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) < 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.negative, { value: value as number }),\n {\n exclusive: true,\n max: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMaximum: ann.exclusiveMaximum === undefined ? 0 : Math.min(ann.exclusiveMaximum, 0),\n };\n },\n );\n }\n\n nonNegative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.nonNegative, { value: value as number }),\n { min: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, minimum: ann.minimum === undefined ? 0 : Math.max(ann.minimum, 0) };\n },\n );\n }\n\n nonPositive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.nonPositive, { value: value as number }),\n { max: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, maximum: ann.maximum === undefined ? 0 : Math.min(ann.maximum, 0) };\n },\n );\n }\n\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Math.abs(Math.round((value as number) / step) - (value as number) / step) < 1e-9) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.number.multipleOf, { step, value: value as number }),\n { step },\n );\n },\n (ann) => ({ ...ann, multipleOf: step }),\n );\n }\n\n safe(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isSafeInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_safe,\n resolveMessage(message ?? ctx!.messages.number.safe, { value: value as number }),\n );\n });\n }\n\n finite(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isFinite(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_finite,\n resolveMessage(message ?? ctx!.messages.number.finite, { value: value as number }),\n );\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as NumberAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.exclusiveMaximum !== undefined ? { exclusiveMaximum: ann.exclusiveMaximum } : {}),\n ...(ann.exclusiveMinimum !== undefined ? { exclusiveMinimum: ann.exclusiveMinimum } : {}),\n ...(ann.maximum !== undefined ? { maximum: ann.maximum } : {}),\n ...(ann.minimum !== undefined ? { minimum: ann.minimum } : {}),\n ...(ann.multipleOf !== undefined ? { multipleOf: ann.multipleOf } : {}),\n ...(ann.typeHint !== undefined ? { typeHint: ann.typeHint } : {}),\n kind: 'number',\n };\n }\n\n static coerce(): NumberSchema<unknown> {\n return new NumberSchema().preprocess((v: unknown) => {\n if (typeof v === 'number') return v;\n\n if (typeof v === 'string' || typeof v === 'boolean') {\n const n = Number(v);\n\n return Number.isNaN(n) ? v : n;\n }\n\n return v;\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"number.cjs","names":["Schema","ok","invalid","issue","ErrorCode","resolveMessage","atLeast","atMost","require__parse","require_schema","require_types","NumberSchema","value","ctx","minimum","message","m","current","maximum","step"],"sources":["../../src/schemas/number.ts"],"sourcesContent":["import {\n atLeast,\n atMost,\n invalid,\n issue,\n type MaybePromise,\n ok,\n type ParseValue,\n type RunContext,\n resolveMessage,\n} from '../_parse';\nimport { Schema } from '../schema';\nimport { ErrorCode, type MessageFn, type SchemaDescriptor, type SchemaKind } from '../types';\n\ntype NumberMeta = {\n exclusiveMaximum: number;\n exclusiveMinimum: number;\n finite: true;\n integer: true;\n maximum: number;\n minimum: number;\n multipleOf: number;\n};\n\ntype ValueMessage = MessageFn<{ value: number }>;\n\nexport class NumberSchema<Input = number> extends Schema<number, Input> {\n override get kind(): SchemaKind {\n return 'number';\n }\n\n /** Accepts any `number` except `NaN`; `Infinity` passes unless `finite()` is added. */\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n return typeof value === 'number' && !Number.isNaN(value)\n ? ok(value)\n : invalid(value, issue(ErrorCode.invalid_type, ctx.messages.number.type()));\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._refine<NumberMeta>(\n (value) => value >= minimum,\n (value, m) =>\n issue(ErrorCode.too_small, resolveMessage(message ?? m.number.min, { min: minimum, value }), { min: minimum }),\n (current) => ({ minimum: atLeast(current.minimum, minimum) }),\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._refine<NumberMeta>(\n (value) => value <= maximum,\n (value, m) =>\n issue(ErrorCode.too_big, resolveMessage(message ?? m.number.max, { max: maximum, value }), { max: maximum }),\n (current) => ({ maximum: atMost(current.maximum, maximum) }),\n );\n }\n\n positive(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n (value) => value > 0,\n (value, m) =>\n issue(ErrorCode.too_small, resolveMessage(message ?? m.number.positive, { value }), {\n exclusive: true,\n min: 0,\n }),\n (current) => ({ exclusiveMinimum: atLeast(current.exclusiveMinimum, 0) }),\n );\n }\n\n negative(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n (value) => value < 0,\n (value, m) =>\n issue(ErrorCode.too_big, resolveMessage(message ?? m.number.negative, { value }), { exclusive: true, max: 0 }),\n (current) => ({ exclusiveMaximum: atMost(current.exclusiveMaximum, 0) }),\n );\n }\n\n nonNegative(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n (value) => value >= 0,\n (value, m) => issue(ErrorCode.too_small, resolveMessage(message ?? m.number.nonNegative, { value }), { min: 0 }),\n (current) => ({ minimum: atLeast(current.minimum, 0) }),\n );\n }\n\n nonPositive(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n (value) => value <= 0,\n (value, m) => issue(ErrorCode.too_big, resolveMessage(message ?? m.number.nonPositive, { value }), { max: 0 }),\n (current) => ({ maximum: atMost(current.maximum, 0) }),\n );\n }\n\n int(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n Number.isInteger,\n (value, m) => issue(ErrorCode.invalid_integer, resolveMessage(message ?? m.number.int, { value })),\n () => ({ integer: true }),\n );\n }\n\n /** Integer within ±`Number.MAX_SAFE_INTEGER`. */\n safe(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n Number.isSafeInteger,\n (value, m) => issue(ErrorCode.invalid_safe, resolveMessage(message ?? m.number.safe, { value })),\n (current) => ({\n integer: true,\n maximum: atMost(current.maximum, Number.MAX_SAFE_INTEGER),\n minimum: atLeast(current.minimum, Number.MIN_SAFE_INTEGER),\n }),\n );\n }\n\n finite(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n Number.isFinite,\n (value, m) => issue(ErrorCode.invalid_finite, resolveMessage(message ?? m.number.finite, { value })),\n () => ({ finite: true }),\n );\n }\n\n /** Multiple of `step`, tolerant of binary floating-point error (e.g. `0.3` for step `0.1`). */\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._refine<NumberMeta>(\n (value) => Math.abs(Math.round(value / step) - value / step) < 1e-9,\n (value, m) =>\n issue(ErrorCode.invalid_multiple_of, resolveMessage(message ?? m.number.multipleOf, { step, value }), { step }),\n () => ({ multipleOf: step }),\n );\n }\n\n protected override _describe(): SchemaDescriptor {\n return { ...this._describeBase(), ...(this.state.meta as Partial<NumberMeta>), kind: 'number' };\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,13 @@
1
- import type { MessageFn, SchemaDescriptor } from '../core';
2
- import { Schema } from '../core';
1
+ import { type MaybePromise, type ParseValue, type RunContext } from '../_parse';
2
+ import { Schema } from '../schema';
3
+ import { type MessageFn, type SchemaDescriptor, type SchemaKind } from '../types';
4
+ type ValueMessage = MessageFn<{
5
+ value: number;
6
+ }>;
3
7
  export declare class NumberSchema<Input = number> extends Schema<number, Input> {
4
- protected get _kind(): string;
5
- constructor();
8
+ get kind(): SchemaKind;
9
+ /** Accepts any `number` except `NaN`; `Infinity` passes unless `finite()` is added. */
10
+ protected _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue>;
6
11
  min(minimum: number, message?: MessageFn<{
7
12
  min: number;
8
13
  value: number;
@@ -11,32 +16,20 @@ export declare class NumberSchema<Input = number> extends Schema<number, Input>
11
16
  max: number;
12
17
  value: number;
13
18
  }>): this;
14
- int(message?: MessageFn<{
15
- value: number;
16
- }>): this;
17
- positive(message?: MessageFn<{
18
- value: number;
19
- }>): this;
20
- negative(message?: MessageFn<{
21
- value: number;
22
- }>): this;
23
- nonNegative(message?: MessageFn<{
24
- value: number;
25
- }>): this;
26
- nonPositive(message?: MessageFn<{
27
- value: number;
28
- }>): this;
19
+ positive(message?: ValueMessage): this;
20
+ negative(message?: ValueMessage): this;
21
+ nonNegative(message?: ValueMessage): this;
22
+ nonPositive(message?: ValueMessage): this;
23
+ int(message?: ValueMessage): this;
24
+ /** Integer within ±`Number.MAX_SAFE_INTEGER`. */
25
+ safe(message?: ValueMessage): this;
26
+ finite(message?: ValueMessage): this;
27
+ /** Multiple of `step`, tolerant of binary floating-point error (e.g. `0.3` for step `0.1`). */
29
28
  multipleOf(step: number, message?: MessageFn<{
30
29
  step: number;
31
30
  value: number;
32
31
  }>): this;
33
- safe(message?: MessageFn<{
34
- value: number;
35
- }>): this;
36
- finite(message?: MessageFn<{
37
- value: number;
38
- }>): this;
39
- protected _toDescriptorImpl(): SchemaDescriptor;
40
- static coerce(): NumberSchema<unknown>;
32
+ protected _describe(): SchemaDescriptor;
41
33
  }
34
+ export {};
42
35
  //# sourceMappingURL=number.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/schemas/number.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAmC,MAAM,EAAE,MAAM,SAAS,CAAC;AAalE,qBAAa,YAAY,CAAC,KAAK,GAAG,MAAM,CAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IACrE,cAAuB,KAAK,IAAI,MAAM,CAErC;;IAUD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAwB/E,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAwB/E,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAcjD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAyBtD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAyBtD,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAmBzD,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAmBzD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAepF,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAWlD,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;cAWjC,iBAAiB,IAAI,gBAAgB;IAexD,MAAM,CAAC,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC;CAavC"}
1
+ {"version":3,"file":"number.d.ts","sourceRoot":"","sources":["../../src/schemas/number.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,YAAY,EAEjB,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAY7F,KAAK,YAAY,GAAG,SAAS,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEjD,qBAAa,YAAY,CAAC,KAAK,GAAG,MAAM,CAAE,SAAQ,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IACrE,IAAa,IAAI,IAAI,UAAU,CAE9B;IAED,uFAAuF;cACpE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;IAMpF,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAS/E,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAS/E,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAYtC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAStC,WAAW,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAQzC,WAAW,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAQzC,GAAG,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAQjC,iDAAiD;IACjD,IAAI,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAYlC,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAQpC,+FAA+F;IAC/F,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;cASjE,SAAS,IAAI,gBAAgB;CAGjD"}
@@ -1,2 +1,2 @@
1
- import{fail as e,resolveMessage as t}from"../errors.js";import{ErrorCode as n}from"../types.js";import{Schema as r}from"../core.js";var i=class i extends r{get _kind(){return`number`}constructor(){super((t,r)=>typeof t==`number`&&!Number.isNaN(t)?null:e(n.invalid_type,r.messages.number.type()))}min(r,i){return this._addConstraint((a,o)=>a>=r?null:e(n.too_small,t(i??o.messages.number.min,{min:r,value:a}),{min:r}),e=>{let t=e;return{...t,minimum:t.minimum===void 0?r:Math.max(t.minimum,r)}})}max(r,i){return this._addConstraint((a,o)=>a<=r?null:e(n.too_big,t(i??o.messages.number.max,{max:r,value:a}),{max:r}),e=>{let t=e;return{...t,maximum:t.maximum===void 0?r:Math.min(t.maximum,r)}})}int(r){return this._addConstraint((i,a)=>Number.isInteger(i)?null:e(n.invalid_integer,t(r??a.messages.number.int,{value:i})),e=>({...e,typeHint:`integer`}))}positive(r){return this._addConstraint((i,a)=>i>0?null:e(n.too_small,t(r??a.messages.number.positive,{value:i}),{exclusive:!0,min:0}),e=>{let t=e;return{...t,exclusiveMinimum:t.exclusiveMinimum===void 0?0:Math.max(t.exclusiveMinimum,0)}})}negative(r){return this._addConstraint((i,a)=>i<0?null:e(n.too_big,t(r??a.messages.number.negative,{value:i}),{exclusive:!0,max:0}),e=>{let t=e;return{...t,exclusiveMaximum:t.exclusiveMaximum===void 0?0:Math.min(t.exclusiveMaximum,0)}})}nonNegative(r){return this._addConstraint((i,a)=>i>=0?null:e(n.too_small,t(r??a.messages.number.nonNegative,{value:i}),{min:0}),e=>{let t=e;return{...t,minimum:t.minimum===void 0?0:Math.max(t.minimum,0)}})}nonPositive(r){return this._addConstraint((i,a)=>i<=0?null:e(n.too_big,t(r??a.messages.number.nonPositive,{value:i}),{max:0}),e=>{let t=e;return{...t,maximum:t.maximum===void 0?0:Math.min(t.maximum,0)}})}multipleOf(r,i){return this._addConstraint((a,o)=>Math.abs(Math.round(a/r)-a/r)<1e-9?null:e(n.invalid_multiple_of,t(i??o.messages.number.multipleOf,{step:r,value:a}),{step:r}),e=>({...e,multipleOf:r}))}safe(r){return this._addConstraint((i,a)=>Number.isSafeInteger(i)?null:e(n.invalid_safe,t(r??a.messages.number.safe,{value:i})))}finite(r){return this._addConstraint((i,a)=>Number.isFinite(i)?null:e(n.invalid_finite,t(r??a.messages.number.finite,{value:i})))}_toDescriptorImpl(){let e=this._annotations;return{...this._describeBase(),...e.exclusiveMaximum===void 0?{}:{exclusiveMaximum:e.exclusiveMaximum},...e.exclusiveMinimum===void 0?{}:{exclusiveMinimum:e.exclusiveMinimum},...e.maximum===void 0?{}:{maximum:e.maximum},...e.minimum===void 0?{}:{minimum:e.minimum},...e.multipleOf===void 0?{}:{multipleOf:e.multipleOf},...e.typeHint===void 0?{}:{typeHint:e.typeHint},kind:`number`}}static coerce(){return new i().preprocess(e=>{if(typeof e==`number`)return e;if(typeof e==`string`||typeof e==`boolean`){let t=Number(e);return Number.isNaN(t)?e:t}return e})}};export{i as NumberSchema};
1
+ import{atLeast as e,atMost as t,invalid as n,issue as r,ok as i,resolveMessage as a}from"../_parse.js";import{Schema as o}from"../schema.js";import{ErrorCode as s}from"../types.js";var c=class extends o{get kind(){return`number`}_parse(e,t){return typeof e==`number`&&!Number.isNaN(e)?i(e):n(e,r(s.invalid_type,t.messages.number.type()))}min(t,n){return this._refine(e=>e>=t,(e,i)=>r(s.too_small,a(n??i.number.min,{min:t,value:e}),{min:t}),n=>({minimum:e(n.minimum,t)}))}max(e,n){return this._refine(t=>t<=e,(t,i)=>r(s.too_big,a(n??i.number.max,{max:e,value:t}),{max:e}),n=>({maximum:t(n.maximum,e)}))}positive(t){return this._refine(e=>e>0,(e,n)=>r(s.too_small,a(t??n.number.positive,{value:e}),{exclusive:!0,min:0}),t=>({exclusiveMinimum:e(t.exclusiveMinimum,0)}))}negative(e){return this._refine(e=>e<0,(t,n)=>r(s.too_big,a(e??n.number.negative,{value:t}),{exclusive:!0,max:0}),e=>({exclusiveMaximum:t(e.exclusiveMaximum,0)}))}nonNegative(t){return this._refine(e=>e>=0,(e,n)=>r(s.too_small,a(t??n.number.nonNegative,{value:e}),{min:0}),t=>({minimum:e(t.minimum,0)}))}nonPositive(e){return this._refine(e=>e<=0,(t,n)=>r(s.too_big,a(e??n.number.nonPositive,{value:t}),{max:0}),e=>({maximum:t(e.maximum,0)}))}int(e){return this._refine(Number.isInteger,(t,n)=>r(s.invalid_integer,a(e??n.number.int,{value:t})),()=>({integer:!0}))}safe(n){return this._refine(Number.isSafeInteger,(e,t)=>r(s.invalid_safe,a(n??t.number.safe,{value:e})),n=>({integer:!0,maximum:t(n.maximum,2**53-1),minimum:e(n.minimum,-(2**53-1))}))}finite(e){return this._refine(Number.isFinite,(t,n)=>r(s.invalid_finite,a(e??n.number.finite,{value:t})),()=>({finite:!0}))}multipleOf(e,t){return this._refine(t=>Math.abs(Math.round(t/e)-t/e)<1e-9,(n,i)=>r(s.invalid_multiple_of,a(t??i.number.multipleOf,{step:e,value:n}),{step:e}),()=>({multipleOf:e}))}_describe(){return{...this._describeBase(),...this.state.meta,kind:`number`}}};export{c as NumberSchema};
2
2
  //# sourceMappingURL=number.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","names":["NumberSchema","Schema","value","fail","ErrorCode","ctx","minimum","resolveMessage","message","ann","current","maximum","step","v","n"],"sources":["../../src/schemas/number.ts"],"sourcesContent":["import type { MessageFn, SchemaDescriptor } from '../core';\n\nimport { ErrorCode, fail, resolveMessage, Schema } from '../core';\n\n/* -------------------- Typed annotations -------------------- */\n\ninterface NumberAnnotations extends Record<string, unknown> {\n exclusiveMaximum?: number;\n exclusiveMinimum?: number;\n maximum?: number;\n minimum?: number;\n multipleOf?: number;\n typeHint?: 'integer';\n}\n\nexport class NumberSchema<Input = number> extends Schema<number, Input> {\n protected override get _kind(): string {\n return 'number';\n }\n\n constructor() {\n super((value, ctx) =>\n typeof value === 'number' && !Number.isNaN(value)\n ? null\n : fail(ErrorCode.invalid_type, ctx!.messages.number.type()),\n );\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= minimum) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.min, { min: minimum, value: value as number }),\n {\n min: minimum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n minimum: ann.minimum === undefined ? minimum : Math.max(ann.minimum, minimum),\n };\n },\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= maximum) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.max, { max: maximum, value: value as number }),\n {\n max: maximum,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n maximum: ann.maximum === undefined ? maximum : Math.min(ann.maximum, maximum),\n };\n },\n );\n }\n\n int(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Number.isInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_integer,\n resolveMessage(message ?? ctx!.messages.number.int, { value: value as number }),\n );\n },\n (ann) => ({ ...ann, typeHint: 'integer' as const }),\n );\n }\n\n positive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) > 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.positive, { value: value as number }),\n {\n exclusive: true,\n min: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMinimum: ann.exclusiveMinimum === undefined ? 0 : Math.max(ann.exclusiveMinimum, 0),\n };\n },\n );\n }\n\n negative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) < 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.negative, { value: value as number }),\n {\n exclusive: true,\n max: 0,\n },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return {\n ...ann,\n exclusiveMaximum: ann.exclusiveMaximum === undefined ? 0 : Math.min(ann.exclusiveMaximum, 0),\n };\n },\n );\n }\n\n nonNegative(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) >= 0) return null;\n\n return fail(\n ErrorCode.too_small,\n resolveMessage(message ?? ctx!.messages.number.nonNegative, { value: value as number }),\n { min: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, minimum: ann.minimum === undefined ? 0 : Math.max(ann.minimum, 0) };\n },\n );\n }\n\n nonPositive(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if ((value as number) <= 0) return null;\n\n return fail(\n ErrorCode.too_big,\n resolveMessage(message ?? ctx!.messages.number.nonPositive, { value: value as number }),\n { max: 0 },\n );\n },\n (current) => {\n const ann = current as NumberAnnotations;\n\n return { ...ann, maximum: ann.maximum === undefined ? 0 : Math.min(ann.maximum, 0) };\n },\n );\n }\n\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._addConstraint(\n (value, ctx) => {\n if (Math.abs(Math.round((value as number) / step) - (value as number) / step) < 1e-9) return null;\n\n return fail(\n ErrorCode.invalid_multiple_of,\n resolveMessage(message ?? ctx!.messages.number.multipleOf, { step, value: value as number }),\n { step },\n );\n },\n (ann) => ({ ...ann, multipleOf: step }),\n );\n }\n\n safe(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isSafeInteger(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_safe,\n resolveMessage(message ?? ctx!.messages.number.safe, { value: value as number }),\n );\n });\n }\n\n finite(message?: MessageFn<{ value: number }>): this {\n return this._addConstraint((value, ctx) => {\n if (Number.isFinite(value as number)) return null;\n\n return fail(\n ErrorCode.invalid_finite,\n resolveMessage(message ?? ctx!.messages.number.finite, { value: value as number }),\n );\n });\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const ann = this._annotations as NumberAnnotations;\n\n return {\n ...this._describeBase(),\n ...(ann.exclusiveMaximum !== undefined ? { exclusiveMaximum: ann.exclusiveMaximum } : {}),\n ...(ann.exclusiveMinimum !== undefined ? { exclusiveMinimum: ann.exclusiveMinimum } : {}),\n ...(ann.maximum !== undefined ? { maximum: ann.maximum } : {}),\n ...(ann.minimum !== undefined ? { minimum: ann.minimum } : {}),\n ...(ann.multipleOf !== undefined ? { multipleOf: ann.multipleOf } : {}),\n ...(ann.typeHint !== undefined ? { typeHint: ann.typeHint } : {}),\n kind: 'number',\n };\n }\n\n static coerce(): NumberSchema<unknown> {\n return new NumberSchema().preprocess((v: unknown) => {\n if (typeof v === 'number') return v;\n\n if (typeof v === 'string' || typeof v === 'boolean') {\n const n = Number(v);\n\n return Number.isNaN(n) ? v : n;\n }\n\n return v;\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"number.js","names":["NumberSchema","Schema","value","ok","invalid","issue","ErrorCode","ctx","minimum","resolveMessage","message","m","atLeast","current","maximum","atMost","step"],"sources":["../../src/schemas/number.ts"],"sourcesContent":["import {\n atLeast,\n atMost,\n invalid,\n issue,\n type MaybePromise,\n ok,\n type ParseValue,\n type RunContext,\n resolveMessage,\n} from '../_parse';\nimport { Schema } from '../schema';\nimport { ErrorCode, type MessageFn, type SchemaDescriptor, type SchemaKind } from '../types';\n\ntype NumberMeta = {\n exclusiveMaximum: number;\n exclusiveMinimum: number;\n finite: true;\n integer: true;\n maximum: number;\n minimum: number;\n multipleOf: number;\n};\n\ntype ValueMessage = MessageFn<{ value: number }>;\n\nexport class NumberSchema<Input = number> extends Schema<number, Input> {\n override get kind(): SchemaKind {\n return 'number';\n }\n\n /** Accepts any `number` except `NaN`; `Infinity` passes unless `finite()` is added. */\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n return typeof value === 'number' && !Number.isNaN(value)\n ? ok(value)\n : invalid(value, issue(ErrorCode.invalid_type, ctx.messages.number.type()));\n }\n\n min(minimum: number, message?: MessageFn<{ min: number; value: number }>): this {\n return this._refine<NumberMeta>(\n (value) => value >= minimum,\n (value, m) =>\n issue(ErrorCode.too_small, resolveMessage(message ?? m.number.min, { min: minimum, value }), { min: minimum }),\n (current) => ({ minimum: atLeast(current.minimum, minimum) }),\n );\n }\n\n max(maximum: number, message?: MessageFn<{ max: number; value: number }>): this {\n return this._refine<NumberMeta>(\n (value) => value <= maximum,\n (value, m) =>\n issue(ErrorCode.too_big, resolveMessage(message ?? m.number.max, { max: maximum, value }), { max: maximum }),\n (current) => ({ maximum: atMost(current.maximum, maximum) }),\n );\n }\n\n positive(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n (value) => value > 0,\n (value, m) =>\n issue(ErrorCode.too_small, resolveMessage(message ?? m.number.positive, { value }), {\n exclusive: true,\n min: 0,\n }),\n (current) => ({ exclusiveMinimum: atLeast(current.exclusiveMinimum, 0) }),\n );\n }\n\n negative(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n (value) => value < 0,\n (value, m) =>\n issue(ErrorCode.too_big, resolveMessage(message ?? m.number.negative, { value }), { exclusive: true, max: 0 }),\n (current) => ({ exclusiveMaximum: atMost(current.exclusiveMaximum, 0) }),\n );\n }\n\n nonNegative(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n (value) => value >= 0,\n (value, m) => issue(ErrorCode.too_small, resolveMessage(message ?? m.number.nonNegative, { value }), { min: 0 }),\n (current) => ({ minimum: atLeast(current.minimum, 0) }),\n );\n }\n\n nonPositive(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n (value) => value <= 0,\n (value, m) => issue(ErrorCode.too_big, resolveMessage(message ?? m.number.nonPositive, { value }), { max: 0 }),\n (current) => ({ maximum: atMost(current.maximum, 0) }),\n );\n }\n\n int(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n Number.isInteger,\n (value, m) => issue(ErrorCode.invalid_integer, resolveMessage(message ?? m.number.int, { value })),\n () => ({ integer: true }),\n );\n }\n\n /** Integer within ±`Number.MAX_SAFE_INTEGER`. */\n safe(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n Number.isSafeInteger,\n (value, m) => issue(ErrorCode.invalid_safe, resolveMessage(message ?? m.number.safe, { value })),\n (current) => ({\n integer: true,\n maximum: atMost(current.maximum, Number.MAX_SAFE_INTEGER),\n minimum: atLeast(current.minimum, Number.MIN_SAFE_INTEGER),\n }),\n );\n }\n\n finite(message?: ValueMessage): this {\n return this._refine<NumberMeta>(\n Number.isFinite,\n (value, m) => issue(ErrorCode.invalid_finite, resolveMessage(message ?? m.number.finite, { value })),\n () => ({ finite: true }),\n );\n }\n\n /** Multiple of `step`, tolerant of binary floating-point error (e.g. `0.3` for step `0.1`). */\n multipleOf(step: number, message?: MessageFn<{ step: number; value: number }>): this {\n return this._refine<NumberMeta>(\n (value) => Math.abs(Math.round(value / step) - value / step) < 1e-9,\n (value, m) =>\n issue(ErrorCode.invalid_multiple_of, resolveMessage(message ?? m.number.multipleOf, { step, value }), { step }),\n () => ({ multipleOf: step }),\n );\n }\n\n protected override _describe(): SchemaDescriptor {\n return { ...this._describeBase(), ...(this.state.meta as Partial<NumberMeta>), kind: 'number' };\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- const e=require("../errors.cjs"),t=require("../core.cjs"),n=require("../types.cjs"),r=require("../safe-object.cjs"),i=require("./literal.cjs"),a=require("./union.cjs");var o=class o extends t.Schema{shape;_isRelaxed;get _kind(){return`object`}constructor(e,t=!1){super(),this.shape=Object.freeze(r.objectFromEntries(Object.entries(e))),this._isRelaxed=t}_unknownKeys(e){return Object.keys(e).filter(e=>!Object.hasOwn(this.shape,e))}_strictUnknownKeyIssues(e,t){if(this._isRelaxed)return[];let r=this._unknownKeys(e);return r.length===0?[]:[{code:n.ErrorCode.invalid_keys,message:t.messages.object.invalidKeys({keys:r}),params:{keys:r},path:[]}]}_copyRelaxedUnknownKeys(e,t){if(this._isRelaxed)for(let n of this._unknownKeys(e))r.isUnsafeObjectKey(n)||r.defineOwnProperty(t,n,e[n])}_guardObjectInput(e,t){return typeof e!=`object`||!e||Array.isArray(e)?{issues:[{code:n.ErrorCode.invalid_type,message:t.messages.object.type(),path:[]}],ok:!1}:{obj:e,ok:!0}}_createObjectParseContext(e,t){return{issues:[...this._strictUnknownKeyIssues(e,t)],output:{}}}_rebuildWith(e,t=this._isRelaxed){return this._copyStateTo(new o(e,t))}_parse(t,n){let i=this._guardObjectInput(t,n);if(!i.ok)return{data:t,issues:i.issues,typeOk:!1};let{obj:a}=i,{issues:o,output:s}=this._createObjectParseContext(a,n);for(let t of Object.keys(this.shape)){let i=this.shape[t]._parseFullSync(a[t],n);i.issues.length===0?r.defineOwnProperty(s,t,i.data):o.push(...e.prependIssuePath(i.issues,t))}return this._copyRelaxedUnknownKeys(a,s),{data:s,issues:o,typeOk:!0}}async _parseAsync(t,n){let i=this._guardObjectInput(t,n);if(!i.ok)return{data:t,issues:i.issues,typeOk:!1};let{obj:a}=i,{issues:o,output:s}=this._createObjectParseContext(a,n),c=Object.keys(this.shape),l=await Promise.all(c.map(e=>this.shape[e]._parseFullAsync(a[e],n)));for(let t=0;t<c.length;t++){let n=c[t],i=l[t];i.issues.length===0?r.defineOwnProperty(s,n,i.data):o.push(...e.prependIssuePath(i.issues,n))}return this._copyRelaxedUnknownKeys(a,s),{data:s,issues:o,typeOk:!0}}partial(...e){let t=e.length>0?new Set(e):null;return this._rebuildWith(r.objectFromEntries(Object.entries(this.shape).map(([e,n])=>[e,t===null||t.has(e)?n.optional():n])),this._isRelaxed)}optional(){return super.optional()}nullable(){return super.nullable()}nullish(){return super.nullish()}required(){return this._rebuildWith(r.objectFromEntries(Object.entries(this.shape).map(([e,t])=>[e,t.required()])),this._isRelaxed)}extend(e){return this._rebuildWith(r.objectFromEntries([...Object.entries(this.shape),...Object.entries(e)]),this._isRelaxed)}pick(...e){let t=new Set(e);return this._rebuildWith(r.objectFromEntries(Object.entries(this.shape).filter(([e])=>t.has(e))))}omit(...e){let t=new Set(e);return this._rebuildWith(r.objectFromEntries(Object.entries(this.shape).filter(([e])=>!t.has(e))))}defaults(){return this.parse({})}partialDefaults(){let e={};for(let t of Object.keys(this.shape)){let n=this.shape[t]._parseFullSync(void 0);n.issues.length===0&&r.defineOwnProperty(e,t,n.data)}return e}requiredFields(){return Object.keys(this.shape).filter(e=>!this.shape[e].isOptional)}optionalFields(){return Object.keys(this.shape).filter(e=>this.shape[e].isOptional)}relaxed(){return this._rebuildWith(this.shape,!0)}strict(){return this._rebuildWith(this.shape,!1)}keyof(){let e=Object.keys(this.shape).map(e=>new i.LiteralSchema(e));return new a.UnionSchema(e)}_toDescriptorImpl(){let e={};for(let[t,n]of Object.entries(this.shape))r.defineOwnProperty(e,t,n.definition());return{...this._describeBase(),fields:e,kind:`object`,strict:!this._isRelaxed}}merge(e){return this._rebuildWith(r.objectFromEntries([...Object.entries(this.shape),...Object.entries(e.shape)]),e._isRelaxed)}};exports.ObjectSchema=o;
1
+ const e=require("../_object.cjs"),t=require("../_parse.cjs"),n=require("../errors.cjs"),r=require("../schema.cjs"),i=require("../types.cjs"),a=require("./primitives.cjs");var o=class o extends r.Schema{shape;_unknownKeys;_tolerated;constructor(t,n=`strict`,r=[]){super(),this.shape=Object.freeze(e.objectFromEntries(Object.entries(t))),this._unknownKeys=n,this._tolerated=Object.freeze([...new Set(r)])}get kind(){return`object`}_parse(n,r){if(typeof n!=`object`||!n||Array.isArray(n))return t.invalid(n,t.issue(i.ErrorCode.invalid_type,r.messages.object.type()));let a=n,o=Object.keys(this.shape),s=Object.keys(a).filter(e=>!Object.hasOwn(this.shape,e)&&!this._tolerated.includes(e));return t.chain(t.all(o.map(e=>this.shape[e]._run(a[e],r))),n=>{let c=[],l={};if(s.length>0&&this._unknownKeys===`strict`&&c.push(t.issue(i.ErrorCode.invalid_keys,r.messages.object.invalidKeys({keys:s}),{keys:s})),n.forEach((n,r)=>{let i=o[r];n.issues.length>0?c.push(...t.prefixIssues(n.issues,i)):(n.value!==void 0||Object.hasOwn(a,i))&&e.defineOwnProperty(l,i,n.value)}),this._unknownKeys===`relaxed`)for(let t of s)e.isUnsafeObjectKey(t)||e.defineOwnProperty(l,t,a[t]);return{issues:c,typeOk:!0,value:l}})}relaxed(){return this._withShape(this.shape,`relaxed`)}strict(){return this._withShape(this.shape,`strict`)}tolerate(...e){return this._withShape(this.shape,this._unknownKeys,[...this._tolerated,...e])}extend(e){return this._derive({...this.shape,...e})}pick(...t){let n=e.objectFromEntries(Object.entries(this.shape).filter(([e])=>t.includes(e)));return this._derive(n)}omit(...t){let n=e.objectFromEntries(Object.entries(this.shape).filter(([e])=>!t.includes(e)));return this._derive(n)}partial(...t){return this._derive(e.objectFromEntries(Object.entries(this.shape).map(([e,n])=>[e,t.length===0||t.includes(e)?n.optional():n])))}keyof(){return new a.EnumSchema(Object.keys(this.shape))}_withShape(e,t=this._unknownKeys,n=this._tolerated){let r=new o(e,t,n);return r.state=this.state,r}_derive(e){let{catch:t,default:r,preprocess:i,steps:a}=this.state;if(a.length>0||i.length>0||t||r)throw new n.SpellDefinitionError(`Cannot derive a new shape from an object schema with checks, transforms, preprocessors, defaults, or catches. Derive the shape first, then add them.`);return this._withShape(e)}_describe(){let t={};for(let[n,r]of Object.entries(this.shape))e.defineOwnProperty(t,n,r.definition());return{...this._describeBase(),fields:t,kind:`object`,strict:this._unknownKeys===`strict`,...this._tolerated.length>0&&{tolerated:this._tolerated}}}};exports.ObjectSchema=o;
2
2
  //# sourceMappingURL=object.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"object.cjs","names":["Schema","objectFromEntries","ErrorCode","isUnsafeObjectKey","prependIssuePath","LiteralSchema","UnionSchema","require_errors","require_core","require_types","require_safe_object","require_literal","require_union","ObjectSchema","shape","isRelaxed","obj","k","unknownKeys","ctx","key","output","value","guarded","result","issues","keys","results","i","targetKeys","s","extra","keySet","parsed","schemas","fields","schema","other"],"sources":["../../src/schemas/object.ts"],"sourcesContent":["import type {\n AcceptsMissing,\n AnySchema,\n InferInput,\n InferOutput,\n Issue,\n ParseContext,\n ParseValue,\n SchemaDescriptor,\n} from '../core';\n\nimport { ErrorCode, prependIssuePath, Schema } from '../core';\nimport { defineOwnProperty, isUnsafeObjectKey, objectFromEntries } from '../safe-object';\nimport { LiteralSchema } from './literal';\nimport { UnionSchema } from './union';\n\nexport type ObjectShape = Record<string, AnySchema>;\nexport type InferObject<T extends ObjectShape> = { [K in keyof T]: InferOutput<T[K]> };\ntype OptionalInputKeys<T extends ObjectShape> = {\n [K in keyof T]: T[K] extends AcceptsMissing ? K : never;\n}[keyof T];\ntype Simplify<T> = { [K in keyof T]: T[K] };\nexport type InferObjectInput<T extends ObjectShape> = Simplify<\n { [K in Exclude<keyof T, OptionalInputKeys<T>>]: InferInput<T[K]> } & {\n [K in OptionalInputKeys<T>]?: InferInput<T[K]>;\n }\n>;\n\nexport class ObjectSchema<T extends ObjectShape> extends Schema<InferObject<T>, InferObjectInput<T>> {\n readonly shape: T;\n private readonly _isRelaxed: boolean;\n\n protected override get _kind(): string {\n return 'object';\n }\n\n constructor(shape: T, isRelaxed = false) {\n super();\n this.shape = Object.freeze(objectFromEntries(Object.entries(shape))) as T;\n this._isRelaxed = isRelaxed;\n }\n\n private _unknownKeys(obj: Record<string, unknown>): string[] {\n return Object.keys(obj).filter((k) => !Object.hasOwn(this.shape, k));\n }\n\n private _strictUnknownKeyIssues(obj: Record<string, unknown>, ctx: ParseContext): Issue[] {\n if (this._isRelaxed) return [];\n\n const unknownKeys = this._unknownKeys(obj);\n\n if (unknownKeys.length === 0) return [];\n\n return [\n {\n code: ErrorCode.invalid_keys,\n message: ctx.messages.object.invalidKeys({ keys: unknownKeys }),\n params: { keys: unknownKeys },\n path: [],\n },\n ];\n }\n\n private _copyRelaxedUnknownKeys(obj: Record<string, unknown>, output: Record<string, unknown>): void {\n if (!this._isRelaxed) return;\n\n for (const key of this._unknownKeys(obj)) {\n // Skip keys that trigger inherited setters (e.g. __proto__) to prevent\n // prototype mutation on the output object.\n if (isUnsafeObjectKey(key)) continue;\n\n defineOwnProperty(output, key, obj[key]);\n }\n }\n\n private _guardObjectInput(\n value: unknown,\n ctx: ParseContext,\n ): { obj: Record<string, unknown>; ok: true } | { issues: Issue[]; ok: false } {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return {\n issues: [{ code: ErrorCode.invalid_type, message: ctx.messages.object.type(), path: [] }],\n ok: false,\n };\n }\n\n return { obj: value as Record<string, unknown>, ok: true };\n }\n\n private _createObjectParseContext(\n obj: Record<string, unknown>,\n ctx: ParseContext,\n ): {\n issues: Issue[];\n output: Record<string, unknown>;\n } {\n return {\n issues: [...this._strictUnknownKeyIssues(obj, ctx)],\n output: {},\n };\n }\n\n private _rebuildWith<U extends ObjectShape>(shape: U, isRelaxed = this._isRelaxed): ObjectSchema<U> {\n return this._copyStateTo(new ObjectSchema(shape, isRelaxed)) as unknown as ObjectSchema<U>;\n }\n\n protected override _parse(value: unknown, ctx: ParseContext): ParseValue {\n const guarded = this._guardObjectInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, ctx);\n\n for (const key of Object.keys(this.shape)) {\n const fieldSchema = this.shape[key];\n const result = fieldSchema._parseFullSync(obj[key], ctx);\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n // Failed field keys are intentionally omitted from parsed output so\n // object-level checks can branch on key presence.\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n return { data: output, issues, typeOk: true };\n }\n\n protected override async _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue> {\n const guarded = this._guardObjectInput(value, ctx);\n\n if (!guarded.ok) return { data: value, issues: guarded.issues, typeOk: false };\n\n const { obj } = guarded;\n const { issues, output } = this._createObjectParseContext(obj, ctx);\n\n const keys = Object.keys(this.shape);\n const results = await Promise.all(keys.map((key) => this.shape[key]._parseFullAsync(obj[key], ctx)));\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const result = results[i];\n\n if (result.issues.length === 0) {\n defineOwnProperty(output, key, result.data);\n } else {\n issues.push(...prependIssuePath(result.issues, key));\n }\n }\n\n this._copyRelaxedUnknownKeys(obj, output);\n\n return { data: output, issues, typeOk: true };\n }\n\n partial(): ObjectSchema<{\n [K in keyof T]: Schema<InferOutput<T[K]> | undefined, InferInput<T[K]> | undefined> & AcceptsMissing;\n }>;\n partial<K extends keyof T>(\n ...keys: K[]\n ): ObjectSchema<\n Omit<T, K> & {\n [P in K]: Schema<InferOutput<T[P]> | undefined, InferInput<T[P]> | undefined> & AcceptsMissing;\n }\n >;\n partial<K extends keyof T>(...keys: K[]): ObjectSchema<any> {\n const targetKeys = keys.length > 0 ? new Set(keys as string[]) : null;\n\n return this._rebuildWith(\n objectFromEntries(\n Object.entries(this.shape).map(([k, s]) => [k, targetKeys === null || targetKeys.has(k) ? s.optional() : s]),\n ) as any,\n this._isRelaxed,\n );\n }\n\n override optional(): ObjectSchema<T> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined> &\n AcceptsMissing {\n return super.optional() as ObjectSchema<T> &\n Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined> &\n AcceptsMissing;\n }\n\n override nullable(): ObjectSchema<T> & Schema<InferObject<T> | null, InferObjectInput<T> | null> {\n return super.nullable() as ObjectSchema<T> & Schema<InferObject<T> | null, InferObjectInput<T> | null>;\n }\n\n override nullish(): ObjectSchema<T> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined> &\n AcceptsMissing {\n return super.nullish() as ObjectSchema<T> &\n Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined> &\n AcceptsMissing;\n }\n\n override required(): ObjectSchema<T> &\n Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>> {\n return this._rebuildWith(\n objectFromEntries(Object.entries(this.shape).map(([k, s]) => [k, s.required()])) as any,\n this._isRelaxed,\n ) as ObjectSchema<T> & Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>>;\n }\n\n extend<U extends ObjectShape>(extra: U): ObjectSchema<Omit<T, keyof U> & U> {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(extra)]) as any,\n this._isRelaxed,\n );\n }\n\n pick<K extends keyof T>(...keys: K[]): ObjectSchema<Pick<T, K>> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => keySet.has(k))) as any);\n }\n\n omit<K extends keyof T>(...keys: K[]): ObjectSchema<Omit<T, K>> {\n const keySet = new Set(keys as string[]);\n\n return this._rebuildWith(objectFromEntries(Object.entries(this.shape).filter(([k]) => !keySet.has(k))) as any);\n }\n\n /**\n * Returns a fully default-filled object by parsing `{}` against this schema.\n * Every required field must have a `.default()` value set; if any required\n * field is missing a default, this method throws a `SpellValidationError`.\n *\n * @example\n * const Config = s.object({ host: s.string().default('localhost'), port: s.number().default(3000) });\n * Config.defaults(); // { host: 'localhost', port: 3000 }\n */\n defaults(): InferObject<T> {\n return this.parse({});\n }\n\n /**\n * Returns a partial object containing only the fields that have a default value set.\n * Fields without a `.default()` or `.catch()` are silently omitted rather than throwing.\n *\n * Useful for pre-filling forms where only some fields have defaults.\n *\n * @example\n * const Form = s.object({ name: s.string(), role: s.string().default('viewer') });\n * Form.partialDefaults(); // { role: 'viewer' }; name is omitted\n */\n partialDefaults(): Partial<InferObject<T>> {\n const result: Record<string, unknown> = {};\n\n for (const key of Object.keys(this.shape)) {\n const parsed = this.shape[key]._parseFullSync(undefined);\n\n if (parsed.issues.length === 0) {\n defineOwnProperty(result, key, parsed.data);\n }\n }\n\n return result as Partial<InferObject<T>>;\n }\n\n /**\n * Returns an array of field keys that are **required** (not optional and not nullish).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.requiredFields(); // ['id']\n */\n requiredFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => !this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Returns an array of field keys that are **optional** (accept `undefined`).\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string().optional() });\n * User.optionalFields(); // ['name']\n */\n optionalFields(): (keyof T & string)[] {\n return Object.keys(this.shape).filter((k) => this.shape[k].isOptional) as (keyof T & string)[];\n }\n\n /**\n * Allow additional unknown properties (relaxed mode).\n * Default is strict mode (rejects unknown keys).\n *\n * Returns `ObjectSchema<T>` so fluent methods like `.pick()`, `.omit()`,\n * `.extend()`, and `.partial()` remain usable after calling `.relaxed()`.\n */\n relaxed(): ObjectSchema<T> {\n return this._rebuildWith(this.shape, true);\n }\n\n /**\n * Alias for the default strict mode: rejects unknown keys.\n * Useful after calling `.relaxed()` to return a new strict schema.\n */\n strict(): ObjectSchema<T> {\n return this._rebuildWith(this.shape, false);\n }\n\n /**\n * Returns a union schema of the object's key names as literal schemas.\n *\n * @example\n * const User = s.object({ id: s.number(), name: s.string() });\n * User.keyof(); // UnionSchema: validates 'id' | 'name'\n */\n keyof(): UnionSchema<readonly [LiteralSchema<keyof T & string>, ...LiteralSchema<keyof T & string>[]]> {\n const keys = Object.keys(this.shape) as (keyof T & string)[];\n const schemas = keys.map((k) => new LiteralSchema(k)) as unknown as readonly [\n LiteralSchema<keyof T & string>,\n ...LiteralSchema<keyof T & string>[],\n ];\n\n return new UnionSchema(schemas);\n }\n\n protected override _toDescriptorImpl(): SchemaDescriptor {\n const fields: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of Object.entries(this.shape)) {\n defineOwnProperty(fields, key, schema.definition());\n }\n\n return { ...this._describeBase(), fields, kind: 'object', strict: !this._isRelaxed };\n }\n\n merge<U extends ObjectShape>(other: ObjectSchema<U>): ObjectSchema<T & U> {\n return this._rebuildWith(\n objectFromEntries([...Object.entries(this.shape), ...Object.entries(other.shape)]) as any,\n other._isRelaxed,\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"object.cjs","names":["Schema","objectFromEntries","invalid","issue","ErrorCode","chain","all","prefixIssues","isUnsafeObjectKey","EnumSchema","SpellDefinitionError","require__object","require__parse","require_errors","require_schema","require_types","require_primitives","ObjectSchema","shape","unknownKeys","tolerated","value","ctx","input","keys","key","issues","output","results","index","result","extra","schema","next","fallback","defaultValue","steps","preprocess","fields"],"sources":["../../src/schemas/object.ts"],"sourcesContent":["import { defineOwnProperty, isUnsafeObjectKey, objectFromEntries } from '../_object';\nimport {\n all,\n chain,\n invalid,\n issue,\n type MaybePromise,\n type ParseValue,\n prefixIssues,\n type RunContext,\n} from '../_parse';\nimport { SpellDefinitionError } from '../errors';\nimport { Schema } from '../schema';\nimport {\n type AcceptsMissing,\n type AnySchema,\n ErrorCode,\n type InferInput,\n type InferOutput,\n type Issue,\n type SchemaDescriptor,\n type SchemaKind,\n} from '../types';\nimport { EnumSchema } from './primitives';\n\nexport type ObjectShape = Record<string, AnySchema>;\n\ntype Simplify<T> = { [K in keyof T]: T[K] };\ntype OptionalInputKeys<T extends ObjectShape> = { [K in keyof T]: T[K] extends AcceptsMissing ? K : never }[keyof T];\n\nexport type InferObject<T extends ObjectShape> = { [K in keyof T]: InferOutput<T[K]> };\nexport type InferObjectInput<T extends ObjectShape> = Simplify<\n { [K in Exclude<keyof T, OptionalInputKeys<T>>]: InferInput<T[K]> } & {\n [K in OptionalInputKeys<T>]?: InferInput<T[K]>;\n }\n>;\n\ntype Optional<S extends AnySchema> = Schema<InferOutput<S> | undefined, InferInput<S> | undefined> & AcceptsMissing;\n\n/** How keys outside the shape are handled: `strict` rejects them, `relaxed` keeps them. */\ntype UnknownKeys = 'relaxed' | 'strict';\n\nexport class ObjectSchema<T extends ObjectShape> extends Schema<InferObject<T>, InferObjectInput<T>> {\n readonly shape: T;\n private readonly _unknownKeys: UnknownKeys;\n private readonly _tolerated: readonly string[];\n\n constructor(shape: T, unknownKeys: UnknownKeys = 'strict', tolerated: readonly string[] = []) {\n super();\n this.shape = Object.freeze(objectFromEntries(Object.entries(shape))) as T;\n this._unknownKeys = unknownKeys;\n this._tolerated = Object.freeze([...new Set(tolerated)]);\n }\n\n override get kind(): SchemaKind {\n return 'object';\n }\n\n /**\n * Field failures are reported per key and the failed keys are left out of the output, so\n * object-level checks still run and can branch on key presence.\n */\n protected override _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue> {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return invalid(value, issue(ErrorCode.invalid_type, ctx.messages.object.type()));\n }\n\n const input = value as Record<string, unknown>;\n const keys = Object.keys(this.shape);\n const unknownKeys = Object.keys(input).filter(\n (key) => !Object.hasOwn(this.shape, key) && !this._tolerated.includes(key),\n );\n\n return chain(all(keys.map((key) => this.shape[key]!._run(input[key], ctx))), (results) => {\n const issues: Issue[] = [];\n const output: Record<string, unknown> = {};\n\n if (unknownKeys.length > 0 && this._unknownKeys === 'strict') {\n issues.push(\n issue(ErrorCode.invalid_keys, ctx.messages.object.invalidKeys({ keys: unknownKeys }), { keys: unknownKeys }),\n );\n }\n\n results.forEach((result, index) => {\n const key = keys[index]!;\n\n if (result.issues.length > 0) issues.push(...prefixIssues(result.issues, key));\n else if (result.value !== undefined || Object.hasOwn(input, key)) defineOwnProperty(output, key, result.value);\n });\n\n if (this._unknownKeys === 'relaxed') {\n for (const key of unknownKeys) if (!isUnsafeObjectKey(key)) defineOwnProperty(output, key, input[key]);\n }\n\n return { issues, typeOk: true, value: output };\n });\n }\n\n /* -------------------- Unknown keys -------------------- */\n\n /** Keeps keys outside the shape in the output instead of rejecting them. */\n relaxed(): this {\n return this._withShape(this.shape, 'relaxed') as unknown as this;\n }\n\n /** Rejects keys outside the shape with `invalid_keys` (the default). */\n strict(): this {\n return this._withShape(this.shape, 'strict') as unknown as this;\n }\n\n /**\n * Accepts and drops the named keys, e.g. fields that records saved by an older schema version\n * still carry. Other unknown keys are handled as before.\n */\n tolerate(...keys: string[]): this {\n return this._withShape(this.shape, this._unknownKeys, [...this._tolerated, ...keys]) as unknown as this;\n }\n\n /* -------------------- Shape derivation -------------------- */\n\n extend<U extends ObjectShape>(extra: U): ObjectSchema<Simplify<Omit<T, keyof U> & U>> {\n return this._derive({ ...this.shape, ...extra }) as unknown as ObjectSchema<Simplify<Omit<T, keyof U> & U>>;\n }\n\n pick<K extends keyof T & string>(...keys: K[]): ObjectSchema<Pick<T, K>> {\n const shape = objectFromEntries(Object.entries(this.shape).filter(([key]) => keys.includes(key as K)));\n\n return this._derive(shape as Pick<T, K>);\n }\n\n omit<K extends keyof T & string>(...keys: K[]): ObjectSchema<Omit<T, K>> {\n const shape = objectFromEntries(Object.entries(this.shape).filter(([key]) => !keys.includes(key as K)));\n\n return this._derive(shape as Omit<T, K>);\n }\n\n /** Makes the named fields (or all fields) optional. */\n partial(): ObjectSchema<{ [K in keyof T]: Optional<T[K]> }>;\n partial<K extends keyof T & string>(...keys: K[]): ObjectSchema<Simplify<Omit<T, K> & { [P in K]: Optional<T[P]> }>>;\n partial(...keys: string[]): unknown {\n return this._derive(\n objectFromEntries(\n Object.entries(this.shape).map(([key, schema]) => [\n key,\n keys.length === 0 || keys.includes(key) ? schema.optional() : schema,\n ]),\n ),\n );\n }\n\n /** An enum schema of this object's keys. */\n keyof(): EnumSchema<[keyof T & string, ...(keyof T & string)[]]> {\n return new EnumSchema(Object.keys(this.shape) as [keyof T & string, ...(keyof T & string)[]]);\n }\n\n /**\n * Same unknown-key policy and state on a new shape.\n * @internal Also used by `discriminatedUnion()` to add the discriminator literal to a branch.\n */\n _withShape<U extends ObjectShape>(\n shape: U,\n unknownKeys: UnknownKeys = this._unknownKeys,\n tolerated: readonly string[] = this._tolerated,\n ): ObjectSchema<U> {\n const next = new ObjectSchema(shape, unknownKeys, tolerated);\n\n next.state = this.state;\n\n return next;\n }\n\n /** Derivations change the value type, so runtime behavior written for the old shape cannot carry over. */\n private _derive<U extends ObjectShape>(shape: U): ObjectSchema<U> {\n const { catch: fallback, default: defaultValue, preprocess, steps } = this.state;\n\n if (steps.length > 0 || preprocess.length > 0 || fallback || defaultValue) {\n throw new SpellDefinitionError(\n 'Cannot derive a new shape from an object schema with checks, transforms, preprocessors, defaults, or catches. Derive the shape first, then add them.',\n );\n }\n\n return this._withShape(shape);\n }\n\n protected override _describe(): SchemaDescriptor {\n const fields: Record<string, SchemaDescriptor> = {};\n\n for (const [key, schema] of Object.entries(this.shape)) defineOwnProperty(fields, key, schema.definition());\n\n return {\n ...this._describeBase(),\n fields,\n kind: 'object',\n strict: this._unknownKeys === 'strict',\n ...(this._tolerated.length > 0 && { tolerated: this._tolerated }),\n };\n }\n}\n"],"mappings":"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"}
@@ -1,108 +1,60 @@
1
- import type { AcceptsMissing, AnySchema, InferInput, InferOutput, ParseContext, ParseValue, SchemaDescriptor } from '../core';
2
- import { Schema } from '../core';
3
- import { LiteralSchema } from './literal';
4
- import { UnionSchema } from './union';
1
+ import { type MaybePromise, type ParseValue, type RunContext } from '../_parse';
2
+ import { Schema } from '../schema';
3
+ import { type AcceptsMissing, type AnySchema, type InferInput, type InferOutput, type SchemaDescriptor, type SchemaKind } from '../types';
4
+ import { EnumSchema } from './primitives';
5
5
  export type ObjectShape = Record<string, AnySchema>;
6
- export type InferObject<T extends ObjectShape> = {
7
- [K in keyof T]: InferOutput<T[K]>;
6
+ type Simplify<T> = {
7
+ [K in keyof T]: T[K];
8
8
  };
9
9
  type OptionalInputKeys<T extends ObjectShape> = {
10
10
  [K in keyof T]: T[K] extends AcceptsMissing ? K : never;
11
11
  }[keyof T];
12
- type Simplify<T> = {
13
- [K in keyof T]: T[K];
12
+ export type InferObject<T extends ObjectShape> = {
13
+ [K in keyof T]: InferOutput<T[K]>;
14
14
  };
15
15
  export type InferObjectInput<T extends ObjectShape> = Simplify<{
16
16
  [K in Exclude<keyof T, OptionalInputKeys<T>>]: InferInput<T[K]>;
17
17
  } & {
18
18
  [K in OptionalInputKeys<T>]?: InferInput<T[K]>;
19
19
  }>;
20
+ type Optional<S extends AnySchema> = Schema<InferOutput<S> | undefined, InferInput<S> | undefined> & AcceptsMissing;
21
+ /** How keys outside the shape are handled: `strict` rejects them, `relaxed` keeps them. */
22
+ type UnknownKeys = 'relaxed' | 'strict';
20
23
  export declare class ObjectSchema<T extends ObjectShape> extends Schema<InferObject<T>, InferObjectInput<T>> {
21
24
  readonly shape: T;
22
- private readonly _isRelaxed;
23
- protected get _kind(): string;
24
- constructor(shape: T, isRelaxed?: boolean);
25
- private _unknownKeys;
26
- private _strictUnknownKeyIssues;
27
- private _copyRelaxedUnknownKeys;
28
- private _guardObjectInput;
29
- private _createObjectParseContext;
30
- private _rebuildWith;
31
- protected _parse(value: unknown, ctx: ParseContext): ParseValue;
32
- protected _parseAsync(value: unknown, ctx: ParseContext): Promise<ParseValue>;
33
- partial(): ObjectSchema<{
34
- [K in keyof T]: Schema<InferOutput<T[K]> | undefined, InferInput<T[K]> | undefined> & AcceptsMissing;
35
- }>;
36
- partial<K extends keyof T>(...keys: K[]): ObjectSchema<Omit<T, K> & {
37
- [P in K]: Schema<InferOutput<T[P]> | undefined, InferInput<T[P]> | undefined> & AcceptsMissing;
38
- }>;
39
- optional(): ObjectSchema<T> & Schema<InferObject<T> | undefined, InferObjectInput<T> | undefined> & AcceptsMissing;
40
- nullable(): ObjectSchema<T> & Schema<InferObject<T> | null, InferObjectInput<T> | null>;
41
- nullish(): ObjectSchema<T> & Schema<InferObject<T> | null | undefined, InferObjectInput<T> | null | undefined> & AcceptsMissing;
42
- required(): ObjectSchema<T> & Schema<Exclude<InferObject<T>, undefined>, Exclude<InferObjectInput<T>, undefined>>;
43
- extend<U extends ObjectShape>(extra: U): ObjectSchema<Omit<T, keyof U> & U>;
44
- pick<K extends keyof T>(...keys: K[]): ObjectSchema<Pick<T, K>>;
45
- omit<K extends keyof T>(...keys: K[]): ObjectSchema<Omit<T, K>>;
25
+ private readonly _unknownKeys;
26
+ private readonly _tolerated;
27
+ constructor(shape: T, unknownKeys?: UnknownKeys, tolerated?: readonly string[]);
28
+ get kind(): SchemaKind;
46
29
  /**
47
- * Returns a fully default-filled object by parsing `{}` against this schema.
48
- * Every required field must have a `.default()` value set; if any required
49
- * field is missing a default, this method throws a `SpellValidationError`.
50
- *
51
- * @example
52
- * const Config = s.object({ host: s.string().default('localhost'), port: s.number().default(3000) });
53
- * Config.defaults(); // { host: 'localhost', port: 3000 }
30
+ * Field failures are reported per key and the failed keys are left out of the output, so
31
+ * object-level checks still run and can branch on key presence.
54
32
  */
55
- defaults(): InferObject<T>;
33
+ protected _parse(value: unknown, ctx: RunContext): MaybePromise<ParseValue>;
34
+ /** Keeps keys outside the shape in the output instead of rejecting them. */
35
+ relaxed(): this;
36
+ /** Rejects keys outside the shape with `invalid_keys` (the default). */
37
+ strict(): this;
56
38
  /**
57
- * Returns a partial object containing only the fields that have a default value set.
58
- * Fields without a `.default()` or `.catch()` are silently omitted rather than throwing.
59
- *
60
- * Useful for pre-filling forms where only some fields have defaults.
61
- *
62
- * @example
63
- * const Form = s.object({ name: s.string(), role: s.string().default('viewer') });
64
- * Form.partialDefaults(); // { role: 'viewer' }; name is omitted
39
+ * Accepts and drops the named keys, e.g. fields that records saved by an older schema version
40
+ * still carry. Other unknown keys are handled as before.
65
41
  */
66
- partialDefaults(): Partial<InferObject<T>>;
67
- /**
68
- * Returns an array of field keys that are **required** (not optional and not nullish).
69
- *
70
- * @example
71
- * const User = s.object({ id: s.number(), name: s.string().optional() });
72
- * User.requiredFields(); // ['id']
73
- */
74
- requiredFields(): (keyof T & string)[];
75
- /**
76
- * Returns an array of field keys that are **optional** (accept `undefined`).
77
- *
78
- * @example
79
- * const User = s.object({ id: s.number(), name: s.string().optional() });
80
- * User.optionalFields(); // ['name']
81
- */
82
- optionalFields(): (keyof T & string)[];
83
- /**
84
- * Allow additional unknown properties (relaxed mode).
85
- * Default is strict mode (rejects unknown keys).
86
- *
87
- * Returns `ObjectSchema<T>` so fluent methods like `.pick()`, `.omit()`,
88
- * `.extend()`, and `.partial()` remain usable after calling `.relaxed()`.
89
- */
90
- relaxed(): ObjectSchema<T>;
91
- /**
92
- * Alias for the default strict mode: rejects unknown keys.
93
- * Useful after calling `.relaxed()` to return a new strict schema.
94
- */
95
- strict(): ObjectSchema<T>;
96
- /**
97
- * Returns a union schema of the object's key names as literal schemas.
98
- *
99
- * @example
100
- * const User = s.object({ id: s.number(), name: s.string() });
101
- * User.keyof(); // UnionSchema: validates 'id' | 'name'
102
- */
103
- keyof(): UnionSchema<readonly [LiteralSchema<keyof T & string>, ...LiteralSchema<keyof T & string>[]]>;
104
- protected _toDescriptorImpl(): SchemaDescriptor;
105
- merge<U extends ObjectShape>(other: ObjectSchema<U>): ObjectSchema<T & U>;
42
+ tolerate(...keys: string[]): this;
43
+ extend<U extends ObjectShape>(extra: U): ObjectSchema<Simplify<Omit<T, keyof U> & U>>;
44
+ pick<K extends keyof T & string>(...keys: K[]): ObjectSchema<Pick<T, K>>;
45
+ omit<K extends keyof T & string>(...keys: K[]): ObjectSchema<Omit<T, K>>;
46
+ /** Makes the named fields (or all fields) optional. */
47
+ partial(): ObjectSchema<{
48
+ [K in keyof T]: Optional<T[K]>;
49
+ }>;
50
+ partial<K extends keyof T & string>(...keys: K[]): ObjectSchema<Simplify<Omit<T, K> & {
51
+ [P in K]: Optional<T[P]>;
52
+ }>>;
53
+ /** An enum schema of this object's keys. */
54
+ keyof(): EnumSchema<[keyof T & string, ...(keyof T & string)[]]>;
55
+ /** Derivations change the value type, so runtime behavior written for the old shape cannot carry over. */
56
+ private _derive;
57
+ protected _describe(): SchemaDescriptor;
106
58
  }
107
59
  export {};
108
60
  //# sourceMappingURL=object.d.ts.map